{"version":3,"sources":["webpack://jrs-ui/./src/actionModel/actionModel.json.property.js","webpack://jrs-ui/./src/actionModel/actionModel.modelGenerator.js","webpack://jrs-ui/./src/actionModel/actionModel.primaryNavigation.js","webpack://jrs-ui/./src/commons/commons.minimal.main.js","webpack://jrs-ui/./src/core/core.ajax.js","webpack://jrs-ui/./src/core/core.ajax.utils.js","webpack://jrs-ui/./src/core/core.buttonManager.js","webpack://jrs-ui/./src/core/core.events.bis.js","webpack://jrs-ui/./src/namespace/namespace.js"],"names":["JSON","actionModel","replaceNbsps","str","re","RegExp","replace","getMenuMouseupFunction","actionFunction","argsToInvokeWith","label","id","event","args","resolveReservedStringsInArray","funcString","belongsToLocalContext","func","toFunction","_","jQuery","originalEvent","push","undefined","apply","window","localContext","fireMenuActionWithEvent","getAsFunction","evaluateTest","thisFunctionName","functionArgs","testForNegative","defaultResult","result","theFunction","this","oldArray","ev","collect","thisString","RES_SELECTED","selObjects","RES_LABEL","RES_ID","EVENT","resolveReservedStrings","SIMPLE_ACTION","SELECT_ACTION","INPUT_ACTION","OPTION_ACTION","SEPARATOR","SINGLE_SELECT_CONSTRAINT","HIGH_Z_INDEX","lastItemWasSeparator","noItemsYet","data","openedSubMenus","parentMenu","menuDom","menuListDom","PARENT_MENU_CONTAINER","PARENT_MENU_STYLE","SIMPLE_ACTION_DOM_ID","SEPARATOR_DOM_ID","FLYOUT_PARENT_DOM_ID","EXTRA_INPUT_DOM_ID","LIST_ITEM_DOM_ID","DISPLAY_STYLE","DROP_DOWN_MENU_CLASS","MOUSE_OUT_PATTERNS","layoutModule","showDynamicMenu","menuContext","className","coordinates","actionModelScriptTag","updateContextActionModel","isProVersion","selectionObj","designerBase","getSelectedObject","menuLevel","resetMenu","updateCSSClass","initActionModelData","assembleMenuFromActionModel","setMenuPosition","setMenuEventHandlers","isIE","prepend","makeMenuVisible","adjustMenuPosition","type","join","on","closeHandler","target","relatedTarget","hasClass","parents","length","attr","trigger","hideMenu","_getNavType","indexOf","navtype","orientation","dom","parentId","childElements","each","child","Element","remove","html","clone","menuList","down","menuListId","readAttribute","writeAttribute","updateTemplateId","setAttribute","lastInputSrc","templateId","isNotNullORUndefined","menuObj","location","leftOffset","topOffset","isSupportsTouch","changedTouches","x","pageX","y","pageY","Event","pointer","menuLeft","menuTop","setStyle","menu","left","top","width","height","fitObjectIntoScreen","contentParent","contextActionModel","thisAction","appendToMenu","removeTrailingSeparator","scriptTag","actionModelJson","passesClientTest","mouseUpFunction","action","actionArgs","text","appendDesiredRowType","mouseUpFunctionWithMenuHiding","isMenuShowing","addSimpleActionRow","addSeparatorRows","addSelector","addOption","newMenuRow","ontouchend","onmouseup","onmouseup_saved","textPlacement","newText","document","createTextNode","nodeValue","appendChild","menuId","find","insertMenuRow","isDisabled","cssOverride","separator","separatorId","newOptionRow","button","String","toLowerCase","newOptionRowId","isSelectedTest","isSelectedTestArgs","addClass","parentSelector","children","parentSelectorId","getAttribute","submenu","submenuList","parentMenuItem","subMenuAriaLabel","trim","subMenuContainer","select","buildSubMenu","childAction","getSubMenuLeft","selectorObj","eq","clientWidth","Math","abs","parseInt","offsetLeft","getSubMenuTop","offsetTop","showChildSubmenu","parent","i","j","pid","parentNode","f","hideChildSubmenu","get","splice","submenuTop","submenuHeight","submenuWidth","display","position","leftValue","topValue","cumulativeOffset","getHeight","windowHeight","getWindowHeight","submenuBottom","submenuLeftOffset","getWidth","getWindowWidth","makeMenuInVisible","zIndex","removeClass","getStyle","updateRowDom","domObject","actionText","domObjectId","launchNewMenu","alert","container","isSeparator","userId","identify","disableMenuOption","menuOption","buttonManager","childNodes","clientTestFunction","clientTest","startsWith","sub","clientTestArgs","selected","selectionConstraint","lastRow","lastChild","lastRowId","test","getMenuParent","getFirstMenuButton","focusMenu","jQMenuDom","activeElement","lastFocused","showDropDownMenu","object","context","cssClass","aModel","offsets","offset","observe","firstCall","focus","setNextFocus","nextFocus","ex","setTimeout","empty","off","createMenuElement","options","Error","Object","extend","setSelected","primaryNavModule","NAVIGATION_MENU_CLASS","ACTION_MODEL_TAG","CONTEXT_POSTFIX","NAVIGATION_MUTTON_DOM_ID","NAVIGATION_MENU_PARENT_CLASS","navigationPaths","browse","url","params","home","library","logOut","search","favorites","report","jobs","olap","adminHome","generalSettings","organization","etl","mondrianProperties","flush","user","role","analysisOptions","designerOptions","designerCache","awsSettings","designer","dashboard","legacyDashboard","domain","dataSource","encodeURIComponent","logSettings","adminConsole","createReport","bodyIds","globalActions","bodyId","initializeNavigation","navKey","navId","navObject","exec","createMutton","leaf","domId","mutton","append","navigationMenuParent","showNavButtonMenu","elementId","isNavButton","setNewLocation","place","locObj","queryParams","destination","__jrsConfigs__","submitMe","getElementById","createElement","method","submit","href","e","navigationOption","option","body","execFunction","answer","executableFunction","onMenuHeaderMouseOver","heartbeat","jrsConfigs","aboutDialog","helpLink","$","preventDefault","webHelp","stdnav","stdnavPluginModalTrap","stdnavPluginAnchor","stdnavPluginButton","stdnavPluginForms","stdnavPluginGrid","stdnavPluginList","stdnavPluginActionMenu","stdnavPluginActionMenuTrap","stdnavPluginMainMenu","stdnavPluginDynamicList","stdnavPluginToolbar","stdnavTabList","stdnavPluginToolbarV2","stdnavPluginWorkflowCard","forEach","plugin","activate","ajax","AjaxRequester","postData","synchronous","toString","xmlhttp","getXMLHTTP","rsChangeFunction","processResponse","onreadystatechange","async","requestTime","Date","handleResponse","requester","checkForErrors","responseHandler","ajaxRequestEnded","JRS","targettedResponseHandler","fillId","fromId","callback","toLocation","updateUsingResponseSubset","res","responseText","opentTag","substring","lastIndexOf","closeTag","ajaxBuffer","xssUtil","invokeCallbacks","cumulativeResponseHandler","insert","rowCopyResponseHandler","tableId","theTable","tagName","tempDiv","Builder","copyTable","getElementsByTagName","cancelRequestsBefore","LOADING_ID","addVar","addMethod","open","setRequestHeader","send","prototype","DUMMY_POST_PARAM","readyState","setErrorHandler","errorHandler","getResponseHeader","confirmContinue","responseTimer","dialogs","MAX_WAIT_TIME","clearTimeout","confirm","serverIsNotResponding","clobberingResponseHandler","fire","evalJSONResponseHandler","jSONResponse","evalJSON","console","log","fromLocation","toLoc","response","whatWeWant","filter","copyTableJquery","scriptTags","sz","size","idx","iterate","scriptObj","scriptName","scriptUrl","gotCallback","callbackFn","scriptElement","jr_scripts","onload","src","scriptString","lines","match","eval","executeScript","customArg","ajaxClobberredUpdate","ajaxUpdate","ajaxTargettedUpdate","mode","CUMULATIVE_UPDATE","ROW_COPY_UPDATE","EVAL_JSON","preFillAction","ajaxNonReturningUpdate","ajaxClobberedFormSubmit","form","getPostData","extraPostData","appendPostData","ajaxTargettedFormSubmit","ajaxErrorHandler","showMessageDialog","ajaxError","ajaxErrorHeader","doNothing","fillLocation","isAutomaticRefresh","isIPad","busyCursor","silent","showLoading","hideLoader","ajaxRequestStarted","doPost","doGet","requesterErrorHandler","forms","elements","element","name","appendFormInput","appendFormValue","value","checked","shift","ERROR_POPUP_DIV","ERROR_POPUP_CONTENTS","ERROR_POPUP_BACK_BUTTON","ERROR_POPUP_CLOSE_BUTTON","hideErrorPopup","popOverlayObject","style","ajaxRequestCount","cursor","startResponseTimer","cancelResponseTimer","isValidJsonResponse","ajaxAgent","responseType","status","XMLHttpRequest","showErrorPopup","errorMessage","baseErrorHandler","show","over","findTargetFn","isSelected","out","up","disable","enable","unSelect","tagetListItem","evt","memo","targetEvent","treeEvent","listEvent","li","matchMeOrUp","listItemElement","isRightClick","node","stop","MainMenuTopLevelItemToActionMap","isGlobalEventsAllowed","el","hasDisabledAttributeSet","isStartEvent","currentTarget","siblings","index","$anchor","closest","tooltipModule","clientX","clientY","getBoundingClientRect","right","addEventListener","calendar","hide","hidden","TouchController","toggleClass","vars","element_scrolled","ajax_in_progress","current_flow","contextPath","i18n","isEncryptionOn","Mocks","Export","configs","TIMEOUT","DELAY","bundledCalendarFormat","bundledCalendarTimeFormat","jaspersoft","components"],"mappings":"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","file":"_chunks/chunk.5912.js","sourcesContent":["/*\n * Copyright (C) 2005 - 2022 TIBCO Software Inc. All rights reserved.\n * http://www.jaspersoft.com.\n *\n * Unless you have purchased a commercial license agreement from Jaspersoft,\n * the following license terms apply:\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n */\n\nvar actionModelJson = {\n JSON: null\n};\n\nexport default actionModelJson;","/*\n * Copyright (C) 2005 - 2022 TIBCO Software Inc. All rights reserved.\n * http://www.jaspersoft.com.\n *\n * Unless you have purchased a commercial license agreement from Jaspersoft,\n * the following license terms apply:\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n */\n/**\n * @author Angus Croll, Papanii Okai\n * @version: $Id$\n */\n/* global alert*/\n\nimport _ from 'underscore';\nimport {\n isIE,\n isNotNullORUndefined,\n isSupportsTouch,\n fitObjectIntoScreen,\n getAsFunction,\n getWindowHeight,\n getWindowWidth,\n toFunction\n} from '../util/utils.common';\nimport buttonManager from '../core/core.buttonManager';\nimport actionModelJson from './actionModel.json.property'\nimport layoutModule from '../core/core.layout';\nimport {isProVersion} from \"../namespace/namespace\";\nimport jQuery from 'jquery';\n\nvar actionModel = {}; //action constants\n//action constants\nactionModel.SIMPLE_ACTION = 'simpleAction';\nactionModel.SELECT_ACTION = 'selectAction';\nactionModel.INPUT_ACTION = 'inputAction';\nactionModel.OPTION_ACTION = 'optionAction';\nactionModel.SEPARATOR = 'separator';\nactionModel.SINGLE_SELECT_CONSTRAINT = 'singleSelect';\nactionModel.HIGH_Z_INDEX = 99999;\n//reserved variables\nactionModel.RES_LABEL = '$label';\nactionModel.RES_ID = '$id';\nactionModel.RES_SELECTED = '$selected';\nactionModel.EVENT = '$event';\nactionModel.selObjects = [];\nactionModel.lastItemWasSeparator = false;\nactionModel.noItemsYet = true;\nactionModel.data = null;\nactionModel.openedSubMenus = [];\nactionModel.parentMenu = '';\nactionModel.menuDom = null;\nactionModel.menuListDom = null;\nactionModel.PARENT_MENU_CONTAINER = 'menuList';\nactionModel.PARENT_MENU_STYLE = 'menu vertical context hidden';\nactionModel.SIMPLE_ACTION_DOM_ID = 'menuList_simpleAction';\nactionModel.SEPARATOR_DOM_ID = 'menuList_separator';\nactionModel.FLYOUT_PARENT_DOM_ID = 'menuList_flyout';\nactionModel.EXTRA_INPUT_DOM_ID = 'menuList_extraInput';\nactionModel.LIST_ITEM_DOM_ID = 'menuList_listItem';\nactionModel.DISPLAY_STYLE = 'inline';\nactionModel.DROP_DOWN_MENU_CLASS = 'dropDown';\nactionModel.MOUSE_OUT_PATTERNS = [\n '#' + layoutModule.MENU_ID,\n '.' + layoutModule.MENU_ROOT_CLASS,\n '.toolbar .capsule',\n '.header > .button.mutton',\n '#' + layoutModule.MENU_ID + ' *',\n layoutModule.MENU_ROOT_CLASS + ' *'\n];\n////////////////////////////////////////////////////////////////////\n// Menu building\n////////////////////////////////////////////////////////////////////\n/*\n * Used to present the context menu to the user.\n * @param menuContext\n * @param event the event tied to the menu.\n * @param className class name a caller may wish to use instead of the default.\n * @param coordinates used for menu positioning.\n * @actionModelScriptTag\n * @updateContextActionModel - optional method which can update context action model\n */\nactionModel.showDynamicMenu = function (menuContext, event, className, coordinates, actionModelScriptTag, updateContextActionModel, label) {\n if (menuContext == null) {\n if (isProVersion()) {\n var selectionObj = window.designerBase.getSelectedObject();\n if (selectionObj && selectionObj.menuLevel) {\n menuContext = selectionObj.menuLevel;\n } else {\n return; //no context - nothing to show\n }\n } else {\n return;\n }\n }\n\n actionModel.resetMenu(menuContext, label);\n actionModel.updateCSSClass(className);\n actionModel.initActionModelData(actionModelScriptTag);\n actionModel.assembleMenuFromActionModel(menuContext, event, actionModel.menuListDom, updateContextActionModel);\n actionModel.setMenuPosition(actionModel.menuDom, event, coordinates);\n actionModel.setMenuEventHandlers(actionModel.menuDom, menuContext);\n if (isIE()) {\n jQuery('#' + actionModel.menuDom.id).prepend('
');\n }\n actionModel.makeMenuVisible(actionModel.menuDom);\n actionModel.adjustMenuPosition(actionModel.menuDom,menuContext);\n //actionModel.focusMenu();\n if(event && event.type !== 'click' && menuContext !==\"folder_mutton\") { // avoid attaching the mouseout close handler if menu is opened by mouse click\n jQuery(actionModel.MOUSE_OUT_PATTERNS.join(',')).on('mouseout', actionModel.closeHandler);\n }\n};\nactionModel.closeHandler = function (event) {\n var target = jQuery(event.relatedTarget);\n if (!((jQuery(target).hasClass('mutton') || target.parents('.mutton').length) && event.relatedTarget || (target.attr('id') === 'menu' || target.parents('#menu').length))) {\n jQuery('body').trigger('actionmodel-mouseout');\n actionModel.hideMenu();\n }\n};\n\nactionModel._getNavType = function (menuContext) {\n if (menuContext.indexOf('toolbar') > -1) {\n return {navtype: 'toolbar', orientation: 'horizontal'}\n } else if (menuContext.indexOf('main_') === 0) {\n return {navtype: 'mainmenu', orientation: 'vertical'}\n } else {\n return {navtype: 'actionmenu', orientation: 'vertical'}\n }\n}\n\n/*\n * Hide any menus created by the action model.\n * This means removing all child nodes and setting it back to default state.\n */\nactionModel.resetMenu = function (menuContext, label) {\n var {navtype, orientation} = actionModel._getNavType(menuContext);\n var dom = jQuery('#menu')[0];\n dom.parentId = undefined;\n dom.childElements().each(function (child) {\n Element.remove(child);\n });\n //add common template\n jQuery(dom).html(jQuery(jQuery('#commonMenu').clone(true)).html());\n var menuList = dom.down('ul');\n var menuListId = menuList.readAttribute('id');\n menuList.writeAttribute('id', actionModel.updateTemplateId(menuListId));\n menuList.writeAttribute(\"js-navtype\", navtype);\n menuList.writeAttribute(\"aria-orientation\", orientation);\n label && menuList.setAttribute('aria-label', label);\n menuList.setAttribute('tabindex', \"-1\");\n //remove any generated styles.\n dom.className = actionModel.PARENT_MENU_STYLE;\n dom.writeAttribute('style', '');\n actionModel.menuDom = dom;\n actionModel.menuListDom = menuList;\n // One of: [\"none\",\"keyboard\",\"mouse\",\"touch\",\"automation\"].\n actionModel.lastInputSrc = 'none';\n};\n/**\n * Used to update a template's id\n */\nactionModel.updateTemplateId = function (templateId) {\n var re = new RegExp('_template');\n return templateId.replace(re, '');\n};\n/*\n * Method used to update the menu's css className\n * @param className\n */\nactionModel.updateCSSClass = function (className) {\n if (isNotNullORUndefined(className)) {\n jQuery(actionModel.menuDom)[0].className = className + ' hidden';\n }\n};\n/*\n * Determine position of menu based on mouse position..\n * @param event\n */\nactionModel.setMenuPosition = function (menuObj, event, coordinates) {\n var ev = event ? event : window.event, location;\n if (ev) {\n if (isSupportsTouch() && ev.changedTouches) {\n // Touch-initiated.\n location = {\n x: ev.changedTouches[0].pageX + 20,\n y: ev.changedTouches[0].pageY\n };\n } else {\n // Mouse-initiated.\n location = Event.pointer(ev);\n }\n } else {\n // Keyboard-initiated.\n location = {\n x: 0,\n y: 0\n };\n }\n var leftOffset;\n var topOffset;\n //if coordinates are provided, override.\n if (isNotNullORUndefined(coordinates)) {\n if (isNotNullORUndefined(coordinates.menuLeft)) {\n leftOffset = coordinates.menuLeft;\n } else {\n leftOffset = location.x;\n }\n if (isNotNullORUndefined(coordinates.menuTop)) {\n topOffset = coordinates.menuTop;\n } else {\n topOffset = location.y;\n }\n } else {\n leftOffset = location.x;\n topOffset = location.y;\n }\n //set top left to the mouse click\n menuObj.setStyle({\n 'left': leftOffset + 'px',\n 'top': topOffset + 'px'\n });\n};\nactionModel.adjustMenuPosition = function (menu, left, top, width, height) {\n if (!jQuery(menu).hasClass(this.DROP_DOWN_MENU_CLASS) || jQuery(menu).hasClass('fitable')) {\n fitObjectIntoScreen(menu, null, top, null, height);\n }\n};\n/*\n * construct the menu dynamically based on the client side action model\n * @param menuContext\n * @param event\n * @updateContextActionModel - optional method which can update context action model\n */\nactionModel.assembleMenuFromActionModel = function (menuContext, event, contentParent, updateContextActionModel) {\n actionModel.noItemsYet = true;\n var contextActionModel = actionModel.data && actionModel.data[menuContext];\n //In this place we can update action model for specified context on the fly.\n //This is necessary to have ability to construct fully dynamic menus which items can be calculated only\n //right before showing menu\n if (updateContextActionModel) {\n contextActionModel = updateContextActionModel(menuContext, contextActionModel);\n }\n contextActionModel && contextActionModel.each(function (thisAction) {\n actionModel.appendToMenu(thisAction, event, contentParent);\n });\n actionModel.removeTrailingSeparator();\n};\n/*\n * Initialize Action Model data with the JSON evaluated from the given element or directly from object.\n *\n * @param scriptTag Script holder identifier or simple object representing data.\n */\nactionModel.initActionModelData = function (scriptTag) {\n if (scriptTag === 'navigationActionModel') {\n actionModel.data = actionModelJson.JSON;\n } else {\n actionModel.data = _.isString(scriptTag) ? jQuery.parseJSON(jQuery('#' + scriptTag).html()) : scriptTag;\n }\n};\n/*\n * Helper method used in the construction of the menu\n * @param thisAction\n * @param event\n */\nactionModel.appendToMenu = function (thisAction, event, contentParent) {\n if (!actionModel.passesClientTest(thisAction)) {\n return; //does not satisfy client-side condition to appear in this menu\n }\n var mouseUpFunction = getMenuMouseupFunction(getAsFunction(thisAction.action), thisAction.actionArgs, thisAction.text, thisAction.id, event);\n actionModel.appendDesiredRowType(thisAction, event, mouseUpFunction, contentParent);\n};\n/*\n * Append desired row type to menu\n * @param thisAction\n * @param mouseUpFunction\n * @param contentParent\n * @param event\n */\nactionModel.appendDesiredRowType = function (thisAction, event, mouseUpFunction, contentParent) {\n var mouseUpFunctionWithMenuHiding = function () {\n if (actionModel.isMenuShowing()) {\n actionModel.hideMenu();\n }\n mouseUpFunction && mouseUpFunction();\n };\n //add new
  • element\n if (thisAction.type === actionModel.SIMPLE_ACTION) {\n actionModel.addSimpleActionRow(thisAction, mouseUpFunctionWithMenuHiding, contentParent);\n }\n //add new
  • separator\n if (thisAction.type === actionModel.SEPARATOR && !actionModel.lastItemWasSeparator) {\n actionModel.addSeparatorRows(thisAction, contentParent);\n }\n //add new
  • flyout or new window?\n if (thisAction.type === actionModel.SELECT_ACTION) {\n actionModel.addSelector(thisAction, contentParent, event);\n }\n //add new
  • option\n if (thisAction.type === actionModel.OPTION_ACTION) {\n actionModel.addOption(thisAction, mouseUpFunctionWithMenuHiding, contentParent);\n }\n};\n/*\n * Add a simple action row to the menu\n * @param thisAction\n * @param mouseUpFunction\n * @param contentParent\n */\nactionModel.addSimpleActionRow = function (thisAction, mouseUpFunction, contentParent) {\n var newMenuRow = null;\n if (thisAction.className && thisAction.className == 'requiresInput') {\n newMenuRow = jQuery('#' + actionModel.EXTRA_INPUT_DOM_ID)[0].clone(true);\n } else {\n newMenuRow = jQuery('#' + actionModel.SIMPLE_ACTION_DOM_ID)[0].clone(true);\n }\n if (isSupportsTouch()) {\n newMenuRow.ontouchend = mouseUpFunction;\n } else {\n newMenuRow.onmouseup = mouseUpFunction;\n }\n newMenuRow.onmouseup_saved = mouseUpFunction;\n var textPlacement = jQuery(newMenuRow)[0].down('.button');\n var newText = document.createTextNode(thisAction.text);\n newText.nodeValue = replaceNbsps(newText.nodeValue);\n textPlacement.appendChild(newText); //set new id to make it unique.\n //set new id to make it unique.\n var menuId = _.uniqueId(newMenuRow.readAttribute('id'));\n newMenuRow.writeAttribute('id', menuId);\n jQuery(newMenuRow).find('> p').attr('id', menuId + '_label')\n actionModel.insertMenuRow(contentParent, newMenuRow, false, thisAction.isDisabled, thisAction.id, null);\n};\n/*\n * Add a separator row to the menu\n * @param thisAction\n * @param contentParent\n */\nactionModel.addSeparatorRows = function (thisAction, contentParent) {\n var cssOverride = null;\n if (actionModel.noItemsYet) {\n return; //don't need separator at very top;\n }\n var separator = jQuery('#' + actionModel.SEPARATOR_DOM_ID)[0].clone(true);\n var separatorId = _.uniqueId(separator.readAttribute('id'));\n separator.writeAttribute('id', separatorId);\n if (thisAction.className) {\n cssOverride = thisAction.className;\n }\n actionModel.insertMenuRow(contentParent, separator, true, thisAction.isDisabled, null, cssOverride);\n};\n/*\n * Used to add a option\n * @param thisAction\n * @param mouseUpFunction\n * @param contentParent\n */\nactionModel.addOption = function (thisAction, mouseUpFunction, contentParent) {\n if (!actionModel.passesClientTest(thisAction)) {\n return; //does not satisfy client-side condition to appear in this menu\n }\n var cssOverride = null;\n var newOptionRow = jQuery('#' + actionModel.LIST_ITEM_DOM_ID)[0].clone(true);\n thisAction.button = thisAction.button && String(thisAction.button).toLowerCase() == 'true' ? true : false;\n if (isSupportsTouch()) {\n newOptionRow.ontouchend = mouseUpFunction;\n } else {\n newOptionRow.onmouseup = mouseUpFunction;\n }\n newOptionRow.onmouseup_saved = mouseUpFunction;\n var textPlacement = jQuery(newOptionRow)[0].down('.button');\n var newText = document.createTextNode(thisAction.text);\n newText.nodeValue = replaceNbsps(newText.nodeValue);\n textPlacement.appendChild(newText);\n var newOptionRowId = _.uniqueId(newOptionRow.readAttribute('id'));\n newOptionRow.writeAttribute('id', newOptionRowId); //update dom id\n jQuery(newOptionRow).find('> p').attr('id', newOptionRowId + '_label')\n if (thisAction.className) {\n cssOverride = thisAction.className;\n }\n if (!thisAction.button && evaluateTest(thisAction.isSelectedTest, thisAction.isSelectedTestArgs, thisAction.text, thisAction.id, false, false)) {\n jQuery(textPlacement).addClass('down');\n }\n actionModel.insertMenuRow(contentParent, newOptionRow, false, thisAction.isDisabled, thisAction.id, cssOverride);\n};\n/*\n * Creates selector row and all sub menus related to that row\n * @param thisAction\n * @param contentParent\n * @param event\n */\nactionModel.addSelector = function (thisAction, contentParent, event) {\n //since in the action model we specify the type of menu using the class nomenclature, we can check what\n //type of selector we want by simply checking the class in the action object\n var parentSelector;\n var className = thisAction.className;\n if (className === 'flyout') {\n //do not render flyout list item if no submenu items exist\n if (thisAction && thisAction.children.length > 0) {\n parentSelector = jQuery('#' + actionModel.FLYOUT_PARENT_DOM_ID).clone(true);\n var textPlacement = parentSelector[0].down('.button');\n var newText = document.createTextNode(thisAction.text);\n newText.nodeValue = replaceNbsps(newText.nodeValue);\n textPlacement.appendChild(newText);\n var parentSelectorId = _.uniqueId(parentSelector.attr('id'));\n parentSelector.attr('id', parentSelectorId);\n parentSelector.attr('js-navtype', contentParent.getAttribute('js-navtype'));\n parentSelector.find('> p').attr('id', parentSelectorId + '_label');\n actionModel.insertMenuRow(contentParent, parentSelector[0], false, thisAction.isDisabled, thisAction.id, null);\n //now create submenu\n var submenu = actionModel.menuDom.clone(false);\n submenu.writeAttribute('id', parentSelector.attr('id') + '_subMenuWrapper');\n submenu.setAttribute('js-navtype', contentParent.getAttribute('js-navtype'));\n //add common template\n jQuery(submenu).html(jQuery(jQuery('#commonMenu')[0].clone(true)).html());\n var submenuList = submenu.down('ul');\n const parentMenuItem = parentSelector.find('[role=menuitem]');\n const subMenuAriaLabel = parentMenuItem.attr('aria-label') ?? parentMenuItem.text().trim();\n submenuList.writeAttribute('id', parentSelectorId + \"_subMenu\");\n submenuList.setAttribute('js-navtype', contentParent.getAttribute('js-navtype'));\n submenuList.setAttribute('aria-orientation', 'vertical');\n submenuList.setAttribute('aria-label', subMenuAriaLabel);\n parentSelector[0].appendChild(submenu);\n var subMenuContainer = submenu.select('ul')[0];\n actionModel.buildSubMenu(thisAction, subMenuContainer, event);\n }\n } else {\n thisAction.children.each(function (childAction) {\n var mouseUpFunction = getMenuMouseupFunction(getAsFunction(childAction.action), childAction.actionArgs, childAction.text, childAction.id, event);\n actionModel.appendDesiredRowType(childAction, event, mouseUpFunction, contentParent);\n });\n }\n};\n/*\n * This method gets the left value for a submenu. It calculates if by getting the with of the parents content and adds\n * the parents left value to it since all menu objects are absolute.\n * @param selectorObj\n */\nactionModel.getSubMenuLeft = function (selectorObj) {\n //
    \n var width = jQuery(selectorObj).parents().eq(2)[0].clientWidth; //width of parent window\n //width of parent window\n var leftOffSet = Math.abs(parseInt(jQuery(selectorObj).parents().eq(1)[0].offsetLeft)); //offset\n //offset\n return width + leftOffSet;\n};\nactionModel.getSubMenuTop = function (selectorObj) {\n return Math.abs(parseInt(jQuery('#' + selectorObj)[0].offsetTop)); //offset\n};\n/*\n * Used to position the submenu with respect to its parent.\n * @param parent\n */\nactionModel.showChildSubmenu = function (parent) {\n var pid = parent.parentNode.parentNode.parentNode.id;\n /*\n * Hides submenus previously open\n */\n var i;\n var j;\n var f = false;\n for (i = 0; i < actionModel.openedSubMenus.length; i++) {\n if (actionModel.openedSubMenus[i] == pid) {\n j = i;\n f = true;\n jQuery('#' + pid + '>div.content>ul').children('li.node').each(function () {\n actionModel.hideChildSubmenu(jQuery(this).get(0));\n });\n }\n if (f) {\n jQuery('#' + actionModel.openedSubMenus[i] + '>div.content>ul').children('li.node').each(function () {\n actionModel.hideChildSubmenu(jQuery(this).get(0));\n });\n }\n }\n actionModel.openedSubMenus.splice(j, actionModel.openedSubMenus.length - j);\n var submenuTop = null;\n var submenuHeight = null;\n var submenuWidth = null;\n var bottomPadding = 20;\n //hack to prevent bug20863\n var submenu = parent.childElements()[1];\n //applying style for flyout submenu....\n if(submenu) {\n submenu.setStyle({display: actionModel.DISPLAY_STYLE});\n submenu.setStyle({position: 'absolute'});\n var leftValue = actionModel.getSubMenuLeft(parent);\n var topValue = 0;\n // var topValue = actionModel.getSubMenuTop(parent) + \"px\";\n //set top left to the mouse click\n submenu.setStyle({\n 'left': leftValue + 'px',\n 'top': topValue + 'px'\n });\n if (isIE()) {\n jQuery(submenu).prepend('
    ');\n }\n actionModel.makeMenuVisible(submenu);\n submenuTop = jQuery(submenu)[0].cumulativeOffset()[1];\n submenuHeight = jQuery(submenu)[0].getHeight();\n //hack to prevent bug20863 (Due to Tim's markup change)\n var windowHeight = getWindowHeight();\n var submenuBottom = submenuTop + submenuHeight;\n if (windowHeight < submenuBottom) {\n topValue = windowHeight - submenuBottom - bottomPadding;\n submenu.setStyle({'top': topValue + 'px'});\n }\n var submenuLeftOffset = submenu.cumulativeOffset()[0];\n submenuWidth = submenu.getWidth();\n if (getWindowWidth() < submenuLeftOffset + submenuWidth) {\n submenu.setStyle({'left': '-' + submenuWidth + 'px'});\n }\n actionModel.openedSubMenus.push(pid);\n }\n};\n/*\n * Used to hide submenu\n * @param parent\n */\nactionModel.hideChildSubmenu = function (parent) {\n var submenu = parent.childElements()[1];\n submenu.setStyle({ display: 'none' });\n submenu.setStyle({ position: 'absolute' });\n submenu.setStyle({ left: 0 });\n actionModel.makeMenuInVisible(jQuery(submenu)[0]);\n};\n/*\n * Used to change the css display value to make it visible.\n * @param menu object we changing the display style for.\n */\nactionModel.makeMenuVisible = function (menu) {\n //test to see if we have any items to show\n var list = menu.down('ul');\n if (list.childElements().length > 0) {\n menu.setStyle({ zIndex: actionModel.HIGH_Z_INDEX });\n jQuery(menu).removeClass('hidden');\n }\n};\n/*\n * Used to change the css display value to make it invisible\n * @param menu object we changing the display style for.\n */\nactionModel.makeMenuInVisible = function (menu) {\n jQuery(menu).addClass('hidden');\n};\n/*\n * Used to build a the logical structure for a flyout menu\n * @param thisAction\n * @param parentId\n * @param event\n */\nactionModel.buildSubMenu = function (thisAction, parentId, event) {\n thisAction.children.each(function (childAction) {\n actionModel.appendToMenu(childAction, event, jQuery(parentId)[0]);\n });\n};\nactionModel.isMenuShowing = function (menu) {\n return !(jQuery(menu ?? '#menu')[0].getStyle('display') == 'none' || jQuery(menu ?? '#menu').hasClass('hidden'));\n};\n/*\n * Helper method to update row object\n * @param domObject\n * @param actionText\n */\nactionModel.updateRowDom = function (domObject, actionText) {\n if (domObject) {\n jQuery(domObject).html(actionText);\n var domObjectId = _.uniqueId(domObject.readAttribute('id'));\n domObject.writeAttribute('id', domObjectId);\n }\n return domObject;\n}; /**\n * Used to launch new menu (E.g. Calculated fields.)\n */\n/**\n * Used to launch new menu (E.g. Calculated fields.)\n */\nactionModel.launchNewMenu = function () {\n actionModel.hideMenu();\n alert('action not implemented...');\n};\n/*\n * Helper to insert row in to menu\n * @param container\n * @param newMenuRow\n * @param isSeparator\n * @param isDisabled\n * @param userId\n */\nactionModel.insertMenuRow = function (container, newMenuRow, isSeparator, isDisabled, userId, className) {\n //check to see if item has a id, if not set one..\n if (newMenuRow.readAttribute('id') == null) {\n if (userId) {\n newMenuRow.setAttribute('id', userId);\n } else {\n newMenuRow.identify(); //sets unique id\n }\n }\n if (isDisabled) {\n actionModel.disableMenuOption(newMenuRow);\n }\n if (className) {\n jQuery(newMenuRow).addClass(className);\n }\n\n newMenuRow.setAttribute('js-navtype',container.getAttribute('js-navtype'));\n\n container.appendChild(newMenuRow);\n actionModel.lastItemWasSeparator = isSeparator;\n actionModel.noItemsYet = false;\n};\nactionModel.disableMenuOption = function (menuOption) {\n buttonManager.disable(menuOption);\n _.isEmpty(menuOption.childNodes) && buttonManager.disable(menuOption.childNodes[0]);\n};\n/*\n * Checking success of test.\n * @param action\n */\nactionModel.passesClientTest = function (action) {\n var clientTestFunction;\n var result = true;\n //default to true because if there are no tests, we passed by default!\n //passes explicit test?\n if (action.clientTest) {\n clientTestFunction = action.clientTest;\n var testForNegative = false;\n if (clientTestFunction.startsWith('!')) {\n //negative test\n clientTestFunction = action.clientTest.sub('!', '');\n testForNegative = true;\n }\n result = evaluateTest(clientTestFunction, action.clientTestArgs, action.text, action.id, testForNegative, null);\n }\n //number of selections ok?\n var selected = actionModel.selObjects;\n if (!_.isEmpty(selected)) {\n if (result && action.selectionConstraint) {\n result = action.selectionConstraint == actionModel.SINGLE_SELECT_CONSTRAINT ? selected.length == 1 : selected.length > 1;\n }\n }\n return result;\n};\n/***\n * If last row is a separator, remove it\n */\nactionModel.removeTrailingSeparator = function () {\n var lastRow = actionModel.menuListDom.lastChild;\n if (jQuery(lastRow)[0] && !actionModel.noItemsYet) {\n var lastRowId = lastRow.identify();\n var reg = new RegExp(\"\\w*separator\\w*\");\n if (reg.test(lastRowId)) {\n lastRow.remove();\n }\n }\n};\n/**\n * Only applies to certain menus (e.g. naviagtion menu has a parent mutton)\n */\nactionModel.getMenuParent = function () {\n return jQuery('#' + actionModel.menuDom.parentId)[0];\n};\nactionModel.getFirstMenuButton = function () {\n return actionModel.menuDom.down(layoutModule.BUTTON_PATTERN, 0);\n};\n/* Move focus into the menu, starting with the top item in the list. This\n * function runs when a user presses the down arrow key from a top-level main\n * menu entry.\n */\nactionModel.focusMenu = function () {\n var jQMenuDom = jQuery('#' + actionModel.menuDom.id); // If the menu already has focus, do nothing.\n // If the menu already has focus, do nothing.\n if (!jQuery.contains(jQMenuDom, document.activeElement)) {\n //will restore old focus when menu is closed\n actionModel.lastFocused = document.activeElement;\n jQMenuDom.find('ul').trigger('focus');\n }\n};\n/*\n * Used to display fine positioned menu relative to the object\n *\n * @param event Initial event\n * @param object Element that cause element to appear\n * @param context actionModel context in which we show this menu. Used to find proper metadata\n * @param cssClass Menu css class\n * @param aModel action model\n */\nactionModel.showDropDownMenu = function (event, object, context, cssClass, aModel, label) {\n object = jQuery(object);\n var offsets = object.offset(), coordinates = {\n 'menuLeft': offsets.left,\n 'menuTop': offsets.top + object.height() - 1\n };\n actionModel.showDynamicMenu(context, event, cssClass, coordinates, aModel, undefined, label);\n};\n////////////////////////////////////////////////////////////\n// General section for menu events\n////////////////////////////////////////////////////////////\n/**\n * Register event handlers to menu objects\n */\nactionModel.setMenuEventHandlers = function (menu , menuContext) {\n menu.select('li').each(function (object) {\n /*\n * Special mouse-enter and mouse-leave events for fly-outs\n */\n if (!jQuery(object).hasClass('disabled')) {\n if (jQuery(object).hasClass('node')) {\n if (isSupportsTouch()) {\n Event.observe(object, 'touchstart', function (event) {\n if (!event.firstCall) {\n actionModel.showChildSubmenu(object);\n }\n event.firstCall = true;\n }); /*\n Event.observe(object, 'touchend', function(event) {\n var child = object.down();\n buttonManager.up(child);\n buttonManager.out(child);\n event.stopPropagation();\n });\n */\n } else {\n Event.observe(object, 'mouseenter', function (event) {\n actionModel.showChildSubmenu(object);\n });\n if(menuContext!==\"folder_mutton\") {\n Event.observe(object, 'mouseleave', function (event) {\n actionModel.hideChildSubmenu(object);\n });\n }\n }\n }\n else {\n if(menuContext===\"folder_mutton\") {\n Event.observe(object, 'mouseover', function (event) {\n actionModel.showChildSubmenu(object);\n });\n }\n }\n\n }\n });\n};\n\n/**\n * Public method used to hide a menu.\n */\nactionModel.hideMenu = function (focus = true) {\n if (actionModel.isMenuShowing()) {\n var setNextFocus = function () {\n var nextFocus = actionModel.lastFocused;\n actionModel.lastFocused = undefined;\n try {\n focus && nextFocus && nextFocus.focus();\n } catch (ex) {\n } //IE gets bothered if you try to focus something that it can't\n };\n !isSupportsTouch() && setTimeout(setNextFocus, 0);\n //timeout so that any current key action misses this focus\n jQuery('#menu').empty();\n actionModel.makeMenuInVisible(jQuery('#menu')[0]);\n jQuery(actionModel.MOUSE_OUT_PATTERNS.join(',')).off('mouseout', actionModel.closeHandler);\n }\n};\n/*\n * Utility method which helps to create menu element\n * @param type type of menu element, one of [\"simpleAction\", \"selectAction\", \"optionAction\"]\n * this is the only mandatory parameter to create manu item.\n * @param options - object with optional arguments.\n * Possible object structure is:\n * {\n * text: test,\n * clientTest: clientTest,\n * clientTestArgs: clientTestArgs,\n * action: action,\n * actionArgs: actionArgs,\n * children: children,\n * isSelectedTest: isSelectedTest,\n * isSelectedTestArgs: isSelectedTestArgs,\n * selectionConstraint: selectionConstraint,\n * className: className\n * }\n */\nactionModel.createMenuElement = function (type, options) {\n if (!type) {\n throw new Error('Can not construct actionModel object: type can not be empty');\n }\n return Object.extend({ type: type }, options);\n};\nactionModel.setSelected = function (selected) {\n actionModel.selObjects = selected;\n};\n////////////////////////////////////////////////////////////\n// function utils\n////////////////////////////////////////////////////////////\nfunction replaceNbsps(str) {\n var re = new RegExp(' ', 'g');\n return str.replace(re, ' ');\n}\nfunction fireMenuAction(funcString, event) {\n var func = getAsFunction(funcString);\n if (!func) {\n return;\n }\n func();\n}\nfunction fireMenuActionWithEvent(args, funcString, event) {\n var func = toFunction(funcString), belongsToLocalContext;\n func = func || (belongsToLocalContext = toFunction('localContext.' + funcString));\n if (!func) {\n return;\n }\n args = _.isArray(args) ? args : [args];\n if (!_.isUndefined(event)) {\n if (event instanceof jQuery.Event && event.originalEvent) {\n event = event.originalEvent;\n }\n // HACK: undefined argument necessary to not replace arguments in later calls where params are expected\n // this is used for repository.search.components create dialog to store the focusable element\n args.push(undefined, event);\n }\n func.apply(belongsToLocalContext ? window.localContext : null, args);\n}\nfunction getMenuMouseupFunction(actionFunction, argsToInvokeWith, label, id, event) {\n if (!actionFunction) {\n return null;\n }\n if (!argsToInvokeWith) {\n return function () {\n fireMenuAction(actionFunction, event);\n };\n } else {\n var args = resolveReservedStringsInArray(argsToInvokeWith, label, id, event);\n return function () {\n fireMenuActionWithEvent(args, actionFunction, event);\n };\n }\n}\nfunction evaluateTest(thisFunctionName, functionArgs, label, id, testForNegative, defaultResult) {\n var result = defaultResult != null ? defaultResult : true; //if no default assume true;\n //if no default assume true;\n var theFunction = getAsFunction(thisFunctionName);\n if (theFunction) {\n result = theFunction.apply(this, resolveReservedStringsInArray(functionArgs, label, id, null));\n if (testForNegative) {\n result = !result;\n }\n }\n return result;\n}\nfunction resolveReservedStringsInArray(oldArray, label, id, ev) {\n if (!oldArray) {\n return [];\n }\n return oldArray.collect(function (thisString) {\n return resolveReservedStrings(thisString, label, id, ev);\n });\n}\nfunction resolveReservedStrings(thisString, label, id, ev) {\n if (thisString == actionModel.RES_SELECTED) {\n return actionModel.selObjects;\n }\n if (thisString == actionModel.RES_LABEL) {\n return label;\n }\n if (thisString == actionModel.RES_ID) {\n return id;\n }\n if (thisString == actionModel.EVENT) {\n return ev;\n }\n return thisString;\n}\n\nactionModel.getMenuMouseupFunction = getMenuMouseupFunction;\n\nexport default actionModel;","/*\n * Copyright (C) 2005 - 2022 TIBCO Software Inc. All rights reserved.\n * http://www.jaspersoft.com.\n *\n * Unless you have purchased a commercial license agreement from Jaspersoft,\n * the following license terms apply:\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n */\n/**\n * @version: $Id$\n */\nimport {\n isNotNullORUndefined,\n getAsFunction\n} from '../util/utils.common';\n\nimport actionModel from './actionModel.modelGenerator';\nimport actionModelJson from './actionModel.json.property';\nimport __jrsConfigs__ from 'js-sdk/src/jrs.configs';\nimport jQuery from 'jquery';\n\nvar primaryNavModule = {\n NAVIGATION_MENU_CLASS: 'menu vertical dropDown',\n ACTION_MODEL_TAG: 'navigationActionModel',\n CONTEXT_POSTFIX: '_mutton',\n NAVIGATION_MUTTON_DOM_ID: 'navigation_mutton',\n NAVIGATION_MENU_PARENT_CLASS: '.js-navigationOptions',\n /**\n * Navigation paths used in the navigation menu\n */\n navigationPaths: {\n browse: {\n url: 'flow.html',\n params: '_flowId=searchFlow'\n },\n home: { url: 'home.html' },\n library: {\n url: 'flow.html',\n params: '_flowId=searchFlow&mode=library'\n },\n logOut: { url: 'exituser.html' },\n search: {\n url: 'flow.html',\n params: '_flowId=searchFlow&mode=search'\n },\n favorites: {\n url: 'flow.html',\n params: '_flowId=searchFlow&mode=search&filterId=favoriteFilter&filterOption=favoriteFilter-favorites'\n },\n report: {\n url: 'flow.html',\n params: '_flowId=searchFlow&mode=search&filterId=resourceTypeFilter&filterOption=resourceTypeFilter-reports&searchText='\n },\n jobs: { url: 'scheduler/main.html' },\n olap: {\n url: 'flow.html',\n params: '_flowId=searchFlow&mode=search&filterId=resourceTypeFilter&filterOption=resourceTypeFilter-view&searchText='\n },\n event: {\n url: 'flow.html',\n params: '_flowId=logEventFlow'\n },\n adminHome: {\n url: 'flow.html',\n params: '_flowId=adminHomeFlow'\n },\n generalSettings: {\n url: 'flow.html',\n params: '_flowId=generalSettingsFlow'\n },\n organization: {\n url: 'flow.html',\n params: '_flowId=tenantFlow'\n },\n etl: { url: 'etl' },\n mondrianProperties: { url: 'olap/properties.html' },\n flush: { url: 'olap/flush.html' },\n user: {\n url: 'flow.html',\n params: '_flowId=userListFlow'\n },\n role: {\n url: 'flow.html',\n params: '_flowId=roleListFlow'\n },\n analysisOptions: {\n url: 'flow.html',\n params: '_flowId=mondrianPropertiesFlow'\n },\n designerOptions: {\n url: 'flow.html',\n params: '_flowId=designerOptionsFlow'\n },\n designerCache: {\n url: 'flow.html',\n params: '_flowId=designerCacheFlow'\n },\n awsSettings: {\n url: 'flow.html',\n params: '_flowId=awsSettingsFlow'\n },\n designer: {\n url: 'flow.html',\n params: '_flowId=adhocFlow'\n },\n dashboard: { url: 'dashboard/designer.html' },\n legacyDashboard: {\n url: 'flow.html',\n params: '_flowId=dashboardDesignerFlow&createNew=true'\n },\n domain: { url: 'domaindesigner.html' },\n dataSource: {\n url: 'flow.html',\n params: '_flowId=addDataSourceFlow&ParentFolderUri=' + encodeURIComponent('/datasources')\n },\n logSettings: { url: 'log_settings.html' },\n adminConsole: { url: 'adminConsole.html' },\n createReport: { url: 'view/view/modules/adhoc/createReport' }\n },\n /**\n * List of dom Id's for pages that require user confirmation before leaving.\n */\n bodyIds: {\n 'designer': 'designerBase.confirmAndLeave',\n 'dashboardDesigner': 'designerBase.confirmAndLeave',\n 'repoBrowse': 'repositorySearch.confirmAndLeave',\n 'repoSearch': 'repositorySearch.confirmAndLeave',\n 'manage_users': 'orgModule.confirmAndLeave',\n 'manage_roles': 'orgModule.confirmAndLeave',\n 'manage_orgs': 'orgModule.confirmAndLeave',\n 'domainDesigner_tables': 'domain.designer.confirmAndLeave',\n 'domainDesigner_derivedTables': 'domain.designer.confirmAndLeave',\n 'domainDesigner_joins': 'domain.designer.confirmAndLeave',\n 'domainDesigner_calculatedFields': 'domain.designer.confirmAndLeave',\n 'domainDesigner_filters': 'domain.designer.confirmAndLeave',\n 'domainDesigner_display': 'domain.designer.confirmAndLeave',\n 'dataChooserDisplay': 'domain.chooser.confirmAndLeave',\n 'dataChooserFields': 'domain.chooser.confirmAndLeave',\n 'dataChooserPreFilters': 'domain.chooser.confirmAndLeave',\n 'dataChooserSaveAsTopic': 'domain.chooser.confirmAndLeave',\n 'reportViewer': 'Report.confirmAndLeave'\n },\n globalActions: {\n 'logOut': function (bodyId) {\n return primaryNavModule.bodyIds[bodyId];\n }\n },\n /**\n * This method initializes the primary menu. This needs to be called only once.\n */\n initializeNavigation: function () {\n var navKey;\n var navId;\n var navObject;\n if (jQuery('#' + this.ACTION_MODEL_TAG)[0] === null) {\n return;\n }\n actionModelJson.JSON = jQuery.parseJSON(!!jQuery('#' + this.ACTION_MODEL_TAG)[0] ? jQuery('#' + this.ACTION_MODEL_TAG)[0].text : '{}');\n var re = /[A-Za-z]+[_]{1}[A-Za-z]+/; //go through json and get keys. Keys == action model context == nav menu muttons\n //go through json and get keys. Keys == action model context == nav menu muttons\n for (navKey in actionModelJson.JSON) {\n navId = re.exec(navKey)[0]; //strip out ids\n //strip out ids\n navObject = actionModelJson.JSON[navKey][0]; //get labels\n //get labels\n if (isNotNullORUndefined(navObject)) {\n this.createMutton(navId, navObject.text);\n } else {\n if (navId === 'main_home' || navId === 'main_library') {\n var leaf = jQuery('#' + navId)[0];\n leaf && jQuery(leaf).removeClass('hidden');\n }\n }\n }\n },\n /**\n * helper to create dom object\n */\n createMutton: function (domId, label) {\n var mutton = jQuery('#' + this.NAVIGATION_MUTTON_DOM_ID)[0].clone('true');\n var textPlacement = jQuery(mutton).children('.button');\n jQuery(mutton).attr('id', domId); //TODO: see if we can do this with builder (maybe not)\n jQuery(mutton).find('p').attr('id', domId + '_label'); //TODO: see if we can do this with builder (maybe not)\n //TODO: see if we can do this with builder (maybe not)\n var text = document.createTextNode(label);\n textPlacement.append(text);\n var navigationMenuParent = jQuery(this.NAVIGATION_MENU_PARENT_CLASS)[0];\n navigationMenuParent && navigationMenuParent.append(mutton);\n },\n /* Show the drop-down menu for a given top-level menu item on the menu bar. */\n showNavButtonMenu: function (event, object, label) {\n var elementId = jQuery(object).attr('id');\n actionModel.showDropDownMenu(event, object, elementId + this.CONTEXT_POSTFIX, this.NAVIGATION_MENU_CLASS, this.ACTION_MODEL_TAG, label);\n jQuery('#' + 'menu')[0].parentId = elementId;\n },\n /**\n * Used to determine if a element is part of the navigation button\n * @param object\n */\n isNavButton: function (object) {\n return jQuery(object).hasClass('mutton') || jQuery(object).hasClass('icon');\n },\n /**\n * Object based method used to create a url based on the navigation path object\n * @param place Place where to go described in primaryNavModule.navigationPaths\n * @param params Request parameters\n */\n setNewLocation: function (place, params) {\n var locObj = this.navigationPaths[place], queryParams = params || locObj.params;\n if (!locObj)\n return;\n queryParams = queryParams ? '?' + queryParams : '';\n var destination = __jrsConfigs__.urlContext + '/' + locObj.url + queryParams; // without try/catch location.href change in combination with canceled onbeforeunload event throws\n // error in IE.\n // without try/catch location.href change in combination with canceled onbeforeunload event throws\n // error in IE.\n try {\n if (locObj.url === this.navigationPaths.logOut.url) {\n var submitMe = document.getElementById(\"exitUser\") || document.createElement(\"form\");\n submitMe.setAttribute(\"id\", \"exitUser\");\n submitMe.action = destination;\n submitMe.method = \"post\";\n jQuery('body').append(submitMe);\n submitMe.submit();\n } else {\n window.location.href = destination;\n }\n } catch (e) {\n }\n },\n /**\n * Method used to create a url based on the navigation path object\n * @param option\n */\n navigationOption: function (option) {\n var bodyId = jQuery(document.body).attr('id'), execFunction = null;\n if (primaryNavModule.globalActions[option]) {\n execFunction = primaryNavModule.globalActions[option](bodyId);\n } else if (primaryNavModule.bodyIds[bodyId]) {\n execFunction = primaryNavModule.bodyIds[bodyId];\n }\n if (execFunction) {\n var executableFunction = getAsFunction(execFunction);\n var answer = executableFunction(option);\n if (typeof answer == 'function') {\n answer(function () {\n primaryNavModule.setNewLocation(option);\n });\n return;\n } else if (!answer) {\n return;\n }\n }\n primaryNavModule.setNewLocation(option);\n },\n /* ==== EVENTS ==== */\n /**\n * Event for fired on mouse over. Used to show a menu.\n * @param event\n * @param object\n */\n onMenuHeaderMouseOver: function (event, object) {\n this.showNavButtonMenu(event, object);\n }\n};\n\n// expose into global scope\nwindow.primaryNavModule = primaryNavModule;\n\nexport default primaryNavModule;","/*\n * Copyright (C) 2005 - 2022 TIBCO Software Inc. All rights reserved.\n * http://www.jaspersoft.com.\n *\n * Unless you have purchased a commercial license agreement from Jaspersoft,\n * the following license terms apply:\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n */\n\nimport './commons.bare.main';\nimport heartbeat from '../components/components.heartbeat';\nimport jrsConfigs from 'js-sdk/src/jrs.configs';\nimport aboutDialog from '../components/components.about';\nimport webHelp from '../components/components.webHelp';\nimport $ from 'jquery';\nimport 'focus-visible';\n\n// Basic stdnav plugins from js-sdk\nimport stdnav from 'js-sdk/src/common/stdnav/stdnav';\nimport stdnavPluginModalTrap from 'js-sdk/src/common/stdnav/plugins/stdnavPluginModalTrap';\nimport stdnavPluginAnchor from 'js-sdk/src/common/stdnav/plugins/stdnavPluginAnchor';\nimport stdnavPluginButton from 'js-sdk/src/common/stdnav/plugins/stdnavPluginButton';\nimport stdnavPluginGrid from 'js-sdk/src/common/stdnav/plugins/stdnavPluginGrid';\nimport stdnavPluginList from 'js-sdk/src/common/stdnav/plugins/stdnavPluginList';\nimport stdnavPluginTable from 'js-sdk/src/common/stdnav/plugins/stdnavPluginTable';\nimport stdnavPluginActionMenu from '../stdnav/plugins/stdnavPluginActionMenu';\nimport stdnavPluginActionMenuTrap from '../stdnav/plugins/stdnavPluginActionMenuTrap';\nimport stdnavPluginMainMenu from '../stdnav/plugins/stdnavPluginMainMenu';\nimport stdnavPluginDynamicList from '../stdnav/plugins/stdnavPluginDynamicList';\nimport stdnavPluginForms from '../stdnav/plugins/stdnavPluginForms';\nimport stdnavTabList from '../stdnav/plugins/stdnavTabList';\nimport stdnavPluginToolbar from '../stdnav/plugins/stdnavPluginToolbar';\nimport stdnavPluginToolbarV2 from '../stdnav/plugins/stdnavPluginToolbarV2';\nimport stdnavPluginWorkflowCard from 'js-sdk/src/common/stdnav/plugins/stdnavPluginWorkflowCard';\nimport '../config/dateAndTimeSettings';\n\n//Heartbeat\nheartbeat.initialize(jrsConfigs.heartbeatInitOptions);\nheartbeat.start();\njrsConfigs.initAdditionalUIComponents && aboutDialog.initialize(); //Web help\n//Web help\nvar helpLink = $('#helpLink');\nif (helpLink) {\n helpLink.on('click', function (e) {\n e.preventDefault();\n webHelp.displayWebHelp();\n });\n}\nif (jrsConfigs.enableAccessibility === 'true') {\n // Basic stdnav plugins from js-sdk\n stdnav.activate();\n\n [\n stdnavPluginModalTrap,\n stdnavPluginAnchor,\n stdnavPluginButton,\n stdnavPluginForms,\n stdnavPluginGrid,\n stdnavPluginList,\n // stdnavPluginTable,\n stdnavPluginActionMenu,\n stdnavPluginActionMenuTrap,\n stdnavPluginMainMenu,\n stdnavPluginDynamicList,\n stdnavPluginToolbar,\n stdnavTabList,\n stdnavPluginToolbarV2,\n stdnavPluginWorkflowCard\n ].forEach(plugin => plugin.activate(stdnav))\n\n stdnav.start();\n}\n","/*\n * Copyright (C) 2005 - 2022 TIBCO Software Inc. All rights reserved.\n * http://www.jaspersoft.com.\n *\n * Unless you have purchased a commercial license agreement from Jaspersoft,\n * the following license terms apply:\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n */\n/**\n * @author: Angus Croll\n * @version: $Id$\n */\n/* global confirm, serverIsNotResponding, alert, extraPostData, ajaxError, ajaxErrorHeader*/\n/**\n * Generic Ajax Utils\n */\n/**\n * Global Ajax Object\n */\nimport jQuery from 'jquery';\nimport dialogs from '../components/components.dialogs';\nimport {copyTable, copyTableJquery, isIPad, popOverlayObject} from \"../util/utils.common\";\nimport {errorHandler, showMessageDialog} from \"./core.ajax.utils\";\nimport {JRS} from \"../namespace/namespace\";\nimport xssUtil from 'js-sdk/src/common/util/xssUtil';\nimport Builder from 'scriptaculous/src/builder';\n\nvar ajax = {}; //cancel all requests sent before this date (in ms)\n//cancel all requests sent before this date (in ms)\najax.cancelRequestsBefore;\najax.LOADING_ID = 'loading'; /**\n * @class Manages incoming Ajax requests and processes corresponding Ajax responses\n * based on specified attributes.\n * Responses are bound to to the instance of AjaxRequester created by the corresponing request\n *\n * @constructor\n * @param {String} url address for server request\n * @param {Array} params [1]fillLocation [2]fromLocation [3]Array of callbacks\n * @param {String} postData user data for posting - where applicable\n * @return a new AjaxRequester instance\n * @type AjaxRequester\n */\n/**\n * @class Manages incoming Ajax requests and processes corresponding Ajax responses\n * based on specified attributes.\n * Responses are bound to to the instance of AjaxRequester created by the corresponing request\n *\n * @constructor\n * @param {String} url address for server request\n * @param {Array} params [1]fillLocation [2]fromLocation [3]Array of callbacks\n * @param {String} postData user data for posting - where applicable\n * @return a new AjaxRequester instance\n * @type AjaxRequester\n */\nfunction AjaxRequester(url, params, postData, synchronous) {\n this.url = url || document.location.toString();\n this.params = params;\n this.xmlhttp = getXMLHTTP();\n var rsChangeFunction = this.processResponse(this);\n this.xmlhttp.onreadystatechange = rsChangeFunction;\n this.postData = postData;\n this.async = !synchronous;\n this.requestTime = +new Date(); //(new Date).getTime()\n} /////////////////////////////////////////////////////////////////////////\n// Prototype Augmentation\n/////////////////////////////////////////////////////////////////////////\n//(new Date).getTime()\n/////////////////////////////////////////////////////////////////////////\n// Prototype Augmentation\n/////////////////////////////////////////////////////////////////////////\nAjaxRequester //constants for targetted update modes\n .addVar('CUMULATIVE_UPDATE', 'c').addVar('ROW_COPY_UPDATE', 'r').addVar('TARGETTED_REPLACE_UPDATE', 't').addVar('EVAL_JSON', 'j').addVar('DUMMY_POST_PARAM', 'dummyPostData').addVar('MAX_WAIT_TIME', 2000) //default function assignment\n .addVar('errorHandler', function () {\n return false;\n }) //the function to validate and report errors\n/**\n * Submit an ajax get request\n * @private\n * @return true if successful\n * @type boolean\n */.addMethod('doGet', function () {\n if (this.xmlhttp) {\n this.xmlhttp.open('GET', this.url, this.async);\n this.xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n this.xmlhttp.setRequestHeader('If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT');\n this.xmlhttp.setRequestHeader('x-requested-with', 'AJAXRequest');\n this.xmlhttp.send(null);\n return true;\n }\n return false;\n }) /**\n * Submit an ajax post request\n * @private\n * @return true if successful\n * @type boolean\n */.addMethod('doPost', function () {\n if (this.xmlhttp) {\n if (this.postData === AjaxRequester.prototype.DUMMY_POST_PARAM) {\n this.postData = null;\n }\n this.xmlhttp.open('POST', this.url, this.async);\n this.xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n this.xmlhttp.setRequestHeader('x-requested-with', 'AJAXRequest');\n this.xmlhttp.send(this.postData);\n return true;\n }\n return false;\n }) /**\n * Function to process the detected Ajax response\n * @param {AjaxRequester} the instance who's request we are processing\n * @private\n * @return the handler function\n * @type function\n */.addMethod('processResponse', function (requester) {\n return function () {\n if (requester.xmlhttp.readyState == 4) {\n if (ajax.cancelRequestsBefore && ajax.cancelRequestsBefore > requester.requestTime) {\n //ignore this request\n ajaxRequestEnded(requester);\n return;\n } //if (requester.verifyAjaxResponse()) {\n //if (requester.verifyAjaxResponse()) {\n handleResponse(requester); //}\n }\n };\n }) /**\n * Set error handler for this requester\n * @param {function} the error handler function\n * @private\n */.addMethod('setErrorHandler', function (setErrorHandler) {\n this.errorHandler = errorHandler;\n }).addMethod('verifyAjaxResponse', function () {\n //prompt if no server\n return this.xmlhttp.getResponseHeader('Server') || this.confirmContinue();\n }) /**\n * Start countdown to \"no response\" message\n */.addMethod('startResponseTimer', function () {\n this.responseTimer = window.setTimeout(function () {\n dialogs.popup.show(jQuery('#' + ajax.LOADING_ID)[0], true);\n }, this.MAX_WAIT_TIME);\n }) /**\n * Cancel countdown to \"no response\" message\n */.addMethod('cancelResponseTimer', function () {\n window.clearTimeout(this.responseTimer);\n }) /**\n * Cancel countdown to \"no response\" message\n */.addMethod('confirmContinue', function () {\n return confirm(window.serverIsNotResponding);\n }); /////////////////////////////////////////////////////////////////////////\n// Prototype Augmentation; End\n/////////////////////////////////////////////////////////////////////////\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// AjaxRequester: End\n///////////////////////////////////////////////////////////////////////////////////////////////////\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Global Space: Start\n///////////////////////////////////////////////////////////////////////////////////////////////////\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Response Handling\n///////////////////////////////////////////////////////////////////////////////////////////////////\n/**\n * Delegate to handler for ajax response\n * @param {AjaxRequester} the active requester instance\n * @param {Array} parameters bundled with the request\n * @private\n */\n/////////////////////////////////////////////////////////////////////////\n// Prototype Augmentation; End\n/////////////////////////////////////////////////////////////////////////\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// AjaxRequester: End\n///////////////////////////////////////////////////////////////////////////////////////////////////\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Global Space: Start\n///////////////////////////////////////////////////////////////////////////////////////////////////\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Response Handling\n///////////////////////////////////////////////////////////////////////////////////////////////////\n/**\n * Delegate to handler for ajax response\n * @param {AjaxRequester} the active requester instance\n * @param {Array} parameters bundled with the request\n * @private\n */\nfunction handleResponse(requester) {\n checkForErrors(requester) || requester.responseHandler(requester);\n ajaxRequestEnded(requester);\n if (JRS && JRS.vars) {\n JRS.vars.ajax_in_progress = false;\n }\n if (document.getElementById('mainTableContainerOverlay'))\n document.getElementById('mainTableContainerOverlay').className = 'hidden';\n} ///////////////////////////////////////////////////////////////////////////////////////////////////\n// Response Handlers\n///////////////////////////////////////////////////////////////////////////////////////////////////\n/**\n * Default handler for responses triggered by targeted ajax requests\n * @private\n * @param {AjaxRequester} requester the active requester instance\n * @param {Array} params parameters bundled with the request\n */\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Response Handlers\n///////////////////////////////////////////////////////////////////////////////////////////////////\n/**\n * Default handler for responses triggered by targeted ajax requests\n * @private\n * @param {AjaxRequester} requester the active requester instance\n * @param {Array} params parameters bundled with the request\n */\nfunction targettedResponseHandler(requester) {\n var xmlhttp = requester.xmlhttp;\n var fillId = requester.params[0];\n var fromId = requester.params[1];\n var callback = requester.params[2];\n var toLocation = jQuery('#' + fillId)[0];\n if (fromId) {\n jQuery(toLocation).html('');\n updateUsingResponseSubset(xmlhttp, fromId, toLocation);\n } else {\n var res = xmlhttp.responseText.trim(); //dirty solution for old dashboards because we haven't common format pattern for ajax response\n //dirty solution for old dashboards because we haven't common format pattern for ajax response\n if (res.indexOf('') + 1);\n var body = res.substring(res.indexOf('>') + 1, res.lastIndexOf('').html(xmlhttp.responseText);\n\t */\n var response = jQuery(xmlhttp.responseText);\n var whatWeWant = response.filter('#' + fromLocation);\n if (toLoc.tagName == 'TABLE' && jQuery('#' + fromLocation)[0].tagName == 'TABLE') {\n copyTableJquery(whatWeWant, toLoc, true);\n } else {\n jQuery(toLoc).append(whatWeWant.html());\n }\n function iterate() {\n if (idx >= sz) {\n return;\n }\n var scriptObj = jQuery(scriptTags.get(idx));\n if (scriptObj.attr('src')) {\n idx++;\n loadScript(scriptObj.attr('data-custname'), scriptObj.attr('src'), iterate);\n } else {\n idx++;\n executeScript(scriptObj.html(), iterate);\n }\n }\n function loadScript(scriptName, scriptUrl, callbackFn) {\n var gotCallback = callbackFn || false, scriptElement = document.createElement('script'); // prevent the script tag from being created more than once\n // prevent the script tag from being created more than once\n if (!window.jr_scripts) {\n window.jr_scripts = {};\n }\n if (!window.jr_scripts[scriptName] && scriptName !== 'jr_jq_min') {\n // skips jQuery core script\n scriptElement.setAttribute('type', 'text/javascript');\n if (scriptElement.readyState) {\n // for IE\n scriptElement.onreadystatechange = function () {\n if (scriptElement.readyState === 'loaded' || scriptElement.readyState === 'complete') {\n scriptElement.onreadystatechange = null;\n if (gotCallback) {\n callbackFn();\n }\n }\n };\n } else {\n // for Others - this is not supposed to work on Safari 2\n scriptElement.onload = function () {\n if (gotCallback) {\n callbackFn();\n }\n };\n }\n scriptElement.src = scriptUrl;\n document.getElementsByTagName('head')[0].appendChild(scriptElement);\n window.jr_scripts[scriptName] = scriptUrl;\n } else if (gotCallback) {\n callbackFn();\n }\n }\n function executeScript(scriptString, callbackFn) {\n var gotCallback = callbackFn || false;\n if (scriptString) {\n var lines = scriptString.match(/^.*((\\r\\n|\\n|\\r)|$)/gm);\n /*eslint-disable-next-line no-eval*/\n window.eval(lines.join('\\n'));\n if (gotCallback) {\n callbackFn();\n }\n }\n } /*\n * fusioncharts & jasperreports interactive: load JavaScript scripts synchronously\n */\n /*\n * fusioncharts & jasperreports interactive: load JavaScript scripts synchronously\n */\n if (typeof jQuery !== 'undefined' && true) {\n var scriptTags = response.filter('script.jasperreports'), sz = scriptTags.size(), idx = 0;\n iterate();\n }\n}\nfunction invokeCallbacks(callback, customArg) {\n if (callback) {\n /*eslint-disable-next-line no-eval*/\n typeof callback === 'string' ? eval(callback) : callback(customArg);\n }\n} /////////////////////////////////////////////////////////////////////////////////////////\n// Public API starts Here....\n// Please do not amend exisiting signatures but feel free to extend the API as required\n/////////////////////////////////////////////////////////////////////////////////////////\n/**\n * Send an ajax request with this URL and update the entire page with the response\n * @param {String} url of the request\n */\n// TODO Consider for removal\n/////////////////////////////////////////////////////////////////////////////////////////\n// Public API starts Here....\n// Please do not amend exisiting signatures but feel free to extend the API as required\n/////////////////////////////////////////////////////////////////////////////////////////\n/**\n * Send an ajax request with this URL and update the entire page with the response\n * @param {String} url of the request\n */\n// TODO Consider for removal\nfunction ajaxClobberredUpdate(url, options) {\n options.responseHandler = clobberingResponseHandler;\n ajaxUpdate(url, options);\n} /**\n * Send an ajax request with this URL and update the targetContainer with the sourceContainer container of the response DOM\n * Optionally execute the post fill action as a callback following response processing\n * @param {String} url the url of the request\n * @param {String} targetContainer id indicating where to dump html response\n * @param {String} sourceContainer id indicating which part of the html response to use\n * @param {Array} callback JS functions to evaluate after ajax update\n * @param {function} errorHandler a function to evaluate to trap errors\n * @param {String} postData user data for posting - where applicable\n * @param {String} update mode (default is targetted replace)\n */\n/**\n * Send an ajax request with this URL and update the targetContainer with the sourceContainer container of the response DOM\n * Optionally execute the post fill action as a callback following response processing\n * @param {String} url the url of the request\n * @param {String} targetContainer id indicating where to dump html response\n * @param {String} sourceContainer id indicating which part of the html response to use\n * @param {Array} callback JS functions to evaluate after ajax update\n * @param {function} errorHandler a function to evaluate to trap errors\n * @param {String} postData user data for posting - where applicable\n * @param {String} update mode (default is targetted replace)\n */\nfunction ajaxTargettedUpdate(url, options) {\n var responseHandler;\n if (options.mode == AjaxRequester.prototype.CUMULATIVE_UPDATE) {\n responseHandler = cumulativeResponseHandler;\n } else if (options.mode == AjaxRequester.prototype.ROW_COPY_UPDATE) {\n responseHandler = rowCopyResponseHandler;\n } else if (options.mode == AjaxRequester.prototype.EVAL_JSON) {\n responseHandler = evalJSONResponseHandler;\n } else {\n responseHandler = targettedResponseHandler;\n }\n options.responseHandler = function (requester, params) {\n if (options.preFillAction) {\n if (typeof options.preFillAction == 'string') {\n /*eslint-disable-next-line no-eval*/\n eval(options.preFillAction);\n } else {\n options.preFillAction(responseHandler(requester, params));\n }\n } else {\n responseHandler(requester, options.params);\n }\n };\n ajaxUpdate(url, options);\n} /**\n * Send an ajax request with this URL but don't return any content to the sender\n * Optionally execute the post fill action as a callback following response processing\n * @param {String} url the url of the request\n * @param {String} targetContainer id indicating where to dump html response\n * @param {String} sourceContainer id indicating which part of the html response to use\n * @param {Array} callback JS functions to evaluate after ajax update\n * @param {function} errorHandler a function to evaluate to trap errors\n * @param {String} postData user data for posting - where applicable\n */\n/**\n * Send an ajax request with this URL but don't return any content to the sender\n * Optionally execute the post fill action as a callback following response processing\n * @param {String} url the url of the request\n * @param {String} targetContainer id indicating where to dump html response\n * @param {String} sourceContainer id indicating which part of the html response to use\n * @param {Array} callback JS functions to evaluate after ajax update\n * @param {function} errorHandler a function to evaluate to trap errors\n * @param {String} postData user data for posting - where applicable\n */\nfunction ajaxNonReturningUpdate(url, options) {\n options.responseHandler = null;\n ajaxUpdate(url, options);\n} /**\n * Submit the form and replace entire page\n * @param {String} form name of the form\n * @param {String} url the url of the request\n * @param {String} extraPostData form data for posting\n * @param {String} targetContainer id indicating where to dump html response\n * @param {String} sourceContainer id indicating which part of the html response to use\n * @param {Array} callback JS functions to evaluate after ajax update\n * @param {function} errorHandler a function to evaluate to trap errors\n */\n/**\n * Submit the form and replace entire page\n * @param {String} form name of the form\n * @param {String} url the url of the request\n * @param {String} extraPostData form data for posting\n * @param {String} targetContainer id indicating where to dump html response\n * @param {String} sourceContainer id indicating which part of the html response to use\n * @param {Array} callback JS functions to evaluate after ajax update\n * @param {function} errorHandler a function to evaluate to trap errors\n */\nfunction ajaxClobberedFormSubmit(form, url, options) {\n var postData = getPostData(form, window.extraPostData);\n options.postData = appendPostData(postData, window.extraPostData);\n options.responseHandler = clobberingResponseHandler;\n ajaxUpdate(url, options);\n} /**\n * Submit the form and update the targetContainer with the sourceContainer container of the response DOM\n * @param {String} form name of the form\n * @param {String} url the url of the request\n * @param {String} extraPostData form data for posting\n * @param {String} targetContainer id indicating where to dump html response\n * @param {String} sourceContainer id indicating which part of the html response to use\n * @param {Array} callback JS functions to evaluate after ajax update\n * @param {function} errorHandler a function to evaluate to trap errors\n */\n/**\n * Submit the form and update the targetContainer with the sourceContainer container of the response DOM\n * @param {String} form name of the form\n * @param {String} url the url of the request\n * @param {String} extraPostData form data for posting\n * @param {String} targetContainer id indicating where to dump html response\n * @param {String} sourceContainer id indicating which part of the html response to use\n * @param {Array} callback JS functions to evaluate after ajax update\n * @param {function} errorHandler a function to evaluate to trap errors\n */\nfunction ajaxTargettedFormSubmit(form, url, options) {\n var postData = getPostData(form, options.extraPostData);\n options.postData = appendPostData(postData, options.extraPostData);\n options.responseHandler = targettedResponseHandler;\n ajaxUpdate(url, options);\n}\nfunction ajaxErrorHandler() {\n showMessageDialog(window.ajaxError, window.ajaxErrorHeader);\n} ////////////////////////////////////////////////////////////////////////////////\n// ...Public API ends Here....\n////////////////////////////////////////////////////////////////////////////////\n/**\n * @private\n */\n//dummy response handler for non returning case\n////////////////////////////////////////////////////////////////////////////////\n// ...Public API ends Here....\n////////////////////////////////////////////////////////////////////////////////\n/**\n * @private\n */\n//dummy response handler for non returning case\nfunction doNothing() {\n} /**\n * Wrapper for AjaxRequester\n * @private\n * @param {String} url - the url of the request\n * @param {Object} options - an object literal optioanlly defining:\n * @option {function} responseHandler - the designated response handler\n * @option {String} fillLocation - id indicating where in the DOM to dump ajax response\n * @option {String} fromLocation - id indicating which part of the ajax response to use\n * @option {Array} callback - JS functions to evaluate after ajax update\n * @option {function} errorHandler - the designated error handler\n * @option {String} postData - user data for posting - where applicable\n */\n/**\n * Wrapper for AjaxRequester\n * @private\n * @param {String} url - the url of the request\n * @param {Object} options - an object literal optioanlly defining:\n * @option {function} responseHandler - the designated response handler\n * @option {String} fillLocation - id indicating where in the DOM to dump ajax response\n * @option {String} fromLocation - id indicating which part of the ajax response to use\n * @option {Array} callback - JS functions to evaluate after ajax update\n * @option {function} errorHandler - the designated error handler\n * @option {String} postData - user data for posting - where applicable\n */\nfunction ajaxUpdate(url, options) {\n var ok = true;\n var requester = new AjaxRequester(url, [\n options.fillLocation,\n options.fromLocation,\n options.callback,\n options.isAutomaticRefresh\n ], options.postData, options.synchronous);\n if (isIPad() && JRS.vars.current_flow == 'adhoc') {\n if (!JRS.vars.ajax_in_progress) {\n JRS.vars.ajax_in_progress = true;\n }\n }\n if (ok) {\n requester.busyCursor = !options.silent;\n requester.showLoading = !options.silent && !options.hideLoader;\n requester.responseHandler = options.responseHandler || doNothing;\n if (requester.responseHandler != doNothing) {\n ajaxRequestStarted(requester);\n }\n if (options.errorHandler) {\n requester.errorHandler = options.errorHandler;\n }\n if (requester.xmlhttp) {\n if (options.postData) {\n requester.doPost();\n } else {\n requester.doGet();\n }\n }\n }\n} /**\n * @private\n */\n/**\n * @private\n */\nfunction checkForErrors(requester) {\n var requesterErrorHandler = requester.errorHandler;\n return requesterErrorHandler(requester.xmlhttp);\n} /**\n * @private\n */\n/**\n * @private\n */\nfunction getPostData(form, extraPostData) {\n if (typeof form == 'string') {\n form = document.forms[form];\n }\n var data = '';\n for (var i = 0; i < form.elements.length; ++i) {\n var element = form.elements[i];\n if (element.name && !(extraPostData && extraPostData[element.name])) {\n data = appendFormInput(data, element);\n }\n }\n return data;\n} /**\n * @private\n */\n/**\n * @private\n */\nfunction appendPostData(postData, extraPostData) {\n for (var name in extraPostData) {\n postData = appendFormValue(postData, name, extraPostData[name]);\n }\n return postData;\n} /**\n * @private\n */\n/**\n * @private\n */\nfunction appendFormInput(data, element) {\n if (element.name) {\n var value;\n var append = false;\n switch (element.type) {\n case 'checkbox':\n case 'radio':\n append = element.checked;\n value = element.value;\n break;\n case 'hidden':\n case 'password':\n case 'text':\n case 'Textarea':\n append = true;\n value = element.value;\n break;\n case 'select-one':\n case 'select-multiple':\n value = [];\n for (var i = 0; i < element.options.length; ++i) {\n var option = element.options[i];\n if (option.selected) {\n append = true;\n value.push(option.value);\n }\n }\n break;\n }\n if (append) {\n if (value.shift) {\n while (value.length > 0) {\n data = appendFormValue(data, element.name, value.shift());\n }\n } else {\n data = appendFormValue(data, element.name, value);\n }\n }\n }\n return data;\n} /**\n * @private\n */\n/**\n * @private\n */\nfunction appendFormValue(data, name, value) {\n if (data.length > 0) {\n data += '&';\n }\n data += name + '=' + encodeURIComponent(value);\n return data;\n} /**\n * @private\n */\n/**\n * @private\n */\nvar ERROR_POPUP_DIV = 'jsErrorPopup';\nvar ERROR_POPUP_CONTENTS = 'errorPopupContents';\nvar ERROR_POPUP_BACK_BUTTON = 'errorBack';\nvar ERROR_POPUP_CLOSE_BUTTON = 'errorPopupCloseButton'; /**\n * @private\n */\n/**\n * @private\n */ /**\n * @private\n */\n/**\n * @private\n */\nfunction hideErrorPopup() {\n popOverlayObject();\n var errorPopup = document.getElementById(ERROR_POPUP_DIV);\n errorPopup.style.display = 'none';\n} ////////////////////////////////////////////////////////////////////////////////\n// Request counter\n////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////\n// Request counter\n////////////////////////////////////////////////////////////////////////////////\najax.ajaxRequestCount = 0; /**\n * @private\n */\n/**\n * @private\n */\nfunction ajaxRequestStarted(requester) {\n ++ajax.ajaxRequestCount;\n requester.busyCursor && (document.body.style.cursor = 'wait');\n !isIPad() && requester.showLoading && requester.startResponseTimer();\n} /**\n * @private\n */\n/**\n * @private\n */\nfunction ajaxRequestEnded(requester) {\n requester.cancelResponseTimer();\n if (ajax.ajaxRequestCount <= 1) {\n document.body.style.cursor = 'auto';\n ajax.ajaxRequestCount = 0;\n dialogs.popup.hide(jQuery('#' + ajax.LOADING_ID)[0]);\n } else {\n ajax.ajaxRequestCount--;\n }\n}\nfunction isValidJsonResponse(ajaxAgent) {\n var responseType = ajaxAgent.getResponseHeader('Content-Type');\n return ajaxAgent.status == 200 && responseType != null && responseType.indexOf('application/json') >= 0;\n} ////////////////////////////////////////////////////////////////////////////////\n// XMLHTTP\n////////////////////////////////////////////////////////////////////////////////\n//\n// standard function to obtain an xmlhttp instance regardless of platform\n//\n////////////////////////////////////////////////////////////////////////////////\n// XMLHTTP\n////////////////////////////////////////////////////////////////////////////////\n//\n// standard function to obtain an xmlhttp instance regardless of platform\n//\nfunction getXMLHTTP() {\n var alerted;\n var xmlhttp; /*@cc_on @*/\n /*@if (@_jscript_version >= 5)\n // JScript gives us Conditional compilation, we can cope with old IE versions.\n try {\n xmlhttp=new ActiveXObject(\"Msxml2.XMLHTTP\")\n } catch (e) {\n try {\n xmlhttp=new ActiveXObject(\"Microsoft.XMLHTTP\")\n } catch (E) {\n alert(\"You must have Microsofts XML parsers available\")\n }\n }\n @else\n alert(\"You must have JScript version 5 or above.\")\n xmlhttp=false\n alerted=true\n @end @*/\n /*@cc_on @*/\n /*@if (@_jscript_version >= 5)\n // JScript gives us Conditional compilation, we can cope with old IE versions.\n try {\n xmlhttp=new ActiveXObject(\"Msxml2.XMLHTTP\")\n } catch (e) {\n try {\n xmlhttp=new ActiveXObject(\"Microsoft.XMLHTTP\")\n } catch (E) {\n alert(\"You must have Microsofts XML parsers available\")\n }\n }\n @else\n alert(\"You must have JScript version 5 or above.\")\n xmlhttp=false\n alerted=true\n @end @*/\n if (!xmlhttp && !alerted) {\n // Non ECMAScript Ed. 3 will error here (IE<5 ok), nothing I can\n // realistically do about it, blame the w3c or ECMA for not\n // having a working versioning capability in