diff --git a/src/Mapbender/DataManagerBundle/Element/DataManager.php b/src/Mapbender/DataManagerBundle/Element/DataManager.php index e9ba3322..d35b4663 100644 --- a/src/Mapbender/DataManagerBundle/Element/DataManager.php +++ b/src/Mapbender/DataManagerBundle/Element/DataManager.php @@ -44,7 +44,7 @@ public static function getClassDescription() public function getWidgetName(Element $element) { - return 'mapbender.mbDataManager'; + return 'MbDataManager'; } public static function getDefaultConfiguration() @@ -73,7 +73,7 @@ public function getRequiredAssets(Element $element) '@MapbenderDataManagerBundle/Resources/public/DialogFactory.js', '../vendor/blueimp/jquery-file-upload/js/jquery.fileupload.js', '@MapbenderDataManagerBundle/Resources/public/TableRenderer.js', - '@MapbenderDataManagerBundle/Resources/public/dataManager.element.js', + '@MapbenderDataManagerBundle/Resources/public/MbDataManager.js', ), 'trans' => array( 'mb.data-manager.*', diff --git a/src/Mapbender/DataManagerBundle/Resources/public/dataManager.element.js b/src/Mapbender/DataManagerBundle/Resources/public/MbDataManager.js similarity index 64% rename from src/Mapbender/DataManagerBundle/Resources/public/dataManager.element.js rename to src/Mapbender/DataManagerBundle/Resources/public/MbDataManager.js index e74e3e15..b6f2b9d0 100644 --- a/src/Mapbender/DataManagerBundle/Resources/public/dataManager.element.js +++ b/src/Mapbender/DataManagerBundle/Resources/public/MbDataManager.js @@ -1,87 +1,43 @@ -(function($) { - /** - * @typedef {Object} DataManagerItem - */ - /** - * @typedef {Object} DataStoreConfig - * @property {String} id - * @property {String} uniqueId - */ - /** - * @typedef {Object} DataManagerSchemaConfig - * @property {String} schemaName identifier for schema - * @property {Array} [combine] - * @property {DataStoreConfig} dataStore - * @property {boolean} allowEdit - * @property {boolean} allowCreate - * @property {boolean} allowDelete - * @property {boolean} allowRefresh - * @property {String} label - * @property {Array<*>} formItems - * @property {Object} popup - * @property {String} popup.title - * @property {String} popup.width - * @property {*} table - */ - /** - * @typedef {Object} DataManagagerBaseEventData - * @property {Object} item - * @property {String} itemId - * @property {DataManagerSchemaConfig} schema - * @property {*} originator sending widget instance - */ - /** - * @typedef {DataManagagerBaseEventData} DataManagerDeletedEventData - * @property {String} schemaName - * @property {Object} feature digitizer / bc amenity - */ - /** - * @typedef {DataManagagerBaseEventData} DataManagagerSaveEventData - * @property {(String|null)} originalId null for newly saved item - * @property {String} uniqueIdKey legacy: name of attribute on item that contains id - * @property {String} schemaName identifier for schema - * @property {String} scheme legacy (ambiguous): alias for schemaName - */ - - $.widget("mapbender.mbDataManager", { - options: { - /** @type {Object} */ - schemes: {} - }, - /** @type {(DataManagerSchemaConfig|null)} */ - currentSettings: null, - toolsetTemplate_: null, - tableButtonsTemplate_: null, - fetchXhr: null, - $loadingIndicator_: null, - /** @type {Promise|null} */ - grantsRequest_: null, - - _create: function() { - if (Array.isArray(this.options.schemes) || !Object.keys(this.options.schemes).length) { - throw new Error("Missing schema configuration"); +(function() { + + class MbDataManager extends MapbenderElement { + constructor(configuration, $element) { + super(configuration, $element); + + this.currentSettings = null; + this.toolsetTemplate_ = null; + this.tableButtonsTemplate_ = null; + this.fetchXhr = null; + this.$loadingIndicator_ = null; + this.grantsRequest_ = null; + this.formRenderer_ = null; + this.dialogFactory_ = null; + this.tableRenderer = null; + this.currentPopup = null; + + if (Array.isArray(this.options.schemes) || !Object.keys(this.options.schemes || {}).length) { + throw new Error('Missing schema configuration'); } this.elementUrl = [ Mapbender.configuration.application.urls.element, - this.element.attr('id'), - '' // produce trailing slash + this.$element.attr('id'), + '' // produce trailing slash ].join('/'); - this.$loadingIndicator_ = $('.loading-indicator', this.element); - var $accordionHeader = this.element.parentsUntil('.sidePane', '.container-accordion').prev('.accordion'); + this.$loadingIndicator_ = $('.loading-indicator', this.$element); + const $accordionHeader = this.$element.parentsUntil('.sidePane', '.container-accordion').prev('.accordion'); if ($accordionHeader.length) { this.$loadingIndicator_.remove(); $accordionHeader .addClass('clearfix') - .prepend(this.$loadingIndicator_.css({float: 'right', opacity: 0.0})) - ; + .prepend(this.$loadingIndicator_.css({ float: 'right', opacity: 0.0 })); } - var self = this; + const self = this; this.grantsRequest_ = $.getJSON([this.elementUrl, 'grants'].join('')); this.grantsRequest_.then((function(mergeWith) { return function(allGrants) { - var schemaNames = Object.keys(allGrants); - for (var i = 0; i < schemaNames.length; ++i) { - var schemaName = schemaNames[i]; + const schemaNames = Object.keys(allGrants); + for (let i = 0; i < schemaNames.length; ++i) { + const schemaName = schemaNames[i]; if (allGrants[schemaName] === false) { delete mergeWith[schemaName]; } else { @@ -94,209 +50,220 @@ this.grantsRequest_.then(function() { self.updateSchemaSelector_(); }); - this.tableButtonsTemplate_ = $('.-tpl-table-buttons', this.element).remove().css('display', '').html(); - this.toolsetTemplate_ = $('.-tpl-toolset', this.element).remove().css('display', '').html(); + this.tableButtonsTemplate_ = $('.-tpl-table-buttons', this.$element).remove().css('display', '').html(); + this.toolsetTemplate_ = $('.-tpl-toolset', this.$element).remove().css('display', '').html(); this.formRenderer_ = this._createFormRenderer(); this.dialogFactory_ = Mapbender.DataManager.DialogFactory; - var schemaNames = Object.keys(this.options.schemes); - for (var s = 0; s < schemaNames.length; ++s) { - var schemaName = schemaNames[s]; - var schema = this.options.schemes[schemaName]; + const schemaNames = Object.keys(this.options.schemes); + for (let s = 0; s < schemaNames.length; ++s) { + const schemaName = schemaNames[s]; + const schema = this.options.schemes[schemaName]; if (!schema.combine) { - var fileConfigs = this._getDataStoreFromSchema(schema).files || []; - var schemaBaseUrl = [this.elementUrl, schemaName, '/'].join(''); + const fileConfigs = this._getDataStoreFromSchema(schema).files || []; + const schemaBaseUrl = [this.elementUrl, schemaName, '/'].join(''); this.formRenderer_.prepareItems(schema.formItems || [], schemaBaseUrl, fileConfigs); } } this.tableRenderer = this._createTableRenderer(); this._initializeEvents(); this._afterCreate(); - }, - _createFormRenderer: function() { + } + + _createFormRenderer() { return new Mapbender.DataManager.FormRenderer(); - }, - _createTableRenderer: function() { + } + + _createTableRenderer() { return new Mapbender.DataManager.TableRenderer(this, this.tableButtonsTemplate_); - }, - /** - * @private - */ - updateSchemaSelector_: function() { - var self = this; - var $select = $('select.-fn-schema-selector', this.element); - var schemaNames = Object.keys(this.options.schemes); - var visible = schemaNames.filter(function(schemaName) { + } + + updateSchemaSelector_() { + const self = this; + const $select = $('select.-fn-schema-selector', this.$element); + const schemaNames = Object.keys(this.options.schemes); + const visible = schemaNames.filter(function(schemaName) { return self.options.schemes[schemaName].listed; }); - if (visible.length === 1) { $select.hide(); - var singleScheme = this.options.schemes[visible[0]]; - var title = singleScheme.label || singleScheme.schemaName; + const singleScheme = this.options.schemes[visible[0]]; + const title = singleScheme.label || singleScheme.schemaName; if (title) { $select.before($('

').text(title)); } } - // build select options $select.empty(); - for (var i = 0; i < visible.length; ++i) { - var schemaConfig = this.options.schemes[visible[i]]; - var option = $("