From d92c222625b5b56e1c4b514984437f7e48012ee6 Mon Sep 17 00:00:00 2001 From: Tira Odhner Date: Mon, 20 Mar 2017 16:59:56 -0400 Subject: [PATCH 1/3] Extract acitree event handling so it can be tested --- .../browser/templates/browser/js/browser.js | 100 +------------------ web/pgadmin/static/js/handle_acitree_events.js | 106 +++++++++++++++++++++ 2 files changed, 111 insertions(+), 95 deletions(-) create mode 100644 web/pgadmin/static/js/handle_acitree_events.js diff --git a/web/pgadmin/browser/templates/browser/js/browser.js b/web/pgadmin/browser/templates/browser/js/browser.js index d2e5dd7c..9d22da93 100644 --- a/web/pgadmin/browser/templates/browser/js/browser.js +++ b/web/pgadmin/browser/templates/browser/js/browser.js @@ -1,6 +1,8 @@ define('pgadmin.browser', ['require', 'jquery', 'underscore', 'underscore.string', 'bootstrap', - 'pgadmin', 'alertify', 'codemirror', 'codemirror/mode/sql/sql', 'wcdocker', + 'pgadmin', 'alertify', 'codemirror', + 'sources/handle_acitree_events', + 'codemirror/mode/sql/sql', 'wcdocker', 'jquery.contextmenu', 'jquery.aciplugin', 'jquery.acitree', 'pgadmin.alertifyjs', 'pgadmin.browser.messages', 'pgadmin.browser.menu', 'pgadmin.browser.panel', @@ -8,7 +10,7 @@ define('pgadmin.browser', 'pgadmin.browser.node', 'pgadmin.browser.collection' ], -function(require, $, _, S, Bootstrap, pgAdmin, Alertify, CodeMirror) { +function(require, $, _, S, Bootstrap, pgAdmin, Alertify, CodeMirror, handleAciTreeEvents) { // Some scripts do export their object in the window only. // Generally the one, which do no have AMD support. @@ -411,99 +413,7 @@ function(require, $, _, S, Bootstrap, pgAdmin, Alertify, CodeMirror) { }); // Treeview event handler - $('#tree').on('acitree', function(event, api, item, eventName, options) { - var d = item ? obj.tree.itemData(item) : null; - - switch (eventName) { - // When a node is added in the browser tree, we need to - // load the registered scripts - case "added": - if (d) { - /* Loading all the scripts registered to be loaded on this node */ - if (obj.scripts && obj.scripts[d._type]) { - var scripts = _.extend({}, obj.scripts[d._type]); - - /* - * We can remove it from the Browser.scripts object as - * these're about to be loaded. - * - * This will make sure that we check for the script to be - * loaded only once. - * - */ - delete obj.scripts[d._type]; - - setTimeout(function() { - _.each(scripts, function(s) { - if (!s.loaded) { - require([s.name], function(m) { - s.loaded = true; - // Call the initializer (if present) - if (m && m.init && typeof m.init == 'function') { - try { - m.init(); - obj.Events.trigger( - 'pgadmin:module:' + s.name + ':initialized', m, obj - ); - } catch (err) { - console.log("Error running module init script for '" + s.path + "'"); - console.log(err); - - obj.report_error( - '{{ _('Error Initializing script - ') }}' + s.path, err); - } - } - }, function() { - console.log("Error loading script - " + s.path); - console.log(arguments); - obj.report_error( - '{{ _('Error loading script - ') }}' + s.path); - }).bind(s); - } - }); - }, 1); - } - } - break; - } - - var node; - - if (d && obj.Nodes[d._type]) { - node = obj.Nodes[d._type]; - - /* If the node specific callback returns false, we will also return - * false for further processing. - */ - if (_.isObject(node.callbacks) && - eventName in node.callbacks && - typeof node.callbacks[eventName] == 'function' && - !node.callbacks[eventName].apply( - node, [item, d, obj, options, eventName])) { - return false; - } - /* Raise tree events for the nodes */ - try { - node.trigger( - 'browser-node.' + eventName, node, item, d - ); - } catch (e) { - console.log(e); - } - } - - try { - obj.Events.trigger( - 'pgadmin-browser:tree', eventName, item, d - ); - obj.Events.trigger( - 'pgadmin-browser:tree:' + eventName, item, d, node - ); - } catch (e) { - console.log(e); - } - return true; - }); + $('#tree').on('acitree', handleAciTreeEvents.bind(this)); // There are some scripts which needed to be loaded immediately, // but - not all. We will will need to generate all the menus only diff --git a/web/pgadmin/static/js/handle_acitree_events.js b/web/pgadmin/static/js/handle_acitree_events.js new file mode 100644 index 00000000..99f9b0fe --- /dev/null +++ b/web/pgadmin/static/js/handle_acitree_events.js @@ -0,0 +1,106 @@ +/************************************************************************* + * + * pgAdmin 4 - PostgreSQL Tools + * + * Copyright (C) 2013 - 2017, The pgAdmin Development Team + * This software is released under the PostgreSQL Licence + * + **************************************************************************/ + +define(['sources/translate'], function (translate) { + return function (event, api, item, eventName, options) { + var obj = this; + var d = item ? obj.tree.itemData(item) : null; + + switch (eventName) { + // When a node is added in the browser tree, we need to + // load the registered scripts + case "added": + if (d) { + /* Loading all the scripts registered to be loaded on this node */ + if (obj.scripts && obj.scripts[d._type]) { + var scripts = _.extend({}, obj.scripts[d._type]); + + /* + * We can remove it from the Browser.scripts object as + * these're about to be loaded. + * + * This will make sure that we check for the script to be + * loaded only once. + * + */ + delete obj.scripts[d._type]; + + setTimeout(function () { + _.each(scripts, function (s) { + if (!s.loaded) { + require([s.name], function (m) { + s.loaded = true; + // Call the initializer (if present) + if (m && m.init && typeof m.init == 'function') { + try { + m.init(); + obj.Events.trigger( + 'pgadmin:module:' + s.name + ':initialized', m, obj + ); + } catch (err) { + console.log("Error running module init script for '" + s.path + "'"); + console.log(err); + + obj.report_error( + translate('Error Initializing script - %{path}s', {path: s.path}), err); + } + } + }, function () { + console.log("Error loading script - " + s.path); + console.log(arguments); + obj.report_error( + translate('Error loading script - %{path}s', {path: s.path})); + }).bind(s); + } + }); + }, 1); + } + } + break; + + } + + var node; + + if (d && obj.Nodes[d._type]) { + node = obj.Nodes[d._type]; + + /* If the node specific callback returns false, we will also return + * false for further processing. + */ + if (_.isObject(node.callbacks) && + eventName in node.callbacks && + typeof node.callbacks[eventName] == 'function' && !node.callbacks[eventName].apply( + node, [item, d, obj, options, eventName])) { + return false; + } + /* Raise tree events for the nodes */ + try { + node.trigger( + 'browser-node.' + eventName, node, item, d + ); + } catch (e) { + console.log(e); + } + } + + try { + obj.Events.trigger( + 'pgadmin-browser:tree', eventName, item, d + ); + obj.Events.trigger( + 'pgadmin-browser:tree:' + eventName, item, d, node + ); + } catch (e) { + console.log(e); + } + return true; + } + } +); \ No newline at end of file -- 2.12.0