File: /home/tv1channel/public_html/bkp_/tv1olddatabase/js/ew.min.js.map
{"version":3,"sources":["../../node_modules/@babel/runtime/regenerator/index.js","../../node_modules/regenerator-runtime/runtime.js","../../build/js/FormData.js","../../build/js/Validators.js","../../node_modules/@babel/runtime/helpers/createClass.js","../../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/inheritsLoose.js","../../node_modules/@babel/runtime/helpers/defineProperty.js","../../node_modules/@babel/runtime/helpers/asyncToGenerator.js","../../build/js/FormBase.js","../../build/js/Field.js","../../build/js/Form.js","../../build/js/AjaxLookup.js","../../build/js/SelectionListOption.js","../../build/js/AutoSuggest.js","../../build/js/Forms.js","../../build/js/functions.js","../../build/js/Select2CustomOption.js","../../build/js/main.js","../../build/js/multipage.js","../../build/js/jquery.js","../../build/js/fields.js","../../build/js/adminlte.js"],"names":["regenerator","runtime","exports","undefined","Op","Object","prototype","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","obj","key","value","defineProperty","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","_invoke","state","GenStateSuspendedStart","method","arg","GenStateExecuting","Error","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","type","done","GenStateSuspendedYield","makeInvokeMethod","fn","call","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","this","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","AsyncIterator","PromiseImpl","invoke","resolve","reject","result","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","constructor","displayName","isGeneratorFunction","genFun","ctor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","toString","keys","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","module","regeneratorRuntime","accidentalStrictMode","Function","Blob","FormData","normalizeValue","_ref","filename","File","lastModified","ensureArgs","args","expected","normalizeArgs","String","each","arr","cb","global","window","_FormData","_send","XMLHttpRequest","send","_fetch","Request","fetch","_sendBeacon","navigator","sendBeacon","stringTag","a","b","d","c","blob","t","Date","defineProperties","lastModifiedDate","FormDataPolyfill","form","_data","elements","elm","disabled","files","file","append","options","opt","selected","checked","replace","normalizeLinefeeds","_proto","arguments","_normalizeArgs$apply","apply","map","delete","entries","_iterator","_step","_context","t0","t1","_createForOfIteratorHelperLoose","callback","thisArg","_step2","_iterator2","_step2$value","get","getAll","has","_iterator3","_step3","_step3$value","_context2","set","_iterator4","_step4","_step4$value","_context3","_step5","fd","_iterator5","_step5$value","_step6","boundary","Math","random","chunks","_iterator6","_step6$value","setRequestHeader","toLowerCase","_hasContentType","data","input","init","body","url","el","ew","checkInteger","userLevelId","language","phrase","parseInt","id","elId","document","getElementById","trim","level","sameText","userLevelName","includes","fieldName","_$el$data","$el","$","$p","closest","substr","css","hasValue","required","elFn","fileRequired","startsWith","elPwd","mismatchPassword","x","z","val","between","isMaskedPassword","hasClass","passwordStrength","raw","match","RegExp","escapeRegExChars","INVALID_USERNAME_CHARACTERS","username","ENCRYPTED_PASSWORD","INVALID_PASSWORD_CHARACTERS","password","getValue","checkEmail","email","cnt","checkEmails","dateFormat","phraseId","newSubStr","DATE_SEPARATOR","checkShortDate","checkDate","checkShortEuroDate","checkEuroDate","checkShortUSDate","checkUSDate","checkDateDef","DATE_FORMAT","datetime","checkTime","time","checkNumber","min","max","checkRange","range","integer","checkPhone","phone","checkZip","zip","checkCreditCard","creditCard","checkSsn","ssn","checkGuid","guid","pattern","checkByRegEx","regex","_len","Array","_key","concat","custom","captcha","_grecaptcha","grecaptcha","getResponse","dataset","recaptcha","_defineProperties","target","props","descriptor","createClass","Constructor","protoProps","staticProps","assertThisInitialized","ReferenceError","inheritsLoose","subClass","superClass","asyncGeneratorStep","gen","_next","_throw","asyncToGenerator","FormBase","pageId","_initiated","$element","htmlForm","initSearchPanel","modified","validateRequired","validate","emptyRow","multiPage","autoSuggests","lists","disableForm","getForm","find","prop","addClass","enableForm","$form","removeClass","appendHidden","$dp","attr","ar","serializeArray","o","appendTo","canSubmit","updateTextArea","$dps","dp","j","test","$els","not","submit","_callee","e","action","f","trigger","isBoolean","isObject","_x","_x2","getList","compileTemplates","_i","_lists","list","template","isString","templates","is","getElement","getElements","selector","updateLists","rowindex","isNumber","confirm","querySelector","removeSpinner","fixId","multiple","split","prefix","endsWith","_ref2","join","actions","promises","_i2","_Object$entries","_Object$entries$_i","parents","parentFields","parent","ajax","pvalues","getOptionValues","updateOptions","setTimeout","shift","AJAX_DELAY","all","source","console","log","createAutoSuggest","settings","assign","limit","AUTO_SUGGEST_MAX_ENTRIES","autoSuggestSettings","AutoSuggest","initEditors","filter","ed","active","save","destroyEditor","destroy","onError","msg","initUpload","index","later","upload","setupFilters","filters","filterList","$sf","toggleClass","$df","$delete","$save","saveFilters","SEARCH_FILTER_OPTION","localStorage","setItem","JSON","stringify","$body","currentPage","dataType","success","always","off","on","prompt","sanitize","prevAll","remove","$submenu","isArray","splice","insertBefore","TOKEN_NAME_KEY","TOKEN_NAME","ANTIFORGERY_TOKEN_KEY","ANTIFORGERY_TOKEN","IS_LOGGEDIN","IS_SYS_ADMIN","CURRENT_USER_NAME","item","getItem","parseJson","grep","show","hide","isSearch","hasFormData","collapse","text","render","loadjs","ready","bind","$tab","getAttribute","$panel","$container","width","CONFIRM_CANCEL","href","location","forms","add","Field","fldvar","validators","invalid","_createForOfIteratorHelperLoose$1","validator","addValidator","addError","_this$_error","_error","_objectSpread","clearErrors","clearValidators","_element","shouldValidate","updateFeedback","errorMessage","jQuery","html","setInvalid","focus","setFocus","from","_checkbox","_this$_element","_this$_element$id","Form","_this","_FormBase","addField","fields","getField","addFields","_createForOfIteratorHelperLoose$2","field","addCustomError","makeVisible","element","gotoPageByElement","$pane","click","validateFields","rowIndex","row","_Object$values","_objectSpread$1","_i3","_Object$values2","AjaxLookup","elementId","formElement","m","pf","debounce","recordCount","formatResult","isAutoSuggest","jsRenderHelpers","displayValue","generateRequest","page","LANGUAGE_ID","getUserParams","arp","MULTIPLE_OPTION_SEPARATOR","getUrl","query","start","params","URLSearchParams","q","n","rnd","getApiUrl","API_LOOKUP_ACTION","prepare","transform","results","totalRecordCount","records","_isAutoSuggest","SelectionListOption","emptyObj","typeahead","timer","$input","minWidth","maxHeight","highlight","hint","minLength","delay","display","forceSelection","forceSelect","setValue","v","findIndex","option","lf","syncResults","asyncResults","cancel","count","menu","$node","more","ta","datasets","_append","scrollTop","$lastSuggestion","outerHeight","isOpen","empty","$item","getActiveSelectable","close","tpl","$more","one","preventDefault","stopPropagation","$menu","$dataset","max-height","overflow-y","Forms","_forms","ids","_fixLayoutHeightTimer","currentUrl","URL","$document","_removeSpinner","initIcons","tooltip","container","IS_MOBILE","placement","sanitizeFn","initPasswordOptions","pStrength","MIN_PASSWORD_STRENGTH","$this","changeBackground","backgrounds","passwordValidFrom","onPasswordStrengthChanged","strength","percentage","$pst","$pb","outerWidth","pct","pGenerator","passwordLength","GENERATE_PASSWORD_LENGTH","uppercase","GENERATE_PASSWORD_UPPERCASE","lowercase","GENERATE_PASSWORD_LOWERCASE","numbers","GENERATE_PASSWORD_NUMBER","specialChars","GENERATE_PASSWORD_SPECIALCHARS","onPasswordGenerated","pwd","triggerHandler","PATH_BASE","API_URL","qs","route","encodeURIComponent","sanitizeUrl","search","searchParams","initExportLinks","fileDownload","initMultiSelectCheckboxes","$cbs","_update","len","win","jq","swal","Swal","doc","$doc","isHtml","fire","_objectSpread$2","sweetAlertSettings","allowOutsideClick","allowEscapeKey","onBeforeOpen","showLoading","cache","xhrFields","responseType","textStatus","jqXHR","createObjectURL","createElement","getResponseHeader","style","download","appendChild","objectUrl","revokeObjectURL","fail","showValidationMessage","response","lazyLoad","LAZY_LOAD","src","initLightboxes","USE_COLORBOX","lightboxSettings","title","current","previous","xhrError","imgError","colorbox","rel","initPdfObjects","EMBED_PDF","PDFObjectOptions","PDFObject","embed","fallbackLink","initTooltips","popover","parse","isFunction","_prompt","confirmButtonText","showCancelButton","cancelButtonText","inputValidator","toast","toastOptions","Toasts","position","toUpperCase","substring","children","first","showToast","class","autohide","autoHideSuccessMessage","autoHideSuccessMessageDelay","$f","parentId","change","isUndefined","childFields","promise","els","getId","names","$elf","typ","elf","_updateOptions","autoFillTargetFields","autoFill","fo","frmo","$obj","clearOptions","addOpt","valid","newOption","selectOption","_updateSibling","lookupOptions","ds","isModalLookup","root","convertToBool","_export","sel","fobj","keySelected","_alert","serialize","end","isHiddenTextArea","isHidden","selectAll","setColor","$row","$tbl","ROWTYPE_ADD","ROWTYPE_EDIT","clearSelected","tbl","rows","r","$r","clearDelete","$tr","siblings","addBack","clickDelete","setupTable","force","$rows","tBodies","mouseOver","mouseOut","$target","cells","last","div","parentsUntil","RESPONSIVE_TABLE_CLASS","rowSpan","clientHeight","offsetHeight","attach","edit","sw","setupGrid","grid","$grid","USE_OVERLAY_SCROLLBARS","overlayScrollbars","overlayScrollbarsOptions","table","getAncestorBy","node","parentNode","nodeType","classList","contains","o1","o2","lookup","getOptionTexts","lo","hasAttribute","removeAll","valueSeparator","sep","df","isValue","optionHtml","OPTION_HTML_TEMPLATE","optionsHtml","MAX_OPTION_COUNT","frm","df1","df2","df3","df4","innerHTML","selectedIndex","_createForOfIteratorHelperLoose$3","vals","opts","isAutoSelect","_ajaxStop","lastPageSubmit","executeScript","matches","matchAll","addScript","stripScript","scr","removeScript","getContent","getOptions","modalDialogHide","$dlg","removeData","$bd","ewjtable","className","reload","dest_array","destEl","v0","pid","post","$tt","trig","dir","CSS_FLIP","content","wd","$tip","getTipElement","object_value","checkDateEx","format","arDT","re","sYear","sMonth","sDay","exec","wrksep","arD","unformatYear","checkDay","yr","UNFORMAT_YEAR","checkYear","checkMonth","maxDay","ts","THOUSANDS_SEP","DECIMAL_POINT","stringToFloat","parseFloat","str","min_value","max_value","isNull","TIME_SEPARATOR","showMessage","_arg$target","p","$div","$alert","$heading","detach","$content","w","$toast","floor","redirect","newUrl","ajaxSend","event","jqxhr","apiUrl","isApi","allowed","hostname","API_JWT_TOKEN","IS_WINDOWS_AUTHENTICATION","API_JWT_AUTHORIZATION_HEADER","ajaxStart","addSpinner","ajaxStop","ajaxError","selectId","select2","amd","require","Utils","ResultsList","InfiniteScroll","HidePlaceholder","SelectOnClose","selectOptions","resultsAdapter","dropdown","columns","customOption","Decorate","Select2CustomOption","decorated","$results","displayMessage","escapeMarkup","clear","hideLoading","$message","message","sort","cols","$option","attrs","role","aria-selected","Element","msMatchesSelector","webkitMatchesSelector","_resultId","setAttribute","StoreData","getSelect2CustomOptionClass","iconClass","templateResult","placeholder","selectOnClose","term","processResults","pagination","minimumResultsForSearch","Infinity","timeoutTime","keepAliveTimer","counter","useKeepAlive","SESSION_KEEP_ALIVE_INTERVAL","IS_AUTOLOGIN","keepAlive","API_SESSION_ACTION","token","resetTimer","SESSION_TIMEOUT_COUNTDOWN","SESSION_TIMEOUT","timeout","timerInterval","showConfirmButton","timerProgressBar","setInterval","sec","timeleft","round","getTimerLeft","textContent","onClose","clearInterval","setTimer","dismiss","DismissReason","TIMEOUT_URL","keepAliveInterval","select","_positionDropdown","_resizeDropdown","parm","$fld","$fld2","hasY","$cond","hasCond","$and","opr","$opr2","opr2","isBetween","isNullOpr","isNullOpr2","hideOpr2","hideX","hideY","divId","tmplId","classId","exportType","export","enabled","replaceWith","querySelectorAll","subtmpl","rowspan","childNodes","views","hasTag","jsRenderAttributes","scripts","tmpl","$meta","PDF_STYLESHEET_FILENAME","PROJECT_STYLESHEET_FILENAME","responseText","customexport","param","idx","infix","fld","bool","nelm","oelm","fnelm","srcElement","currentForm","isPost","isMultiple","_success","_submit","k","jquery","shiftKey","ctrlKey","$cb","$tpl","$lastrow","clone","suffix","$elkeycnt","keycnt","data-rowindex","attributes","after","scrollHeight","rowidx","keycntname","_delete","$keyact","addOptionDialog","_submitSuccess","_results","lnk","objName","API_OBJECT_NAME","modal","linkField","dfs","displayFields","ffs","filterFields","pfs","lfv","ff","txt","$lu","nv","arOpt","obj2","ar2","_results2","_results$error","description","_results3","failureMessage","_fail","status","statusText","btn","$btn","API_ADD_ACTION","filterFieldVars","nodeName","modalDialog","showing","size","_caption","$lnk","caption","_button","_always","handleResult","pathname","_current","view","warningMessage","successMessage","_result$error","_result$error2","footer","cf","ct","alert","modalLookupDialog","_timer","$search","oid","_format","setAutoSuggest","txts","useText","srch","arLinkValue","linkValue","paging","pageSize","pageSizes","pageSizeChangeArea","pageList","selecting","selectingCheckboxes","multiselect","listAction","postData","jtParams","recperpage","messages","serverCommunicationError","loadingMessage","spinnerClass","noDataAvailable","pagingInfo","pageSizeChangeLabel","gotoPageLabel","recordsLoaded","selectedRows","selectionChanged","indexOf","toggle","LOOKUP_DELAY","sv","importDialog","$data","$progress","classname","$msg","hideMessage","showProgress","pc","updateProgress","tcnt","totalCount","importProgress","API_PROGRESS_ACTION","API_FILE_TOKEN_NAME","importComplete","fileResults","fileResult","scnt","successCount","fcnt","failCount","showLog","failList","ecnt","importFail","formData","session","SESSION_ID","importUploadOptions","acceptFileTypes","IMPORT_FILE_ALLOWED_EXT","fileupload","API_UPLOAD_ACTION","autoUpload","singleFileUploads","maxFileSize","maxNumberOfFiles","minFileSize","beforeSend","importfiles","ok","filetoken","API_ACTION_NAME","xhr","importFiles","processfail","errorThrown","progressall","loaded","total","uploadProgress","hdr","emailDialog","Validators","emails","MAX_EMAIL_RECIPIENT","exportid","exportWithCharts","arUrl","pos","height","ypos","offset","top","pageY","xpos","left","pageX","drillDownCharts","cht","dispose","_convert","API_LIST_ACTION","API_VIEW_ACTION","API_DELETE_ACTION","responseJSON","creditcard_string","tempdigit","doubledigit","checkdigit","email_cnt","arEmails","nid","readonly","$ft","$fn","$fa","$fs","$exts","$maxsize","$maxfilecount","$label","label","_confirmDelete","_downloadTemplate","_uploadTemplate","uploadUrl","API_JQUERY_UPLOAD_ACTION","exts","maxsize","maxfilecount","multipart","loadImageFileTypes","loadVideoFileTypes","loadAudioFileTypes","filesContainer","uploadTemplateId","downloadTemplateId","uploadTemplate","downloadTemplate","previewMaxWidth","UPLOAD_THUMBNAIL_WIDTH","previewMaxHeight","UPLOAD_THUMBNAIL_HEIGHT","dropZone","pasteZone","readOnly","MULTIPLE_UPLOAD_SEPARATOR","originalEvent","fid","_data$files","l","_data$files2","_data$result","_data$result$files","_data$files3","updateDropdownPosition","Event","config","regexBits","separator","thousandsSeparator","decimalSeparator","decimal","isFinite","decIndex","newOutput","isNeg","output","decPlaces","decimalPlaces","decSep","thouSep","toFixed","lastIndexOf","makeArray","def","timesep","moment","$tables","initGridPanel","renderJsTemplates","initForms","adminlte","Treeview","_jQueryInterface","$window","IS_SCREEN_SM_MIN","$rpt","mh","toggleGroup","USE_JAVASCRIPT_MESSAGE","currentTarget","$i","exportId","exportUrl","now","exp","exportCharts","charts","toBase64Image","chart_engine","stream_type","stream","parameters","API_EXPORT_CHART_ACTION","layout","fixLayoutHeight","tblVar","events","fldVar","matchMedia","MOBILE_DETECT","MobileDetect","userAgent","mobile","IS_IE","version","MultiPage","formid","formID","pageIndex","maxPageIndex","minPageIndex","pageIndexes","$pages","$collapses","isTab","isCollapse","hideDisabledButton","hideInactivePages","lockTabs","hideTabs","showPagerTop","showPagerBottom","pagerTemplate","_show","_properties","before","pageShow","gotoPage","$page","eq","gotoPageByIndex","gotoPageByElementId","togglePage","$tabs","googleMaps","google","maps","setCenter","$bodies","functions","debugMode","DEBUG","setSessionTimer","initPage","hash","animate","zIndex","extend","isDate","when","periodic","interval","clearTimeout","rec","_this$data","visible","_this$data2","toNumber","parseNumber","toDate","parseDate","toJsDate","_toggle","$relativeTarget","treeviewMenu","$text"],"mappings":"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","sourcesContent":["module.exports = require(\"regenerator-runtime\");\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","/* global FormData self Blob File */\r\n/* eslint-disable no-inner-declarations */\r\n\r\nif (typeof Blob !== 'undefined' && (typeof FormData === 'undefined' || !FormData.prototype.keys)) {\r\n const global = typeof window === 'object'\r\n ? window\r\n : typeof self === 'object' ? self : this\r\n\r\n // keep a reference to native implementation\r\n const _FormData = global.FormData\r\n\r\n // To be monkey patched\r\n const _send = global.XMLHttpRequest && global.XMLHttpRequest.prototype.send\r\n const _fetch = global.Request && global.fetch\r\n const _sendBeacon = global.navigator && global.navigator.sendBeacon\r\n\r\n // Unable to patch Request constructor correctly\r\n // const _Request = global.Request\r\n // only way is to use ES6 class extend\r\n // https://github.com/babel/babel/issues/1966\r\n\r\n const stringTag = global.Symbol && Symbol.toStringTag\r\n\r\n // Add missing stringTags to blob and files\r\n if (stringTag) {\r\n if (!Blob.prototype[stringTag]) {\r\n Blob.prototype[stringTag] = 'Blob'\r\n }\r\n\r\n if ('File' in global && !File.prototype[stringTag]) {\r\n File.prototype[stringTag] = 'File'\r\n }\r\n }\r\n\r\n // Fix so you can construct your own File\r\n try {\r\n new File([], '') // eslint-disable-line\r\n } catch (a) {\r\n global.File = function File (b, d, c) {\r\n const blob = new Blob(b, c)\r\n const t = c && void 0 !== c.lastModified ? new Date(c.lastModified) : new Date()\r\n\r\n Object.defineProperties(blob, {\r\n name: {\r\n value: d\r\n },\r\n lastModifiedDate: {\r\n value: t\r\n },\r\n lastModified: {\r\n value: +t\r\n },\r\n toString: {\r\n value () {\r\n return '[object File]'\r\n }\r\n }\r\n })\r\n\r\n if (stringTag) {\r\n Object.defineProperty(blob, stringTag, {\r\n value: 'File'\r\n })\r\n }\r\n\r\n return blob\r\n }\r\n }\r\n\r\n function normalizeValue ([value, filename]) {\r\n if (value instanceof Blob) {\r\n // Should always returns a new File instance\r\n // console.assert(fd.get(x) !== fd.get(x))\r\n value = new File([value], filename, {\r\n type: value.type,\r\n lastModified: value.lastModified\r\n })\r\n }\r\n\r\n return value\r\n }\r\n\r\n function ensureArgs (args, expected) {\r\n if (args.length < expected) {\r\n throw new TypeError(`${expected} argument required, but only ${args.length} present.`)\r\n }\r\n }\r\n\r\n function normalizeArgs (name, value, filename) {\r\n return value instanceof Blob\r\n // normalize name and filename if adding an attachment\r\n ? [String(name), value, filename !== undefined\r\n ? filename + '' // Cast filename to string if 3th arg isn't undefined\r\n : typeof value.name === 'string' // if name prop exist\r\n ? value.name // Use File.name\r\n : 'blob'] // otherwise fallback to Blob\r\n\r\n // If no attachment, just cast the args to strings\r\n : [String(name), String(value)]\r\n }\r\n\r\n // normalize linefeeds for textareas\r\n // https://html.spec.whatwg.org/multipage/form-elements.html#textarea-line-break-normalisation-transformation\r\n function normalizeLinefeeds (value) {\r\n return value.replace(/\\r\\n/g, '\\n').replace(/\\n/g, '\\r\\n')\r\n }\r\n\r\n function each (arr, cb) {\r\n for (let i = 0; i < arr.length; i++) {\r\n cb(arr[i])\r\n }\r\n }\r\n\r\n /**\r\n * @implements {Iterable}\r\n */\r\n class FormDataPolyfill {\r\n /**\r\n * FormData class\r\n *\r\n * @param {HTMLElement=} form\r\n */\r\n constructor (form) {\r\n this._data = Object.create(null)\r\n\r\n if (!form) return this\r\n\r\n const self = this\r\n\r\n each(form.elements, elm => {\r\n if (!elm.name || elm.disabled || elm.type === 'submit' || elm.type === 'button') return\r\n\r\n if (elm.type === 'file') {\r\n const files = elm.files && elm.files.length\r\n ? elm.files\r\n : [new File([], '', { type: 'application/octet-stream' })] // #78\r\n\r\n each(files, file => {\r\n self.append(elm.name, file)\r\n })\r\n } else if (elm.type === 'select-multiple' || elm.type === 'select-one') {\r\n each(elm.options, opt => {\r\n !opt.disabled && opt.selected && self.append(elm.name, opt.value)\r\n })\r\n } else if (elm.type === 'checkbox' || elm.type === 'radio') {\r\n if (elm.checked) self.append(elm.name, elm.value)\r\n } else {\r\n const value = elm.type === 'textarea' ? normalizeLinefeeds(elm.value) : elm.value\r\n self.append(elm.name, value)\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Append a field\r\n *\r\n * @param {string} name field name\r\n * @param {string|Blob|File} value string / blob / file\r\n * @param {string=} filename filename to use with blob\r\n * @return {undefined}\r\n */\r\n append (name, value, filename) {\r\n ensureArgs(arguments, 2)\r\n ;[name, value, filename] = normalizeArgs.apply(null, arguments)\r\n const map = this._data\r\n\r\n if (!map[name]) map[name] = []\r\n\r\n map[name].push([value, filename])\r\n }\r\n\r\n /**\r\n * Delete all fields values given name\r\n *\r\n * @param {string} name Field name\r\n * @return {undefined}\r\n */\r\n delete (name) {\r\n ensureArgs(arguments, 1)\r\n delete this._data[String(name)]\r\n }\r\n\r\n /**\r\n * Iterate over all fields as [name, value]\r\n *\r\n * @return {Iterator}\r\n */\r\n * entries () {\r\n const map = this._data\r\n\r\n for (const name in map) {\r\n for (const value of map[name]) {\r\n yield [name, normalizeValue(value)]\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Iterate over all fields\r\n *\r\n * @param {Function} callback Executed for each item with parameters (value, name, thisArg)\r\n * @param {Object=} thisArg `this` context for callback function\r\n * @return {undefined}\r\n */\r\n forEach (callback, thisArg) {\r\n ensureArgs(arguments, 1)\r\n for (const [name, value] of this) {\r\n callback.call(thisArg, value, name, this)\r\n }\r\n }\r\n\r\n /**\r\n * Return first field value given name\r\n * or null if non existen\r\n *\r\n * @param {string} name Field name\r\n * @return {string|File|null} value Fields value\r\n */\r\n get (name) {\r\n ensureArgs(arguments, 1)\r\n const map = this._data\r\n name = String(name)\r\n return map[name] ? normalizeValue(map[name][0]) : null\r\n }\r\n\r\n /**\r\n * Return all fields values given name\r\n *\r\n * @param {string} name Fields name\r\n * @return {Array} [{String|File}]\r\n */\r\n getAll (name) {\r\n ensureArgs(arguments, 1)\r\n return (this._data[String(name)] || []).map(normalizeValue)\r\n }\r\n\r\n /**\r\n * Check for field name existence\r\n *\r\n * @param {string} name Field name\r\n * @return {boolean}\r\n */\r\n has (name) {\r\n ensureArgs(arguments, 1)\r\n return String(name) in this._data\r\n }\r\n\r\n /**\r\n * Iterate over all fields name\r\n *\r\n * @return {Iterator}\r\n */\r\n * keys () {\r\n for (const [name] of this) {\r\n yield name\r\n }\r\n }\r\n\r\n /**\r\n * Overwrite all values given name\r\n *\r\n * @param {string} name Filed name\r\n * @param {string} value Field value\r\n * @param {string=} filename Filename (optional)\r\n * @return {undefined}\r\n */\r\n set (name, value, filename) {\r\n ensureArgs(arguments, 2)\r\n const args = normalizeArgs.apply(null, arguments)\r\n this._data[args[0]] = [[args[1], args[2]]]\r\n }\r\n\r\n /**\r\n * Iterate over all fields\r\n *\r\n * @return {Iterator}\r\n */\r\n * values () {\r\n for (const [, value] of this) {\r\n yield value\r\n }\r\n }\r\n\r\n /**\r\n * Return a native (perhaps degraded) FormData with only a `append` method\r\n * Can throw if it's not supported\r\n *\r\n * @return {FormData}\r\n */\r\n ['_asNative'] () {\r\n const fd = new _FormData()\r\n\r\n for (const [name, value] of this) {\r\n fd.append(name, value)\r\n }\r\n\r\n return fd\r\n }\r\n\r\n /**\r\n * [_blob description]\r\n *\r\n * @return {Blob} [description]\r\n */\r\n ['_blob'] () {\r\n const boundary = '----formdata-polyfill-' + Math.random()\r\n const chunks = []\r\n\r\n for (const [name, value] of this) {\r\n chunks.push(`--${boundary}\\r\\n`)\r\n\r\n if (value instanceof Blob) {\r\n chunks.push(\r\n `Content-Disposition: form-data; name=\"${name}\"; filename=\"${value.name}\"\\r\\n`,\r\n `Content-Type: ${value.type || 'application/octet-stream'}\\r\\n\\r\\n`,\r\n value,\r\n '\\r\\n'\r\n )\r\n } else {\r\n chunks.push(\r\n `Content-Disposition: form-data; name=\"${name}\"\\r\\n\\r\\n${value}\\r\\n`\r\n )\r\n }\r\n }\r\n\r\n chunks.push(`--${boundary}--`)\r\n\r\n return new Blob(chunks, {\r\n type: 'multipart/form-data; boundary=' + boundary\r\n })\r\n }\r\n\r\n /**\r\n * The class itself is iterable\r\n * alias for formdata.entries()\r\n *\r\n * @return {Iterator}\r\n */\r\n [Symbol.iterator] () {\r\n return this.entries()\r\n }\r\n\r\n /**\r\n * Create the default string description.\r\n *\r\n * @return {string} [object FormData]\r\n */\r\n toString () {\r\n return '[object FormData]'\r\n }\r\n }\r\n\r\n if (stringTag) {\r\n /**\r\n * Create the default string description.\r\n * It is accessed internally by the Object.prototype.toString().\r\n */\r\n FormDataPolyfill.prototype[stringTag] = 'FormData'\r\n }\r\n\r\n // Patch xhr's send method to call _blob transparently\r\n if (_send) {\r\n const setRequestHeader = global.XMLHttpRequest.prototype.setRequestHeader\r\n\r\n /**\r\n * @param {string} name\r\n * @param {string} value\r\n * @returns {undefined}\r\n * @see https://xhr.spec.whatwg.org/#dom-xmlhttprequest-setrequestheader\r\n */\r\n global.XMLHttpRequest.prototype.setRequestHeader = function (name, value) {\r\n setRequestHeader.call(this, name, value)\r\n if (name.toLowerCase() === 'content-type') this._hasContentType = true\r\n }\r\n\r\n /**\r\n * @param {ArrayBuffer|ArrayBufferView|Blob|Document|FormData|string=} data\r\n * @return {undefined}\r\n * @see https://xhr.spec.whatwg.org/#the-send()-method\r\n */\r\n global.XMLHttpRequest.prototype.send = function (data) {\r\n // need to patch send b/c old IE don't send blob's type (#44)\r\n if (data instanceof FormDataPolyfill) {\r\n const blob = data['_blob']()\r\n if (!this._hasContentType) this.setRequestHeader('Content-Type', blob.type)\r\n _send.call(this, blob)\r\n } else {\r\n _send.call(this, data)\r\n }\r\n }\r\n }\r\n\r\n // Patch fetch's function to call _blob transparently\r\n if (_fetch) {\r\n const _fetch = global.fetch\r\n\r\n global.fetch = function (input, init) {\r\n if (init && init.body && init.body instanceof FormDataPolyfill) {\r\n init.body = init.body['_blob']()\r\n }\r\n\r\n return _fetch.call(this, input, init)\r\n }\r\n }\r\n\r\n // Patch navigator.sendBeacon to use native FormData\r\n if (_sendBeacon) {\r\n global.navigator.sendBeacon = function (url, data) {\r\n if (data instanceof FormDataPolyfill) {\r\n data = data['_asNative']()\r\n }\r\n return _sendBeacon.call(this, url, data)\r\n }\r\n }\r\n\r\n global['FormData'] = FormDataPolyfill\r\n}\r\n","import $ from 'jquery';\r\n\r\n/**\r\n * User level ID validator\r\n */\r\nexport function userLevelId(el) {\r\n if (el && !ew.checkInteger(el.value))\r\n return { userLevelId: ew.language.phrase(\"UserLevelIDInteger\") };\r\n var level = parseInt(el.value, 10);\r\n if (level < 1)\r\n return { userLevelId: ew.language.phrase(\"UserLevelIDIncorrect\") };\r\n return false;\r\n}\r\n\r\n/**\r\n * User level name validator\r\n * @param {string} id User ID Field input element ID\r\n */\r\nexport function userLevelName(id) {\r\n return function(el) {\r\n let elId = document.getElementById(\"x_\" + id);\r\n if (elId && el) {\r\n let name = el.value.trim(),\r\n level = parseInt(elId.value.trim(), 10);\r\n if (level === 0 && !ew.sameText(name, \"Default\")) {\r\n return { userLevelName: ew.language.phrase(\"UserLevelDefaultName\") };\r\n } else if (level === -1 && !ew.sameText(name, \"Administrator\")) {\r\n return { userLevelName: ew.language.phrase(\"UserLevelAdministratorName\") };\r\n } else if (level === -2 && !ew.sameText(name, \"Anonymous\")) {\r\n return { userLevelName: ew.language.phrase(\"UserLevelAnonymousName\") };\r\n } else if (level > 0 && [\"anonymous\", \"administrator\", \"default\"].includes(name.toLowerCase())) {\r\n return { userLevelName: ew.language.phrase(\"UserLevelNameIncorrect\") };\r\n }\r\n }\r\n return false;\r\n };\r\n}\r\n\r\n/**\r\n * Required validator\r\n */\r\nexport function required(fieldName) {\r\n return function(el) {\r\n let $el = $(el),\r\n $p = $el.closest(\"#r_\" + $el.data(\"field\")?.substr(2)); // Find the row\r\n if (!$p[0])\r\n $p = $el.closest(\"[id^=el]\"); // Find the span\r\n if ($p.css(\"display\") == \"none\") { // Hidden by .visible()\r\n return false;\r\n }\r\n if (el && !ew.hasValue(el)) {\r\n return { required: ew.language.phrase(\"EnterRequiredField\").replace(\"%s\", fieldName) };\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * File required validator\r\n */\r\nexport function fileRequired(fieldName) {\r\n return function(el) {\r\n let elFn = document.getElementById(\"fn_\" + el.id);\r\n if (elFn && !ew.hasValue(elFn)) {\r\n return { fileRequired: ew.language.phrase(\"EnterRequiredField\").replace(\"%s\", fieldName) };\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Mismatch password validator\r\n */\r\nexport function mismatchPassword(el) {\r\n let id;\r\n if (el.id.startsWith(\"c_\")) // Confirm Password field in Register page\r\n id = el.id.replace(/^c_/, \"x_\");\r\n else if (el.id == \"cpwd\") // Change Password page\r\n id = \"npwd\";\r\n let elPwd = document.getElementById(id);\r\n if (el.value !== elPwd.value) {\r\n return { mismatchPassword: ew.language.phrase(\"MismatchPassword\") };\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Between validator\r\n */\r\nexport function between(el) {\r\n let x, z;\r\n if (el.id.startsWith(\"y_\")) {\r\n x = document.getElementById(el.id.replace(/^y_/, \"x_\"));\r\n z = document.getElementById(el.id.replace(/^y_/, \"z_\"));\r\n }\r\n if (ew.hasValue(x) && $(z).val() == \"BETWEEN\" && !ew.hasValue(el)) {\r\n return { between: ew.language.phrase(\"EnterValue2\") };\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Password strength validator\r\n */\r\nexport function passwordStrength(el) {\r\n let $el = $(el);\r\n if (!ew.isMaskedPassword(el) && $el.hasClass(\"ew-password-strength\") && !$el.data(\"validated\")) {\r\n return { passwordStrength: ew.language.phrase(\"PasswordTooSimple\") };\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * User name validator\r\n */\r\nexport function username(raw) {\r\n return function(el) {\r\n if (!raw && el.value.match(new RegExp('[' + ew.escapeRegExChars(ew.INVALID_USERNAME_CHARACTERS) + ']')))\r\n return { username: ew.language.phrase(\"InvalidUsernameChars\") };\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Password validator\r\n */\r\nexport function password(raw) {\r\n return function(el) {\r\n if (!raw && !ew.ENCRYPTED_PASSWORD && el.value.match(new RegExp('[' + ew.escapeRegExChars(ew.INVALID_PASSWORD_CHARACTERS) + ']')))\r\n return { password: ew.language.phrase(\"InvalidPasswordChars\") };\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Email validator\r\n */\r\nexport function email(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkEmail(value)) {\r\n return { email: ew.language.phrase(\"IncorrectEmail\") };\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Emails validator\r\n */\r\nexport function emails(cnt, err) {\r\n return function(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkEmails(value, cnt)) {\r\n return { email: err };\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * DateTime validator\r\n * @param {number} dateFormat DateTime format ID\r\n */\r\nexport function datetime(dateFormat) {\r\n return function(el) {\r\n let fn,\r\n phraseId,\r\n value = ew.getValue(el),\r\n newSubStr = ew.DATE_SEPARATOR;\r\n if ([12, 15, 115].includes(dateFormat)) {\r\n fn = ew.checkShortDate;\r\n phraseId = \"IncorrectShortDateYMD\";\r\n } else if ([5, 9, 109].includes(dateFormat)) {\r\n fn = ew.checkDate;\r\n phraseId = \"IncorrectDateYMD\";\r\n } else if ([14, 17, 117].includes(dateFormat)) {\r\n fn = ew.checkShortEuroDate;\r\n phraseId = \"IncorrectShortDateDMY\";\r\n } else if ([7, 11, 111].includes(dateFormat)) {\r\n fn = ew.checkEuroDate;\r\n phraseId = \"IncorrectDateDMY\";\r\n } else if ([13, 16, 116].includes(dateFormat)) {\r\n fn = ew.checkShortUSDate;\r\n phraseId = \"IncorrectShortDateMDY\";\r\n } else if ([6, 10, 110].includes(dateFormat)) {\r\n fn = ew.checkUSDate;\r\n phraseId = \"IncorrectDateMDY\";\r\n } else { // Default date format\r\n fn = ew.checkDateDef;\r\n phraseId = \"IncorrectDate\";\r\n newSubStr = ew.DATE_FORMAT;\r\n }\r\n if (fn && !fn(value)) {\r\n return { datetime: ew.language.phrase(phraseId).replace(/%s/g, newSubStr) };\r\n }\r\n return false;\r\n };\r\n}\r\n\r\n/**\r\n * Time validator\r\n */\r\nexport function time(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkTime(value)) {\r\n return { time: ew.language.phrase(\"IncorrectTime\") };\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Float validator\r\n */\r\nexport function float(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkNumber(value)) {\r\n return { time: ew.language.phrase(\"IncorrectFloat\") };\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Range validator\r\n * @param {number} min Min value\r\n * @param {number} max Max value\r\n */\r\nexport function range(min, max) {\r\n return function(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkRange(value, min, max)) {\r\n return { range: ew.language.phrase(\"IncorrectRange\").replace(\"%1\", min).replace(\"%2\", max) };\r\n }\r\n return false;\r\n };\r\n}\r\n\r\n/**\r\n * Integer validator\r\n */\r\nexport function integer(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkInteger(value)) {\r\n return { integer: ew.language.phrase(\"IncorrectInteger\") };\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * US phone validator\r\n */\r\nexport function phone(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkPhone(value)) {\r\n return { phone: ew.language.phrase(\"IncorrectPhone\") };\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * US ZIP validator\r\n */\r\nexport function zip(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkZip(value)) {\r\n return { zip: ew.language.phrase(\"IncorrectZip\") };\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Credit card validator\r\n */\r\nexport function creditCard(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkCreditCard(value)) {\r\n return { creditCard: ew.language.phrase(\"IncorrectCreditCard\") };\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * US SSN validator\r\n */\r\nexport function ssn(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkSsn(value)) {\r\n return { ssn: ew.language.phrase(\"IncorrectSSN\") };\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * GUID validator\r\n */\r\nexport function guid(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkGuid(value)) {\r\n return { guid: ew.language.phrase(\"IncorrectGUID\") };\r\n }\r\n return false;\r\n}\r\n/**\r\n * Regular expression validator\r\n * @param {string} pattern Regular expression pattern\r\n */\r\nexport function regex(pattern) {\r\n return function(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkByRegEx(value, pattern)) {\r\n return { regex: ew.language.phrase(\"IncorrectField\") };\r\n }\r\n return false;\r\n };\r\n}\r\n\r\n/**\r\n * Custom validator\r\n * @param {*} fn Function(value, ...args)\r\n * @param {...any} args Additional arguments for the function\r\n */\r\nexport function custom(fn, ...args) {\r\n return function(el) {\r\n if (typeof fn == \"function\") {\r\n let value = ew.getValue(el);\r\n if (fn(value, ...args))\r\n return { custom: ew.language.phrase(\"IncorrectField\") };\r\n }\r\n return false;\r\n };\r\n}\r\n\r\n/**\r\n * Captcha validator\r\n */\r\nexport function captcha(el) {\r\n if (el && !ew.hasValue(el)) {\r\n return { captcha: ew.language.phrase(\"EnterValidateCode\") };\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * reCaptcha validator\r\n * @param {number} id reCaptcha ID\r\n */\r\nexport function recaptcha(el) {\r\n if (el && !ew.hasValue(el) && grecaptcha?.getResponse(el.dataset.id) === \"\") {\r\n return { recaptcha: ew.language.phrase(\"ClickReCaptcha\") };\r\n }\r\n return false;\r\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nmodule.exports = _inheritsLoose;","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;","import $ from 'jquery';\r\n\r\n// Form class\r\nexport default function FormBase(id, pageId) {\r\n var self = this;\r\n\r\n this._initiated = false;\r\n this.id = id; // Same ID as the form\r\n this.pageId = pageId;\r\n this.$element = null; // jQuery object of the form or div\r\n this.htmlForm = null; // HTML form element\r\n this.initSearchPanel = false; // Expanded by default\r\n this.modified = false;\r\n this.validateRequired = true;\r\n this.validate = null;\r\n this.emptyRow = null; // Check empty row\r\n this.multiPage = null; // Multi-page\r\n this.autoSuggests = {}; // AutoSuggests\r\n this.lists = {}; // Dynamic selection lists\r\n\r\n // Disable form\r\n this.disableForm = function() {\r\n var form = this.getForm();\r\n $(form).find(\":submit:not(.dropdown-toggle)\").prop(\"disabled\", true).addClass(\"disabled\");\r\n }\r\n\r\n // Enable form\r\n this.enableForm = function() {\r\n var form = this.getForm(),\r\n $form = $(form);\r\n $form.find(\".ew-disabled-element\").removeClass(\"ew-disabled-element\").prop(\"disabled\", false);\r\n $form.find(\".ew-enabled-element\").removeClass(\"ew-enabled-element\").prop(\"disabled\", true);\r\n $form.find(\":submit:not(.dropdown-toggle)\").prop(\"disabled\", false).removeClass(\"disabled\");\r\n }\r\n\r\n // Append hidden element with form name\r\n this.appendHidden = function(el) {\r\n var form = this.getForm(), $form = $(form), $dp = $(el).closest(\".ew-form\"), name = $dp.attr(\"id\") + \"$\" + el.name;\r\n if ($form.find(\"input:hidden[name='\" + name + \"']\")[0]) // Already appended\r\n return;\r\n var ar = $dp.find('[name=\"' + el.name + '\"]').serializeArray();\r\n if (ar.length) {\r\n ar.forEach(function(o, i) {\r\n $('<input type=\"hidden\" name=\"' + name + '\">').val(o.value).appendTo($form);\r\n });\r\n } else {\r\n $('<input type=\"hidden\" name=\"' + name + '\">').val(\"\").appendTo($form);\r\n }\r\n }\r\n\r\n // Can submit\r\n this.canSubmit = function() {\r\n var form = this.getForm(),\r\n $form = $(form);\r\n this.disableForm();\r\n this.updateTextArea();\r\n if (!this.validate || this.validate() && !$form.find(\".is-invalid\")[0]) {\r\n $form.find(\"input[name^=sv_], input[name^=p_], .ew-template input\") // Do not submit these values\r\n .prop(\"disabled\", true)\r\n .addClass(\"ew-disabled-element\");\r\n $form.find(\"[data-readonly=1][disabled]\")\r\n .prop(\"disabled\", false)\r\n .addClass(\"ew-enabled-element\"); // Submit readonly values\r\n var $dps = $($form.find(\"input[name='detailpage']\").map(function(i, el) {\r\n return $form.find(\"#\" + el.value).get();\r\n }));\r\n if ($dps.length > 1) { // Multiple Master/Detail, check element names\r\n $dps.each(function(i, dp) {\r\n $(dp).find(\":input\").each(function(j, el) {\r\n if (/^(fn_)?(x|o)\\d*_/.test(el.name)) {\r\n var $els = $dps.not(dp).find(\":input[name='\" + el.name + \"']\");\r\n if ($els.length) { // Elements with same name found\r\n self.appendHidden(el); // Append element with form name\r\n $els.each(function() {\r\n self.appendHidden(this); // Append elements with same name and form name\r\n });\r\n }\r\n }\r\n });\r\n });\r\n }\r\n return true;\r\n } else {\r\n this.enableForm();\r\n }\r\n return false;\r\n }\r\n\r\n // Submit\r\n this.submit = async function(e, action) {\r\n var form = this.getForm();\r\n if (this.canSubmit()) {\r\n if (action)\r\n form.action = action;\r\n let args = { f: this, form: form, result: true };\r\n $(form).trigger(\"beforesubmit\", [args]);\r\n let result = await args.result; // Support Promise\r\n if ($.isBoolean(result) && result || $.isObject(result) && result.value) // Support Swal.fire()\r\n form.submit();\r\n } else {\r\n this.enableForm();\r\n }\r\n }\r\n\r\n // Get dynamic selection list by element name or id\r\n this.getList = function(name) {\r\n name = name.replace(/^(sv_)?[xy](\\d*|\\$rowindex\\$)_|\\[\\]$/g, \"\"); // Remove element name prefix/suffix\r\n return this.lists[name];\r\n }\r\n\r\n // Compile templates\r\n this.compileTemplates = function() {\r\n let lists = Object.values(this.lists);\r\n for (let list of lists) {\r\n if (list.template && $.isString(list.template))\r\n list.template = $.templates(list.template);\r\n }\r\n }\r\n\r\n // Get the HTML form element\r\n this.getForm = function() {\r\n if (!this.htmlForm) {\r\n this.$element = $(\"#\" + this.id);\r\n if (this.$element.is(\"form\")) { // HTML form\r\n this.htmlForm = this.$element[0];\r\n } else if (this.$element.is(\"div\")) { // HTML div => Grid page\r\n this.htmlForm = this.$element.closest(\"form\")[0];\r\n }\r\n }\r\n return this.htmlForm;\r\n }\r\n\r\n // Get form element as single element\r\n this.getElement = function(name) {\r\n if (!this.$element)\r\n this.$element = $(\"#\" + this.id);\r\n return (name) ? ew.getElement(name, this.$element) : this.$element[0];\r\n }\r\n\r\n // Get form element(s) as single element or array of radio/checkbox\r\n this.getElements = function(name) {\r\n if (!this.$element)\r\n this.$element = $(\"#\" + this.id);\r\n var selector = \"[name='\" + name + \"']\";\r\n selector = \"input\" + selector + \",select\" + selector + \",textarea\" + selector + \",button\" + selector;\r\n var $els = this.$element.find(selector);\r\n return ($els.length == 0) ? null : ($els.length == 1 && $els.is(\":not([type=checkbox]):not([type=radio])\")) ? $els[0] : $els.get();\r\n }\r\n\r\n // Update selection lists\r\n // @param {(null|undefined|number)*} rowindex Row index\r\n this.updateLists = function(rowindex) {\r\n if (rowindex === null) // rowindex == $rowindex$ == null\r\n return;\r\n if (!$.isNumber(rowindex) && this.pageId == \"grid\")\r\n return;\r\n var form = this.getForm(), // Set up $element and htmlForm\r\n confirm = form.querySelector(\"input#confirm\");\r\n if (confirm && confirm.value == \"confirm\") { // Confirm page\r\n ew.removeSpinner();\r\n return;\r\n }\r\n var fixId = (id, multiple) => {\r\n var t = \"\",\r\n i = rowindex,\r\n ar = id.split(\" \");\r\n if (ar.length > 1) {\r\n t = ar[0];\r\n i = \"\";\r\n id = ar[1];\r\n }\r\n let prefix = $.isNumber(i) ? \"x\" + i + \"_\" : \"x_\"; // Add row index\r\n if (id.startsWith(\"x_\")) // Field element name\r\n id = id.replace(/^x_/, prefix);\r\n else // Field var\r\n id = prefix + id;\r\n if (multiple && !id.endsWith(\"[]\")) // Add [] if select-multiple\r\n id += \"[]\";\r\n return t ? t + \" \" + id : id;\r\n };\r\n var selector = Object.entries(this.lists).map(([id, list]) => {\r\n return \"[name='\" + fixId(id, list.multiple) + \"']\";\r\n }).join();\r\n if (!selector || !form.querySelector(selector)) { // Lists not found\r\n ew.removeSpinner();\r\n return;\r\n }\r\n var actions = [],\r\n promises = [];\r\n this.compileTemplates(); // For grid where updateList() called before init()\r\n for (let [id, list] of Object.entries(this.lists)) {\r\n let parents = list.parentFields.slice().map(parent => fixId(parent)), // Clone and fix index\r\n ajax = list.ajax;\r\n id = fixId(id, list.multiple);\r\n if ($.isBoolean(ajax)) { // Ajax\r\n let pvalues = parents.map(parent => ew.getOptionValues(parent, form)); // Save the initial values of the parent lists\r\n actions.push([id, pvalues, ajax, false]);\r\n } else { // Non-Ajax\r\n ew.updateOptions.call(this, id, parents, null, false);\r\n }\r\n }\r\n // Update the Ajax lists\r\n for (var i = 0; i < actions.length; i++) {\r\n promises.push(new Promise(function(resolve, reject) {\r\n setTimeout(function() {\r\n resolve(ew.updateOptions.apply(self, actions.shift()));\r\n }, ew.AJAX_DELAY * i); // Delay a little in case of large number of lists\r\n }));\r\n }\r\n Promise.all(promises).then(function() {\r\n $(document).trigger(\"updatedone\", [{source: self, target: form}]);\r\n }).catch(function(error) {\r\n console.log(error);\r\n });\r\n }\r\n\r\n // Create AutoSuggest\r\n this.createAutoSuggest = function(settings) {\r\n var options = Object.assign({\r\n limit: ew.AUTO_SUGGEST_MAX_ENTRIES,\r\n form: this\r\n }, ew.autoSuggestSettings, settings); // Global settings + field specific settings\r\n self.autoSuggests[settings.id] = new ew.AutoSuggest(options);\r\n }\r\n\r\n // Init editors\r\n this.initEditors = function() {\r\n var form = this.getForm();\r\n $(form.elements).filter(\"textarea.editor\").each(function(i, el) {\r\n var ed = $(el).data(\"editor\");\r\n if (ed && !ed.active && !ed.name.includes(\"$rowindex$\"))\r\n ed.create();\r\n });\r\n }\r\n\r\n // Update textareas\r\n this.updateTextArea = function(name) {\r\n var form = this.getForm();\r\n $(form.elements).filter(\"textarea.editor\").each(function(i, el) {\r\n var ed = $(el).data(\"editor\");\r\n if (!ed || name && ed.name != name)\r\n return true; // Continue\r\n ed.save();\r\n if (name)\r\n return false; // Break\r\n });\r\n }\r\n\r\n // Destroy editor(s)\r\n this.destroyEditor = function(name) {\r\n var form = this.getForm();\r\n $(form.elements).filter(\"textarea.editor\").each(function(i, el) {\r\n var ed = $(el).data(\"editor\");\r\n if (!ed || name && ed.name != name)\r\n return true; // Continue\r\n ed.destroy();\r\n if (name)\r\n return false; // Break\r\n });\r\n }\r\n\r\n // Show error message\r\n this.onError = function(el, msg) {\r\n return ew.onError(this, el, msg);\r\n }\r\n\r\n // Init file upload\r\n this.initUpload = function() {\r\n var form = this.getForm();\r\n $(form.elements).filter(\"input:file:not([name*='$rowindex$'],[id='importfiles'])\").each(function(index) {\r\n $.later(ew.AJAX_DELAY * index, null, ew.upload, this); // Delay a little in case of large number of upload fields\r\n });\r\n }\r\n\r\n // Set up filters\r\n this.setupFilters = function(e, filters) {\r\n var id = this.id, data = this.filterList ? this.filterList.data : null, $sf = $(\".ew-save-filter[data-form=\" + id + \"]\").toggleClass(\"disabled\", !data),\r\n $df = $(\".ew-delete-filter[data-form=\" + id + \"]\").toggleClass(\"disabled\", !filters.length).toggleClass(\"dropdown-toggle\", !!filters.length),\r\n $delete = $df.parent(\"li\").toggleClass(\"dropdown-submenu dropdown-hover\", !!filters.length).toggleClass(\"disabled\", !filters.length),\r\n $save = $sf.parent(\"li\").toggleClass(\"disabled\", !data),\r\n $btn = $(e.target);\r\n var saveFilters = function(id, filters) {\r\n if (ew.SEARCH_FILTER_OPTION == \"Client\") {\r\n window.localStorage.setItem(id + \"_filters\", JSON.stringify(filters));\r\n } else if (ew.SEARCH_FILTER_OPTION == \"Server\") {\r\n var $body = $(\"body\");\r\n $body.css(\"cursor\", \"wait\");\r\n $.ajax(ew.currentPage(), {\r\n type: \"POST\",\r\n dataType: \"json\",\r\n data: { \"ajax\": \"savefilters\", \"filters\": JSON.stringify(filters) }\r\n }).done(function(result) {\r\n if (result[0] && result[0].success)\r\n self.filterList.filters = filters; // Save filters\r\n }).always(function() {\r\n $body.css(\"cursor\", \"default\");\r\n });\r\n }\r\n }\r\n $save.off(\"click.ew\").on(\"click.ew\", function(e) { // Save filter\r\n if ($save.hasClass(\"disabled\"))\r\n return false;\r\n ew.prompt(ew.language.phrase(\"EnterFilterName\"), (name) => {\r\n name = ew.sanitize(name);\r\n if (name) {\r\n filters.push([name, data]);\r\n saveFilters(id, filters);\r\n }\r\n }, true);\r\n }).prevAll().remove();\r\n $df.next(\"ul.dropdown-menu\").remove();\r\n if (filters.length) {\r\n var $submenu = $(\"<ul class='dropdown-menu'></ul>\");\r\n for (var i in filters) {\r\n if (!Array.isArray(filters[i]))\r\n continue;\r\n $('<li><a class=\"dropdown-item\" data-index=\"' + i + '\" href=\"#\" onclick=\"return false;\">' + filters[i][0] + '</a></li>').on(\"click\", function(e) { // Delete\r\n var i = $(this).find(\"a[data-index]\").data(\"index\");\r\n ew.prompt(ew.language.phrase(\"DeleteFilterConfirm\").replace(\"%s\", filters[i][0]), (result) => {\r\n if (result) {\r\n filters.splice(i, 1);\r\n saveFilters(id, filters);\r\n }\r\n });\r\n }).appendTo($submenu);\r\n $('<li><a class=\"dropdown-item ew-filter-list\" data-index=\"' + i + '\" href=\"#\" onclick=\"return false;\">' + filters[i][0] + '</a></li>').insertBefore($save).on(\"click\", function(e) {\r\n var i = $(this).find(\"a[data-index]\").data(\"index\");\r\n $(\"<form>\").attr({method: \"post\", action: ew.currentPage()})\r\n .append($(\"<input type='hidden'>\").attr({name: \"cmd\", value: \"resetfilter\"}),\r\n $(\"<input type='hidden'>\").attr({name: ew.TOKEN_NAME_KEY, value: ew.TOKEN_NAME}), // PHP\r\n $(\"<input type='hidden'>\").attr({name: ew.ANTIFORGERY_TOKEN_KEY, value: ew.ANTIFORGERY_TOKEN}), // PHP\r\n $(\"<input type='hidden'>\").attr({name: \"filter\", value: JSON.stringify(filters[i][1])}))\r\n .appendTo(\"body\").trigger(\"submit\");\r\n });\r\n }\r\n $(\"<li class='dropdown-divider'></li>\").insertBefore($save);\r\n $delete.append($submenu);\r\n }\r\n }\r\n\r\n // Init form\r\n this.init = function() {\r\n if (this._initiated)\r\n return;\r\n\r\n // Filters button\r\n if (ew.SEARCH_FILTER_OPTION == \"Client\" && window.localStorage || ew.SEARCH_FILTER_OPTION == \"Server\" && ew.IS_LOGGEDIN && !ew.IS_SYS_ADMIN && ew.CURRENT_USER_NAME != \"\") {\r\n $(\".ew-filter-option.\" + this.id + \" .ew-btn-dropdown\").on(\"show.bs.dropdown\", function(e) {\r\n var filters = [];\r\n if (ew.SEARCH_FILTER_OPTION == \"Client\") {\r\n var item = window.localStorage.getItem(self.id + \"_filters\");\r\n if (item)\r\n filters = ew.parseJson(item) || [];\r\n } else if (ew.SEARCH_FILTER_OPTION == \"Server\")\r\n filters = self.filterList && self.filterList.filters ? self.filterList.filters : [];\r\n var ar = $.grep(filters, function(val) {\r\n if (Array.isArray(val) && val.length == 2)\r\n return val;\r\n });\r\n self.setupFilters(e, ar);\r\n });\r\n $(\".ew-filter-option\").show();\r\n } else {\r\n $(\".ew-filter-option\").hide();\r\n }\r\n\r\n // Check form\r\n var form = this.getForm(),\r\n $form = $(form);\r\n if (!form)\r\n return;\r\n\r\n // Compile templates\r\n this.compileTemplates();\r\n\r\n // Check if Search panel\r\n var isSearch = /s(ea)?rch$/.test(this.id);\r\n\r\n // Search panel\r\n if (isSearch && this.initSearchPanel && !ew.hasFormData(form))\r\n $(\"#\" + this.id + \"-search-panel\").removeClass(\"show\");\r\n\r\n // Search panel toggle\r\n $(\".ew-search-toggle[data-form=\" + this.id + \"]\").on(\"click.bs.button\", function() {\r\n $(\"#\" + $(this).data(\"form\") + \"-search-panel\").collapse(\"toggle\");\r\n });\r\n\r\n // Hide search operator column\r\n if (!$(\".ew-table .ew-search-operator\").text().trim())\r\n $(\".ew-table .ew-search-operator\").parent(\"td\").hide();\r\n\r\n // Highlight button\r\n if (isSearch) {\r\n $(\".ew-highlight[data-form=\" + this.id + \"]\").on(\"click.bs.button\", function() {\r\n $(\"span.\" + $(this).data(\"name\")).toggleClass(\"ew-highlight-search\");\r\n });\r\n }\r\n\r\n // Search operators\r\n if (isSearch) { // Search form\r\n $form.find(\"select[id^=z_]\").each(function() {\r\n var $this = $(this).trigger(\"change\");\r\n if ($this.val() != \"BETWEEN\")\r\n $form.find(\"#w_\" + this.id.substr(2)).trigger(\"change\");\r\n });\r\n }\r\n\r\n // Multi-page\r\n if (this.multiPage)\r\n this.multiPage.render();\r\n\r\n // HTML editors\r\n loadjs.ready([\"editor\"], this.initEditors.bind(this));\r\n\r\n // Dynamic selection lists\r\n this.updateLists();\r\n\r\n // Init file upload\r\n this.initUpload();\r\n\r\n // Submit/Cancel\r\n if (this.$element.is(\"form\")) { // Not Grid page\r\n // Detail pages\r\n this.$element.find(\".ew-detail-pages .ew-nav-tabs a[data-toggle=tab]\").on(\"shown.bs.tab\", function(e) {\r\n var $tab = $(e.target.getAttribute(\"href\")),\r\n $panel = $tab.find(\".table-responsive.ew-grid-middle-panel\"),\r\n $container = $tab.closest(\".container-fluid\");\r\n if ($panel.width() >= $container.width())\r\n $panel.width($container.width() + \"px\");\r\n else\r\n $panel.width(\"auto\");\r\n });\r\n $form.on(\"submit\", function(e) { // Bind submit event\r\n self.submit(e);\r\n return false; // Disable normal submission\r\n });\r\n $form.find(\"[data-field], .ew-priv\").on(\"change\", function() {\r\n if (ew.CONFIRM_CANCEL)\r\n self.modified = true;\r\n });\r\n $form.find(\"#btn-cancel[data-href]\").on(\"click\", function() { // Cancel\r\n self.updateTextArea();\r\n var href = $(this).data(\"href\");\r\n if (self.modified && ew.hasFormData(form)) {\r\n ew.prompt(ew.language.phrase(\"ConfirmCancel\"), (result) => {\r\n if (result) {\r\n $form.find(\"#btn-action\").prop(\"disabled\", true); // Disable the save button\r\n window.location = href;\r\n }\r\n });\r\n } else {\r\n $form.find(\"#btn-action\").prop(\"disabled\", true); // Disable the save button\r\n window.location = href;\r\n }\r\n });\r\n }\r\n\r\n this._initiated = true;\r\n\r\n // Store form object as data\r\n this.$element.data(\"form\", this);\r\n }\r\n\r\n // Add to the global forms object\r\n ew.forms.add(this);\r\n}","/**\r\n * Class Field\r\n */\r\nexport default class Field {\r\n name = \"\";\r\n validators = [];\r\n _error;\r\n _element;\r\n _checkbox;\r\n _validate = true;\r\n list;\r\n invalid;\r\n\r\n /**\r\n * Constructor\r\n * @param {string} fldvar Field variable name\r\n * @param {Function[]|Function} validators Validators\r\n * @param {bool} invalid Initial valid status (e.g. server side)\r\n */\r\n constructor(fldvar, validators, invalid) {\r\n this.name = fldvar;\r\n if (Array.isArray(validators)) {\r\n for (let validator of validators)\r\n this.addValidator(validator);\r\n } else if (typeof validators === \"function\") {\r\n this.addValidator(validators);\r\n }\r\n this.invalid = invalid;\r\n }\r\n\r\n /**\r\n * Add validator\r\n * @param {Function} validator Validator function\r\n */\r\n addValidator(validator) {\r\n if (typeof validator === \"function\")\r\n this.validators.push(validator);\r\n }\r\n\r\n /**\r\n * Get error\r\n * @returns {Object}\r\n */\r\n get error() {\r\n return this._error;\r\n }\r\n\r\n /**\r\n * Add error\r\n * @param {Object} err Error\r\n */\r\n addError(err) {\r\n if (err) {\r\n let error = this._error ?? {};\r\n this._error = { ...error, ...err };\r\n this.invalid = true;\r\n }\r\n }\r\n\r\n /**\r\n * Clear all errors\r\n */\r\n clearErrors() {\r\n this._error = null;\r\n this.invalid = false;\r\n }\r\n\r\n /**\r\n * Clear all validators\r\n */\r\n clearValidators() {\r\n this.validators = [];\r\n }\r\n\r\n /**\r\n * Get error message\r\n * @returns {string} HTML\r\n */\r\n get errorMessage() {\r\n if (this._error) {\r\n return Array.from(Object.values(this._error)).join(\"<br>\");\r\n }\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Check if the field should be validated\r\n */\r\n get shouldValidate() {\r\n return !this._checkbox || this._checkbox.checked;\r\n }\r\n\r\n /**\r\n * Set form element\r\n */\r\n set element(el) {\r\n this._element = el;\r\n this._checkbox = this._element?.id?.match(/^[xy]_/) ? document.getElementById(this._element.id.replace(/^[xy]_/, \"u_\")) : null; // Find the checkbox for the field in Update page\r\n }\r\n\r\n /**\r\n * Get form element\r\n * @returns {HTMLElement|HTMLElement[]}\r\n */\r\n get element() {\r\n return this._element;\r\n }\r\n\r\n /**\r\n * Get field value from form element\r\n * @returns {string|Array}\r\n */\r\n get value() {\r\n return this._element ? ew.getValue(this._element) : \"\";\r\n }\r\n\r\n /**\r\n * Validate field value\r\n * @returns {boolean}\r\n */\r\n validate() {\r\n let result = true;\r\n this.clearErrors(); // Reset error\r\n if (this._element && this.shouldValidate) {\r\n if (Array.isArray(this.validators)) {\r\n for (let validator of this.validators) {\r\n let err = validator(this._element);\r\n if (err !== false) {\r\n this.addError(err);\r\n result = false;\r\n }\r\n }\r\n this.updateFeedback();\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Update the error message to feedback element\r\n */\r\n updateFeedback() {\r\n let err = this.errorMessage;\r\n if (this._element && err) {\r\n jQuery(this._element).closest(\"[id^=el_], .form-group\").find(\".invalid-feedback\").html(err);\r\n ew.setInvalid(this._element);\r\n }\r\n }\r\n\r\n /**\r\n * Set focus\r\n */\r\n focus() {\r\n if (this._element)\r\n ew.setFocus(this._element);\r\n }\r\n}","import FormBase from \"./FormBase\";\r\nimport Field from \"./Field\";\r\n\r\n/**\r\n * Class Form\r\n */\r\nexport default class Form extends FormBase {\r\n row = {};\r\n fields = {};\r\n rowIndex;\r\n value;\r\n _error;\r\n\r\n /**\r\n * Constructor\r\n * @param {string} id Form ID\r\n * @param {string} pageId Page ID\r\n */\r\n constructor(id, pageId) {\r\n super(id, pageId);\r\n }\r\n\r\n /**\r\n * Add field\r\n * @param {string} fldvar Field variable name\r\n * @param {Function[]} validators Validators\r\n * @param {bool} invalid Invalid\r\n */\r\n addField(fldvar, validators, invalid) {\r\n if (!(fldvar in this.fields))\r\n this.fields[fldvar] = new Field(fldvar, validators, invalid);\r\n }\r\n\r\n /**\r\n * Get field\r\n * @param {string} fldvar Field variable name\r\n * @returns Field\r\n */\r\n getField(fldvar) {\r\n return this.fields[fldvar];\r\n }\r\n\r\n /**\r\n * Add fields by field definitions\r\n * @param {Array} fields\r\n */\r\n addFields(fields) {\r\n if (Array.isArray(fields)) {\r\n for (let field of fields) {\r\n if (Array.isArray(field)) {\r\n this.addField.apply(this, field);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Add error\r\n * @param {string} fldvar Field variable name\r\n * @param {Object} err Error\r\n */\r\n addError(fldvar, err) {\r\n if (err) {\r\n this._error = this._error ?? {};\r\n this._error[fldvar] = err;\r\n }\r\n }\r\n\r\n /**\r\n * Add custom error\r\n * @param {string} fldvar Field variable name \r\n * @param {string} msg Error message \r\n */\r\n addCustomError(fldvar, msg) {\r\n if (fldvar in this.fields) {\r\n let field = this.fields[fldvar],\r\n err = { custom: msg };\r\n field.addError(err);\r\n field.updateFeedback();\r\n this.addError(fldvar, err);\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Get error\r\n */\r\n get error() {\r\n return this._error;\r\n }\r\n\r\n /**\r\n * Set focus to the first field with error\r\n */\r\n focus() {\r\n for (let [fldvar, field] of Object.entries(this.fields)) {\r\n if (field.invalid || this._error && this._error[fldvar]) {\r\n field.focus();\r\n this.makeVisible(field.element);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Make the form visible\r\n * @param {HTMLElement} el Focused element \r\n */\r\n makeVisible(el) {\r\n if (this.multiPage) { // Multi-page\r\n this.multiPage.gotoPageByElement(el);\r\n } else if (this.$element.is(\"div\")) { // Multiple Master/Detail\r\n let $pane = this.$element.closest(\".tab-pane\");\r\n if ($pane[0] && !$pane.hasClass(\"active\"))\r\n $pane.closest(\".tabbable, .ew-nav-tabs\").find(\"a[data-toggle=tab][href='#\" + $pane.attr(\"id\") + \"']\").click();\r\n }\r\n }\r\n\r\n /**\r\n * Validate all fields of the specified row\r\n * @param {number} rowIndex Row index\r\n */\r\n validateFields(rowIndex) {\r\n this.rowIndex = rowIndex ?? \"\";\r\n this.row = {};\r\n this._error = null; // Reset\r\n let result = true;\r\n for (let field of Object.values(this.fields)) {\r\n field.element = this.getElements(`x${this.rowIndex}_${field.name}`); // Set element\r\n if (!field.element)\r\n field.element = this.getElements(`x${this.rowIndex}_${field.name}[]`); // Field with []\r\n if (!field.element)\r\n field.element = this.getElements(field.name); // Field by name directly (e.g. email form)\r\n this.row[field.name] = field.value; // Get field value\r\n if (field.element && !field.validate()) { // Invalid field value\r\n this.addError(field.name, field.error);\r\n result = false;\r\n }\r\n }\r\n // Save the field values of the row\r\n if (!this.value) {\r\n this.value = { ...this.row };\r\n } else {\r\n if (!Array.isArray(this.value))\r\n this.value = [this.value];\r\n let index = parseInt(rowIndex, 10) || 0;\r\n index = (index > 1) ? index - 1 : 0;\r\n this.value[index] = { ...this.row };\r\n }\r\n this.focus();\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Set invalid fields of the specified row\r\n * @param {number} rowIndex Row index\r\n */\r\n setInvalid(rowIndex) {\r\n this.rowIndex = rowIndex ?? \"\";\r\n for (let field of Object.values(this.fields)) {\r\n if (!field.invalid)\r\n continue;\r\n field.element = this.getElements(`x${this.rowIndex}_${field.name}`); // Set element\r\n if (!field.element)\r\n field.element = this.getElements(`x${this.rowIndex}_${field.name}[]`); // Fields with []\r\n if (!field.element)\r\n field.element = this.getElements(field.name); // Fields without prefix (e.g. email form)\r\n ew.setInvalid(field.element);\r\n }\r\n }\r\n}","import $ from 'jquery';\r\n\r\n// AjaxLookup class\r\nexport default class AjaxLookup {\r\n _isAutoSuggest = null;\r\n\r\n /**\r\n * Constructor\r\n * @param {Object} settings Settings\r\n * @param {string} settings.id - Input element ID\r\n * @param {string|Form} settings.form - Form of the input element\r\n * @param {Number} settings.limit - Options per page\r\n * @param {Object} settings.data - Data submitted by Ajax\r\n */\r\n constructor(settings) {\r\n this.elementId = settings.id; // Id\r\n this.form = settings.form; // Form\r\n if ($.isString(this.form)) // Form is string => Form id\r\n this.form = ew.forms.get(this.form);\r\n this.element = this.form.getElement(this.elementId); // Actual HTML element\r\n this.formElement = this.form.getElement(); // HTML form or DIV\r\n this.list = this.form.getList(this.elementId);\r\n let m = this.elementId.match(/^[xy](\\d*|\\$rowindex\\$)_/),\r\n rowindex = m ? m[1] : \"\";\r\n this.parentFields = this.list.parentFields.slice() // Clone\r\n .map(pf => (pf.split(\" \").length == 1) ? pf.replace(/^x_/, \"x\" + rowindex + \"_\") : pf); // Parent field in the same table, add row index\r\n this.limit = settings.limit;\r\n this.debounce = settings.debounce;\r\n this.data = settings.data;\r\n this.recordCount = 0;\r\n }\r\n\r\n /**\r\n * Is AutoSuggest\r\n */\r\n get isAutoSuggest() {\r\n if (this._isAutoSuggest === null)\r\n this._isAutoSuggest = ew.isAutoSuggest(this.element);\r\n return this._isAutoSuggest;\r\n }\r\n\r\n /**\r\n * Format display value\r\n * @param {Array} opt Option\r\n */\r\n formatResult(opt) {\r\n if (this.list.template && !this.isAutoSuggest) {\r\n return this.list.template.render(opt, ew.jsRenderHelpers);\r\n } else {\r\n return ew.displayValue(opt, this.element) || opt[0];\r\n }\r\n }\r\n\r\n /**\r\n * Generate request\r\n */\r\n generateRequest() {\r\n var data = Object.assign({}, this.data, {\r\n name: this.element.name,\r\n page: this.list.page,\r\n field: this.list.field,\r\n ajax: \"autosuggest\",\r\n language: ew.LANGUAGE_ID\r\n }, ew.getUserParams(\"#p_\" + this.elementId, this.formElement));\r\n if (this.parentFields.length > 0) {\r\n this.parentFields.forEach((pf, i) => {\r\n let arp = ew.getOptionValues(pf, this.formElement);\r\n data[\"v\" + (i + 1)] = arp.join(ew.MULTIPLE_OPTION_SEPARATOR);\r\n });\r\n }\r\n return data;\r\n }\r\n\r\n /**\r\n * Get URL\r\n */\r\n getUrl(query, start) {\r\n let params = new URLSearchParams({\r\n q: query,\r\n n: this.limit,\r\n rnd: ew.random(),\r\n start: $.isNumber(start) ? start : -1\r\n });\r\n return ew.getApiUrl(ew.API_LOOKUP_ACTION, params.toString());\r\n }\r\n\r\n /**\r\n * Prepare URL and data for sending request\r\n * @param {string} query Search term\r\n * @param {Number} start Start page\r\n */\r\n prepare(query, start) {\r\n return {\r\n url: this.getUrl(query, start),\r\n type: \"POST\",\r\n dataType: \"json\",\r\n data: this.generateRequest()\r\n };\r\n }\r\n\r\n /**\r\n * Transform options (virtual)\r\n * @param {Object[]} data Data from server\r\n */\r\n transform(data) {\r\n let results = [];\r\n if (data && data.result == \"OK\") {\r\n this.recordCount = data.totalRecordCount;\r\n results = data.records;\r\n }\r\n return results;\r\n }\r\n\r\n}\r\n","/**\r\n * Class selection list option\r\n */\r\nexport default class SelectionListOption {\r\n\r\n /**\r\n * Constructor\r\n */\r\n constructor(value, text, selected) {\r\n this.value = String(value || \"\");\r\n this.text = String(text || \"\");\r\n this.selected = !!selected;\r\n }\r\n\r\n}","import $ from 'jquery';\r\nimport SelectionListOption from './SelectionListOption';\r\nimport AjaxLookup from './AjaxLookup';\r\n\r\n// AutoSuggest class\r\nfunction AutoSuggest(settings) {\r\n AjaxLookup.call(this, settings); // Extends AjaxLookup\r\n\r\n var emptyObj = { typeahead: {} }; // Empty Auto-Suggest object\r\n\r\n if (this.elementId.includes(\"$rowindex$\"))\r\n return emptyObj;\r\n\r\n this.input = this.form.getElement(\"sv_\" + this.elementId); // User input\r\n if (!this.input)\r\n return emptyObj;\r\n\r\n var self = this,\r\n $input = $(this.input),\r\n $element = $(this.element),\r\n timer;\r\n\r\n // Properties\r\n this.minWidth = settings.minWidth;\r\n this.maxHeight = settings.maxHeight;\r\n this.highlight = settings.highlight;\r\n this.hint = settings.hint;\r\n this.minLength = settings.minLength;\r\n this.templates = Object.assign({}, settings.templates); // Clone\r\n this.trigger = settings.trigger; // For loading more results\r\n this.delay = settings.delay; // For loading more results\r\n this.debounce = settings.debounce;\r\n this.display = settings.display || \"text\";\r\n this.forceSelection = settings.forceSelect;\r\n this.$input = $input;\r\n this.$element = $element;\r\n\r\n // Save initial option\r\n if ($input.val() && $element.val())\r\n this.element.add($element.val(), $input.val(), true);\r\n\r\n // Set the selected item to the actual field\r\n this.setValue = function(v) {\r\n v = v || $input.val();\r\n let index = this.element.options.findIndex(option => option.text == v);\r\n if (index < 0) { // Not found in results\r\n if (this.forceSelection && v) { // Force selection and query not empty => error\r\n $input.typeahead(\"val\", \"\").attr(\"placeholder\", ew.language.phrase(\"ValueNotExist\")).addClass(\"is-invalid\");\r\n $element.val(\"\").trigger(\"change\");\r\n return;\r\n }\r\n } else { // Found in results\r\n this.element.options[index].selected = true;\r\n if (!/s(ea)?rch$/.test(this.formElement.id) || this.forceSelection) // Force selection or not search form\r\n v = this.element.options[index].value; // Replace the display value by Link Field value\r\n }\r\n if (v !== $element.attr(\"value\"))\r\n $element.attr(\"value\", v).trigger(\"change\"); // Set value to the actual field\r\n };\r\n\r\n // Transform suggestion\r\n this.transform = function(data) {\r\n let results = AjaxLookup.prototype.transform.call(this, data);\r\n this.element.options = results.map(item => new SelectionListOption(item.lf || item[0], self.formatResult(item)));\r\n return this.element.options;\r\n };\r\n\r\n // Get suggestions by Ajax\r\n this.source = function(query, syncResults, asyncResults) {\r\n if (timer)\r\n timer.cancel();\r\n timer = $.later(self.debounce, null, function() {\r\n self.recordCount = 0; // Reset\r\n var settings = self.prepare(query);\r\n $.ajax(settings).done(function(data) {\r\n asyncResults(self.transform(data));\r\n });\r\n });\r\n };\r\n\r\n // Get current suggestion count\r\n this.count = function() {\r\n return self.typeahead.menu.$node.find(\".tt-suggestion.tt-selectable\").length;\r\n };\r\n\r\n // Get more suggestions by Ajax\r\n this.more = function() {\r\n var $body = $(\"body\");\r\n $body.css(\"cursor\", \"wait\");\r\n var ta = self.typeahead, query = ta.menu.query, dataset = ta.menu.datasets[0];\r\n var start = self.count();\r\n var settings = self.prepare(query, start);\r\n $.ajax(settings).done(function(data) {\r\n data = self.transform(data);\r\n dataset._append(query, data);\r\n ta.menu.$node.find(\".tt-dataset\").scrollTop(dataset.$lastSuggestion.outerHeight() * start);\r\n }).always(function() {\r\n $body.css(\"cursor\", \"default\");\r\n });\r\n };\r\n\r\n // Add events\r\n $input.on(\"typeahead:select\", function(e, d) {\r\n self.setValue(d[self.display]);\r\n }).on(\"change\", function(e) {\r\n var ta = $input.data(\"tt-typeahead\");\r\n if (ta && ta.isOpen() && !ta.menu.empty()) {\r\n var $item = ta.menu.getActiveSelectable();\r\n if ($item) { // A suggestion is highlighted\r\n let i = $item.index(),\r\n val = self.element.options[i].text;\r\n $input.typeahead(\"val\", val);\r\n }\r\n }\r\n self.setValue();\r\n }).on(\"blur\", function(e) { // \"change\" fires before blur\r\n var ta = $input.data(\"tt-typeahead\");\r\n if (ta && ta.isOpen())\r\n ta.menu.close();\r\n }).on(\"focus\", function(e) {\r\n $input.attr(\"placeholder\", $input.data(\"placeholder\")).removeClass(\"is-invalid\");\r\n });\r\n\r\n // Option template (\"suggestion\" template)\r\n var tpl = self.list.template || self.templates[\"suggestion\"];\r\n if (tpl && $.isString(tpl))\r\n tpl = $.templates(tpl);\r\n if (tpl)\r\n self.templates[\"suggestion\"] = tpl.render.bind(tpl);\r\n\r\n // Save\r\n $element.data(\"autosuggest\", this);\r\n\r\n // Create Typeahead\r\n $(function() {\r\n // Typeahead options and dataset\r\n var options = {\r\n highlight: self.highlight,\r\n minLength: self.minLength,\r\n hint: self.hint,\r\n trigger: self.trigger,\r\n delay: self.delay\r\n };\r\n var dataset = {\r\n name: self.form.id + \"-\" + self.elementId,\r\n source: self.source,\r\n templates: self.templates,\r\n display: self.display,\r\n limit: self.limit,\r\n async: true\r\n };\r\n var args = [options, dataset];\r\n // Trigger \"typeahead\" event\r\n $element.trigger(\"typeahead\", [args]);\r\n self.limit = dataset.limit;\r\n // Create Typeahead\r\n $input.typeahead.apply($input, args);\r\n $input.on(\"typeahead:rendered\", function() {\r\n var $node = self.typeahead.menu.$node;\r\n var $more = $node.find(\".tt-more\").html(ew.language.phrase(\"More\"));\r\n if (arguments.length > 1 && // Arguments: event, suggestion, suggestion, ...\r\n self.recordCount > self.count()) {\r\n $more.one(options.trigger, function(e) {\r\n setTimeout(function() {\r\n self.more();\r\n }, options.delay);\r\n e.preventDefault();\r\n e.stopPropagation();\r\n });\r\n } else {\r\n $more.hide();\r\n }\r\n });\r\n $input.off(\"blur.tt\");\r\n self.typeahead = $input.data(\"tt-typeahead\");\r\n var $menu = self.typeahead.menu.$node.css(\"z-index\", 1000);\r\n if (self.minWidth)\r\n $menu.css(\"min-width\", self.minWidth);\r\n var $dataset = $menu.find(\".tt-dataset\");\r\n var maxHeight = self.maxHeight ||\r\n (parseInt($dataset.css(\"line-height\"), 10) + 6) * (dataset.limit + 1); // Match .tt-suggestion padding\r\n $dataset.css({ \"max-height\": maxHeight, \"overflow-y\": \"auto\" });\r\n });\r\n}\r\n\r\nAutoSuggest.prototype = Object.create(AjaxLookup.prototype);\r\n\r\nexport default AutoSuggest;","import $ from 'jquery';\r\n\r\n/**\r\n * Class Forms\r\n */\r\nexport default class Forms {\r\n _forms = {};\r\n\r\n /**\r\n * Get form by element or id\r\n * @param {HTMLElement|string} el Element or id\r\n */\r\n get(el) {\r\n let id = ($.isString(el)) ? el : ew.getForm(el).id;\r\n return this._forms[id];\r\n }\r\n\r\n /**\r\n * Add form\r\n * @param {Form} f Form\r\n */\r\n add(f) {\r\n this._forms[f.id] = f;\r\n }\r\n\r\n /**\r\n * Get all ids\r\n * @returns {string[]}\r\n */\r\n ids() {\r\n return Object.keys(this._forms);\r\n }\r\n\r\n}","import $ from 'jquery';\r\nimport AjaxLookup from './AjaxLookup';\r\nimport AutoSuggest from './AutoSuggest';\r\nimport Form from './Form';\r\nimport Forms from './Forms';\r\nimport Field from './Field';\r\nimport SelectionListOption from './SelectionListOption';\r\nimport getSelect2CustomOptionClass from './Select2CustomOption';\r\n\r\nexport let currentUrl = new URL(window.location);\r\nexport let forms = new Forms();\r\nexport { AjaxLookup, AutoSuggest, Form, SelectionListOption };\r\n\r\nlet $document = $(document),\r\n $body = $(\"body\");\r\n\r\n// Remove spinner (immediately)\r\nlet _removeSpinner = ew.removeSpinner;\r\n\r\n// Remove spinner\r\nexport function removeSpinner() {\r\n var timer = $body.data(\"_spinner\");\r\n if (timer)\r\n timer.cancel();\r\n timer = $.later(500, null, function() {\r\n if ($document.data(\"_ajax\") !== true) { // Ajax not running\r\n _removeSpinner();\r\n $(\"form.ew-form\").each(function() {\r\n var frm = forms.get(this.id);\r\n if (frm) {\r\n frm.focus();\r\n return false;\r\n }\r\n });\r\n }\r\n });\r\n $body.data(\"_spinner\", timer);\r\n}\r\n\r\n// Create select2\r\nexport function createSelect(options) {\r\n if (options.selectId.includes(\"$rowindex$\"))\r\n return;\r\n $.fn.select2.amd.require(\r\n [\"select2/utils\", \"select2/results\", \"select2/dropdown/infiniteScroll\", \"select2/dropdown/hidePlaceholder\", \"select2/dropdown/selectOnClose\"],\r\n (function(opts) {\r\n return function (Utils, ResultsList, InfiniteScroll, HidePlaceholder, SelectOnClose) {\r\n let options = Object.assign({}, ew.selectOptions, opts);\r\n if (options.resultsAdapter == null) {\r\n options.resultsAdapter = ResultsList;\r\n if (options.dropdown && options.columns && options.customOption) {\r\n options.resultsAdapter = Utils.Decorate(\r\n options.resultsAdapter,\r\n getSelect2CustomOptionClass(Utils)\r\n );\r\n if (options.iconClass && options.multiple && !options.templateResult) {\r\n options.templateResult = (result) => '<label class=\"' + options.iconClass + ' ew-dropdown-label\">' + result.text + '</label>';\r\n }\r\n }\r\n if (options.ajax != null) {\r\n options.resultsAdapter = Utils.Decorate(\r\n options.resultsAdapter,\r\n InfiniteScroll\r\n );\r\n }\r\n if (options.placeholder != null) {\r\n options.resultsAdapter = Utils.Decorate(\r\n options.resultsAdapter,\r\n HidePlaceholder\r\n );\r\n }\r\n if (options.selectOnClose) {\r\n options.resultsAdapter = Utils.Decorate(\r\n options.resultsAdapter,\r\n SelectOnClose\r\n );\r\n }\r\n }\r\n if ($.isObject(options.ajax)) {\r\n let lookup = new ew.AjaxLookup(options.ajax)\r\n options.ajax = {\r\n url: (params) => {\r\n let start = params.page ? (params.page - 1) * (settings.limit || ew.AUTO_SUGGEST_MAX_ENTRIES) : -1;\r\n return lookup.getUrl(params.term, start);\r\n },\r\n type: \"POST\",\r\n dataType: \"json\",\r\n data: lookup.generateRequest.bind(lookup),\r\n delay: options.debounce,\r\n processResults: (data) => {\r\n return {\r\n results: lookup.transform(data).map(item => {\r\n return {\r\n id: item.lf,\r\n text: lookup.formatResult({ lf: item.lf, df: item.df, df2: item.df2, df3: item.df3, df4: item.df4 })\r\n };\r\n }),\r\n pagination: {\r\n more: data.length < lookup.recordCount\r\n }\r\n }\r\n }\r\n };\r\n }\r\n $(\"select[data-select2-id='\" + options.selectId + \"']\").select2(options);\r\n if (options.multiple && options.minimumResultsForSearch === Infinity) {\r\n $(\"select[id='\" + options.name + \"']\").on(\"select2:opening select2:closing\", function(event) {\r\n $(this).parent().find(\".select2-search__field\").prop(\"disabled\", true);\r\n });\r\n }\r\n };\r\n })(options)\r\n );\r\n}\r\n\r\n// Init icon tooltip\r\nexport function initIcons(e) {\r\n var el = (e && e.target) ? e.target : document;\r\n $(el).find(\".ew-icon\").closest(\"a, button\").add(\".ew-tooltip\").tooltip({\r\n container: \"body\",\r\n trigger: (ew.IS_MOBILE) ? \"manual\" : \"hover\",\r\n placement: \"bottom\",\r\n sanitizeFn: ew.sanitizeFn\r\n });\r\n}\r\n\r\n// Init password options\r\nexport function initPasswordOptions(e) {\r\n var el = (e && e.target) ? e.target : document;\r\n if ($.fn.pStrength && typeof ew.MIN_PASSWORD_STRENGTH != \"undefined\") {\r\n $(el).find(\".ew-password-strength\").each(function() {\r\n var $this = $(this);\r\n if (!$this.data(\"pStrength\"))\r\n $this.pStrength({\r\n \"changeBackground\": false,\r\n \"backgrounds\": [],\r\n \"passwordValidFrom\": ew.MIN_PASSWORD_STRENGTH,\r\n \"onPasswordStrengthChanged\": function(strength, percentage) {\r\n var $this = $(this), $pst = $(\"[id='\" + $this.attr(\"data-password-strength\") + \"']\"), // Do not use #\r\n $pb = $pst.find(\".progress-bar\");\r\n $pst.width($this.outerWidth());\r\n if ($this.val() && !ew.isMaskedPassword(this)) {\r\n var pct = percentage + \"%\";\r\n if (percentage < 25) {\r\n $pb.addClass(\"bg-danger\").removeClass(\"bg-warning bg-info bg-success\");\r\n } else if (percentage < 50) {\r\n $pb.addClass(\"bg-warning\").removeClass(\"bg-danger bg-info bg-success\");\r\n } else if (percentage < 75) {\r\n $pb.addClass(\"bg-info\").removeClass(\"bg-danger bg-warning bg-success\");\r\n } else {\r\n $pb.addClass(\"bg-success\").removeClass(\"bg-danger bg-warning bg-info\");\r\n }\r\n $pb.css(\"width\", pct);\r\n if (percentage > 25)\r\n pct = ew.language.phrase(\"PasswordStrength\").replace(\"%p\", pct);\r\n $pb.html(pct);\r\n $pst.removeClass(\"d-none\").show();\r\n $this.data(\"validated\", percentage >= ew.MIN_PASSWORD_STRENGTH);\r\n } else {\r\n $pst.addClass(\"d-none\").hide();\r\n $this.data(\"validated\", null);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n if ($.fn.pGenerator) {\r\n $(el).find(\".ew-password-generator\").each(function() {\r\n var $this = $(this);\r\n if (!$this.data(\"pGenerator\"))\r\n $this.pGenerator({\r\n \"passwordLength\": ew.GENERATE_PASSWORD_LENGTH,\r\n \"uppercase\": ew.GENERATE_PASSWORD_UPPERCASE,\r\n \"lowercase\": ew.GENERATE_PASSWORD_LOWERCASE,\r\n \"numbers\": ew.GENERATE_PASSWORD_NUMBER,\r\n \"specialChars\": ew.GENERATE_PASSWORD_SPECIALCHARS,\r\n \"onPasswordGenerated\": function(pwd) {\r\n var $this = $(this);\r\n $(\"#\" + $this.attr(\"data-password-field\")).val(pwd).trigger(\"change\").trigger(\"focus\").triggerHandler(\"click\"); // Trigger click to remove \"is-invalid\" class (Do not use $this.data)\r\n $(\"#\" + $this.attr(\"data-password-confirm\")).val(pwd);\r\n $(\"#\" + $this.attr(\"data-password-strength\")).addClass(\"d-none\").hide();\r\n }\r\n });\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Get API action URL\r\n * @param {string|string[]} action Route as string or array, e.g. \"foo\", [\"foo\", \"1\"]\r\n * @param {string|string[]|object} query Search params, e.g. \"foo=1&bar=2\", [[\"foo\", \"1\"], [\"bar\", \"2\"]], {\"foo\": \"1\", \"bar\": \"2\"}\r\n */\r\nexport function getApiUrl(action, query) {\r\n var url = ew.PATH_BASE + ew.API_URL,\r\n params = new URLSearchParams(query),\r\n qs = params.toString();\r\n if ($.isString(action)) { // Route as string\r\n url += action ? action : \"\";\r\n } else if (Array.isArray(action)) { // Route as array\r\n var route = action.map(function(v) {\r\n return encodeURIComponent(v);\r\n }).join(\"/\");\r\n url += route ? route : \"\";\r\n }\r\n return url + (qs ? \"?\" + qs : \"\");\r\n}\r\n\r\n// Sanitize URL\r\nexport function sanitizeUrl(url) {\r\n var ar = url.split(\"?\"),\r\n search = ar[1];\r\n if (search) {\r\n var searchParams = new URLSearchParams(search);\r\n searchParams.forEach((value, key) => searchParams.set(key, ew.sanitize(value)));\r\n search = searchParams.toString();\r\n }\r\n return ar[0] + (search ? \"?\" + search : \"\");\r\n}\r\n\r\n// Set session timer\r\nexport function setSessionTimer() {\r\n var timeoutTime, timer, keepAliveTimer, counter,\r\n useKeepAlive = (ew.SESSION_KEEP_ALIVE_INTERVAL > 0 || ew.IS_LOGGEDIN && ew.IS_AUTOLOGIN);\r\n // Keep alive\r\n var keepAlive = () => {\r\n $.get(getApiUrl(ew.API_SESSION_ACTION), { \"rnd\": random() }, (token) => {\r\n if (token && $.isObject(token)) { // PHP\r\n ew.TOKEN_NAME = token[ew.TOKEN_NAME_KEY];\r\n ew.ANTIFORGERY_TOKEN = token[ew.ANTIFORGERY_TOKEN_KEY];\r\n if (token[\"JWT\"])\r\n ew.API_JWT_TOKEN = token[\"JWT\"];\r\n }\r\n });\r\n };\r\n // Reset timer\r\n var resetTimer = () => {\r\n counter = ew.SESSION_TIMEOUT_COUNTDOWN;\r\n timeoutTime = ew.SESSION_TIMEOUT - ew.SESSION_TIMEOUT_COUNTDOWN;\r\n if (timeoutTime < 0) { // Timeout now\r\n timeoutTime = 0;\r\n counter = ew.SESSION_TIMEOUT;\r\n }\r\n if (timer)\r\n timer.cancel(); // Clear timer\r\n };\r\n // Timeout\r\n var timeout = () => {\r\n if (keepAliveTimer)\r\n keepAliveTimer.cancel(); // Stop keep alive\r\n if (counter > 0) {\r\n let timerInterval;\r\n let message = '<p class=\"text-danger\">' + ew.language.phrase(\"SessionWillExpire\") + '</p>';\r\n if (message.includes(\"%m\") && message.includes(\"%s\")) {\r\n message = message.replace(\"%m\", '<span class=\"ew-session-counter-minute\">' + Math.floor(counter / 60) + '</span>')\r\n message = message.replace(\"%s\", '<span class=\"ew-session-counter-second\">' + (counter % 60) + '</span>')\r\n } else if (message.includes(\"%s\")) {\r\n message = message.replace(\"%s\", '<span class=\"ew-session-counter-second\">' + counter + '</span>');\r\n }\r\n Swal.fire({\r\n ...ew.sweetAlertSettings,\r\n html: message,\r\n showConfirmButton: true,\r\n confirmButtonText: ew.language.phrase(\"OKBtn\"),\r\n timer: counter * 1000,\r\n timerProgressBar: true,\r\n allowOutsideClick: false,\r\n allowEscapeKey: false,\r\n onBeforeOpen: () => {\r\n timerInterval = setInterval(() => {\r\n let content = Swal.getContent(),\r\n min = content.querySelector(\".ew-session-counter-minute\"),\r\n sec = content.querySelector(\".ew-session-counter-second\"),\r\n timeleft = Math.round(Swal.getTimerLeft() / 1000);\r\n if (min && sec) {\r\n min.textContent = Math.floor(timeleft / 60);\r\n sec.textContent = timeleft % 60;\r\n } else if (sec) {\r\n sec.textContent = timeleft;\r\n }\r\n }, 1000)\r\n },\r\n onClose: () => {\r\n clearInterval(timerInterval);\r\n }\r\n }).then((result) => {\r\n if (result.value) { // OK button pressed\r\n keepAlive();\r\n if (!useKeepAlive && ew.SESSION_TIMEOUT > 0)\r\n setTimer();\r\n } else if (result.dismiss === Swal.DismissReason.timer) { // Timeout\r\n resetTimer();\r\n window.location = sanitizeUrl(ew.TIMEOUT_URL + \"?expired=1\");\r\n }\r\n });\r\n }\r\n };\r\n // Set timer\r\n var setTimer = () => {\r\n resetTimer(); // Reset timer first\r\n timer = $.later(timeoutTime * 1000, null, timeout);\r\n };\r\n if (useKeepAlive) { // Keep alive\r\n var keepAliveInterval = (ew.SESSION_KEEP_ALIVE_INTERVAL > 0) ? ew.SESSION_KEEP_ALIVE_INTERVAL : ew.SESSION_TIMEOUT - ew.SESSION_TIMEOUT_COUNTDOWN;\r\n if (keepAliveInterval <= 0)\r\n keepAliveInterval = 60;\r\n keepAliveTimer = $.later(keepAliveInterval * 1000, null, keepAlive, null, true); // Periodic\r\n } else {\r\n if (ew.SESSION_TIMEOUT > 0) // Set session timeout\r\n setTimer();\r\n }\r\n}\r\n\r\n// Init export links\r\nexport function initExportLinks(e) {\r\n var el = (e && e.target) ? e.target : document;\r\n $(el).find(\".ew-export-link[href]:not(.ew-email):not(.ew-print):not(.ew-xml)\").on(\"click\", function(e) {\r\n var href = $(this).attr(\"href\");\r\n if (href && href != \"#\")\r\n fileDownload(href);\r\n e.preventDefault();\r\n });\r\n}\r\n\r\n// Init multi-select checkboxes\r\nexport function initMultiSelectCheckboxes(e) {\r\n var el = (e && e.target) ? e.target : document,\r\n $el = $(el),\r\n $cbs = $el.find(\"input[type=checkbox].ew-multi-select\");\r\n var _update = function(id) {\r\n var $els = $cbs.filter(\"[name^='\" + id + \"_']\"), cnt = $els.length, len = $els.filter(\":checked\").length;\r\n $els.closest(\"form\").find(\"input[type=checkbox]#\" + id)\r\n .prop(\"checked\", len == cnt).prop(\"indeterminate\", len != cnt && len != 0);\r\n };\r\n $cbs.on(\"click\", function(e) {\r\n _update(this.name.split(\"_\")[0]);\r\n });\r\n $el.find(\"input[type=checkbox].ew-priv:not(.ew-multi-select)\").each(function() {\r\n _update(this.id); // Init\r\n });\r\n}\r\n\r\n// Download file\r\nexport function fileDownload(href, data) {\r\n let win = window,\r\n jq = win.jQuery,\r\n swal = win.Swal,\r\n doc = win.document,\r\n $doc = jq(doc),\r\n method = data ? \"POST\" : \"GET\",\r\n isHtml = href.includes(\"export=html\");\r\n return swal.fire({\r\n ...ew.sweetAlertSettings,\r\n html: \"<p>\" + ew.language.phrase(\"Exporting\") + \"</p>\",\r\n allowOutsideClick: false,\r\n allowEscapeKey: false,\r\n onBeforeOpen: () => {\r\n swal.showLoading(),\r\n jq.ajax({\r\n url: href,\r\n type: method,\r\n cache: false,\r\n data: data || null,\r\n xhrFields: {\r\n responseType: isHtml ? \"text\" : \"blob\"\r\n }\r\n }).done((data, textStatus, jqXHR) => {\r\n var url = win.URL.createObjectURL(isHtml ? new Blob([data], { type: \"text/html\" }) : data),\r\n a = doc.createElement(\"a\"),\r\n cd = jqXHR.getResponseHeader(\"Content-Disposition\"),\r\n m = cd.match(/\\bfilename=((['\"])(.+)\\2|([^;]+))/i);\r\n a.style.display = \"none\";\r\n a.href = url;\r\n if (m)\r\n a.download = m[3] || m[4];\r\n doc.body.appendChild(a);\r\n a.click();\r\n $doc.trigger(\"export\", [{ \"type\": \"done\", \"url\": href, \"objectUrl\": url }]);\r\n win.URL.revokeObjectURL(url);\r\n swal.close();\r\n }).fail(() => {\r\n swal.showValidationMessage(\"<div class='text-danger'><h4>\" + ew.language.phrase(\"FailedToExport\") + \"</h4>\" + response + \"</div>\");\r\n $doc.trigger(\"export\", [{ \"type\": \"fail\", \"url\": href }]);\r\n }).always(() => {\r\n $doc.trigger(\"export\", [{ \"type\": \"always\", \"url\": href }]);\r\n });\r\n }\r\n });\r\n}\r\n\r\n// Lazy load images\r\nexport function lazyLoad(e) {\r\n if (!ew.LAZY_LOAD)\r\n return;\r\n var el = (e && e.target) ? e.target : document;\r\n $(el).find(\"img.ew-lazy\").each(function () {\r\n this.src = this.dataset.src;\r\n });\r\n $document.trigger(\"lazyload\"); // All images loaded\r\n}\r\n\r\n// Update select2 dropdown position\r\nexport function updateDropdownPosition() {\r\n var select = $(\".select2-container--open\").prev(\".ew-select\").data(\"select2\");\r\n if (select) {\r\n select.dropdown._positionDropdown();\r\n select.dropdown._resizeDropdown();\r\n }\r\n}\r\n\r\n// Colorboxes\r\nexport function initLightboxes(e) {\r\n if (!ew.USE_COLORBOX)\r\n return;\r\n var el = (e && e.target) ? e.target : document;\r\n var settings = Object.assign({}, ew.lightboxSettings, {\r\n title: ew.language.phrase(\"LightboxTitle\"),\r\n current: ew.language.phrase(\"LightboxCurrent\"),\r\n previous: ew.language.phrase(\"LightboxPrevious\"),\r\n next: ew.language.phrase(\"LightboxNext\"),\r\n close: ew.language.phrase(\"LightboxClose\"),\r\n xhrError: ew.language.phrase(\"LightboxXhrError\"),\r\n imgError: ew.language.phrase(\"LightboxImgError\")\r\n });\r\n $(el).find(\".ew-lightbox\").each(function() {\r\n var $this = $(this);\r\n $this.colorbox(Object.assign({ rel: $this.data(\"rel\") }, settings));\r\n });\r\n}\r\n\r\n// PDFObjects\r\nexport function initPdfObjects(e) {\r\n if (!ew.EMBED_PDF)\r\n return;\r\n var el = (e && e.target) ? e.target : document,\r\n options = Object.assign({}, ew.PDFObjectOptions);\r\n $(el).find(\".ew-pdfobject\").not(\":has(.pdfobject)\").each(function() { // Not already embedded\r\n var $this = $(this), url = $this.data(\"url\"), html = $this.html();\r\n if (url)\r\n PDFObject.embed(url, this, Object.assign(options, { fallbackLink: html }));\r\n });\r\n}\r\n\r\n// Tooltips and popovers\r\nexport function initTooltips(e) {\r\n var el = (e && e.target) ? e.target : document, $el = $(el);\r\n $el.find(\"input[data-toggle=tooltip],textarea[data-toggle=tooltip],select[data-toggle=tooltip]\").each(function() {\r\n var $this = $(this);\r\n $this.tooltip(Object.assign({ html: true, placement: \"bottom\", sanitizeFn: ew.sanitizeFn }, $this.data()));\r\n });\r\n $el.find(\"a.ew-tooltip-link\").each(tooltip); // Init tooltips\r\n $el.find(\".ew-tooltip\").tooltip({ placement: \"bottom\", sanitizeFn: ew.sanitizeFn });\r\n $el.find(\".ew-popover\").popover({ sanitizeFn: ew.sanitizeFn });\r\n}\r\n\r\n// Parse JSON\r\nexport function parseJson(data) {\r\n if ($.isString(data)) {\r\n try {\r\n return JSON.parse(data);\r\n } catch(e) {\r\n return undefined;\r\n }\r\n }\r\n return data;\r\n}\r\n\r\n// Change search operator\r\nexport function searchOperatorChanged(el) {\r\n var $el = $(el),\r\n $p = $el.closest(\"[id^=r_], [id^=xsc_]\"),\r\n parm = el.id.substr(2),\r\n $fld = $p.find(\".ew-search-field\"),\r\n $fld2 = $p.find(\".ew-search-field2\"),\r\n $y = $fld2.find(\"[name='y_\" + parm + \"'], [name='y_\" + parm + \"[]']\"),\r\n hasY = $y.length,\r\n $cond = $p.find(\".ew-search-cond\"),\r\n hasCond = $cond.length, // Has condition and operator 2\r\n $and = $p.find(\".ew-search-and\"),\r\n $opr = $p.find(\".ew-search-operator\"),\r\n opr = $opr.find(\"[name='z_\" + parm + \"']\").val(),\r\n $opr2 = $p.find(\".ew-search-operator2\"),\r\n opr2 = $opr2.find(\"[name='w_\" + parm + \"']\").val(),\r\n isBetween = opr == \"BETWEEN\", // Can only be operator 1\r\n isNullOpr = [\"IS NULL\", \"IS NOT NULL\"].includes(opr),\r\n isNullOpr2 = [\"IS NULL\", \"IS NOT NULL\"].includes(opr2),\r\n hideOpr2 = !hasY || isBetween,\r\n hideX = isNullOpr,\r\n hideY = !isBetween && (!hasCond || isNullOpr2);\r\n $cond.toggleClass(\"d-none\", hideOpr2).find(\":input\").prop(\"disabled\", hideOpr2);\r\n $and.toggleClass(\"d-none\", !isBetween);\r\n $opr2.toggleClass(\"d-none\", hideOpr2).find(\":input\").prop(\"disabled\", hideOpr2);\r\n $fld.toggleClass(\"d-none\", hideX).find(\":input\").prop(\"disabled\", hideX);\r\n $fld2.toggleClass(\"d-none\", hideY).find(\":input\").prop(\"disabled\", hideY);\r\n}\r\n\r\n// Init forms\r\nfunction initForms(e) {\r\n let el = (e && e.target) ? e.target : document,\r\n $el = $(el),\r\n ids = ew.forms.ids();\r\n for (let id of ids) {\r\n if ($el.find(\"#\" + id))\r\n forms.get(id).init();\r\n }\r\n}\r\n\r\n// Is function\r\nexport function isFunction(x) {\r\n return typeof x === \"function\";\r\n}\r\n\r\n// Prompt/Confirm/Alert\r\nfunction _prompt(text, cb, input, validator) {\r\n if (input) { // Prompt\r\n return Swal.fire({\r\n ...ew.sweetAlertSettings,\r\n html: text,\r\n input: \"text\",\r\n confirmButtonText: ew.language.phrase(\"OKBtn\"),\r\n showCancelButton: isFunction(cb),\r\n cancelButtonText: ew.language.phrase(\"CancelBtn\"),\r\n inputValidator: validator || ((value) => {\r\n if (!value)\r\n return ew.language.phrase(\"EnterValue\");\r\n })\r\n }).then(result => {\r\n if (isFunction(cb))\r\n cb(result.value);\r\n });\r\n } else { // Confirm or Alert\r\n return Swal.fire({\r\n ...ew.sweetAlertSettings,\r\n html: \"<div>\" + text + \"</div>\",\r\n confirmButtonText: ew.language.phrase(\"OKBtn\"),\r\n showCancelButton: isFunction(cb),\r\n cancelButtonText: ew.language.phrase(\"CancelBtn\"),\r\n }).then(result => {\r\n if (isFunction(cb))\r\n cb(result.value);\r\n });\r\n }\r\n}\r\n\r\nexport { _prompt as prompt };\r\n\r\n// Toast\r\nexport function toast(options) {\r\n options = Object.assign({}, ew.toastOptions, options);\r\n $document.Toasts(\"create\", options);\r\n var position = options.position,\r\n $container = $(\"#toastsContainer\" + position[0].toUpperCase() + position.substring(1));\r\n return $container.children().first();\r\n}\r\n\r\n/**\r\n * Show toast\r\n *\r\n * @param {string} msg - Message\r\n * @param {string} type - CSS class: \"muted|primary|success|info|warning|danger\"\r\n */\r\nexport function showToast(msg, type) {\r\n type = type || \"danger\";\r\n return toast({\r\n class: \"ew-toast bg-\" + type,\r\n title: ew.language.phrase(type),\r\n body: msg,\r\n autohide: (type == \"success\") ? ew.autoHideSuccessMessage : false, // Autohide for success message\r\n delay: (type == \"success\") ? ew.autoHideSuccessMessageDelay: 500\r\n });\r\n}\r\n\r\n// Get form.ew-form or div.ew-form HTML element\r\nexport function getForm(el) {\r\n if (el instanceof Form)\r\n return el.$element[0];\r\n var $el = $(el), $f = $el.closest(\".ew-form\");\r\n if (!$f[0]) // Element not inside form\r\n $f = $el.closest(\".ew-grid, .ew-multi-column-grid\").find(\".ew-form\").not(\".ew-pager-form\");\r\n return $f[0];\r\n}\r\n\r\n// Check form data\r\nexport function hasFormData(form) {\r\n var selector = \"[name^=x_],[name^=y_],[name^=z_],[name^=w_],[name=psearch]\",\r\n els = $(form).find(selector).filter(\":enabled\").get();\r\n for (var i = 0, len = els.length; i < len; i++) {\r\n var el = els[i];\r\n if (/^(z|w)_/.test(el.name)) {\r\n if (/^IS/.test($(el).val()))\r\n return true;\r\n } else if (el.type == \"checkbox\" || el.type == \"radio\") {\r\n if (el.checked)\r\n return true;\r\n } else if (el.type == \"select-one\" || el.type == \"select-multiple\") {\r\n if (!!$(el).val())\r\n return true;\r\n } else if (el.type == \"text\" || el.type == \"hidden\" || el.type == \"textarea\") {\r\n if (el.value)\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n// Set search type\r\nexport function setSearchType(el, val) {\r\n var $this = $(el), $form = $this.closest(\"form\"), text = \"\";\r\n $form.find(\"input[name=psearchtype]\").val(val || \"\");\r\n if (val == \"=\") {\r\n text = ew.language.phrase(\"QuickSearchExactShort\");\r\n } else if (val == \"AND\") {\r\n text = ew.language.phrase(\"QuickSearchAllShort\");\r\n } else if (val == \"OR\") {\r\n text = ew.language.phrase(\"QuickSearchAnyShort\");\r\n } else {\r\n text = ew.language.phrase(\"QuickSearchAutoShort\");\r\n }\r\n $form.find(\"#searchtype\").html(text + ((text) ? \" \" : \"\"));\r\n $this.closest(\"ul\").find(\"li\").removeClass(\"active\");\r\n $this.closest(\"li\").addClass(\"active\");\r\n return false;\r\n}\r\n\r\n/**\r\n * Update a dynamic selection list\r\n *\r\n * @param {(HTMLElement|HTMLElement[]|string|string[])} obj - Target HTML element(s) or the ID of the element(s)\r\n * @param {(string[]|array[])} parentId - Parent field element names or data\r\n * @param {(boolean|null)} async - async(true) or sync(false) or non-Ajax(null)\r\n * @param {boolean} change - Trigger onchange event\r\n * @returns\r\n */\r\nexport function updateOptions(obj, parentId, async, change) {\r\n var f = (this.$element) ? this.$element[0] : (this.form) ? this.form : null; // Get form/div element from this\r\n if (!f)\r\n return;\r\n var frm = (this.htmlForm) ? this : forms.get(f.id); // Get Form object\r\n if (!frm)\r\n return;\r\n if (this.form && $.isUndefined(obj)) // Target unspecified\r\n obj = forms.get(this).getList(this.name).childFields.slice(); // Clone\r\n else if ($.isString(obj))\r\n obj = getElements(obj, f);\r\n if (!obj || Array.isArray(obj) && obj.length == 0)\r\n return;\r\n var self = this, promise = Promise.resolve();\r\n if (Array.isArray(obj) && $.isString(obj[0])) { // Array of id (onchange/onclick event)\r\n var els = [];\r\n for (var i = 0, len = obj.length; i < len; i++) {\r\n var ar = obj[i].split(\" \");\r\n if (ar.length == 1 && self.form) { // Parent/Child fields in the same table\r\n var m = getId(self, false).match(/^([xy]\\d*_)/);\r\n if (m)\r\n obj[i] = obj[i].replace(/^([xy]\\d*_)/, m[1]);\r\n }\r\n var el = getElements(obj[i], f), names = [];\r\n els.push(el);\r\n if (ar.length == 2 && Array.isArray(el)) { // Check if id is \"tblvar fldvar\" and multiple inputs\r\n var $el = $(el);\r\n $el.each(function() {\r\n if (!names.includes(this.name)) {\r\n names.push(this.name);\r\n var $elf = $el.filter(\"[name='\" + this.name + \"']\"), typ = $elf.attr(\"type\"),\r\n elf = [\"radio\", \"checkbox\"].includes(typ) ? $elf.get() : $elf[0];\r\n promise = promise.then(_updateOptions.bind(self, elf, parentId, async, change));\r\n }\r\n });\r\n } else {\r\n promise = promise.then(_updateOptions.bind(self, el, parentId, async, change));\r\n }\r\n }\r\n obj = els;\r\n var list = forms.get(self).getList(self.name);\r\n if (list && Array.isArray(list.autoFillTargetFields) && list.autoFillTargetFields[0]) // AutoFill\r\n promise = promise.then(autoFill.bind(null, self));\r\n } else {\r\n promise = promise.then(_updateOptions.bind(self, obj, parentId, async, change));\r\n }\r\n return promise.then(function() {\r\n $document.trigger(\"updatedone\", [{ source: self, target: obj }]); // Document \"updatedone\" event fired after all the target elements are updated\r\n });\r\n}\r\n\r\n/**\r\n * Update a dynamic selection list\r\n *\r\n * @param {(HTMLElement|HTMLElement[]} obj - Target HTML element(s) or the ID of the element(s)\r\n * @param {(string[]|array[])} parentId - Parent field element names or data\r\n * @param {(boolean|null)} async - async(true) or sync(false) or non-Ajax(null)\r\n * @param {boolean} change - Trigger onchange event\r\n * @returns Promise\r\n */\r\nfunction _updateOptions(obj, parentId, async, change) {\r\n var id = getId(obj, false);\r\n if (!id)\r\n return;\r\n var fo = getForm(obj); // Get form/div element from obj\r\n if (!fo || !fo.id)\r\n return;\r\n var frmo = forms.get(fo.id);\r\n if (!frmo)\r\n return;\r\n var self = this,\r\n args = Array.from(arguments),\r\n ar = getOptionValues(obj),\r\n m = id.match(/^([xy])(\\d*)_/),\r\n prefix = m ? m[1] : \"\",\r\n rowindex = m ? m[2] : \"\",\r\n arp = [],\r\n list = frmo.getList(id),\r\n $obj = $(obj).data(\"updating\", true);\r\n if ($obj.data(\"hidden\")) // Skip data-hidden field, e.g. detail key\r\n return;\r\n if ($.isUndefined(parentId)) { // Parent IDs not specified, use default\r\n parentId = list.parentFields.slice(); // Clone\r\n if (rowindex != \"\") {\r\n for (var i = 0, len = parentId.length; i < len; i++) {\r\n var arr = parentId[i].split(\" \");\r\n if (arr.length == 1) // Parent field in the same table, add row index\r\n parentId[i] = parentId[i].replace(/^x_/, \"x\" + rowindex + \"_\");\r\n }\r\n }\r\n }\r\n if (Array.isArray(parentId) && parentId.length > 0) {\r\n if (Array.isArray(parentId[0])) { // Array of array => data\r\n arp = parentId;\r\n } else if ($.isString(parentId[0])) { // Array of string => Parent IDs\r\n for (var i = 0, len = parentId.length; i < len; i++)\r\n arp.push(getOptionValues(parentId[i], fo));\r\n }\r\n }\r\n if (!isAutoSuggest(obj)) // Do not clear Auto-Suggest\r\n clearOptions(obj);\r\n var addOpt = function(results) {\r\n var name = getId(obj);\r\n results.forEach(function(result) {\r\n let args = {\"data\": result, \"parents\": arp, \"valid\": true, \"name\": name, \"form\": fo};\r\n $document.trigger(\"addoption\", [args]);\r\n if (args.valid)\r\n newOption(obj, result, fo);\r\n });\r\n if (obj.list)\r\n obj.render();\r\n selectOption(obj, ar);\r\n if (change !== false) {\r\n if (!obj.options && obj.length)\r\n $obj.first().triggerHandler(\"click\");\r\n else\r\n $obj.first().trigger(\"change\");\r\n }\r\n }\r\n if ($.isUndefined(async)) // Async not specified, use default\r\n async = list.ajax;\r\n var _updateSibling = function() { // Update the y_* element\r\n if (/s(ea)?rch$/.test(fo.id) && prefix == \"x\") { // Search form\r\n args[0] = id.replace(/^x_/, \"y_\");\r\n updateOptions.apply(self, args); // args[0] is string, use updateOptions()\r\n }\r\n }\r\n if (!$.isBoolean(async) || Array.isArray(list.lookupOptions) && list.lookupOptions.length > 0) { // Non-Ajax or Options loaded\r\n var ds = list.lookupOptions;\r\n addOpt(ds);\r\n _updateSibling();\r\n return ds;\r\n } else { // Ajax\r\n var name = getId(obj), data = Object.assign({\r\n page: list.page,\r\n field: list.field,\r\n ajax: \"updateoption\",\r\n language: ew.LANGUAGE_ID,\r\n name: name // Name of the target element\r\n }, getUserParams(\"#p_\" + id, fo)); // Add user parameters\r\n if (isAutoSuggest(obj) && self.htmlForm) // Auto-Suggest (init form or auto-fill)\r\n data[\"v0\"] = ar[0] || random(); // Filter by the current value\r\n else if (isModalLookup(obj)) // Modal-Lookup\r\n data[\"v0\"] = ar[0] ? (obj.multiple ? ar.join(ew.MULTIPLE_OPTION_SEPARATOR) : ar[0]) : random(); // Filter by the current value\r\n for (var i = 0, cnt = arp.length; i < cnt; i++) // Filter by parent fields\r\n data[\"v\" + (i + 1)] = arp[i].join(ew.MULTIPLE_OPTION_SEPARATOR);\r\n return $.ajax(getApiUrl(ew.API_LOOKUP_ACTION), {\r\n \"type\": \"POST\", \"dataType\": \"json\", \"data\": data, \"async\": async\r\n }).done((result) => {\r\n var ds = result.records || [];\r\n addOpt(ds);\r\n _updateSibling();\r\n $obj.first().trigger(\"updated\", [Object.assign({}, result, { target: obj })]); // Object \"updatedone\" event fired after the object is updated\r\n return ds;\r\n }).always(() => $obj.data(\"updating\", false));\r\n }\r\n}\r\n\r\n// Get user parameters from id\r\nexport function getUserParams(id, root) {\r\n var id = id.replace(/\\[\\]$/, \"\"), o = {};\r\n var root = !$.isString(root) ? root : /^#/.test(root) ? root : \"#\" + root;\r\n var $els = (root) ? $(root).find(id) : $(id);\r\n var val = $els.val();\r\n if (val) {\r\n var params = new URLSearchParams(val);\r\n params.forEach(function(value, key) {\r\n o[key] = value;\r\n });\r\n }\r\n return o;\r\n}\r\n\r\n// Apply client side template to a DIV\r\nexport function applyTemplate(divId, tmplId, classId, exportType, data) { // Note: classId = fileName\r\n var args = {\"data\": data || {}, \"id\": divId, \"template\": tmplId, \"class\": classId, \"export\": exportType, \"enabled\": true};\r\n $document.trigger(\"rendertemplate\", [args]);\r\n if (args.enabled) {\r\n if (document.body.replaceWith) { // Not IE\r\n var template = document.getElementById(tmplId).content;\r\n template.querySelectorAll(\".ew-slot\").forEach(el => {\r\n var subtmpl = document.getElementById(el.name || el.id);\r\n if (subtmpl && subtmpl.content) {\r\n if (el.dataset.rowspan > 1)\r\n Array.prototype.slice.call(subtmpl.content.childNodes).forEach(node => node.rowSpan = el.dataset.rowspan);\r\n el.replaceWith(subtmpl.content);\r\n } else {\r\n el.remove();\r\n }\r\n });\r\n if ($.views) {\r\n var textContent = template.textContent,\r\n hasTag = textContent.includes(\"{{\") && textContent.includes(\"}}\");\r\n if (!hasTag) {\r\n var selector = ew.jsRenderAttributes.map(attr => \"[\" + attr + \"*='{{'][\" + attr + \"*='}}']\").join(\",\");\r\n hasTag = template.querySelector(selector);\r\n }\r\n if (hasTag) { // Includes JsRender template\r\n var scripts = Array.prototype.slice.call(template.querySelectorAll(\"script\")); // Extract scripts\r\n scripts.forEach(item => item.remove());\r\n var div = document.createElement(\"div\");\r\n div.appendChild(template);\r\n var html = div.innerHTML, tmpl = $.templates(html);\r\n document.getElementById(divId).innerHTML = tmpl.render(args.data, ew.jsRenderHelpers);\r\n scripts.forEach(item => document.body.appendChild(item)); // Add scripts\r\n } else {\r\n document.getElementById(divId).appendChild(template);\r\n }\r\n } else {\r\n document.getElementById(divId).appendChild(template);\r\n }\r\n } else { // IE\r\n _alert(ew.language.phrase(\"UnsupportedBrowser\") || \"Your browser is not supported by this page.\");\r\n }\r\n }\r\n if (exportType && exportType != \"print\") { // Export custom\r\n $(function() {\r\n var $meta = $(\"meta[http-equiv='Content-Type']\"),\r\n html = \"<html><head>\",\r\n $div = $(\"#\" + divId);\r\n if ($div.children(0).is(\"div[id^=ct_]\")) // Remove first div tag\r\n $div = $div.children(0);\r\n if ($meta[0])\r\n html += \"<meta http-equiv='Content-Type' content='\" + $meta.attr(\"content\") + \"'>\";\r\n if (exportType == \"pdf\") {\r\n html += \"<link rel='stylesheet' href='\" + ew.PDF_STYLESHEET_FILENAME + \"'>\";\r\n } else {\r\n html += \"<style>\" + $.ajax({async: false, type: \"GET\", url: ew.PROJECT_STYLESHEET_FILENAME}).responseText + \"</style>\";\r\n }\r\n html += \"</\" + \"head><body>\";\r\n $(\".ew-chart-top\").each(function() {\r\n html += $(this).html();\r\n });\r\n html += $div.html();\r\n $(\".ew-chart-bottom\").each(function() {\r\n html += $(this).html();\r\n });\r\n html += \"</body></html>\";\r\n var url = currentPage(),\r\n data = { \"customexport\": exportType, \"data\": html, \"filename\": args.class };\r\n data[ew.TOKEN_NAME] = ew.ANTIFORGERY_TOKEN;\r\n if (exportType == \"email\") {\r\n var str = currentUrl.searchParams.toString() + \"&\" + $.param(data); // Add data\r\n $.post(url, str, function(result) {\r\n showMessage(result);\r\n });\r\n } else {\r\n fileDownload(url, data);\r\n }\r\n window.parent.jQuery(\"body\").css(\"cursor\", \"default\"); // Use window.parent in case in iframe\r\n });\r\n }\r\n}\r\n\r\n// Toggle group\r\nexport function toggleGroup(el) {\r\n var $el = $(el), $tr = $el.closest(\"tr\"), selector = \"tr\", level;\r\n for (var i = 1; i <= 6; i++) {\r\n var idx = (i == 1) ? \"\" : \"-\" + i;\r\n var data = $tr.data(\"group\" + idx);\r\n if ($.isValue(data)) {\r\n level = i;\r\n if (data != \"\")\r\n selector += \"[data-group\" + idx + \"='\" + String(data).replace(/'/g, \"\\\\'\") + \"']\";\r\n }\r\n }\r\n if ($el.hasClass(\"icon-collapse\")) { // Hide\r\n $(selector).slice(1).addClass(\"ew-rpt-grp-hide-\" + level);\r\n $el.toggleClass(\"icon-expand icon-collapse\");\r\n } else {\r\n $(selector).slice(1).removeClass(\"ew-rpt-grp-hide-\" + level);\r\n $el.toggleClass(\"icon-expand icon-collapse\");\r\n }\r\n}\r\n\r\n// Check if boolean value is true\r\nexport function convertToBool(value) {\r\n return value && [\"1\", \"y\", \"t\", \"true\"].includes(value.toLowerCase());\r\n}\r\n\r\n// Check if element value changed\r\nexport function valueChanged(fobj, infix, fld, bool) {\r\n var nelm = getElements(\"x\" + infix + \"_\" + fld, fobj);\r\n var oelm = getElement(\"o\" + infix + \"_\" + fld, fobj); // Hidden element\r\n var fnelm = getElement(\"fn_x\" + infix + \"_\" + fld, fobj); // Hidden element\r\n if (nelm?.type == \"hidden\" && !oelm) // For example, detail key\r\n return false;\r\n if (!oelm && (!nelm || Array.isArray(nelm) && nelm.length == 0))\r\n return false;\r\n var getValue = (obj) => getOptionValues(obj).join();\r\n if (oelm && nelm) {\r\n if (bool) {\r\n if (convertToBool(getValue(oelm)) === convertToBool(getValue(nelm)))\r\n return false;\r\n } else {\r\n var oldvalue = getValue(oelm);\r\n var newvalue = (fnelm) ? getValue(fnelm) : getValue(nelm);\r\n if (oldvalue == newvalue)\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\n// Set language\r\nexport function setLanguage(el) {\r\n var $el = $(el),\r\n val = $el.val() || $el.data(\"language\");\r\n if (!val)\r\n return;\r\n currentUrl.searchParams.set(\"language\", val);\r\n window.location = sanitizeUrl(currentUrl.toString());\r\n}\r\n\r\n/**\r\n * Submit action\r\n *\r\n * @param {Event} e\r\n * @param {Object} args - Arguments\r\n * @param {HTMLElement} args.f - HTML form (default is the form of the source element)\r\n * @param {string} args.url - URL to which the request is sent (default is current page)\r\n * @param {Object} args.key - Key as object (for single record only)\r\n * @param {string} args.msg - Confirm message\r\n * @param {string} args.action - Custom action name\r\n * @param {string} args.select - \"single\"|\"s\" (single record) or \"multiple\"|\"m\" (multiple records, default)\r\n * @param {string} args.method - \"ajax\"|\"a\" (Ajax by HTTP POST) or \"post\"|\"p\" (HTTP POST, default)\r\n * @param {Object} args.data - Object of user data that is sent to the server\r\n * @param {string|callback|Object} success - Function to be called if the request succeeds, or settings for jQuery.ajax() (for Ajax only)\r\n * @returns\r\n */\r\nexport function submitAction(e, args) {\r\n var el = e.target || e.srcElement, $el = $(el),\r\n f = args.f || $el.closest(\"form\")[0] || currentForm, $f = $(f),\r\n key = args.key, action = args.action, url = args.url || currentPage(),\r\n msg = args.msg, data = args.data, success = args.success,\r\n isPost = !args.method || sameText(args.method[0], \"p\"),\r\n isMultiple = !args.select && !args.key || args.select && sameText(args.select[0], \"m\");\r\n if (isMultiple && !$f[0])\r\n return false;\r\n if (isMultiple && !keySelected($f[0])) {\r\n _prompt(\"<p class=\\\"text-danger\\\">\" + ew.language.phrase(\"NoRecordSelected\") + \"</p>\");\r\n return false;\r\n }\r\n var _success = function(result) {\r\n showMessage(result);\r\n };\r\n var _submit = function() {\r\n if (isPost) { // Post back\r\n if (action) // Action\r\n $(\"<input>\").attr({type: \"hidden\", name: \"useraction\", value: action}).appendTo($f);\r\n if ($.isObject(data)) { // User data\r\n for (var k in data) {\r\n var $input = $f.find(\"input[type=hidden][name='\" + k + \"']\");\r\n if ($input[0])\r\n $input.val(data[k]);\r\n else\r\n $(\"<input>\").attr({type: \"hidden\", name: k, value: data[k]}).appendTo($f);\r\n }\r\n }\r\n if (!isMultiple && $.isObject(key)) { // Key\r\n for (var k in key)\r\n $(\"<input>\").attr({type: \"hidden\", name: k, value: key[k]}).appendTo($f);\r\n }\r\n $f.prop(\"action\", url).trigger(\"submit\");\r\n // if (action) // Action\r\n // $f.find(\"input[type=hidden][name=useraction]\").remove(); // Remove the \"useraction\" element\r\n } else { // Ajax\r\n data = $.isObject(data) ? $.param(data) : $.isString(data) ? data : \"\"; // User data\r\n if (action)\r\n data += \"&useraction=\" + action + \"&ajax=\" + action; // Action\r\n if (isMultiple) // Multiple records\r\n data += \"&\" + $f.find(\"input[name='key_m[]']:checked\").serialize(); // Keys\r\n else if (key) // Single record\r\n data += \"&\" + ($.isObject(key) ? $.param(key) : key); // Key\r\n if (success && $.isString(success))\r\n success = window[success];\r\n if (isFunction(success)) {\r\n $.post(url, data, success);\r\n } else if ($.isObject(success)) { // \"success\" is Ajax settings\r\n success.data = data;\r\n success.method = success.method || \"POST\";\r\n success.success = success.success || _success;\r\n $.ajax(url, success);\r\n } else {\r\n $.post(url, data, _success);\r\n }\r\n }\r\n };\r\n if (msg) {\r\n _prompt(msg, (result) => {\r\n if (result)\r\n _submit();\r\n });\r\n } else {\r\n _submit();\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Export with selected records and/or Custom Template\r\n *\r\n * @param {string} f - Form ID\r\n * @param {string} url - Form action\r\n * @param {string} type - Export type\r\n * @param {boolean} custom - Using Custom Template\r\n * @param {boolean} sel - Selected records only\r\n * @param {Object} fobj - email form object\r\n * @returns false\r\n */\r\nfunction _export(f, url, type, custom, sel, fobj) {\r\n if (!f)\r\n return false;\r\n var $f = $(f),\r\n target = $f.attr(\"target\"),\r\n action = $f.attr(\"action\"),\r\n cb = sel && $f.find(\"input[type=checkbox][name='key_m[]']\")[0];\r\n if (cb && !keySelected(f)) {\r\n _alert(ew.language.phrase(\"NoRecordSelected\"));\r\n return false;\r\n }\r\n if (custom) { // Use Custom Template\r\n $(\"iframe.ew-export\").remove();\r\n if (type == \"email\")\r\n url += (\"&\" + $(fobj).serialize()).replace(/&export=email/i, \"\"); // Remove duplicate export=email\r\n if (cb) {\r\n $(\"<iframe>\").attr(\"name\", \"ew-export-frame\").addClass(\"ew-export d-none\").appendTo($body);\r\n try {\r\n $f.append($(\"<input type='hidden'>\").attr({name: \"custom\", value: \"1\"}))\r\n .attr({ \"action\": url, \"target\": \"ew-export-frame\" }).find(\"input[name=exporttype]\").val(type).end().trigger(\"submit\");\r\n } finally { // Reset\r\n $f.attr({ \"target\": target || \"\", \"action\": action }).find(\"input[name=custom]\").remove();\r\n }\r\n } else {\r\n $(\"<iframe>\").attr({ name: \"ew-export-frame\", src: url }).addClass(\"ew-export d-none\").appendTo($body);\r\n }\r\n } else { // No Custom Template\r\n $f.find(\"input[name=exporttype]\").val(type);\r\n if ([\"xml\", \"print\"].includes(type))\r\n $f.trigger(\"submit\"); // Submit the form directly\r\n else\r\n fileDownload(action, $f.serialize());\r\n }\r\n return false;\r\n}\r\n\r\nexport { _export as export };\r\n\r\n/**\r\n * Remove spaces\r\n * @param {string} value\r\n * @returns {string}\r\n */\r\nexport function removeSpaces(value) {\r\n return (/^(<(p|br)\\/?>( )?(<\\/p>)?)?$/i.test(value.replace(/\\s/g, \"\"))) ? \"\" : value;\r\n}\r\n\r\n/**\r\n * Check if hidden text area (HTML editor)\r\n * @param {HTMLElement|jQuery} el HTML element or jQuery object\r\n * @returns {boolean}\r\n */\r\nexport function isHiddenTextArea(el) {\r\n var $el = $(el);\r\n return $el.is(\":hidden\") && $el.data(\"editor\");\r\n}\r\n\r\n/**\r\n * Check if modal lookup\r\n * @param {HTMLElement|jQuery} el HTML element or jQuery object\r\n * @returns {boolean}\r\n */\r\nexport function isModalLookup(el) {\r\n var $el = $(el);\r\n return $el.is(\":hidden\") && $el.data(\"lookup\");\r\n}\r\n\r\n/**\r\n * Check if hidden textbox (Auto-Suggest)\r\n * @param {HTMLElement|jQuery} el HTML element or jQuery object\r\n * @returns {boolean}\r\n */\r\nexport function isAutoSuggest(el) {\r\n var $el = $(el);\r\n return $el.is(\":hidden\") && $el.data(\"autosuggest\");\r\n}\r\n\r\n/**\r\n * Alert\r\n *\r\n * @param {string} msg - Message\r\n * @param {callback} cb - Callback function\r\n * @param {string} type - CSS class (see https://getbootstrap.com/docs/4.5/utilities/colors/#color)\r\n */\r\nfunction _alert(msg, cb, type) {\r\n return Swal.fire({\r\n ...ew.sweetAlertSettings,\r\n html: '<p class=\"text-' + (type || 'danger') + '\">' + msg + '</p>',\r\n confirmButtonText: ew.language.phrase(\"OKBtn\")\r\n }).then(result => {\r\n if (isFunction(cb))\r\n cb(result.value);\r\n });\r\n}\r\n\r\nexport { _alert as alert };\r\n\r\n/**\r\n * Clear error message\r\n * @param {HTMLElement|HTMLElement[]|jQuery} el HTML element(s) or jQuery\r\n */\r\nexport function clearError(el) {\r\n if (el.jquery) { // el is jQuery object\r\n let typ = el.attr(\"type\");\r\n el = (typ == \"checkbox\" || typ == \"radio\") ? el.get() : el[0];\r\n }\r\n $(el).closest(\"[id^=el_], .form-group\").find(\".invalid-feedback\").html(\"\");\r\n}\r\n\r\n/**\r\n * Show error message\r\n * @param {Form} frm Form object\r\n * @param {HTMLElement|HTMLElement[]|jQuery} el HTML element(s) or jQuery\r\n * @param {string} msg Error message\r\n * @param {boolean} focus Set focus\r\n */\r\nexport function onError(frm, el, msg, focus) {\r\n if (el.jquery) { // el is jQuery object\r\n let typ = el.attr(\"type\");\r\n el = (typ == \"checkbox\" || typ == \"radio\") ? el.get() : el[0];\r\n } else if (el instanceof Field) { // el is Field object\r\n el = el.element;\r\n }\r\n $(el).closest(\"[id^=el_], .form-group\").find(\".invalid-feedback\").append(\"<p>\" + msg + \"</p>\");\r\n if (focus)\r\n setFocus(el);\r\n frm?.makeVisible(el);\r\n return false;\r\n}\r\n\r\n/**\r\n * Set focus\r\n * @param {HTMLElement|HTMLElement[]} obj HTML element(s)\r\n */\r\nexport function setFocus(obj) {\r\n if (!obj)\r\n return;\r\n var $obj = $(obj);\r\n if (isHidden($obj))\r\n return;\r\n if (isHiddenTextArea(obj)) { // HTML editor\r\n return $obj.data(\"editor\").focus();\r\n } else if (isModalLookup(obj)) { // Modal lookup\r\n return $obj.parent().find(\".ew-lookup-text\").trigger(\"focus\");\r\n } else if (!obj.options && obj.length) { // Radio/Checkbox list\r\n obj = $obj[0];\r\n } else if (isAutoSuggest(obj)) { // Auto-Suggest\r\n obj = obj.input;\r\n }\r\n $(obj).trigger(\"focus\");\r\n}\r\n\r\n/**\r\n * Set invalid\r\n * @param {HTMLElement|HTMLElement[]} obj HTML element(s)\r\n */\r\nexport function setInvalid(obj) {\r\n if (!obj)\r\n return;\r\n var $obj = $(obj);\r\n if (isHidden($obj))\r\n return;\r\n if (!obj.options && obj.length) // Radio/Checkbox list\r\n obj = $obj[0];\r\n var $p = $obj.closest(\".form-group, [id^='el']\");\r\n if (isAutoSuggest(obj)) {\r\n $p.find(\".ew-auto-suggest\").addClass(\"is-invalid\").one(\"click keydown\", function() {\r\n $p.find(\".is-invalid\").removeClass(\"is-invalid\");\r\n });\r\n } else if (isModalLookup(obj)) {\r\n $p.find(\".input-group\").addClass(\"is-invalid\").one(\"click keydown\", function() {\r\n $p.find(\".is-invalid\").removeClass(\"is-invalid\");\r\n });\r\n } else {\r\n if (obj.type == \"checkbox\" || obj.type == \"radio\") {\r\n $obj.addClass(\"is-invalid\").one(\"click keydown\", function() {\r\n $p.find(\".is-invalid\").removeClass(\"is-invalid\");\r\n });\r\n } else {\r\n $obj.addClass(\"is-invalid\").parent().one(\"click keydown\", function() {\r\n $p.find(\".is-invalid\").removeClass(\"is-invalid\");\r\n })\r\n $obj.closest(\".input-group\").addClass(\"is-invalid\");\r\n }\r\n }\r\n}\r\n\r\n// Check if object has value\r\nexport function hasValue(obj) {\r\n return getOptionValues(obj).join(\"\") != \"\";\r\n}\r\n\r\n// Check if object value is a masked password\r\nexport function isMaskedPassword(obj) {\r\n var val = $(obj).val();\r\n return val && val.match(/^\\*+$/);\r\n}\r\n\r\n// Get Ctrl key for multiple column sort\r\nexport function sort(e, url, type) {\r\n if (e.shiftKey && !e.ctrlKey)\r\n url = url.split(\"?\")[0] + \"?cmd=resetsort\";\r\n else if (type == 2 && e.ctrlKey)\r\n url += \"&ctrl=1\";\r\n window.location = sanitizeUrl(url);\r\n return true;\r\n}\r\n\r\n// Confirm Delete Message\r\nexport function confirmDelete(el) {\r\n clickDelete(el);\r\n _prompt(ew.language.phrase(\"DeleteConfirmMsg\"), (result) => {\r\n (result && el.href) ? window.location = sanitizeUrl(el.href) : clearDelete(el);\r\n });\r\n return false;\r\n}\r\n\r\n// Check if any key selected // PHP\r\nexport function keySelected(f) {\r\n return $(f).find(\"input[type=checkbox][name='key_m[]']:checked\", f).length > 0;\r\n}\r\n\r\n// Select all key\r\nexport function selectAllKey(cb) {\r\n selectAll(cb);\r\n var tbl = $(cb).closest(\".ew-table\")[0];\r\n if (!tbl)\r\n return;\r\n $(tbl.tBodies).each(function() {\r\n $(this.rows).each(function(i, r) {\r\n var $r = $(r);\r\n if ($r.is(\":not(.ew-template):not(.ew-table-preview-row)\")) {\r\n $r.data({ selected: cb.checked, checked: cb.checked });\r\n setColor(i, r);\r\n }\r\n });\r\n });\r\n}\r\n\r\n// Select all related checkboxes\r\nexport function selectAll(cb) {\r\n if (!cb || !cb.form)\r\n return;\r\n $(cb.form.elements).filter(\"input[type=checkbox][name^=\" + cb.name + \"_], [type=checkbox][name=\" + cb.name + \"]\").not(cb).not(\":disabled\").prop(\"checked\", cb.checked);\r\n}\r\n\r\n// Update selected checkbox\r\nexport function updateSelected(f) {\r\n return $(f).find(\"input[type=checkbox][name^=u_]:checked,input:hidden[name^=u_][value=1]\").length > 0;\r\n}\r\n\r\n// Set row color\r\nexport function setColor(index, row) {\r\n var $row = $(row), $tbl = $row.closest(\".ew-table\");\r\n if (!$tbl[0])\r\n return;\r\n if ($row.data(\"selected\")) {\r\n $row.removeClass($tbl.data(\"rowhighlightclass\") || \"ew-table-highlight-row\")\r\n .removeClass($tbl.data(\"roweditclass\") || \"ew-table-edit-row\")\r\n .addClass($tbl.data(\"rowselectclass\") || \"ew-table-select-row\");\r\n } else if ([ew.ROWTYPE_ADD, ew.ROWTYPE_EDIT].includes($row.data(\"rowtype\"))) {\r\n $row.removeClass($tbl.data(\"rowselectclass\") || \"ew-table-select-row\")\r\n .removeClass($tbl.data(\"rowhighlightclass\") || \"ew-table-highlight-row\")\r\n .addClass($tbl.data(\"roweditclass\") || \"ew-table-edit-row\");\r\n } else {\r\n $row.removeClass($tbl.data(\"rowselectclass\") || \"ew-table-select-row\")\r\n .removeClass($tbl.data(\"roweditclass\") || \"ew-table-edit-row\")\r\n .removeClass($tbl.data(\"rowhighlightclass\") || \"ew-table-highlight-row\");\r\n }\r\n}\r\n\r\n// Clear selected rows color\r\nexport function clearSelected(tbl) {\r\n $(tbl.rows).each(function(i, r) {\r\n var $r = $(r);\r\n if (!$r.data(\"checked\") && $r.data(\"selected\")) {\r\n $r.data(\"selected\", false);\r\n setColor(i, r);\r\n }\r\n });\r\n}\r\n\r\n// Clear all row delete status\r\nexport function clearDelete(el) {\r\n var $el = $(el), tbl = $el.closest(\".ew-table\")[0];\r\n if (!tbl)\r\n return;\r\n var $tr = $el.closest(\".ew-table > tbody > tr\");\r\n $tr.siblings(\"[data-rowindex='\" + $tr.data(\"rowindex\") + \"']\").addBack().each(function(i, r) {\r\n var $r = $(r);\r\n $r.data(\"selected\", $r.data(\"checked\"));\r\n });\r\n}\r\n\r\n// Click single delete link\r\nexport function clickDelete(el) {\r\n var $el = $(el), tbl = $el.closest(\".ew-table\")[0];\r\n if (!tbl)\r\n return;\r\n clearSelected(tbl);\r\n var $tr = $el.closest(\".ew-table > tbody > tr\");\r\n $tr.siblings(\"[data-rowindex='\" + $tr.data(\"rowindex\") + \"']\").addBack().each(function(i, r) {\r\n $(r).data(\"selected\", true);\r\n setColor(i, r);\r\n });\r\n}\r\n\r\n// Click multiple checkbox\r\nexport function clickMultiCheckbox(e) {\r\n var cb = e.target || e.srcElement, $cb = $(cb), tbl = $cb.closest(\".ew-table\")[0];\r\n if (!tbl)\r\n return;\r\n clearSelected(tbl);\r\n var $tr = $cb.closest(\".ew-table > tbody > tr\");\r\n $tr.siblings(\"[data-rowindex='\" + $tr.data(\"rowindex\") + \"']\").addBack().each(function(i, r) {\r\n $(r).data(\"checked\", cb.checked).data(\"selected\", cb.checked).find(\"input[type=checkbox][name='key_m[]']\").each(function() {\r\n if (this != cb) this.checked = cb.checked;\r\n });\r\n setColor(i, r);\r\n });\r\n e.stopPropagation();\r\n}\r\n\r\n// Setup table\r\nexport function setupTable(index, tbl, force) {\r\n var $tbl = $(tbl), $rows = $(tbl.rows);\r\n if (!tbl || !tbl.rows || !force && $tbl.data(\"isset\") || tbl.tBodies.length == 0)\r\n return;\r\n\r\n // Set mouse over color\r\n var mouseOver = function(e) {\r\n var $this = $(this);\r\n if (!$this.data(\"selected\") && ![ew.ROWTYPE_ADD, ew.ROWTYPE_EDIT].includes($this.data(\"rowtype\"))) {\r\n var $tbl = $this.closest(\".ew-table\");\r\n if (!$tbl[0])\r\n return;\r\n $this.siblings(\"[data-rowindex='\" + $this.data(\"rowindex\") + \"']\").addBack().each(function(i, r) {\r\n $(r).addClass($tbl.data(\"rowhighlightclass\") || \"ew-table-highlight-row\");\r\n });\r\n }\r\n }\r\n\r\n // Set mouse out color\r\n var mouseOut = function(e) {\r\n var $this = $(this);\r\n if (!$this.data(\"selected\") && ![ew.ROWTYPE_ADD, ew.ROWTYPE_EDIT].includes($this.data(\"rowtype\")))\r\n $this.siblings(\"[data-rowindex='\" + $this.data(\"rowindex\") + \"']\").addBack().each(setColor);\r\n }\r\n\r\n // Set selected row color\r\n var click = function(e) {\r\n var $this = $(this), tbl = $this.closest(\".ew-table\")[0],\r\n $target = $(e.target);\r\n if (!tbl || $target.hasClass(\"btn\") || $target.hasClass(\"ew-preview-row-btn\") || $target.is(\":input\"))\r\n return;\r\n if (!$this.data(\"checked\")) {\r\n var selected = $this.data(\"selected\");\r\n clearSelected(tbl); // Clear all other selected rows\r\n $this.siblings(\"[data-rowindex='\" + $this.data(\"rowindex\") + \"']\").addBack().each(function(i, r) {\r\n $(r).data(\"selected\", !selected); // Toggle\r\n setColor(i, r);\r\n });\r\n }\r\n }\r\n\r\n var n = $rows.filter(\"[data-rowindex=1]\").length || $rows.filter(\"[data-rowindex=0]\").length || 1; // Alternate color every n rows\r\n var rows = $rows\r\n .filter(\":not(.ew-template)\")\r\n .each(function() {\r\n $(this.cells).removeClass(\"ew-table-last-row\").last().addClass(\"ew-table-last-col\"); // Cell of last column\r\n }).get();\r\n var div = $tbl.parentsUntil(\".ew-grid\", \".\" + ew.RESPONSIVE_TABLE_CLASS)[0];\r\n if (rows.length) {\r\n for (var i = 1; i <= n; i++) {\r\n var r = rows[rows.length - i]; // Last rows\r\n $(r.cells).each(function() {\r\n if (this.rowSpan == i) // Cell of last row\r\n $(this).addClass(\"ew-table-last-row\")\r\n .toggleClass(\"ew-table-border-bottom\", !!div && div.clientHeight > tbl.offsetHeight);\r\n });\r\n }\r\n }\r\n var form = $tbl.closest(\"form\")[0];\r\n var attach = form && $(form.elements).filter(\"input#action:not([value^=grid])\").length > 0;\r\n $(tbl.tBodies[tbl.tBodies.length - 1].rows) // Use last TBODY (avoid Opera bug)\r\n .filter(\":not(.ew-template):not(.ew-table-preview-row)\")\r\n .each(function(i) {\r\n var $r = $(this);\r\n if (attach && !$r.data(\"isset\")) {\r\n if ([ew.ROWTYPE_ADD, ew.ROWTYPE_EDIT].includes($r.data(\"rowtype\"))) // Add/Edit row\r\n $r.on(\"mouseover\", function() {this.edit = true;}).addClass(\"ew-table-edit-row\");\r\n $r.on(\"mouseover\", mouseOver).on(\"mouseout\", mouseOut).on(\"click\", click);\r\n $r.data(\"isset\", true);\r\n }\r\n var sw = i % (2 * n) < n;\r\n $r.toggleClass(\"ew-table-row\", sw).toggleClass(\"ew-table-alt-row\", !sw);\r\n });\r\n setupGrid(index, $tbl.closest(\".ew-grid\")[0], force);\r\n $tbl.data(\"isset\", true);\r\n}\r\n\r\n// Setup grid\r\nexport function setupGrid(index, grid, force) {\r\n var $grid = $(grid);\r\n if (!grid || !force && $grid.data(\"isset\"))\r\n return;\r\n var multi = $grid.find(\"table.ew-multi-column-table\").length, rowcnt;\r\n if (multi) {\r\n rowcnt = $grid.find(\"td[data-rowindex]\").length;\r\n } else {\r\n rowcnt = $grid.find(\"table.ew-table > tbody\").first().children(\"tr:not(.ew-table-preview-row, .ew-template)\").length;\r\n }\r\n if (rowcnt == 0 && !$grid.find(\".ew-grid-upper-panel, .ew-grid-lower-panel\")[0])\r\n $grid.hide();\r\n // if (!$grid.find(\".ew-grid-upper-panel:visible\")[0])\r\n // \t$grid.css({\"border-top-left-radius\": 0, \"border-top-right-radius\": 0});\r\n // if (!$grid.find(\".ew-grid-lower-panel:visible\")[0])\r\n // \t$grid.css({\"border-bottom-left-radius\": 0, \"border-bottom-right-radius\": 0});\r\n if ($grid.find(\".ew-grid-middle-panel:visible\").hasClass(ew.RESPONSIVE_TABLE_CLASS) && $grid.width() > $(\".content\").width()) {\r\n $grid.addClass(\"d-flex\");\r\n $grid.closest(\".ew-detail-pages\").addClass(\"d-block\");\r\n $grid.closest(\".ew-form\").addClass(\"w-100\");\r\n if (ew.USE_OVERLAY_SCROLLBARS)\r\n $grid.find(\".ew-grid-middle-panel:not(.ew-preview-middle-panel)\").overlayScrollbars(ew.overlayScrollbarsOptions);\r\n }\r\n $grid.data(\"isset\", true);\r\n}\r\n\r\n// Add a row to grid\r\nexport function addGridRow(el) {\r\n var $grid = $(el).closest(\".ew-grid\"),\r\n $tbl = $grid.find(\"table.ew-table\").last(), $p = $tbl.parent(\"div\"),\r\n $tpl = $tbl.find(\"tr.ew-template\");\r\n if (!el || !$grid[0] || !$tbl[0] || !$tpl[0])\r\n return false;\r\n var $lastrow = $($tbl[0].rows).last();\r\n $tbl.find(\"td.ew-table-last-row\").removeClass(\"ew-table-last-row\");\r\n var $row = $tpl.clone(true, true).removeClass(\"ew-template\");\r\n var $form = $grid.find(\"div.ew-form[id^=f][id$=grid]\");\r\n if (!$form[0])\r\n $form = $grid.find(\"form.ew-form[id^=f][id$=list]\");\r\n var suffix = ($form.is(\"div\")) ? \"_\" + $form.attr(\"id\") : \"\";\r\n var $elkeycnt = $form.find(\"#key_count\" + suffix);\r\n var keycnt = parseInt($elkeycnt.val(), 10) + 1;\r\n $row.attr({ \"id\": \"r\" + keycnt + $row.attr(\"id\").substring(2), \"data-rowindex\": keycnt });\r\n var $els = $tpl.find(\"script:contains('$rowindex$')\"); // Get scripts with rowindex\r\n $row.children(\"td\").each(function() {\r\n $(this).find(\"*\").each(function() {\r\n $.each(this.attributes, function(i, attr) {\r\n attr.value = attr.value.replace(/\\$rowindex\\$/g, keycnt); // Replace row index\r\n });\r\n });\r\n });\r\n $row.find(\".ew-icon\").closest(\"a, button\").removeData(\"bs.tooltip\").tooltip({ container: \"body\", placement: \"bottom\", trigger: \"hover\", sanitizeFn: ew.sanitizeFn });\r\n $elkeycnt.val(keycnt).after($(\"<input>\").attr({\r\n type: \"hidden\",\r\n id: \"k\" + keycnt + \"_action\" + suffix,\r\n name: \"k\" + keycnt + \"_action\" + suffix,\r\n value: \"insert\"\r\n }));\r\n $lastrow.after($row);\r\n $els.each(function() {\r\n addScript(this.text.replace(/\\$rowindex\\$/g, keycnt));\r\n });\r\n var frm = $form.data(\"form\");\r\n if (frm) {\r\n frm.initEditors();\r\n frm.initUpload();\r\n }\r\n setupTable(-1, $tbl[0], true);\r\n $p.scrollTop($p[0].scrollHeight);\r\n return false;\r\n}\r\n\r\n// Delete a row from grid\r\nexport function deleteGridRow(el, infix) {\r\n var $el = $(el).tooltip(\"hide\").removeData(\"bs.tooltip\"),\r\n $grid = $el.closest(\".ew-grid, .ew-multi-column-grid\"),\r\n $row = $el.closest(\"tr, div[data-rowindex]\"),\r\n $tbl = $row.closest(\".ew-table\");\r\n if (!el || !$grid[0] || !$row[0])\r\n return false;\r\n var rowidx = parseInt($row.data(\"rowindex\"), 10);\r\n var $form = $grid.find(\"div.ew-form[id^=f][id$=grid]\");\r\n if (!$form[0])\r\n $form = $grid.find(\"form.ew-form[id^=f][id$=list]\");\r\n var frm = $form.data(\"form\");\r\n if (!$form[0] || !frm)\r\n return false;\r\n var suffix = ($form.is(\"div\")) ? \"_\" + $form.attr(\"id\") : \"\";\r\n var keycntname = \"#key_count\" + suffix;\r\n var _delete = function() {\r\n $row.remove();\r\n if ($grid.is(\".ew-grid\"))\r\n setupTable(-1, $tbl[0], true);\r\n if (rowidx > 0) {\r\n var $keyact = $form.find(\"#k\" + rowidx + \"_action\" + suffix);\r\n if ($keyact[0]) {\r\n $keyact.val(($keyact.val() == \"insert\") ? \"insertdelete\" : \"delete\");\r\n } else {\r\n $form.find(keycntname).after($(\"<input>\").attr({\r\n type: \"hidden\",\r\n id: \"k\" + rowidx + \"_action\" + suffix,\r\n name: \"k\" + rowidx + \"_action\" + suffix,\r\n value: \"delete\"\r\n }));\r\n }\r\n }\r\n };\r\n if (isFunction(frm.emptyRow) && frm.emptyRow(infix)) { // Empty row\r\n _delete();\r\n } else { // Confirm\r\n _prompt(ew.language.phrase(\"DeleteConfirmMsg\"), (result) => {\r\n if (result)\r\n _delete();\r\n });\r\n }\r\n return false;\r\n}\r\n\r\n// HTML encode text\r\nexport function htmlEncode(text) {\r\n var str = String(text);\r\n return str.replace(/&/g, '&').replace(/\\\"/g, '"').replace(/</g, '<').replace(/>/g, '>');\r\n}\r\n\r\n// Get form element(s) as single element or array of radio/checkbox\r\nexport function getElements(el, root) {\r\n var selector;\r\n if ($.isObject(el) && el.dataset) { // HTML element (e.g. radio/checkbox)\r\n selector = \"[data-table='\" + el.dataset.table + \"'][data-field='\" + el.dataset.field + \"']:not([name^=o]):not([name^='x$'])\";\r\n } else if ($.isString(el)) {\r\n selector = \"[name='\" + el + \"']\";\r\n var ar = el.split(\" \"); // Check if \"#id name\"\r\n if (ar.length == 2)\r\n selector = \"[data-table='\" + ar[0] + \"'][data-field='\" + getId(ar[1]) + \"']:not([name^=o]):not([name^='x$'])\"; // Remove []\r\n }\r\n var root = !$.isString(root) ? root : /^#/.test(root) ? root : \"#\" + root;\r\n selector = \"input\" + selector + \",select\" + selector + \",textarea\" + selector + \",button\" + selector;\r\n var $els = (root) ? $(root).find(selector) : $(selector);\r\n if ($els.length == 1 && $els.is(\":not([type=checkbox]):not([type=radio])\"))\r\n return $els[0];\r\n return $els.get();\r\n}\r\n\r\n// Get first element (not necessarily form element)\r\nexport function getElement(name, root) {\r\n var root = $.isString(root) ? \"#\" + root : root,\r\n selector = \"#\" + name.replace(/([\\$\\[\\]])/g, \"\\\\$1\") + \",[name='\" + name + \"']\";\r\n return (root) ? $(root).find(selector)[0] : $(selector).first()[0];\r\n}\r\n\r\n// Get ancestor by function\r\nexport function getAncestorBy(node, fn) {\r\n while (node = node.parentNode) {\r\n if (node && node.nodeType == 1 && (!fn || fn(node)))\r\n return node;\r\n }\r\n return null;\r\n}\r\n\r\n// Check if an element is hidden\r\nexport function isHidden(el) {\r\n var $el = $(el);\r\n return $el.css(\"display\") == \"none\" && !$el.closest(\".dropdown-menu\")[0] && !isModalLookup(el) && !isAutoSuggest(el) && !isHiddenTextArea(el) ||\r\n getAncestorBy(el, (node) => node.style.display == \"none\" && !node.classList.contains(\"tab-pane\") && !node.classList.contains(\"collapse\")) != null;\r\n}\r\n\r\n// Check if same text\r\nexport function sameText(o1, o2) {\r\n return (String(o1).toLowerCase() == String(o2).toLowerCase());\r\n}\r\n\r\n// Check if same string\r\nexport function sameString(o1, o2) {\r\n return (String(o1) == String(o2));\r\n}\r\n\r\n// Get element value\r\nexport function getValue(el, form) {\r\n if (!el)\r\n return \"\";\r\n let obj;\r\n if ($.isString(el)) {\r\n let ar = el.split(\" \");\r\n if (ar.length == 2) { // Parent field in master table\r\n obj = getElements(el);\r\n } else {\r\n obj = getElements(el, form);\r\n }\r\n } else if (el.type == \"radio\" || el.type == \"checkbox\") { // Single radio/checkbox\r\n obj = getElements(el);\r\n } else {\r\n obj = el;\r\n }\r\n if (obj.options) { // Selection list\r\n if (obj.list) {\r\n let val = obj.values;\r\n return obj.multiple ? val : (val[0] || \"\");\r\n } else {\r\n let val = Array.prototype.filter.call(obj.options, option => option.selected && option.value !== \"\").map(option => option.value);\r\n return (obj.type == \"select-multiple\") ? val : (val[0] || \"\");\r\n }\r\n } else if ($.isNumber(obj.length)) { // Radio/Checkbox list, or element not found\r\n let val = $(obj).filter(\":checked\").map(function() {\r\n return this.value;\r\n }).get();\r\n return (obj.length == 1) ? val[0] : val;\r\n } else if (ew.isHiddenTextArea(obj)) {\r\n $(obj).data(\"editor\").save();\r\n return obj.value;\r\n } else { // text/hidden\r\n let data = $(obj).data();\r\n if (data.lookup && data.multiple) // Modal-Lookup\r\n return obj.value.split(ew.MULTIPLE_OPTION_SEPARATOR);\r\n else\r\n return obj.value;\r\n }\r\n}\r\n\r\n// Get existing selected values as an array\r\nexport function getOptionValues(el, form) {\r\n var obj;\r\n if ($.isString(el)) {\r\n var ar = el.split(\" \");\r\n if (ar.length == 2) { // Parent field in master table\r\n obj = getElements(el);\r\n } else {\r\n obj = getElements(el, form);\r\n }\r\n } else if (el.type == \"radio\" || el.type == \"checkbox\") { // Single radio/checkbox\r\n obj = getElements(el);\r\n } else {\r\n obj = el;\r\n }\r\n if (obj.options) { // Selection list\r\n if (obj.list)\r\n return obj.values;\r\n else\r\n return Array.prototype.filter.call(obj.options, option => option.selected && option.value !== \"\").map(option => option.value);\r\n } else if ($.isNumber(obj.length)) { // Radio/Checkbox list, or element not found\r\n return $(obj).filter(\":checked\").map(function() {\r\n return this.value;\r\n }).get();\r\n } else if (ew.isHiddenTextArea(obj)) {\r\n $(obj).data(\"editor\").save();\r\n return [obj.value];\r\n } else { // text/hidden\r\n var data = $(obj).data();\r\n if (data.lookup && data.multiple) // Modal-Lookup\r\n return obj.value.split(ew.MULTIPLE_OPTION_SEPARATOR);\r\n else\r\n return [obj.value];\r\n }\r\n}\r\n\r\n// Get existing text of selected values as an array\r\nexport function getOptionTexts(el, form) {\r\n var obj;\r\n if ($.isString(el)) {\r\n var ar = el.split(\" \");\r\n if (ar.length == 2) { // Parent field in master table\r\n obj = getElements(el);\r\n } else {\r\n obj = getElements(el, form);\r\n }\r\n } else {\r\n obj = el;\r\n }\r\n if (isAutoSuggest(obj)) { // AutoSuggest (before obj.options)\r\n return [obj.input.value];\r\n } else if (isModalLookup(obj)) { // Modal-Lookup (before obj.options)\r\n var $obj = $(obj);\r\n return $obj.parent().find(\".ew-lookup-text .ew-option\").map(function() {\r\n return $(this).text().trim();\r\n }).get();\r\n } else if (obj.options) { // Selection list\r\n return Array.prototype.filter.call(obj.options, option => option.selected && option.value !== \"\").map(option => option.text);\r\n } else if ($.isNumber(obj.length)) { // Radio/Checkbox list, or element not found\r\n return $(obj).filter(\":checked\").map(function() {\r\n return $(this).parent().text();\r\n }).get();\r\n } else if (ew.isHiddenTextArea(obj)) {\r\n $(obj).data(\"editor\").save();\r\n return [obj.value];\r\n } else {\r\n return [obj.value];\r\n }\r\n}\r\n\r\n// Clear existing options\r\nexport function clearOptions(obj) {\r\n if (obj.options) { // Selection list\r\n var lo = (obj.type == \"select-multiple\" || // multiple\r\n obj.hasAttribute(\"data-dropdown\") || // dropdown\r\n convertToBool(obj.getAttribute(\"data-pleaseselect\")) === false || // data-pleaseselect=\"false\"\r\n obj.length > 0 && obj.options[0].value != \"\") // non-empty first element\r\n ? 0 : 1;\r\n if (obj.list) {\r\n obj.removeAll();\r\n } else {\r\n for (var i = obj.length - 1; i >= lo; i--)\r\n obj.remove(i);\r\n }\r\n if (isAutoSuggest(obj)) {\r\n obj.input.value = \"\";\r\n obj.value = \"\";\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Get the name or id of an element\r\n *\r\n * @param {*} el - Element\r\n * @param {boolean} [remove=true] - Remove square brackets\r\n * @returns\r\n */\r\nexport function getId(el, remove) {\r\n var id = ($.isString(el)) ? el : ($(el).attr(\"name\") || $(el).attr(\"id\")); // Use name first (id may have suffix)\r\n return (remove !== false) ? id.replace(/\\[\\]$/, \"\") : id;\r\n}\r\n\r\n// Get display value separator\r\nexport function valueSeparator(index, obj) {\r\n var sep = $(obj).data(\"value-separator\");\r\n return (Array.isArray(sep)) ? sep[index - 1] : (sep || \", \");\r\n}\r\n\r\n/**\r\n * Get display value\r\n *\r\n * @param {Object} opt - Option being displayed\r\n * @param {HTMLElment} obj - HTML element\r\n * @returns {string} Display value\r\n */\r\nexport function displayValue(opt, obj) {\r\n var text = opt.df;\r\n for (var i = 2; i <= 4; i++) {\r\n if (opt[\"df\" + i] && opt[\"df\" + i] != \"\") {\r\n var sep = valueSeparator(i - 1, obj);\r\n if ($.isUndefined(sep))\r\n break;\r\n if ($.isValue(text))\r\n text += sep;\r\n text += opt[\"df\" + i];\r\n }\r\n }\r\n return text;\r\n}\r\n\r\n/**\r\n * Get HTML for a single option\r\n *\r\n * @param {*} val - Value of the option\r\n * @returns {string} HTML\r\n */\r\nexport function optionHtml(val) {\r\n return ew.OPTION_HTML_TEMPLATE.replace(/\\{value\\}/g, val);\r\n}\r\n\r\n/**\r\n * Get HTML for diplaying all options\r\n *\r\n * @param {string[]} options - Array of all options (HTML)\r\n * @param {number} max - Maximum number of options to show\r\n * @returns {string} HTML\r\n */\r\nexport function optionsHtml(options, max) {\r\n if (options.length > (max || ew.MAX_OPTION_COUNT)) { // More than max option count\r\n return ew.language.phrase(\"CountSelected\").replace(\"%s\", options.length);\r\n } else if (options.length) { // Some options\r\n var html = \"\";\r\n for (var i = 0; i < options.length; i++)\r\n html += optionHtml(options[i]);\r\n return html;\r\n } else { // No options\r\n return ew.language.phrase(\"PleaseSelect\");\r\n }\r\n}\r\n\r\n/**\r\n * Create new option\r\n *\r\n * @param {(HTMLElement|array)} obj - Selection list\r\n * @param {Object} opt - Object for the new option\r\n * @param {form} f - form object of obj\r\n * @returns\r\n */\r\nexport function newOption(obj, opt, f) {\r\n var frm = forms.get(f.id),\r\n id = getId(obj),\r\n list = frm.getList(id),\r\n value = opt.lf,\r\n item = { lf: opt.lf, df1: opt.df, df2: opt.df2, df3: opt.df3, df4: opt.df4 },\r\n text;\r\n if (list.template && !isAutoSuggest(obj)) {\r\n text = list.template.render(item, ew.jsRenderHelpers);\r\n } else {\r\n text = displayValue(opt, obj) || value;\r\n }\r\n var args = { \"data\": item, \"name\": id, \"form\": f.$element, \"value\": value, \"text\": text };\r\n if (obj.options) { // Selection list\r\n let option;\r\n if (obj.list) {\r\n option = new SelectionListOption(args.value, args.text);\r\n } else {\r\n option = document.createElement(\"option\");\r\n option.value = args.value;\r\n option.innerHTML = args.text;\r\n }\r\n args = { ...args, option };\r\n $document.trigger(\"newoption\", [args]); // Fire \"newoption\" event for selection list\r\n if (obj.list) {\r\n obj.add(args.option.value, args.option.text);\r\n } else {\r\n obj.add(args.option);\r\n }\r\n }\r\n return args.text;\r\n}\r\n\r\n// Select combobox option\r\nexport function selectOption(obj, values) {\r\n if (!obj || !values)\r\n return;\r\n var $obj = $(obj);\r\n if (Array.isArray(values)) {\r\n if (obj.options) { // Selection list\r\n if (obj.list) {\r\n obj.value = values;\r\n } else {\r\n $obj.val(values);\r\n if (obj.type == \"select-one\" && obj.selectedIndex == -1)\r\n obj.selectedIndex = 0; // Make sure an option is selected (IE)\r\n }\r\n if (isAutoSuggest(obj) && values.length == 1) {\r\n let opts = obj.options || [];\r\n for (let opt of opts) {\r\n if (opt.value == values[0]) {\r\n obj.value = opt.value;\r\n obj.input.value = opt.text;\r\n break;\r\n }\r\n }\r\n } else if (isModalLookup(obj)) {\r\n let vals = [],\r\n html = [],\r\n opts = obj.options || [];\r\n for (let value of values) {\r\n for (let opt of opts) {\r\n if (value == opt.value) {\r\n vals.push(opt.value);\r\n html.push(optionHtml(opt.text));\r\n break;\r\n }\r\n }\r\n }\r\n $obj.val(vals.join(ew.MULTIPLE_OPTION_SEPARATOR));\r\n $obj.parent().find(\".ew-lookup-text\").html(optionsHtml(html, $obj.data(\"maxcount\")));\r\n }\r\n } else if (obj.type) {\r\n obj.value = values.join(ew.MULTIPLE_OPTION_SEPARATOR);\r\n }\r\n }\r\n // Auto-select if only one option\r\n function isAutoSelect(el) {\r\n if (!$(el).data(\"autoselect\")) // data-autoselect=\"false\"\r\n return false;\r\n var form = getForm(el);\r\n if (form) {\r\n if (/s(ea)?rch$/.test(form.id)) // Search forms\r\n return false;\r\n var list = forms.get(form.id).getList(el.id);\r\n if (list && list.parentFields.length == 0) // No parent fields\r\n return false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n if (!isAutoSelect(obj))\r\n return;\r\n if (obj.options) { // Selection List\r\n if (!obj.list && obj.type == \"select-one\" && obj.options.length == 2 && !obj.options[1].selected) {\r\n obj.options[1].selected = true;\r\n } else if (obj.options.length == 1 && !obj.options[0].selected) {\r\n obj.options[0].selected = true;\r\n }\r\n if (obj.list)\r\n obj.render();\r\n if (isAutoSuggest(obj)) {\r\n let opts = obj.options || [];\r\n if (opts.length == 1) {\r\n obj.value = opts[0].value;\r\n obj.input.value = opts[0].text;\r\n }\r\n }\r\n }\r\n}\r\n\r\n// Ajax send\r\n$document.ajaxSend(function(event, jqxhr, settings) {\r\n var url = settings.url;\r\n if (url.match(/\\/(\\w+preview|session)\\?/i)) // Preview/Session page\r\n _removeSpinner(); // Preview has spinner already\r\n var apiUrl = getApiUrl(),\r\n isApi = url.startsWith(apiUrl), // Is API request\r\n allowed = isApi || url.startsWith(currentPage());\r\n if (!allowed && url.match(/^http/i)) {\r\n var objUrl = new URL(url);\r\n allowed = objUrl.hostname == currentUrl.hostname; // Same host name\r\n }\r\n if (allowed) {\r\n if (isApi && ew.API_JWT_TOKEN && !ew.IS_WINDOWS_AUTHENTICATION) // Do NOT set JWT authorization header if Windows Authentication\r\n jqxhr.setRequestHeader(ew.API_JWT_AUTHORIZATION_HEADER, \"Bearer \" + ew.API_JWT_TOKEN);\r\n if (settings.type == \"GET\") { // GET\r\n var ar = settings.url.split(\"?\"), params = new URLSearchParams(ar[1]);\r\n params.set(ew.TOKEN_NAME_KEY, ew.TOKEN_NAME); // Add token name // PHP\r\n params.set(ew.ANTIFORGERY_TOKEN_KEY, ew.ANTIFORGERY_TOKEN); // Add antiforgery token // PHP\r\n ar[1] = params.toString();\r\n settings.url = ar[0] + (ar[1] ? \"?\" + ar[1] : \"\");\r\n } else { // POST\r\n if (settings.data instanceof FormData) { // FormData\r\n settings.data.set(ew.TOKEN_NAME_KEY, ew.TOKEN_NAME); // Add token name // PHP\r\n settings.data.set(ew.ANTIFORGERY_TOKEN_KEY, ew.ANTIFORGERY_TOKEN); // Add antiforgery token // PHP\r\n } else {\r\n var params = new URLSearchParams(settings.data);\r\n params.set(ew.TOKEN_NAME_KEY, ew.TOKEN_NAME); // Add token name // PHP\r\n params.set(ew.ANTIFORGERY_TOKEN_KEY, ew.ANTIFORGERY_TOKEN); // Add antiforgery token // PHP\r\n settings.data = params.toString();\r\n }\r\n }\r\n }\r\n});\r\n\r\n// Ajax start\r\n$document.ajaxStart(function() {\r\n $document.data(\"_ajax\", true);\r\n ew.addSpinner();\r\n $(\"form.ew-form\").addClass(\"ew-wait\").each(function() {\r\n var frm = forms.get(this.id);\r\n if (frm) {\r\n if (!frm.multiPage || !frm.multiPage.lastPageSubmit)\r\n frm.disableForm();\r\n }\r\n });\r\n});\r\n\r\n// Ajax stop (internal)\r\nfunction _ajaxStop() {\r\n $(\"form.ew-form.ew-wait\").removeClass(\"ew-wait\").each(function() {\r\n var frm = forms.get(this.id);\r\n if (frm) {\r\n if (!frm.multiPage || !frm.multiPage.lastPageSubmit) {\r\n frm.enableForm();\r\n }\r\n }\r\n });\r\n ew.removeSpinner();\r\n $document.data(\"_ajax\", false);\r\n}\r\n\r\n// Ajax stop/error\r\n$document.ajaxStop(_ajaxStop).ajaxError(_ajaxStop);\r\n\r\n// Execute JavaScript in HTML loaded by Ajax\r\nexport function executeScript(html, id) {\r\n let matches = html.replace(/<head>[\\s\\S]*<\\/head>/, \"\").matchAll(/<script([^>]*)>([\\s\\S]*?)<\\/script\\s*>/ig);\r\n Array.from(matches).forEach((ar, i) => {\r\n let text = ar[2];\r\n if (/(\\s+type\\s*=\\s*['\"]*text\\/javascript['\"]*)|^((?!\\s+type\\s*=).)*$/i.test(ar[1]) && text)\r\n addScript(text, \"scr_\" + id + \"_\" + i++);\r\n });\r\n}\r\n\r\n// Strip JavaScript in HTML loaded by Ajax\r\nexport function stripScript(html) {\r\n let matches = html.matchAll(/<script([^>]*)>([\\s\\S]*?)<\\/script\\s*>/ig);\r\n for (let ar of matches) {\r\n let text = ar[0];\r\n if (/(\\s+type\\s*=\\s*['\"]*text\\/javascript['\"]*)|^((?!\\s+type\\s*=).)*$/i.test(ar[1]))\r\n html = html.replace(text, \"\");\r\n }\r\n return html;\r\n}\r\n\r\n// Add SCRIPT tag\r\nexport function addScript(text, id) {\r\n var scr = document.createElement(\"SCRIPT\");\r\n if (id)\r\n scr.id = id;\r\n scr.text = text;\r\n return document.body.appendChild(scr); // Do not use jQuery so it can be removed\r\n}\r\n\r\n// Remove JavaScript added by Ajax\r\nexport function removeScript(id) {\r\n if (id)\r\n $(\"script[id^='scr_\" + id + \"_']\").remove();\r\n}\r\n\r\n// Clean HTML loaded by Ajax for modal dialog\r\nexport function getContent(html) {\r\n let body = stripScript(html).match(/<body[\\s\\S]*>[\\s\\S]*<\\/body>/i);\r\n return body ? $(body[0]).not(\"div[id^=ew].modal, #ew-tooltip, #ew-drilldown-panel, #cookie-consent, #template-upload, #template-download\") : $();\r\n}\r\n\r\n// Get all options of Selection list or Radio/Checkbox list as array\r\nexport function getOptions(obj) {\r\n return obj.options ? Array.prototype.map.call(obj.options, (opt) => [opt.value, opt.text]) : [];\r\n}\r\n\r\n/**\r\n * Show Add Option dialog\r\n *\r\n * @param {Object} args - Arguments\r\n * @param {Object} args.frm - form object\r\n * @param {HTMLElement} args.lnk - Add option anchor element\r\n * @param {string} args.el - Form element name\r\n * @param {string} args.url - URL of the Add form\r\n * @returns\r\n */\r\nexport function addOptionDialogShow(args) {\r\n\r\n // Hide dialog\r\n var _hide = function() {\r\n removeScript($dlg.data(\"args\").el);\r\n var frm = $dlg.removeData(\"args\").find(\".modal-body form\").data(\"form\");\r\n if (frm)\r\n frm.destroyEditor();\r\n $dlg.find(\".modal-body\").html(\"\");\r\n $dlg.find(\".modal-footer .btn-primary\").off();\r\n $dlg.data(\"showing\", false);\r\n }\r\n\r\n var $dlg = ew.addOptionDialog || $(\"#ew-add-opt-dialog\").on(\"hidden.bs.modal\", _hide);\r\n if (!$dlg[0]) {\r\n _alert(\"DIV #ew-add-opt-dialog not found.\");\r\n return;\r\n }\r\n if ($dlg.data(\"showing\"))\r\n return;\r\n $dlg.data(\"showing\", true);\r\n\r\n // Submission success\r\n var _submitSuccess = function(data) {\r\n var results = data,\r\n args = $dlg.data(\"args\"),\r\n frm = forms.get(args.lnk), // form object\r\n objName = $dlg.find(\".modal-body form input[name='\" + ew.API_OBJECT_NAME + \"']\").val(), // Get object name from form\r\n el = args.el, // HTML element name\r\n re = /^x(\\d+)_/,\r\n m = el.match(re), // Check row index\r\n prefix = m ? m[0] : \"x_\",\r\n index = m ? m[1] : -1,\r\n name = el.replace(re, \"x_\"),\r\n list = frm.getList(el);\r\n if ($.isString(data))\r\n results = parseJson(data);\r\n if (results?.success && results[objName]) { // Success\r\n $dlg.modal(\"hide\");\r\n var result = results[objName],\r\n form = frm.$element[0], // HTML form or DIV\r\n obj = getElements(el, form);\r\n if (obj) {\r\n var lf = list.linkField,\r\n dfs = list.displayFields.slice(), // Clone\r\n ffs = list.filterFields.slice(), // Clone\r\n pfs = list.parentFields.slice(); // Clone\r\n pfs.forEach((pf, i) => {\r\n if (pf.split(\" \").length == 1) // Parent field in the same table, add row index\r\n pfs[i] = pfs[i].replace(/^x_/, prefix);\r\n });\r\n var lfv = (lf != \"\") ? result[lf] : \"\",\r\n row = { lf: lfv };\r\n dfs.forEach((df, i) => {\r\n if (df in result)\r\n row[\"df\" + (i || \"\")] = result[df];\r\n });\r\n ffs.forEach((ff, i) => {\r\n if (ff in result)\r\n row[\"ff\" + (i || \"\")] = result[ff];\r\n });\r\n if (lfv && dfs.length > 0 && row[\"df\"]) {\r\n if (list.ajax === null) // Non-Ajax\r\n list.lookupOptions.push(row);\r\n var arp = pfs.map(pf => getOptionValues(pf, form)), // Get the parent field values\r\n args = {\"data\": row, \"parents\": arp, \"valid\": true, \"name\": getId(obj), \"form\": form};\r\n $document.trigger(\"addoption\", [args]);\r\n if (args.valid) { // Add the new option\r\n var ar = getOptions(obj),\r\n vals = [];\r\n var txt = newOption(obj, row, form);\r\n if (obj.options) {\r\n obj.options[obj.options.length - 1].selected = true;\r\n if (obj.list) { // Radio/Checkbox list\r\n obj.render();\r\n $(obj.target).find(\"input\").last().trigger(\"focus\");\r\n }\r\n if (isAutoSuggest(obj)) {\r\n $(obj).val(lfv).trigger(\"change\");\r\n $(obj.input).val(txt).trigger(\"focus\");\r\n } else if (isModalLookup(obj)) {\r\n var $obj = $(obj), $lu = $(getElement(\"lu_\" + args.name, form));\r\n if (obj.multiple) { // Add to existing values\r\n var val = $(obj).val(), vals = [], nv = String(lfv);\r\n if (val !== \"\")\r\n vals = val.split(ew.MULTIPLE_OPTION_SEPARATOR);\r\n if (!vals.includes(nv)) {\r\n vals.push(nv);\r\n $obj.val(vals.join()).trigger(\"change\");\r\n var html = $lu.html(), arOpt = $lu.find(\".ew-option\").map(function() {\r\n return $(this).html();\r\n }).get();\r\n if (arOpt.length) { // Some options selected\r\n arOpt.push(txt);\r\n $lu.html(optionsHtml(arOpt, $obj.data(\"maxcount\")));\r\n } else if (html == ew.language.phrase(\"PleaseSelect\")) { // No options selected\r\n $lu.html(optionHtml(txt));\r\n } else if (html) { // Many options selected\r\n $lu.html(ew.language.phrase(\"CountSelected\").replace(\"%s\", vals.length));\r\n }\r\n }\r\n } else {\r\n $obj.val(lfv).trigger(\"change\");\r\n $lu.html(txt);\r\n }\r\n } else {\r\n $(obj).trigger(\"change\").trigger(\"focus\");\r\n }\r\n }\r\n var $form = $(form), suffix = ($form.is(\"div\")) ? \"_\" + $form.attr(\"id\") : \"\";\r\n var cnt = $form.find(\"#key_count\" + suffix).val();\r\n if (cnt > 0) { // Grid-Add/Edit, update other rows\r\n for (var i = 1; i <= cnt; i++) {\r\n if (i == index)\r\n continue;\r\n var obj2 = getElements(name.replace(/^x/, \"x\" + i), form);\r\n var ar2 = getOptions(obj2), vals = [];\r\n if (JSON.stringify(ar) != JSON.stringify(ar2)) // Not same options\r\n continue;\r\n newOption(obj2, row, form);\r\n if (obj2.options && obj.list) // Radio/Checkbox list\r\n obj2.render();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } else { // Failure\r\n if (results?.error) {\r\n if ($.isString(results.error))\r\n showToast(results.error);\r\n else if ($.isString(results.error?.description))\r\n showToast(results.error.description);\r\n } else {\r\n var msg,\r\n $div = $(\"<div></div>\").html(data).find(\"div.ew-message-dialog\");\r\n if ($div[0]) {\r\n msg = $div.html();\r\n } else {\r\n msg = results?.failureMessage || data;\r\n if (!msg || String(msg).trim() == \"\")\r\n msg = ew.language.phrase(\"InsertFailed\");\r\n }\r\n showToast(msg);\r\n }\r\n }\r\n }\r\n\r\n // Fail\r\n var _fail = function(o) {\r\n $dlg.modal(\"hide\");\r\n _alert(\"Server Error \" + o.status + \": \" + o.statusText);\r\n }\r\n\r\n // Submit\r\n var _submit = function(e) {\r\n let $dlg = ew.addOptionDialog,\r\n form = $dlg.find(\".modal-body form\")[0],\r\n frm = forms.get(form.id),\r\n btn = e ? e.target : null,\r\n $btn = $(btn);\r\n if (frm.canSubmit()) {\r\n $btn.prop(\"disabled\", false).removeClass(\"disabled\");\r\n $body.css(\"cursor\", \"wait\");\r\n $.post(getApiUrl([ew.API_ADD_ACTION, form.elements[ew.API_OBJECT_NAME].value]), $(form).serialize(), _submitSuccess).fail(_fail).always(function() {\r\n frm.enableForm();\r\n $btn.prop(\"disabled\", false).removeClass(\"disabled\");\r\n $body.css(\"cursor\", \"default\");\r\n });\r\n }\r\n return false;\r\n }\r\n\r\n $dlg.modal(\"hide\");\r\n $dlg.data(\"args\", args);\r\n\r\n // Get form HTML\r\n var success = function(data) {\r\n var frm = forms.get(args.lnk),\r\n prefix = \"x_\",\r\n m = args.el.match(/^(x\\d+_)/);\r\n if (m) // Contains row index\r\n prefix = m[1];\r\n var list = frm.getList(args.el),\r\n pfs = list.parentFields.slice() // Clone\r\n .map(pf => (pf.split(\" \").length == 1) ? pf.replace(/^x_/, prefix) : pf), // Parent field in the same table, add row index\r\n form = frm.htmlForm,\r\n ar = pfs.map(pf => getOptionValues(pf, form)),\r\n ar2 = pfs.map(pf => getOptionTexts(pf, form)),\r\n ffs = list.filterFieldVars.slice(); // Clone\r\n $dlg.find(\".modal-title\").html($(args.lnk).closest(\".ew-add-opt-btn\").data(\"title\"));\r\n $dlg.find(\".modal-body\").html(stripScript(data));\r\n var form = $dlg.find(\".modal-body form\")[0];\r\n if (form) { // Set the filter field value\r\n $(form).on(\"keydown\", function(e) {\r\n if (e.key == \"Enter\" && e.target.nodeName != \"TEXTAREA\")\r\n return _submit();\r\n });\r\n ar.forEach((v, i) => {\r\n (function() {\r\n var obj = getElements(ffs[i], form);\r\n if (obj) {\r\n if (obj.options || obj.length) { // Selection list\r\n $(obj).first().one(\"updated\", () => selectOption(obj, v));\r\n } else {\r\n selectOption(obj, v);\r\n }\r\n }\r\n })();\r\n });\r\n }\r\n ew.addOptionDialog = $dlg.modal(\"show\");\r\n $dlg.find(\".modal-footer .btn-primary\").click(_submit).focus();\r\n executeScript(data, args.el);\r\n if (form) { // Set the filter field value\r\n ar.forEach((v, i) => {\r\n var obj = getElements(ffs[i], form);\r\n if (obj) {\r\n if (isAutoSuggest(obj)) { // AutoSuggest\r\n obj.value = v[0];\r\n obj.input.value = ar2[i][0];\r\n obj.add(v[0], ar2[i][0], true);\r\n } else if (isModalLookup(obj)) { // Modal-Lookup\r\n obj.value = v[0];\r\n updateOptions.call(forms.get(form.id), obj);\r\n } else if (obj.options || obj.length) { // Selection list\r\n // Skip\r\n } else { // Text\r\n obj.value = v[0];\r\n }\r\n }\r\n });\r\n }\r\n $dlg.trigger(\"load.ew\");\r\n };\r\n $.get(args.url, success).fail(_fail);\r\n}\r\n\r\n// Hide Modal dialog\r\nexport function modalDialogHide(e) {\r\n var $dlg = $(this), args = $dlg.data(\"args\");\r\n removeScript(\"ModalDialog\");\r\n var frm = $dlg.removeData(\"args\").find(\".modal-body form\").data(\"form\");\r\n if (frm)\r\n frm.destroyEditor();\r\n var $bd = $dlg.find(\".modal-body\").html(\"\");\r\n if ($bd.ewjtable && $bd.ewjtable(\"instance\"))\r\n $bd.ewjtable(\"destroy\");\r\n $dlg.find(\".modal-footer .btn-primary\").off();\r\n $dlg.find(\".modal-dialog\").removeClass(function(index, className) {\r\n var m = className.match(/table\\-\\w+/);\r\n return (m) ? m[0] : \"\";\r\n });\r\n $dlg.data(\"showing\", false);\r\n $dlg.data(\"url\", null);\r\n if (args && args.reload)\r\n window.location.reload();\r\n}\r\n\r\n/**\r\n * Show modal dialog\r\n *\r\n * @param {Object} args - Arguments\r\n * @param {HTMLFormElement} args.f - Form of List page\r\n * @param {HTMLElement} args.lnk - Anchor element\r\n * @param {string} args.url - URL of the form\r\n * @param {string|null} args.btn - Button phrase ID\r\n * @param {string} args.caption - Caption in dialog header\r\n * @param {boolean} args.reload - Reload page after hiding dialog or not\r\n * @param {string} args.size - Size of the dialog 'modal-sm'|''|modal-lg'|'modal-xl'(default)\r\n * @returns false\r\n */\r\nexport function modalDialogShow(args) {\r\n $(args.lnk).tooltip(\"hide\");\r\n var f = args.f;\r\n if (f && !keySelected(f)) {\r\n _prompt(\"<p class=\\\"text-danger\\\">\" + ew.language.phrase(\"NoRecordSelected\") + \"</p>\");\r\n return false;\r\n }\r\n\r\n var $dlg = ew.modalDialog || $(\"#ew-modal-dialog\").on(\"hidden.bs.modal\", modalDialogHide); // div#ew-modal-dialog always exists\r\n if ($dlg.data(\"showing\") && $dlg.data(\"url\") == args.url)\r\n return false;\r\n $dlg.data({ showing: true, url: args.url });\r\n args.reload = false;\r\n\r\n // size\r\n if (args.size === \"modal-sm\") { // 300px\r\n $dlg.find(\".modal-dialog\").toggleClass(\"modal-sm\", true).toggleClass(\"modal-lg modal-xl\", false);\r\n } else if (args.size === \"\") { // 500px\r\n $dlg.find(\".modal-dialog\").toggleClass(\"modal-sm modal-lg modal-xl\", false);\r\n } else if (args.size === \"modal-lg\") { // 800px\r\n $dlg.find(\".modal-dialog\").toggleClass(\"modal-lg\", true).toggleClass(\"modal-sm modal-xl\", false);\r\n } else { // Default = 1140px\r\n $dlg.find(\".modal-dialog\").toggleClass(\"modal-xl\", true).toggleClass(\"modal-sm modal-lg\", false);\r\n }\r\n\r\n // caption\r\n var _caption = function() {\r\n var args = $dlg.data(\"args\");\r\n var $lnk = $(args.lnk);\r\n return args.caption || $lnk.data(\"caption\") || $lnk.data(\"original-title\") || \"\";\r\n };\r\n\r\n // button text\r\n var _button = function() {\r\n var args = $dlg.data(\"args\");\r\n if ($.isNull(args.btn))\r\n return \"\";\r\n else if (args.btn && args.btn != \"\")\r\n return ew.language.phrase(args.btn);\r\n else\r\n return _caption();\r\n };\r\n\r\n // fail\r\n var _fail = function(o) {\r\n $dlg.modal(\"hide\");\r\n if (o.status)\r\n _alert(\"Server Error \" + o.status + \": \" + o.statusText);\r\n }\r\n\r\n // always\r\n var _always = function(o) {\r\n $body.css(\"cursor\", \"default\");\r\n }\r\n\r\n // check if current page\r\n var _current = function(url) {\r\n var a = $(\"<a>\", { href: url })[0];\r\n return window.location.pathname.endsWith(a.pathname);\r\n }\r\n\r\n /**\r\n * handle result\r\n *\r\n * @param {Object} result - Result object\r\n * @param {string|Object} result.error - Error message or object\r\n * @param {string} result.error.message - Error message\r\n * @param {string} result.error.description - Error message\r\n * @param {string} result.failureMessage - Failure message\r\n * @param {string} result.successMessage - Success message\r\n * @param {string} result.warningMessage - Warning message\r\n * @param {string} result.message - Message\r\n * @param {string} result.url - Redirection URL\r\n * @param {string} result.modal - Redirect to result.url in current modal dialog\r\n * @param {boolean} result.view - result.url is View page => No primary button\r\n * @param {string} result.caption - Caption of modal dialog for result.url\r\n * @param {boolean} result.reload - Reload current page\r\n */\r\n var handleResult = function(result) {\r\n var cb = null,\r\n url = result.url,\r\n reload = result.reload;\r\n if (url || reload) {\r\n cb = function() {\r\n if (url) {\r\n if (result.modal && !_current(url)) {\r\n var args = $dlg.data(\"args\");\r\n args.reload = true;\r\n if (result.caption)\r\n args.caption = result.caption;\r\n args.btn = result.view ? null : \"\";\r\n $dlg.data(\"args\", args);\r\n url += (url.split(\"?\").length > 1 ? \"&\" : \"?\") + \"modal=1&rnd=\" + random();\r\n $body.css(\"cursor\", \"wait\");\r\n $.get(url).done(success).fail(_fail).always(_always);\r\n } else {\r\n $dlg.modal(\"hide\");\r\n window.location = sanitizeUrl(url);\r\n }\r\n } else if (reload) {\r\n $dlg.modal(\"hide\");\r\n window.location.reload();\r\n }\r\n };\r\n }\r\n if ($.isString(result.failureMessage)) {\r\n _alert(result.failureMessage);\r\n } else if ($.isString(result.warningMessage)) {\r\n _alert(result.warningMessage, cb, \"warning\");\r\n } else if ($.isString(result.message)) {\r\n _alert(result.message, cb, \"body\");\r\n } else if ($.isString(result.successMessage)) {\r\n _alert(result.successMessage, cb, \"success\");\r\n } else if (result.error) {\r\n if ($.isString(result.error))\r\n _alert(result.error);\r\n else if ($.isString(result.error?.message))\r\n _alert(result.error.message);\r\n else if ($.isString(result.error?.description))\r\n _alert(result.error.description);\r\n } else if (cb) {\r\n cb();\r\n }\r\n }\r\n\r\n // submit success\r\n var _submitSuccess = function(data) {\r\n var result = parseJson(data);\r\n if ($.isObject(result)) {\r\n handleResult(result);\r\n } else {\r\n var body = getContent(data);\r\n if (body.length) { // Has HTML elements\r\n var $bd = $dlg.find(\".modal-body\").html(body);\r\n var footer = \"\";\r\n var cf = $bd.find(\"#confirm\");\r\n var ct = $bd.find(\"#conflict\");\r\n if (ct && ct.val() == \"1\") { // Conflict page\r\n footer += \"<button type=\\\"button\\\" id=\\\"btn-overwrite\\\" class=\\\"btn btn-primary ew-btn\\\">\" + ew.language.phrase(\"OverwriteBtn\") + \"</button>\";\r\n footer += \"<button type=\\\"button\\\" id=\\\"btn-reload\\\" class=\\\"btn btn-default ew-btn\\\">\" + ew.language.phrase(\"ReloadBtn\") + \"</button>\";\r\n footer += \"<button type=\\\"button\\\" class=\\\"btn btn-default ew-btn\\\" data-dismiss=\\\"modal\\\">\" + ew.language.phrase(\"CancelBtn\") + \"</button>\";\r\n $dlg.find(\".modal-footer\").html(footer);\r\n $dlg.find(\".modal-footer #btn-overwrite\").on('click', {action: 'overwrite'}, _submit);\r\n $dlg.find(\".modal-footer #btn-reload\").on('click', {action: 'show'}, _submit);\r\n } else if (cf && cf.val() == \"confirm\") { // Confirm page\r\n footer += \"<button type=\\\"button\\\" class=\\\"btn btn-primary ew-btn\\\">\" + ew.language.phrase(\"ConfirmBtn\") + \"</button>\";\r\n footer += \"<button type=\\\"button\\\" class=\\\"btn btn-default ew-btn\\\">\" + ew.language.phrase(\"CancelBtn\") + \"</button>\";\r\n $dlg.find(\".modal-footer\").html(footer);\r\n $dlg.find(\".modal-footer .btn-primary\").click(_submit).focus();\r\n $dlg.find(\".modal-footer .btn-default\").on(\"click\", {action: \"cancel\"}, _submit);\r\n } else { // Normal page\r\n var btn = _button();\r\n if (btn)\r\n footer += \"<button type=\\\"button\\\" class=\\\"btn btn-primary ew-btn\\\">\" + btn + \"</button>\";\r\n footer += \"<button type=\\\"button\\\" class=\\\"btn btn-default ew-btn\\\" data-dismiss=\\\"modal\\\">\" + ew.language.phrase(\"CancelBtn\") + \"</button>\";\r\n $dlg.find(\".modal-footer\").html(footer);\r\n $dlg.find(\".modal-footer .btn-primary\").addClass(\"ew-submit\").click(_submit).focus();\r\n }\r\n executeScript(data, \"ModalDialog\");\r\n $dlg.trigger(\"load.ew\"); // Trigger load event for, e.g. Use JavaScript popup message\r\n } else if (data) {\r\n $dlg.modal(\"hide\");\r\n ew.alert(data);\r\n }\r\n }\r\n }\r\n\r\n // submit\r\n var _submit = function(e) {\r\n var form = $dlg.find(\".modal-body form\")[0],\r\n $form = $(form),\r\n frm = forms.get(form.id),\r\n action = e && e.data ? e.data.action : null,\r\n btn = e ? e.target : null;\r\n if (btn) {\r\n if (btn.classList.contains(\"disabled\"))\r\n return false;\r\n frm.enableForm = function() {\r\n $(btn).prop(\"disabled\", false).removeClass(\"disabled\");\r\n };\r\n frm.disableForm = function() {\r\n $(btn).prop(\"disabled\", true).addClass(\"disabled\");\r\n };\r\n }\r\n var input = form.elements[\"action\"];\r\n if (action && input)\r\n input.value = action; // Update action\r\n if (action == \"cancel\") { // Cancel\r\n $.post($form.attr(\"action\"), $form.serialize(), success).fail(_fail).always(_always);\r\n } else if (frm.canSubmit()) {\r\n $body.css(\"cursor\", \"wait\");\r\n $.post($form.attr(\"action\"), $form.serialize(), _submitSuccess).fail(_fail).always(function() {\r\n frm.enableForm();\r\n _always();\r\n });\r\n }\r\n return false;\r\n }\r\n\r\n $dlg.modal(\"hide\");\r\n $dlg.data(\"args\", args);\r\n\r\n var success = function(data) {\r\n var result = parseJson(data);\r\n if ($.isObject(result)) {\r\n handleResult(result);\r\n } else {\r\n var args = $dlg.data(\"args\");\r\n var $lnk = $(args.lnk);\r\n $dlg.find(\".modal-title\").html(_caption());\r\n var footer = \"\";\r\n var btn = _button();\r\n if (btn)\r\n footer += \"<button type=\\\"button\\\" class=\\\"btn btn-primary ew-btn\\\">\" + btn + \"</button>\";\r\n if (footer != \"\")\r\n footer += \"<button type=\\\"button\\\" class=\\\"btn btn-default ew-btn\\\" data-dismiss=\\\"modal\\\">\" + ew.language.phrase(\"CancelBtn\") + \"</button>\";\r\n else\r\n footer = \"<button type=\\\"button\\\" class=\\\"btn btn-default ew-btn\\\" data-dismiss=\\\"modal\\\">\" + ew.language.phrase(\"CloseBtn\") + \"</button>\";\r\n $dlg.find(\".modal-footer\").html(footer);\r\n var body = getContent(data);\r\n $dlg.find(\".modal-body\").html(body);\r\n var table = $lnk.data(\"table\");\r\n if (table)\r\n $dlg.find(\".modal-dialog\").addClass(\"table-\" + table);\r\n var $btn = $dlg.find(\".modal-footer .btn-primary\").addClass(\"ew-submit\").click(_submit);\r\n $dlg.find(\".modal-body form\").on(\"keydown\", function(e) {\r\n if (e.key == \"Enter\" && e.target.nodeName != \"TEXTAREA\")\r\n return $btn.click();\r\n });\r\n ew.modalDialog = $dlg.modal(\"show\");\r\n executeScript(data, \"ModalDialog\");\r\n $dlg.trigger(\"load.ew\"); // Trigger load event for, e.g. YouTube videos, ReCAPTCHA and Google maps\r\n $btn.focus();\r\n }\r\n };\r\n\r\n $body.css(\"cursor\", \"wait\");\r\n\r\n var url = args.url;\r\n if (f) { // Post form\r\n var $f = $(f);\r\n if (!f.elements.modal)\r\n $(\"<input>\").attr({type: \"hidden\", name: \"modal\", value: \"1\"}).appendTo($f);\r\n $.post(url, $f.serialize(), success).fail(_fail).always(_always);\r\n } else {\r\n url += (url.split(\"?\").length > 1 ? \"&\" : \"?\") + \"modal=1&rnd=\" + random();\r\n $.get(url, success).fail(_fail).always(_always);\r\n }\r\n\r\n return false;\r\n}\r\n\r\n// Show Modal Lookup\r\nexport function modalLookupShow(args) {\r\n var el = args.el, f = getForm(args.lnk);\r\n if (!f || !el)\r\n return;\r\n\r\n var $dlg = ew.modalLookupDialog || $(\"#ew-modal-lookup-dialog\").on(\"hidden.bs.modal\", modalDialogHide);\r\n if (!$dlg[0]) {\r\n _alert(\"DIV #ew-modal-lookup-dialog not found.\");\r\n return;\r\n }\r\n if ($dlg.data(\"showing\"))\r\n return;\r\n $dlg.data(\"showing\", true);\r\n\r\n var $f = $(f),\r\n $input = $f.find(\"[id='\" + el + \"']\"), // id may contains \"[]\"\r\n $bd = $dlg.find(\".modal-body\"),\r\n $lnk = $(args.lnk),\r\n $lu = $lnk.closest(\".ew-lookup-list\").find(\".ew-lookup-text\").trigger(\"focus\"),\r\n oid = getId(el, false),\r\n m = oid.match(/^([xy])(\\d*)_/),\r\n rowindex = m ? m[2] : \"\",\r\n list = forms.get(f.id).getList(el);\r\n\r\n // Format data\r\n var _format = function(data) {\r\n if (data.result == \"OK\" && Array.isArray(data.records)) {\r\n data.records.forEach(function(ar, index) {\r\n var item;\r\n if (Array.isArray(ar))\r\n item = { \"lf\": ar[0], \"df1\": ar[1], \"df2\": ar[2], \"df3\": ar[3], \"df4\": ar[4] };\r\n else if ($.isObject(ar))\r\n item = { lf: ar.lf, df1: ar.df, df2: ar.df2, df3: ar.df3, df4: ar.df4 };\r\n var txt = displayValue(ar, $input);\r\n if (list.template) {\r\n item[\"df\"] = list.template.render(item, ew.jsRenderHelpers);\r\n } else {\r\n item[\"df\"] = txt;\r\n }\r\n item[\"txt\"] = txt;\r\n data.records[index] = item;\r\n });\r\n }\r\n return data;\r\n }\r\n\r\n // Set AutoSuggest\r\n var setAutoSuggest = function(value, text) {\r\n if (!isAutoSuggest($input))\r\n return;\r\n let el = $input[0];\r\n el.add(value, text, true);\r\n el.input.value = text;\r\n }\r\n\r\n // Add option\r\n var addOpt = function(ar) {\r\n // Check if selected records are in the current page\r\n var vals = [], html = [], opts = [], txts = [], useText = !args.m && args.srch;\r\n $bd.ewjtable(\"selectedRows\").each(function() {\r\n var record = $(this).data(\"record\");\r\n vals.push(record.lf);\r\n html.push(record.df);\r\n opts.push(record.df);\r\n txts.push(record.txt); // Text for Auto-Suggest\r\n });\r\n if (ar.sort().join() === vals.sort().join()) { // All selected records are from the current page\r\n $lu.html(optionsHtml(opts, $input.data(\"maxcount\")));\r\n setAutoSuggest(vals.join(), txts.join(\", \"));\r\n $input.val(useText ? html.join(\", \") : vals.join()).trigger(\"change\");\r\n } else { // Get selected records from server\r\n var data = Object.assign({ page: list.page, field: list.field, ajax: \"modal\", keys: ar }, getUserParams('#p_' + oid, f));\r\n $body.css(\"cursor\", \"wait\");\r\n $.ajax(getApiUrl(ew.API_LOOKUP_ACTION), {\r\n type: \"POST\",\r\n dataType: \"json\",\r\n data: data\r\n }).done(_format).then(function(data) {\r\n if (data.result == \"OK\" && Array.isArray(data.records)) {\r\n var vals = [], html = [], opts = [], txts = [], results = data.records;\r\n for (let result of results) {\r\n vals.push(result.lf);\r\n html.push(result.df)\r\n opts.push(result.df);\r\n txts.push(result.txt); // Text for Auto-Suggest\r\n }\r\n $lu.html(optionsHtml(opts, $input.data(\"maxcount\")));\r\n setAutoSuggest(vals.join(), txts.join(\", \"));\r\n $input.val(useText ? html.join(\", \") : vals.join()).trigger(\"change\");\r\n }\r\n }).always(function() {\r\n $body.css(\"cursor\", \"default\");\r\n });\r\n }\r\n }\r\n\r\n // Submit\r\n var _submit = function() {\r\n addOpt(arLinkValue);\r\n $dlg.modal(\"hide\");\r\n return false;\r\n }\r\n\r\n // Hide\r\n $dlg.modal(\"hide\");\r\n $dlg.data(\"args\", args);\r\n var _timer, $search;\r\n\r\n // Success\r\n var success = function(data) {\r\n if (data.result == \"OK\") {\r\n $dlg.find(\".modal-title\").html($lnk.attr(\"title\") || $lnk.data(\"original-title\"));\r\n $dlg.find(\".modal-body .ewjtable thead\").toggle(!!args.m);\r\n $dlg.find(\".modal-footer\").html('<button type=\"button\" id=\"btn-select\" class=\"btn btn-primary ew-btn\">' + ew.language.phrase(\"SelectBtn\") + '</button>' +\r\n '<button type=\"button\" class=\"btn btn-default ew-btn\" data-dismiss=\"modal\">' + ew.language.phrase(\"CancelBtn\") + '</button>');\r\n $search = $dlg.find(\".modal-header .modal-tools input[name=sv]\").off(\"keyup.ew\").on(\"keyup.ew\", function(e) {\r\n if (_timer)\r\n _timer.cancel();\r\n _timer = $.later(ew.LOOKUP_DELAY, null, function() {\r\n $bd.ewjtable(\"load\", { \"sv\": $search.val() });\r\n });\r\n });\r\n $dlg.find(\".modal-footer #btn-select\").click(_submit); // Select\r\n ew.modalLookupDialog = $dlg.modal(\"show\");\r\n $search.focus();\r\n } else {\r\n _alert(data.message);\r\n }\r\n };\r\n\r\n var arp = [];\r\n var linkValue = $input.val(); // Link values\r\n var arLinkValue = (linkValue !== \"\") ? linkValue.split(ew.MULTIPLE_OPTION_SEPARATOR) : [];\r\n var data = Object.assign({ page: list.page, field: list.field }, getUserParams('#p_' + oid, f));\r\n\r\n // Add parent field values\r\n var parentId = list.parentFields.slice(); // Clone\r\n if (rowindex != \"\") {\r\n for (var i = 0, len = parentId.length; i < len; i++) {\r\n var ar = parentId[i].split(\" \");\r\n if (ar.length == 1) // Parent field in the same table, add row index\r\n parentId[i] = parentId[i].replace(/^x_/, \"x\" + rowindex + \"_\");\r\n }\r\n }\r\n if (parentId.length > 0) {\r\n for (var i = 0, len = parentId.length; i < len; i++)\r\n arp.push(getOptionValues(parentId[i], f));\r\n }\r\n for (var i = 0, cnt = arp.length; i < cnt; i++) // Filter by parent fields\r\n data[\"v\" + (i + 1)] = arp[i].join(ew.MULTIPLE_OPTION_SEPARATOR);\r\n\r\n $body.css(\"cursor\", \"wait\");\r\n $bd.ewjtable({\r\n paging: true,\r\n pageSize: args.n,\r\n pageSizes: [],\r\n pageSizeChangeArea: false,\r\n pageList: \"minimal\",\r\n selecting: true,\r\n selectingCheckboxes: true,\r\n multiselect: !!args.m,\r\n actions: {\r\n \"listAction\": function(postData, jtParams) {\r\n var _data = Object.assign({}, data, {\r\n ajax: \"modal\",\r\n start: jtParams.start,\r\n recperpage: jtParams.recperpage\r\n });\r\n if ($.isObject(postData)) // Search\r\n Object.assign(_data, postData);\r\n return $.ajax(getApiUrl(ew.API_LOOKUP_ACTION), {\r\n type: \"POST\",\r\n dataType: \"json\",\r\n data: _data\r\n }).done(_format).always(function() {\r\n $body.css(\"cursor\", \"default\");\r\n });\r\n }\r\n },\r\n messages: {\r\n serverCommunicationError: ew.language.phrase(\"ServerCommunicationError\"),\r\n loadingMessage: '<div class=\"' + ew.spinnerClass + ' m-3 ew-loading\" role=\"status\"><span class=\"sr-only\">' + ew.language.phrase(\"Loading\") + '</span></div>',\r\n noDataAvailable: ew.language.phrase(\"NoRecord\"),\r\n close: ew.language.phrase(\"CloseBtn\"),\r\n pagingInfo: ew.language.phrase(\"Record\") + \" {0}-{1} \" + ew.language.phrase(\"Of\") + \" {2}\",\r\n pageSizeChangeLabel: ew.language.phrase(\"RecordsPerPage\"),\r\n gotoPageLabel: ew.language.phrase(\"Page\")\r\n },\r\n fields: {\r\n \"lf\": { key: true, list: false},\r\n \"df\": {}\r\n },\r\n recordsLoaded: function(e, data) {\r\n var selectedRows = $(e.target).find(\".ewjtable-data-row\").filter(function() {\r\n return arLinkValue.includes(String($(this).data(\"record-key\")));\r\n });\r\n $(e.target).ewjtable(\"selectRows\", selectedRows);\r\n },\r\n selectionChanged: function(e, data) {\r\n var $rows = data.rows;\r\n if ($rows) {\r\n if (!args.m)\r\n arLinkValue = [];\r\n $rows.each(function() {\r\n var $row = $(this);\r\n var key = String($row.data(\"record-key\"));\r\n var index = arLinkValue.indexOf(key);\r\n var selected = $row.hasClass(\"ewjtable-row-selected\");\r\n if (selected && index == -1)\r\n arLinkValue.push(key);\r\n else if (!selected && index > -1)\r\n arLinkValue.splice(index, 1);\r\n });\r\n }\r\n }\r\n }).ewjtable(\"load\", null, success);\r\n}\r\n\r\n/**\r\n * Show dialog for import\r\n *\r\n * @param {Object} args - Arguments\r\n * @param {string} args.hdr - Dialog header\r\n * @param {HTMLElement} args.lnk - Anchor element\r\n * @returns\r\n */\r\nexport function importDialogShow(args) {\r\n $(args.lnk).tooltip(\"hide\");\r\n var $dlg = ew.importDialog || $(\"#ew-import-dialog\");\r\n if (!$dlg[0]) {\r\n _alert(\"DIV #ew-import-dialog not found.\");\r\n return false;\r\n }\r\n\r\n var $input = $dlg.find(\"#importfiles\"),\r\n $bd = $dlg.find(\".modal-body\"),\r\n $data = $bd.find(\":input[id!=importfiles]\"),\r\n $message = $bd.find(\".message\"),\r\n $progress = $bd.find(\".progress\"),\r\n timer;\r\n\r\n // Disable buttons\r\n var disableButtons = function() {\r\n $dlg.find(\".modal-footer .btn\").prop(\"disabled\", true);\r\n }\r\n\r\n // Enable buttons\r\n var enableButtons = function() {\r\n $dlg.find(\".modal-footer .btn\").prop(\"disabled\", false);\r\n }\r\n\r\n // Show message\r\n var showMessage = function(msg, classname) {\r\n var $msg = $(\"<div>\" + msg + \"</div>\");\r\n if (classname)\r\n $msg.addClass(classname);\r\n $message.removeClass(\"d-none\").html($msg);\r\n if (classname == \"text-danger\")\r\n enableButtons();\r\n }\r\n\r\n // Hide message\r\n var hideMessage = function() {\r\n $message.addClass(\"d-none\").html(\"\");\r\n }\r\n\r\n // Show progress\r\n var showProgress = function(pc, classname) {\r\n $progress.removeClass(\"d-none\").find(\".progress-bar\").removeClass(\"bg-success bg-info\").addClass(classname || \"bg-success\")\r\n .attr(\"aria-valuenow\", pc).css(\"width\", pc + \"%\").html(pc + \"%\");\r\n }\r\n\r\n // Hide progress\r\n var hideProgress = function() {\r\n $progress.addClass(\"d-none\").find(\".progress-bar\").attr(\"aria-valuenow\", 0).css(\"width\", \"0%\").html(\"0%\");\r\n }\r\n\r\n // Upload progress\r\n var uploadProgress = function(data) {\r\n var pc = parseInt(100 * data.loaded / data.total);\r\n showProgress(pc, \"bg-info\");\r\n if (pc === 100) {\r\n showMessage(ew.language.phrase(\"ImportMessageUploadComplete\"), \"text-info\");\r\n } else {\r\n showMessage(ew.language.phrase(\"ImportMessageUploadProgress\").replace(\"%p\", pc), \"text-info\");\r\n }\r\n }\r\n\r\n // Update progress (import)\r\n var updateProgress = function(result) {\r\n try {\r\n var cnt = parseInt(result.count), tcnt = parseInt(result.totalCount), filename = result.file;\r\n if (tcnt > 0 && $dlg.find(\".modal-footer .ew-close-btn\").data(\"import-progress\")) { // Show progress\r\n var pc = parseInt(100 * cnt / tcnt);\r\n showProgress(pc);\r\n showMessage(ew.language.phrase(\"ImportMessageProgress\").replace(\"%t\", tcnt).replace(\"%c\", cnt).replace(\"%f\", filename), \"text-info\");\r\n }\r\n } catch(e) {}\r\n }\r\n\r\n // Import progress\r\n var importProgress = function() {\r\n var url = getApiUrl(ew.API_PROGRESS_ACTION), data = { \"rnd\": random() };\r\n data[ew.API_FILE_TOKEN_NAME] = $input.data(ew.API_FILE_TOKEN_NAME);\r\n $.get(url, data, updateProgress, \"json\");\r\n }\r\n\r\n // Import complete\r\n var importComplete = function(result) {\r\n var maxErrorCount = 5;\r\n var msg = \"\";\r\n showProgress(100);\r\n var fileResults = result.files;\r\n $dlg.find(\".modal-footer .ew-close-btn\").data(\"import-progress\", false); // Stop import progress\r\n if (Array.isArray(fileResults)) {\r\n for (var i = 0, len = fileResults.length; i < len; i++) {\r\n var fileResult = fileResults[i],\r\n tcnt = fileResult.totalCount || 0,\r\n cnt = fileResult.count || 0,\r\n scnt = fileResult.successCount || 0,\r\n fcnt = fileResult.failCount || 0;\r\n if (msg != \"\")\r\n msg += \"<br>\";\r\n if (fileResult.success) {\r\n msg += ew.language.phrase(\"ImportMessageSuccess\").replace(\"%t\", tcnt).replace(\"%c\", cnt).replace(\"%f\", fileResult.file);\r\n } else {\r\n msg += ew.language.phrase(\"ImportMessageError1\").replace(\"%t\", tcnt).replace(\"%c\", cnt).replace(\"%f\", fileResult.file).replace(\"%s\", scnt).replace(\"%e\", fcnt);\r\n if (fileResult.error)\r\n msg += ew.language.phrase(\"ImportMessageError2\").replace(\"%e\", fileResult.error);\r\n var showLog = true;\r\n if (fileResult.failList) {\r\n var ecnt = 0;\r\n for (var i = 1; i <= cnt; i++) {\r\n if (fileResult.failList[\"row\" + i]) {\r\n ecnt += 1;\r\n msg += \"<br>\" + ew.language.phrase(\"ImportMessageError3\").replace(\"%i\", i).replace(\"%d\", fileResult.failList[\"row\" + i]);\r\n }\r\n if (ecnt >= maxErrorCount)\r\n break;\r\n }\r\n if (fcnt > maxErrorCount)\r\n msg += \"<br>\" + ew.language.phrase(\"ImportMessageMore\").replace(\"%s\", fcnt - maxErrorCount);\r\n else\r\n showLog = false;\r\n }\r\n if (fileResult.log && showLog)\r\n msg += \"<br>\" + ew.language.phrase(\"ImportMessageError4\").replace(\"%l\", fileResult.log);\r\n showMessage(msg, \"text-danger\"); // Show error message\r\n }\r\n }\r\n }\r\n if (result.success) {\r\n showMessage(msg, \"text-success\");\r\n $dlg.find(\".modal-footer .ew-close-btn\").data(\"imported\", true);\r\n } else {\r\n if (result.error)\r\n msg = result.error;\r\n showMessage(msg, \"text-danger\"); // Show error message\r\n }\r\n hideProgress();\r\n }\r\n\r\n // Import fail\r\n var importFail = function(o) {\r\n $dlg.find(\".modal-footer .ew-close-btn\").data(\"import-progress\", false); // Stop import progress\r\n showMessage(ew.language.phrase(\"ImportMessageServerError\").replace(\"%s\", o.status).replace(\"%t\", o.statusText), \"text-danger\");\r\n }\r\n\r\n // Import file\r\n var importFiles = function(filetoken) {\r\n $body.css(\"cursor\", \"wait\");\r\n $input.data(ew.API_FILE_TOKEN_NAME, filetoken);\r\n $dlg.find(\".modal-footer .ew-close-btn\").data(\"import-progress\", true); // Show import progress\r\n var data = ew.API_ACTION_NAME + \"=import&\" + ew.API_FILE_TOKEN_NAME + \"=\" + encodeURIComponent(filetoken);\r\n if ($data.length)\r\n data += \"&\" + $data.serialize();\r\n $.ajax(currentPage(), {\r\n \"data\": data,\r\n \"method\": \"POST\",\r\n \"dataType\": \"json\",\r\n \"beforeSend\": function(xhr, settings) {\r\n timer = $.later(100, null, importProgress, null, true); // Use time to show progress periodically\r\n }\r\n }).done(importComplete).fail(importFail).always(function() {\r\n $body.css(\"cursor\", \"default\");\r\n if (timer)\r\n timer.cancel(); // Clear timer\r\n });\r\n }\r\n\r\n var formData = { session: ew.SESSION_ID };\r\n formData[ew.TOKEN_NAME_KEY] = ew.TOKEN_NAME; // Add token name for $.ajax() sent by jQuery File Upload (not by ajaxSend) // PHP\r\n formData[ew.ANTIFORGERY_TOKEN_KEY] = ew.ANTIFORGERY_TOKEN; // Add antiforgery token for $.ajax() sent by jQuery File Upload (not by ajaxSend) // PHP\r\n var options = ew.importUploadOptions;\r\n if (!options.acceptFileTypes)\r\n options.acceptFileTypes = new RegExp('\\\\.(' + ew.IMPORT_FILE_ALLOWED_EXT.replace(/,/g, '|') + ')$', 'i');\r\n\r\n if (!$input.data(\"blueimpFileupload\")) {\r\n $input.fileupload(Object.assign({\r\n url: getApiUrl(ew.API_UPLOAD_ACTION),\r\n dataType: \"json\",\r\n autoUpload: true,\r\n formData: formData,\r\n singleFileUploads: false,\r\n messages: {\r\n acceptFileTypes: ew.language.phrase(\"UploadErrMsgAcceptFileTypes\"),\r\n maxFileSize: ew.language.phrase(\"UploadErrMsgMaxFileSize\"),\r\n maxNumberOfFiles: ew.language.phrase(\"UploadErrMsgMaxNumberOfFiles\"),\r\n minFileSize: ew.language.phrase(\"UploadErrMsgMinFileSize\")\r\n },\r\n beforeSend: function(jqxhr, settings) {\r\n if (ew.API_JWT_TOKEN && !ew.IS_WINDOWS_AUTHENTICATION) // Do NOT set JWT authorization header if Windows Authentication\r\n jqxhr.setRequestHeader(ew.API_JWT_AUTHORIZATION_HEADER, \"Bearer \" + ew.API_JWT_TOKEN);\r\n },\r\n done: function(e, data) {\r\n if (data.result && data.result.files && Array.isArray(data.result.files.importfiles)) {\r\n var ok = true;\r\n data.result.files.importfiles.forEach(function(file, index) {\r\n if (file.error) {\r\n showMessage(ew.language.phrase(\"ImportMessageUploadError\").replace(\"%f\", file.name).replace(\"%s\", file.error), \"text-danger\");\r\n ok = false;\r\n }\r\n }); // Show upload errors for each file\r\n if (ok)\r\n importFiles(data.result[ew.API_FILE_TOKEN_NAME]); // Import uploaded files\r\n }\r\n },\r\n change: function(e, data) {\r\n hideMessage();\r\n },\r\n processfail: function(e, data) {\r\n data.files.forEach(function(file, index) {\r\n if (file.error)\r\n showMessage(ew.language.phrase(\"ImportMessageUploadError\").replace(\"%f\", file.name).replace(\"%s\", file.error), \"text-danger\");\r\n }); // Show process errors for each file\r\n },\r\n fail: function(e, data) {\r\n showMessage(ew.language.phrase(\"ImportMessageServerError\").replace(\"%s\", data.textStatus).replace(\"%t\", data.errorThrown), \"text-danger\");\r\n },\r\n progressall: function(e, data) {\r\n uploadProgress(data);\r\n }\r\n }, options));\r\n }\r\n\r\n $dlg.modal(\"hide\").find(\".modal-title\").html(args.hdr);\r\n $dlg.find(\".modal-footer .ew-close-btn\").off(\"click.ew\").on(\"click.ew\", function() {\r\n var $this = $(this);\r\n if ($this.data(\"imported\")) {\r\n $this.data(\"imported\", false);\r\n window.location.reload();\r\n }\r\n });\r\n hideMessage();\r\n ew.importDialog = $dlg.modal(\"show\");\r\n return false;\r\n}\r\n\r\n// Auto-fill\r\nexport function autoFill(el) {\r\n var f = forms.get(el).$element[0];\r\n if (!f)\r\n return;\r\n var ar = getOptionValues(el),\r\n id = getId(el),\r\n m = id.match(/^([xy])(\\d*)_/),\r\n rowindex = (m) ? m[2] : \"\",\r\n list = forms.get(el).getList(id),\r\n dest_array = list.autoFillTargetFields;\r\n var success = function(data) {\r\n var results = data && data.records || \"\";\r\n var result = (results) ? results[0] : [];\r\n for (var j = 0; j < dest_array.length; j++) {\r\n var destEl = getElements(dest_array[j].replace(/^x_/, \"x\" + rowindex + \"_\"), f);\r\n if (destEl) {\r\n var val = ($.isValue(result[\"af\" + j])) ? String(result[\"af\" + j]) : \"\";\r\n var args = {results: results, result: result, data: val, form: f, name: id, target: dest_array[j], cancel: false, trigger: true};\r\n $(el).trigger(\"autofill\", [args]); // Fire event\r\n if (args.cancel)\r\n continue;\r\n val = args.data; // Process the value\r\n if (destEl.options) { // Selection list\r\n selectOption(destEl, val.split(\",\"));\r\n if (isAutoSuggest(destEl)) { // Auto-Suggest\r\n destEl.input.value = val;\r\n updateOptions.call(forms.get(f.id), destEl);\r\n } else if (isModalLookup(destEl)) { // Modal-Lookup\r\n //$(destEl).parent().find(\".ew-lookup-text\").html(val);\r\n updateOptions.call(forms.get(f.id), destEl);\r\n }\r\n } else if (isHiddenTextArea(destEl)) { // HTML editor\r\n destEl.value = val;\r\n $(destEl).data(\"editor\").set();\r\n } else {\r\n destEl.value = val;\r\n }\r\n if (args.trigger)\r\n $(destEl).trigger(\"change\");\r\n }\r\n }\r\n return result;\r\n };\r\n if (ar.length > 0 && ar[0] != \"\") {\r\n var data = Object.assign({\r\n page: list.page,\r\n field: list.field,\r\n ajax: \"autofill\",\r\n v0: ar[0],\r\n language: ew.LANGUAGE_ID\r\n }, getUserParams('#p_' + id, f));\r\n // Add parent field values\r\n var parentId = list.parentFields.slice(); // Clone\r\n if (rowindex != \"\") {\r\n for (var i = 0, len = parentId.length; i < len; i++) {\r\n var ar = parentId[i].split(\" \");\r\n if (ar.length == 1) // Parent field in the same table, add row index\r\n parentId[i] = parentId[i].replace(/^x_/, \"x\" + rowindex + \"_\");\r\n }\r\n }\r\n var arp = parentId.map(function(pid) {\r\n return getOptionValues(pid, f);\r\n });\r\n for (var i = 0, cnt = arp.length; i < cnt; i++) // Filter by parent fields\r\n data[\"v\" + (i + 1)] = arp[i].join(ew.MULTIPLE_OPTION_SEPARATOR);\r\n return $.post(getApiUrl(ew.API_LOOKUP_ACTION), data, success, \"json\");\r\n }\r\n return success();\r\n}\r\n\r\n// Setup tooltip links\r\nexport function tooltip(i, el) {\r\n var $this = $(el), $tt = $(\"#\" + $this.data(\"tooltip-id\")),\r\n trig = $this.data(\"trigger\") || \"hover\", dir = $this.data(\"placement\") || (ew.CSS_FLIP ? \"left\" : \"right\"); // dir = \"left|right\"\r\n if (!$tt[0] || $tt.text().trim() == \"\" && !$tt.find(\"img[src!='']\")[0])\r\n return;\r\n if (!$this.data(\"bs.popover\")) {\r\n $this.popover({\r\n html: true,\r\n placement: dir,\r\n trigger: trig,\r\n delay: 100,\r\n container: $(\"#ew-tooltip\")[0],\r\n content: $tt.html(),\r\n sanitizeFn: ew.sanitizeFn\r\n }).on(\"show.bs.popover\", function(e) {\r\n var wd, $tip = $($this.data(\"bs.popover\").getTipElement()).css(\"z-index\", 9999); // Make z-index higher than modal dialog\r\n if (wd = $this.data(\"tooltip-width\")) // Set width before show\r\n $tip.css(\"max-width\", parseInt(wd, 10) + \"px\");\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Show dialog for email sending\r\n *\r\n * @param {Object} args - Arguments\r\n * @param {string} args.lnk - Email link ID\r\n * @param {string} args.hdr - Dialog header\r\n * @param {string} args.url - URL of the email content\r\n * @param {HTMLElement} args.f - Form\r\n * @param {Object} args.key - Key as object\r\n * @param {boolean} args.sel - Exported selected\r\n * @returns false\r\n */\r\nexport function emailDialogShow(args) {\r\n var $dlg = ew.emailDialog || $(\"#ew-email-dialog\");\r\n if (!$dlg[0]) {\r\n _alert(\"DIV #ew-email-dialog not found.\");\r\n return false;\r\n }\r\n if (args.sel && !keySelected(args.f)) {\r\n _alert(ew.language.phrase(\"NoRecordSelected\"));\r\n return false;\r\n }\r\n var $f = $dlg.find(\".modal-body form\"),\r\n frm = $f.data(\"form\");\r\n if (!frm) {\r\n frm = new Form($f.attr(\"id\"));\r\n frm.addFields([\r\n [\"sender\", [ew.Validators.required(ew.language.phrase(\"Sender\")), ew.Validators.email]],\r\n [\"recipient\", [ew.Validators.required(ew.language.phrase(\"Recipient\")), ew.Validators.emails(ew.MAX_EMAIL_RECIPIENT, ew.language.phrase(\"EnterProperRecipientEmail\"))]],\r\n [\"cc\", ew.Validators.emails(ew.MAX_EMAIL_RECIPIENT, ew.language.phrase(\"EnterProperCcEmail\"))],\r\n [\"bcc\", ew.Validators.emails(ew.MAX_EMAIL_RECIPIENT, ew.language.phrase(\"EnterProperBccEmail\"))],\r\n [\"subject\", ew.Validators.required(ew.language.phrase(\"Subject\"))]\r\n ]);\r\n frm.validate = function() {\r\n return this.validateFields();\r\n };\r\n frm.submit = function(e) {\r\n if (!this.validate())\r\n return false;\r\n var qs = $f.serialize(), data = \"\";\r\n if (args.f && args.sel) // Export selected\r\n data = $(args.f).find(\"input[type=checkbox][name='key_m[]']:checked\").serialize();\r\n if (args.key)\r\n qs += \"&\" + $.param(args.key);\r\n var fobj = this.getForm();\r\n if (args.url) { // Custom Template\r\n $dlg.modal(\"hide\");\r\n if (args.exportid)\r\n ew.exportWithCharts(args.el, args.url, args.exportid, fobj);\r\n else\r\n _export(args.f, args.url, \"email\", true, args.sel, fobj);\r\n } else {\r\n $.post($(args.f).attr(\"action\"), qs + \"&\" + data, function(result) {\r\n showMessage(result);\r\n });\r\n }\r\n return true;\r\n };\r\n $f.data(\"form\", frm);\r\n }\r\n $dlg.modal(\"hide\").find(\".modal-title\").html(args.hdr);\r\n $dlg.find(\".modal-footer .btn-primary\").off().click(function(e) {\r\n e.preventDefault();\r\n if (frm.submit(e))\r\n $dlg.modal(\"hide\");\r\n });\r\n ew.emailDialog = $dlg.modal(\"show\");\r\n return false;\r\n}\r\n\r\n// Show drill down\r\nexport function showDrillDown(e, obj, url, id, hdr) {\r\n if (e && e.ctrlKey) {\r\n var arUrl = url.split(\"?\"), params = new URLSearchParams(arUrl[1]);\r\n params.set(\"d\", \"2\"); // Change d parameter to 2\r\n redirect(arUrl[0] + \"?\" + params.toString());\r\n return false;\r\n }\r\n var $obj = ($.isString(obj)) ? $(\"#\" + obj) : $(obj);\r\n var pos = $obj.data(\"drilldown-placement\") || ($obj.hasClass(\"ew-chart-canvas\") ? (ew.CSS_FLIP ? \"left\" : \"right\") : \"bottom\");\r\n $obj.tooltip(\"hide\");\r\n var args = {\"obj\": $obj[0], \"id\": id, \"url\": url, \"hdr\": hdr, \"placement\": pos};\r\n $document.trigger(\"drilldown\", [args]);\r\n var ar = args.url.split(\"?\");\r\n args.file = ar[0] || \"\";\r\n args.data = ar[1] || \"\";\r\n if (!$obj.data(\"bs.popover\")) {\r\n $obj.popover({\r\n html: true,\r\n placement: args.placement,\r\n trigger: \"manual\",\r\n template: '<div class=\"popover\"><h3 class=\"popover-header d-none\" style=\"cursor: move;\"></h3><div class=\"popover-body\"></div></div>',\r\n content: '<div class=\"' + ew.spinnerClass + ' m-3 ew-loading\" role=\"status\"><span class=\"sr-only\">' + ew.language.phrase(\"Loading\") + '</span></div>',\r\n container: $(\"#ew-drilldown-panel\"),\r\n sanitizeFn: ew.sanitizeFn,\r\n boundary: \"viewport\"\r\n }).on(\"show.bs.popover\", function(e) {\r\n $obj.attr(\"data-original-title\", \"\");\r\n }).on(\"shown.bs.popover\", function(e) {\r\n if (!$obj.data(\"args\"))\r\n return;\r\n var data = $obj.data(\"args\").data;\r\n data += (data ? \"&\" : \"\") + ew.TOKEN_NAME_KEY + \"=\" + ew.TOKEN_NAME; // Add token name // PHP\r\n data += (data ? \"&\" : \"\") + ew.ANTIFORGERY_TOKEN_KEY + \"=\" + ew.ANTIFORGERY_TOKEN; // Add antiforgery token // PHP\r\n $.ajax({\r\n cache: false,\r\n dataType: \"html\",\r\n type: \"POST\",\r\n data: data,\r\n url: $obj.data(\"args\").file,\r\n success: function(data) {\r\n var $tip = $($obj.data(\"bs.popover\").getTipElement()).on(\"mousedown\", function(e) {\r\n var $this = $(this).addClass(\"drag\"),\r\n height = $this.outerHeight(),\r\n width = $this.outerWidth(),\r\n ypos = $this.offset().top + height - e.pageY,\r\n xpos = $this.offset().left + width - e.pageX;\r\n $body.on(\"mousemove\", function(e) {\r\n var top = e.pageY + ypos - height,\r\n left = e.pageX + xpos - width;\r\n if ($this.hasClass(\"drag\"))\r\n $this.offset({top: top, left: left});\r\n }).on(\"mouseup\", function(e){\r\n $this.removeClass(\"drag\");\r\n });\r\n });\r\n if (args.hdr)\r\n $tip.find(\".popover-header\").empty().removeClass(\"d-none\")\r\n .append('<button type=\"button\" class=\"close\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>' + args.hdr)\r\n .find(\".close\").on(\"click\", function() {\r\n $obj.popover(\"hide\");\r\n });\r\n var m = data.match(/<body[^>]*>([\\s\\S]*?)<\\/body\\s*>/i); // Use HTML in document body only\r\n data = m ? m[0] : data;\r\n var html = ew.stripScript(data);\r\n $tip.find(\".popover-body\").html($(\"<div></div>\").html(html).find(\"#ew-report\")) // Insert the container table only\r\n .find(\".ew-table\").each(ew.setupTable);\r\n ew.executeScript(data, id);\r\n $obj.popover(\"update\");\r\n },\r\n error: function(o) {\r\n if (o.responseText) {\r\n var $tip = $($el.data(\"bs.popover\").getTipElement());\r\n $tip.find(\".popover-body\").empty().append('<p class=\"text-danger\">' + o.responseText + '</p>');\r\n }\r\n }\r\n });\r\n }).on(\"hidden.bs.popover\", function(e) {\r\n $.each(ew.drillDownCharts, function(key, cht) { // Dispose charts\r\n cht.dispose();\r\n });\r\n ew.drillDownCharts = {};\r\n ew.removeScript(id);\r\n });\r\n }\r\n $obj.data(\"args\", args).popover(\"show\");\r\n}\r\n\r\n/**\r\n * Ajax query\r\n * @param {Object} data - object to passed to API\r\n * @param {callback} callback - Callback function for async request (see http://api.jquery.com/jQuery.post/), empty for sync request\r\n * @returns {string|string[]}\r\n */\r\nexport function ajax(data, callback) {\r\n if (!$.isObject(data) || !data.url && !data.action)\r\n return undefined;\r\n var action;\r\n if (data.url) {\r\n if (data.url.startsWith(getApiUrl()))\r\n action = data.url.replace(getApiUrl(), \"\").split(\"/\")[0];\r\n else if (data.url.startsWith(ew.API_URL))\r\n action = data.url.replace(ew.API_URL, \"\").split(\"/\")[0];\r\n } else { \r\n action = data.action\r\n delete data.action;\r\n }\r\n var obj = Object.assign({}, data);\r\n var _convert = (response) => {\r\n if ($.isObject(response) && response.result == \"OK\") {\r\n var results = response.records;\r\n if (Array.isArray(results) && results.length == 1) { // Single row\r\n results = results[0];\r\n if (Array.isArray(results) && results.length == 1) // Single column\r\n return results[0]; // Return a value\r\n else\r\n return results; // Return a row\r\n }\r\n return results;\r\n }\r\n return response;\r\n };\r\n var url = obj.url || getApiUrl(action), // URL\r\n type = obj.type || ([ew.API_LIST_ACTION, ew.API_VIEW_ACTION, ew.API_DELETE_ACTION].includes(action) ? \"GET\" : \"POST\");\r\n delete obj.url;\r\n delete obj.type;\r\n obj.dataType = \"json\";\r\n if (isFunction(callback)) { // Async\r\n $.ajax({\r\n url: url,\r\n type: type,\r\n data: obj,\r\n success: function (response) {\r\n callback(_convert(response));\r\n }\r\n });\r\n } else { // Sync\r\n var response = $.ajax({\r\n url: url,\r\n async: false,\r\n type: type,\r\n data: obj\r\n });\r\n return _convert(response.responseJSON);\r\n }\r\n}\r\n\r\n// Get URL of current page\r\nexport function currentPage() {\r\n return location.href.split(\"#\")[0].split(\"?\")[0];\r\n}\r\n\r\n// Toggle search operator\r\nexport function toggleSearchOperator(id, value) {\r\n var el = this.form.elements[id];\r\n if (!el)\r\n return;\r\n el.value = (el.value != value) ? value : \"=\";\r\n}\r\n\r\n// Validators\r\n// Check US Date format (mm/dd/yyyy)\r\nexport function checkUSDate(object_value) {\r\n return checkDateEx(object_value, \"us\", ew.DATE_SEPARATOR);\r\n}\r\n\r\n// Check US Date format (mm/dd/yy)\r\nexport function checkShortUSDate(object_value) {\r\n return checkDateEx(object_value, \"usshort\", ew.DATE_SEPARATOR);\r\n}\r\n\r\n// Check Date format (yyyy/mm/dd)\r\nexport function checkDate(object_value) {\r\n return checkDateEx(object_value, \"std\", ew.DATE_SEPARATOR);\r\n}\r\n\r\n// Check Date format (yy/mm/dd)\r\nexport function checkShortDate(object_value) {\r\n return checkDateEx(object_value, \"stdshort\", ew.DATE_SEPARATOR);\r\n}\r\n\r\n// Check Euro Date format (dd/mm/yyyy)\r\nexport function checkEuroDate(object_value) {\r\n return checkDateEx(object_value, \"euro\", ew.DATE_SEPARATOR);\r\n}\r\n\r\n// Check Euro Date format (dd/mm/yy)\r\nexport function checkShortEuroDate(object_value) {\r\n return checkDateEx(object_value, \"euroshort\", ew.DATE_SEPARATOR);\r\n}\r\n\r\n// Check default date format\r\nexport function checkDateDef(object_value) {\r\n if (ew.DATE_FORMAT.match(/^yyyy/))\r\n return checkDate(object_value);\r\n else if (ew.DATE_FORMAT.match(/^yy/))\r\n return checkShortDate(object_value);\r\n else if (ew.DATE_FORMAT.match(/^m/) && ew.DATE_FORMAT.match(/yyyy$/))\r\n return checkUSDate(object_value);\r\n else if (ew.DATE_FORMAT.match(/^m/) && ew.DATE_FORMAT.match(/yy$/))\r\n return checkShortUSDate(object_value);\r\n else if (ew.DATE_FORMAT.match(/^d/) && ew.DATE_FORMAT.match(/yyyy$/))\r\n return checkEuroDate(object_value);\r\n else if (ew.DATE_FORMAT.match(/^d/) && ew.DATE_FORMAT.match(/yy$/))\r\n return checkShortEuroDate(object_value);\r\n return false;\r\n}\r\n\r\n// Check date format\r\n// format: std/stdshort/us/usshort/euro/euroshort\r\nexport function checkDateEx(value, format, sep) {\r\n if (!value || value.length == \"\")\r\n return true;\r\n value = value.replace(/ +/g, \" \").trim();\r\n var arDT = value.split(\" \");\r\n if (arDT.length > 0) {\r\n var re, ar, sYear, sMonth, sDay;\r\n re = /^(\\d{4})-([0][1-9]|[1][0-2])-([0][1-9]|[1|2]\\d|[3][0|1])$/;\r\n if (ar = re.exec(arDT[0])) {\r\n sYear = ar[1];\r\n sMonth = ar[2];\r\n sDay = ar[3];\r\n } else {\r\n var wrksep = escapeRegExChars(sep);\r\n switch (format) {\r\n case \"std\":\r\n re = new RegExp(\"^(\\\\d{4})\" + wrksep + \"([0]?[1-9]|[1][0-2])\" + wrksep + \"([0]?[1-9]|[1|2]\\\\d|[3][0|1])$\");\r\n break;\r\n case \"stdshort\":\r\n re = new RegExp(\"^(\\\\d{2})\" + wrksep + \"([0]?[1-9]|[1][0-2])\" + wrksep + \"([0]?[1-9]|[1|2]\\\\d|[3][0|1])$\");\r\n break;\r\n case \"us\":\r\n re = new RegExp(\"^([0]?[1-9]|[1][0-2])\" + wrksep + \"([0]?[1-9]|[1|2]\\\\d|[3][0|1])\" + wrksep + \"(\\\\d{4})$\");\r\n break;\r\n case \"usshort\":\r\n re = new RegExp(\"^([0]?[1-9]|[1][0-2])\" + wrksep + \"([0]?[1-9]|[1|2]\\\\d|[3][0|1])\" + wrksep + \"(\\\\d{2})$\");\r\n break;\r\n case \"euro\":\r\n re = new RegExp(\"^([0]?[1-9]|[1|2]\\\\d|[3][0|1])\" + wrksep + \"([0]?[1-9]|[1][0-2])\" + wrksep + \"(\\\\d{4})$\");\r\n break;\r\n case \"euroshort\":\r\n re = new RegExp(\"^([0]?[1-9]|[1|2]\\\\d|[3][0|1])\" + wrksep + \"([0]?[1-9]|[1][0-2])\" + wrksep + \"(\\\\d{2})$\");\r\n break;\r\n }\r\n if (!re.test(arDT[0]))\r\n return false;\r\n var arD = arDT[0].split(sep);\r\n switch (format) {\r\n case \"std\":\r\n case \"stdshort\":\r\n sYear = unformatYear(arD[0]);\r\n sMonth = arD[1];\r\n sDay = arD[2];\r\n break;\r\n case \"us\":\r\n case \"usshort\":\r\n sYear = unformatYear(arD[2]);\r\n sMonth = arD[0];\r\n sDay = arD[1];\r\n break;\r\n case \"euro\":\r\n case \"euroshort\":\r\n sYear = unformatYear(arD[2]);\r\n sMonth = arD[1];\r\n sDay = arD[0];\r\n break;\r\n }\r\n }\r\n if (!checkDay(sYear, sMonth, sDay))\r\n return false;\r\n }\r\n if (arDT.length > 1 && !checkTime(arDT[1]))\r\n return false;\r\n return true;\r\n}\r\n\r\n// Unformat 2 digit year to 4 digit year\r\nexport function unformatYear(yr) {\r\n if (yr.length == 2)\r\n return (yr > ew.UNFORMAT_YEAR) ? \"19\" + yr : \"20\" + yr;\r\n return yr;\r\n}\r\n\r\n// Check day\r\nexport function checkDay(checkYear, checkMonth, checkDay) {\r\n checkYear = parseInt(checkYear, 10);\r\n checkMonth = parseInt(checkMonth, 10);\r\n checkDay = parseInt(checkDay, 10);\r\n var maxDay = [4, 6, 9, 11].includes(checkMonth) ? 30 : 31;\r\n if (checkMonth == 2)\r\n maxDay = (checkYear % 4 > 0 || checkYear % 100 == 0 && checkYear % 400 > 0) ? 28 : 29;\r\n return checkRange(checkDay, 1, maxDay);\r\n}\r\n\r\n// Check integer\r\nexport function checkInteger(object_value) {\r\n if (!object_value || object_value.length == 0)\r\n return true;\r\n if (object_value.includes(ew.DECIMAL_POINT))\r\n return false;\r\n return checkNumber(object_value);\r\n}\r\n\r\n// Check number\r\nexport function checkNumber(object_value) {\r\n object_value = String(object_value);\r\n if (!object_value || object_value.length == 0)\r\n return true;\r\n object_value = object_value.trim();\r\n var ts = escapeRegExChars(ew.THOUSANDS_SEP), dp = escapeRegExChars(ew.DECIMAL_POINT),\r\n re = new RegExp(\"^[+-]?(\\\\d{1,3}(\" + (ts ? ts + \"?\" : \"\") + \"\\\\d{3})*(\" + dp + \"\\\\d+)?|\" + dp + \"\\\\d+)$\");\r\n return re.test(object_value);\r\n}\r\n\r\n// Convert to float\r\nexport function stringToFloat(object_value) {\r\n object_value = String(object_value);\r\n if (ew.THOUSANDS_SEP != \"\") {\r\n var re = new RegExp(escapeRegExChars(ew.THOUSANDS_SEP), \"g\");\r\n object_value = object_value.replace(re, \"\");\r\n }\r\n if (ew.DECIMAL_POINT != \"\")\r\n object_value = object_value.replace(ew.DECIMAL_POINT, \".\");\r\n return parseFloat(object_value);\r\n}\r\n\r\n// Convert string (yyyy-mm-dd hh:mm:ss) to date object\r\nexport function stringToDate(object_value) {\r\n var re = /^(\\d{4})-([0][1-9]|[1][0-2])-([0][1-9]|[1|2]\\d|[3][0|1]) (?:(0\\d|1\\d|2[0-3]):([0-5]\\d):([0-5]\\d))?$/;\r\n var ar = object_value.replace(re, \"$1 $2 $3 $4 $5 $6\").split(\" \");\r\n return new Date(ar[0], ar[1]-1, ar[2], ar[3], ar[4], ar[5]);\r\n}\r\n\r\n// Escape regular expression chars\r\nexport function escapeRegExChars(str) {\r\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\r\n}\r\n\r\n// Check range\r\nexport function checkRange(object_value, min_value, max_value) {\r\n if (!object_value || object_value.length == 0)\r\n return true;\r\n if ($.isNumber(min_value) || $.isNumber(max_value)) { // Number\r\n if (checkNumber(object_value))\r\n object_value = stringToFloat(object_value);\r\n }\r\n if (!$.isNull(min_value) && object_value < min_value)\r\n return false;\r\n if (!$.isNull(max_value) && object_value > max_value)\r\n return false;\r\n return true;\r\n}\r\n\r\n// Check time\r\nexport function checkTime(object_value) {\r\n if (!object_value || object_value.length == 0)\r\n return true;\r\n object_value = object_value.trim();\r\n var re = new RegExp('^(0\\\\d|1\\\\d|2[0-3])' + escapeRegExChars(ew.TIME_SEPARATOR) + '[0-5]\\\\d(( (' + escapeRegExChars(ew.language.phrase(\"AM\")) + '|' + escapeRegExChars(ew.language.phrase(\"PM\")) + '))|(' + escapeRegExChars(ew.TIME_SEPARATOR) + '[0-5]\\\\d(\\\\.\\\\d+|[+-][\\\\d:]+)?)?)$', 'i');\r\n return re.test(object_value);\r\n}\r\n\r\n// Check phone\r\nexport function checkPhone(object_value) {\r\n if (!object_value || object_value.length == 0)\r\n return true;\r\n return /^\\(\\d{3}\\) ?\\d{3}( |-)?\\d{4}|^\\d{3}( |-)?\\d{3}( |-)?\\d{4}$/.test(object_value.trim());\r\n}\r\n\r\n// Check zip\r\nexport function checkZip(object_value) {\r\n if (!object_value || object_value.length == 0)\r\n return true;\r\n return /^\\d{5}$|^\\d{5}-\\d{4}$/.test(object_value.trim());\r\n}\r\n\r\n// Check credit card\r\nexport function checkCreditCard(object_value) {\r\n if (!object_value || object_value.length == 0)\r\n return true;\r\n var creditcard_string = object_value.replace(/\\D/g, \"\");\r\n if (creditcard_string.length == 0)\r\n return false;\r\n var doubledigit = creditcard_string.length % 2 == 1 ? false : true;\r\n var tempdigit, checkdigit = 0;\r\n for (var i = 0, len = creditcard_string.length; i < len; i++) {\r\n tempdigit = parseInt(creditcard_string.charAt(i), 10);\r\n if (doubledigit) {\r\n tempdigit *= 2;\r\n checkdigit += (tempdigit % 10);\r\n if (tempdigit / 10 >= 1.0)\r\n checkdigit++;\r\n doubledigit = false;\r\n }\telse {\r\n checkdigit += tempdigit;\r\n doubledigit = true;\r\n }\r\n }\r\n return (checkdigit % 10 == 0);\r\n}\r\n\r\n// Check social security number\r\nexport function checkSsn(object_value) {\r\n if (!object_value || object_value.length == 0)\r\n return true;\r\n return /^(?!000)([0-6]\\d{2}|7([0-6]\\d|7[012]))([ -]?)(?!00)\\d\\d\\3(?!0000)\\d{4}$/.test(object_value.trim());\r\n}\r\n\r\n// Check emails\r\nexport function checkEmails(object_value, email_cnt) {\r\n if (!object_value || object_value.length == 0)\r\n return true;\r\n var arEmails = object_value.replace(/,/g, \";\").split(\";\");\r\n for (var i = 0, len = arEmails.length; i < len; i++) {\r\n if (email_cnt > 0 && len > email_cnt)\r\n return false;\r\n if (!checkEmail(arEmails[i]))\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\n// Check email\r\nexport function checkEmail(object_value) {\r\n if (!object_value || object_value.length == 0)\r\n return true;\r\n return /^[\\w.%+-]+@[\\w.-]+\\.[A-Z]{2,18}$/i.test(object_value.trim());\r\n}\r\n\r\n// Check GUID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\r\nexport function checkGuid(object_value) {\r\n if (!object_value || object_value.length == 0)\r\n return true;\r\n return /^(\\{\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}\\}|\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12})$/.test(object_value.trim());\r\n}\r\n\r\n// Check by regular expression\r\nexport function checkByRegEx(object_value, pattern) {\r\n if (!object_value || object_value.length == 0)\r\n return true;\r\n return !!object_value.match(pattern);\r\n}\r\n\r\n/**\r\n * Show message dialog\r\n *\r\n * @param {Event|string} arg - Event or message\r\n * @returns\r\n */\r\nexport function showMessage(arg) {\r\n var win = window.parent, // Note: If a window does not have a parent, its parent property is a reference to itself.\r\n p = arg?.target ?? win.document,\r\n swal = win.Swal,\r\n $div = $(p).find(\"div.ew-message-dialog:hidden\").first(),\r\n msg = $div.length ? $div.text() : \"\"; // Text only\r\n if ($.isString(arg))\r\n msg = $(\"<div>\" + arg.trim() + \"</div>\").text();\r\n if (msg.trim() == \"\")\r\n return;\r\n if ($div.length) {\r\n [\"success\", \"info\", \"warning\", \"danger\"].forEach(function(value, index) {\r\n var $alert = $div.find(\".alert-\" + value).toggleClass(\"alert-\" + value),\r\n $heading = $alert.find(\".alert-heading\").detach(),\r\n $content = $alert.children(\":not(.icon)\");\r\n $alert.find(\".icon\").remove();\r\n if ($alert[0]) {\r\n var w = parseInt($content.css(\"width\"), 10); // Width specified\r\n if (w > 0)\r\n $content.first().css(\"width\", \"auto\");\r\n var $toast = toast({\r\n class: \"ew-toast bg-\" + value,\r\n title: $heading[0] ? $heading.html() : ew.language.phrase(value),\r\n body: $alert.html(),\r\n autohide: (value == \"success\") ? ew.autoHideSuccessMessage : false, // Autohide for success message\r\n delay: (value == \"success\") ? ew.autoHideSuccessMessageDelay: 500\r\n });\r\n if (w > 0)\r\n $toast.css(\"max-width\", w); // Override bootstrap .toast max-width\r\n return;\r\n }\r\n });\r\n }\r\n if ($.isString(arg)) {\r\n return swal.fire({\r\n ...ew.sweetAlertSettings,\r\n html: arg\r\n });\r\n }\r\n}\r\n\r\n// Random number\r\nexport function random() {\r\n return Math.floor(Math.random() * 100001) + 100000;\r\n}\r\n\r\n// File upload\r\nexport function upload(input) {\r\n var $input = $(input);\r\n if ($input.data(\"blueimpFileupload\"))\r\n return;\r\n var id = $input.attr(\"name\"), nid = id.replace(/\\$/g, \"\\\\$\"), tbl = $input.data(\"table\"),\r\n multiple = $input.is(\"[multiple]\"), $p = $input.closest(\".form-group, [id^='el']\"),\r\n readonly = $input.prop(\"disabled\") || $input.closest(\"form\").find(\"#confirm\").val() == \"confirm\",\r\n $ft = $p.find(\"#ft_\" + nid), $fn = $p.find(\"#fn_\" + nid), $fa = $p.find(\"#fa_\" + nid), $fs = $p.find(\"#fs_\" + nid),\r\n $exts = $p.find(\"#fx_\" + nid), $maxsize = $p.find(\"#fm_\" + nid), $maxfilecount = $p.find(\"#fc_\" + nid),\r\n $label = $p.find(\".custom-file-label\"), label = $label.html();\r\n var _done = function(e, data) {\r\n if (data.result.files[0].error)\r\n return;\r\n var name = data.result.files[0].name;\r\n var ar = (multiple) ? ($fn.val() ? $fn.val().split(ew.MULTIPLE_UPLOAD_SEPARATOR) : []) : [];\r\n ar.push(name);\r\n $fn.val(ar.join(ew.MULTIPLE_UPLOAD_SEPARATOR));\r\n $fa.val(\"0\");\r\n if (!multiple) // Remove other entries if not multiple upload\r\n $ft.children(\"tr:not(:last-child)\").remove();\r\n };\r\n var _deleted = function(e, data) {\r\n var url = $(e.originalEvent.target).data(\"url\"),\r\n param = new URLSearchParams(url.split(\"?\")[1]),\r\n fid = param.get(\"id\"),\r\n name = param.get(fid);\r\n if (name) {\r\n var ar = $fn.val() ? $fn.val().split(ew.MULTIPLE_UPLOAD_SEPARATOR) : [];\r\n var index = ar.indexOf(name);\r\n if (index > -1)\r\n ar.splice(index, 1);\r\n $fn.val(ar.join(ew.MULTIPLE_UPLOAD_SEPARATOR));\r\n $fa.val(\"0\");\r\n }\r\n };\r\n var _change = function(e, data) {\r\n $ft.toggleClass(\"ew-has-rows\", data.files?.length > 0);\r\n var ar = $fn.val() ? $fn.val().split(ew.MULTIPLE_UPLOAD_SEPARATOR) : [];\r\n for (var i = 0; i < data.files.length; i++)\r\n ar.push(data.files[i].name);\r\n var cnt = parseInt($maxfilecount.val(), 10);\r\n if ($.isNumber(cnt) && cnt > 0 && ar.length > cnt) {\r\n _alert(ew.language.phrase(\"UploadErrMsgMaxNumberOfFiles\"));\r\n return false;\r\n }\r\n var l = parseInt($fs.val(), 10);\r\n if ($.isNumber(l) && l > 0 && ar.join(ew.MULTIPLE_UPLOAD_SEPARATOR).length > l) {\r\n _alert(ew.language.phrase(\"UploadErrMsgMaxFileLength\"));\r\n return false;\r\n }\r\n };\r\n var _confirmDelete = function(e) {\r\n if (!multiple && $fn.val()) {\r\n if (!confirm(ew.language.phrase(\"UploadOverwrite\"))) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n }\r\n };\r\n var _changed = function(e, data) {\r\n $ft.toggleClass(\"ew-has-rows\", data.files?.length > 0 || data.result?.files?.length > 0);\r\n var ar = $fn.val() ? $fn.val().split(ew.MULTIPLE_UPLOAD_SEPARATOR) : [];\r\n $label.html(ar.join(\", \") || label);\r\n };\r\n var _clicked = function() {\r\n $input.closest(\"span.fileinput-button\").tooltip(\"hide\");\r\n };\r\n // var _process = function(e, data) {\r\n // $ft.toggleClass(\"ew-has-rows\", data.files?.length > 0);\r\n // };\r\n var _downloadTemplate = $.templates(\"#template-download\");\r\n var _uploadTemplate = $.templates(\"#template-upload\");\r\n var _completed = function(e, data) { // After download template rendered\r\n var e = { target: data.context };\r\n initLightboxes(e);\r\n initPdfObjects(e);\r\n ew.updateDropdownPosition();\r\n data.context.find(\"img\").on(\"load\", ew.updateDropdownPosition);\r\n }\r\n var _added = function(e, data) { // After upload template rendered\r\n $ft.toggleClass(\"ew-has-rows\", data.files?.length > 0);\r\n data.context.find(\".start\").click(_confirmDelete);\r\n };\r\n // Hide input button if readonly\r\n var form = getForm(input), $form = $(form);\r\n var readonly = $form.find(\"#confirm\").val() == \"confirm\";\r\n if (readonly)\r\n $form.find(\"span.fileinput-button\").hide();\r\n var cnt = parseInt($maxfilecount.val(), 10);\r\n var uploadUrl = getApiUrl(ew.API_JQUERY_UPLOAD_ACTION);\r\n var formData = {\r\n id: id,\r\n table: tbl,\r\n session: ew.SESSION_ID,\r\n replace: (multiple ? \"0\" : \"1\"),\r\n exts: $exts.val(),\r\n maxsize: $maxsize.val(),\r\n maxfilecount: $maxfilecount.val()\r\n };\r\n $input.fileupload({\r\n url: uploadUrl,\r\n type: \"POST\",\r\n multipart: true,\r\n autoUpload: true, // Comment out to disable auto upload\r\n loadImageFileTypes: /^image\\/(gif|jpe?g|png)$/i,\r\n loadVideoFileTypes: /^video\\/mp4$/i,\r\n loadAudioFileTypes: /^audio\\/(mpeg|mp3)$/i,\r\n acceptFileTypes: ($exts.val()) ? new RegExp('\\\\.(' + $exts.val().replace(/,/g, '|') + ')$', 'i') : null,\r\n maxFileSize: parseInt($maxsize.val(), 10),\r\n maxNumberOfFiles: (cnt > 1) ? cnt : null,\r\n filesContainer: $ft,\r\n formData: formData,\r\n uploadTemplateId: null,\r\n downloadTemplateId: null,\r\n uploadTemplate: _uploadTemplate.render.bind(_uploadTemplate),\r\n downloadTemplate: _downloadTemplate.render.bind(_downloadTemplate),\r\n previewMaxWidth: ew.UPLOAD_THUMBNAIL_WIDTH,\r\n previewMaxHeight: ew.UPLOAD_THUMBNAIL_HEIGHT,\r\n dropZone: $p,\r\n pasteZone: $p,\r\n messages: {\r\n acceptFileTypes: ew.language.phrase(\"UploadErrMsgAcceptFileTypes\"),\r\n maxFileSize: ew.language.phrase(\"UploadErrMsgMaxFileSize\"),\r\n maxNumberOfFiles: ew.language.phrase(\"UploadErrMsgMaxNumberOfFiles\"),\r\n minFileSize: ew.language.phrase(\"UploadErrMsgMinFileSize\")\r\n },\r\n readOnly: readonly // Custom\r\n }).on(\"fileuploaddone\", _done)\r\n .on(\"fileuploaddestroy\", _deleted)\r\n .on(\"fileuploadchange\", _change)\r\n .on(\"fileuploadadded fileuploadfinished fileuploaddestroyed\", _changed)\r\n //.on(\"fileuploadprocess\", _process)\r\n .on('fileuploadadded', _added)\r\n .on('fileuploadcompleted', _completed)\r\n .click(_clicked);\r\n if ($fn.val()) {\r\n $.ajax({\r\n url: uploadUrl,\r\n data: { id: id, table: tbl, session: ew.SESSION_ID },\r\n dataType: \"json\",\r\n context: this,\r\n success: function(result) {\r\n if (result && result[id]) {\r\n var done = $input.fileupload(\"option\", \"done\");\r\n if (done)\r\n done.call(input, $.Event(), { result: { files: result[id] } }); // Use \"files\"\r\n }\r\n if (readonly) // Hide delete button if readonly\r\n $ft.find(\"td.delete\").hide();\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Convert data to number\r\n *\r\n * @param {*} data - Data being converted\r\n * @param {Object} [config] - Configuration\r\n * @param {string} config.decimalSeparator - Decimal separator\r\n * @param {string} config.thousandsSeparator - Thousands separator\r\n * @returns {(number|null)}\r\n */\r\nexport function parseNumber(data, config) {\r\n if ($.isString(data)) {\r\n config = config || {\"thousandsSeparator\": ew.THOUSANDS_SEP, \"decimalSeparator\": ew.DECIMAL_POINT};\r\n var regexBits = [], regex, separator = config.thousandsSeparator, decimal = config.decimalSeparator;\r\n if (separator)\r\n regexBits.push(escapeRegExChars(separator) + \"(?=\\\\d)\");\r\n regex = new RegExp(\"(?:\" + regexBits.join(\"|\") + \")\", \"g\");\r\n if (decimal === \".\")\r\n decimal = null;\r\n data = data.replace(regex, \"\");\r\n data = (decimal) ? data.replace(decimal, \".\") : data;\r\n }\r\n if ($.isString(data) && data.trim() !== \"\")\r\n data = +data;\r\n if (!$.isNumber || !isFinite(data)) // Catch NaN and Infinity\r\n data = null;\r\n return data;\r\n}\r\n\r\n/**\r\n * Format a Number to string for display\r\n *\r\n * @param {*} data - Data being converted\r\n * @param {Object} [config] - Configuration\r\n * @param {number} config.decimalPlaces - Number of decimal places to round. Must be a number 0 to 20.\r\n * @param {string} config.decimalSeparator - Decimal separator\r\n * @param {string} config.thousandsSeparator - Thousands separator\r\n * @returns {string} Note: null, undefined, NaN and \"\" returns as \"\".\r\n */\r\nexport function formatNumber(data, config) {\r\n if ($.isNumber(data)) {\r\n config = config || {\"thousandsSeparator\": ew.THOUSANDS_SEP, \"decimalSeparator\": ew.DECIMAL_POINT};\r\n var isNeg = (data < 0), output = data + \"\", decPlaces = config.decimalPlaces,\r\n decSep = config.decimalSeparator || \".\", thouSep = config.thousandsSeparator,\r\n decIndex, newOutput, count, i;\r\n if ($.isNumber(decPlaces) && (decPlaces >= 0) && (decPlaces <= 20)) // Decimal precision\r\n output = data.toFixed(decPlaces);\r\n if (decSep !== \".\") // Decimal separator\r\n output = output.replace(\".\", decSep);\r\n if (thouSep) { // Add the thousands separator\r\n decIndex = output.lastIndexOf(decSep); // Find the dot or where it would be\r\n decIndex = (decIndex > -1) ? decIndex : output.length;\r\n newOutput = output.substring(decIndex); // Start with the dot and everything to the right\r\n for (count = 0, i = decIndex; i > 0; i--) { // Working left, every third time add a separator, every time add a digit\r\n if (count%3 === 0 && i !== decIndex && (!isNeg || i > 1))\r\n newOutput = thouSep + newOutput;\r\n newOutput = output.charAt(i-1) + newOutput;\r\n count++;\r\n }\r\n output = newOutput;\r\n }\r\n return output;\r\n } else { // Not a Number, return as string\r\n return ($.isValue(data) && data.toString) ? data.toString() : \"\";\r\n }\r\n}\r\n\r\n/**\r\n * Convert data to Moment object (see http://momentjs.com/docs/)\r\n *\r\n * @param {*} data - Data being converted\r\n * @param {number} format - Date format matching server side FormatDateTime()\r\n * @returns {Moment}\r\n */\r\nexport function parseDate(data, format) {\r\n var args = $.makeArray(arguments);\r\n if ($.isNumber(format) && format >=0 && format <= 17) {\r\n var f, def = ew.DATE_FORMAT.toUpperCase(), sep = ew.DATE_SEPARATOR, timesep = ew.TIME_SEPARATOR;\r\n switch (format) {\r\n case 0: case 1: case 2: case 8: f = def + \" HH\" + timesep + \"mm\" + timesep + \"ss\"; break; // ew.DATE_FORMAT + \" %H:%M:%S\"\r\n case 3: f = \"hh:mm:ss A\"; break; // \"%I:%M:%S %p\"\r\n case 4: f = \"HH:mm:ss\"; break; // \"%H:%M:%S\"\r\n case 5: f = \"YYYY\" + sep + \"MM\" + sep + \"DD\"; break; // \"%Y\" + sep + \"%m\" + sep + \"%d\"\r\n case 6: f = \"MM\" + sep + \"DD\" + sep + \"YYYY\"; break; // \"%m\" + sep + \"%d\" + sep + \"%Y\"\r\n case 7: f = \"DD\" + sep + \"MM\" + sep + \"YYYY\"; break; // \"%d\" + sep + \"%m\" + sep + \"%Y\"\r\n case 9: f = \"YYYY\" + sep + \"MM\" + sep + \"DD HH\" + timesep + \"mm\" + timesep + \"ss\"; break; // \"%Y\" + sep + \"%m\" + sep + \"%d %H:%M:%S\"\r\n case 10: f = \"MM\" + sep + \"DD\" + sep + \"YYYY HH\" + timesep + \"mm\" + timesep + \"ss\"; break; // \"%m\" + sep + \"%d\" + sep + \"%Y %H:%M:%S\"\r\n case 11: f = \"DD\" + sep + \"MM\" + sep + \"YYYY HH\" + timesep + \"mm\" + timesep + \"ss\"; break; // \"%d\" + sep + \"%m\" + sep + \"%Y %H:%M:%S\"\r\n case 12: f = \"YY\" + sep + \"MM\" + sep + \"DD\"; break; // \"%y\" + sep + \"%m\" + sep + \"%d\"\r\n case 13: f = \"MM\" + sep + \"DD\" + sep + \"YY\"; break; // \"%m\" + sep + \"%d\" + sep + \"%y\"\r\n case 14: f = \"DD\" + sep + \"MM\" + sep + \"YY\"; break; // \"%d\" + sep + \"%m\" + sep + \"%y\"\r\n case 15: f = \"YY\" + sep + \"MM\" + sep + \"DD HH\" + timesep + \"mm\" + timesep + \"ss\"; break; // \"%y\" + sep + \"%m\" + sep + \"%d %H:%M:%S\"\r\n case 16: f = \"MM\" + sep + \"DD\" + sep + \"YY HH\" + timesep + \"mm\" + timesep + \"ss\"; break; // \"%m\" + sep + \"%d\" + sep + \"%y %H:%M:%S\"\r\n case 17: f = \"DD\" + sep + \"MM\" + sep + \"YY HH\" + timesep + \"mm\" + timesep + \"ss\"; break; // \"%d\" + sep + \"%m\" + sep + \"%y %H:%M:%S\"\r\n }\r\n args[1] = [f, \"YYYY-MM-DD HH\" + timesep + \"mm\" + timesep + \"ss\"];\r\n }\r\n return moment.apply(this, args);\r\n}\r\n\r\n/**\r\n * Format date time\r\n *\r\n * @param {*} data - Date being formatted\r\n * @param {string} format - Date format (see http://momentjs.com/docs/#/displaying/format/)\r\n * @returns {string}\r\n */\r\nexport function formatDate(data, format) {\r\n return moment(data).format(format || ew.DATE_FORMAT.toUpperCase());\r\n}\r\n\r\n/**\r\n * Init page\r\n *\r\n * @param {Event|undefined} e - Event\r\n */\r\nexport function initPage(e) {\r\n var el = (e && e.target) ? e.target : document,\r\n $el = $(el),\r\n $tables = $el.find(\"table.ew-table:not(.ew-export-table)\");\r\n Array.prototype.forEach.call(el.querySelectorAll(\".ew-grid-upper-panel, .ew-grid-lower-panel\"), ew.initGridPanel); // Init grid panels\r\n ew.renderJsTemplates(e);\r\n lazyLoad(e);\r\n initForms(e);\r\n initTooltips(e);\r\n initPasswordOptions(e);\r\n initIcons(e);\r\n initLightboxes(e);\r\n initPdfObjects(e);\r\n $el.find(\"[data-widget='treeview']\").each(function() {\r\n adminlte.Treeview._jQueryInterface.call($(this), \"init\");\r\n });\r\n $tables.each(setupTable); // Init tables\r\n $el.find(\".ew-btn-dropdown\").on(\"shown.bs.dropdown\", function() {\r\n var $this = $(this).removeClass(\"dropup\"),\r\n $window = $(window),\r\n $menu = $this.find(\"> .dropdown-menu\");\r\n $this.toggleClass(\"dropup\", $menu.offset().top + $menu.height() > $window.scrollTop() + $window.height());\r\n });\r\n $el.find(\"input[name=pageno]\").on(\"keydown\", function(e) {\r\n if (e.key == \"Enter\") {\r\n currentUrl.searchParams.set(this.name, parseInt(this.value));\r\n window.location = sanitizeUrl(currentUrl.toString());\r\n return false;\r\n }\r\n });\r\n if (!ew.IS_SCREEN_SM_MIN) {\r\n $el.find(\".\" + ew.RESPONSIVE_TABLE_CLASS + \" [data-toggle='dropdown']\").parent().on(\"shown.bs.dropdown\", function() {\r\n var $this = $(this),\r\n $menu = $this.find(\".dropdown-menu\"),\r\n div = $this.closest(\".\" + ew.RESPONSIVE_TABLE_CLASS)[0];\r\n if (div.scrollHeight - div.clientHeight) {\r\n var d = $menu.offset().top + $menu.outerHeight() - $(div).offset().top - div.clientHeight;\r\n if (d > 0)\r\n $menu.css(ew.CSS_FLIP ? \"right\" : \"left\", \"100%\").css(\"top\", parseFloat($menu.css(\"top\")) - d);\r\n }\r\n });\r\n }\r\n initExportLinks(e);\r\n initMultiSelectCheckboxes(e);\r\n\r\n // Report\r\n var $rpt = $el.find(\".ew-report\");\r\n if ($rpt[0]) {\r\n $rpt.find(\".card\").on(\"collapsed.lte.widget\", function() { // Fix min-height when .lte.widget is collapsed\r\n var $card = $(this), $div = $card.closest(\"[class^='col-']\"), mh = $div.css(\"min-height\");\r\n if (mh)\r\n $div.data(\"min-height\", mh);\r\n $div.css(\"min-height\", 0);\r\n }).on(\"expanded.lte.widget\", function() { // Fix min-height when .lte.widget is expanded\r\n var $card = $(this), $div = $card.closest(\"[class^='col-']\"), mh = $div.css(\"min-height\");\r\n if (mh)\r\n $div.css(\"min-height\", mh); // Restore min-height\r\n });\r\n // Group expand/collapse button\r\n $rpt.find(\"span.ew-group-toggle\").on(\"click\", function() {\r\n ew.toggleGroup(this);\r\n });\r\n }\r\n\r\n // Show message\r\n if (typeof ew.USE_JAVASCRIPT_MESSAGE != \"undefined\" && ew.USE_JAVASCRIPT_MESSAGE)\r\n showMessage(e);\r\n}\r\n\r\n// Redirect by HTTP GET or POST\r\nexport function redirect(url, f, method) {\r\n var newUrl = new URL(url),\r\n params = newUrl.searchParams;\r\n params.set(ew.TOKEN_NAME_KEY, ew.TOKEN_NAME); // PHP\r\n params.set(ew.ANTIFORGERY_TOKEN_KEY, ew.ANTIFORGERY_TOKEN); // PHP\r\n if (sameText(method, \"post\")) { // POST\r\n var $form = (f) ? $(f) : $(\"<form></form>\").appendTo(\"body\");\r\n $form.attr({ action: ar[0], method: \"post\" });\r\n params.forEach(function(value, key) {\r\n $('<input type=\"hidden\">').attr({ name: key, value: ew.sanitize(value) }).appendTo($form);\r\n });\r\n $form.trigger(\"submit\");\r\n } else { // GET\r\n window.location = sanitizeUrl(newUrl.toString());\r\n }\r\n}\r\n\r\n// Show/Hide password\r\nexport function togglePassword(e) {\r\n var $btn = $(e.currentTarget), $input = $btn.closest(\".input-group\").find(\"input\"), $i = $btn.find(\"i\");\r\n if ($input.attr(\"type\") == \"text\") {\r\n $input.attr(\"type\", \"password\");\r\n $i.toggleClass(\"fa-eye-slash fa-eye\");\r\n } else if($input.attr(\"type\") == \"password\"){\r\n $input.attr(\"type\", \"text\");\r\n $i.toggleClass(\"fa-eye-slash fa-eye\");\r\n }\r\n}\r\n\r\n// Export with charts\r\nexport function exportWithCharts(e, url, exportId, f) {\r\n var el = e.target,\r\n exportUrl = new URL(window.location.href),\r\n ar = url.split(\"?\"),\r\n $el = $(el), method = (f) ? \"post\" : \"get\";\r\n\r\n exportId += \"_\" + Date.now();\r\n exportUrl.pathname = ar[0];\r\n exportUrl.search = ar[1];\r\n exportUrl.searchParams.set(\"exportid\", exportId);\r\n\r\n if ($el.is(\".dropdown-menu a\"))\r\n $el = $el.closest(\".btn-group\");\r\n\r\n var _export = function() {\r\n var params = exportUrl.searchParams,\r\n custom = params.get(\"custom\") == \"1\";\r\n if (f && !custom) { // Not custom\r\n var data = $(f).serialize(); // Add token\r\n $.post(exportUrl, data, function(result) {\r\n showMessage(result);\r\n });\r\n } else { // Custom\r\n var exp = params.get(\"export\");\r\n if (custom && [\"word\", \"excel\", \"pdf\", \"email\"].includes(exp)) {\r\n if (exp == \"email\") {\r\n params.delete(\"export\"); // Remove duplicate export=email (exists in form)\r\n exportUrl.search = params.toString() + \"&\" + $(f).serialize();\r\n }\r\n $(\"iframe.ew-export\").remove();\r\n $(\"<iframe></iframe>\").addClass(\"ew-export d-none\").attr(\"src\", exportUrl.toString()).appendTo($body.css(\"cursor\", \"wait\"));\r\n setTimeout(function() { $body.css(\"cursor\", \"default\"); }, 5000);\r\n } else if (exp == \"print\") {\r\n redirect(exportUrl.toString(), f, method);\r\n } else {\r\n fileDownload(exportUrl.toString(), null);\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n var keys = Object.keys(window.exportCharts);\r\n if (keys.length == 0) // No charts, just submit the form\r\n return _export();\r\n\r\n // Success callback\r\n var success = function(result) {\r\n if ($.isString(result))\r\n result = parseJson(result);\r\n if (result.success) {\r\n _export();\r\n } else {\r\n ew.alert(result.error);\r\n }\r\n };\r\n\r\n // Failure callback\r\n var fail = function(xhr, status, error) {\r\n ew.alert(error + \": \" + xhr.responseText); // Show detailed export error message\r\n };\r\n\r\n // Export charts\r\n $body.css(\"cursor\", \"wait\");\r\n var charts = [];\r\n for (var i = 0; i < keys.length; i++) {\r\n var id = keys[i], o = window.exportCharts[id],\r\n params = \"exportfilename=\" + exportId + \"_\" + id + \".png|exportformat=png|exportaction=download|exportparameters=undefined\";\r\n if (o && o.toBase64Image) // Chart.js chart\r\n charts.push({ \"chart_engine\": \"Chart.js\", \"stream_type\": \"base64\", \"stream\": o.toBase64Image(), \"parameters\": params });\r\n }\r\n $.ajax({\r\n \"url\": getApiUrl(ew.API_EXPORT_CHART_ACTION),\r\n \"data\": { \"charts\": JSON.stringify(charts) },\r\n \"cache\": false,\r\n \"type\": \"POST\"\r\n }).done(success).fail(fail).always(function() {\r\n $body.css(\"cursor\", \"default\");\r\n });\r\n return false;\r\n}\r\n\r\n// Layout\r\nvar _fixLayoutHeightTimer;\r\n\r\n// Fix layout height\r\nexport function fixLayoutHeight() {\r\n if (_fixLayoutHeightTimer)\r\n _fixLayoutHeightTimer.cancel(); // Clear timer\r\n _fixLayoutHeightTimer = $.later(50, null, function () {\r\n var layout = $body.data(\"lte.layout\");\r\n if (layout)\r\n layout.fixLayoutHeight();\r\n });\r\n}\r\n\r\n// Add user event handlers\r\nexport function addEventHandlers(tblVar) {\r\n let fields = ew.events[tblVar];\r\n if (fields) {\r\n for (var [fldVar, events] of Object.entries(fields))\r\n $('[data-table=' + tblVar + '][data-field=' + fldVar + ']').on(events);\r\n }\r\n}","import $ from 'jquery';\r\n\r\n/**\r\n * Select2 decorator for results adapter\r\n */\r\nexport default function(Utils) {\r\n\r\n class Select2CustomOption {\r\n\r\n render(decorated) {\r\n var $results = $(\r\n '<div class=\"select2-results__options ' + this.options.get('containerClass') + '\" role=\"listbox\"></div>'\r\n ); //***\r\n\r\n if (this.options.get('multiple')) {\r\n $results.attr('aria-multiselectable', 'true');\r\n }\r\n\r\n this.$results = $results;\r\n\r\n return $results;\r\n };\r\n\r\n displayMessage(decorated, params) {\r\n var escapeMarkup = this.options.get('escapeMarkup');\r\n\r\n this.clear();\r\n this.hideLoading();\r\n\r\n var $message = $(\r\n '<div role=\"alert\" aria-live=\"assertive\"' +\r\n ' class=\"select2-results__option\"></div>'\r\n ); //***\r\n\r\n if (params.message.includes(\"<\") && params.message.includes(\">\")) { // HTML //***\r\n $message.append(params.message);\r\n } else {\r\n var message = this.options.get('translations').get(params.message);\r\n $message.append(\r\n escapeMarkup(\r\n message(params.args)\r\n )\r\n );\r\n }\r\n\r\n $message[0].className += ' select2-results__message';\r\n\r\n this.$results.append($message);\r\n };\r\n\r\n append(decorated, data) {\r\n this.hideLoading();\r\n\r\n var $options = [];\r\n\r\n if (data.results == null || data.results.length === 0) {\r\n if (this.$results.children().length === 0) {\r\n if (this.$element.data(\"updating\")) {\r\n this.trigger('results:message', {\r\n message: '<div class=\"spinner-border spinner-border-sm text-primary ew-select-spinner\" role=\"status\"><span class=\"sr-only\">' + ew.language.phrase('Loading') + '</span></div> ' + ew.language.phrase('Loading')\r\n });\r\n this.$element.one(\"updatedone\", () => this.$element.select2(\"close\").select2(\"open\"));\r\n } else {\r\n this.trigger('results:message', {\r\n message: 'noResults'\r\n });\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n data.results = this.sort(data.results);\r\n\r\n //***\r\n var cols = this.options.get('columns'),\r\n len = data.results.length,\r\n $row = this.$results.find(\".\" + this.options.get('rowClass')).last();\r\n\r\n for (var d = 0; d < data.results.length; d++) {\r\n var item = data.results[d];\r\n\r\n var $option = this.option(item);\r\n\r\n if (!$row.length || $row.children().length == cols) { // Add new row\r\n $row = $('<div class=\"' + this.options.get('rowClass') + '\"></div>');\r\n this.$results.append($row);\r\n }\r\n\r\n $row.append($option);\r\n\r\n if (d == len - 1) { // Last\r\n var cnt = cols - $row.children().length;\r\n for (var i = 0; i < cnt ; i++)\r\n $row.append('<div class=\"' + this.options.get('colClass') + '\"></div>');\r\n }\r\n }\r\n\r\n };\r\n\r\n option(decorated, data) {\r\n // var option = document.createElement('li');\r\n var option = document.createElement('div'); //***\r\n option.className = 'select2-results__option ' + this.options.get('cellClass'); //***\r\n\r\n var attrs = {\r\n 'role': 'option',\r\n 'aria-selected': 'false'\r\n };\r\n\r\n var matches = window.Element.prototype.matches ||\r\n window.Element.prototype.msMatchesSelector ||\r\n window.Element.prototype.webkitMatchesSelector;\r\n\r\n if ((data.element != null && matches.call(data.element, ':disabled')) ||\r\n (data.element == null && data.disabled)) {\r\n delete attrs['aria-selected'];\r\n attrs['aria-disabled'] = 'true';\r\n }\r\n\r\n if (data.id == null) {\r\n delete attrs['aria-selected'];\r\n }\r\n\r\n if (data._resultId != null) {\r\n option.id = data._resultId;\r\n }\r\n\r\n if (data.title) {\r\n option.title = data.title;\r\n }\r\n\r\n // if (data.children) { //***\r\n // attrs.role = 'group';\r\n // attrs['aria-label'] = data.text;\r\n // delete attrs['aria-selected'];\r\n // }\r\n\r\n for (var attr in attrs) {\r\n var val = attrs[attr];\r\n\r\n option.setAttribute(attr, val);\r\n }\r\n\r\n // if (data.children) { //***\r\n // var $option = $(option);\r\n\r\n // var label = document.createElement('strong');\r\n // label.className = 'select2-results__group';\r\n\r\n // var $label = $(label);\r\n // this.template(data, label);\r\n\r\n // var $children = [];\r\n\r\n // for (var c = 0; c < data.children.length; c++) {\r\n // var child = data.children[c];\r\n\r\n // var $child = this.option(child);\r\n\r\n // $children.push($child);\r\n // }\r\n\r\n // var $childrenContainer = $('<ul></ul>', {\r\n // 'class': 'select2-results__options select2-results__options--nested'\r\n // });\r\n\r\n // $childrenContainer.append($children);\r\n\r\n // $option.append(label);\r\n // $option.append($childrenContainer);\r\n // } else {\r\n this.template(data, option);\r\n // }\r\n\r\n Utils.StoreData(option, 'data', data);\r\n\r\n return option;\r\n };\r\n\r\n }\r\n\r\n return Select2CustomOption;\r\n}","import $ from 'jquery';\r\nimport MultiPage from \"./multipage\";\r\nimport * as Validators from './Validators';\r\nimport Form from \"./Form\";\r\nimport * as functions from './functions';\r\n\r\new.IS_SCREEN_SM_MIN = window.matchMedia(\"(min-width: 768px)\").matches; // Should matches $screen-sm-min\r\new.MOBILE_DETECT = new MobileDetect(window.navigator.userAgent);\r\new.IS_MOBILE = !!ew.MOBILE_DETECT.mobile();\r\new.IS_IE = ew.MOBILE_DETECT.version(\"MSIE\") > 0;\r\n\r\n// Charts\r\nwindow.exportCharts = {}; // Per window\r\nwindow.drillDownCharts = {}; // Per window\r\n\r\n// Init spinner\r\new.addSpinner();\r\n\r\n// Extend\r\nObject.assign(ew, { MultiPage, Form, Validators }, functions);\r\n\r\nvar $document = $(document);\r\n\r\n// Init document\r\nloadjs.ready(\"load\", function () {\r\n\t$.views.settings.debugMode(ew.DEBUG);\r\n\tew.setSessionTimer();\r\n\tew.initPage();\r\n\t$(\"#ew-modal-dialog\").on(\"load.ew\", ew.initPage);\r\n\t$(\"#ew-add-opt-dialog\").on(\"load.ew\", ew.initPage);\r\n\tvar hash = ew.currentUrl.searchParams.get(\"hash\");\r\n\tif (hash)\r\n\t\t$(\"html, body\").animate({ scrollTop: $(\"#\" + hash).offset().top }, 800);\r\n\tew.removeSpinner();\r\n\t$document.trigger(\"load\");\r\n});\r\n\r\n// Default \"addoption\" event (fired before adding new option to selection list)\r\n$document.on(\"addoption\", function (e, args) {\r\n\tvar row = args.data; // New row to be validated\r\n\tvar arp = args.parents; // Parent field values\r\n\tfor (var i = 0, cnt = arp.length; i < cnt; i++) { // Iterate parent values\r\n\t\tvar p = arp[i];\r\n\t\tif (!p.length) // Empty parent\r\n\t\t\t//continue; // Allow\r\n\t\t\treturn args.valid = false; // Disallow\r\n\t\tvar val = row[\"ff\" + ((i > 0) ? i + 1 : \"\")]; // Filter fields start from the 6th field\r\n\t\tif (!$.isUndefined(val) && !p.includes(String(val))) // Filter field value not in parent field values\r\n\t\t\treturn args.valid = false; // Returns false if invalid\r\n\t}\r\n});\r\n\r\n// Fix z-index of multiple modals\r\n$document.on(\"show.bs.modal\", \".modal\", function () {\r\n\tvar zIndex = 1050 + $(\".modal:visible\").length;\r\n\t$(this).css(\"z-index\", zIndex);\r\n\tsetTimeout(function () {\r\n\t\t$(\".modal-backdrop\").not(\".modal-stack\").css(\"z-index\", zIndex - 1).addClass(\"modal-stack\");\r\n\t}, 0);\r\n});\r\n\r\n// Fix scrolling of multiple modals\r\n$document.on(\"hidden.bs.modal\", \".modal\", function () {\r\n\t$(\".modal:visible\").length && $(\"body\").addClass(\"modal-open\");\r\n});","import $ from \"jquery\";\r\n\r\nexport default function MultiPage(formid) {\r\n\tvar self = this;\r\n\tthis.$form = null;\r\n\tthis.formID = formid;\r\n\tthis.pageIndex = 1;\r\n\tthis.maxPageIndex = 0;\r\n\tthis.minPageIndex = 0;\r\n\tthis.pageIndexes = [];\r\n\tthis.$pages = null;\r\n\tthis.$collapses = null;\r\n\tthis.isTab = false; // Is tabs\r\n\tthis.isCollapse = false; // Is collapses (accordion)\r\n\tthis.lastPageSubmit = false; // Enable submit button for the last page only\r\n\tthis.hideDisabledButton = false; // Hide disabled submit button\r\n\tthis.hideInactivePages = false; // Hide inactive pages\r\n\tthis.lockTabs = false; // Set inactive tabs as disabled\r\n\tthis.hideTabs = false; // Hide all tabs\r\n\tthis.showPagerTop = false; // Show pager at top\r\n\tthis.showPagerBottom = false; // Show pager at bottom\r\n\tthis.pagerTemplate = '<nav><ul class=\"pagination\"><li class=\"page-item previous ew-prev\"><a href=\"#\" class=\"page-link\"><span class=\"icon-prev\"></span> {Prev}</a></li><li class=\"page-item next ew-next\"><a href=\"#\" class=\"page-link\">{Next} <span class=\"icon-next\"></span></a></li></ul></nav>'; // Pager template\r\n\r\n\t// \"show\" handler (for disabled tabs)\r\n\tvar _show = function(e) {\r\n\t\te.preventDefault();\r\n\t};\r\n\r\n\t// Set properties\r\n\tvar _properties = [\"lastPageSubmit\", \"hideDisabledButton\", \"hideInactivePages\", \"lockTabs\",\r\n\t\t\"hideTabs\", \"showPagerTop\", \"showPagerBottom\", \"pagerTemplate\"];\r\n\r\n\tthis.set = function() {\r\n\t\tif (arguments.length == 1 && $.isObject(arguments[0])) {\r\n\t\t\tvar obj = arguments[0];\r\n\t\t\tfor (var i in obj) {\r\n\t\t\t\tvar p = i[0].toLowerCase() + i.substr(1); // Camel case\r\n\t\t\t\tif (_properties.includes(p))\r\n\t\t\t\t\tthis[p] = obj[i];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// DOM loaded\r\n\tthis.init = function() {\r\n\t\tvar tpl = this.pagerTemplate.replace(/\\{prev\\}/i, ew.language.phrase(\"Prev\")).replace(/\\{next\\}/i, ew.language.phrase(\"Next\"));\r\n\t\tif (this.isTab) {\r\n\t\t\tif (this.showPagerTop)\r\n\t\t\t\tthis.$pages.closest(\".tabbable, .ew-nav-tabs\").before(tpl);\r\n\t\t\tif (this.showPagerBottom)\r\n\t\t\t\tthis.$pages.closest(\".tabbable, .ew-nav-tabs\").after(tpl);\r\n\t\t\tthis.$form.find(\".ew-prev\").click(function(e) {\r\n\t\t\t\tself.$pages.off(\"show.bs.tab\", _show).filter(\".active\").parent()\r\n\t\t\t\t\t.prev(\":has([data-toggle=tab]:not(.ew-hidden):not(.ew-disabled))\")\r\n\t\t\t\t\t.find(\"[data-toggle=tab]\").toggleClass(\"disabled d-none\", false).click();\r\n\t\t\t\treturn false;\r\n\t\t\t});\r\n\t\t\tthis.$form.find(\".ew-next\").click(function(e) {\r\n\t\t\t\tself.$pages.off(\"show.bs.tab\", _show).filter(\".active\").parent()\r\n\t\t\t\t\t.next(\":has([data-toggle=tab]:not(.ew-hidden):not(.ew-disabled))\")\r\n\t\t\t\t\t.find(\"[data-toggle=tab]\").toggleClass(\"disabled d-none\", false).click();\r\n\t\t\t\treturn false;\r\n\t\t\t});\r\n\t\t\tif (this.hideTabs)\r\n\t\t\t\tthis.$form.find(\".ew-multi-page > .tabbable > .nav-tabs, .ew-multi-page > .ew-nav-tabs > .nav-tabs\").hide();\r\n\t\t} else if (this.isCollapse) {\r\n\t\t\tif (this.showPagerTop)\r\n\t\t\t\tthis.$collapses.closest(\".ew-accordion\").before(tpl);\r\n\t\t\tif (this.showPagerBottom)\r\n\t\t\t\tthis.$collapses.closest(\".ew-accordion\").after(tpl);\r\n\t\t\tthis.$form.find(\".ew-prev\").click(function(e) {\r\n\t\t\t\tself.$pages.closest(\".card\").filter(\":has(.collapse.show)\")\r\n\t\t\t\t\t.prev(\":has([data-toggle=collapse]:not(.ew-hidden):not(.ew-disabled))\")\r\n\t\t\t\t\t.toggleClass(\"disabled d-none\", false)\r\n\t\t\t\t\t.find(\"[data-toggle=collapse]\").click();\r\n\t\t\t\treturn false;\r\n\t\t\t});\r\n\t\t\tthis.$form.find(\".ew-next\").click(function(e) {\r\n\t\t\t\tself.$pages.closest(\".card\").filter(\":has(.collapse.show)\")\r\n\t\t\t\t\t.next(\":has([data-toggle=collapse]:not(.ew-hidden):not(.ew-disabled))\")\r\n\t\t\t\t\t.toggleClass(\"disabled d-none\", false)\r\n\t\t\t\t\t.find(\"[data-toggle=collapse]\").click();\r\n\t\t\t\treturn false;\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis.pageShow();\r\n\t}\r\n\r\n\t// Page show\r\n\tthis.pageShow = function() {\r\n\t\tif (this.isTab) {\r\n\t\t\tif (this.lockTabs)\r\n\t\t\t\tthis.$pages.on(\"show.bs.tab\", _show);\r\n\t\t\tthis.$pages.each(function() {\r\n\t\t\t\tvar $this = $(this);\r\n\t\t\t\tif (self.hideInactivePages)\r\n\t\t\t\t\t$this.toggleClass(\"d-none\", !$this.hasClass(\"active\"));\r\n\t\t\t\tif (self.lockTabs)\r\n\t\t\t\t\t$this.toggleClass(\"disabled\", !$this.hasClass(\"active\"));\r\n\t\t\t});\r\n\t\t} else if (this.isCollapse) {\r\n\t\t\tthis.$pages.closest(\".card\").each(function() {\r\n\t\t\t\tvar $this = $(this);\r\n\t\t\t\tif (self.hideInactivePages)\r\n\t\t\t\t\t$this.toggleClass(\"d-none\", !$this.find(\".collapse.show\")[0]);\r\n\t\t\t});\r\n\t\t}\r\n\t\tvar disabled = this.lastPageSubmit && this.pageIndex != this.maxPageIndex;\r\n\t\tvar $btn = this.$form.closest(\".content, .modal-content\").find(\"#btn-action, button.ew-submit\").prop(\"disabled\", disabled).toggle(!this.hideDisabledButton || !disabled);\r\n\t\t$(\".ew-captcha\").toggle($btn.is(\":visible:not(:disabled)\")); // Re-captcha uses class \"disabled\", not \"disabled\" property.\r\n\t\tdisabled = this.pageIndex <= this.minPageIndex;\r\n\t\tthis.$form.find(\".ew-prev\").toggleClass(\"disabled\", disabled);\r\n\t\tdisabled = this.pageIndex >= this.maxPageIndex;\r\n\t\tthis.$form.find(\".ew-next\").toggleClass(\"disabled\", disabled);\r\n\t}\r\n\r\n\t// Go to page by index\r\n\tthis.gotoPage = function(i) {\r\n\t\tif (i <= 0 || i < this.minPageIndex || i > this.maxPageIndex)\r\n\t\t\treturn;\r\n\t\tif (this.pageIndex != i) {\r\n\t\t\tvar $page = this.$pages.eq(i - 1);\r\n\t\t\tif (this.isTab) {\r\n\t\t\t\tif ($page.is(\":not(.d-none):not(.disabled)\"))\r\n\t\t\t\t\t$page.click();\r\n\t\t\t\telse\r\n\t\t\t\t\t$page.parent().next(\":has([data-toggle=tab]):not(.d-none):not(.disabled)\")\r\n\t\t\t\t\t\t.find(\"[data-toggle=tab]\").toggleClass(\"disabled\", false).click();\r\n\t\t\t} else if (this.isCollapse) {\r\n\t\t\t\tvar $p = $page.closest(\".card\");\r\n\t\t\t\tif ($p.is(\":not(.d-none)\"))\r\n\t\t\t\t\t$page.click();\r\n\t\t\t\telse\r\n\t\t\t\t\t$p.next(\":has([data-toggle=collapse]):not(.d-none)\").find(\"[data-toggle=collapse]\").click();\r\n\t\t\t}\r\n\t\t\tthis.pageIndex = i;\r\n\t\t}\r\n\t}\r\n\r\n\tthis.gotoPageByIndex = this.gotoPage;\r\n\r\n\t// Go to page by element\r\n\tthis.gotoPageByElement = function(el) {\r\n\t\tthis.gotoPage(parseInt($(el).data(\"page\"), 10) || -1);\r\n\t}\r\n\r\n\t// Go to page by element's id or name or data-field attribute\r\n\tthis.gotoPageByElementId = function(id) {\r\n\t\tvar $el = this.$form.find(\"[data-page]\").filter(\"[id='\" + id + \"'],[name='\" + id + \"'],[data-field='\" + id + \"']\");\r\n\t\tthis.gotoPageByElement($el);\r\n\t}\r\n\r\n\t// Toggle page\r\n\tthis.togglePage = function(i, show) {\r\n\t\tif (this.isTab) {\r\n\t\t\tthis.$pages.eq(i - 1).toggleClass(\"d-none\", !show);\r\n\t\t} else if (this.isCollapse) {\r\n\t\t\tthis.$pages.eq(i - 1).closest(\".card\").toggle(\"d-none\", !show);\r\n\t\t}\r\n\t}\r\n\r\n\t// Render\r\n\tthis.render = function() {\r\n\t\tthis.$form = $(\"#\" + formid);\r\n\t\tthis.pageIndexes = this.$form.find(\"[data-page]\").map(function() {\r\n\t\t\tvar index = parseInt($(this).data(\"page\"), 10);\r\n\t\t\treturn (index > 0) ? index : null;\r\n\t\t}).get();\r\n\t\tthis.pageIndexes.sort(function(a, b) {\r\n\t\t\treturn a - b;\r\n\t\t});\r\n\t\tthis.minPageIndex = this.pageIndexes[0];\r\n\t\tthis.maxPageIndex = this.pageIndexes[this.pageIndexes.length - 1];\r\n\t\tvar $tabs = this.$form.find(\"[data-toggle=tab]\");\r\n\t\tif ($tabs[0]) {\r\n\t\t\tthis.$pages = $tabs;\r\n\t\t\tthis.isTab = true;\r\n\t\t\t$tabs.on(\"shown.bs.tab\", function(e) {\r\n\t\t\t\tself.pageIndex = $tabs.index(e.target) + 1;\r\n\t\t\t\tself.pageShow();\r\n\t\t\t\t$($(this).attr(\"href\")).find(\".ew-google-map\").each(function() {\r\n\t\t\t\t\tvar m = ew.googleMaps[this.id];\r\n\t\t\t\t\tif (m && m[\"map\"]) {\r\n\t\t\t\t\t\tgoogle.maps.event.trigger(m[\"map\"], \"resize\");\r\n\t\t\t\t\t\tm[\"map\"].setCenter(m[\"latlng\"]);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t\tthis.pageIndex = $tabs.index($tabs.parent(\".active\")) + 1;\r\n\t\t} else {\r\n\t\t\tthis.$collapses = this.$form.find(\"[data-toggle=collapse]\");\r\n\t\t\tif (this.$collapses[0]) {\r\n\t\t\t\tthis.$pages = this.$collapses;\r\n\t\t\t\tthis.isCollapse = true;\r\n\t\t\t\tvar $bodies = this.$collapses.closest(\".card-header\").next();\r\n\t\t\t\t$bodies.on(\"shown.bs.collapse\", function(e) {\r\n\t\t\t\t\tself.pageIndex = $bodies.index(e.target) + 1;\r\n\t\t\t\t\tself.pageShow();\r\n\t\t\t\t\t$(this).find(\".ew-google-map\").each(function() {\r\n\t\t\t\t\t\tvar m = ew.googleMaps[this.id];\r\n\t\t\t\t\t\tif (m && m[\"map\"]) {\r\n\t\t\t\t\t\t\tgoogle.maps.event.trigger(m[\"map\"], \"resize\");\r\n\t\t\t\t\t\t\tm[\"map\"].setCenter(m[\"latlng\"]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t\tthis.pageIndex = $bodies.index($bodies.hasClass(\"show\")) + 1;\r\n\t\t\t}\r\n\t\t}\r\n\t\t$(function() {\r\n\t\t\tself.init();\r\n\t\t});\r\n\t}\r\n}","import $ from 'jquery';\r\n\r\n// Extend jQuery\r\n$.extend({\r\n\tisBoolean: function(o) {\r\n\t\treturn typeof o === 'boolean';\r\n\t},\r\n\tisNull: function(o) {\r\n\t\treturn o === null;\r\n\t},\r\n\tisNumber: function(o) {\r\n\t\treturn typeof o === 'number' && isFinite(o);\r\n\t},\r\n\tisObject: function(o) {\r\n\t\treturn (o && (typeof o === 'object' || this.isFunction(o))) || false;\r\n\t},\r\n\tisString: function(o) {\r\n\t\treturn typeof o === 'string';\r\n\t},\r\n\tisUndefined: function(o) {\r\n\t\treturn typeof o === 'undefined';\r\n\t},\r\n\tisValue: function(o) {\r\n\t\treturn (this.isObject(o) || this.isString(o) || this.isNumber(o) || this.isBoolean(o));\r\n\t},\r\n\tisDate: function(o) {\r\n\t\treturn this.type(o) === 'date' && o.toString() !== 'Invalid Date' && !isNaN(o);\r\n\t},\r\n\tlater: function(when, o, fn, data, periodic) {\r\n\t\twhen = when || 0;\r\n\t\to = o || {};\r\n\t\tvar m = fn, d = data, f, r;\r\n\t\tif (this.isString(fn))\r\n\t\t\tm = o[fn];\r\n\t\tif (!m)\r\n\t\t\treturn;\r\n\t\tif (!this.isUndefined(data) && !this.isArray(d))\r\n\t\t\td = [data];\r\n\t\tf = function() {\r\n\t\t\tm.apply(o, d || []);\r\n\t\t};\r\n\t\tr = (periodic) ? setInterval(f, when) : setTimeout(f, when);\r\n\t\treturn {\r\n\t\t\tinterval: periodic,\r\n\t\t\tcancel: function() {\r\n\t\t\t\tif (this.interval) {\r\n\t\t\t\t\tclearInterval(r);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tclearTimeout(r);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n});","import $ from 'jquery';\r\n\r\n/**\r\n * jQuery.fields() plugin\r\n *\r\n * @param {string|undefined} fldvar - Field variable name or undefined\r\n * If field variable name, returns jQuery object of the specified field element(s).\r\n * If unspecified, returns object of jQuery objects of all fields.\r\n * @returns jQuery object\r\n */\r\n$.fn.fields = function(fldvar) { // Note: fldvar has NO \"x_\" prefix\r\n var rec = {},\r\n id = this.attr(\"id\"),\r\n obj = this[0],\r\n m = id.match(/^[xy](\\d*)_/),\r\n f, tbl, infix;\r\n if (m) { // \"this\" is input element\r\n f = ew.getForm(obj); // form\r\n tbl = this.data(\"table\"); // table var\r\n infix = m[1]; // row index\r\n } else if (obj && obj.htmlForm) { // \"this\" is form\r\n f = obj.$element; // form\r\n tbl = obj.id.replace(new RegExp(\"^f|\" + obj.pageId + \"$\", \"g\"), \"\"); // table var\r\n infix = $(obj.htmlForm).data(\"rowindex\"); // row index\r\n }\r\n var selector = \"[data-table\" + (tbl ? \"=\" + tbl : \"\") + \"][data-field\" + (fldvar ? \"=x_\" + fldvar : \"\") + \"]\";\r\n if ($.isValue(infix))\r\n selector += \"[name^=x\" + infix + \"_]\";\r\n if (f && selector) {\r\n $(f).find(selector).each(function() {\r\n var key = this.getAttribute(\"data-field\").substr(2), name = this.getAttribute(\"name\");\r\n key = (/^y_/.test(name)) ? \"y_\" + key : key; // Use \"y_fldvar\" as key for 2nd search input\r\n rec[key] = (rec[key]) ? rec[key].add(this) : $(this); // Create jQuery object for each field\r\n });\r\n }\r\n return (fldvar) ? rec[fldvar] : rec;\r\n};\r\n$.fn.extend({\r\n // Get jQuery object of the row (<div> or <tr>)\r\n row: function() {\r\n var $row = this.closest(\"#r_\" + this.data(\"field\")?.substr(2));\r\n if (!$row[0])\r\n $row = this.closest(\".ew-table > tbody > tr\"); // Grid page\r\n return $row;\r\n },\r\n // Show/Hide field\r\n visible: function(v) {\r\n var $p = this.closest(\"#r_\" + this.data(\"field\")?.substr(2)); // Find the row\r\n if (!$p[0])\r\n $p = this.closest(\"[id^=el]\"); // Find the span\r\n if (typeof(v) != \"undefined\") {\r\n $p.toggle(v);\r\n return this;\r\n } else {\r\n return $el.is(\":visible\");\r\n }\r\n },\r\n // Get/Set field \"readonly\" attribute\r\n // Note: This attribute is ignored if the value of the type attribute is hidden, range, color, checkbox, radio, file, or a button type\r\n readonly: function(v) {\r\n if (typeof(v) != \"undefined\") {\r\n this.prop(\"readOnly\", v);\r\n return this;\r\n } else {\r\n return this.prop(\"readOnly\");\r\n }\r\n },\r\n // Get/Set field \"disabled\" attribute\r\n // Note: A disabled control's value isn't submitted with the form\r\n disabled: function(v) {\r\n if (typeof(v) != \"undefined\") {\r\n this.prop(\"disabled\", v);\r\n return this;\r\n } else {\r\n return this.prop(\"disabled\");\r\n }\r\n },\r\n // Get/Set field value(s)\r\n // Note: Return array if select-multiple\r\n value: function(v) {\r\n var type = this.attr(\"type\");\r\n if (typeof(v) != \"undefined\") {\r\n if (!Array.isArray(v))\r\n v = [v];\r\n var type = this.attr(\"type\");\r\n var el = (type == \"radio\" || type == \"checkbox\") ? this.get() : this[0];\r\n if (ew.isHiddenTextArea(this)) {\r\n this.val(v).data(\"editor\").save();\r\n } else {\r\n ew.selectOption(el, v);\r\n if (this.hasClass(\"select2-hidden-accessible\")) { // Select2\r\n this.trigger(\"change\");\r\n }\r\n }\r\n return this;\r\n } else {\r\n if (type == \"checkbox\") {\r\n var val = ew.getOptionValues(this.get());\r\n return (this.length == 1) ? val.join() : val;\r\n } else if (type == \"radio\") {\r\n return ew.getOptionValues(this.get()).join();\r\n } else if (ew.isHiddenTextArea(this)) {\r\n this.data(\"editor\").save();\r\n return this.val();\r\n } else {\r\n return this.val();\r\n }\r\n }\r\n },\r\n // Get field value as number\r\n toNumber: function() {\r\n return ew.parseNumber(this.value());\r\n },\r\n // Get field value as moment object\r\n toDate: function() {\r\n return ew.parseDate(this.value(), this.data(\"format\"));\r\n },\r\n // Get field value as native Date object\r\n toJsDate: function() {\r\n return ew.parseDate(this.value(), this.data(\"format\")).toDate();\r\n }\r\n});","import $ from 'jquery';\r\n\r\n// Init Treeview later\r\n$(window).off(\"load.lte.treeview\");\r\n\r\n// Treeview\r\nvar Treeview = adminlte.Treeview;\r\nTreeview.prototype._toggle = Treeview.prototype.toggle;\r\nTreeview.prototype.toggle = function toggle(event) {\r\n\tvar $relativeTarget = $(event.currentTarget), treeviewMenu = $relativeTarget.next(),\r\n\t\thref = $relativeTarget.attr(\"href\"), $text = $(event.target).closest(\".menu-item-text\");\r\n\tif (!treeviewMenu.is(\".nav-treeview\") || $text[0] && href && href != \"#\" && href != \"javascript:void(0);\") // Menu text with href\r\n\t\treturn;\r\n\tthis._toggle(event);\r\n};\r\n\r\n// Dropdown menu parent item with href // Override AdminLTE\r\n$(\"ul.dropdown-menu [data-toggle=dropdown]\").on(\"click\", function(e) {\r\n\tvar href = $(this).attr(\"href\");\r\n\tif (href && href != \"#\" && e.target.nodeName == \"SPAN\")\r\n\t\twindow.location = href;\r\n});"]}