/***************************************************************** Page : movtableinc.js Description : main javascript Date : 20/04/05 Authors:Alessandro Viganò (avigano@Movinfo.it) / Filippo Zanardo (fzanardo@MOViNFO.it) Copyright (C) 2005-2006 MOViNFO MovTable is free software; you can redistribute it and/or modify it under the terms of the GNU General Public modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. MovTable is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************/ var selectedText; var selectedElem; var targetElm; var myTable; var hiddenCols; var activeHeaders= null; var moveColumn=null; var dragHeaderDiv=null; var topElement=null; var topElementByTag=null; var originalOnSelect; var eventProcessed=false; /** * Initializing function, to be called on document onload * */ function sortableInit() { initjsDOMenu(); myTable=new table(tableClass); document.onmousedown=mouseDown; } /** * Function called by jsDOMenu. It creates the dynamic context menus and it passes them back * */ function getPopUpMenuObj(e) { targetElm = (e.target) ? e.target : e.srcElement; if (targetElm.nodeType==3) //Text Node returned by Konqueror targetElm=targetElm.parentNode; if (targetElm.parentNode.tagName=='TH') targetElm=targetElm.parentNode; if (targetElm.tagName=='TD' || targetElm.tagName=='TH') { selectedText=selectElement(targetElm); cursorMenu1 = new jsDOMenu(210); var colID=getColID(targetElm); //filterurl=baseurl+'&filterByIndexCol='+myTable.columns.getColByID(colID).index+"&filterByIndexRow="+ (getRow(targetElm)-1); //removeFilter=baseurl+"&removefilter"; //sorturl=baseurl+'&sortByIndexCol='+myTable.columns.getColByID(colID).index; //alert(colID); //alert(myTable.columns.getColByID(colID).id); if (targetElm.tagName=='TH') { hiddenCols=myTable.columns.listInvisible(); //Controlla se rimane visibile solo 1 colonna if (JScolhide==1) if ((myTable.columns.item.length-hiddenCols.length)==1) cursorMenu1.addMenuItem(new menuItem("Hide Column", "", "",false)); else //cursorMenu1.addMenuItem(new menuItem("Nascondi Colonna", "", "code:myTable.columns.item["+getCellIndex(targetElm)+"].hideColumn()")); cursorMenu1.addMenuItem(new menuItem("Hide Column", "", "code:myTable.columns.getColByID('"+colID+"').hideColumn()")); //Controlla se ci sono colonne nascoste if (myTable.columns.hidden()) { cursorMenu1.addMenuItem(new menuItem("Show Columns", "mColonne", "code:myTable.columns.listInvisible()")); columnsMenu= new jsDOMenu(210); for (var x=0;x 1) { columnsMenu.addMenuItem(new menuItem("-")); columnsMenu.addMenuItem(new menuItem("All","","code:myTable.columns.show()")); } cursorMenu1.items["mColonne"].setSubMenu(columnsMenu); } else cursorMenu1.addMenuItem(new menuItem("Show Columns", "mColonne", "code:myTable.columns.listInvisible()",false)); //cursorMenu1.addMenuItem(new menuItem("Debug", "", "code:debug()")); } if (targetElm.tagName=='TD') { var editUrl = ""; var transferUrl = ""; var terminateUrl = ""; var tr = targetElm.parentNode; var len=tr.childNodes.length; var lastElem = tr.childNodes[len-1]; var lastElemLen = lastElem.childNodes.length; for (var i=0; i < lastElemLen; i++){ var lastElemNode = lastElem.childNodes[i]; if(lastElemNode.tagName == "A") { if(lastElemNode.id.indexOf("edit") > -1) { editUrl = lastElemNode.href; }else if(lastElemNode.id.indexOf("transfer") > -1) { transferUrl = lastElemNode.href; }else if(lastElemNode.id.indexOf("terminate") > -1) { terminateUrl = lastElemNode.href; } } } //alert(editUrl) //alert(transferUrl); //alert(terminateUrl); if (myTable.columns.getColByID(colID).filterable) { cursorMenu1.addMenuItem(new menuItem("Edit Employee", "", editUrl)); cursorMenu1.addMenuItem(new menuItem("Transfer Employee", "", transferUrl)); cursorMenu1.addMenuItem(new menuItem("Terminate Employee", "", terminateUrl)); } else { cursorMenu1.addMenuItem(new menuItem("Edit Employee", "", "",false)); cursorMenu1.addMenuItem(new menuItem("Transfer Employee", "", "",false)); cursorMenu1.addMenuItem(new menuItem("Terminate Employee", "", "",false)); } //if (filtered) // cursorMenu1.addMenuItem(new menuItem(getText("Rimuovi filtro"), "", removeFilter)); //else // cursorMenu1.addMenuItem(new menuItem(getText("Rimuovi filtro"), "", removeFilter,false)); cursorMenu1.addMenuItem(new menuItem("-")); } //Sort menu items if (myTable.columns.getColByID(colID).sortable) { var colVars = colID.split("_"); var sortASCurl = "javascript:void(sortFields('"+colVars[1]+"','asc'));"; var sortDESCurl = "javascript:void(sortFields('"+colVars[1]+"','desc'));"; cursorMenu1.addMenuItem(new menuItem("Sort Ascending", "",sortASCurl)); cursorMenu1.addMenuItem(new menuItem("Sort Descending", "",sortDESCurl)); } else { cursorMenu1.addMenuItem(new menuItem("Sort Ascending", "", "",false)); cursorMenu1.addMenuItem(new menuItem("Sort Descending", "", "",false)); } //cursorMenu1.addMenuItem(new menuItem(getText("Copia"), "", "code:copyElement(selectedText)")); return cursorMenu1; } else return null; } function debug() { var colOrder=''; var rows=myTable.table.getElementsByTagName('TBODY')[0].getElementsByTagName('TR'); var cols=rows[0].getElementsByTagName('TH'); for (var x=0;x 0) element=anchors[0]; return element.innerHTML; } /** * @class Representation of a column * @param {tableCell} th TH element * @param {columns} parent columns object */ function column (th,parent) { //FIELDS /** *The column display name *@type string */ this.displayName=columnGetName(th); /** *The HTML element object *@type HTMLelement */ this.element=th; /** *The real field name *@type string */ this.fieldName=this.element.id.slice(9); /** *Original display order index *@type int */ this.index=getCellIndex(th); /** *Reference to columns object *@type columns */ this.parent=parent; /** *Reference to table object *@type table */ this.table=this.parent.parent; /** *Column is sortable *@type boolean */ this.sortable=sortable[this.index]; /** *Column is filterable *@type boolean */ this.filterable=filterable[this.index]; /** *Column is visible *@type boolean */ this.visible=true; //METHODS this.hideColumn=column_hideColumn; this.showColumn=column_showColumn; this.setVisible=column_setVisible; this.setWidth=column_setWidth; this.retrieveStatus=column_retrieveStatus; this.getAbsoluteIndx=column_getAbsoluteIndx; this.getRelativeIndx=column_getRelativeIndx; //constructor code this.retrieveStatus(); } /** * It return the right cell index, fixing the IE explorer behaviour * @return {int} The absolute cell index */ function column_getAbsoluteIndx() { if (isIE()) { var x=0; while (this.table.rows[0].getElementsByTagName('TH')[x].id != this.element.id) x++; return x; } else if (isKonqueror() || isSafari()) return getKCellIndex(this.element); else return this.element.cellIndex; } /** * It return the relative cell index, as displayed on screen (as IE does) * @return {int} The relative cell index */ function column_getRelativeIndx() { if (isIE()) return this.element.cellIndex; else { if (isKonqueror() || isSafari()) var colIndx=getKCellIndex(this.element); else var colIndx=this.element.cellIndex; var stop=colIndx; for (var x=0;x l'indice è quello originale var displayIndex= (col != null) ? getCellIndex(col) : this.index; var rows=this.table.rows; for (var x=0;x0) var cols=rows[x].getElementsByTagName('TD'); else var cols=rows[x].getElementsByTagName('TH'); cols[displayIndex].style.display='none'; } this.setVisible(false); if (isKonqueror() || isSafari()) this.parent.resetSize(); } /** * Show the column */ function column_showColumn() { var rows=this.table.rows; var displayIndex= this.getAbsoluteIndx(); for (var x=0;x0) var cols=rows[x].getElementsByTagName('TD'); else var cols=rows[x].getElementsByTagName('TH'); if (isKonqueror() || isSafari()) cols[displayIndex].style.display='table-cell'; else cols[displayIndex].removeAttribute('style'); } this.setVisible(true); var colEl= document.createElement("COL"); this.table.table.getElementsByTagName('colgroup')[0].appendChild(colEl); if (isKonqueror() || isSafari()) this.parent.resetSize(); } /** * @class Representation of columns * @param {tableRow} tr TR element * @param {table} parent table object */ function columns (tr,parent) { //FIELDS /** * Collection of column objects * @type array of column */ this.item= new Array(); /** * Reference to table object * @type table */ this.parent= parent; //METHODS this.listInvisible=columns_listInvisible; this.hidden=columns_hidden; this.show=columns_show; this.getColByID=columns_getColByID; this.recol=columns_recol; this.setOrder=columns_setOrder; this.resetSize=columns_resetSize; //Constructor Code var cols=tr.getElementsByTagName('TH'); for (var x=0;x