aboutsummaryrefslogtreecommitdiff
path: root/includes/js/dojox/grid/_grid/view.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/js/dojox/grid/_grid/view.js')
-rw-r--r--includes/js/dojox/grid/_grid/view.js336
1 files changed, 0 insertions, 336 deletions
diff --git a/includes/js/dojox/grid/_grid/view.js b/includes/js/dojox/grid/_grid/view.js
deleted file mode 100644
index 7f669cd..0000000
--- a/includes/js/dojox/grid/_grid/view.js
+++ /dev/null
@@ -1,336 +0,0 @@
-if(!dojo._hasResource["dojox.grid._grid.view"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.grid._grid.view"] = true;
-dojo.provide("dojox.grid._grid.view");
-
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-dojo.require("dojox.grid._grid.builder");
-
-dojo.declare('dojox.GridView',
- [dijit._Widget, dijit._Templated],
- {
- // summary:
- // A collection of grid columns. A grid is comprised of a set of views that stack horizontally.
- // Grid creates views automatically based on grid's layout structure.
- // Users should typically not need to access individual views directly.
- //
- // defaultWidth: String
- // Default widget of the view
- defaultWidth: "18em",
-
- // viewWidth: String
- // Width for the view, in valid css unit
- viewWidth: "",
-
- templateString:"<div class=\"dojoxGrid-view\">\n\t<div class=\"dojoxGrid-header\" dojoAttachPoint=\"headerNode\">\n\t\t<div dojoAttachPoint=\"headerNodeContainer\" style=\"width:9000em\">\n\t\t\t<div dojoAttachPoint=\"headerContentNode\"></div>\n\t\t</div>\n\t</div>\n\t<input type=\"checkbox\" class=\"dojoxGrid-hidden-focus\" dojoAttachPoint=\"hiddenFocusNode\" />\n\t<input type=\"checkbox\" class=\"dojoxGrid-hidden-focus\" />\n\t<div class=\"dojoxGrid-scrollbox\" dojoAttachPoint=\"scrollboxNode\">\n\t\t<div class=\"dojoxGrid-content\" dojoAttachPoint=\"contentNode\" hidefocus=\"hidefocus\"></div>\n\t</div>\n</div>\n",
-
- themeable: false,
- classTag: 'dojoxGrid',
- marginBottom: 0,
- rowPad: 2,
-
- postMixInProperties: function(){
- this.rowNodes = [];
- },
-
- postCreate: function(){
- this.connect(this.scrollboxNode,"onscroll","doscroll");
- dojox.grid.funnelEvents(this.contentNode, this, "doContentEvent", [ 'mouseover', 'mouseout', 'click', 'dblclick', 'contextmenu', 'mousedown' ]);
- dojox.grid.funnelEvents(this.headerNode, this, "doHeaderEvent", [ 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mousedown', 'click', 'contextmenu' ]);
- this.content = new dojox.grid.contentBuilder(this);
- this.header = new dojox.grid.headerBuilder(this);
- //BiDi: in RTL case, style width='9000em' causes scrolling problem in head node
- if(!dojo._isBodyLtr()){
- this.headerNodeContainer.style.width = "";
- }
- },
-
- destroy: function(){
- dojox.grid.removeNode(this.headerNode);
- this.inherited("destroy", arguments);
- },
-
- // focus
- focus: function(){
- if(dojo.isSafari || dojo.isOpera){
- this.hiddenFocusNode.focus();
- }else{
- this.scrollboxNode.focus();
- }
- },
-
- setStructure: function(inStructure){
- var vs = this.structure = inStructure;
- // FIXME: similar logic is duplicated in layout
- if(vs.width && !isNaN(vs.width)){
- this.viewWidth = vs.width + 'em';
- }else{
- this.viewWidth = vs.width || this.viewWidth; //|| this.defaultWidth;
- }
- this.onBeforeRow = vs.onBeforeRow;
- this.noscroll = vs.noscroll;
- if(this.noscroll){
- this.scrollboxNode.style.overflow = "hidden";
- }
- // bookkeeping
- this.testFlexCells();
- // accomodate new structure
- this.updateStructure();
- },
-
- testFlexCells: function(){
- // FIXME: cheater, this function does double duty as initializer and tester
- this.flexCells = false;
- for(var j=0, row; (row=this.structure.rows[j]); j++){
- for(var i=0, cell; (cell=row[i]); i++){
- cell.view = this;
- this.flexCells = this.flexCells || cell.isFlex();
- }
- }
- return this.flexCells;
- },
-
- updateStructure: function(){
- // header builder needs to update table map
- this.header.update();
- // content builder needs to update markup cache
- this.content.update();
- },
-
- getScrollbarWidth: function(){
- return (this.noscroll ? 0 : dojox.grid.getScrollbarWidth()); // Integer
- },
-
- getColumnsWidth: function(){
- return this.headerContentNode.firstChild.offsetWidth; // Integer
- },
-
- getWidth: function(){
- return this.viewWidth || (this.getColumnsWidth()+this.getScrollbarWidth()) +'px'; // String
- },
-
- getContentWidth: function(){
- return Math.max(0, dojo._getContentBox(this.domNode).w - this.getScrollbarWidth()) + 'px'; // String
- },
-
- render: function(){
- this.scrollboxNode.style.height = '';
- this.renderHeader();
- },
-
- renderHeader: function(){
- this.headerContentNode.innerHTML = this.header.generateHtml(this._getHeaderContent);
- },
-
- // note: not called in 'view' context
- _getHeaderContent: function(inCell){
- var n = inCell.name || inCell.grid.getCellName(inCell);
- if(inCell.index != inCell.grid.getSortIndex()){
- return n;
- }
- return [ '<div class="', inCell.grid.sortInfo > 0 ? 'dojoxGrid-sort-down' : 'dojoxGrid-sort-up', '"><div class="gridArrowButtonChar">', inCell.grid.sortInfo > 0 ? '&#9660;' : '&#9650;', '</div>', n, '</div>' ].join('');
- },
-
- resize: function(){
- this.adaptHeight();
- this.adaptWidth();
- },
-
- hasScrollbar: function(){
- return (this.scrollboxNode.clientHeight != this.scrollboxNode.offsetHeight); // Boolean
- },
-
- adaptHeight: function(){
- if(!this.grid.autoHeight){
- var h = this.domNode.clientHeight;
- if(!this.hasScrollbar()){ // no scrollbar is rendered
- h -= dojox.grid.getScrollbarWidth();
- }
- dojox.grid.setStyleHeightPx(this.scrollboxNode, h);
- }
- },
-
- adaptWidth: function(){
- if(this.flexCells){
- // the view content width
- this.contentWidth = this.getContentWidth();
- this.headerContentNode.firstChild.style.width = this.contentWidth;
- }
- // FIXME: it should be easier to get w from this.scrollboxNode.clientWidth,
- // but clientWidth seemingly does not include scrollbar width in some cases
- var w = this.scrollboxNode.offsetWidth - this.getScrollbarWidth();
- w = Math.max(w, this.getColumnsWidth()) + 'px';
- with(this.contentNode){
- style.width = '';
- offsetWidth;
- style.width = w;
- }
- },
-
- setSize: function(w, h){
- with(this.domNode.style){
- if(w){
- width = w;
- }
- height = (h >= 0 ? h + 'px' : '');
- }
- with(this.headerNode.style){
- if(w){
- width = w;
- }
- }
- },
-
- renderRow: function(inRowIndex, inHeightPx){
- var rowNode = this.createRowNode(inRowIndex);
- this.buildRow(inRowIndex, rowNode, inHeightPx);
- this.grid.edit.restore(this, inRowIndex);
- return rowNode;
- },
-
- createRowNode: function(inRowIndex){
- var node = document.createElement("div");
- node.className = this.classTag + '-row';
- node[dojox.grid.gridViewTag] = this.id;
- node[dojox.grid.rowIndexTag] = inRowIndex;
- this.rowNodes[inRowIndex] = node;
- return node;
- },
-
- buildRow: function(inRowIndex, inRowNode){
- this.buildRowContent(inRowIndex, inRowNode);
- this.styleRow(inRowIndex, inRowNode);
- },
-
- buildRowContent: function(inRowIndex, inRowNode){
- inRowNode.innerHTML = this.content.generateHtml(inRowIndex, inRowIndex);
- if(this.flexCells){
- // FIXME: accessing firstChild here breaks encapsulation
- inRowNode.firstChild.style.width = this.contentWidth;
- }
- },
-
- rowRemoved:function(inRowIndex){
- this.grid.edit.save(this, inRowIndex);
- delete this.rowNodes[inRowIndex];
- },
-
- getRowNode: function(inRowIndex){
- return this.rowNodes[inRowIndex];
- },
-
- getCellNode: function(inRowIndex, inCellIndex){
- var row = this.getRowNode(inRowIndex);
- if(row){
- return this.content.getCellNode(row, inCellIndex);
- }
- },
-
- // styling
- styleRow: function(inRowIndex, inRowNode){
- inRowNode._style = dojox.grid.getStyleText(inRowNode);
- this.styleRowNode(inRowIndex, inRowNode);
- },
-
- styleRowNode: function(inRowIndex, inRowNode){
- if(inRowNode){
- this.doStyleRowNode(inRowIndex, inRowNode);
- }
- },
-
- doStyleRowNode: function(inRowIndex, inRowNode){
- this.grid.styleRowNode(inRowIndex, inRowNode);
- },
-
- // updating
- updateRow: function(inRowIndex, inHeightPx, inPageNode){
- var rowNode = this.getRowNode(inRowIndex);
- if(rowNode){
- rowNode.style.height = '';
- this.buildRow(inRowIndex, rowNode);
- }
- return rowNode;
- },
-
- updateRowStyles: function(inRowIndex){
- this.styleRowNode(inRowIndex, this.getRowNode(inRowIndex));
- },
-
- // scrolling
- lastTop: 0,
- firstScroll:0,
-
- doscroll: function(inEvent){
- //var s = dojo.marginBox(this.headerContentNode.firstChild);
- var isLtr = dojo._isBodyLtr();
- if(this.firstScroll < 2){
- if((!isLtr && this.firstScroll == 1) || (isLtr && this.firstScroll == 0)){
- var s = dojo.marginBox(this.headerNodeContainer);
- if(dojo.isIE){
- this.headerNodeContainer.style.width = s.w + this.getScrollbarWidth() + 'px';
- }else if(dojo.isMoz){
- //TODO currently only for FF, not sure for safari and opera
- this.headerNodeContainer.style.width = s.w - this.getScrollbarWidth() + 'px';
- //this.headerNodeContainer.style.width = s.w + 'px';
- //set scroll to right in FF
- if(isLtr){
- this.scrollboxNode.scrollLeft = this.scrollboxNode.scrollWidth - this.scrollboxNode.clientWidth;
- }else{
- this.scrollboxNode.scrollLeft = this.scrollboxNode.clientWidth - this.scrollboxNode.scrollWidth;
- }
- }
- }
- this.firstScroll++;
- }
- this.headerNode.scrollLeft = this.scrollboxNode.scrollLeft;
- // 'lastTop' is a semaphore to prevent feedback-loop with setScrollTop below
- var top = this.scrollboxNode.scrollTop;
- if(top != this.lastTop){
- this.grid.scrollTo(top);
- }
- },
-
- setScrollTop: function(inTop){
- // 'lastTop' is a semaphore to prevent feedback-loop with doScroll above
- this.lastTop = inTop;
- this.scrollboxNode.scrollTop = inTop;
- return this.scrollboxNode.scrollTop;
- },
-
- // event handlers (direct from DOM)
- doContentEvent: function(e){
- if(this.content.decorateEvent(e)){
- this.grid.onContentEvent(e);
- }
- },
-
- doHeaderEvent: function(e){
- if(this.header.decorateEvent(e)){
- this.grid.onHeaderEvent(e);
- }
- },
-
- // event dispatch(from Grid)
- dispatchContentEvent: function(e){
- return this.content.dispatchEvent(e);
- },
-
- dispatchHeaderEvent: function(e){
- return this.header.dispatchEvent(e);
- },
-
- // column resizing
- setColWidth: function(inIndex, inWidth){
- this.grid.setCellWidth(inIndex, inWidth + 'px');
- },
-
- update: function(){
- var left = this.scrollboxNode.scrollLeft;
- this.content.update();
- this.grid.update();
- this.scrollboxNode.scrollLeft = left;
- this.headerNode.scrollLeft = left;
- }
-});
-
-}