/* * Copyright 2007 Alex Bell * * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Author: AlexBell (latest modification by $Author: ganeshpuri $) * Version: $Revision: 1.20 $ $Date: 2008/06/26 06:26:31 $ * */ /************************************* COMMON ****************************************************/ var jsfKeywords = ["jsf_sequence", "jsf_tree_64", "jsf_viewid", "jsf_state_64", "javax.faces.ViewState"] /******************************** Namespace ******************************************************/ if(!window.org) window.org = {}; if(!org.j4fry) org.j4fry = {}; if(!org.j4fry.common) org.j4fry.common = {}; /*********************************** Class Array ***************************************************/ /* * Durchsucht eine Array nach einem String * param {String} string_name - String nach dem in Array gesucht werden soll */ Array.prototype.contains = function(string_name) { for(var i=0; i appendChild parentItem.appendChild(placeholder); } } catch(e) { this.m_exception.throwError("createPlaceholder", e); } }; /* * Ersetzt HTML Elemente durch andere * @param {String} itemIdToReplace - ID des Elements das ersetzt werden soll * @param {String} newTag - das neue Tag * @param {HTML Element} form - Form-Element das zu dem Element gehort das den Request ausgeloest hat * -> nur Elemente innerhalb dieser Form updaten */ org.j4fry.common.Page.prototype.replaceHTMLItem = function(itemIdToReplace, newTag, form) { //JAVA:alert('ItemID: ' + itemIdToReplace + '\\nnewTag: ' + newTag + '\\nForm:' + form.name); try { var item = this.getElementFromForm(itemIdToReplace, form); if(item == null) { this.m_exception.throwWarning("replaceHTMLItem", "Unknown Html-Component-ID: " + itemIdToReplace); return; } if (typeof window.Range != 'undefined' && typeof Range.prototype.createContextualFragment == 'function') { try { var range = document.createRange(); range.setStartBefore(item); var fragment = range.createContextualFragment(newTag); } catch(t) { // facelets deliver html entity names with xhtml causing AJAX failure in firefox -> replace with entitiy numbers var fragment = range.createContextualFragment(this.faceletsXHTMLHack(newTag)); } item.parentNode.insertBefore(fragment, item); } else { item.insertAdjacentHTML('beforeBegin', newTag); } item.parentNode.removeChild(item); } catch(e) { this.m_exception.throwError("replaceHTMLItem", e); } }; /* * Holt anhand einer ID eines HTML-Elements das gesamte Element das in der angegebenen Form liegt * -> es ist moeglich das zwei Elemente die gleiche ID haben aber in unterschiedlichen Forms liegen * -> MyFaces 1.1.4 zwei Forms -> 2x Input-Hidden-Fields mit ID jsf_tree_64 & jsf_state_64 * -> http://www.arcknowledge.com/gmane.comp.jakarta.myfaces.devel/2005-09/msg01269.html * @param {String} itemId - ID des HTML Elements * @param {Html-Element} form - Form Element das das Element beinhalten soll * @return {Html-Element} - wird das Element gefunden wird es zuruck gegeben ansonsten null */ org.j4fry.common.Page.prototype.getElementFromForm = function(itemId, form) { try { var fLen = form.elements.length; for(var f=0; f Normalen getElementById absetzen (kann ggf. null sein wenn es das Element nicht gibt) return document.getElementById(itemId); } catch(e) { this.m_exception.throwError("getElementFromForm", e); } }; /* * Holt zu einem Item seinen Parent mit bestimmten Tag-Namen * @param {HtmlElement} item - Kindelement * @param {String} parentName - TagName des Elternelements */ org.j4fry.common.Page.prototype.getParent = function(item, parentName) { try { // parent tag parentName suchen var parentItem = item.parentNode; while(parentItem != null && parentItem.tagName.toLowerCase() != parentName) { parentItem = parentItem.parentNode; } if(parentItem != null) { return parentItem; } else { this.m_exception.throwWarning("getParent", "The item has no parent with type <" + parentName + ">"); return null; } } catch(e) { this.m_exception.throwError("getParent", e); } }; /* * Holt zu einem Item ein Child * @param {HtmlElement} item - Elternelement * @param {String} childName - TagName des Kindelements * @param {String} itemName - name-Attribut das das Kindelement haben kann (kann null sein) */ org.j4fry.common.Page.prototype.getChild = function (item, childName, itemName) { var childItems = item.childNodes; for(var c=0, cLen=childItems.length; c 0) { // Knoten rekursiv prüfen und ggf. einfügen (ohne die Dummyzeile läßt der IE6 den Aufruf weg) var dummy = 'x'; this.addNodes(form, false, partialIds, disableFlag, disableTypesArr, stringBuffer); } else { // alle Knoten einfügen (ohne die Dummyzeile läßt der IE6 die Zuweisung weg) var dummy = 'x'; var eLen = form.elements.length; for(var e=0; e= 0) { var uLen = element.options.length; for(var u=0; u disable entfernen element.removeAttribute("disabled"); } else { if(element.tagName.toLowerCase() == "a") { // Routine fuer Links enabeln d.h. urspruengliches "onclick"-Attribut wiederherstellen element.setAttribute("onclick", this.m_componentAttributeCache[i]); } else { // disable-Zustand der Komponente wiederherstellen element.setAttribute("disabled", this.m_componentAttributeCache[i]); } } } } catch(e) { this.m_exception.throwError("enableElementsFromCache", e); } }; /* * Ermittelt die Position (left/top) eines Elements * @param {HTMLElement} item - Item für das die Position ermittelt werden soll */ org.j4fry.common.Page.prototype.calculatePosition = function(item) { var curleft = curtop = 0; if (item.offsetParent) { do { curleft += item.offsetLeft; curtop += item.offsetTop; } while (item = item.offsetParent); } return [curleft,curtop]; }; /* * Ersetzt den HMTL entity name durch die in XHTML valide entity number * Facelets wollen XHTML rendern, kriegen vom JSF jedoch HTML entity names * Wenn beim AJAX das ersetzen fehlschlägt, kommt dieser Hack zum Tragen * @param {String} faceletsString - Der XHTML String mit HTML entity names, den Facelets liefert */ org.j4fry.common.Page.prototype.faceletsXHTMLHack = function(faceletsString) { return faceletsString .replace(/"/g, """) .replace(/'/g, "'") .replace(/&/g, "&") .replace(/</g, "<") .replace(/>/g, ">") .replace(/¡/g, "¡") .replace(/¢/g, "¢") .replace(/£/g, "£") .replace(/¤/g, "¤") .replace(/¥/g, "¥") .replace(/¦/g, "¦") .replace(/§/g, "§") .replace(/¨/g, "¨") .replace(/©/g, "©") .replace(/ª/g, "ª") .replace(/«/g, "«") .replace(/¬/g, "¬") .replace(/­/g, "­") .replace(/®/g, "®") .replace(/¯/g, "¯") .replace(/°/g, "°") .replace(/±/g, "±") .replace(/²/g, "²") .replace(/³/g, "³") .replace(/´/g, "´") .replace(/µ/g, "µ") .replace(/¶/g, "¶") .replace(/·/g, "·") .replace(/¸/g, "¸") .replace(/¹/g, "¹") .replace(/º/g, "º") .replace(/»/g, "»") .replace(/¼/g, "¼") .replace(/½/g, "½") .replace(/¾/g, "¾") .replace(/¿/g, "¿") .replace(/×/g, "×") .replace(/÷/g, "÷") .replace(/À/g, "À") .replace(/Á/g, "Á") .replace(/Â/g, "Â") .replace(/Ã/g, "Ã") .replace(/Ä/g, "Ä") .replace(/Å/g, "Å") .replace(/Æ/g, "Æ") .replace(/Ç/g, "Ç") .replace(/È/g, "È") .replace(/É/g, "É") .replace(/Ê/g, "Ê") .replace(/Ë/g, "Ë") .replace(/Ì/g, "Ì") .replace(/Í/g, "Í") .replace(/Î/g, "Î") .replace(/Ï/g, "Ï") .replace(/Ð/g, "Ð") .replace(/Ñ/g, "Ñ") .replace(/Ò/g, "Ò") .replace(/Ó/g, "Ó") .replace(/Ô/g, "Ô") .replace(/Õ/g, "Õ") .replace(/Ö/g, "Ö") .replace(/Ø/g, "Ø") .replace(/Ù/g, "Ù") .replace(/Ú/g, "Ú") .replace(/Û/g, "Û") .replace(/Ü/g, "Ü") .replace(/Ý/g, "Ý") .replace(/Þ/g, "Þ") .replace(/ß/g, "ß") .replace(/à/g, "à") .replace(/á/g, "á") .replace(/â/g, "â") .replace(/ã/g, "ã") .replace(/ä/g, "ä") .replace(/å/g, "å") .replace(/æ/g, "æ") .replace(/ç/g, "ç") .replace(/è/g, "è") .replace(/é/g, "é") .replace(/ê/g, "ê") .replace(/ë/g, "ë") .replace(/ì/g, "ì") .replace(/í/g, "í") .replace(/î/g, "î") .replace(/ï/g, "ï") .replace(/ð/g, "ð") .replace(/ñ/g, "ñ") .replace(/ò/g, "ò") .replace(/ó/g, "ó") .replace(/ô/g, "ô") .replace(/õ/g, "õ") .replace(/ö/g, "ö") .replace(/ø/g, "ø") .replace(/ù/g, "ù") .replace(/ú/g, "ú") .replace(/û/g, "û") .replace(/ü/g, "ü") .replace(/ý/g, "ý") .replace(/þ/g, "þ") .replace(/ÿ/g, "ÿ"); };