diff --git a/src/dom_components/model/ComponentLink.js b/src/dom_components/model/ComponentLink.js index af0d42cc7..89247f5bb 100644 --- a/src/dom_components/model/ComponentLink.js +++ b/src/dom_components/model/ComponentLink.js @@ -6,7 +6,7 @@ define(['./Component'], defaults: _.extend({}, Component.prototype.defaults, { tagName: 'a', droppable: false, - traits: ['title', 'href', 'blank'], + traits: ['title', 'href', 'target'], }), }); diff --git a/src/domain_abstract/view/DomainViews.js b/src/domain_abstract/view/DomainViews.js index 6df92f738..4ae5051f6 100644 --- a/src/domain_abstract/view/DomainViews.js +++ b/src/domain_abstract/view/DomainViews.js @@ -5,6 +5,11 @@ function(Backbone) { itemView: '', + // Defines the View per type + itemsView: '', + + itemType: 'type', + initialize: function(opts, config) { this.config = config || {}; }, @@ -27,7 +32,12 @@ function(Backbone) { * */ add: function(model, fragment){ var frag = fragment || null; - var view = new this.itemView({ + var itemView = this.itemView; + if(this.itemsView){ + var typeField = model.get(this.itemType); + itemView = this.itemsView[typeField]; + } + var view = new itemView({ model: model, config: this.config }, this.config); diff --git a/src/trait_manager/model/TraitFactory.js b/src/trait_manager/model/TraitFactory.js index 88fda5aad..05dbc9bf5 100644 --- a/src/trait_manager/model/TraitFactory.js +++ b/src/trait_manager/model/TraitFactory.js @@ -19,6 +19,24 @@ define(['backbone'], var obj = {}; var prop = props[i]; obj.name = prop; + + // Define type + switch (prop) { + case 'target': + obj.type = 'select'; + break; + } + + // Define options + switch (prop) { + case 'target': + obj.options = [ + {value: '_self', name: 'This window'}, + {value: '_blank', name: 'New window'} + ]; + break; + } + objs.push(obj); } diff --git a/src/trait_manager/view/TraitSelectView.js b/src/trait_manager/view/TraitSelectView.js new file mode 100644 index 000000000..b76203199 --- /dev/null +++ b/src/trait_manager/view/TraitSelectView.js @@ -0,0 +1,38 @@ +define(['backbone','./TraitView'], + function (Backbone, TraitView) { + + return TraitView.extend({ + + /** + * Returns input element + * @return {HTMLElement} + * @private + */ + getInputEl: function() { + if(!this.$input){ + var opts = this.model.get('options') || []; + this.input = ''; + this.$input = $(this.input); + } + return this.$input.get(0); + }, + + }); +}); diff --git a/src/trait_manager/view/TraitView.js b/src/trait_manager/view/TraitView.js index 69fc4c34e..e599467e6 100644 --- a/src/trait_manager/view/TraitView.js +++ b/src/trait_manager/view/TraitView.js @@ -64,6 +64,13 @@ define(['backbone'], function (Backbone) { * @private */ getInputEl: function() { + if(!this.$input){ + this.$input = $('', { + placeholder: this.model.get('defaults'), + type: 'text', + value: this.model.get('value') + }); + } return this.$input.get(0); }, @@ -74,12 +81,8 @@ define(['backbone'], function (Backbone) { renderField: function(){ if(!this.$input){ this.$el.append('
'); - this.$input = $('', { - placeholder: this.model.get('defaults'), - type: 'text', - value: this.model.get('value') - }); - this.$el.find('.' + this.inputhClass).html(this.$input); + var el = this.getInputEl(); + this.$el.find('.' + this.inputhClass).html(el); } }, diff --git a/src/trait_manager/view/TraitsView.js b/src/trait_manager/view/TraitsView.js index b624096a7..99ff00aa1 100644 --- a/src/trait_manager/view/TraitsView.js +++ b/src/trait_manager/view/TraitsView.js @@ -1,9 +1,12 @@ -define(['backbone', 'Abstract/view/DomainViews', './TraitView'], - function (Backbone, DomainViews, TraitView) { +define(['backbone', 'Abstract/view/DomainViews', './TraitView', './TraitSelectView'], + function (Backbone, DomainViews, TraitView, TraitSelectView) { return DomainViews.extend({ - itemView: TraitView, + itemsView: { + 'text': TraitView, + 'select': TraitSelectView, + }, initialize: function(o) { this.config = o.config || {};