Implementation of the client side 'url_for(...)' function.

Created a url_for function module to be used by different javascript
modules to use the same functionality of flask at client side.

A python module can expose the list of endpoints, used by its
javascripts, by overriding the 'get_exposed_url_endpoints(self)'
function.

In this patch, we have modified all the browser modules to use this
function. It will allow us to move the majority of the javascript
modules of browser nodes from templates directory to the static
directory.

TODO::
- Move these javascripts modules to the static directory.
- Use this function in all the applicable javascript modules.
  e.g. tools, miscellaneous modules
This commit is contained in:
Ashesh Vashi 2017-06-12 12:01:22 +05:30
parent dea850b503
commit fd3ddbeafb
67 changed files with 449 additions and 286 deletions

View File

@ -19,7 +19,8 @@ module.exports = function(config) {
{pattern: 'regression/javascript/**/*.js', included: false}, {pattern: 'regression/javascript/**/*.js', included: false},
{pattern: 'pgadmin/static/vendor/**/*.js', included: false}, {pattern: 'pgadmin/static/vendor/**/*.js', included: false},
{pattern: 'pgadmin/static/js/**/*.js', included: false}, {pattern: 'pgadmin/static/js/**/*.js', included: false},
{pattern: 'pgadmin/browser/static/js/**/*.js', included: false} {pattern: 'pgadmin/browser/static/js/**/*.js', included: false},
{pattern: 'pgadmin/static/img/*.png', included: false}
], ],

View File

@ -86,6 +86,16 @@ class PgAdmin(Flask):
messages.update(getattr(module, "messages", dict())) messages.update(getattr(module, "messages", dict()))
return messages return messages
@property
def exposed_endpoint_url_map(self):
for rule in current_app.url_map.iter_rules('static'):
yield rule.endpoint, rule.rule
for module in self.submodules:
for endpoint in module.exposed_endpoints:
for rule in current_app.url_map.iter_rules(endpoint):
yield rule.endpoint, rule.rule
@property @property
def javascripts(self): def javascripts(self):
scripts = [] scripts = []

View File

@ -12,7 +12,7 @@ from abc import ABCMeta, abstractmethod, abstractproperty
import six import six
from flask import current_app, render_template, url_for, make_response, flash,\ from flask import current_app, render_template, url_for, make_response, flash,\
Response, request Response
from flask_babel import gettext from flask_babel import gettext
from flask_login import current_user from flask_login import current_user
from flask_security import login_required from flask_security import login_required
@ -152,6 +152,7 @@ class BrowserModule(PgAdminModule):
for name, script in [ for name, script in [
['pgadmin.browser', 'js/browser'], ['pgadmin.browser', 'js/browser'],
['pgadmin.browser.endpoints', 'js/endpoints'],
['pgadmin.browser.error', 'js/error']]: ['pgadmin.browser.error', 'js/error']]:
scripts.append({ scripts.append({
'name': name, 'name': name,
@ -195,6 +196,13 @@ class BrowserModule(PgAdminModule):
category_label=gettext('Display') category_label=gettext('Display')
) )
def get_exposed_url_endpoints(self):
"""
Returns:
list: a list of url endpoints exposed to the client.
"""
return ['browser.index', 'browser.nodes']
blueprint = BrowserModule(MODULE_NAME, __name__) blueprint = BrowserModule(MODULE_NAME, __name__)
@ -538,6 +546,14 @@ def browser_js():
200, {'Content-Type': 'application/x-javascript'}) 200, {'Content-Type': 'application/x-javascript'})
@blueprint.route("/js/endpoints.js")
def exposed_urls():
return make_response(
render_template('browser/js/endpoints.js'),
200, {'Content-Type': 'application/x-javascript'}
)
@blueprint.route("/js/error.js") @blueprint.route("/js/error.js")
@login_required @login_required
def error_js(): def error_js():
@ -605,11 +621,12 @@ def browser_css():
200, {'Content-Type': 'text/css'}) 200, {'Content-Type': 'text/css'})
@blueprint.route("/nodes/") @blueprint.route("/nodes/", endpoint="nodes")
@login_required @login_required
def get_nodes(): def get_nodes():
"""Build a list of treeview nodes from the child nodes.""" """Build a list of treeview nodes from the child nodes."""
nodes = [] nodes = []
for submodule in current_blueprint.submodules: for submodule in current_blueprint.submodules:
nodes.extend(submodule.get_nodes()) nodes.extend(submodule.get_nodes())
return make_json_response(data=nodes) return make_json_response(data=nodes)

View File

@ -13,7 +13,7 @@ import simplejson as json
from abc import ABCMeta, abstractmethod from abc import ABCMeta, abstractmethod
import six import six
from flask import request, render_template, make_response, jsonify from flask import request, render_template, make_response, jsonify, current_app
from flask_babel import gettext from flask_babel import gettext
from flask_security import current_user from flask_security import current_user
from pgadmin.browser import BrowserPluginModule from pgadmin.browser import BrowserPluginModule

View File

