Changeset 406 for Dev/branches/rest-dojo-ui/client/rft/ui/Breadcrumbs.js
- Timestamp:
- 09/03/12 18:14:37 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Dev/branches/rest-dojo-ui/client/rft/ui/Breadcrumbs.js
r405 r406 6 6 'dojo/topic', 7 7 'dijit/_WidgetBase' 8 ], function(declare, baseArray, Button, domClass, topic, _WidgetBase){ 9 return declare('rft.ui.Breadcrumbs', [_WidgetBase], { 10 _crumbs: [], 11 12 _last: function(){ 13 return this._crumbs[this._crumbs.length-1]; 14 }, 15 _getIndexOf: function(label) { 16 dojo.forEach(this._crumbs, function(crumb, index){ 17 if (crumb.label == label) { 18 return index; 19 } 20 }, this); 21 return -1; 22 }, 23 24 addCrumb: function(label, path) { 25 this._crumbs.push({ 26 label: label, 27 path:path 28 }); 29 }, 30 _removeAfter: function(index) { 31 var removals = this._crumbs.slice(index+1); 32 this._crumbs = this._crumbs.slice(0, index+1); 33 dojo.forEach(removals, function(removal){ 34 removal.widget.destroyRecursive(false); // boolean "keepDOMnode" 35 }, this); 36 this._highlightLast(); 37 }, 38 39 _highlightLast: function() { 40 domClass.add(this._last().widget, "breadcrumbCurrent"); 41 }, 42 _unhighlightLast: function() { 43 domClass.remove(this._last(), "breadcrumbCurrent"); 44 }, 45 46 _changeTo: function(label, path) { 47 // TODO: Differentiate between navigating backwards and sideways/forward! 48 var index = baseArray.indexOf({label:label , path:path}); 49 //var index = this._getIndexOf(label); // Use this if passing path as an argument is not possible! 50 if (index >= 0) this._removeAfter(index); 51 this._addCrumb(label, path); 52 this._createBreadcrumbs(); 53 }, 54 55 _createBreadcrumb: function(label, path) { 56 return new Button({ 57 baseClass: "breadcrumb", 58 label: label, 59 showlabel: true, 60 iconClass: "dijitNoIcon", 61 onClick: lang.hitch(this, function(){ 62 rft.api.loadPage(path); // TODO: fix this call! 63 }) 64 }); 65 }, 66 _createBreadcrumbs: function() { 67 dojo.forEach(this._crumbs, function(crumb, index){ 68 if (!crumb.widget) { 69 crumb.widget = this._createBreadcrumb(crumb.label, crumb.path); 70 } 71 }, this); 72 this._highlightLast(); 73 }, 74 startup: function() { 75 if ( this._started ){ return; } 76 this.inherited(arguments); 77 // TODO: start page crumb creation? 78 this._createBreadCrumbs(); 79 this._setupEvents(); 80 this.inherited(arguments); 81 }, 82 _setupEvents: function() { 83 // TODO: Bind changeTo() listener to an "onLoadPage" event exposed by rft.api! 84 topic.subscribe("rft/content/goTo", this._changeTo(label, path)); 85 } 86 }); 8 ], function(declare, baseArray, Button, domClass, topic, _WidgetBase){ 9 return declare('rft.ui.Breadcrumbs', [_WidgetBase], { 10 _crumbs: [], 11 12 _last: function(){ 13 return this._crumbs[this._crumbs.length-1]; 14 }, 15 _getIndexOf: function(label) { 16 dojo.forEach(this._crumbs, function(crumb, index){ 17 if (crumb.label == label) { 18 return index; 19 } 20 }, this); 21 return -1; 22 }, 23 24 addCrumb: function(label, path) { 25 this._crumbs.push({ 26 label: label, 27 path:path 28 }); 29 }, 30 _removeAfter: function(index) { 31 var removals = this._crumbs.slice(index+1); 32 this._crumbs = this._crumbs.slice(0, index+1); 33 dojo.forEach(removals, function(removal){ 34 removal.widget.destroyRecursive(false); // boolean "keepDOMnode" 35 }, this); 36 this._highlightLast(); 37 }, 38 39 _highlightLast: function() { 40 domClass.add(this._last().widget, "breadcrumbCurrent"); 41 }, 42 _unhighlightLast: function() { 43 domClass.remove(this._last(), "breadcrumbCurrent"); 44 }, 45 46 _changeTo: function(label, path) { 47 // TODO: Differentiate between navigating backwards and sideways/forward! 48 var index = baseArray.indexOf({label:label , path:path}); 49 //var index = this._getIndexOf(label); // Use this if passing path as an argument is not possible! 50 if (index >= 0) this._removeAfter(index); 51 this._addCrumb(label, path); 52 this._createBreadcrumbs(); 53 }, 54 55 _createBreadcrumb: function(label, path) { 56 return new Button({ 57 baseClass: "breadcrumb", 58 label: label, 59 showlabel: true, 60 iconClass: "dijitNoIcon", 61 onClick: lang.hitch(this, function(){ 62 rft.api.loadPage(path); // TODO: fix this call! 63 }) 64 }); 65 }, 66 _createBreadcrumbs: function() { 67 dojo.forEach(this._crumbs, function(crumb, index){ 68 if (!crumb.widget) { 69 crumb.widget = this._createBreadcrumb(crumb.label, crumb.path); 70 } 71 }, this); 72 this._highlightLast(); 73 }, 74 startup: function() { 75 if ( this._started ){ return; } 76 this.inherited(arguments); 77 // TODO: start page crumb creation? 78 this._createBreadCrumbs(); 79 this._setupEvents(); 80 this.inherited(arguments); 81 }, 82 _setupEvents: function() { 83 // TODO: Bind changeTo() listener to an "onLoadPage" event exposed by rft.api! 84 topic.subscribe("rft/content/goTo", this._changeTo(label, path)); 85 } 87 86 }); 88 89 /* Breadcrumbs system, which automatically generates styled buttons in the topBar. 90 * Updates are triggered through a "changePage" subscription to "rft/connect/goTo" (method that loads pages in rft.connect.js) 91 * 92 * Todo: Startup() does not handle initial creation well. No initial breadcrumb is created on page load. What happens when I refresh the page, do all previous crumbs disappear? 93 * Todo: Pages should have a label/name besides the path, for display in the breadcrumbs bar. Perhaps the page main title? (Generate this header dynamically?) 94 * Todo: Put connect.publish("rft/content/goTo", args); call in rft/content, to trigger breadcrumbs updates 95 * This method uses path and 'args'(?) instead of label and path, change terminology accordingly? 96 * Todo: breadcrumbs do not have context yet, unless we can somehow create that context from the path. Split path at "/" char, lookup label/title for each step? 97 * (See before!) 98 * 99 */ 87 }); 88 89 /* Breadcrumbs system, which automatically generates styled buttons in the topBar. 90 * Updates are triggered through a "changePage" subscription to "rft/connect/goTo" (method that loads pages in rft.connect.js) 91 * 92 * Todo: Startup() does not handle initial creation well. No initial breadcrumb is created on page load. What happens when I refresh the page, do all previous crumbs disappear? 93 * Todo: Pages should have a label/name besides the path, for display in the breadcrumbs bar. Perhaps the page main title? (Generate this header dynamically?) 94 * Todo: Put connect.publish("rft/content/goTo", args); call in rft/content, to trigger breadcrumbs updates 95 * This method uses path and 'args'(?) instead of label and path, change terminology accordingly? 96 * Todo: breadcrumbs do not have context yet, unless we can somehow create that context from the path. Split path at "/" char, lookup label/title for each step? 97 * (See before!) 98 * 99 */
Note: See TracChangeset
for help on using the changeset viewer.