diff --git a/client/src/collection-factory.js b/client/src/collection-factory.js index 0387012922..56a805dcbb 100644 --- a/client/src/collection-factory.js +++ b/client/src/collection-factory.js @@ -37,16 +37,29 @@ this.config = config; }; - _.extend(CollectionFactory.prototype, /** @lends Espo.CollectionFactory */ { + _.extend(CollectionFactory.prototype, /** @lends Espo.CollectionFactory.prototype */ { + /** + * @private + */ loader: null, + /** + * @private + */ modelFactory: null, + /** + * @private + */ recordListMaxSizeLimit: 200, /** - * @param {string} name Entity Type. + * Create a collection. + * + * @param {string} name An entity Type. + * @param {Function} [callback] Deprecated. + * @param {Object} [context] Deprecated. * @returns {Promise} */ create: function (name, callback, context) { diff --git a/client/src/collection.js b/client/src/collection.js index 6dd569e01f..570cf201a6 100644 --- a/client/src/collection.js +++ b/client/src/collection.js @@ -32,7 +32,7 @@ define('collection', [], function () { * Add a model or models. Firing an `add` event for each model, and an `update` event afterwards. * * @function add - * @memberof Backbone.Collection + * @memberof Backbone.Collection.prototype * @param {Backbone.Model|Backbone.Model[]} models A model or models. * @param {Object} [options] Options. */ @@ -42,7 +42,7 @@ define('collection', [], function () { * unless `{silent: true}`. * * @function remove - * @memberof Backbone.Collection + * @memberof Backbone.Collection.prototype * @param {Backbone.Model|Backbone.Model[]|string|string[]} models A model, models, ID or IDs. * @param {Object} [options] Options. */ @@ -51,7 +51,7 @@ define('collection', [], function () { * Append a model. * * @function push - * @memberof Backbone.Collection + * @memberof Backbone.Collection.prototype * @param {Backbone.Model} model A model. * @param {Object} [options] Options. */ @@ -60,19 +60,19 @@ define('collection', [], function () { * Remove and return the last model from the collection. * * @function pop - * @memberof Backbone.Collection + * @memberof Backbone.Collection.prototype * @param {Object} [options] Options. */ /** * @class Espo.Collection - * @extends Backbone.Collection + * @extends Backbone.Collection.prototype * @mixes Backbone.Events * * @property {number} length - A number of records. * @property {Espo.Model[]} models - Models. */ - var Collection = Backbone.Collection.extend(/** @lends Espo.Collection */ { + var Collection = Backbone.Collection.extend(/** @lends Espo.Collection.prototype */ { /** * An entity type. diff --git a/client/src/controller.js b/client/src/controller.js index 2b2f1d4996..72d66f4896 100644 --- a/client/src/controller.js +++ b/client/src/controller.js @@ -28,6 +28,11 @@ define('controller', [], function () { + /** + * @callback Espo.Controller.viewCallback + * @param {Espo.View} view A view. + */ + /** * Controller. Views, Models and Collections are created here. * @@ -65,50 +70,63 @@ define('controller', [], function () { this.set('masterRendered', false); }; - _.extend(Controller.prototype, /** @lends Espo.Controller */ { + _.extend(Controller.prototype, /** @lends Espo.Controller.prototype */ { /** * A default action. + * * @param {string} */ defaultAction: 'index', /** * A name. + * * @param {(string|false)} */ name: false, /** * Params. + * * @param {Object} */ params: null, /** * A view factory. + * * @param {Bull.ViewFactory} */ viewFactory: null, /** * A model factory. + * * @param {Espo.ModelFactory} + * @protected */ modelFactory: null, /** * A controller factory. + * * @param {Espo.ControllerFactory} + * @protected */ controllerFactory: null, /** * Initialize. + * + * @protected */ initialize: function () {}, /** + * Set the router. + * + * @internal * @param {Espo.Router} router */ setRouter: function (router) { @@ -116,6 +134,7 @@ define('controller', [], function () { }, /** + * @protected * @returns {Espo.Models.Settings} */ getConfig: function () { @@ -123,6 +142,7 @@ define('controller', [], function () { }, /** + * @protected * @returns {Espo.Models.User} */ getUser: function () { @@ -130,6 +150,7 @@ define('controller', [], function () { }, /** + * @protected * @returns {Espo.Models.Preferences} */ getPreferences: function () { @@ -137,6 +158,7 @@ define('controller', [], function () { }, /** + * @protected * @returns {Espo.Acl} */ getAcl: function () { @@ -144,6 +166,7 @@ define('controller', [], function () { }, /** + * @protected * @returns {Espo.Cache} */ getCache: function () { @@ -151,6 +174,7 @@ define('controller', [], function () { }, /** + * @protected * @returns {Espo.Router} */ getRouter: function () { @@ -158,6 +182,7 @@ define('controller', [], function () { }, /** + * @protected * @returns {Espo.Storage} */ getStorage: function () { @@ -165,6 +190,7 @@ define('controller', [], function () { }, /** + * @protected * @returns {Espo.Metadata} */ getMetadata: function () { @@ -172,6 +198,7 @@ define('controller', [], function () { }, /** + * @protected * @returns {Espo.DateTime} */ getDateTime: function () { @@ -180,7 +207,8 @@ define('controller', [], function () { /** * Get a parameter of all controllers. - * @param {string} key + * + * @param {string} key A key. * @return {*} Null if doesn't exist. */ get: function (key) { @@ -192,8 +220,9 @@ define('controller', [], function () { }, /** - * Set a paramer for all controllers. - * @param {key} Name of view. + * Set a parameter for all controllers. + * + * @param {string} key A name of a view. * @param {*} value */ set: function (key, value) { @@ -202,7 +231,8 @@ define('controller', [], function () { /** * Unset a parameter. - * @param {string} key + * + * @param {string} key A key. */ unset: function (key) { delete this.params[key]; @@ -210,7 +240,8 @@ define('controller', [], function () { /** * Has a parameter. - * @param {string} key + * + * @param {string} key A key. * @returns {boolean} */ has: function (key) { @@ -219,8 +250,9 @@ define('controller', [], function () { /** * Get a stored main view. - * @param {string} key - * @returns {Espo.View|null} + * + * @param {string} key A key. + * @returns {?Espo.View} */ getStoredMainView: function (key) { return this.get('storedMainView-' + key); @@ -251,8 +283,9 @@ define('controller', [], function () { /** * Store a main view. - * @param {string} key - * @param {Espo.View} view + * + * @param {string} key A key. + * @param {Espo.View} view A view. */ storeMainView: function (key, view) { this.set('storedMainView-' + key, view); @@ -287,13 +320,17 @@ define('controller', [], function () { /** * Check access to an action. - * @param {string} action + * + * @param {string} action An action. * @returns {boolean} */ checkAccess: function (action) { return true; }, + /** + * Process access check to the controller. + */ handleAccessGlobal: function () { if (!this.checkAccessGlobal()) { throw new Espo.Exceptions.AccessDenied("Denied access to '" + this.name + "'"); @@ -302,6 +339,7 @@ define('controller', [], function () { /** * Check access to the controller. + * * @returns {boolean} */ checkAccessGlobal: function () { @@ -309,7 +347,9 @@ define('controller', [], function () { }, /** - * @param {string} action + * Check access to an action. Throwing an exception. + * + * @param {string} action An action. */ handleCheckAccess: function (action) { if (!this.checkAccess(action)) { @@ -327,6 +367,8 @@ define('controller', [], function () { }, /** + * Process an action. + * * @param {string} action * @param {Object} options */ @@ -357,7 +399,8 @@ define('controller', [], function () { /** * Create a master view, render if not already rendered. - * @param {Function} callback Master view will be argument for this. + * + * @param {Espo.Controller.viewCallback} callback A callback with a created master view. */ master: function (callback) { let entire = this.get('entire'); @@ -397,9 +440,9 @@ define('controller', [], function () { /** * Create a main view in the master. - * @param {String} view Name of view. + * @param {String} view A view name. * @param {Object} options Options for view. - * @param {Function|null} [callback] + * @param {Espo.Controller.viewCallback} [callback] A callback with a created view. * @param {boolean} [useStored] Use a stored view if available. * @param {boolean} [storedKey] A stored view key. */ @@ -512,6 +555,9 @@ define('controller', [], function () { }); }, + /** + * Show a loading notify-message. + */ showLoadingNotification: function () { let master = this.get('master'); @@ -520,6 +566,9 @@ define('controller', [], function () { } }, + /** + * Hide a loading notify-message. + */ hideLoadingNotification: function () { let master = this.get('master'); @@ -530,9 +579,10 @@ define('controller', [], function () { /** * Create a view in the element. - * @param {String} view Name of view. - * @param {Object} options Options for view. - * @param {Function} + * + * @param {String} view A view name. + * @param {Object} options Options for a view. + * @param {Espo.Controller.viewCallback} [callback] A callback with a created view. */ entire: function (view, options, callback) { let master = this.get('master'); diff --git a/client/src/model-factory.js b/client/src/model-factory.js index 20e08a9ae7..5c3d7573ae 100644 --- a/client/src/model-factory.js +++ b/client/src/model-factory.js @@ -39,20 +39,39 @@ define('model-factory', [], function () { this.seeds = {}; }; - _.extend(ModelFactory.prototype, /** @lends Espo.ModelFactory */ { + _.extend(ModelFactory.prototype, /** @lends Espo.ModelFactory.prototype */ { + /** + * @private + */ loader: null, + /** + * @private + */ metadata: null, + /** + * @private + */ seeds: null, + /** + * @private + */ dateTime: null, + /** + * @private + */ user: null, /** - * @param {string} name Entity Type. + * Create a model. + * + * @param {string} name An entity type. + * @param {Function} [callback] Deprecated. + * @param {Object} [context] Deprecated. * @returns {Promise} */ create: function (name, callback, context) { @@ -71,6 +90,9 @@ define('model-factory', [], function () { }); }, + /** + * @private + */ getSeed: function (name, callback) { if ('name' in this.seeds) { callback(this.seeds[name]); diff --git a/client/src/model.js b/client/src/model.js index 7332ce6fd5..c2083a61b2 100644 --- a/client/src/model.js +++ b/client/src/model.js @@ -34,7 +34,7 @@ define('model', [], function () { * Save values to the backend. * * @function save - * @memberof Backbone.Model + * @memberof Backbone.Model.prototype * @param {Object} [attributes] Attribute values. * @param {Object} [options] Options. * @returns {Promise} @@ -44,7 +44,7 @@ define('model', [], function () { * Whether an attribute is changed. To be used only within a callback of a 'change' event listener. * * @function changed - * @memberof Backbone.Model + * @memberof Backbone.Model.prototype * @param {string} attribute An attribute name. * @returns {boolean} */ @@ -54,7 +54,7 @@ define('model', [], function () { * Fires a `change` event unless `silent` is passed as an option. * * @function clear - * @memberof Backbone.Model + * @memberof Backbone.Model.prototype * @param {Object} [options] Options. */ @@ -67,7 +67,7 @@ define('model', [], function () { * @property {Object} attributes - Attribute values. * @property {string} cid - An ID unique among all models. */ - let Model = Dep.extend(/** @lends Espo.Model */{ + let Model = Dep.extend(/** @lends Espo.Model.prototype */{ /** * A root URL. @@ -81,8 +81,14 @@ define('model', [], function () { */ name: null, + /** + * @private + */ dateTime: null, + /** + * @private + */ _user: null, /** @@ -91,6 +97,9 @@ define('model', [], function () { */ defs: null, + /** + * @protected + */ initialize: function () { this.urlRoot = this.urlRoot || this.name; @@ -164,7 +173,7 @@ define('model', [], function () { }, /** - * Is new. + * Whether is new. * * @returns {boolean} */ @@ -173,6 +182,8 @@ define('model', [], function () { }, /** + * Set defs. + * * @param {Object} defs */ setDefs: function (defs) { @@ -239,6 +250,8 @@ define('model', [], function () { }, /** + * @protected + * * @param {*} defaultValue * @returns {*} * @deprecated @@ -369,8 +382,8 @@ define('model', [], function () { /** * Get a link param. * - * @param {string} link - * @param {string} param + * @param {string} link A link. + * @param {string} param A param. * @returns {*} */ getLinkParam: function (link, param) { @@ -386,7 +399,7 @@ define('model', [], function () { /** * Is a field read-only. * - * @param {string} field + * @param {string} field A field. * @returns {bool} */ isFieldReadOnly: function (field) { @@ -396,7 +409,7 @@ define('model', [], function () { /** * If a field required. * - * @param {string} field + * @param {string} field A field. * @returns {bool} */ isRequired: function (field) { @@ -406,7 +419,7 @@ define('model', [], function () { /** * Get IDs of a link-multiple field. * - * @param {type} field + * @param {type} field A link-multiple field name. * @returns {string[]} */ getLinkMultipleIdList: function (field) { @@ -416,17 +429,25 @@ define('model', [], function () { /** * Get team IDs. * - * @param {type} field * @returns {string[]} */ getTeamIdList: function () { return this.get('teamsIds') || []; }, + + /** + * @protected + * @returns {Espo.DateTime} + */ getDateTime: function () { return this.dateTime; }, + /** + * @protected + * @returns {Espo.Models.User} + */ getUser: function () { return this._user; }, @@ -434,7 +455,7 @@ define('model', [], function () { /** * Whether has a field. * - * @param {string} field + * @param {string} field A field. * @returns {boolean} */ hasField: function (field) { @@ -444,7 +465,7 @@ define('model', [], function () { /** * Whether has a link. * - * @param {string} field + * @param {string} link A link. * @returns {boolean} */ hasLink: function (link) { @@ -476,6 +497,7 @@ define('model', [], function () { /** * Fetch values from the backend. + * * @param {Object} options Options. * @returns {Promise} */ diff --git a/client/src/router.js b/client/src/router.js index bb5b2868f4..6c6716a16c 100644 --- a/client/src/router.js +++ b/client/src/router.js @@ -32,8 +32,11 @@ define('router', [], function () { * @class Espo.Router * @mixes Espo.Events */ - let Router = Backbone.Router.extend(/** @lends Espo.Router */ { + let Router = Backbone.Router.extend(/** @lends Espo.Router.prototype */ { + /** + * @private + */ routeList: [ { route: "clearCache", @@ -81,8 +84,14 @@ define('router', [], function () { }, ], + /** + * @private + */ _bindRoutes: function() {}, + /** + * @private + */ setupRoutes: function () { this.routeParams = {}; @@ -117,18 +126,48 @@ define('router', [], function () { }); }, + /** + * @private + */ _last: null, + /** + * Whether a confirm-leave-out was set. + * + * @public + * @property {boolean} + */ confirmLeaveOut: false, + /** + * Whether back has been processed. + * + * @public + * @property {boolean} + */ backProcessed: false, + /** + * @property {string} + * @internal + */ confirmLeaveOutMessage: 'Are you sure?', + /** + * @property {string} + * @internal + */ confirmLeaveOutConfirmText: 'Yes', + /** + * @property {string} + * @internal + */ confirmLeaveOutCancelText: 'No', + /** + * @private + */ initialize: function (options) { this.options = options || {}; this.setupRoutes(); @@ -136,33 +175,33 @@ define('router', [], function () { this.history = []; let detectBackOrForward = (onBack, onForward) => { - hashHistory = [window.location.hash]; - historyLength = window.history.length; + let hashHistory = [window.location.hash]; + let historyLength = window.history.length; return function () { let hash = window.location.hash, length = window.history.length; if (hashHistory.length && historyLength === length) { if (hashHistory[hashHistory.length - 2] === hash) { - hashHistory = hashHistory.slice(0, -1); if (onBack) { onBack(); } - } - else { - hashHistory.push(hash); - if (onForward) { - onForward(); - } + return; } - } - else { + hashHistory.push(hash); - historyLength = length; + + if (onForward) { + onForward(); + } + + return; } + + hashHistory.push(hash); }; }; @@ -203,10 +242,14 @@ define('router', [], function () { return '#' + Backbone.history.fragment; }, + /** + * @callback Espo.Router.checkConfirmLeaveOutCallback + */ + /** * Process confirm-leave-out. * - * @param {Function} callback Proceed if confirmed. + * @param {Espo.Router.checkConfirmLeaveOutCallback} callback Proceed if confirmed. * @param {?Object} [context] A context. * @param {boolean} [navigateBack] To navigate back if not confirmed. */ @@ -255,6 +298,9 @@ define('router', [], function () { callback.call(context); }, + /** + * @private + */ route: function (route, name, callback) { let routeOriginal = route; @@ -304,6 +350,9 @@ define('router', [], function () { return this; }, + /** + * @private + */ execute: function (callback, args, name, routeOriginal, options) { this.checkConfirmLeaveOut(function () { if (name === 'defaultRoute') { @@ -319,7 +368,7 @@ define('router', [], function () { /** * Navigate. * - * @param {string} fragment + * @param {string} fragment An URL fragment. * @param {Options} options Options: trigger, replace. */ navigate: function (fragment, options) { @@ -346,6 +395,9 @@ define('router', [], function () { this.navigate(url, options); }, + /** + * @private + */ _parseOptionsParams: function (string) { if (!string) { return {}; @@ -372,6 +424,9 @@ define('router', [], function () { return options; }, + /** + * @private + */ defaultRoute: function (params, options) { let controller = params.controller || options.controller; let action = params.action || options.action; @@ -379,6 +434,9 @@ define('router', [], function () { this.dispatch(controller, action, options); }, + /** + * @private + */ record: function (controller, action, id, options) { options = this._parseOptionsParams(options); @@ -387,36 +445,60 @@ define('router', [], function () { this.dispatch(controller, action, options); }, + /** + * @private + */ view: function (controller, id, options) { this.record(controller, 'view', id, options); }, + /** + * @private + */ edit: function (controller, id, options) { this.record(controller, 'edit', id, options); }, + /** + * @private + */ create: function (controller, options) { this.record(controller, 'create', null, options); }, + /** + * @private + */ action: function (controller, action, options) { this.dispatch(controller, action, this._parseOptionsParams(options)); }, + /** + * @private + */ defaultAction: function (controller) { this.dispatch(controller, null); }, + /** + * @private + */ home: function () { this.dispatch('Home', null); }, + /** + * Process `logout` route. + */ logout: function () { this.dispatch(null, 'logout'); this.navigate('', {trigger: false}); }, + /** + * @private + */ clearCache: function () { this.dispatch(null, 'clearCache'); }, @@ -452,7 +534,6 @@ define('router', [], function () { }); return Router; - }); function isIOS9UIWebView() { diff --git a/client/src/view.js b/client/src/view.js index 8cac644d68..dc5bdefd50 100644 --- a/client/src/view.js +++ b/client/src/view.js @@ -34,24 +34,34 @@ define('view', [], function () { * @class Espo.View * @extends Bull.View * - * @property {(Espo.Model|undefined)} model - A model. - * @property {(Espo.Collection|undefined)} collection - A collection. + * @property {?Espo.Model} model - A model. + * @property {?Espo.Collection} collection - A collection. * @property {Object} options - Passed options. */ - return Bull.View.extend(/** @lends Espo.View */{ + return Bull.View.extend(/** @lends Espo.View.prototype */{ /** + * @callback Espo.View.actionHandlerCallback + * @param {jQuery.Event} e + */ + + /** + * Add a DOM action event handler. + * * @param {string} action - * @param {function} handler + * @param {Espo.View.actionHandlerCallback} handler */ addActionHandler: function (action, handler) { this.events = this.events || {}; - var fullAction = 'click button[data-action=\"'+action+'\"]'; + let fullAction = 'click button[data-action=\"'+action+'\"]'; + this.events[fullAction] = handler; }, /** + * Escape a string. + * * @param {string} string * @returns {string} */ @@ -59,6 +69,15 @@ define('view', [], function () { return Handlebars.Utils.escapeExpression(string); }, + /** + * Show a notify-message. + * + * @deprecated Use `Espo.Ui.notify`. + * @param {string} label + * @param {string} [type] + * @param {number} [timeout] + * @param {string} [scope] + */ notify: function (label, type, timeout, scope) { if (label == false) { Espo.Ui.notify(false); @@ -79,6 +98,8 @@ define('view', [], function () { }, /** + * Get the view-helper. + * * @returns {Espo.ViewHelper} */ getHelper: function () { @@ -86,6 +107,8 @@ define('view', [], function () { }, /** + * Get the current user. + * * @returns {Espo.Models.User} */ getUser: function () { @@ -95,6 +118,8 @@ define('view', [], function () { }, /** + * Get the preferences. + * * @returns {Espo.Models.Preferences} */ getPreferences: function () { @@ -104,6 +129,8 @@ define('view', [], function () { }, /** + * Get the config. + * * @returns {Espo.Models.Settings} */ getConfig: function () { @@ -113,6 +140,8 @@ define('view', [], function () { }, /** + * Get the ACL. + * * @returns {Espo.Acl} */ getAcl: function () { @@ -122,6 +151,8 @@ define('view', [], function () { }, /** + * Get the model factory. + * * @returns {Espo.ModelFactory} */ getModelFactory: function () { @@ -131,6 +162,8 @@ define('view', [], function () { }, /** + * Get the collection factory. + * * @returns {Espo.CollectionFactory} */ getCollectionFactory: function () { @@ -140,6 +173,8 @@ define('view', [], function () { }, /** + * Get the router. + * * @returns {Espo.Router} */ getRouter: function () { @@ -149,6 +184,8 @@ define('view', [], function () { }, /** + * Get the storage-util. + * * @returns {Espo.Storage} */ getStorage: function () { @@ -167,6 +204,8 @@ define('view', [], function () { }, /** + * Get the language-util. + * * @returns {Espo.Language} */ getLanguage: function () { @@ -176,6 +215,8 @@ define('view', [], function () { }, /** + * Get metadata. + * * @returns {Espo.Metadata} */ getMetadata: function () { @@ -185,6 +226,8 @@ define('view', [], function () { }, /** + * Get the cache-util. + * * @returns {Espo.Cache} */ getCache: function () { @@ -194,6 +237,8 @@ define('view', [], function () { }, /** + * Get the date-time util. + * * @returns {Espo.DateTime} */ getDateTime: function () { @@ -203,6 +248,8 @@ define('view', [], function () { }, /** + * Get the number-util. + * * @returns {Espo.Number} */ getNumberUtil: function () { @@ -212,6 +259,8 @@ define('view', [], function () { }, /** + * Get the field manager. + * * @returns {Espo.FieldManager} */ getFieldManager: function () { @@ -221,6 +270,8 @@ define('view', [], function () { }, /** + * Get the base-controller. + * * @returns {Espo.Controllers.Base} */ getBaseController: function () { @@ -230,6 +281,8 @@ define('view', [], function () { }, /** + * Get the theme manager. + * * @returns {Espo.ThemeManager} */ getThemeManager: function () { @@ -238,12 +291,18 @@ define('view', [], function () { } }, + /** + * Update a page title. Supposed to be overridden if needed. + */ updatePageTitle: function () { var title = this.getConfig().get('applicationName') || 'EspoCRM'; + this.setPageTitle(title); }, /** + * Set a page title. + * * @param {string} title */ setPageTitle: function (title) { @@ -251,9 +310,11 @@ define('view', [], function () { }, /** - * @param {string} label - * @param {string} category - * @param {string} scope + * Translate a label. + * + * @param {string} label Label. + * @param {string} category Category. + * @param {string} scope Scope. * @returns {string} */ translate: function (label, category, scope) { @@ -261,12 +322,22 @@ define('view', [], function () { }, /** + * Get a base path. * @returns {string} */ getBasePath: function () { return this._helper.basePath || ''; }, + /** + * Ajax request. + * + * @param {string} url An URL. + * @param {string} type A method. + * @param {any} [data] Data. + * @param {Object} [options] Options. + * @returns {Promise} + */ ajaxRequest: function (url, type, data, options) { options = options || {}; @@ -283,6 +354,14 @@ define('view', [], function () { return xhr; }, + /** + * POST request. + * + * @param {string} url An URL. + * @param {any} [data] Data. + * @param {Object} [options] Options. + * @returns {Promise} + */ ajaxPostRequest: function (url, data, options) { if (data) { data = JSON.stringify(data); @@ -291,6 +370,14 @@ define('view', [], function () { return this.ajaxRequest(url, 'POST', data, options); }, + /** + * PATCH request. + * + * @param {string} url An URL. + * @param {any} [data] Data. + * @param {Object} [options] Options. + * @returns {Promise} + */ ajaxPatchRequest: function (url, data, options) { if (data) { data = JSON.stringify(data); @@ -299,6 +386,14 @@ define('view', [], function () { return this.ajaxRequest(url, 'PATCH', data, options); }, + /** + * PUT request. + * + * @param {string} url An URL. + * @param {any} [data] Data. + * @param {Object} [options] Options. + * @returns {Promise} + */ ajaxPutRequest: function (url, data, options) { if (data) { data = JSON.stringify(data); @@ -307,10 +402,26 @@ define('view', [], function () { return this.ajaxRequest(url, 'PUT', data, options); }, + /** + * GET request. + * + * @param {string} url An URL. + * @param {any} [data] Data. + * @param {Object} [options] Options. + * @returns {Promise} + */ ajaxGetRequest: function (url, data, options) { return this.ajaxRequest(url, 'GET', data, options); }, + /** + * DELETE request. + * + * @param {string} url An URL. + * @param {any} [data] Data. + * @param {Object} [options] Options. + * @returns {Promise} + */ ajaxDeleteRequest: function (url, data, options) { if (data) { data = JSON.stringify(data); @@ -320,8 +431,12 @@ define('view', [], function () { }, /** - * @param {(string|Object)} o - * @returns {Promise} + * Show a confirmation dialog. + * + * @param {(string|Object)} o A message or options. + * @param [callback] + * @param [context] + * @returns {Promise} To be resolved if confirmed. */ confirm: function (o, callback, context) { let message;