@ -1,7 +1,7 @@
define([ define('pgadmin.node.cast', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore', 'underscore.string', 'pgadmin',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'pgadmin.browser', 'alertify', 'pgadmin.browser.collection'
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { ], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
// Extend the collection class for cast // Extend the collection class for cast
if (!pgBrowser.Nodes['coll-cast']) { if (!pgBrowser.Nodes['coll-cast']) {
var casts = pgAdmin.Browser.Nodes['coll-cast'] = var casts = pgAdmin.Browser.Nodes['coll-cast'] =
@ -20,7 +20,7 @@ define([
type: 'cast', type: 'cast',
sqlAlterHelp: 'sql-altercast.html', sqlAlterHelp: 'sql-altercast.html',
sqlCreateHelp: 'sql-createcast.html', sqlCreateHelp: 'sql-createcast.html',
dialogHelp: '{{ url_for('help.static', filename='cast_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'cast_dialog.html'}),
canDrop: true, canDrop: true,
canDropCascade: true, canDropCascade: true,
label: gettext('Cast'), label: gettext('Cast'),

View File

@ -1,7 +1,8 @@
define([ define('pgadmin.node.event_trigger', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
// Extend the browser's collection class for event trigger collection // Extend the browser's collection class for event trigger collection
if (!pgBrowser.Nodes['coll-event_trigger']) { if (!pgBrowser.Nodes['coll-event_trigger']) {
@ -21,7 +22,7 @@ define([
type: 'event_trigger', type: 'event_trigger',
sqlAlterHelp: 'sql-altereventtrigger.html', sqlAlterHelp: 'sql-altereventtrigger.html',
sqlCreateHelp: 'sql-createeventtrigger.html', sqlCreateHelp: 'sql-createeventtrigger.html',
dialogHelp: '{{ url_for('help.static', filename='event_trigger_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'event_trigger_dialog.html'}),
label: gettext('Event Trigger'), label: gettext('Event Trigger'),
hasSQL: true, hasSQL: true,
hasDepends: true, hasDepends: true,

View File

@ -1,7 +1,8 @@
define([ define('pgadmin.node.extension', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser',
], function(gettext, $, _, S, pgAdmin, pgBrowser) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser) {
/* /*
* Create and Add an Extension Collection into nodes * Create and Add an Extension Collection into nodes
@ -40,7 +41,7 @@ define([
type: 'extension', type: 'extension',
sqlAlterHelp: 'sql-alterextension.html', sqlAlterHelp: 'sql-alterextension.html',
sqlCreateHelp: 'sql-createextension.html', sqlCreateHelp: 'sql-createextension.html',
dialogHelp: '{{ url_for('help.static', filename='extension_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'extension_dialog.html'}),
hasSQL: true, hasSQL: true,
hasDepends: true, hasDepends: true,
canDrop: true, canDrop: true,

View File

@ -1,4 +1,4 @@
define([ define('pgadmin.node.foreign_server', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection', 'pgadmin.browser', 'alertify', 'pgadmin.browser.collection',
'pgadmin.browser.server.privilege' 'pgadmin.browser.server.privilege'

View File

@ -1,7 +1,7 @@
define([ define('pgadmin.node.user_mapping', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore', 'underscore.string', 'pgadmin',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'pgadmin.browser', 'alertify', 'pgadmin.browser.collection'
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { ], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
// Extend the browser's node model class to create a Options model // Extend the browser's node model class to create a Options model
var OptionsModel = pgAdmin.Browser.Node.Model.extend({ var OptionsModel = pgAdmin.Browser.Node.Model.extend({
@ -57,7 +57,7 @@ define([
type: 'user_mapping', type: 'user_mapping',
sqlAlterHelp: 'sql-alterusermapping.html', sqlAlterHelp: 'sql-alterusermapping.html',
sqlCreateHelp: 'sql-createusermapping.html', sqlCreateHelp: 'sql-createusermapping.html',
dialogHelp: '{{ url_for('help.static', filename='user_mapping_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'user_mapping_dialog.html'}),
label: gettext('User Mapping'), label: gettext('User Mapping'),
hasSQL: true, hasSQL: true,
hasDepends: true, hasDepends: true,

View File

@ -1,8 +1,8 @@
define([ define('pgadmin.node.foreign_data_wrapper', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection', 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
'pgadmin.browser.server.privilege' 'pgadmin.browser.collection', 'pgadmin.browser.server.privilege'
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { ], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
// Extend the browser's node model class to create a Options model // Extend the browser's node model class to create a Options model
var OptionsModel = pgBrowser.Node.Model.extend({ var OptionsModel = pgBrowser.Node.Model.extend({
@ -56,7 +56,7 @@ define([
type: 'foreign_data_wrapper', type: 'foreign_data_wrapper',
sqlAlterHelp: 'sql-alterforeigndatawrapper.html', sqlAlterHelp: 'sql-alterforeigndatawrapper.html',
sqlCreateHelp: 'sql-createforeigndatawrapper.html', sqlCreateHelp: 'sql-createforeigndatawrapper.html',
dialogHelp: '{{ url_for('help.static', filename='foreign_data_wrapper_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'foreign_data_wrapper_dialog.html'}),
label: gettext('Foreign Data Wrapper'), label: gettext('Foreign Data Wrapper'),
hasSQL: true, hasSQL: true,
hasDepends: true, hasDepends: true,

View File

@ -1,8 +1,8 @@
define([ define('pgadmin.node.language', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection', 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
'pgadmin.browser.server.privilege' 'pgadmin.browser.collection', 'pgadmin.browser.server.privilege'
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { ], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
// Extend the browser's collection class for languages collection // Extend the browser's collection class for languages collection
if (!pgBrowser.Nodes['coll-language']) { if (!pgBrowser.Nodes['coll-language']) {
@ -22,7 +22,7 @@ define([
type: 'language', type: 'language',
sqlAlterHelp: 'sql-alterlanguage.html', sqlAlterHelp: 'sql-alterlanguage.html',
sqlCreateHelp: 'sql-createlanguage.html', sqlCreateHelp: 'sql-createlanguage.html',
dialogHelp: '{{ url_for('help.static', filename='language_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'language_dialog.html'}),
label: gettext('Language'), label: gettext('Language'),
hasSQL: true, hasSQL: true,
canDrop: true, canDrop: true,

View File

@ -1,4 +1,4 @@
define([ define('pgadmin.node.catalog_object_column', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'pgadmin.browser', 'alertify', 'pgadmin.browser.collection'
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { ], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) {

View File

@ -1,4 +1,4 @@
define([ define('pgadmin.node.catalog_object', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'pgadmin.browser', 'alertify', 'pgadmin.browser.collection'
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { ], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) {

View File

@ -1,7 +1,8 @@
define([ define('pgadmin.node.collation', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
if (!pgBrowser.Nodes['coll-collation']) { if (!pgBrowser.Nodes['coll-collation']) {
var databases = pgAdmin.Browser.Nodes['coll-collation'] = var databases = pgAdmin.Browser.Nodes['coll-collation'] =
@ -18,7 +19,7 @@ define([
type: 'collation', type: 'collation',
sqlAlterHelp: 'sql-altercollation.html', sqlAlterHelp: 'sql-altercollation.html',
sqlCreateHelp: 'sql-createcollation.html', sqlCreateHelp: 'sql-createcollation.html',
dialogHelp: '{{ url_for('help.static', filename='collation_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'collation_dialog.html'}),
label: gettext('Collation'), label: gettext('Collation'),
collection_type: 'coll-collation', collection_type: 'coll-collation',
hasSQL: true, hasSQL: true,

View File

@ -1,8 +1,9 @@
// Domain Constraint Module: Collection and Node // Domain Constraint Module: Collection and Node
define([ define('pgadmin.node.domain_constraints', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
// Define Domain Constraint Collection Node // Define Domain Constraint Collection Node
if (!pgBrowser.Nodes['coll-domain_constraints']) { if (!pgBrowser.Nodes['coll-domain_constraints']) {
@ -21,7 +22,7 @@ define([
type: 'domain_constraints', type: 'domain_constraints',
sqlAlterHelp: 'sql-alterdomain.html', sqlAlterHelp: 'sql-alterdomain.html',
sqlCreateHelp: 'sql-alterdomain.html', sqlCreateHelp: 'sql-alterdomain.html',
dialogHelp: '{{ url_for('help.static', filename='domain_constraint_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'domain_constraint_dialog.html'}),
label: gettext('Domain Constraints'), label: gettext('Domain Constraints'),
collection_type: 'coll-domain_constraints', collection_type: 'coll-domain_constraints',
hasSQL: true, hasSQL: true,

View File

@ -1,8 +1,8 @@
// Domain Module: Collection and Node. // Domain Module: Collection and Node.
define([ define('pgadmin.node.domain', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore', 'underscore.string', 'pgadmin',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'pgadmin.browser', 'alertify', 'pgadmin.browser.collection'
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { ], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
// Define Domain Collection Node // Define Domain Collection Node
if (!pgBrowser.Nodes['coll-domain']) { if (!pgBrowser.Nodes['coll-domain']) {
@ -88,7 +88,7 @@ define([
type: 'domain', type: 'domain',
sqlAlterHelp: 'sql-alterdomain.html', sqlAlterHelp: 'sql-alterdomain.html',
sqlCreateHelp: 'sql-createdomain.html', sqlCreateHelp: 'sql-createdomain.html',
dialogHelp: '{{ url_for('help.static', filename='domain_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'domain_dialog.html'}),
label: gettext('Domain'), label: gettext('Domain'),
collection_type: 'coll-domain', collection_type: 'coll-domain',
hasSQL: true, hasSQL: true,

View File

@ -1,8 +1,9 @@
/* Create and Register Foreign Table Collection and Node. */ /* Create and Register Foreign Table Collection and Node. */
define([ define('pgadmin.node.foreign-table', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
if (!pgBrowser.Nodes['coll-foreign-table']) { if (!pgBrowser.Nodes['coll-foreign-table']) {
var foreigntable = pgBrowser.Nodes['coll-foreign-table'] = var foreigntable = pgBrowser.Nodes['coll-foreign-table'] =
@ -495,7 +496,7 @@ define([
type: 'foreign-table', type: 'foreign-table',
sqlAlterHelp: 'sql-alterforeigntable.html', sqlAlterHelp: 'sql-alterforeigntable.html',
sqlCreateHelp: 'sql-createforeigntable.html', sqlCreateHelp: 'sql-createforeigntable.html',
dialogHelp: '{{ url_for('help.static', filename='foreign_table_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'foreign_table_dialog.html'}),
label: gettext('Foreign Table'), label: gettext('Foreign Table'),
collection_type: 'coll-foreign-table', collection_type: 'coll-foreign-table',
hasSQL: true, hasSQL: true,

View File

@ -1,7 +1,8 @@
define([ define('pgadmin.node.fts_configuration', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
// Model for tokens control // Model for tokens control
var TokenModel = pgAdmin.Browser.Node.Model.extend({ var TokenModel = pgAdmin.Browser.Node.Model.extend({
@ -415,7 +416,7 @@ define([
type: 'fts_configuration', type: 'fts_configuration',
sqlAlterHelp: 'sql-altertsconfig.html', sqlAlterHelp: 'sql-altertsconfig.html',
sqlCreateHelp: 'sql-createtsconfig.html', sqlCreateHelp: 'sql-createtsconfig.html',
dialogHelp: '{{ url_for('help.static', filename='fts_configuration_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'fts_configuration_dialog.html'}),
canDrop: true, canDrop: true,
canDropCascade: true, canDropCascade: true,
label: gettext('FTS Configuration'), label: gettext('FTS Configuration'),

View File

@ -1,7 +1,8 @@
define([ define('pgadmin.node.fts_dictionary', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
// Extend the browser's node model class to create a option/value pair // Extend the browser's node model class to create a option/value pair
var OptionLabelModel = pgAdmin.Browser.Node.Model.extend({ var OptionLabelModel = pgAdmin.Browser.Node.Model.extend({
@ -57,7 +58,7 @@ define([
type: 'fts_dictionary', type: 'fts_dictionary',
sqlAlterHelp: 'sql-altertsdictionary.html', sqlAlterHelp: 'sql-altertsdictionary.html',
sqlCreateHelp: 'sql-createtsdictionary.html', sqlCreateHelp: 'sql-createtsdictionary.html',
dialogHelp: '{{ url_for('help.static', filename='fts_dictionary_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'fts_dictionary_dialog.html'}),
canDrop: true, canDrop: true,
canDropCascade: true, canDropCascade: true,
label: gettext('FTS Dictionary'), label: gettext('FTS Dictionary'),

View File

@ -1,7 +1,8 @@
define([ define('pgadmin.node.fts_parser', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
// Extend the collection class for fts parser // Extend the collection class for fts parser
if (!pgBrowser.Nodes['coll-fts_parser']) { if (!pgBrowser.Nodes['coll-fts_parser']) {
@ -21,7 +22,7 @@ define([
type: 'fts_parser', type: 'fts_parser',
sqlAlterHelp: 'sql-altertsparser.html', sqlAlterHelp: 'sql-altertsparser.html',
sqlCreateHelp: 'sql-createtsparser.html', sqlCreateHelp: 'sql-createtsparser.html',
dialogHelp: '{{ url_for('help.static', filename='fts_parser_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'fts_parser_dialog.html'}),
canDrop: true, canDrop: true,
canDropCascade: true, canDropCascade: true,
label: gettext('FTS Parser'), label: gettext('FTS Parser'),

View File

@ -1,7 +1,8 @@
define([ define('pgadmin.node.fts_template', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
// Extend the collection class for fts template // Extend the collection class for fts template
if (!pgBrowser.Nodes['coll-fts_template']) { if (!pgBrowser.Nodes['coll-fts_template']) {
@ -21,7 +22,7 @@ define([
type: 'fts_template', type: 'fts_template',
sqlAlterHelp: 'sql-altertstemplate.html', sqlAlterHelp: 'sql-altertstemplate.html',
sqlCreateHelp: 'sql-createtstemplate.html', sqlCreateHelp: 'sql-createtstemplate.html',
dialogHelp: '{{ url_for('help.static', filename='fts_template_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'fts_template_dialog.html'}),
canDrop: true, canDrop: true,
canDropCascade: true, canDropCascade: true,
label: gettext('FTS Template'), label: gettext('FTS Template'),

View File

@ -1,9 +1,9 @@
/* Create and Register Function Collection and Node. */ /* Create and Register Function Collection and Node. */
define([ define('pgadmin.node.function', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection', 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
'pgadmin.browser.server.privilege' 'pgadmin.browser.collection', 'pgadmin.browser.server.privilege'
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { ], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
if (!pgBrowser.Nodes['coll-function']) { if (!pgBrowser.Nodes['coll-function']) {
var functions = pgBrowser.Nodes['coll-function'] = var functions = pgBrowser.Nodes['coll-function'] =
@ -87,7 +87,7 @@ define([
type: 'function', type: 'function',
sqlAlterHelp: 'sql-alterfunction.html', sqlAlterHelp: 'sql-alterfunction.html',
sqlCreateHelp: 'sql-createfunction.html', sqlCreateHelp: 'sql-createfunction.html',
dialogHelp: '{{ url_for('help.static', filename='function_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'function_dialog.html'}),
label: gettext('Function'), label: gettext('Function'),
collection_type: 'coll-function', collection_type: 'coll-function',
hasSQL: true, hasSQL: true,

View File

@ -1,9 +1,10 @@
/* Create and Register Procedure Collection and Node. */ /* Create and Register Procedure Collection and Node. */
define([ define('pgadmin.node.procedure', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.node.function', 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
'pgadmin.browser.collection', 'pgadmin.browser.server.privilege' 'pgadmin.node.function', 'pgadmin.browser.collection',
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify, Function) { 'pgadmin.browser.server.privilege'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify, Function) {
if (!pgBrowser.Nodes['coll-procedure']) { if (!pgBrowser.Nodes['coll-procedure']) {
var procedures = pgAdmin.Browser.Nodes['coll-procedure'] = var procedures = pgAdmin.Browser.Nodes['coll-procedure'] =
@ -24,7 +25,7 @@ define([
type: 'procedure', type: 'procedure',
sqlAlterHelp: 'sql-alterprocedure.html', sqlAlterHelp: 'sql-alterprocedure.html',
sqlCreateHelp: 'sql-createprocedure.html', sqlCreateHelp: 'sql-createprocedure.html',
dialogHelp: '{{ url_for('help.static', filename='procedure_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'procedure_dialog.html'}),
label: gettext('Procedure'), label: gettext('Procedure'),
collection_type: 'coll-procedure', collection_type: 'coll-procedure',
hasSQL: true, hasSQL: true,

View File

@ -1,9 +1,9 @@
/* Create and Register Function Collection and Node. */ /* Create and Register Function Collection and Node. */
define([ define('pgadmin.node.trigger_function', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection', 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
'pgadmin.browser.server.privilege' 'pgadmin.browser.collection', 'pgadmin.browser.server.privilege'
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { ], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
if (!pgBrowser.Nodes['coll-trigger_function']) { if (!pgBrowser.Nodes['coll-trigger_function']) {
var trigger_functions = pgBrowser.Nodes['coll-trigger_function'] = var trigger_functions = pgBrowser.Nodes['coll-trigger_function'] =
@ -21,7 +21,7 @@ define([
type: 'trigger_function', type: 'trigger_function',
sqlAlterHelp: 'plpgsql-trigger.html', sqlAlterHelp: 'plpgsql-trigger.html',
sqlCreateHelp: 'plpgsql-trigger.html', sqlCreateHelp: 'plpgsql-trigger.html',
dialogHelp: '{{ url_for('help.static', filename='trigger_function_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'trigger_function_dialog.html'}),
label: gettext('Trigger function'), label: gettext('Trigger function'),
collection_type: 'coll-trigger_function', collection_type: 'coll-trigger_function',
hasSQL: true, hasSQL: true,

View File

@ -1,9 +1,9 @@
/* Create and Register Function Collection and Node. */ /* Create and Register Function Collection and Node. */
define([ define('pgadmin.node.edbfunc', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection', 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
'pgadmin.browser.server.privilege' 'pgadmin.browser.collection', 'pgadmin.browser.server.privilege'
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { ], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
if (!pgBrowser.Nodes['coll-edbfunc']) { if (!pgBrowser.Nodes['coll-edbfunc']) {
pgBrowser.Nodes['coll-edbfunc'] = pgBrowser.Nodes['coll-edbfunc'] =
@ -18,7 +18,7 @@ define([
if (!pgBrowser.Nodes['edbfunc']) { if (!pgBrowser.Nodes['edbfunc']) {
pgBrowser.Nodes['edbfunc'] = pgBrowser.Node.extend({ pgBrowser.Nodes['edbfunc'] = pgBrowser.Node.extend({
type: 'edbfunc', type: 'edbfunc',
dialogHelp: '{{ url_for('help.static', filename='edbfunc_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'edbfunc_dialog.html'}),
label: gettext('Function'), label: gettext('Function'),
collection_type: 'coll-edbfunc', collection_type: 'coll-edbfunc',
hasDepends: true, hasDepends: true,

View File

@ -1,9 +1,12 @@
/* Create and Register Procedure Collection and Node. */ /* Create and Register Procedure Collection and Node. */
define([ define('pgadmin.node.edbproc', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.node.edbfunc', 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
'pgadmin.browser.collection', 'pgadmin.browser.server.privilege' 'pgadmin.node.edbfunc', 'pgadmin.browser.collection',
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify, EdbFunction) { 'pgadmin.browser.server.privilege'
], function(
gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify, EdbFunction
) {
if (!pgBrowser.Nodes['coll-edbproc']) { if (!pgBrowser.Nodes['coll-edbproc']) {
pgAdmin.Browser.Nodes['coll-edbproc'] = pgAdmin.Browser.Nodes['coll-edbproc'] =
@ -20,7 +23,7 @@ define([
if (!pgBrowser.Nodes['edbproc']) { if (!pgBrowser.Nodes['edbproc']) {
pgAdmin.Browser.Nodes['edbproc'] = pgBrowser.Node.extend({ pgAdmin.Browser.Nodes['edbproc'] = pgBrowser.Node.extend({
type: 'edbproc', type: 'edbproc',
dialogHelp: '{{ url_for('help.static', filename='edbproc_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'edbproc_dialog.html'}),
label: gettext('Procedure'), label: gettext('Procedure'),
collection_type: 'coll-edbproc', collection_type: 'coll-edbproc',
hasDepends: true, hasDepends: true,

View File

@ -1,9 +1,9 @@
/* Create and Register Function Collection and Node. */ /* Create and Register Function Collection and Node. */
define([ define('pgadmin.node.edbvar', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection', 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
'pgadmin.browser.server.privilege' 'pgadmin.browser.collection', 'pgadmin.browser.server.privilege'
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { ], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
if (!pgBrowser.Nodes['coll-edbvar']) { if (!pgBrowser.Nodes['coll-edbvar']) {
pgBrowser.Nodes['coll-edbvar'] = pgBrowser.Nodes['coll-edbvar'] =
@ -18,7 +18,7 @@ define([
if (!pgBrowser.Nodes['edbvar']) { if (!pgBrowser.Nodes['edbvar']) {
pgBrowser.Nodes['edbvar'] = pgBrowser.Node.extend({ pgBrowser.Nodes['edbvar'] = pgBrowser.Node.extend({
type: 'edbvar', type: 'edbvar',
dialogHelp: '{{ url_for('help.static', filename='edbvar_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'edbvar_dialog.html'}),
label: gettext('Function'), label: gettext('Function'),
collection_type: 'coll-edbvar', collection_type: 'coll-edbvar',
canEdit: false, canEdit: false,

View File

@ -1,7 +1,8 @@
define([ define('pgadmin.node.package', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
// Extend the browser's collection class for package collection // Extend the browser's collection class for package collection
if (!pgBrowser.Nodes['coll-package']) { if (!pgBrowser.Nodes['coll-package']) {
@ -18,7 +19,7 @@ define([
if (!pgBrowser.Nodes['package']) { if (!pgBrowser.Nodes['package']) {
pgBrowser.Nodes['package'] = pgBrowser.Node.extend({ pgBrowser.Nodes['package'] = pgBrowser.Node.extend({
type: 'package', type: 'package',
dialogHelp: '{{ url_for('help.static', filename='package_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'package_dialog.html'}),
label: gettext('Package'), label: gettext('Package'),
collection_type: 'coll-package', collection_type: 'coll-package',
hasSQL: true, hasSQL: true,

View File

@ -1,7 +1,8 @@
define([ define('pgadmin.node.sequence', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
// Extend the browser's collection class for sequence collection // Extend the browser's collection class for sequence collection
if (!pgBrowser.Nodes['coll-sequence']) { if (!pgBrowser.Nodes['coll-sequence']) {
@ -21,7 +22,7 @@ define([
type: 'sequence', type: 'sequence',
sqlAlterHelp: 'sql-altersequence.html', sqlAlterHelp: 'sql-altersequence.html',
sqlCreateHelp: 'sql-createsequence.html', sqlCreateHelp: 'sql-createsequence.html',
dialogHelp: '{{ url_for('help.static', filename='sequence_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'sequence_dialog.html'}),
label: gettext('Sequence'), label: gettext('Sequence'),
collection_type: 'coll-sequence', collection_type: 'coll-sequence',
hasSQL: true, hasSQL: true,

View File

@ -1,7 +1,8 @@
define([ define('pgadmin.node.synonym', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
if (!pgBrowser.Nodes['coll-synonym']) { if (!pgBrowser.Nodes['coll-synonym']) {
var databases = pgAdmin.Browser.Nodes['coll-synonym'] = var databases = pgAdmin.Browser.Nodes['coll-synonym'] =
@ -16,7 +17,7 @@ define([
if (!pgBrowser.Nodes['synonym']) { if (!pgBrowser.Nodes['synonym']) {
pgAdmin.Browser.Nodes['synonym'] = pgBrowser.Node.extend({ pgAdmin.Browser.Nodes['synonym'] = pgBrowser.Node.extend({
type: 'synonym', type: 'synonym',
dialogHelp: '{{ url_for('help.static', filename='synonym_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'synonym_dialog.html'}),
label: gettext('Synonym'), label: gettext('Synonym'),
collection_type: 'coll-synonym', collection_type: 'coll-synonym',
hasSQL: true, hasSQL: true,

View File

@ -1,7 +1,8 @@
define([ define('pgadmin.node.column', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'backform', 'alertify', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'backform', 'alertify',
], function(gettext, $, _, S, pgAdmin, pgBrowser, Backform, alertify) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, Backform, alertify) {
if (!pgBrowser.Nodes['coll-column']) { if (!pgBrowser.Nodes['coll-column']) {
var databases = pgBrowser.Nodes['coll-column'] = var databases = pgBrowser.Nodes['coll-column'] =
@ -92,7 +93,7 @@ define([
hasSQL: true, hasSQL: true,
sqlAlterHelp: 'sql-altertable.html', sqlAlterHelp: 'sql-altertable.html',
sqlCreateHelp: 'sql-altertable.html', sqlCreateHelp: 'sql-altertable.html',
dialogHelp: '{{ url_for('help.static', filename='column_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'column_dialog.html'}),
canDrop: function(itemData, item, data){ canDrop: function(itemData, item, data){
if (pgBrowser.Nodes['schema'].canChildDrop.apply(this, [itemData, item, data])) { if (pgBrowser.Nodes['schema'].canChildDrop.apply(this, [itemData, item, data])) {
var t = pgBrowser.tree, i = item, d = itemData, parents = []; var t = pgBrowser.tree, i = item, d = itemData, parents = [];

View File

@ -1,8 +1,9 @@
// Check Constraint Module: Node // Check Constraint Module: Node
define([ define('pgadmin.node.check_constraints', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
], function(gettext, $, _, S, pgAdmin, pgBrowser, Alertify) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, Alertify) {
// Check Constraint Node // Check Constraint Node
if (!pgBrowser.Nodes['check_constraints']) { if (!pgBrowser.Nodes['check_constraints']) {
@ -12,7 +13,7 @@ define([
collection_type: 'coll-constraints', collection_type: 'coll-constraints',
sqlAlterHelp: 'ddl-alter.html', sqlAlterHelp: 'ddl-alter.html',
sqlCreateHelp: 'ddl-constraints.html', sqlCreateHelp: 'ddl-constraints.html',
dialogHelp: '{{ url_for('help.static', filename='check_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'check_dialog.html'}),
hasSQL: true, hasSQL: true,
hasDepends: true, hasDepends: true,
parent_type: ['table'], parent_type: ['table'],

View File

@ -1,7 +1,8 @@
define([ define('pgadmin.node.exclusion_constraint', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
], function(gettext, $, _, S, pgAdmin, pgBrowser, Alertify) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, Alertify) {
var ExclusionConstraintColumnModel = pgBrowser.Node.Model.extend({ var ExclusionConstraintColumnModel = pgBrowser.Node.Model.extend({
defaults: { defaults: {
@ -606,7 +607,7 @@ define([
collection_type: 'coll-constraints', collection_type: 'coll-constraints',
sqlAlterHelp: 'ddl-alter.html', sqlAlterHelp: 'ddl-alter.html',
sqlCreateHelp: 'ddl-constraints.html', sqlCreateHelp: 'ddl-constraints.html',
dialogHelp: '{{ url_for('help.static', filename='exclusion_constraint_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'exclusion_constraint_dialog.html'}),
hasSQL: true, hasSQL: true,
parent_type: 'table', parent_type: 'table',
canDrop: true, canDrop: true,

View File

@ -1,7 +1,8 @@
define([ define('pgadmin.node.foreign_key', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
], function(gettext, $, _, S, pgAdmin, pgBrowser, Alertify) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, Alertify) {
var formatNode = function(opt) { var formatNode = function(opt) {
if (!opt.id) { if (!opt.id) {
@ -604,7 +605,7 @@ define([
collection_type: 'coll-constraints', collection_type: 'coll-constraints',
sqlAlterHelp: 'ddl-alter.html', sqlAlterHelp: 'ddl-alter.html',
sqlCreateHelp: 'ddl-constraints.html', sqlCreateHelp: 'ddl-constraints.html',
dialogHelp: '{{ url_for('help.static', filename='foreign_key_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'foreign_key_dialog.html'}),
hasSQL: true, hasSQL: true,
hasDepends: false, hasDepends: false,
parent_type: 'table', parent_type: 'table',

View File

@ -1,4 +1,4 @@
define([ define('pgadmin.node.{{node_type}}', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection' 'pgadmin.browser', 'alertify', 'pgadmin.browser.collection'
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { ], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) {

View File

@ -1,4 +1,4 @@
define([ define('pgadmin.node.constraints', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin',
'pgadmin.browser', 'pgadmin.browser.collection'{% for c in constraints %}, 'pgadmin.node.{{ c|safe }}'{%endfor%} 'pgadmin.browser', 'pgadmin.browser.collection'{% for c in constraints %}, 'pgadmin.node.{{ c|safe }}'{%endfor%}
], function(gettext, $, _, S, pgAdmin, pgBrowser) { ], function(gettext, $, _, S, pgAdmin, pgBrowser) {

View File

@ -1,7 +1,8 @@
define([ define('pgadmin.node.index', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'backform', 'alertify', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'backform', 'alertify',
], function(gettext, $, _, S, pgAdmin, pgBrowser, Backform, alertify) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, Backform, alertify) {
if (!pgBrowser.Nodes['coll-index']) { if (!pgBrowser.Nodes['coll-index']) {
var databases = pgAdmin.Browser.Nodes['coll-index'] = var databases = pgAdmin.Browser.Nodes['coll-index'] =
@ -11,7 +12,7 @@ define([
type: 'coll-index', type: 'coll-index',
sqlAlterHelp: 'sql-alterindex.html', sqlAlterHelp: 'sql-alterindex.html',
sqlCreateHelp: 'sql-createindex.html', sqlCreateHelp: 'sql-createindex.html',
dialogHelp: '{{ url_for('help.static', filename='index_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'index_dialog.html'}),
columns: ['name', 'description'], columns: ['name', 'description'],
hasStatistics: true, hasStatistics: true,
statsPrettifyFields: ['Size', 'Index size'] statsPrettifyFields: ['Size', 'Index size']

View File

@ -1,7 +1,7 @@
define([ define('pgadmin.node.rule', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'codemirror' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'codemirror'
], function(gettext, $, _, S, pgAdmin, pgBrowser, CodeMirror) { ], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, CodeMirror) {
/** /**
Create and add a rule collection into nodes Create and add a rule collection into nodes
@ -38,7 +38,7 @@ define([
type: 'rule', type: 'rule',
sqlAlterHelp: 'sql-alterrule.html', sqlAlterHelp: 'sql-alterrule.html',
sqlCreateHelp: 'sql-createrule.html', sqlCreateHelp: 'sql-createrule.html',
dialogHelp: '{{ url_for('help.static', filename='rule_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'rule_dialog.html'}),
label: gettext('rule'), label: gettext('rule'),
collection_type: 'coll-table', collection_type: 'coll-table',
hasSQL: true, hasSQL: true,

View File

@ -1,8 +1,9 @@
define([ define('pgadmin.node.table', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection', 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
'pgadmin.node.column', 'pgadmin.node.constraints' 'pgadmin.browser.collection', 'pgadmin.node.column',
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { 'pgadmin.node.constraints'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
if (!pgBrowser.Nodes['coll-table']) { if (!pgBrowser.Nodes['coll-table']) {
var databases = pgBrowser.Nodes['coll-table'] = var databases = pgBrowser.Nodes['coll-table'] =
@ -31,7 +32,7 @@ define([
'Dead tuple length', 'Free space'], 'Dead tuple length', 'Free space'],
sqlAlterHelp: 'sql-altertable.html', sqlAlterHelp: 'sql-altertable.html',
sqlCreateHelp: 'sql-createtable.html', sqlCreateHelp: 'sql-createtable.html',
dialogHelp: '{{ url_for('help.static', filename='table_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'table_dialog.html'}),
parent_type: ['schema', 'catalog'], parent_type: ['schema', 'catalog'],
hasScriptTypes: ['create', 'select', 'insert', 'update', 'delete'], hasScriptTypes: ['create', 'select', 'insert', 'update', 'delete'],
height: '95%', height: '95%',

View File

@ -1,7 +1,8 @@
define([ define('pgadmin.node.trigger', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'backform', 'alertify', 'pgadmin.browser.collection' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'backform', 'alertify',
], function(gettext, $, _, S, pgAdmin, pgBrowser, Backform, alertify) { 'pgadmin.browser.collection'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, Backform, alertify) {
var CustomSwitchControl = Backform.CustomSwitchControl = Backform.SwitchControl.extend({ var CustomSwitchControl = Backform.CustomSwitchControl = Backform.SwitchControl.extend({
template: _.template([ template: _.template([
@ -43,7 +44,7 @@ define([
width: '650px', width: '650px',
sqlAlterHelp: 'sql-altertrigger.html', sqlAlterHelp: 'sql-altertrigger.html',
sqlCreateHelp: 'sql-createtrigger.html', sqlCreateHelp: 'sql-createtrigger.html',
dialogHelp: '{{ url_for('help.static', filename='trigger_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'trigger_dialog.html'}),
Init: function() { Init: function() {
/* Avoid mulitple registration of menus */ /* Avoid mulitple registration of menus */
if (this.initialized) if (this.initialized)

View File

@ -1,4 +1,4 @@
define([ define('pgadmin.node.catalog', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin',
'pgadmin.browser', 'backform', 'alertify', 'pgadmin.browser.collection' 'pgadmin.browser', 'backform', 'alertify', 'pgadmin.browser.collection'
], function(gettext, $, _, S, pgAdmin, pgBrowser, Backform, alertify) { ], function(gettext, $, _, S, pgAdmin, pgBrowser, Backform, alertify) {

View File

@ -1,8 +1,8 @@
define([ define('pgadmin.node.schema', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'backform', 'alertify', 'pgadmin.browser.collection', 'underscore.string', 'pgadmin', 'pgadmin.browser', 'backform', 'alertify',
'pgadmin.browser.server.privilege' 'pgadmin.browser.collection', 'pgadmin.browser.server.privilege'
], function(gettext, $, _, S, pgAdmin, pgBrowser, Backform, alertify) { ], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, Backform, alertify) {
// VacuumSettings Collection to display all settings parameters as Grid // VacuumSettings Collection to display all settings parameters as Grid
var VacuumCollectionControl = Backform.VacuumCollectionControl = var VacuumCollectionControl = Backform.VacuumCollectionControl =
@ -281,7 +281,7 @@ define([
type: 'schema', type: 'schema',
sqlAlterHelp: 'sql-alterschema.html', sqlAlterHelp: 'sql-alterschema.html',
sqlCreateHelp: 'sql-createschema.html', sqlCreateHelp: 'sql-createschema.html',
dialogHelp: '{{ url_for('help.static', filename='schema_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'schema_dialog.html'}),
label: gettext('Schema'), label: gettext('Schema'),
hasSQL: true, hasSQL: true,
canDrop: true, canDrop: true,

View File

@ -1,8 +1,8 @@
define([ define('pgadmin.node.type', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'backgrid', 'pgadmin.backgrid', 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify', 'backgrid',
'pgadmin.browser.collection' 'pgadmin.backgrid', 'pgadmin.browser.collection'
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify, Backgrid) { ], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify, Backgrid) {
if (!pgBrowser.Nodes['coll-type']) { if (!pgBrowser.Nodes['coll-type']) {
var databases = pgBrowser.Nodes['coll-type'] = var databases = pgBrowser.Nodes['coll-type'] =
@ -250,7 +250,7 @@ define([
type: 'type', type: 'type',
sqlAlterHelp: 'sql-altertype.html', sqlAlterHelp: 'sql-altertype.html',
sqlCreateHelp: 'sql-createtype.html', sqlCreateHelp: 'sql-createtype.html',
dialogHelp: '{{ url_for('help.static', filename='type_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'type_dialog.html'}),
label: gettext('Type'), label: gettext('Type'),
collection_type: 'coll-type', collection_type: 'coll-type',
hasSQL: true, hasSQL: true,

View File

@ -1,8 +1,8 @@
define([ define('pgadmin.node.mview', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'alertify', 'pgadmin.browser', 'codemirror', 'underscore.string', 'pgadmin', 'alertify', 'pgadmin.browser', 'codemirror',
'pgadmin.browser.server.privilege' 'pgadmin.browser.server.privilege'
], function(gettext, $, _, S, pgAdmin, alertify, pgBrowser, CodeMirror) { ], function(gettext, url_for, $, _, S, pgAdmin, alertify, pgBrowser, CodeMirror) {
/** /**
Create and add a view collection into nodes Create and add a view collection into nodes
@ -38,7 +38,7 @@ define([
type: 'mview', type: 'mview',
sqlAlterHelp: 'sql-altermaterializedview.html', sqlAlterHelp: 'sql-altermaterializedview.html',
sqlCreateHelp: 'sql-creatematerializedview.html', sqlCreateHelp: 'sql-creatematerializedview.html',
dialogHelp: '{{ url_for('help.static', filename='materialized_view_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'materialized_view_dialog.html'}),
label: gettext('Materialized View'), label: gettext('Materialized View'),
hasSQL: true, hasSQL: true,
hasDepends: true, hasDepends: true,

View File

@ -1,8 +1,9 @@
define([ define('pgadmin.node.view', [
'sources/gettext', 'sources/gettext',
'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/url_for', 'jquery', 'underscore', 'underscore.string', 'pgadmin',
'pgadmin.browser', 'codemirror', 'pgadmin.browser.server.privilege', 'pgadmin.node.rule' 'pgadmin.browser', 'codemirror', 'pgadmin.browser.server.privilege',
], function(gettext, $, _, S, pgAdmin, pgBrowser, CodeMirror) { 'pgadmin.node.rule'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, CodeMirror) {
/** /**
Create and add a view collection into nodes Create and add a view collection into nodes
@ -38,7 +39,7 @@ define([
type: 'view', type: 'view',
sqlAlterHelp: 'sql-alterview.html', sqlAlterHelp: 'sql-alterview.html',
sqlCreateHelp: 'sql-createview.html', sqlCreateHelp: 'sql-createview.html',
dialogHelp: '{{ url_for('help.static', filename='view_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'view_dialog.html'}),
label: gettext('View'), label: gettext('View'),
hasSQL: true, hasSQL: true,
hasDepends: true, hasDepends: true,

View File

@ -1,8 +1,9 @@
define([ define('pgadmin.node.database', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection', 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
'pgadmin.browser.server.privilege', 'pgadmin.browser.server.variable', 'pgadmin.browser.collection', 'pgadmin.browser.server.privilege',
], function(gettext, $, _, S, pgAdmin, pgBrowser, Alertify) { 'pgadmin.browser.server.variable',
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, Alertify) {
if (!pgBrowser.Nodes['coll-database']) { if (!pgBrowser.Nodes['coll-database']) {
var databases = pgBrowser.Nodes['coll-database'] = var databases = pgBrowser.Nodes['coll-database'] =
@ -22,7 +23,7 @@ define([
type: 'database', type: 'database',
sqlAlterHelp: 'sql-alterdatabase.html', sqlAlterHelp: 'sql-alterdatabase.html',
sqlCreateHelp: 'sql-createdatabase.html', sqlCreateHelp: 'sql-createdatabase.html',
dialogHelp: '{{ url_for('help.static', filename='database_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'database_dialog.html'}),
hasSQL: true, hasSQL: true,
hasDepends: true, hasDepends: true,
hasStatistics: true, hasStatistics: true,

View File

@ -1,7 +1,8 @@
define([ define('pgadmin.node.pga_schedule', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'moment', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'backform', 'pgadmin.backform' 'underscore.string', 'pgadmin', 'moment', 'pgadmin.browser', 'alertify',
], function(gettext, $, _, S, pgAdmin, moment, pgBrowser, Alertify, Backform) { 'backform', 'pgadmin.backform'
], function(gettext, url_for, $, _, S, pgAdmin, moment, pgBrowser, Alertify, Backform) {
if (!pgBrowser.Nodes['coll-pga_schedule']) { if (!pgBrowser.Nodes['coll-pga_schedule']) {
pgBrowser.Nodes['coll-pga_schedule'] = pgBrowser.Nodes['coll-pga_schedule'] =
@ -181,7 +182,7 @@ define([
pgBrowser.Nodes['pga_schedule'] = pgBrowser.Node.extend({ pgBrowser.Nodes['pga_schedule'] = pgBrowser.Node.extend({
parent_type: 'pga_job', parent_type: 'pga_job',
type: 'pga_schedule', type: 'pga_schedule',
dialogHelp: '{{ url_for('help.static', filename='pgagent_jobs.html') }}', dialogHelp: url_for('help.static', {'filename': 'pgagent_jobs.html'}),
hasSQL: true, hasSQL: true,
hasDepends: false, hasDepends: false,
hasStatistics: false, hasStatistics: false,

View File

@ -1,7 +1,8 @@
define([ define('pgadmin.node.pga_jobstep', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'backform', 'pgadmin.backform' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify', 'backform',
], function(gettext, $, _, S, pgAdmin, pgBrowser, Alertify, Backform) { 'pgadmin.backform'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, Alertify, Backform) {
if (!pgBrowser.Nodes['coll-pga_jobstep']) { if (!pgBrowser.Nodes['coll-pga_jobstep']) {
pgBrowser.Nodes['coll-pga_jobstep'] = pgBrowser.Nodes['coll-pga_jobstep'] =
@ -21,7 +22,7 @@ define([
pgBrowser.Nodes['pga_jobstep'] = pgBrowser.Node.extend({ pgBrowser.Nodes['pga_jobstep'] = pgBrowser.Node.extend({
parent_type: 'pga_job', parent_type: 'pga_job',
type: 'pga_jobstep', type: 'pga_jobstep',
dialogHelp: '{{ url_for('help.static', filename='pgagent_jobs.html') }}', dialogHelp: url_for('help.static', {'filename': 'pgagent_jobs.html'}),
hasSQL: true, hasSQL: true,
hasDepends: false, hasDepends: false,
hasStatistics: true, hasStatistics: true,

View File

@ -1,8 +1,8 @@
define([ define('pgadmin.node.pga_job', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.node.pga_jobstep', 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
'pgadmin.node.pga_schedule' 'pgadmin.node.pga_jobstep', 'pgadmin.node.pga_schedule'
], function(gettext, $, _, S, pgAdmin, pgBrowser, Alertify) { ], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, Alertify) {
if (!pgBrowser.Nodes['coll-pga_job']) { if (!pgBrowser.Nodes['coll-pga_job']) {
var pga_jobs = pgBrowser.Nodes['coll-pga_job'] = var pga_jobs = pgBrowser.Nodes['coll-pga_job'] =
@ -19,7 +19,7 @@ define([
pgBrowser.Nodes['pga_job'] = pgBrowser.Node.extend({ pgBrowser.Nodes['pga_job'] = pgBrowser.Node.extend({
parent_type: 'server', parent_type: 'server',
type: 'pga_job', type: 'pga_job',
dialogHelp: '{{ url_for('help.static', filename='pgagent_jobs.html') }}', dialogHelp: url_for('help.static', {'filename': 'pgagent_jobs.html'}),
hasSQL: true, hasSQL: true,
hasDepends: false, hasDepends: false,
hasStatistics: true, hasStatistics: true,

View File

@ -1,7 +1,7 @@
define([ define('pgadmin.node.resource_group', [
'sources/gettext', 'underscore', 'pgadmin.browser', 'sources/gettext', 'sources/url_for', 'underscore', 'pgadmin.browser',
'pgadmin.browser.collection' 'pgadmin.browser.collection'
], function(gettext, _, pgBrowser) { ], function(gettext, url_for, _, pgBrowser) {
// Extend the browser's collection class for resource group collection // Extend the browser's collection class for resource group collection
if (!pgBrowser.Nodes['coll-resource_group']) { if (!pgBrowser.Nodes['coll-resource_group']) {
@ -19,7 +19,7 @@ define([
pgBrowser.Nodes['resource_group'] = pgBrowser.Node.extend({ pgBrowser.Nodes['resource_group'] = pgBrowser.Node.extend({
parent_type: 'server', parent_type: 'server',
type: 'resource_group', type: 'resource_group',
dialogHelp: "{{ url_for('help.static', filename='resource_group_dialog.html') }}", dialogHelp: url_for('help.static', {'ilename': 'resource_group_dialog.html'}),
label: gettext('Resource Group'), label: gettext('Resource Group'),
hasSQL: true, hasSQL: true,
canDrop: true, canDrop: true,

View File

@ -1,9 +1,9 @@
define([ define('pgadmin.node.role', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.backform', 'select2', 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
'pgadmin.browser.collection', 'pgadmin.browser.node.ui', 'pgadmin.backform', 'select2', 'pgadmin.browser.collection',
'pgadmin.browser.server.variable' 'pgadmin.browser.node.ui', 'pgadmin.browser.server.variable'
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify, Backform) { ], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify, Backform) {
if (!pgBrowser.Nodes['coll-role']) { if (!pgBrowser.Nodes['coll-role']) {
var role = pgAdmin.Browser.Nodes['coll-role'] = var role = pgAdmin.Browser.Nodes['coll-role'] =
@ -311,7 +311,7 @@ define([
type: 'role', type: 'role',
sqlAlterHelp: 'sql-alterrole.html', sqlAlterHelp: 'sql-alterrole.html',
sqlCreateHelp: 'sql-createrole.html', sqlCreateHelp: 'sql-createrole.html',
dialogHelp: '{{ url_for('help.static', filename='role_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'role_dialog.html'}),
label: gettext('Login/Group Role'), label: gettext('Login/Group Role'),
hasSQL: true, hasSQL: true,
canDrop: function(node, item) { canDrop: function(node, item) {

View File

@ -1,8 +1,9 @@
define([ define('pgadmin.node.tablespace', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify', 'pgadmin.browser.collection', 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify',
'pgadmin.browser.node.ui', 'pgadmin.browser.server.privilege' 'pgadmin.browser.collection', 'pgadmin.browser.node.ui',
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { 'pgadmin.browser.server.privilege'
], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
if (!pgBrowser.Nodes['coll-tablespace']) { if (!pgBrowser.Nodes['coll-tablespace']) {
var databases = pgBrowser.Nodes['coll-tablespace'] = var databases = pgBrowser.Nodes['coll-tablespace'] =
@ -22,7 +23,7 @@ define([
type: 'tablespace', type: 'tablespace',
sqlAlterHelp: 'sql-altertablespace.html', sqlAlterHelp: 'sql-altertablespace.html',
sqlCreateHelp: 'sql-createtablespace.html', sqlCreateHelp: 'sql-createtablespace.html',
dialogHelp: '{{ url_for('help.static', filename='tablespace_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'tablespace_dialog.html'}),
label: gettext('Tablespace'), label: gettext('Tablespace'),
hasSQL: true, hasSQL: true,
canDrop: true, canDrop: true,
@ -178,7 +179,7 @@ define([
buttons: [{ buttons: [{
text: '', key: 27, className: 'btn btn-default pull-left fa fa-lg fa-question', text: '', key: 27, className: 'btn btn-default pull-left fa fa-lg fa-question',
attrs:{name:'dialog_help', type:'button', label: gettext('Users'), attrs:{name:'dialog_help', type:'button', label: gettext('Users'),
url: '{{ url_for('help.static', filename='move_objects.html') }}'} url: url_for('help.static', {'filename': 'move_objects.html'})}
},{ },{
text: gettext('OK'), key: 27, className: 'btn btn-primary fa fa-lg fa-save pg-alertify-button' text: gettext('OK'), key: 27, className: 'btn btn-primary fa fa-lg fa-save pg-alertify-button'
},{ },{

View File

@ -1,7 +1,7 @@
define([ define('pgadmin.node.server', [
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'pgadmin', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore',
'pgadmin.browser', 'alertify' 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify'
], function(gettext, $, _, S, pgAdmin, pgBrowser, alertify) { ], function(gettext, url_for, $, _, S, pgAdmin, pgBrowser, alertify) {
if (!pgBrowser.Nodes['server']) { if (!pgBrowser.Nodes['server']) {
@ -39,7 +39,7 @@ define([
pgAdmin.Browser.Nodes['server'] = pgAdmin.Browser.Node.extend({ pgAdmin.Browser.Nodes['server'] = pgAdmin.Browser.Node.extend({
parent_type: 'server-group', parent_type: 'server-group',
type: 'server', type: 'server',
dialogHelp: '{{ url_for('help.static', filename='server_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'server_dialog.html'}),
label: gettext('Server'), label: gettext('Server'),
canDrop: true, canDrop: true,
hasStatistics: true, hasStatistics: true,

View File

@ -1,13 +1,13 @@
define([ define('pgadmin.node.server-group', [
'sources/gettext', 'jquery', 'underscore', 'pgadmin', 'backbone', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore', 'pgadmin',
'pgadmin.browser', 'pgadmin.browser.node' 'backbone', 'pgadmin.browser', 'pgadmin.browser.node'
], function(gettext, $, _, pgAdmin, Backbone) { ], function(gettext, url_for, $, _, pgAdmin, Backbone) {
if (!pgAdmin.Browser.Nodes['server-group']) { if (!pgAdmin.Browser.Nodes['server-group']) {
pgAdmin.Browser.Nodes['server-group'] = pgAdmin.Browser.Node.extend({ pgAdmin.Browser.Nodes['server-group'] = pgAdmin.Browser.Node.extend({
parent_type: null, parent_type: null,
type: 'server-group', type: 'server-group',
dialogHelp: '{{ url_for('help.static', filename='server_group_dialog.html') }}', dialogHelp: url_for('help.static', {'filename': 'server_group_dialog.html'}),
label: gettext('Server Group'), label: gettext('Server Group'),
width: '350px', width: '350px',
height: '250px', height: '250px',

View File

@ -5,7 +5,7 @@ try {
require( require(
['pgadmin', 'pgadmin.browser'], ['pgadmin', 'pgadmin.browser'],
function(pgAdmin, pgBrowser) { function(pgAdmin, pgBrowser) {
pgBrowser.init(); pgBrowser.init();
}, },
function() { function() {
/* TODO:: Show proper error dialog */ /* TODO:: Show proper error dialog */

View File

@ -1,6 +1,6 @@
define( define(
'pgadmin.browser', [ 'pgadmin.browser', [
'sources/gettext', 'require', 'jquery', 'underscore', 'underscore.string', 'sources/gettext', 'sources/url_for', 'require', 'jquery', 'underscore', 'underscore.string',
'bootstrap', 'pgadmin', 'alertify', 'codemirror', 'bootstrap', 'pgadmin', 'alertify', 'codemirror',
'sources/check_node_visibility', 'codemirror/mode/sql/sql', 'wcdocker', 'sources/check_node_visibility', 'codemirror/mode/sql/sql', 'wcdocker',
'jquery.contextmenu', 'jquery.aciplugin', 'jquery.acitree', 'jquery.contextmenu', 'jquery.aciplugin', 'jquery.acitree',
@ -9,7 +9,7 @@ define(
'pgadmin.browser.error', 'pgadmin.browser.frame', 'pgadmin.browser.error', 'pgadmin.browser.frame',
'pgadmin.browser.node', 'pgadmin.browser.collection' 'pgadmin.browser.node', 'pgadmin.browser.collection'
], function( ], function(
gettext, require, $, _, S, Bootstrap, pgAdmin, Alertify, gettext, url_for, require, $, _, S, Bootstrap, pgAdmin, Alertify,
CodeMirror, checkNodeVisibility CodeMirror, checkNodeVisibility
) { ) {
@ -55,7 +55,7 @@ define(
function(b) { function(b) {
$('#tree').aciTree({ $('#tree').aciTree({
ajax: { ajax: {
url: '{{ url_for('browser.get_nodes') }}', url: url_for('browser.nodes'),
converters: { converters: {
'text json': processTreeData, 'text json': processTreeData,
} }
@ -86,7 +86,7 @@ define(
// Extend the browser class attributes // Extend the browser class attributes
_.extend(pgAdmin.Browser, { _.extend(pgAdmin.Browser, {
// The base url for browser // The base url for browser
URL: '{{ url_for('browser.index') }}', URL: url_for('browser.index'),
// We do have docker of type wcDocker to take care of different // We do have docker of type wcDocker to take care of different
// containers. (i.e. panels, tabs, frames, etc.) // containers. (i.e. panels, tabs, frames, etc.)
docker:null, docker:null,
@ -313,7 +313,7 @@ define(
settings = { setting: "Browser/Layout", value: state }; settings = { setting: "Browser/Layout", value: state };
$.ajax({ $.ajax({
type: 'POST', type: 'POST',
url: "{{ url_for('settings.store') }}", url: url_for('settings.store_bulk'),
data: settings data: settings
}); });
} }
@ -551,7 +551,7 @@ define(
// Ping the server every 5 minutes // Ping the server every 5 minutes
setInterval(function() { setInterval(function() {
$.ajax({ $.ajax({
url: '{{ url_for('misc.ping') }}', url: url_for('misc.ping'),
type:'POST', type:'POST',
success: function() {}, success: function() {},
error: function() {} error: function() {}
@ -753,7 +753,11 @@ define(
var preference = null; var preference = null;
$.ajax({ $.ajax({
async: false, async: false,
url: "{{ url_for('preferences.preferences') }}" +"/"+ module +"/"+ preference_name, url: url_for(
'preferences.get_by_name', {
'module': module,
'preference': preference_name
}),
success: function(res) { success: function(res) {
preference = res; preference = res;
}, },

View File

@ -0,0 +1,11 @@
define(
'pgadmin.browser.endpoints', [],
function() {
return {
{% for endpoint, url in current_app.exposed_endpoint_url_map %}{% if loop.index != 1 %},
{% endif %}
'{{ endpoint|safe }}': '{{ url|safe }}'{% endfor %}
};
});

View File

@ -101,6 +101,12 @@ class HelpModule(PgAdminModule):
'Path to the EDB Advanced Server documentation. $VERSION$ will be replaced with the major.minor version number.') 'Path to the EDB Advanced Server documentation. $VERSION$ will be replaced with the major.minor version number.')
) )
def get_exposed_url_endpoints(self):
"""
Returns the list of URLs exposed to the client.
"""
return ['help.static']
# Initialise the module # Initialise the module
blueprint = HelpModule(MODULE_NAME, __name__, static_url_path='/help', blueprint = HelpModule(MODULE_NAME, __name__, static_url_path='/help',

View File

@ -54,13 +54,20 @@ class MiscModule(PgAdminModule):
'value': lang}) 'value': lang})
# Register options for the User language settings # Register options for the User language settings
language = self.misc_preference.register( self.misc_preference.register(
'miscellaneous', 'user_language', 'miscellaneous', 'user_language',
_("User language"), 'options', 'en', _("User language"), 'options', 'en',
category_label=_('User language'), category_label=_('User language'),
options=lang_options options=lang_options
) )
def get_exposed_url_endpoints(self):
"""
Returns:
list: a list of url endpoints exposed to the client.
"""
return ['misc.ping']
# Initialise the module # Initialise the module
blueprint = MiscModule(MODULE_NAME, __name__) blueprint = MiscModule(MODULE_NAME, __name__)

View File

@ -15,7 +15,6 @@ side and for getting/setting preferences.
import simplejson as json import simplejson as json
from flask import render_template, url_for, Response, request, session from flask import render_template, url_for, Response, request, session
from flask_babel import gettext from flask_babel import gettext
from flask_login import current_user
from flask_security import login_required from flask_security import login_required
from pgadmin.utils import PgAdminModule from pgadmin.utils import PgAdminModule
from pgadmin.utils.ajax import success_return, \ from pgadmin.utils.ajax import success_return, \
@ -56,21 +55,17 @@ class PreferencesModule(PgAdminModule):
] ]
} }
def get_exposed_url_endpoints(self):
"""
Returns:
list: a list of url endpoints exposed to the client.
"""
return ['preferences.index', 'preferences.get_by_name']
blueprint = PreferencesModule(MODULE_NAME, __name__) blueprint = PreferencesModule(MODULE_NAME, __name__)
@blueprint.route("/")
@login_required
def index():
"""Render the preferences dialog."""
return render_template(
MODULE_NAME + "/index.html",
username=current_user.email,
_=gettext
)
@blueprint.route("/preferences.js") @blueprint.route("/preferences.js")
@login_required @login_required
def script(): def script():
@ -80,8 +75,8 @@ def script():
mimetype="application/javascript") mimetype="application/javascript")
@blueprint.route("/preferences", methods=["GET"]) @blueprint.route("/", methods=["GET"], endpoint='index')
@blueprint.route("/preferences/<module>/<preference>") @blueprint.route("/<module>/<preference>", endpoint='get_by_name')
@login_required @login_required
def preferences(module=None, preference=None): def preferences(module=None, preference=None):
"""Fetch all/or requested preferences of pgAdmin IV.""" """Fetch all/or requested preferences of pgAdmin IV."""
@ -147,7 +142,7 @@ def preferences(module=None, preference=None):
) )
@blueprint.route("/preferences/<int:pid>", methods=["PUT"]) @blueprint.route("/<int:pid>", methods=["PUT"], endpoint="update")
@login_required @login_required
def save(pid): def save(pid):
""" """

View File

@ -1,7 +1,7 @@
define([ define([
'jquery', 'alertify', 'pgadmin', 'underscore', 'backform', 'sources/gettext', 'sources/url_for', 'jquery', 'underscore', 'alertify',
'pgadmin.browser', 'sources/gettext', 'pgadmin.backform' 'pgadmin', 'backform', 'pgadmin.browser', 'pgadmin.backform'
], function($, alertify, pgAdmin, _, Backform, pgBrowser, gettext) { ], function(gettext, url_for, $, _, alertify, pgAdmin, Backform, pgBrowser) {
// This defines the Preference/Options Dialog for pgAdmin IV. // This defines the Preference/Options Dialog for pgAdmin IV.
pgAdmin = pgAdmin || window.pgAdmin || {}; pgAdmin = pgAdmin || window.pgAdmin || {};
@ -52,7 +52,7 @@ define([
var changed = {}, var changed = {},
preferences = this.preferences = new (Backbone.Collection.extend({ preferences = this.preferences = new (Backbone.Collection.extend({
model: PreferenceModel, model: PreferenceModel,
url: "{{ url_for('preferences.preferences') }}", url: url_for('preferences.index'),
updateAll: function() { updateAll: function() {
// We will send only the modified data to the server. // We will send only the modified data to the server.
for (var key in changed) { for (var key in changed) {
@ -207,7 +207,7 @@ define([
}; };
return 'switch'; return 'switch';
case 'integer': case 'integer':
return 'integer'; return 'numeric';
case 'numeric': case 'numeric':
return 'numeric'; return 'numeric';
case 'date': case 'date':
@ -345,7 +345,7 @@ define([
selectable: true, selectable: true,
expand: true, expand: true,
ajax: { ajax: {
url: "{{ url_for('preferences.preferences') }}" url: url_for('preferences.index')
} }
}); });
@ -354,15 +354,20 @@ define([
setup: function() { setup: function() {
return { return {
buttons:[{ buttons:[{
text: '', key: 27, className: 'btn btn-default pull-left fa fa-lg fa-question', text: '', key: 27,
attrs:{name:'dialog_help', type:'button', label: gettext('Preferences'), className: 'btn btn-default pull-left fa fa-lg fa-question',
url: '{{ url_for('help.static', filename='preferences.html') }}'} attrs:{
name:'dialog_help', type:'button',
label: gettext('Preferences'),
url: url_for(
'help.static', {'filename': 'preferences.html'}
)
}
},{ },{
text: gettext('OK'), key: 13, className: "btn btn-primary fa fa-lg fa-save pg-alertify-button" text: gettext('OK'), key: 13, className: "btn btn-primary fa fa-lg fa-save pg-alertify-button"
},{ },{
text: gettext('Cancel'), className: "btn btn-danger fa fa-lg fa-times pg-alertify-button" text: gettext('Cancel'), className: "btn btn-danger fa fa-lg fa-times pg-alertify-button"
} }],
],
focus: { element: 0 }, focus: { element: 0 },
options: { options: {
padding: !1, padding: !1,

View File

@ -44,6 +44,13 @@ class SettingsModule(PgAdminModule):
] ]
} }
def get_exposed_url_endpoints(self):
"""
Returns:
list: a list of url endpoints exposed to the client.
"""
return ['settings.store', 'settings.store_bulk']
blueprint = SettingsModule(MODULE_NAME, __name__) blueprint = SettingsModule(MODULE_NAME, __name__)
@ -82,8 +89,8 @@ def script():
mimetype="application/javascript") mimetype="application/javascript")
@blueprint.route("/store", methods=['POST']) @blueprint.route("/store", methods=['POST'], endpoint='store_bulk')
@blueprint.route("/store/<setting>/<value>", methods=['GET']) @blueprint.route("/store/<setting>/<value>", methods=['PUT'], endpoint='store')
@login_required @login_required
def store(setting=None, value=None): def store(setting=None, value=None):
"""Store a configuration setting, or if this is a POST request and a """Store a configuration setting, or if this is a POST request and a

View File

@ -1,8 +1,10 @@
define(['jquery', define(['jquery',
'sources/selection/column_selector', 'sources/selection/column_selector',
'sources/selection/row_selector', 'sources/selection/row_selector',
'sources/selection/range_selection_helper'], 'sources/selection/range_selection_helper',
function ($, ColumnSelector, RowSelector, RangeSelectionHelper) { 'sources/url_for'
],
function ($, ColumnSelector, RowSelector, RangeSelectionHelper, url_for) {
var Slick = window.Slick; var Slick = window.Slick;
var GridSelector = function (columnDefinitions) { var GridSelector = function (columnDefinitions) {
@ -32,7 +34,7 @@ define(['jquery',
'title="Select/Deselect All">' + 'title="Select/Deselect All">' +
'<br>' + '<br>' +
columnDefinitions[0].name + columnDefinitions[0].name +
'<img class="select-all-icon" src="/static/img/select-all-icon.png">' + '<img class="select-all-icon" src="' + url_for('static', {'filename': 'img/select-all-icon.png'}) + '"></img>'
'</span>'; '</span>';
return columnDefinitions; return columnDefinitions;
}; };

View File

@ -0,0 +1,41 @@
define(["pgadmin.browser.endpoints"], function (endpoints) {
/***
* This method behaves as a drop-in replacement for flask url_for function.
* It uses the exposed URLs file under the hood, and replace the substitions provided by the modules.
*
* ex.
* url_for("help.static", {filename: "server_dialog.html"}) will produce the
* output string '/help/help/server_dialog.html' from the url ->
* '/help/help/<path:filename>'.
*
* @param {String} text
* @param {Object} substitutions
*/
return function url_for(endpoint, substitutions) {
var rawURL = endpoints[endpoint];
// captures things of the form <path:substitutionName>
var substitutionGroupsRegExp = /([<])([^:^>]*:)?([^>]+)([>])/g;
var matchFound;
var interpolated = rawURL;
if (!rawURL)
return rawURL;
interpolated = interpolated.replace(
substitutionGroupsRegExp,
function (_origin, _1, _2, substitutionName) {
if (substitutionName in substitutions) {
return substitutions[substitutionName];
}
return _origin;
}
);
return interpolated;
};
});

View File

@ -100,6 +100,13 @@ class PgAdminModule(Blueprint):
""" """
return [] return []
def get_exposed_url_endpoints(self):
"""
Returns:
list: a list of url endpoints exposed to the client.
"""
return []
@property @property
def stylesheets(self): def stylesheets(self):
stylesheets = self.get_own_stylesheets() stylesheets = self.get_own_stylesheets()
@ -132,6 +139,15 @@ class PgAdminModule(Blueprint):
for key, value in menu_items.items()) for key, value in menu_items.items())
return menu_items return menu_items
@property
def exposed_endpoints(self):
res = self.get_exposed_url_endpoints()
for module in self.submodules:
res += module.exposed_endpoints
return res
import os import os
import sys import sys

View File

@ -0,0 +1,12 @@
//////////////////////////////////////////////////////////////////////////
//
// pgAdmin 4 - PostgreSQL Tools
//
// Copyright (C) 2013 - 2017, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
//////////////////////////////////////////////////////////////////////////
define(function () {
return {'static': '/base/pgadmin/static/<path:filename>'}
});

View File

@ -37,6 +37,7 @@ require.config({
'slickgrid': sourcesDir + 'vendor/slickgrid/slick.core', 'slickgrid': sourcesDir + 'vendor/slickgrid/slick.core',
'slickgrid/slick.grid': sourcesDir + 'vendor/slickgrid/slick.grid', 'slickgrid/slick.grid': sourcesDir + 'vendor/slickgrid/slick.grid',
'translations': '/base/regression/javascript/fake_translations', 'translations': '/base/regression/javascript/fake_translations',
'pgadmin.browser.endpoints': '/base/regression/javascript/fake_endpoints',
'sources': sourcesDir + 'js', 'sources': sourcesDir + 'js',
'browser': '/base/pgadmin/browser/static/js' 'browser': '/base/pgadmin/browser/static/js'
}, },