diff --git a/src/navigator/view/ItemView.js b/src/navigator/view/ItemView.js index cbc1db82e..622491ac7 100644 --- a/src/navigator/view/ItemView.js +++ b/src/navigator/view/ItemView.js @@ -161,7 +161,7 @@ define(['backbone', 'text!./../template/item.html','require'], * @return void * */ checkChildren: function(){ - var c = this.model.components.length, + var c = this.countChildren(this.model), pfx = this.pfx, tC = '> .' + pfx + 'title-c > .' + pfx + 'title'; if(!this.$counter) @@ -176,16 +176,36 @@ define(['backbone', 'text!./../template/item.html','require'], } }, - render : function(){ - var pfx = this.pfx, - vis = this.isVisible(); + /** + * Count children inside model + * @param {Object} model + * @return {number} + * @private + */ + countChildren: function(model){ + var count = 0; + model.components.each(function(m){ + var isCountable = this.opt.isCountable; + var hide = this.config.hideTextnode; + if(isCountable && !isCountable(m, hide)) + return; + count++; + }, this); + return count; + }, + + render: function(){ + var pfx = this.pfx; + var vis = this.isVisible(); + var count = this.countChildren(this.model); + this.$el.html( this.template({ - title : this.model.getName(), - addClass : (this.model.components.length ? '' : pfx+'no-chld'), - count : this.model.components.length, - visible : vis, - hidable : this.config.hidable, - prefix : pfx + title: this.model.getName(), + addClass: (count ? '' : pfx+'no-chld'), + count: count, + visible: vis, + hidable: this.config.hidable, + prefix: pfx })); if(typeof ItemsView == 'undefined') ItemsView = require('./ItemsView'); diff --git a/src/navigator/view/ItemsView.js b/src/navigator/view/ItemsView.js index 7db4a2390..40f775a5d 100644 --- a/src/navigator/view/ItemsView.js +++ b/src/navigator/view/ItemsView.js @@ -43,10 +43,11 @@ define(['backbone','./ItemView'], var fragment = fragmentEl || null; var viewObject = ItemView; - var view = new viewObject({ - model : model, - config : this.config, - sorter : this.sorter, + var view = new viewObject({ + model: model, + config: this.config, + sorter: this.sorter, + isCountable: this.isCountable, }); var rendered = view.render().el; @@ -73,12 +74,26 @@ define(['backbone','./ItemView'], return rendered; }, + /** + * Check if the model could be count by the navigator + * @param {Object} model + * @return {Boolean} + * @private + */ + isCountable: function(model, hide) { + var type = model.get('type'); + var tag = model.get('tagName'); + if((type == 'textnode' || tag == 'br') && hide) + return false; + return true; + }, + render: function() { var fragment = document.createDocumentFragment(); this.$el.empty(); - this.collection.each(function(model){ - if(model.get('type') == 'textnode' && this.config.hideTextnode) + this.collection.each(function(model) { + if(!this.isCountable(model, this.config.hideTextnode)) return; this.addToCollection(model, fragment); }, this);