123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588 |
- /*
- *+------------------------------------------------------------------------+
- *| Licensed Materials - Property of IBM
- *| BI and PM: prmt
- *| (C) Copyright IBM Corp. 2002, 2018
- *|
- *| US Government Users Restricted Rights - Use, duplication or
- *| disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
- *|
- *+------------------------------------------------------------------------+
- */
- var Class = function( v_oProperties ) {
- var v_class = function() {
- if (this.f_initialize && arguments[0] != 'noinit')
- {
- return this.f_initialize.apply(this, arguments);
- }
- else
- {
- return this;
- }
- };
- for (var v_oProperty in this)
- {
- v_class[v_oProperty] = this[v_oProperty];
- }
- v_class.prototype = v_oProperties;
- return v_class;
- };
- Class.prototype = {
- f_extend: function( v_oProperties ) {
- var v_oProto = new this('noinit');
- var f_parentize = function( v_oPrevious, v_oCurrent )
- {
- if ( !v_oPrevious.apply || !v_oCurrent.apply )
- {
- return false;
- }
- return function()
- {
- this.f_parent = v_oPrevious;
- return v_oCurrent.apply( this, arguments );
- };
- };
- for (var v_oProperty in v_oProperties){
- var v_oPrevious = v_oProto[ v_oProperty ];
- var v_oCurrent = v_oProperties[ v_oProperty ];
- if (v_oPrevious && v_oPrevious != v_oCurrent)
- {
- v_oCurrent = f_parentize(v_oPrevious, v_oCurrent) || v_oCurrent;
- }
- v_oProto[ v_oProperty ] = v_oCurrent;
- }
- return new Class( v_oProto );
- }
- };
- /**
- Copies all properties from v_oSource into v_oTarget.
- if v_oSource is null, we copy v_oTarget into 'this'.
- @param v_oTarget
- @param v_oSouce
- */
- Object.f_extend = function( v_oTarget, v_oSource )
- {
- if ( !v_oSource )
- {
- v_oTarget = this;
- v_oSource = v_oTarget;
- }
- for ( var v_oProperty in v_oSource )
- {
- v_oTarget[v_oProperty] = v_oSource[v_oProperty];
- }
- return v_oTarget;
- };
- /**
- Short for document.getElementById()
- */
- function $()
- {
- if (arguments.length == 1)
- {
- var element = arguments[0];
- if (typeof element == 'string')
- {
- return document.getElementById(element);
- }
- return element;
- }
- else
- {
- var elements = new Array();
- var i, l = arguments.length;
- for (i = 0; i < l; i++)
- {
- var element = arguments[i];
- if (typeof element == 'string')
- {
- element = document.getElementById(element);
- }
- elements.push(element);
- }
- return elements;
- }
- }
- /**
- Short for new C_PromptElement().
- */
- function $CE( v_sTag, v_oProps, v_elParent )
- {
- return ( new C_PromptElement(v_sTag, v_oProps, v_elParent) );
- }
- var PRMTUtils =
- {
- f_addClass: function( v_oElement, v_sName ) {
- if ( v_oElement )
- {
- v_sName = v_sName.f_trim();
- var v_sClass = v_oElement.className;
- if ( !v_sClass )
- {
- v_sClass = K_PRMT_sEMPTY;
- }
- if ( !v_sClass.match(new RegExp("\\b" + v_sName + "\\b")) )
- {
- v_sClass = (v_sClass + K_PRMT_sSP + v_sName);
- v_oElement.className = v_sClass.f_trim();
- }
- }
- return this;
- },
- f_addEvent: function( v_oElement, v_sType, v_oFct ) {
- if ( v_oElement )
- {
- if ( v_oElement.addEventListener )
- {
- v_oElement.addEventListener( v_sType, v_oFct, false );
- }
- else
- {
- v_oElement.attachEvent( 'on' + v_sType, v_oFct );
- }
- }
- },
- f_addText: function( v_oElement, v_sText ) {
- v_oElement.appendChild( document.createTextNode( K_PRMT_sEMPTY + v_sText ) );
- },
- f_createElement: function( v_sTag, v_oProps, v_elParent ) {
- var v_el = document.createElement( v_sTag );
- if ( v_oProps )
- {
- for (var p in v_oProps)
- {
- v_el.setAttribute( p, v_oProps[p] );
- }
- }
- if ( v_elParent )
- {
- v_elParent.appendChild( v_el );
- }
- return v_el;
- },
- f_parseNumber:function( v_sValue ) //CText::sParseOutCommon(sNumber)
- {
- var v_sRetval = v_sValue;
- // strip out the following
- // currency unit
- v_sRetval = v_sRetval.replace( new RegExp(sEscapeRegularExpression(g_currencySymbol), K_PRMT_sG), K_PRMT_sEMPTY);
- // group separator
- v_sRetval = v_sRetval.replace(new RegExp(sEscapeRegularExpression(g_groupingSeparator), K_PRMT_sG), K_PRMT_sEMPTY);
- // remove whitespace
- v_sRetval = v_sRetval.replace(new RegExp("\\s", K_PRMT_sG), K_PRMT_sEMPTY);
- // is there a decimal point, replace with SQL format
- v_sRetval = v_sRetval.replace(new RegExp(sEscapeRegularExpression(g_decimalSeparator), K_PRMT_sG), K_PRMT_sDOT);
- // remove the percent symbol
- v_sRetval = v_sRetval.replace(new RegExp(sEscapeRegularExpression(g_percentSymbol), K_PRMT_sG), K_PRMT_sEMPTY);
- return(v_sRetval);
- },
- f_isNumberOnly: function( v_sValue ) {
- var v_re = new RegExp("^[\\s\\+\\-]*[0-9\\s,\\.]+$");
- v_sValue = this.f_parseNumber(K_PRMT_sEMPTY + v_sValue);
- return ( v_re.test(v_sValue) ? true : false );
- },
- f_removeClass: function( v_oElement, v_sName ) {
- if ( v_oElement )
- {
- v_sName = v_sName.f_trim();
- var v_sClass = v_oElement.className;
- if ( !v_sClass )
- {
- v_sClass = K_PRMT_sEMPTY;
- }
- v_sClass = v_sClass.replace( new RegExp( "\\s*\\b" + v_sName + "\\b" ), K_PRMT_sEMPTY );
- v_oElement.className = v_sClass.f_trim();
- }
- },
- f_removeElement: function( v_oElement ) {
- if (v_oElement && v_oElement.parentNode)
- {
- v_oElement.parentNode.removeChild( v_oElement );
- }
- },
- F_PreventSubmit: function(evt) {
- var v_oEvt = (evt ? evt : (typeof event != K_PRMT_sUNDEFINED ? event : null ));
- if ( v_oEvt )
- {
- if (v_oEvt.keyCode == 13)
- {
- return this.F_StopEvent( v_oEvt );
- }
- }
- },
- F_StopEvent: function( v_oEvt ) {
- if (typeof v_oEvt.stopPropagation == K_PRMT_sFUNCTION)
- {
- v_oEvt.stopPropagation();
- }
- if (typeof v_oEvt.preventDefault == K_PRMT_sFUNCTION)
- {
- v_oEvt.preventDefault();
- }
- v_oEvt.cancelBubble = true;
- return false;
- },
- f_log: function( v_sCode, v_sMsg, v_bError ) {
- var s = v_sCode + "\n" + v_sMsg;
- if ( typeof console != K_PRMT_sUNDEFINED )
- {
- // Use Firebug's console
- if ( v_bError ) {
- console.warn( s );
- }
- else {
- console.log( s );
- }
- }
- else if ( K_PRMT_DEBUG )
- {
- s = '<div style="color:' + (v_bError ? "red" : "blue") + K_PRMT_sQU + K_PRMT_sGT + s + "</div>";
- if ( this._WIN_LOG_ )
- {
- this._WIN_LOG_.document.write( s );
- }
- else
- {
- var w = window.open( K_PRMT_sEMPTY, "PRMTUtil_LOG" + (new Date()).getTime() );
- w.document.write( s );
- w.document.close();
- this._WIN_LOG_ = w;
- }
- }
- },
- f_parseStyle: function ( sStyle ) {
- var v_aRetVal = [];
- if ( !sStyle || typeof sStyle != K_PRMT_sSTRING )
- {
- return v_aRetVal;
- }
- var v_sStyleParsed = sStyle.replace(/\s*;\s*$/g, K_PRMT_sEMPTY);
- v_sStyleParsed = v_sStyleParsed.replace(/\s*;\s*/g,';');
- v_sStyleParsed = v_sStyleParsed.replace(/\s*:\s*/g,K_PRMT_sCOLON);
- var aStyle = v_sStyleParsed.split(";");
- for ( var v_iStyle = 0; v_iStyle < aStyle.length; v_iStyle++ )
- {
- var v_aParsedStyled = aStyle[v_iStyle].split(K_PRMT_sCOLON);
- if ( v_aParsedStyled.length > 0 && v_aParsedStyled[0] )
- {
- v_aRetVal.push( v_aParsedStyled );
- }
- }
- return v_aRetVal;
- },
- f_camelCase: function( v_str ) {
- return v_str.replace(
- /-\D/g,
- function( v_str ) {
- return v_str.charAt(1).toUpperCase();
- }
- );
- },
- f_error: function( v_sCode, v_sMsg ) {
- this.f_log( v_sCode, v_sMsg, true );
- },
- F_OnChange: function( v_eEvent, v_el ) {
- if (v_el.type == "checkbox") {
- var v_div = v_el.parentNode;
- if (v_el.checked) {
- v_div.className = K_PRMT_CSS_CHECKBOX_CHECKED;
- } else
- {
- v_div.className = K_PRMT_CSS_CHECKBOX;
- }
- } else if (v_el.type == "radio") {
- // must update all radio button classes
- var v_valueObject = v_el.parentNode.parentNode.parentNode.m_oPrompt;
- if (v_valueObject && v_valueObject.f_getOptions) {
- var v_aOptions = v_valueObject.f_getOptions();
- var v_iLength = v_aOptions.length;
- for (var i = 0; i < v_iLength; i++) {
- var v_cb = v_aOptions[i];
- var v_div = v_cb.parentNode;
- v_div.className = (v_cb.checked ? K_PRMT_CSS_RADIOBUTTON_CHECKED : K_PRMT_CSS_RADIOBUTTON);
- }
- }
- }
- if ( window.ie )
- {
- while( v_el && !v_el.m_oPrompt )
- {
- v_el = v_el.parentNode;
- }
- if ( v_el && v_el.m_oPrompt && v_el.m_oPrompt.f_onChange )
- {
- v_el.m_oPrompt.f_onChange();
- }
- return true;
- }
- },
-
- f_updateRadioButtons : function(v_el) {
- if (v_el && v_el.name) {
- var v_sName = v_el.name;
- var aRadios = document.getElementsByName(v_sName);
- var v_iLength = aRadios.length;
- for (var i = 0; i < v_iLength; i++) {
- var v_cb = aRadios[i];
- var v_div = v_cb.parentNode;
- v_div.className = (v_cb.checked ? K_PRMT_CSS_RADIOBUTTON_CHECKED : K_PRMT_CSS_RADIOBUTTON);
- }
- }
- },
-
- f_CheckboxOnFocus: function(v_el) {
- v_el.parentNode.nextSibling.style.border = "1px dotted";
- },
-
- f_CheckboxOnBlur: function(v_el) {
- v_el.parentNode.nextSibling.style.border = "0 none";
- },
-
- f_RangeRadioOnFocus: function(v_el) {
- v_el.parentNode.style.border = "1px dotted";
- },
-
- f_RangeRadioOnBlur: function(v_el) {
- v_el.parentNode.style.border = "0 none";
- },
-
- f_SearchOptionOnFocus: function(v_el) {
- v_el.parentNode.parentNode.nextSibling.firstChild.style.border = "1px dotted";
- },
-
- f_SearchOptionOnBlur: function(v_el) {
- v_el.parentNode.parentNode.nextSibling.firstChild.style.border = "0 none";
- },
- f_isDOMElem: function (v_obj) {
- var v_result = false;
- if(typeof v_obj == "object" && "nodeType" in v_obj && v_obj.nodeType === 1 && v_obj.cloneNode){
- // most probably this is a DOM node
- v_result = true;
- }
- return v_result;
- },
-
- f_alertId: function (inputId, alertSuffix)
- {
- var v_elAlertId = "alert_" + inputId;
- if (typeof alertSuffix != K_PRMT_sUNDEFINED && alertSuffix != null && alertSuffix.length && alertSuffix.length > 0)
- {
- v_elAlertId += "_" + alertSuffix;
- }
- return v_elAlertId;
- },
-
- f_isMobileDevice: function (){
- return (/iPad|iPhone/.test(navigator.platform)) || (/Linux/.test(navigator.platform) && /Android/.test(navigator.userAgent) );
- },
-
- f_isHighContrast: function () {
- if (window.prmt_bHighContrast === false || window.prmt_bHighContrast === true) {
- return window.prmt_bHighContrast;
- }
- var tempDiv = document.createElement("div");
- tempDiv.id = this.m_sId + "hc";
- tempDiv.style.border = "1px solid";
- tempDiv.style.borderColor = "red green";
- tempDiv.style.height = "10px";
- tempDiv.style.top = "-999px";
- tempDiv.style.position = "absolute";
- document.body.appendChild(tempDiv);
- var computedStyle = null;
- if (window.ie && !window.edge) {
- computedStyle = tempDiv.currentStyle;
- }
- else {
- computedStyle = tempDiv.ownerDocument.defaultView.getComputedStyle(tempDiv, null);
- }
- window.prmt_bHighContrast = computedStyle.borderTopColor == computedStyle.borderRightColor;
- document.body.removeChild(tempDiv);
- return window.prmt_bHighContrast;
- },
-
- f_updateElementAriaChecked: function (v_el, ariaChecked)
- {
- if (v_el) {
- if (v_el[K_PRMT_ARIA_CHECKED]) {
- v_el[K_PRMT_ARIA_CHECKED] = ariaChecked;
- }
- else {
- v_el.setAttribute(K_PRMT_ARIA_CHECKED, ariaChecked);
- }
- }
- },
-
- f_removeARIAMessageAlert: function (v_inputElem, v_inputId, alertSuffix)
- {
- try
- {
- if ( this.f_isDOMElem(v_inputElem) )
- {
- // remove ARIA alert div if it exists
- var v_elAlertId = this.f_alertId(v_inputId, alertSuffix);
- var v_alertDiv = $(v_elAlertId);
- if ( v_alertDiv && this.f_isDOMElem(v_alertDiv) )
- {
- this.f_removeElement(v_alertDiv);
- }
- }
- }
- catch(err)
- {
- }
- },
- f_showARIAMessageAlert: function (v_inputElem, v_inputId, skinPath, v_sMsg, alertSuffix)
- { // render ARIA "alert" message
- try {
- // add ARIA alert unless it exists
- var v_elAlertId = this.f_alertId(v_inputId, alertSuffix);
- var v_alertDiv = $(v_elAlertId);
- if (v_alertDiv && this.f_isDOMElem(v_alertDiv))
- {
- // if errorMessage is different
- var v_alertImg = v_alertDiv.firstChild;
- if (v_alertImg.getAttribute("alt") != v_sMsg)
- {
- this.f_removeElement(v_alertDiv);
- v_alertDiv = K_PRMT_sUNDEFINED;
- }
- }
- if (!(v_alertDiv && this.f_isDOMElem(v_alertDiv)) )
- {
- var v_newAlert = document.createElement("div");
- v_newAlert.setAttribute("role", "alert");
- if (v_elAlertId != null)
- {
- v_newAlert.setAttribute("id", v_elAlertId);
- }
- var v_container = v_inputElem.parentNode;
- if (v_container)
- {
- v_container.appendChild(v_newAlert);
- }
- }
- }
- catch(err)
- {
- }
- },
- f_showARIAFail: function (v_inputElem, v_inputId, skinPath, v_sErrorMsg, alertSuffix)
- { // render ARIA test failure
- try
- {
- v_inputElem.setAttribute("aria-invalid", true);
- this.f_showARIAMessageAlert(v_inputElem, v_inputId, skinPath, v_sErrorMsg, alertSuffix);
- }
- catch(err)
- {
- }
- },
-
- f_showARIAPass: function (v_inputElem, v_inputId, alertSuffix)
- { // render ARIA test pass
- try
- {
- if ( this.f_isDOMElem(v_inputElem) )
- {
- v_inputElem.setAttribute("aria-invalid", false);
- this.f_removeARIAMessageAlert(v_inputElem, v_inputId, alertSuffix);
- }
- }
- catch(err)
- {
- }
- }
- };
- String.prototype.f_trim = function()
- {
- return ( this.replace(/^(\s|\n)*|(\s|\n)*$/g, K_PRMT_sEMPTY) );
- };
- String.prototype.f_xmlSafe = function()
- {
- return ( this.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(K_PRMT_reQU, """) );
- };
- Function.prototype.bind = function(v_oBindFct)
- {
- var v_fct = this;
- var v_object = v_oBindFct;
- var v_args = [];
- for (var v_idx =1; v_idx < arguments.length; v_idx++)
- {
- v_args.push( arguments[v_idx] );
- }
- return (
- function(e) {
- if (e) {
- v_args.push(e);
- }
- return v_fct.apply(v_object, v_args);
- }
- );
- };
- /*
- Class: window
- Some properties are attached to the window object by the browser detection.
- Properties:
- window.ie - will be set to true if the current browser is internet explorer (any).
- window.ie6 - will be set to true if the current browser is internet explorer 6.
- window.ie7 - will be set to true if the current browser is internet explorer 7.
- window.khtml - will be set to true if the current browser is Safari/Konqueror.
- window.gecko - will be set to true if the current browser is Mozilla/Gecko.
- */
- if (!!window.MSInputMethodContext && !!document.documentMode && (document.documentMode == 11)) { window.ie = window.ie11 = true; }
- else if (document.all && !!window.atob) { window.ie = window['ie10'] = true; }
- else if (document.all && !!document.addEventListener) { window.ie = window['ie9'] = true; }
- else if (document.all && !!document.querySelector) { window.ie = window['ie8'] = true; }
- else if (document.all && !!window.XMLHttpRequest) { window.ie = window['ie7'] = true; }
- else if (document.all && !!document.compatMode) { window.ie = window['ie6'] = true; }
- else if (document.all) { window.ie = window['ie5'] = true; }
- else if (document.childNodes && !document.all && !navigator.taintEnabled) { if (!!window.StyleMedia) { window.ie = window.ie11 = window.edge = true; } else window.khtml = true; }
- else if (document.getBoxObjectFor != null) window.gecko = true;
|