All Downloads are FREE. Search and download functionalities are using the official Maven repository.

echopointng.ui.resource.js.livetable.js Maven / Gradle / Ivy

Go to download

Echo2 bundled with Echo2_Extras, Echo2_FileTransfer and echopointing and various improvements/bugfixes

There is a newer version: 2.0.4
Show newest version
/*
 * This file is part of the Echo Point Project. This project is a collection of
 * Components that have extended the Echo Web Application Framework.
 * 
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 * 
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with the
 * License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
 * 
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 * the specific language governing rights and limitations under the License.
 * 
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or the
 * GNU Lesser General Public License Version 2.1 or later (the "LGPL"), in which
 * case the provisions of the GPL or the LGPL are applicable instead of those
 * above. If you wish to allow use of your version of this file only under the
 * terms of either the GPL or the LGPL, and not to allow others to use your
 * version of this file under the terms of the MPL, indicate your decision by
 * deleting the provisions above and replace them with the notice and other
 * provisions required by the GPL or the LGPL. If you do not delete the
 * provisions above, a recipient may use your version of this file under the
 * terms of any one of the MPL, the GPL or the LGPL.
 */

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Our EPLiveTable object.
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EPLiveTable = function(elementId) { 
	this.elementId = elementId;
	EP.ObjectMap.put(elementId, this); 
};



/**
 * This function allows for server interactions from href="" attributes. Use
 * this in you generated row data to allow clicks to generate events back on the
 * server.
 * 

* You would use it something like : * *

 * href = "javascript:EPLiveTable.href('c_1234','valueXXX');"
 * 
*/ EPLiveTable.href = function(elementId, actionValue) { EP.Event.hrefActionHandler(elementId,'click',actionValue); }; /** * EPLiveTable has a ServerMessage processor. */ EPLiveTable.MessageProcessor = function() { }; EPLiveTable.MessageProcessor.process = function(messagePartElement) { //debugger; for (var i = 0; i < messagePartElement.childNodes.length; ++i) { if (messagePartElement.childNodes[i].nodeType == 1) { switch (messagePartElement.childNodes[i].tagName) { case "init": EPLiveTable.MessageProcessor.processInit(messagePartElement.childNodes[i]); break; case "dispose": EPLiveTable.MessageProcessor.processDispose(messagePartElement.childNodes[i]); break; } } } }; EPLiveTable.MessageProcessor.processInit = function(initMessageElement) { //EchoServerDelayMessage.activate(); for (var item = initMessageElement.firstChild; item; item = item.nextSibling) { var elementId = item.getAttribute("eid"); EP.ObjectMap.destroy(elementId); // just in case they exist EP.StyleSheet.removeAllStyles(elementId); var liveTable = new EPLiveTable(elementId); if (item.getAttribute("enabled") == "false") { EchoDomPropertyStore.setPropertyValue(elementId, "EchoClientEngine.inputDisabled", true); } liveTable.totalRows = parseInt(item.getAttribute("totalRows")); liveTable.rowsPerPage = parseInt(item.getAttribute("rowsPerPage")); liveTable.pageFetchSize = parseInt(item.getAttribute("pageFetchSize")); liveTable.rolloverEnabled = item.getAttribute("rolloverEnabled") == 'true'; liveTable.rolloverStyleName = item.getAttribute("rolloverStyleName"); liveTable.selectionEnabled = item.getAttribute("selectionEnabled") == 'true'; liveTable.selectionStyleName = item.getAttribute("selectionStyleName"); liveTable.originalStyleName = []; liveTable.pageCount = liveTable.totalRows / liveTable.rowsPerPage; liveTable.pageIsLoaded = []; for (var i = 0; i < liveTable.pageCount; i++) { liveTable.pageIsLoaded[i] = false; } // // we come down with the pageFetchSize pages pre-loaded for (var i = 0; i < liveTable.pageFetchSize; i++) { liveTable.pageIsLoaded[i] = true; } var scrollerDivE = document.getElementById(elementId); liveTable.scrollerDivE = scrollerDivE; var tableE = scrollerDivE.firstChild; // events EP.Event.addHandler("scroll", scrollerDivE, liveTable); if (liveTable.rolloverEnabled) { EP.Event.addHandler("mouseover", scrollerDivE, liveTable); EP.Event.addHandler("mouseout", scrollerDivE, liveTable); } // style support var styleIndex = 0; var styles = item.getElementsByTagName("styles")[0]; for (var sourceStyleE = styles.firstChild; sourceStyleE; sourceStyleE = sourceStyleE.nextSibling) { EP.StyleSheet.addStyle(elementId, sourceStyleE, styleIndex); styleIndex++; } // // we make multiple copies of the empty row on the client to // save bandwidth. // var emptyRowTR = item.getElementsByTagName("emptyRow")[0].firstChild; var newTR = EchoDomUtil.importNode(document, emptyRowTR, true); var tbody = document.createElement("tbody"); tbody.appendChild(newTR); var singleEmptyRowHtml = tbody.innerHTML; delete tbody; var emptyTbodyHtml = []; emptyTbodyHtml.push(''); for (var j = 0; j < liveTable.rowsPerPage; j++) { emptyTbodyHtml.push(singleEmptyRowHtml); } emptyTbodyHtml.push(''); emptyTbodyHtml = emptyTbodyHtml.join(''); // build up an array of tbody pages var emptyPagesHtml = []; for (var i = 0; i < liveTable.pageCount; i++) { if (liveTable.pageIsLoaded[i]) { continue; } emptyPagesHtml.push(emptyTbodyHtml); } try { // // append the set of empty pages to the exisiting html. Its seems // much faster this way var attrs = tableE.attributes; var newTableHtml = '