From c28381eafb0d952273b2c63716d66be47fa7b680 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Tue, 29 Aug 2017 23:16:15 +0200 Subject: [PATCH] Add custom handleAdd method for Assets --- src/asset_manager/config/config.js | 10 +++++++- src/asset_manager/index.js | 5 ++-- src/asset_manager/view/AssetsView.js | 24 +++++++++++++------ .../model/TypeableCollection.js | 6 +++-- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/src/asset_manager/config/config.js b/src/asset_manager/config/config.js index 403752411..0c83bf8f3 100644 --- a/src/asset_manager/config/config.js +++ b/src/asset_manager/config/config.js @@ -40,12 +40,20 @@ module.exports = { // Custom uploadFile function // @example - // uploadFile: function(e) { + // uploadFile: (e) => { // var files = e.dataTransfer ? e.dataTransfer.files : e.target.files; // // ...send somewhere // } uploadFile: '', + // Handle the image url submit from the built-in 'Add image' form + // @example + // handleAdd: (textFromInput) => { + // // some check... + // editor.AssetManager.add(textFromInput); + // } + handleAdd: '', + // Enable an upload dropzone on the entire editor (not document) when dragging // files over it dropzone: 1, diff --git a/src/asset_manager/index.js b/src/asset_manager/index.js index 68ade299f..f4714b029 100644 --- a/src/asset_manager/index.js +++ b/src/asset_manager/index.js @@ -112,6 +112,7 @@ module.exports = () => { /** * Add new asset/s to the collection. URLs are supposed to be unique * @param {string|Object|Array|Array} asset URL strings or an objects representing the resource. + * @param {Object} [opts] Options * @return {Model} * @example * // In case of strings, would be interpreted as images @@ -131,8 +132,8 @@ module.exports = () => { * src: './path/to/img.png', * }]); */ - add(asset) { - return assets.add(asset); + add(asset, opts = {}) { + return assets.add(asset, opts); }, /** diff --git a/src/asset_manager/view/AssetsView.js b/src/asset_manager/view/AssetsView.js index f1bc1fd06..1a8edb9de 100644 --- a/src/asset_manager/view/AssetsView.js +++ b/src/asset_manager/view/AssetsView.js @@ -4,6 +4,10 @@ var FileUploader = require('./FileUploader'); module.exports = Backbone.View.extend({ + events: { + submit: 'handleSubmit', + }, + template(view) { const pfx = view.pfx; const ppfx = view.ppfx; @@ -36,10 +40,11 @@ module.exports = Backbone.View.extend({ this.listenTo(this.collection, 'add', this.addToAsset ); this.listenTo(this.collection, 'deselectAll', this.deselectAll); this.listenTo(this.collection, 'reset', this.render); - + /* this.events = {}; this.events.submit = 'addFromStr'; this.delegateEvents(); + */ }, /** @@ -48,19 +53,24 @@ module.exports = Backbone.View.extend({ * @return {this} * @private */ - addFromStr(e) { + handleSubmit(e) { e.preventDefault(); - const input = this.getInputUrl(); + const input = this.getAddInput(); const url = input.value.trim(); + const handleAdd = this.config.handleAdd; if (!url) { return; } - this.options.globalCollection.add(url, {at: 0}); - this.getAssetsEl().scrollTop = 0; input.value = ''; - return this; + this.getAssetsEl().scrollTop = 0; + + if (handleAdd) { + handleAdd(url); + } else { + this.options.globalCollection.add(url, {at: 0}); + } }, /** @@ -78,7 +88,7 @@ module.exports = Backbone.View.extend({ * @return {HTMLElement} * @private */ - getInputUrl() { + getAddInput() { if(!this.inputUrl || !this.inputUrl.value) this.inputUrl = this.el.querySelector(`.${this.pfx}add-asset input`); return this.inputUrl; diff --git a/src/domain_abstract/model/TypeableCollection.js b/src/domain_abstract/model/TypeableCollection.js index 4260b37e5..616703bfc 100644 --- a/src/domain_abstract/model/TypeableCollection.js +++ b/src/domain_abstract/model/TypeableCollection.js @@ -102,9 +102,11 @@ export default { */ addType(id, definition) { const type = this.getType(id); + const ModelInst = type ? type.model : Model; + const ViewInst = type ? type.view : View; let {model, view, isType} = definition; - model = model instanceof Model ? model : Model.extend(model); - view = view instanceof View ? view : View.extend(view); + model = model instanceof Model ? model : ModelInst.extend(model); + view = view instanceof View ? view : ViewInst.extend(view); if (type) { type.model = model;