|
Author: sascharodekamp
Date: Fri Jun 22 08:48:58 2012 New Revision: 1352804 URL: http://svn.apache.org/viewvc?rev=1352804&view=rev Log: Refactoring fieldlookup.js - step one: restructuring the lookup object, encapsulate some methods in objects Modified: ofbiz/trunk/framework/images/webapp/images/fieldlookup.js ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl Modified: ofbiz/trunk/framework/images/webapp/images/fieldlookup.js URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/fieldlookup.js?rev=1352804&r1=1352803&r2=1352804&view=diff ============================================================================== --- ofbiz/trunk/framework/images/webapp/images/fieldlookup.js (original) +++ ofbiz/trunk/framework/images/webapp/images/fieldlookup.js Fri Jun 22 08:48:58 2012 @@ -1,842 +1,884 @@ /* -* Licensed to the Apache Software Foundation (ASF) under one -* or more contributor license agreements. See the NOTICE file -* distributed with this work for additional information -* regarding copyright ownership. The ASF licenses this file -* to you 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. -*/ + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ // ================= FIELD LOOKUP METHODS ============================ -var NS4 = (navigator.appName.indexOf("Netscape") >= 0 && ! document.getElementById)? true: false; -var IE4 = (document.all && ! document.getElementById)? true: false; -var IE5 = (document.getElementById && document.all)? true: false; -var NS6 = (document.getElementById && navigator.appName.indexOf("Netscape") >= 0)? true: false; + var mx, my; var ACTIVATED_LOOKUP = null; var LOOKUP_DIV = null; var INITIALLY_COLLAPSED = null; var SHOW_DESCRIPTION = false; - - -function moveobj(evt) { - if (NS4 || NS6) { - mx = evt.screenX; - my = evt.screenY; - } else if (IE5 || IE4) { - mx = event.screenX; - my = event.screenY; - } -} +var COLLAPSE_SEQUENCE_NUMBER = 1999; var target = null; var target2 = null; var targetW = null; -var lookups =[]; +var lookups = []; function call_fieldlookup(target, viewName, formName, viewWidth, viewheight) { - var fieldLookup = new fieldLookup1(target); - if (! viewWidth) viewWidth = 350; - if (! viewheight) viewheight = 200; - fieldLookup.popup(viewName, formName, viewWidth, viewheight); -} -function call_fieldlookupLayer(target, viewName, lookupWidth, lookupHeight, lookupPosition, fadeBackground, initiallyCollapsed) { - if (isEmpty(target) || isEmpty(viewName)) { - return lookup_error("Lookup can't be created, one of these variables is missing: target=" + target + " viewName=" + viewName); - } - - var fieldLookupPopup = new FieldLookupPopup(target, viewName, lookupWidth, lookupHeight, lookupPosition, fadeBackground, initiallyCollapsed, arguments); - fieldLookupPopup.showLookup(); - this.target = target; -} - -function call_fieldlookupLayer3(target, target2, viewName, lookupWidth, lookupHeight, lookupPosition, fadeBackground, initiallyCollapsed) { - if (isEmpty(target) || isEmpty(target2) || isEmpty(viewName)) { - return lookup_error("Lookup can't be created, one of these variables is missing: target=" + target + " target2=" + target2 + " viewName=" + viewName); - } - - var fieldLookupPopup = new FieldLookupPopup(target, viewName, lookupWidth, lookupHeight, lookupPosition, fadeBackground, initiallyCollapsed, arguments); - fieldLookupPopup.showLookup(); - this.target = target; - this.target2 = target2; + var fieldLookup = new fieldLookup1(target); + if (!viewWidth) + viewWidth = 350; + if (!viewheight) + viewheight = 200; + fieldLookup.popup(viewName, formName, viewWidth, viewheight); } function call_fieldlookup2(target, viewName, presentation) { - var fieldLookup = new fieldLookup1(target, arguments, presentation); - fieldLookup.popup2(viewName); + var fieldLookup = new fieldLookup1(target, arguments, presentation); + fieldLookup.popup2(viewName); } function call_fieldlookup3(target, target2, viewName, presentation) { - var fieldLookup = new fieldLookup2(target, target2, arguments, presentation); - fieldLookup.popup2(viewName); + var fieldLookup = new fieldLookup2(target, target2, arguments, presentation); + fieldLookup.popup2(viewName); } function fieldLookup1(obj_target, args, presentation) { - this.args = args; - this.presentation = presentation; - // passing methods - this.popup = lookup_popup1; - this.popup2 = lookup_popup2; - - // validate input parameters - if (! obj_target) return lookup_error("Error calling the field lookup: no target control specified"); - if (obj_target.value == null) return lookup_error("Error calling the field lookup: parameter specified is not valid target control"); - targetW = obj_target; + this.args = args; + this.presentation = presentation; + // passing methods + this.popup = lookup_popup1; + this.popup2 = lookup_popup2; + + // validate input parameters + if (!obj_target) + return lookup_error("Error calling the field lookup: no target control specified"); + if (obj_target.value == null) + return lookup_error("Error calling the field lookup: parameter specified is not valid target control"); + targetW = obj_target; } function fieldLookup2(obj_target, obj_target2, args, presentation) { - this.args = args; - this.presentation = presentation; - // passing methods - this.popup = lookup_popup1; - this.popup2 = lookup_popup2; - // validate input parameters - if (! obj_target) return lookup_error("Error calling the field lookup: no target control specified"); - if (obj_target.value == null) return lookup_error("Error calling the field lookup: parameter specified is not valid target control"); - targetW = obj_target; - // validate input parameters - if (! obj_target2) return lookup_error("Error calling the field lookup: no target2 control specified"); - if (obj_target2.value == null) return lookup_error("Error calling the field lookup: parameter specified is not valid target2 control"); - target2 = obj_target2; - + this.args = args; + this.presentation = presentation; + // passing methods + this.popup = lookup_popup1; + this.popup2 = lookup_popup2; + // validate input parameters + if (!obj_target) + return lookup_error("Error calling the field lookup: no target control specified"); + if (obj_target.value == null) + return lookup_error("Error calling the field lookup: parameter specified is not valid target control"); + targetW = obj_target; + // validate input parameters + if (!obj_target2) + return lookup_error("Error calling the field lookup: no target2 control specified"); + if (obj_target2.value == null) + return lookup_error("Error calling the field lookup: parameter specified is not valid target2 control"); + target2 = obj_target2; + } function lookup_popup1(view_name, form_name, viewWidth, viewheight) { - var obj_lookupwindow = window.open(getViewNameWithSeparator(view_name) + 'formName=' + form_name + '&presentation=' + this.presentation + '&id=' + this.id, '_blank', 'width=' + viewWidth + ',height=' + viewheight + ',scrollbars=yes,status=no,resizable=yes,top=' + my + ',left=' + mx + ',dependent=yes,alwaysRaised=yes'); - obj_lookupwindow.opener = window; - obj_lookupwindow.focus(); + var obj_lookupwindow = window.open(getViewNameWithSeparator(view_name) + 'formName=' + form_name + '&presentation=' + this.presentation + + '&id=' + this.id, '_blank', 'width=' + viewWidth + ',height=' + viewheight + ',scrollbars=yes,status=no,resizable=yes,top=' + + my + ',left=' + mx + ',dependent=yes,alwaysRaised=yes'); + obj_lookupwindow.opener = window; + obj_lookupwindow.focus(); } function lookup_popup2(view_name) { - var argString = ""; - if (this.args != null) { - if (this.args.length > 2) { - for (var i = 2; i < this.args.length; i++) { - argString += "&parm" + (i - 3) + "=" + this.args[i]; - } - } - } - - var obj_lookupwindow = window.open(getViewNameWithSeparator(view_name) + 'presentation=' + this.presentation + '&id=' + this.id + argString, '_blank', 'width=900,height=700,scrollbars=yes,status=no,resizable=yes,top=' + my + ',left=' + mx + ',dependent=yes,alwaysRaised=yes'); - obj_lookupwindow.opener = window; - obj_lookupwindow.focus(); + var argString = ""; + if (this.args != null) { + if (this.args.length > 2) { + for ( var i = 2; i < this.args.length; i++) { + argString += "&parm" + (i - 3) + "=" + this.args[i]; + } + } + } + + var obj_lookupwindow = window.open(getViewNameWithSeparator(view_name) + 'presentation=' + this.presentation + '&id=' + this.id + + argString, '_blank', 'width=900,height=700,scrollbars=yes,status=no,resizable=yes,top=' + my + ',left=' + mx + + ',dependent=yes,alwaysRaised=yes'); + obj_lookupwindow.opener = window; + obj_lookupwindow.focus(); } function lookup_error(str_message) { - var CommonErrorMessage2 = getJSONuiLabel("CommonUiLabels", "CommonErrorMessage2"); - showErrorAlert(CommonErrorMessage2, str_message); - return null; + var CommonErrorMessage2 = getJSONuiLabel("CommonUiLabels", "CommonErrorMessage2"); + showErrorAlert(CommonErrorMessage2, str_message); + return null; } function getViewNameWithSeparator(view_name) { - var sep = "?"; - if (view_name.indexOf("?") >= 0) { - sep = "&"; - } - return view_name + sep; + var sep = "?"; + if (view_name.indexOf("?") >= 0) { + sep = "&"; + } + return view_name + sep; } function initiallyCollapse() { - if ((!LOOKUP_DIV) || (INITIALLY_COLLAPSED != "true")) return; - var slTitleBars = LOOKUP_DIV.getElementsByClassName('screenlet-title-bar'); - for (i in slTitleBars) { - var slTitleBar = slTitleBars[i]; - var ul = slTitleBar.firstChild; - if ((typeof ul) != 'object') continue; - - var childElements = ul.childNodes; - for (j in childElements) { - if (childElements[j].className == 'expanded' || childElements[j].className == 'collapsed') { - break; - } - } - var childEle = childElements[j].firstChild; - CollapsePanel(childEle, 'lec' + COLLAPSE); - break; - } -} - -function CollapsePanel(link, areaId){ - var container = $(areaId); - var liElement = $(link).up('li'); - liElement.removeClassName('expanded'); - liElement.addClassName('collapsed'); - Effect.toggle(container, 'appear'); + if ((!LOOKUP_DIV) || (INITIALLY_COLLAPSED != "true")) + return; + var slTitleBars = LOOKUP_DIV.getElementsByClassName('screenlet-title-bar'); + for (i in slTitleBars) { + var slTitleBar = slTitleBars[i]; + var ul = slTitleBar.firstChild; + if ((typeof ul) != 'object') + continue; + + var childElements = ul.childNodes; + for (j in childElements) { + if (childElements[j].className == 'expanded' || childElements[j].className == 'collapsed') { + break; + } + } + var childEle = childElements[j].firstChild; + CollapsePanel(childEle, 'lec' + COLLAPSE_SEQUENCE_NUMBER); + break; + } +} + +function CollapsePanel(link, areaId) { + var container = $(areaId); + var liElement = $(link).up('li'); + liElement.removeClassName('expanded'); + liElement.addClassName('collapsed'); + Effect.toggle(container, 'appear'); } function initiallyCollapseDelayed() { - setTimeout("initiallyCollapse()", 400); + setTimeout("initiallyCollapse()", 400); } - -/************************************* -* Fieldlookup Class & Methods -*************************************/ -function ConstructLookup(requestUrl, inputFieldId, dialogTarget, dialogOptionalTarget, formName, width, height, position, modal, ajaxUrl, showDescription, presentation, defaultMinLength, defaultDelay, args) { - // add the presentation attribute to the request url to let the request know which decorator should be loaded - if(!presentation) { - var presentation = "layer" - } - - // create Link Element with unique Key - var lookupId = GLOBAL_LOOKUP_REF.createNextKey(); - var inputBox = document.getElementById(inputFieldId); - newInputBoxId = lookupId + "_" + inputFieldId; - inputBox.id = newInputBoxId; - var parent = inputBox.parentNode; - - var link = document.createElement('A'); - link.href = "javascript:void(0);"; - link.id = lookupId + "_button"; - - parent.appendChild(link); - - var hiddenDiv = document.createElement("DIV"); - hiddenDiv.id = lookupId; - hiddenDiv.css = "{display: none;}"; - hiddenDiv.title = ""; - - parent.appendChild(hiddenDiv); - - // createAjax autocomplete - if (ajaxUrl != "" && showDescription != "") { - SHOW_DESCRIPTION = showDescription; - //write the new input box id in the ajaxUrl Array - ajaxUrl = ajaxUrl.replace(ajaxUrl.substring(0, ajaxUrl.indexOf(",")), newInputBoxId); - new ajaxAutoCompleter(ajaxUrl, showDescription, defaultMinLength, defaultDelay, formName); - } - - var positioning = null; - if (position == "topleft") { - positioning = ['left', 'top']; - } else if (position == "topcenter") { - positioning = ['center', 'top']; - } else if (position == "topright") { - positioning = ['right', 'top']; - } else if (position == "center") { - positioning = 'center'; - } else if (position == "left") { - positioning = 'left'; - } else if (position == "right") { - positioning = 'right'; - } else { - positioning = ['left', 'top']; - } - - var lookupFormAction = null; - function lookup_onKeyEnter(event) { - if (event.which == 13) { - lookupFormAjaxRequest(lookupFormAction, "form_" + lookupId); - return false; - } - } - - // Lookup Configuration - var dialogOpts = { - modal: (modal == "true") ? true : false, - bgiframe: true, - autoOpen: false, - height: (height != "") ? parseInt(height) : 500, - width: (width != "") ? parseInt(width) : 620, - position: positioning, - draggable: true, - resizeable: true, - open: function(event,ui) { - waitSpinnerShow(); - jQuery("#" + lookupId).empty(); - - var queryArgs = "presentation=" + presentation; - if (typeof args == "object" && jQuery.isArray(args)) { - for (var i = 0; i < args.length; i++) { - queryArgs += "&parm" + i + "=" + jQuery(args[i]).val(); - } - } - - jQuery.ajax({ - type: "post", - url: requestUrl, - data: queryArgs, - timeout: AJAX_REQUEST_TIMEOUT, - cache: false, - dataFilter: function(data, dataType) { - waitSpinnerHide(); - return data; - }, - success: function(data) { - jQuery("#" + lookupId).html(data); - - lookupFormAction = jQuery("#" + lookupId + " form:first").attr("action"); - modifySubmitButton(lookupId); - jQuery("#" + lookupId).bind("keypress", lookup_onKeyEnter); - // set up the window chaining - // if the ACTIVATED_LOOKUP var is set there have to be more than one lookup, - // before registrating the new lookup we store the id of the old lookup in the - // preLookup variable of the new lookup object. I.e. lookup_1 calls lookup_8, the lookup_8 - // object need a reference to lookup_1, this reference is set here - var prevLookup = null - if (ACTIVATED_LOOKUP) { - prevLookup = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).lookupId; - } - identifyLookup(lookupId); - - if (prevLookup) { - GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).prevLookup = prevLookup; - } - }, - error: function(xhr, reason, exception) { - if(exception != 'abort') { - alert("An error occurred while communicating with the server:\n\n\nreason=" + reason + "\n\nexception=" + exception); - } - location.reload(true); - }, - }); - }, - close: function() { - jQuery("#" + lookupId).unbind("keypress", lookup_onKeyEnter); - - waitSpinnerHide(); - - //when the window is closed the prev Lookup get the focus (if exists) - if (ACTIVATED_LOOKUP) { - var prevLookup = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).prevLookup; - } - if (prevLookup) { - identifyLookup(prevLookup); - } else { - ACTIVATED_LOOKUP = null; - } - } - }; - - // init Dialog and register - // create an object with all Lookup Informationes that are needed - var dialogRef = jQuery("#" + lookupId).dialog(dialogOpts); - - //setting up global variabels, for external access - this.inputBoxId = inputBox.id; - this.lookupId = lookupId; - this.formName = formName; - this.target = null; - this.presentation = presentation; - if (dialogOptionalTarget != null) { - this.target2 = null; - } - this.prevLookup = null; - this.dialogRef = dialogRef; - //write external settings in global window manager - GLOBAL_LOOKUP_REF.setReference(lookupId, this); - - // bind click Event to Dialog button - jQuery("#" + lookupId + "_button").click( - function (){ - jQuery("#" + lookupId).dialog("open"); - jQuery("#" + lookupId).dialog(dialogOpts); - GLOBAL_LOOKUP_REF.getReference(lookupId).target = jQuery(dialogTarget); - if (dialogOptionalTarget != null) { - //the target2 have to be set here, because the input field is not created before - GLOBAL_LOOKUP_REF.getReference(lookupId).target2 = jQuery(dialogOptionalTarget); - } - return false; - } - ); - - // close the dialog when clicking outside the dialog area - jQuery(".ui-widget-overlay").live("click", function() { - if(!ACTIVATED_LOOKUP || lookupId==ACTIVATED_LOOKUP){ - jQuery("#" + lookupId).dialog("close"); - } - }); -} - -function FieldLookupCounter() { - this.refArr = {}; - - this.setReference = function (key, ref) { - //if key doesn't exist in the array and - for (itm in this.refArr) { - if (itm == key) { - prefix = key.substring(0, key.indexOf("_")); - key = prefix + "_" + key; - this.refArr[""+ key + ""] = ref; - return this.refArr[key]; - } - } - this.refArr[""+ key + ""] = ref; - return this.refArr[key]; - }; - - this.getReference = function (key) { - // when key does not exist return null? - return this.refArr[key] != null ? this.refArr[key] : null; - }; - - this.getLastReference = function () { - return (this.countFields() -1) + "_lookupId"; - } - - this.createNextKey = function () { - return this.countFields() + "_lookupId"; - }; - - this.countFields = function () { - var count = 0; - jQuery.each(this.refArr, function (itm) {count++;}); - return count; - }; - - this.removeReference = function (key) { - // deletes the Array entry (doesn't effect the array length) - delete this.refArr[key]; - }; - +/******************************************************************************* + * Lookup Object + ******************************************************************************/ +var Lookup = function(options) { + var _newInputBoxId, _lookupId, _inputBox, _lookupContainer, _backgroundCloseClickEvent; + + options = { + requestUrl : options.requestUrl || "", + inputFieldId : options.inputFieldId || "", + dialogTarget : options.dialogTarget || "", + dialogOptionalTarget : options.dialogOptionalTarget || "", + formName : options.formName || "", + width : options.width || "620", + height : options.height || "500", + position : options.position || "topleft", + modal : options.modal || "true", + ajaxUrl : options.ajaxUrl || "", + showDescription : options.showDescription || "", + presentation : options.presentation || "layer", + defaultMinLength : options.defaultMinLength || "", + defaultDelay : options.defaultDelay || "", + args : options.args || "" + } + + function _init() { + _lookupId = GLOBAL_LOOKUP_REF.createNextKey(); + + _modifyContainer(); + _createAjaxAutoComplete(); + + _lookupContainer = jQuery("#" + _lookupId); + var dialogOpts = _createDialogOptions(_lookupContainer); + + // init Dialog and register + // create an object with all Lookup Informationes that are needed + var dialogRef = _lookupContainer.dialog(dialogOpts); + + // setting up global variabels, for external access + this.inputBoxId = _inputBox.id; + this.lookupId = _lookupId; + this.formName = options.formName; + this.target = null; + this.presentation = options.presentation; + if (options.dialogOptionalTarget != null) { + this.target2 = null; + } + this.prevLookup = null; + this.dialogRef = dialogRef; + + // write external settings in global window manager + GLOBAL_LOOKUP_REF.setReference(_lookupId, this); + + _addOpenEvent(dialogRef); + } + + function _modifyContainer() { + _inputBox = document.getElementById(options.inputFieldId); + _newInputBoxId = _lookupId + "_" + options.inputFieldId; + _inputBox.id = _newInputBoxId; + var parent = _inputBox.parentNode; + + var link = document.createElement('A'); + link.href = "javascript:void(0);"; + link.id = _lookupId + "_button"; + + parent.appendChild(link); + + var hiddenDiv = document.createElement("DIV"); + hiddenDiv.id = _lookupId; + hiddenDiv.css = "{display: none;}"; + hiddenDiv.title = ""; + + parent.appendChild(hiddenDiv); + } + + function _createAjaxAutoComplete() { + if (options.ajaxUrl != "" && options.showDescription != "") { + SHOW_DESCRIPTION = options.showDescription; + // write the new input box id in the ajaxUrl Array + options.ajaxUrl = options.ajaxUrl.replace(options.ajaxUrl.substring(0, options.ajaxUrl.indexOf(",")), _newInputBoxId); + new ajaxAutoCompleter(options.ajaxUrl, options.showDescription, options.defaultMinLength, options.defaultDelay, + options.formName); + } + } + + function _createDialogOptions(_lookupContainer) { + var positioning = _positioning(); + + var dialogOpts = { + modal : (options.modal == "true") ? true : false, + bgiframe : true, + autoOpen : false, + height : parseInt(options.height), + width : parseInt(options.width), + position : positioning, + draggable : true, + resizeable : true, + open : _dialogOpen, + close : _dialogClose + }; + + return dialogOpts; + } + + function _positioning() { + var positioning = null; + if (options.position == "topleft") { + positioning = [ 'left', 'top' ]; + } else if (options.position == "topcenter") { + positioning = [ 'center', 'top' ]; + } else if (options.position == "topright") { + positioning = [ 'right', 'top' ]; + } else if (options.position == "center") { + positioning = 'center'; + } else if (options.position == "left") { + positioning = 'left'; + } else if (options.position == "right") { + positioning = 'right'; + } else { + positioning = [ 'left', 'top' ]; + } + + return positioning; + } + + function _dialogOpen(event, ui) { + waitSpinnerShow(); + _lookupContainer.empty(); + + var queryArgs = "presentation=" + options.presentation; + if (typeof options.args == "object" && jQuery.isArray(options.args)) { + for ( var i = 0; i < options.args.length; i++) { + queryArgs += "&parm" + i + "=" + jQuery(options.args[i]).val(); + } + } + + _lookupChaining(); + _addCloseEventForClickingOnBackgroundLayer(); + + // load lookup data from server + jQuery.ajax({ + type : "POST", + url : options.requestUrl, + data : queryArgs, + timeout : AJAX_REQUEST_TIMEOUT, + cache : false, + dataFilter : function(data, dataType) { + waitSpinnerHide(); + return data; + }, + + success : function(data) { + _lookupContainer.html(data); + new ButtonModifier(_lookupId).modifySubmitButton(); + }, + + error : function(xhr, reason, exception) { + if (exception != 'abort') { + alert("An error occurred while communicating with the server:\n\n\nreason=" + reason + "\n\nexception=" + exception); + } + location.reload(true); + }, + }); + } + + function _lookupChaining() { + /* + * set up the window chaining if the ACTIVATED_LOOKUP var is set there + * have to be more than one lookup, before registrating the new lookup + * we store the id of the old lookup in the preLookup variable of the + * new lookup object. I.e. lookup_1 calls lookup_8, the lookup_8 object + * need a reference to lookup_1, this reference is set here + */ + + var prevLookup = null + if (ACTIVATED_LOOKUP) { + prevLookup = ACTIVATED_LOOKUP; + } + + _activateLookup(_lookupId); + + GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).prevLookup = prevLookup; + } + + function _activateLookup(newAl) { + if (ACTIVATED_LOOKUP != newAl) { + console.log("set ACTIVATED_LOOKUP from " + ACTIVATED_LOOKUP + " to " + newAl) + ACTIVATED_LOOKUP = newAl; + } + } + + function _addCloseEventForClickingOnBackgroundLayer() { + _backgroundCloseClickEvent = function() { + console.log("click outside box " + ACTIVATED_LOOKUP + " with lookupId " + _lookupId); + if (ACTIVATED_LOOKUP && ACTIVATED_LOOKUP == _lookupId) { + console.log("close layer " + ACTIVATED_LOOKUP); + GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).dialogRef.dialog("close"); + } + } + + jQuery(".ui-widget-overlay").click(_backgroundCloseClickEvent); + } + + function _dialogClose() { + jQuery(".ui-widget-overlay").unbind("click", _backgroundCloseClickEvent) + + var prevLookup = null; + if (ACTIVATED_LOOKUP) { + prevLookup = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).prevLookup; + } + + if (prevLookup) { + _activateLookup(prevLookup); + } else { + ACTIVATED_LOOKUP = null; + } + } + + function _addOpenEvent(dialogReference) { + jQuery("#" + _lookupId + "_button").click(function() { + dialogReference.dialog("open"); + + GLOBAL_LOOKUP_REF.getReference(_lookupId).target = jQuery(options.dialogTarget); + if (options.dialogOptionalTarget != null) { + GLOBAL_LOOKUP_REF.getReference(_lookupId).target2 = jQuery(options.dialogOptionalTarget); + } + }); + + } + + return { + init : _init + } }; -var GLOBAL_LOOKUP_REF = new FieldLookupCounter; -/** -* returns true if a String is empty -* @param value - String value -* @return -*/ -function isEmpty(value) { - if (value == null || value == "") { - return true; - } - return false; -} - -function identifyLookup (newAl) { - if (ACTIVATED_LOOKUP != newAl) { - ACTIVATED_LOOKUP = newAl; - } -} - -//global expand/col button var -var COLLAPSE = 1999; -function getNextCollapseSeq() { - COLLAPSE++; - return COLLAPSE; -} - -//modify expande/collapse button -function modifyCollapseable(lookupDiv){ - if (!lookupDiv) { - return; - } - var slTitleBars = jQuery("#" + lookupDiv + " .screenlet-title-bar"); - //jQuery("#" + lookupDiv + " li.expanded"); - - jQuery.each(slTitleBars, function(i) { - var slTitleBar = slTitleBars[i]; - var ul = slTitleBar.firstChild; - if ((typeof ul) != 'object') { - return true; - } - var childElements = ul.childNodes; - - for (j in childElements) { - if (childElements[j].className == 'expanded' || childElements[j].className == 'collapsed') { - break; - } - } - - getNextCollapseSeq(); - var childEle = childElements[j].firstChild; - - childEle.setAttribute('onclick', "javascript:toggleScreenlet(this, 'lec" + COLLAPSE +"', 'true', 'Expand', 'Collapse');"); - childEle.href = "javascript:void(0);" - jQuery(slTitleBar).next('div').attr('id', 'lec' + COLLAPSE); - - }); -} - -function modifySubmitButton (lookupDiv) { - /* changes form/submit behavior for Lookup Layer */ - if (lookupDiv) { - modifyCollapseable(lookupDiv); - - //find the lookup form and input button - var lookupForm = jQuery("#" + lookupDiv + " form:first"); - - //set new form name and id - oldFormName = lookupForm.attr("name"); - lookupForm.attr("name", "form_" + lookupDiv); - lookupForm.attr("id", "form_" + lookupDiv); - lookupForm = jQuery("#form_" + lookupDiv); - //set new links for lookups - var newLookups = jQuery("#" + lookupDiv + " .field-lookup"); - - var formAction = lookupForm.attr("action"); - // remove the form action - lookupForm.attr("action", ""); - var input = jQuery("#" + lookupDiv + " input[type=submit]").css({display: "block"}); - - // remove the original input button and replace with a new one - - var txt = input.attr("value"); - (input.parent()).append(jQuery("<button/>", { - id: "lookupSubmitButton", - href: "javascript:void(0);", - click: function () { - lookupFormAjaxRequest(formAction, lookupForm.attr("id")); - return false; - }, - text: txt - })); - - input.remove(); - //modify nav-pager - var navPagers = jQuery("#" + lookupDiv + " .nav-pager a"); - jQuery.each(navPagers, function(navPager) { - jQuery(navPagers[navPager]).attr("href", "javascript:lookupPaginationAjaxRequest('" + encodeURI(jQuery(navPagers[navPager]).attr("href")) + "','link')"); - }); - - var navPagersSelect = jQuery("#" + lookupDiv + " .nav-pager select"); - jQuery.each(navPagersSelect, function(navPager) { - // that's quite weird maybe someone have a better idea ... that's where the magic happens - try { - var oc = jQuery(navPagersSelect[navPager]).attr("onchange"); - if((typeof oc) == "function"){ // IE6/7 Fix - oc = oc.toString(); - var ocSub = oc.substring((oc.indexOf('=') + 3),(oc.length - 4)); - // define search pattern we must seperate between IE and Other Browser - var searchPattern = /" \+ this.value \+ "/g; - var searchPattern_IE = /'\+this.value\+'/g; - var searchPattern2 = /" \+ this.valu/g; - var searchPattern2_IE = /'\+this.valu/g; - - if (searchPattern.test(ocSub)) { - var viewSize = navPagersSelect[navPager].value; - var spl = ocSub.split(searchPattern); - navPagersSelect[navPager].onchange = function () { - lookupPaginationAjaxRequest(spl[0] + this.value + spl[1],'select'); - }; - } else if (searchPattern_IE.test(ocSub)) { - var viewSize = navPagersSelect[navPager].value; - var spl = ocSub.split(searchPattern_IE); - navPagersSelect[navPager].onchange = function () { - lookupPaginationAjaxRequest("/" + spl[0] + this.value + spl[1],'select'); - }; - } else if (searchPattern2.test(ocSub)) { - ocSub = ocSub.replace(searchPattern2, ""); - if (searchPattern.test(ocSub)) { - ocSub.replace(searchPattern, viewSize); - } - navPagersSelect[navPager].onchange = function () { - lookupPaginationAjaxRequest(ocSub + this.value,'select'); - }; - } else if (searchPattern2_IE.test(ocSub)) { - ocSub = ocSub.replace(searchPattern2_IE, ""); - if (searchPattern_IE.test(ocSub)) { - ocSub.replace(searchPattern_IE, viewSize); - } - navPagersSelect[navPager].onchange = function () { - lookupPaginationAjaxRequest("/" + ocSub + this.value,'select'); - }; - } - } else { - var ocSub = oc.substring((oc.indexOf('=') + 1),(oc.length - 1)); - navPagersSelect[navPager].setAttribute("onchange", "lookupPaginationAjaxRequest(" + ocSub + ",'')"); - } - - if (resultTable == null) { - return; - } - resultTable = resultTable.childElements()[0]; - var resultElements = resultTable.childElements(); - for (i in resultElements) { - var childElements = resultElements[i].childElements(); - if (childElements.size() == 1) { - continue; - } - for (k = 1; k < childElements.size(); k++) { - var cell = childElements[k]; - var cellChild = null; - cellChild = cell.childElements(); - if (cellChild.size() > 0) { - for (l in cellChild) { - var cellElement = cellChild[l]; - if (cellElement.tagName == 'A') { - var link = cellElement.href; - var liSub = link.substring(link.lastIndexOf('/')+1,(link.length)); - if (liSub.indexOf("javascript:set_") != -1) { - cellElement.href = link; - } else { - cellElement.href = "javascript:lookupAjaxRequest('" + liSub + "&presentation=layer')"; - } - } - } - } - } - } - } - catch (ex) { - } - }); - // modify links in result table ... - var resultTable= jQuery("#" + lookupDiv + " #search-results table:first tbody"); - var tableChildren = resultTable.children(); - jQuery.each(tableChildren, function(tableChild){ - var childElements = jQuery(tableChildren[tableChild]); - var tableRow = childElements.children(); - jQuery.each(tableRow, function(cell){ - var cellChild = null; - cellChild = jQuery(tableRow[cell]).children(); - jQuery.each(cellChild, function (child) { - if (cellChild[child].tagName == "A"){ - var link = cellChild[child].href; - var liSub = link.substring(link.lastIndexOf('/')+1,(link.length)); - if (liSub.indexOf("javascript:set_") != -1) { - cellChild[child].href = link; - } else { - cellChild[child].href = "javascript:lookupAjaxRequest('" + liSub + "&presentation=layer')"; - } - } - }); +/******************************************************************************* + * Lookup Counter Object + ******************************************************************************/ +var FieldLookupCounter = function() { + this.refArr = {}; + + this.setReference = function(key, ref) { + // if key doesn't exist in the array and + for (itm in this.refArr) { + if (itm == key) { + prefix = key.substring(0, key.indexOf("_")); + key = prefix + "_" + key; + this.refArr["" + key + ""] = ref; + return this.refArr[key]; + } + } + this.refArr["" + key + ""] = ref; + return this.refArr[key]; + }; + + this.getReference = function(key) { + // when key does not exist return null? + return this.refArr[key] != null ? this.refArr[key] : null; + }; + + this.getLastReference = function() { + return (this.countFields() - 1) + "_lookupId"; + } + + this.createNextKey = function() { + return this.countFields() + "_lookupId"; + }; + + this.countFields = function() { + var count = 0; + jQuery.each(this.refArr, function(itm) { + count++; + }); + return count; + }; + + this.removeReference = function(key) { + // deletes the Array entry (doesn't effect the array length) + delete this.refArr[key]; + }; - }); +}; +var GLOBAL_LOOKUP_REF = new FieldLookupCounter; - }); - } -} -/** - * Create an ajax Request - */ +/******************************************************************************* + * Button Modifier Object + ******************************************************************************/ +var ButtonModifier = function(lookupDiv) { + + function _modifySubmitButton() { + if (!lookupDiv) { + return; + } + + _modifyCollapseable(); + + // find the lookup form and input button + var lookupForm = jQuery("#" + lookupDiv + " form:first"); + + // set new form name and id + oldFormName = lookupForm.attr("name"); + lookupForm.attr("name", "form_" + lookupDiv); + lookupForm.attr("id", "form_" + lookupDiv); + lookupForm = jQuery("#form_" + lookupDiv); + // set new links for lookups + var newLookups = jQuery("#" + lookupDiv + " .field-lookup"); + + var formAction = lookupForm.attr("action"); + // remove the form action + lookupForm.attr("action", ""); + var input = jQuery("#" + lookupDiv + " input[type=submit]").css({ + display : "block" + }); + + // remove the original input button and replace with a new one + + var txt = input.attr("value"); + (input.parent()).append(jQuery("<button/>", { + id : "lookupSubmitButton", + href : "javascript:void(0);", + click : function() { + lookupFormAjaxRequest(formAction, lookupForm.attr("id")); + return false; + }, + text : txt + })); + + input.remove(); + // modify nav-pager + var navPagers = jQuery("#" + lookupDiv + " .nav-pager a"); + jQuery.each(navPagers, function(navPager) { + jQuery(navPagers[navPager]).attr("href", + "javascript:lookupPaginationAjaxRequest('" + encodeURI(jQuery(navPagers[navPager]).attr("href")) + "','link')"); + }); + + var navPagersSelect = jQuery("#" + lookupDiv + " .nav-pager select"); + jQuery.each(navPagersSelect, function(navPager) { + // that's quite weird maybe someone have a better idea ... + // that's + // where the magic happens + try { + var oc = jQuery(navPagersSelect[navPager]).attr("onchange"); + if ((typeof oc) == "function") { // IE6/7 Fix + oc = oc.toString(); + var ocSub = oc.substring((oc.indexOf('=') + 3), (oc.length - 4)); + // define search pattern we must seperate between IE and + // Other Browser + var searchPattern = /" \+ this.value \+ "/g; + var searchPattern_IE = /'\+this.value\+'/g; + var searchPattern2 = /" \+ this.valu/g; + var searchPattern2_IE = /'\+this.valu/g; + + if (searchPattern.test(ocSub)) { + var viewSize = navPagersSelect[navPager].value; + var spl = ocSub.split(searchPattern); + navPagersSelect[navPager].onchange = function() { + lookupPaginationAjaxRequest(spl[0] + this.value + spl[1], 'select'); + }; + } else if (searchPattern_IE.test(ocSub)) { + var viewSize = navPagersSelect[navPager].value; + var spl = ocSub.split(searchPattern_IE); + navPagersSelect[navPager].onchange = function() { + lookupPaginationAjaxRequest("/" + spl[0] + this.value + spl[1], 'select'); + }; + } else if (searchPattern2.test(ocSub)) { + ocSub = ocSub.replace(searchPattern2, ""); + if (searchPattern.test(ocSub)) { + ocSub.replace(searchPattern, viewSize); + } + navPagersSelect[navPager].onchange = function() { + lookupPaginationAjaxRequest(ocSub + this.value, 'select'); + }; + } else if (searchPattern2_IE.test(ocSub)) { + ocSub = ocSub.replace(searchPattern2_IE, ""); + if (searchPattern_IE.test(ocSub)) { + ocSub.replace(searchPattern_IE, viewSize); + } + navPagersSelect[navPager].onchange = function() { + lookupPaginationAjaxRequest("/" + ocSub + this.value, 'select'); + }; + } + } else { + var ocSub = oc.substring((oc.indexOf('=') + 1), (oc.length - 1)); + navPagersSelect[navPager].setAttribute("onchange", "lookupPaginationAjaxRequest(" + ocSub + ",'')"); + } + + if (resultTable == null) { + return; + } + resultTable = resultTable.childElements()[0]; + var resultElements = resultTable.childElements(); + for (i in resultElements) { + var childElements = resultElements[i].childElements(); + if (childElements.size() == 1) { + continue; + } + for (k = 1; k < childElements.size(); k++) { + var cell = childElements[k]; + var cellChild = null; + cellChild = cell.childElements(); + if (cellChild.size() > 0) { + for (l in cellChild) { + var cellElement = cellChild[l]; + if (cellElement.tagName == 'A') { + var link = cellElement.href; + var liSub = link.substring(link.lastIndexOf('/') + 1, (link.length)); + if (liSub.indexOf("javascript:set_") != -1) { + cellElement.href = link; + } else { + cellElement.href = "javascript:lookupAjaxRequest('" + liSub + "&presentation=layer')"; + } + } + } + } + } + } + } catch (ex) { + } + }); + // modify links in result table ... + var resultTable = jQuery("#" + lookupDiv + " #search-results table:first tbody"); + var tableChildren = resultTable.children(); + jQuery.each(tableChildren, function(tableChild) { + var childElements = jQuery(tableChildren[tableChild]); + var tableRow = childElements.children(); + jQuery.each(tableRow, function(cell) { + var cellChild = null; + cellChild = jQuery(tableRow[cell]).children(); + jQuery.each(cellChild, function(child) { + if (cellChild[child].tagName == "A") { + var link = cellChild[child].href; + var liSub = link.substring(link.lastIndexOf('/') + 1, (link.length)); + if (liSub.indexOf("javascript:set_") != -1) { + cellChild[child].href = link; + } else { + cellChild[child].href = "javascript:lookupAjaxRequest('" + liSub + "&presentation=layer')"; + } + } + }); + + }); + + }); + + } + + function _modifyCollapseable() { + + var slTitleBars = jQuery("#" + lookupDiv + " .screenlet-title-bar"); + + jQuery.each(slTitleBars, function(i) { + var slTitleBar = slTitleBars[i]; + var ul = slTitleBar.firstChild; + if ((typeof ul) != 'object') { + return true; + } + var childElements = ul.childNodes; + + for (j in childElements) { + if (childElements[j].className == 'expanded' || childElements[j].className == 'collapsed') { + break; + } + } + + _getNextCollapseSeq(); + var childEle = childElements[j].firstChild; + + childEle.setAttribute('onclick', "javascript:toggleScreenlet(this, 'lec" + COLLAPSE_SEQUENCE_NUMBER + + "', 'true', 'Expand', 'Collapse');"); + childEle.href = "javascript:void(0);" + jQuery(slTitleBar).next('div').attr('id', 'lec' + COLLAPSE_SEQUENCE_NUMBER); + + }); + } + + function _getNextCollapseSeq() { + COLLAPSE_SEQUENCE_NUMBER++; + return COLLAPSE_SEQUENCE_NUMBER; + } + + return { + modifySubmitButton : _modifySubmitButton + } +} + +/******************************************************************************* + * Ajax Request Helper + ******************************************************************************/ function lookupAjaxRequest(request) { - // get request arguments - var arg = request.substring(request.indexOf('?')+1,(request.length)); - request = request.substring(0, request.indexOf('?')); - lookupId = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).lookupId; - jQuery("#" + lookupId).load(request, arg, function(data) { - modifySubmitButton(lookupId); - }); + // get request arguments + var arg = request.substring(request.indexOf('?') + 1, (request.length)); + request = request.substring(0, request.indexOf('?')); + lookupId = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).lookupId; + jQuery("#" + lookupId).load(request, arg, function(data) { + new ButtonModifier(lookupId).modifySubmitButton(); + }); } -/** -* Create an ajax request to get the search results -* @param formAction - action target -* @param form - formId -* @return -*/ function lookupFormAjaxRequest(formAction, form) { - lookupId = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).lookupId; - var data = jQuery("#" + form).serialize(); - data = data + "&presentation=" + GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).presentation; - /*jQuery("#" + lookupId).load(formAction, data, function(data) { - modifySubmitButton(lookupId); - });*/ - var screenletTitleBar= jQuery("#"+lookupId+" .screenlet-title-bar :visible:first"); - jQuery.ajax({ - url: formAction, - data: data, - beforeSend: function(jqXHR, settings) { - //Here we append the spinner to the lookup screenlet and it will shown till the ajax request is processed. - var indicator = screenletTitleBar.find("span.indicator"); - //Check that if spinner is already in execution then don't add new spinner - if (indicator.length == 0) { - jQuery("<span class='indicator'><img src='/images/ajax-loader.gif' alt='' /></span>").appendTo(screenletTitleBar); - } - }, - success: function(result) { - if (result.search(/loginform/) != -1) { - window.location.href = window.location.href; - return; - } - // Here we are removing the spinner. - var indicator = screenletTitleBar.find("span.indicator"); - if (indicator != undefined) { - jQuery("span.indicator").remove(); - } - jQuery("#" + lookupId).html(result); - modifySubmitButton(lookupId); - } - }); + lookupId = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).lookupId; + var data = jQuery("#" + form).serialize(); + data = data + "&presentation=" + GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).presentation; + + var screenletTitleBar = jQuery("#" + lookupId + " .screenlet-title-bar :visible:first"); + jQuery.ajax({ + url : formAction, + data : data, + beforeSend : function(jqXHR, settings) { + // Here we append the spinner to the lookup screenlet and it will + // shown till the ajax request is processed. + var indicator = screenletTitleBar.find("span.indicator"); + // Check that if spinner is already in execution then don't add new + // spinner + if (indicator.length == 0) { + jQuery("<span class='indicator'><img src='/images/ajax-loader.gif' alt='' /></span>").appendTo(screenletTitleBar); + } + }, + success : function(result) { + if (result.search(/loginform/) != -1) { + window.location.href = window.location.href; + return; + } + // Here we are removing the spinner. + var indicator = screenletTitleBar.find("span.indicator"); + if (indicator != undefined) { + jQuery("span.indicator").remove(); + } + jQuery("#" + lookupId).html(result); + new ButtonModifier(lookupId).modifySubmitButton(); + } + }); } function lookupPaginationAjaxRequest(navAction, type) { - lookupDiv = (GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).divRef); - lookupContent = (GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).contentRef); + lookupDiv = (GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).divRef); + lookupContent = (GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).contentRef); + + lookupId = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).lookupId; + var screenletTitleBar = jQuery("#" + lookupId + " .screenlet-title-bar :visible:first"); - lookupId = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).lookupId; - /*jQuery("#" + lookupId).load(navAction, function(data) { - modifySubmitButton(lookupId); - });*/ - var screenletTitleBar= jQuery("#"+lookupId+" .screenlet-title-bar :visible:first"); - jQuery.ajax({ - url: navAction, - beforeSend: function(jqXHR, settings) { - //Here we append the spinner to the lookup screenlet and it will shown till the ajax request is processed. - var indicator = screenletTitleBar.find("span.indicator"); - //Check that if spinner is already in execution then don't add new spinner - if (indicator.length == 0) { - jQuery("<span class='indicator'><img src='/images/ajax-loader.gif' alt='' /></span>").appendTo(screenletTitleBar); - } - }, - success: function(result) { - if (result.search(/loginform/) != -1) { - window.location.href = window.location.href; - return; - } - // Here we are removing the spinner. - var indicator = screenletTitleBar.find("span.indicator"); - if (indicator != undefined) { - jQuery("span.indicator").remove(); - } - jQuery("#" + lookupId).html(result); - modifySubmitButton(lookupId); - } - }); -} - -/******************************************************************************************************* -* This code inserts the value lookedup by a popup window back into the associated form element -*******************************************************************************************************/ + jQuery.ajax({ + url : navAction, + beforeSend : function(jqXHR, settings) { + // Here we append the spinner to the lookup screenlet and it will + // shown till the ajax request is processed. + var indicator = screenletTitleBar.find("span.indicator"); + // Check that if spinner is already in execution then don't add new + // spinner + if (indicator.length == 0) { + jQuery("<span class='indicator'><img src='/images/ajax-loader.gif' alt='' /></span>").appendTo(screenletTitleBar); + } + }, + success : function(result) { + if (result.search(/loginform/) != -1) { + window.location.href = window.location.href; + return; + } + // Here we are removing the spinner. + var indicator = screenletTitleBar.find("span.indicator"); + if (indicator != undefined) { + jQuery("span.indicator").remove(); + } + jQuery("#" + lookupId).html(result); + new ButtonModifier(lookupId).modifySubmitButton(); + } + }); +} + +/******************************************************************************* + * This code inserts the value lookedup by a popup window back into the + * associated form element + ******************************************************************************/ var re_id = new RegExp('id=(\\d+)'); -var num_id = (re_id.exec(String(window.location))? new Number(RegExp.$1): 0); -var obj_caller = (window.opener? window.opener.lookups[num_id]: null); +var num_id = (re_id.exec(String(window.location)) ? new Number(RegExp.$1) : 0); +var obj_caller = (window.opener ? window.opener.lookups[num_id] : null); if (obj_caller == null && window.opener != null) { - obj_caller = window.opener; + obj_caller = window.opener; } else if (obj_caller == null && window.opener == null) { - obj_caller = parent; + obj_caller = parent; } function setSourceColor(src) { - if (target && target != null) { - src.css("background-color", "yellow"); - } -} -// function passing selected value to calling window, using only in the TimeDuration case -function set_duration_value (value) { - if(GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP)){ - obj_caller.target = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).target; - } - else { - obj_caller.target = jQuery(obj_caller.targetW); - } - var target = obj_caller.target; + if (target && target != null) { + src.css("background-color", "yellow"); + } +} +// function passing selected value to calling window, using only in the +// TimeDuration case +function set_duration_value(value) { + if (GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP)) { + obj_caller.target = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).target; + } else { + obj_caller.target = jQuery(obj_caller.targetW); + } + var target = obj_caller.target; - write_value(value, target); - closeLookup(); + write_value(value, target); + closeLookup(); } // function passing selected value to calling window -function set_value (value) { - if(GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP)){ - obj_caller.target = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).target; - } - else { - obj_caller.target = jQuery(obj_caller.targetW); - } - - var target = obj_caller.target; - write_value(value, target); +function set_value(value) { + if (GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP)) { + obj_caller.target = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).target; + } else { + obj_caller.target = jQuery(obj_caller.targetW); + } + + var target = obj_caller.target; + write_value(value, target); - closeLookup(); + closeLookup(); } // function passing selected value to calling window -function set_values (value, value2) { - if(GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP)){ - obj_caller.target = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).target; - obj_caller.target2 = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).target2; - } - else { - obj_caller.target = jQuery(obj_caller.targetW); - } - var target = obj_caller.target; - var target2 = obj_caller.target2; - write_value(value, target); - write_value(value2, target2) - if (SHOW_DESCRIPTION) setLookDescription(target.attr("id"), value + " " + value2, "", "", SHOW_DESCRIPTION); - - closeLookup(); -} - -function write_value (value, target) { - if (target && target != null) { - setSourceColor(target); - target.val(value); - target.trigger("lookup:changed"); - } +function set_values(value, value2) { + if (GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP)) { + obj_caller.target = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).target; + obj_caller.target2 = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).target2; + } else { + obj_caller.target = jQuery(obj_caller.targetW); + } + var target = obj_caller.target; + var target2 = obj_caller.target2; + write_value(value, target); + write_value(value2, target2) + if (SHOW_DESCRIPTION) + setLookDescription(target.attr("id"), value + " " + value2, "", "", SHOW_DESCRIPTION); + + closeLookup(); +} + +function write_value(value, target) { + if (target && target != null) { + setSourceColor(target); + target.val(value); + target.trigger("lookup:changed"); + } } function set_multivalues(value) { - obj_caller.target.value = value; - field = jQuery("#" + target.attr('id')); // TODO: Not tested (should be ok)we need to fix 1st the window lookup (see OFBIZ-3933) - field.trigger("lookup:changed"); // If we decide to keep it (only used in Example, though it's needed also for Themes and Languages but not the same way) - if (field.change != null) { - field.click().change() - } - - var thisForm = obj_caller.target.form; - var evalString = ""; - - if (arguments.length > 2) { - for (var i = 1; i < arguments.length; i = i + 2) { - evalString = "setSourceColor(thisForm." + arguments[i] + ")"; - eval(evalString); - evalString = "thisForm." + arguments[i] + ".value='" + arguments[i + 1] + "'"; - eval(evalString); - } - } - closeLookup(); + obj_caller.target.value = value; + field = jQuery("#" + target.attr('id')); + field.trigger("lookup:changed"); + /* + * If we decide to keep it (only used in Example, though it's needed also + * for Themes and Languages but not the same way) + */ + if (field.change != null) { + field.click().change() + } + + var thisForm = obj_caller.target.form; + var evalString = ""; + + if (arguments.length > 2) { + for ( var i = 1; i < arguments.length; i = i + 2) { + evalString = "setSourceColor(thisForm." + arguments[i] + ")"; + eval(evalString); + evalString = "thisForm." + arguments[i] + ".value='" + arguments[i + 1] + "'"; + eval(evalString); + } + } + closeLookup(); } -//close the window after passing the value +// close the window after passing the value function closeLookup() { - if (window.opener != null && GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP) == null) { - window.close(); - } else { - obj = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).lookupId; - jQuery("#" + obj).dialog("close"); - } + if (window.opener != null && GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP) == null) { + window.close(); + } else { + obj = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).lookupId; + jQuery("#" + obj).dialog("close"); + } } -//load description for lookup fields +/******************************************************************************* + * Lookup Description Helper + ******************************************************************************/ +// load description for lookup fields var lookupDescriptionLoaded = function(fieldId, url, params, formName) { - this.init(fieldId, url, params, formName); + this.init(fieldId, url, params, formName); } -lookupDescriptionLoaded.prototype.init = function (fieldId, url, params, formName) { - this.fieldId = fieldId; - this.url = url; - this.params = params; - this.formName = formName; -} -lookupDescriptionLoaded.prototype.update = function (){ - var tooltipElement = jQuery("#" + this.fieldId + '_lookupDescription'); - if (tooltipElement.length) {//first remove current description - tooltipElement.remove(); - } - //actual server call - var fieldName = this.params.substring(this.params.indexOf("searchValueFieldName")); - fieldName = fieldName.substring(fieldName.indexOf("=") + 1); - if (jQuery("input[name=" + fieldName + "]").val()) { - var fieldSerialized = jQuery("input[name=" + fieldName + "]", jQuery("form[name=" + this.formName + "]")).serialize(); - this.allParams = this.params + '&' + fieldSerialized + '&' + 'searchType=EQUALS'; - _fieldId = this.fieldId; - - jQuery.ajax({ - url: this.url, - type: "POST", - data: this.allParams, - async: false, - success: function(result){ - // This would be far more reliable if we were removing the widget boundaries in LookupDecorator using widgetVerbose in context :/ - if (result.split("ajaxAutocompleteOptions.ftl -->")[1]) { - setLookDescription(_fieldId, result.split("ajaxAutocompleteOptions.ftl -->")[1].trim().split("<!--")[0].trim(), "", ""); - } - } - }); - } -} - -if(typeof String.prototype.trim !== 'function') { // Needed because IE8 does not implement trim yet - String.prototype.trim = function() { - return this.replace(/^\s+|\s+$/g, ''); - } +lookupDescriptionLoaded.prototype.init = function(fieldId, url, params, formName) { + this.fieldId = fieldId; + this.url = url; + this.params = params; + this.formName = formName; +} +lookupDescriptionLoaded.prototype.update = function() { + var tooltipElement = jQuery("#" + this.fieldId + '_lookupDescription'); + if (tooltipElement.length) {// first remove current description + tooltipElement.remove(); + } + // actual server call + var fieldName = this.params.substring(this.params.indexOf("searchValueFieldName")); + fieldName = fieldName.substring(fieldName.indexOf("=") + 1); + if (jQuery("input[name=" + fieldName + "]").val()) { + var fieldSerialized = jQuery("input[name=" + fieldName + "]", jQuery("form[name=" + this.formName + "]")).serialize(); + this.allParams = this.params + '&' + fieldSerialized + '&' + 'searchType=EQUALS'; + _fieldId = this.fieldId; + + jQuery + .ajax({ + url : this.url, + type : "POST", + data : this.allParams, + async : false, + success : function(result) { + // This would be far more reliable if we were removing + // the widget boundaries in LookupDecorator using + // widgetVerbose in context :/ + if (result.split("ajaxAutocompleteOptions.ftl -->")[1]) { + setLookDescription(_fieldId, result.split("ajaxAutocompleteOptions.ftl -->")[1].trim().split("<!--")[0].trim(), + "", ""); + } + } + }); + } +} + +// Needed because IE8 does not implement trim yet +if (typeof String.prototype.trim !== 'function') { + String.prototype.trim = function() { + return this.replace(/^\s+|\s+$/g, ''); + } } \ No newline at end of file Modified: ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl?rev=1352804&r1=1352803&r2=1352804&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl (original) +++ ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl Fri Jun 22 08:48:58 2012 @@ -652,23 +652,41 @@ Parameter: lastViewName, String, optiona </#if> </#if> </#if> - <script type="text/javascript"> + <script type="text/javascript"> jQuery(document).ready(function(){ - new ConstructLookup("${fieldFormName}", "${id}", document.${formName?html}.${name?html}, <#if descriptionFieldName?has_content>document.${formName?html}.${descriptionFieldName}<#else>null</#if>, "${formName?html}", "${width}", "${height}", "${position}", "${fadeBackground}", <#if ajaxEnabled?has_content && ajaxEnabled>"${ajaxUrl}", ${showDescription}<#else>"", false</#if>, "${presentation!}", "${defaultMinLength!2}", "${defaultDelay!300}"<#rt/> - <#if targetParameterIter?has_content> - <#assign isFirst = true> - <#lt/>, [<#rt/> - <#list targetParameterIter as item> - <#if isFirst> - <#lt/>document.${formName}.${item}<#rt/> - <#assign isFirst = false> - <#else> - <#lt/> ,document.${formName}.${item}<#rt/> - </#if> - </#list> - <#lt/>]<#rt/> - </#if> - <#lt/>); + var options = { + requestUrl : "${fieldFormName}", + inputFieldId : "${id}", + dialogTarget : document.${formName?html}.${name?html}, + dialogOptionalTarget : <#if descriptionFieldName?has_content>document.${formName?html}.${descriptionFieldName}<#else>null</#if>, + formName : "${formName?html}", + width : "${width}", + height : "${height}", + position : "${position}", + modal : "${fadeBackground}", + ajaxUrl : <#if ajaxEnabled?has_content && ajaxEnabled>"${ajaxUrl}"<#else>""</#if>, + showDescription : <#if ajaxEnabled?has_content && ajaxEnabled>"${showDescription}"<#else>false</#if>, + presentation : "${presentation!}", + defaultMinLength : "${defaultMinLength!2}", + defaultDelay : "${defaultDelay!300}", + args : <#rt/> + <#if targetParameterIter?has_content> + <#assign isFirst = true> + <#lt/>, [<#rt/> + <#list targetParameterIter as item> + <#if isFirst> + <#lt/>document.${formName}.${item}<#rt/> + <#assign isFirst = false> + <#else> + <#lt/> ,document.${formName}.${item}<#rt/> + </#if> + </#list> + <#lt/>]<#rt/> + <#else>[] + </#if> + <#lt/> + }; + new Lookup(options).init(); }); </script> </#if> |
| Free forum by Nabble | Edit this page |
