{"version":3,"sources":["UtilPieces.js","configurations.js","helpers.js"],"names":["UtilPieces","class_1","class_2","class_3","class_4","class_5","class_6","class_7","class_8","this","nodosEliminar","date","formatDate","format","day","getDate","toString","month","getMonth","year","getFullYear","replace","reformatStringDate","dateString","separator","newFormat","dateParts","split","formatParts","indexOf","number","getMilisegundos","numero","magnitud","milisegundos","numberFormat","decimals","decimal_separator","thousands_separator","numberString","n","isFinite","prec","Math","abs","sep","dec","s","k","pow","round","toFixedFix","length","Array","join","parseNumber","float","lastIndexOf","parseFloat","parseInt","components","configContadores","selector","step","delay","util","contadores","document","querySelectorAll","_i","contadores_1","element","cantidad","getAttribute","interval","setInterval","actual","innerHTML","nuevoValor","clearInterval","slider","navItemSelector","elementSliderSelector","activeClass","$","_this","window","nav_icons","find","elementos","last_nav","debug","click","e","stopPropagation","id","attr","hasClass","each","addClass","removeClass","file","dataURLToBlob","dataURL","fileData","string","proccessDataURL","fileString","fileType","mime","fileBytes","stringToBytes","Blob","Uint8Array","type","dataURLToFile","filename","info","bytes","stringToBytesUnclear","File","mimeType","atob","b64","stringClear","str","String","stringLowerClear","toLowerCase","trim","stringToBytesToLower","verbose","lengthString","bytesDec","bytesHex","console","log","i","charCode","charCodeAt","hex","arrayToString","array","arrayLength","substring","validate","allowed","signaturesList","xlsx","pdf","html","jpg","png","mimeSignatures","extension","signatures","jpeg","data","j","verboseStrings","signature","header","uri","getURIPart","part","split_url","location","pathname","partes","tmp","push","createElement","tag","options","createTagInnerHTML","create","attributes","childs","attributes_1","value","setAttribute","isArray","_a","childs_1","appendChild","prototype","clearTextNodes","getElementsByTagName","childNodes","hijo","nodeType","test","nodeValue","d","parentNode","removeChild","pcsphpGlobals","configCalendars","configSinglesCalendar","configGroupCalendar","error","undefined","calendar","selectorAttr","toArray","calendarType","calendarOptions","Object","assign","configCalendar","customOption","selectorAttrName","groupCalendar","groupCalendars","result","groups","groupName","group","start","end","originalStartHTML","get","outerHTML","originalEndHTML","minDate","Date","isNaN","maxDate","startType","endType","baseConfig","optStart","optEnd","endCalendar","startCalendar","restart","configMessagesValidationsSemanticForm","fn","form","settings","prompt","text","messages","es","semantic_form","configDataTables","tablas","DataTable","configRichEditor","RichEditorAdapterComponent","elementRichEditorSelector","elementRichEditor","containerSelector","textareaTargetSelector","name","configColorPickers","colorPickers","spectrum","color","preferredFormat","showInput","showInitial","showAlpha","clickoutFiresChange","allowEmpty","flat","disabled","showButtons","chooseText","cancelText","showPalette","showSelectionPalette","togglePaletteOnly","togglePaletteMoreText","togglePaletteLessText","palette","pcsAdminSideBar","menu","titlesGroups","not","preventDefault","ancester","parent","items","hide","show","ancesterOthers","parents","itemsOthers","toggle","bgColor","css","on","is","fadeOut","_i18n","message","langToCheck","lang","exists","defaultLang","existsType","successMessage","title","onClose","iziToast","success","position","onClosed","alert","warningMessage","warning","infoMessage","errorMessage","setCountdown","dateLimit","time","fechaLimite","lanzar","event","Event","ahora","tiempoFaltante","getTime","dias","floor","horas","minutos","segundos","finalizado","dispatchEvent","postRequest","url","headers","method","FormData","processData","enctype","contentType","cache","parsedHeaders","mapHeaders","Map","valueString","lastIndexValue","set","parseHeaders","size","beforeSend","request","key","keys","setRequestHeader","ajax","getRequest","HTMLFormElement","serialize","formatNumberString","input","thousandsSeparator","decimalsSeparator","inverse","RegExp","commas","match","positionLastComma","strReplace","search","subject","searchLength","searchString","replaceString","replacedString","friendlyURL","maxWords","words","wordsLimitied","countWords","$i","word","dataTableServerProccesing","table","ajaxURL","perPage","columnsDefinitions","index","thElements","HTMLElement","columnDefinition","targets","searchable","orderable","columnDefs","definition","target","optionDef","configDataTable","option","processing","serverSide","pageLength","Error","dataTablesServerProccesingOnCards","container","nameLoader","cardsContainer","cards","showGenericLoader","processURL","initComplete","initCompleteEnd","preDrawCallback","drawCallback","drawCallbackEnd","optionsDataTables","dom","json","thisDataTable","columns","aoColumns","columnSettings","visible","bVisible","htmlElement","nTh","wrapper","prepend","controls","selectionOrder","selectionOrderType","lengthPagination","map","append","orderEvent","orderColumn","val","orderType","dropdown","column","order","draw","onChange","page","len","removeGenericLoader","remove","rawData","datatables","emptyTable","proccesing","activeGenericLoader","genericFormHandler","selectorForm","overwrite","defaultInvalidHandler","hasConfirmation","buttonConfirmation","onSetFormData","formData","onSetForm","onSuccess","onError","onInvalidEventOnToTopAnimation","onInvalidEvent","validationMessage","jElement","field","closest","nameOnLabel","parentForm","blur","removeErrorClass","dataID","messageContainer","errorMessageContainerAttr","off","hasDataID","generateUniqueID","configElementDataID","transition","toTop","animate","scrollTop","offset","top","easing","complete","onComplete","visibleInViewPort","liErrorSelector","liError","configIndividualError","liErrors","dataset","removeOrphanIndividualErrors","configErrorMessageContainer","toast","submit","action","validAction","validMethod","toUpperCase","loaderElement","processFormData","optionsPost","xhr","XMLHttpRequest","upload","addEventListener","lengthComputable","percentComplete","loaded","total","updatePercent","then","handlerRequest","processForm","formProcess","done","response","responseStructure","optional","parse","default","values","config","inputValue","resposeValues","hasReload","reload","hasRedirection","redirect","validRedirection","redirect_to","setTimeout","fail","always","res","confirmation","confirmationOptions","positive","negative","condition","thisForm","question","timeout","close","overlay","displayMode","zindex","buttons","instance","transitionOut","classPrefix","withProgress","contentLoader","boxLoader","loader","classList","add","percent","hasProgress","progress","getProgressElement","update","addProgress","querySelector","currentActive","body","active","uiPcsActivityGenericLoader","warn","m","Y","hour","getHours","g","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","G","h","H","A","getMinutes","getSeconds","pattern","replacesPattern","formatStr","prefix","moreEntropy","_formatSeed","seed","reqWidth","slice","$global","global","$locutus","php","uniqidSeed","random","retId","toFixed","addObjectToFormData","isFirstArray","property","subName","swipedetect","el","callback","swipedir","startX","startY","distX","distY","startTime","touchsurface","handleswipe","touchobj","changedTouches","dist","pageX","pageY","passive","configMirrorScrollX","mirrorScrollX","mirrorScrollXContent","mirrorTarget","checkScrollX","scrollXWidth","scrollWidth","clientWidth","width","onscroll","scrollLeft","trigger","configFomanticDropdown","selectSelector","defaultOptions","cacheOnAPI","select","dropdowns","from","originalSelectHTML","searchURL","apiSettings","URLSearch","URL","searchParams","href","uniqueID","selectSimulator","required","$selectedItem","selectValidator","onChangeOption","getText","getValue","setValue","recreate","removeItems","simulatorNode","recreated","replaceWith","optionsRecreate","getOriginalSelect","originalSelect","originalDataSet","dataName","dataValue","insertBefore","toggleRequiredSemanticDropdown","hideOnNoRequire","mainSelect","simulatorSelect","removeAttr","toggleRequiredSemanticInput","disableOnNoRequire","prevValue","fieldContainer","changeValueSemanticDropdown","simplify","numerator","denominator","max","elementTop","elementBottom","outerHeight","viewportTop","viewportBottom","height","langHTML","defaultLangHTML","en","fr","langShort","titles","created","edited","errors","pass_not_match","unexpected_error","unexpected_error_try_later","name_is_required","name_should_be_string","lastname_is_required","lastname_should_be_string","email_is_required","email_should_be_string","user_is_required","user_should_be_string","password_is_required","password_should_be_string","semantic_calendar","days","months","monthsShort","today","now","am","pm","unspecifiedRule","unspecifiedField","empty","checked","email","regExp","integer","decimal","isExactly","notExactly","contain","containExactly","doesntContain","doesntContainExactly","minLength","exactLength","maxLength","different","creditCard","minCount","exactCount","maxCount","infoEmpty","infoFiltered","infoPostFix","thousands","lengthMenu","loadingRecords","searchPlaceholder","zeroRecords","paginate","first","last","next","previous","aria","sortAscending","sortDescending","daysLetter","loginForm","CONTRASEÑA_INVÁLIDA","USUARIO_BLOQUEADO","USUARIO_INEXISTENTE","ERROR_AL_INGRESAR","Seleccione una opción","Atención","No hay departamentos registrados.","No hay ciudades registradas en el/los departamento(s) seleccionado(s).","No hay locaciones registradas en la(s) ciudad(es) seleccionada(s).","Información","La ubicación \"%r\" no se encontró en el mapa, se usará una posición aproximada.","La ubicación \"%r\" no se encontró en el mapa.","messenger","Ha ocurrido un error desconocido.","¡Listo!","Ha ocurrido un error inesperado, intente más tarde.","Si continua con problemas para ingresar, por favor utilice la ayuda.","Por favor, verifique los datos de ingreso y vuelva a intentar.","Por favor, ingrese al siguiente enlace para desbloquear su usuario.","Se ha presentado un error al momento de ingresar, por favor intente nuevamente.","userProblems","Será solucionada muy pronto, por favor verifique su correo en las próximas horas.
El correo puede estar en \"No deseado\", por favor revise la carpeta de Spam. El remitente del correo es %r.","Ingrese el código enviado a su correo, el correo puede estar en \"No deseado\", por favor revise la carpeta de Spam. El remitente del correo es %r.","El correo ingresado no está asociado a ningún usuario, por favor ingrese otra cuenta de correo o puede crear una solicitud de soporte para asociar ese correo a su cuenta.","El código ingresado está errado, por favor vuelva a ingresar el código, solicite uno nuevo o cree una solicitud de soporte para informar del error.","Ingrese con su usuario y la nueva contraseña","Las contraseñas no coinciden","avatar","Confirmación","¿Seguro de guardar el avatar?","Cargando...","¿Seguro de guardar la foto de perfil?","Sí","No","public","Ver más","formatter","searching","responsive","language","searchContainer","configCropper","aspectRatio","background","checkCrossOrigin","minCropBoxWidth","viewMode","toggleDevCSSMode","toggleDevCSSModeIsActive","that","currentTarget","classToAdd","preloadLinkTagsCSS","forEach","notAltImages","src","reverse"],"mappings":"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","file":"configurations.min.js","sourcesContent":["var UtilPieces = /** @class */ (function () {\n function UtilPieces() {\n this.nodosEliminar = [];\n this.date = /** @class */ (function () {\n function class_1() {\n }\n /**\n * @method formatDate\n *\n * Formatea una fecha.\n *\n * @param {Date} date Fecha\n * @param {string} format Formato de la fecha y = año, m = mes, d = día\n * @returns {string}\n */\n class_1.formatDate = function (date, format) {\n if (format === void 0) { format = 'y-m-d'; }\n var day = day < date.getDate() ? '0' + date.getDate().toString() : date.getDate().toString();\n var month = (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : (date.getMonth() + 1).toString();\n var year = date.getFullYear().toString();\n format = format.replace('y', year);\n format = format.replace('m', month);\n format = format.replace('d', day);\n return format;\n };\n /**\n * @method reformatStringDate\n *\n * Reformatea una fecha.\n *\n * @param {string} dateString String que representa la fecha\n * @param {string} format Formato actual del string de la fecha y = año, m = mes, d = día\n * @param {string} separator Separador actual del string de la fecha\n * @param {string} newFormat Formato deseado del string de la fecha y = año, m = mes, d = día\n * @returns {string}\n */\n class_1.reformatStringDate = function (dateString, format, separator, newFormat) {\n if (format === void 0) { format = 'y-m-d'; }\n if (separator === void 0) { separator = '-'; }\n if (newFormat === void 0) { newFormat = 'y-m-d'; }\n var dateParts = dateString.split(separator);\n var formatParts = format.split(separator);\n var year = dateParts[formatParts.indexOf('y')];\n var month = dateParts[formatParts.indexOf('m')];\n var day = dateParts[formatParts.indexOf('d')];\n newFormat = newFormat.replace('y', year);\n newFormat = newFormat.replace('m', month);\n newFormat = newFormat.replace('d', day);\n return newFormat;\n };\n return class_1;\n }());\n this.number = /** @class */ (function () {\n function class_2() {\n }\n /**\n * @method getMilisegundos\n *\n * Retorna la cantidad en milisegundos del número proporcionado\n * según la magnitud escogida.\n * s = segundos\n * m = minutos\n * h = horas\n *\n * @param {Number} numero El número que representa la cantidad deseada según la magnitud escogida\n * @param {String} magnitud 's'|'m'|'h' (Si se escoge un valor diferente por defecto asignara segundos)\n * @returns {Number} La cantidad en milisegundos\n */\n class_2.getMilisegundos = function (numero, magnitud) {\n if (numero === void 0) { numero = 1; }\n if (magnitud === void 0) { magnitud = 's'; }\n var milisegundos = numero * 1000;\n switch (magnitud) {\n case 's':\n return milisegundos;\n case 'm':\n return milisegundos * 60;\n case 'h':\n return milisegundos * 60 * 60;\n default:\n return milisegundos;\n }\n };\n /**\n * @method numberFormat\n *\n * @description Formatea un número\n *\n * @param {number} number Número para formatear\n * @param {number} decimals Cantidad de decimales\n * @param {string} decimal_separator Separador de decimales\n * @param {string} thousands_separator Separador de miles\n */\n class_2.numberFormat = function (number, decimals, decimal_separator, thousands_separator) {\n // Strip all characters but numerical ones.\n var numberString = (number + '').replace(/[^0-9+\\-Ee.]/g, '');\n var n = !isFinite(+numberString) ? 0 : +numberString, prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), sep = (typeof thousands_separator === 'undefined') ? ',' : thousands_separator, dec = (typeof decimal_separator === 'undefined') ? '.' : decimal_separator, s = [], toFixedFix = function (n, prec) {\n var k = Math.pow(10, prec);\n return '' + Math.round(n * k) / k;\n };\n // Fix for IE parseFloat(0.55).toFixed(0) = 0;\n s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');\n if (s[0].length > 3) {\n s[0] = s[0].replace(/\\B(?=(?:\\d{3})+(?!\\d))/g, sep);\n }\n if ((s[1] || '').length < prec) {\n s[1] = s[1] || '';\n s[1] += new Array(prec - s[1].length + 1).join('0');\n }\n return s.join(dec);\n };\n /**\n * @method parseNumber\n *\n * @description Convierte un string en un número\n *\n * @param {number} number String del número\n * @param {string} decimal_separator Separador de decimales\n * @param {string} thousands_separator Separador de miles\n * @param {bool} float Establece si devolverá un float o un entero\n */\n class_2.parseNumber = function (number, decimal_separator, thousands_separator, float) {\n if (decimal_separator === void 0) { decimal_separator = ','; }\n if (thousands_separator === void 0) { thousands_separator = '.'; }\n if (float === void 0) { float = true; }\n var numberString = number.toString();\n while (numberString.lastIndexOf(thousands_separator) != -1) {\n numberString = numberString.replace(thousands_separator, '');\n }\n numberString = numberString.replace(decimal_separator, '.');\n if (float === true) {\n return parseFloat(numberString);\n }\n else {\n return parseInt(numberString);\n }\n };\n return class_2;\n }());\n this.components = /** @class */ (function () {\n function class_3() {\n }\n /**\n * @method configContadores\n *\n * @description Contador animado\n * Nota: el elemento debe tener el atributo data-counter con el número al que llegará\n * el contador.\n * Ejemplo:\n *\n * 0\n *\n * @param {string} selector Selector del elemento HTML del contador\n * @param {number} step Cantidad que aumentará cada ciclo\n * @param {number} decimals Cantidad de decimales\n * @param {string} decimal_separator Separador de decimales\n * @param {string} thousands_separator Separador de miles\n * @param {number} delay Retraso de los ciclos en milisegundos\n */\n class_3.configContadores = function (selector, step, decimals, decimal_separator, thousands_separator, delay) {\n if (step === void 0) { step = 1; }\n if (decimals === void 0) { decimals = 0; }\n if (decimal_separator === void 0) { decimal_separator = ','; }\n if (thousands_separator === void 0) { thousands_separator = '.'; }\n if (delay === void 0) { delay = 1; }\n var util = new UtilPieces();\n var contadores = document.querySelectorAll(selector);\n if (contadores.length > 0) {\n for (var _i = 0, contadores_1 = contadores; _i < contadores_1.length; _i++) {\n var element = contadores_1[_i];\n var cantidad = parseFloat(element.getAttribute('data-counter'));\n var interval = setInterval(function () {\n var actual = util.number.parseNumber(parseInt(element.innerHTML));\n var nuevoValor = (actual + step).toString();\n if (actual < cantidad) {\n if (parseInt(nuevoValor) > cantidad) {\n nuevoValor = util.number.numberFormat(cantidad, decimals, decimal_separator, thousands_separator);\n }\n else {\n nuevoValor = util.number.numberFormat(parseInt(nuevoValor), decimals, decimal_separator, thousands_separator);\n }\n element.innerHTML = nuevoValor;\n }\n else {\n clearInterval(interval);\n }\n }, delay);\n }\n }\n };\n /**\n * @method slider\n *\n * @description Slider (usa jquery)\n *\n * Nota: el elemento debe tener el atributo data-id al igual que los botones de navegación\n *
\n
\n \n \n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n * Ejemplo:\n *\n * @param {HTMLElement|String|JQuery} slider\n * @param {*} delay\n * @param {*} navItemSelector\n * @param {*} elementSliderSelector\n * @param {*} activeClass\n * @returns {void}\n */\n class_3.slider = function (slider, delay, navItemSelector, elementSliderSelector, activeClass) {\n var _this = this;\n if (delay === void 0) { delay = 2500; }\n if (navItemSelector === void 0) { navItemSelector = '.nav-slider span'; }\n if (elementSliderSelector === void 0) { elementSliderSelector = '.elemento-slider'; }\n if (activeClass === void 0) { activeClass = 'active'; }\n var $;\n if (!('sliderNS' in window)) {\n window['sliderNS'] = {};\n }\n slider = $(slider);\n window['sliderNS'] = {\n nav_icons: slider.find(navItemSelector),\n elementos: slider.find(elementSliderSelector),\n last_nav: 0,\n interval: null,\n debug: false\n };\n window['sliderNS'].interval = setInterval(function () {\n if (window['sliderNS'].last_nav < window['sliderNS'].nav_icons.length) {\n window['sliderNS'].nav_icons[window['sliderNS'].last_nav].click();\n window['sliderNS'].last_nav++;\n }\n else {\n window['sliderNS'].last_nav = 0;\n }\n }, delay);\n window['sliderNS'].nav_icons.click(function (e) {\n e.stopPropagation();\n var id = $(_this).attr(\"data-id\");\n if (!$(_this).hasClass(activeClass)) {\n window['sliderNS'].nav_icons.each(function (e) {\n if ($(_this).attr('data-id') == id) {\n $(_this).addClass(activeClass);\n clearInterval(window['sliderNS'].interval);\n window['sliderNS'].last_nav = id;\n window['sliderNS'].interval = setInterval(function () {\n if (window['sliderNS'].last_nav < window['sliderNS'].nav_icons.length) {\n window['sliderNS'].nav_icons[window['sliderNS'].last_nav].click();\n window['sliderNS'].last_nav++;\n }\n else {\n window['sliderNS'].last_nav = 0;\n }\n }, delay);\n }\n else {\n $(_this).removeClass(activeClass);\n }\n });\n window['sliderNS'].elementos.each(function (e) {\n if ($(_this).attr('data-id') == id) {\n $(_this).addClass(activeClass);\n }\n else {\n $(_this).removeClass(activeClass);\n }\n });\n }\n });\n };\n return class_3;\n }());\n this.file = /** @class */ (function () {\n function class_4() {\n }\n /**\n * @method base64ToBlob\n *\n * Convierte una cadena base64 en un blob\n *\n * @param {string} dataURL Una cadena base64 o tipo dataUri que contiene la información del archivo\n * @returns {Blob}\n */\n class_4.dataURLToBlob = function (dataURL) {\n var util = new UtilPieces();\n dataURL = dataURL.toString();\n var fileData = util.string.proccessDataURL(dataURL);\n var fileString = fileData.string;\n var fileType = fileData.mime;\n var fileBytes = util.string.stringToBytes(fileString).dec;\n return new Blob([new Uint8Array(fileBytes)], { type: fileType });\n };\n /**\n * @method dataURLToFile\n *\n * @param {string} dataURL\n * @param {string} filename\n * @returns {File}\n */\n class_4.dataURLToFile = function (dataURL, filename) {\n if (filename === void 0) { filename = 'name'; }\n var util = new UtilPieces();\n var info = util.string.proccessDataURL(dataURL);\n var mime = info.mime;\n var bytes = util.string.stringToBytesUnclear(info.string).dec;\n var file = new File([new Blob([new Uint8Array(bytes)])], filename, { type: mime });\n return file;\n };\n return class_4;\n }());\n this.string = /** @class */ (function () {\n function class_5() {\n }\n /**\n * @method proccessDataURL\n *\n * Devuelve un objeto con el archivo en base64, el tipo mime y el dataURL recibido.\n *\n * {b64:dataURL, mime:...,string:file...}\n *\n * @param {String} dataURL Data url de un archivo\n * @returns {{ b64: string, mime: string, string: string }}\n */\n class_5.proccessDataURL = function (dataURL) {\n var mimeType = dataURL.replace(/data\\:(.*)\\;base64\\,.*/g, '$1');\n var fileString = window.atob(dataURL.replace(/data\\:.*base64\\,(.*)/g, '$1'));\n return {\n b64: dataURL,\n mime: mimeType,\n string: fileString\n };\n };\n /**\n * @method stringClear\n *\n * Elimina espacios y pasa todo a minúsculas.\n *\n * @param {string} str\n * @returns {string}\n */\n class_5.stringClear = function (str) {\n return (new String(str).replace(/\\s*/g, ''));\n };\n /**\n * @method stringLowerClear\n *\n * Elimina espacios y pasa todo a minúsculas.\n *\n * @param {string} str\n * @returns {string}\n */\n class_5.stringLowerClear = function (str) {\n return this.stringClear(str).toLowerCase();\n };\n /**\n * @method trim\n *\n * Elimina espacios y pasa todo a minúsculas.\n *\n * @param {string} str\n * @returns {string}\n */\n class_5.trim = function (str) {\n return (new String(str).trim());\n };\n /**\n * @method stringToBytesToLower\n *\n * Devuelve un objeto con arrays de los códigos en DEC y en HEX de cada\n * carácter de una cadena previamente transformado en minúsculas.\n *\n * @param {string} string\n * @param {boolean} verbose\n * @returns {dec: Array, hex: Array}\n */\n class_5.stringToBytesToLower = function (string, verbose) {\n if (verbose === void 0) { verbose = false; }\n string = string.toString().replace(/(\\r|\\n|\\t)*/gim, '').trim().toLowerCase();\n var lengthString = string.length;\n var bytesDec = [];\n var bytesHex = [];\n if (verbose)\n console.log('============');\n for (var i = 0; i < lengthString; i++) {\n var charCode = string.charCodeAt(i);\n bytesDec[i] = charCode;\n bytesHex[i] = charCode.toString(16);\n if (verbose)\n console.log(string[i] + '===' + charCode + '===' + bytesHex[i]);\n }\n if (verbose)\n console.log('============');\n return { dec: bytesDec, hex: bytesHex };\n };\n /**\n * @method stringToBytes\n *\n * Devuelve un objeto con arrays de los códigos en DEC y en HEX de cada\n * carácter de una cadena. Elimina \\r, \\n, \\t y espacios sobrantes a\n * la cadena de entrada.\n *\n * @param {String} string\n * @param {Boolean} trim\n * @param {Boolean} verbose\n * @returns {dec: Array, hex: Array}\n */\n class_5.stringToBytes = function (string, trim, verbose) {\n if (trim === void 0) { trim = false; }\n if (verbose === void 0) { verbose = false; }\n if (trim === true) {\n string = string.toString().replace(/(\\r|\\n|\\t)*/gim, '').trim();\n }\n var lengthString = string.length;\n var bytesDec = [];\n var bytesHex = [];\n if (verbose)\n console.log('============');\n for (var i = 0; i < lengthString; i++) {\n var charCode = string.charCodeAt(i);\n bytesDec[i] = charCode;\n bytesHex[i] = charCode.toString(16);\n if (verbose)\n console.log(string[i] + '===' + charCode + '===' + bytesHex[i]);\n }\n if (verbose)\n console.log('============');\n return { dec: bytesDec, hex: bytesHex };\n };\n /**\n * @method stringToBytesUnclear\n *\n * Devuelve un objeto con arrays de los códigos en DEC y en HEX de cada\n * carácter de una cadena. No modifica la cadena de entrada.\n *\n * @param {String} string\n * @param {Boolean} verbose\n * @returns {Object}\n */\n class_5.stringToBytesUnclear = function (string, verbose) {\n if (verbose === void 0) { verbose = false; }\n var lengthString = string.length;\n var bytesDec = [];\n var bytesHex = [];\n if (verbose)\n console.log('============');\n for (var i = 0; i < lengthString; i++) {\n var charCode = string.charCodeAt(i);\n bytesDec[i] = charCode;\n bytesHex[i] = charCode.toString(16);\n if (verbose)\n console.log(string[i] + '===' + charCode + '===' + bytesHex[i]);\n }\n if (verbose)\n console.log('============');\n return { dec: bytesDec, hex: bytesHex };\n };\n /**\n * @method arrayToString\n *\n * Toma un array y lo convierte en una cadena\n * con la extensión determinada.\n *\n * @param {Array} array Array a convertir\n * @param {number} length Tamaño de la cadena retornada\n * @returns {string}\n */\n class_5.arrayToString = function (array, length) {\n var string = '';\n var arrayLength = array.length;\n length = arrayLength >= length ? length : arrayLength;\n for (var i = 0; i < arrayLength; i++) {\n string += array[i];\n }\n string = string.substring(0, length);\n return string.substring(0, length);\n };\n return class_5;\n }());\n this.validate = /** @class */ (function () {\n function class_6() {\n }\n /**\n * @method mimeType\n *\n * Valida el tipo de un archivo\n *\n * Tipos implementados para el parámetro allowed:\n * xlsx, pdf, html, jpg, jpeg, png\n *\n * @param {string} dataURL DataURL leído por FileReader\n * @param {Array} allowed Array con los formatos permitidos\n * @param {boolean} verbose Mensajes de información\n * @returns {boolean} Devuelve true si el tipo del archivo pasado corresponde a algunos de los definidos\n * en allowed, de lo contrario devuelve false.\n */\n class_6.mimeType = function (dataURL, allowed, verbose) {\n if (allowed === void 0) { allowed = []; }\n if (verbose === void 0) { verbose = false; }\n var util = new UtilPieces();\n var signaturesList = {\n xlsx: [\n util.string.arrayToString(util.string.stringToBytes('PK..', true).hex, ('PK..').length)\n ],\n pdf: [\n util.string.arrayToString(util.string.stringToBytes('%PDF-', true).hex, ('%PDF-').length)\n ],\n html: [\n util.string.arrayToString(util.string.stringToBytes(' -1) {\n return true;\n }\n }\n }\n }\n return false;\n };\n return class_6;\n }());\n this.uri = /** @class */ (function () {\n function class_7() {\n }\n /**\n * @method getURIPart\n *\n * @description Obtiene una parte de la URI actual\n *\n * @param {number} part El segmento deseado de la URI actual (Si es 0, devolverá la última parte)\n *\n * @returns {string} El segmento deseado\n */\n class_7.getURIPart = function (part) {\n if (part === void 0) { part = 0; }\n var split_url = window.location.pathname.split('/');\n split_url = (function () {\n var tmp = [];\n for (var i = 0; i < split_url.length; i++) {\n if (split_url[i].length > 0) {\n tmp.push(split_url[i]);\n }\n }\n return tmp;\n })();\n var partes = split_url.length;\n part = part <= partes ? (part === 0 ? partes - 1 : part - 1) : partes - 1;\n return split_url[part];\n };\n return class_7;\n }());\n this.html = /** @class */ (function () {\n function class_8() {\n }\n /**\n * @method createElement\n *\n * Acortamiento de document.createElement\n * @param {string} tag\n * @param {ElementCreationOptions} options\n * @returns {HTMLElement}\n */\n class_8.createElement = function (tag, options) {\n if (options === void 0) { options = null; }\n return document.createElement(tag, options);\n };\n /**\n * @method createTagInnerHTML\n *\n * Crea un elemento y le asigna un innerHTML\n * @param {string} tag\n * @param {string} innerHTML\n * @param {ElementCreationOptions} options\n * @returns {HTMLElement}\n */\n class_8.createTagInnerHTML = function (tag, innerHTML, options) {\n if (innerHTML === void 0) { innerHTML = ''; }\n if (options === void 0) { options = null; }\n var element = this.createElement(tag, options);\n element.innerHTML = innerHTML;\n return element;\n };\n /**\n * @method create\n *\n * @param {string} tag Etiquete HTML\n * @param {Array<{attr:string,value:string}>} attributes Array con objectos {attr:'',value:''} para agregar\n * atributos\n * @param {HTMLElement|HTMLElement[]} childs Elementos hijo\n * @param {string} innerHTML innerHTML introducido antes de agregar el hijo\n * @param {ElementCreationOptions} options\n * @returns {HTMLElement}\n */\n class_8.create = function (tag, attributes, childs, innerHTML, options) {\n if (attributes === void 0) { attributes = null; }\n if (childs === void 0) { childs = null; }\n if (innerHTML === void 0) { innerHTML = ''; }\n if (options === void 0) { options = null; }\n var element = this.createTagInnerHTML(tag, innerHTML, options);\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var i = attributes_1[_i];\n if (typeof i.value == 'string') {\n element.setAttribute(i.attr, i.value.trim());\n }\n else if (Array.isArray(i.value)) {\n element.setAttribute(i.attr, i.value.join(' ').trim());\n }\n }\n if (childs !== null) {\n if (Array.isArray(childs)) {\n for (var _a = 0, childs_1 = childs; _a < childs_1.length; _a++) {\n var i = childs_1[_a];\n element.appendChild(i);\n }\n }\n else {\n element.appendChild(childs);\n }\n }\n return element;\n };\n return class_8;\n }());\n }\n /**\n * @method clearTextNodes\n *\n * @description Elimina los nodos de texto vacíos y comentarios\n *\n * @return {void}\n */\n UtilPieces.prototype.clearTextNodes = function () {\n var elementos = document.getElementsByTagName('*');\n for (var k = 0; k < elementos.length; k++) {\n for (var i = 0; i < elementos[k].childNodes.length; i++) {\n var hijo = elementos[k].childNodes[i];\n if ((hijo.nodeType == 3 && !/\\S/.test(hijo.nodeValue)) || (hijo.nodeType == 8)) {\n this.nodosEliminar[this.nodosEliminar.length] = hijo;\n }\n }\n }\n for (var d = 0; d < this.nodosEliminar.length; d++) {\n this.nodosEliminar[d].parentNode.removeChild(this.nodosEliminar[d]);\n }\n };\n return UtilPieces;\n}());\n\n//# sourceMappingURL=UtilPieces.js.map\n","/**\r\n * Datos accesibles globalmente\r\n * @namespace\r\n */\r\nvar pcsphpGlobals = {}\r\n\r\n//──── Lenguaje ──────────────────────────────────────────────────────────────────────────\r\npcsphpGlobals.lang = (function () {\r\n\tlet langHTML = document.querySelector('html').getAttribute('lang')\r\n\r\n\tlet lang = 'es'\r\n\r\n\tif (langHTML != null && langHTML.length > 0) {\r\n\t\tlang = langHTML\r\n\t}\r\n\r\n\treturn lang\r\n})()\r\npcsphpGlobals.defaultLang = (function () {\r\n\tlet defaultLangHTML = document.querySelector('html').getAttribute('dlang')\r\n\r\n\tlet lang = 'es'\r\n\r\n\tif (defaultLangHTML != null && defaultLangHTML.length > 0) {\r\n\t\tlang = defaultLangHTML\r\n\t}\r\n\r\n\treturn lang\r\n})()\r\n\r\npcsphpGlobals.messages = {}\r\n\r\npcsphpGlobals.messages.es = {\r\n\tlang: {\r\n\t\t'es': 'Español',\r\n\t\t'en': 'Inglés',\r\n\t\t'fr': 'Francés',\r\n\t},\r\n\tlangShort: {\r\n\t\t'es': 'ES',\r\n\t\t'en': 'EN',\r\n\t\t'fr': 'FR',\r\n\t},\r\n\ttitles: {\r\n\t\terror: 'Error',\r\n\t\tsuccess: 'Exito',\r\n\t\tcreated: 'Creado',\r\n\t\tedited: 'Editado',\r\n\t},\r\n\terrors: {\r\n\t\tpass_not_match: 'Error: las contraseñas deben coincidir.',\r\n\t\tunexpected_error: 'Ha ocurrido un error inesperado.',\r\n\t\tunexpected_error_try_later: 'Ha ocurrido un error inesperado, intente más tarde.',\r\n\t\tname_is_required: 'El nombre es requerido.',\r\n\t\tname_should_be_string: 'El nombre debe ser un string.',\r\n\t\tlastname_is_required: 'El apellido es requerido.',\r\n\t\tlastname_should_be_string: 'El apellido debe ser un string.',\r\n\t\temail_is_required: 'El email es requerido.',\r\n\t\temail_should_be_string: 'El email debe ser un string.',\r\n\t\tuser_is_required: 'El nombre de usuario es requerido.',\r\n\t\tuser_should_be_string: 'El nombre de usuario debe ser un string.',\r\n\t\tpassword_is_required: 'La contraseña es requerida.',\r\n\t\tpassword_should_be_string: 'La contraseña debe ser un string.',\r\n\t},\r\n\tsemantic_calendar: {\r\n\t\tdays: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],\r\n\t\tmonths: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],\r\n\t\tmonthsShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],\r\n\t\ttoday: 'Hoy',\r\n\t\tnow: 'Ahora',\r\n\t\tam: 'AM',\r\n\t\tpm: 'PM',\r\n\t},\r\n\tsemantic_form: {\r\n\t\ttext: {\r\n\t\t\tunspecifiedRule: 'Por favor, introduza un valor válido',\r\n\t\t\tunspecifiedField: 'Este campo'\r\n\t\t},\r\n\t\tprompt: {\r\n\t\t\tempty: '{name} debe tener un valor',\r\n\t\t\tchecked: '{name} debe estar marcado',\r\n\t\t\temail: '{name} debe ser un email válido',\r\n\t\t\turl: '{name} debe ser una url válida',\r\n\t\t\tregExp: '{name} no tiene el formato correcto',\r\n\t\t\tinteger: '{name} debe ser un número entero',\r\n\t\t\tdecimal: '{name} debe ser un número decimal',\r\n\t\t\tnumber: '{name} debe ser un número',\r\n\t\t\tis: '{name} debe ser \\'{ruleValue}\\'',\r\n\t\t\tisExactly: '{name} debe ser exactamente \\'{ruleValue}\\'',\r\n\t\t\tnot: '{name} No puede ser \\'{ruleValue}\\'',\r\n\t\t\tnotExactly: '{name} No puede ser exactamente \\'{ruleValue}\\'',\r\n\t\t\tcontain: '{name} No puede contener \\'{ruleValue}\\'',\r\n\t\t\tcontainExactly: '{name} No puede contener exatamente \\'{ruleValue}\\'',\r\n\t\t\tdoesntContain: '{name} debe contener \\'{ruleValue}\\'',\r\n\t\t\tdoesntContainExactly: '{name} debe contener exactamente \\'{ruleValue}\\'',\r\n\t\t\tminLength: '{name} debe contener al menos {ruleValue} caracteres',\r\n\t\t\tlength: '{name} debe contener al menos {ruleValue} caracteres',\r\n\t\t\texactLength: '{name} debe contener exatamente {ruleValue} caracteres',\r\n\t\t\tmaxLength: '{name} no puede contener más de {ruleValue} caracteres',\r\n\t\t\tmatch: '{name} debe coincidir con el campo {ruleValue}',\r\n\t\t\tdifferent: '{name} debe tener un valor diferente que el campo {ruleValue}',\r\n\t\t\tcreditCard: '{name} debe ser un número de tarjeta de crédito válido',\r\n\t\t\tminCount: '{name} Debe tener al menos {ruleValue} elecciones',\r\n\t\t\texactCount: '{name} Debe tener exatamente {ruleValue} elecciones',\r\n\t\t\tmaxCount: '{name} Debe tener {ruleValue} o menos elecciones'\r\n\t\t}\r\n\t},\r\n\tdatatables: {\r\n\t\tlang: {\r\n\t\t\t\"decimal\": \"\",\r\n\t\t\t\"emptyTable\": \"No hay información disponible\",\r\n\t\t\t\"info\": \"Viendo desde _START_ hasta _END_ de _TOTAL_ elementos\",\r\n\t\t\t\"infoEmpty\": \"Viendo desde 0 hasta 0 de 0 elementos\",\r\n\t\t\t\"infoFiltered\": \"(filtrado desde _MAX_ elementos)\",\r\n\t\t\t\"infoPostFix\": \"\",\r\n\t\t\t\"thousands\": \".\",\r\n\t\t\t\"lengthMenu\": \"Ver _MENU_ elementos\",\r\n\t\t\t\"loadingRecords\": \"Cargando...\",\r\n\t\t\t\"processing\": \"Procesando...\",\r\n\t\t\t\"search\": \"\",\r\n\t\t\t\"searchPlaceholder\": \"Buscar...\",\r\n\t\t\t\"zeroRecords\": \"No se encontraron coincidencias\",\r\n\t\t\t\"paginate\": {\r\n\t\t\t\t\"first\": \"Primero\",\r\n\t\t\t\t\"last\": \"Último\",\r\n\t\t\t\t\"next\": \"Próximo\",\r\n\t\t\t\t\"previous\": \"Anterior\"\r\n\t\t\t},\r\n\t\t\t\"aria\": {\r\n\t\t\t\t\"sortAscending\": \": activar ordenamiento de columnas ascendentemente\",\r\n\t\t\t\t\"sortDescending\": \": activar ordenamiento de columnas descendentemente\"\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tdate: {\r\n\t\tdays: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],\r\n\t\tdaysLetter: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],\r\n\t\tmonths: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],\r\n\t\tmonthsShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],\r\n\t\ttoday: 'Hoy',\r\n\t\tnow: 'Ahora',\r\n\t\tam: 'AM',\r\n\t\tpm: 'PM',\r\n\t},\r\n\tloginForm: {\r\n\t\t'CONTRASEÑA_INVÁLIDA': 'Contraseña inválida',\r\n\t\t'USUARIO_BLOQUEADO': 'Usuario bloqueado',\r\n\t\t'USUARIO_INEXISTENTE': 'El usuario %r no existe',\r\n\t\t'ERROR_AL_INGRESAR': 'Error al ingresar',\r\n\t},\r\n}\r\n\r\npcsphpGlobals.messages.en = {\r\n\tlang: {\r\n\t\t'es': 'Spanish',\r\n\t\t'en': 'English',\r\n\t\t'fr': 'French',\r\n\t},\r\n\tlangShort: {\r\n\t\t'es': 'ES',\r\n\t\t'en': 'EN',\r\n\t\t'fr': 'FR',\r\n\t},\r\n\ttitles: {\r\n\t\terror: 'Error',\r\n\t\tsuccess: 'Success',\r\n\t\tcreated: 'Created',\r\n\t\tedited: 'Edited',\r\n\t},\r\n\terrors: {\r\n\t\tpass_not_match: 'Error: passwords must match.',\r\n\t\tunexpected_error: 'An unexpected error has occurred.',\r\n\t\tunexpected_error_try_later: 'An unexpected error has occurred, try again later.',\r\n\t\tname_is_required: 'The name is required.',\r\n\t\tname_should_be_string: 'The name must be a string.',\r\n\t\tlastname_is_required: 'The last name is required.',\r\n\t\tlastname_should_be_string: 'The last name must be a string.',\r\n\t\temail_is_required: 'The email is required.',\r\n\t\temail_should_be_string: 'The email must be a string.',\r\n\t\tuser_is_required: 'The username is required.',\r\n\t\tuser_should_be_string: 'The username must be a string.',\r\n\t\tpassword_is_required: 'The password is required.',\r\n\t\tpassword_should_be_string: 'The password must be a string.',\r\n\t},\r\n\tsemantic_calendar: {\r\n\t\tdays: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\r\n\t\tmonths: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\r\n\t\tmonthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n\t\ttoday: 'Today',\r\n\t\tnow: 'Now',\r\n\t\tam: 'AM',\r\n\t\tpm: 'PM',\r\n\t},\r\n\tsemantic_form: {\r\n\t\ttext: {\r\n\t\t\tunspecifiedRule: 'Please enter a valid value',\r\n\t\t\tunspecifiedField: 'This field',\r\n\t\t},\r\n\t\tprompt: {\r\n\t\t\tempty: `{name} must have a value`,\r\n\t\t\tchecked: `{name} must be marked`,\r\n\t\t\temail: `{name} must be a valid email`,\r\n\t\t\turl: `{name} must be a valid url`,\r\n\t\t\tregExp: `{name} does not have the correct format`,\r\n\t\t\tinteger: `{name} must be an integer`,\r\n\t\t\tdecimal: `{name} must be a decimal number`,\r\n\t\t\tnumber: `{name} must be a number`,\r\n\t\t\tis: `{name} must be '{ruleValue}'`,\r\n\t\t\tisExactly: `{name} must be exactly '{ruleValue}'`,\r\n\t\t\tnot: `{name} Cannot be '{ruleValue}'`,\r\n\t\t\tnotExactly: `{name} It can't be exactly '{ruleValue}'`,\r\n\t\t\tcontain: `{name} Cannot contain '{ruleValue}'`,\r\n\t\t\tcontainExactly: `{name} Cannot contain exactly '{ruleValue}'`,\r\n\t\t\tdoesntContain: `{name} must contain '{ruleValue}'`,\r\n\t\t\tdoesntContainExactly: `{name} must contain exactly '{ruleValue}'`,\r\n\t\t\tminLength: `{name} must contain at least {ruleValue} characters`,\r\n\t\t\tlength: `{name} must contain at least {ruleValue} characters`,\r\n\t\t\texactLength: `{name} must contain exactly {ruleValue} characters`,\r\n\t\t\tmaxLength: `{name} cannot contain more than {ruleValue} characters`,\r\n\t\t\tmatch: `{name} must match the {ruleValue} field`,\r\n\t\t\tdifferent: `{name} must have a different value than the {ruleValue} field`,\r\n\t\t\tcreditCard: `{name} must be a valid credit card number`,\r\n\t\t\tminCount: `{name} You must have at least {ruleValue} choices`,\r\n\t\t\texactCount: `{name} You must have exactly {ruleValue} choices`,\r\n\t\t\tmaxCount: `{name} You must have {ruleValue} or less choose`,\r\n\t\t}\r\n\t},\r\n\tdatatables: {\r\n\t\tlang: {\r\n\t\t\t\"decimal\": \"\",\r\n\t\t\t\"emptyTable\": \"No information available\",\r\n\t\t\t\"info\": \"Viewing from _START_ to _END_ of _TOTAL_ elements\",\r\n\t\t\t\"infoEmpty\": \"Displaying 0 to 0 of 0 items\",\r\n\t\t\t\"infoFiltered\": \"(filtered from _MAX_ elements)\",\r\n\t\t\t\"infoPostFix\": \"\",\r\n\t\t\t\"thousands\": \".\",\r\n\t\t\t\"lengthMenu\": \"See _MENU_ elements\",\r\n\t\t\t\"loadingRecords\": \"Loading...\",\r\n\t\t\t\"processing\": \"Processing ...\",\r\n\t\t\t\"search\": \"\",\r\n\t\t\t\"searchPlaceholder\": \"Look for...\",\r\n\t\t\t\"zeroRecords\": \"No matches found\",\r\n\t\t\t\"paginate\": {\r\n\t\t\t\t\"first\": \"First\",\r\n\t\t\t\t\"last\": \"Latest\",\r\n\t\t\t\t\"next\": \"Next\",\r\n\t\t\t\t\"previous\": \"Previous\",\r\n\t\t\t},\r\n\t\t\t\"aria\": {\r\n\t\t\t\t\"sortAscending\": \": activate ascending column sorting\",\r\n\t\t\t\t\"sortDescending\": \": activate descending column ordering\"\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tdate: {\r\n\t\tdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n\t\tdaysLetter: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\r\n\t\tmonths: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\r\n\t\tmonthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n\t\ttoday: 'Today',\r\n\t\tnow: 'Now',\r\n\t\tam: 'AM',\r\n\t\tpm: 'PM',\r\n\t},\r\n\tlocation: {\r\n\t\t'Seleccione una opción': 'Select an option',\r\n\t\t'Atención': 'Attention',\r\n\t\t'No hay departamentos registrados.': 'There are no registered departments.',\r\n\t\t'No hay ciudades registradas en el/los departamento(s) seleccionado(s).': 'There are no cities registered in the selected state/states.',\r\n\t\t'No hay locaciones registradas en la(s) ciudad(es) seleccionada(s).': 'There are no localities registered in the selected city(ies).',\r\n\t\t'Información': 'Information',\r\n\t\t'La ubicación \"%r\" no se encontró en el mapa, se usará una posición aproximada.': 'The location \"%r\" was not found on the map, an approximate position will be used.',\r\n\t\t'La ubicación \"%r\" no se encontró en el mapa.': 'The location \"%r\" was not found on the map.',\r\n\t},\r\n\tmessenger: {\r\n\t\t'Error': 'Error',\r\n\t\t'Ha ocurrido un error desconocido.': 'An unknown error has occurred.',\r\n\t\t'¡Listo!': 'Ready!',\r\n\t},\r\n\tloginForm: {\r\n\t\t'Error': 'Error',\r\n\t\t'Ha ocurrido un error inesperado, intente más tarde.': 'An unexpected error has occurred, try again later.',\r\n\t\t'Si continua con problemas para ingresar, por favor utilice la ayuda.': 'If you continue to have problems entering, please use the help.',\r\n\t\t'Por favor, verifique los datos de ingreso y vuelva a intentar.': 'Please verify the login details and try again.',\r\n\t\t'Por favor, ingrese al siguiente enlace para desbloquear su usuario.': 'Please enter the following link to unlock your user.',\r\n\t\t'Se ha presentado un error al momento de ingresar, por favor intente nuevamente.': 'An error has occurred at the time of entry, please try again.',\r\n\t\t'CONTRASEÑA_INVÁLIDA': 'Invalid password',\r\n\t\t'USUARIO_BLOQUEADO': 'User blocked',\r\n\t\t'USUARIO_INEXISTENTE': 'The user %r does not exist',\r\n\t\t'ERROR_AL_INGRESAR': 'Login failed',\r\n\t},\r\n\tuserProblems: {\r\n\t\t'Será solucionada muy pronto, por favor verifique su correo en las próximas horas.
El correo puede estar en \"No deseado\", por favor revise la carpeta de Spam. El remitente del correo es %r.': 'It will be solved very soon, please check your mail in the next few hours.
The email may be in \"Spam\", please check the spam folder. The sender of the email is %r.',\r\n\t\t'Ingrese el código enviado a su correo, el correo puede estar en \"No deseado\", por favor revise la carpeta de Spam. El remitente del correo es %r.': 'Enter the code sent to your email, the email may be in \"Spam\", please check the spam folder. The sender of the email is %r.',\r\n\t\t'El correo ingresado no está asociado a ningún usuario, por favor ingrese otra cuenta de correo o puede crear una solicitud de soporte para asociar ese correo a su cuenta.': 'The email entered is not associated with any user, please enter another email account or you can create a support request to associate that email with your account.',\r\n\t\t'El código ingresado está errado, por favor vuelva a ingresar el código, solicite uno nuevo o cree una solicitud de soporte para informar del error.': 'The code entered is wrong, please re-enter the code, request a new one or create a support request to report the error.',\r\n\t\t'Ingrese con su usuario y la nueva contraseña': 'Login with your username and the new password',\r\n\t\t'Las contraseñas no coinciden': 'Passwords do not match',\r\n\t},\r\n\tavatar: {\r\n\t\t'Confirmación': 'Confirmation',\r\n\t\t'¿Seguro de guardar el avatar?': 'Are you sure to save the avatar?',\r\n\t\t'Cargando...': 'Loading...',\r\n\t\t'¿Seguro de guardar la foto de perfil?': 'Are you sure to save the profile picture?',\r\n\t\t'Sí': 'Yes',\r\n\t\t'No': 'No',\r\n\t},\r\n\tpublic: {\r\n\t\t'Ver más': 'Read more',\r\n\t},\r\n}\r\n\r\nif (typeof pcsphpGlobals.messages[pcsphpGlobals.lang] == 'undefined') {\r\n\tpcsphpGlobals.messages[pcsphpGlobals.lang] = pcsphpGlobals.messages[pcsphpGlobals.defaultLang]\r\n}\r\n\r\n//────────────────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Configuración de los calendarios\r\n * \r\n * @property configCalendar\r\n * @type {Object}\r\n */\r\npcsphpGlobals.configCalendar = {\r\n\ttype: 'date',\r\n\tformatter: {\r\n\t\tdate: function (date, settings) {\r\n\t\t\tif (!(date instanceof Date)) return ''\r\n\t\t\treturn formatDate(date, 'd-m-Y')\r\n\t\t}\r\n\t},\r\n\ttext: {\r\n\t\tdays: _i18n('semantic_calendar', 'days'),\r\n\t\tmonths: _i18n('semantic_calendar', 'months'),\r\n\t\tmonthsShort: _i18n('semantic_calendar', 'monthsShort'),\r\n\t\ttoday: _i18n('semantic_calendar', 'today'),\r\n\t\tnow: _i18n('semantic_calendar', 'now'),\r\n\t\tam: _i18n('semantic_calendar', 'am'),\r\n\t\tpm: _i18n('semantic_calendar', 'pm')\r\n\t}\r\n}\r\n\r\n/**\r\n * Configuración de las tablas DataTables\r\n * \r\n * @property configCalendar\r\n * @type {Object}\r\n */\r\npcsphpGlobals.configDataTables = {\r\n\t\"searching\": true,\r\n\t\"pageLength\": 10,\r\n\t\"responsive\": true,\r\n\t\"language\": _i18n('datatables', 'lang'),\r\n\t\"order\": [],\r\n\t\"initComplete\": function (settings, json) {\r\n\t\tlet searchContainer = $('.dataTables_filter').parent()\r\n\t\tsearchContainer.addClass('ui form')\r\n\t},\r\n}\r\n\r\n/**\r\n * Configuración de Cropper\r\n * \r\n * @property configCropper\r\n * @type {Object}\r\n */\r\npcsphpGlobals.configCropper = {\r\n\taspectRatio: 4 / 3,\r\n\tbackground: true,\r\n\tcheckCrossOrigin: false,\r\n\tresponsive: true,\r\n\tminCropBoxWidth: 1000,\r\n\tviewMode: 3\r\n}\r\n\r\n\r\nif (typeof $ !== 'undefined') {\r\n\twindow.addEventListener('load', function (e) {\r\n\r\n\t\tconfigCalendars()\r\n\t\tconfigMessagesValidationsSemanticForm()\r\n\t\tconfigDataTables()\r\n\t\tconfigColorPickers()\r\n\t\tpcsAdminSideBar('.ui-pcs.sidebar')\r\n\t\tgenericFormHandler()\r\n\t\tconfigRichEditor()\r\n\r\n\t\tlet toggleDevCSSMode = $('[toggle-dev-css-mode]')\r\n\t\tlet toggleDevCSSModeIsActive = typeof toggleDevCSSMode.attr('active') == 'string'\r\n\r\n\t\ttoggleDevCSSMode.click(function (e) {\r\n\r\n\t\t\tlet that = $(e.currentTarget)\r\n\t\t\tlet selector = that.attr('toggle-dev-css-mode')\r\n\r\n\t\t\tif (typeof selector == 'string' && selector.trim().length > 0) {\r\n\r\n\t\t\t\tlet classToAdd = 'dev-css-mode'\r\n\t\t\t\tlet element = $(selector)\r\n\r\n\t\t\t\tif (element.hasClass(classToAdd)) {\r\n\t\t\t\t\telement.removeClass(classToAdd)\r\n\t\t\t\t\tthat.find(`[type=\"checkbox\"]`).attr('checked', false)\r\n\t\t\t\t} else {\r\n\t\t\t\t\telement.addClass(classToAdd)\r\n\t\t\t\t\tthat.find(`[type=\"checkbox\"]`).attr('checked', true)\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t})\r\n\r\n\t\tif (toggleDevCSSModeIsActive) {\r\n\t\t\ttoggleDevCSSMode.click()\r\n\t\t}\r\n\r\n\t\t//Cargar CSS diferidos\r\n\t\tlet preloadLinkTagsCSS = document.querySelectorAll(`link[is-preload-custom=\"yes\"]`)\r\n\t\tpreloadLinkTagsCSS.forEach(function (element) {\r\n\t\t\telement.setAttribute('rel', 'stylesheet')\r\n\t\t})\r\n\r\n\t\t//Poner etiqueta alt a imágenes que no la tengan\r\n\t\tlet notAltImages = document.querySelectorAll(`img:not([alt])`)\r\n\t\tnotAltImages.forEach(function (element) {\r\n\t\t\telement.setAttribute('alt', element.src.indexOf('/') !== -1 ? element.src.split('/').reverse()[0] : element.src)\r\n\t\t})\r\n\r\n\t})\r\n\r\n}\r\n\r\n/**\r\n * configCalendars\r\n * @returns {void}\r\n */\r\nfunction configCalendars() {\r\n\r\n\ttry {\r\n\t\tconfigSinglesCalendar('calendar-js')\r\n\t\tconfigGroupCalendar('calendar-group-js')\r\n\t} catch (error) {\r\n\t\tif ($('').calendar !== undefined) {\r\n\t\t\tconsole.error(error)\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * @param {Object} options\r\n * @returns {void}\r\n */\r\nfunction configSinglesCalendar(selectorAttr, options = {}) {\r\n\r\n\tselectorAttr = typeof selectorAttr == 'string' && selectorAttr.length > 0 ? selectorAttr : null\r\n\tlet calendars = $(`[${selectorAttr}]`).toArray()\r\n\r\n\tfor (let calendar of calendars) {\r\n\t\tcalendar = $(calendar)\r\n\t\tlet calendarType = calendar.attr('calendar-type')\r\n\t\tcalendarType = typeof calendarType == 'string' && calendarType.trim().length > 0 ? calendarType.trim() : 'date'\r\n\t\tcalendarType = [\r\n\t\t\t'date',\r\n\t\t\t'datetime',\r\n\t\t\t'month',\r\n\t\t].indexOf(calendarType) !== -1 ? calendarType : 'datetime'\r\n\t\tlet calendarOptions = Object.assign({}, pcsphpGlobals.configCalendar)\r\n\t\tcalendarOptions.type = calendarType\r\n\r\n\t\tfor (const customOption in options) {\r\n\t\t\tcalendarOptions[customOption] = options[customOption]\r\n\t\t}\r\n\t\t$(calendar).calendar(calendarOptions)\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * @param {Object} options\r\n * @returns {Object[]}\r\n */\r\nfunction configGroupCalendar(selectorAttr, selectorAttrName, options = {}) {\r\n\r\n\tselectorAttr = typeof selectorAttr == 'string' && selectorAttr.length > 0 ? selectorAttr : null\r\n\tselectorAttrName = typeof selectorAttrName == 'string' && selectorAttrName.length > 0 ? selectorAttrName : selectorAttr\r\n\tlet groupCalendars = $(`[${selectorAttr}]`).toArray()\r\n\r\n\tconst result = []\r\n\tlet groups = []\r\n\r\n\tfor (let groupCalendar of groupCalendars) {\r\n\t\tlet groupName = $(groupCalendar).attr(selectorAttrName)\r\n\t\tif (groups.indexOf(groupName) == -1 && typeof groupName == 'string' && groupName.trim().length > 0) {\r\n\t\t\tgroups.push(groupName)\r\n\t\t}\r\n\t}\r\n\r\n\tfor (let group of groups) {\r\n\r\n\t\tlet start = $($(`[${selectorAttrName}='${group}'][start]`)[0])\r\n\t\tlet end = $($(`[${selectorAttrName}='${group}'][end]`)[0])\r\n\r\n\t\tconst originalStartHTML = start.get(0).outerHTML\r\n\t\tconst originalEndHTML = end.get(0).outerHTML\r\n\r\n\t\tlet minDate = start.attr('min')\r\n\t\tminDate = typeof minDate == 'string' && minDate.trim().length > 0 ? minDate.trim() : null\r\n\t\ttry {\r\n\t\t\tminDate = minDate !== null ? new Date(minDate) : null\r\n\t\t\tif (!(minDate instanceof Date && !isNaN(minDate))) {\r\n\t\t\t\tminDate = null\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\tminDate = null\r\n\t\t}\r\n\r\n\t\tlet maxDate = start.attr('max')\r\n\t\tmaxDate = typeof maxDate == 'string' && maxDate.trim().length > 0 ? maxDate.trim() : null\r\n\t\ttry {\r\n\t\t\tmaxDate = maxDate !== null ? new Date(maxDate) : null\r\n\t\t\tif (!(maxDate instanceof Date && !isNaN(maxDate))) {\r\n\t\t\t\tmaxDate = null\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\tmaxDate = null\r\n\t\t}\r\n\r\n\t\tlet startType = start.attr('calendar-type')\r\n\t\tstartType = typeof startType == 'string' && startType.trim().length > 0 ? startType.trim() : 'datetime'\r\n\r\n\t\tlet endType = end.attr('calendar-type')\r\n\t\tendType = typeof endType == 'string' && endType.trim().length > 0 ? endType.trim() : 'datetime'\r\n\r\n\t\tlet baseConfig = Object.assign({}, pcsphpGlobals.configCalendar)\r\n\r\n\t\tfor (const customOption in options) {\r\n\t\t\tbaseConfig[customOption] = options[customOption]\r\n\t\t}\r\n\r\n\t\tlet optStart = Object.assign({}, baseConfig)\r\n\t\tlet optEnd = Object.assign({}, baseConfig)\r\n\r\n\t\toptStart.type = startType\r\n\t\toptStart.minDate = minDate\r\n\t\toptStart.maxDate = maxDate\r\n\t\toptEnd.type = endType\r\n\t\toptEnd.maxDate = maxDate\r\n\r\n\t\toptStart.endCalendar = end\r\n\t\toptEnd.startCalendar = start\r\n\r\n\r\n\t\tresult[group] = {\r\n\t\t\toriginalStartHTML: originalStartHTML,\r\n\t\t\toriginalEndHTML: originalEndHTML,\r\n\t\t\tstart: start.calendar(optStart),\r\n\t\t\tend: end.calendar(optEnd),\r\n\t\t}\r\n\t\tresult[group].restart = function () {\r\n\t\t\tresult[group].start.calendar('clear')\r\n\t\t\tresult[group].end.calendar('clear')\r\n\t\t}\r\n\t}\r\n\r\n\treturn result\r\n\r\n}\r\n\r\n/**\r\n * configMessagesValidationsSemanticForm\r\n * @returns {void}\r\n */\r\nfunction configMessagesValidationsSemanticForm() {\r\n\tif (\r\n\t\t$ !== undefined &&\r\n\t\t$.fn !== undefined &&\r\n\t\t$.fn.form !== undefined &&\r\n\t\t$.fn.form.settings !== undefined &&\r\n\t\t$.fn.form.settings.prompt !== undefined &&\r\n\t\t$.fn.form.settings.text !== undefined\r\n\t) {\r\n\t\t$.fn.form.settings.prompt = pcsphpGlobals.messages.es.semantic_form.prompt\r\n\t\t$.fn.form.settings.text = pcsphpGlobals.messages.es.semantic_form.text\r\n\t}\r\n}\r\n\r\n/**\r\n * configDataTables\r\n * @returns {void}\r\n */\r\nfunction configDataTables() {\r\n\tlet tablas = $('[datatable-js]')\r\n\r\n\ttry {\r\n\t\ttablas.DataTable(pcsphpGlobals.configDataTables)\r\n\t} catch (error) {\r\n\t\tif (tablas.DataTable !== undefined) {\r\n\t\t\tconsole.error(error)\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * configRichEditor\r\n * @returns {void}\r\n */\r\nfunction configRichEditor() {\r\n\r\n\ttry {\r\n\t\tif (typeof RichEditorAdapterComponent == 'function') {\r\n\r\n\t\t\tlet elementRichEditorSelector = '[rich-editor-js]'\r\n\t\t\tlet elementRichEditor = $(elementRichEditorSelector)\r\n\r\n\t\t\tif (elementRichEditor.length > 0) {\r\n\r\n\t\t\t\tnew RichEditorAdapterComponent({\r\n\t\t\t\t\tcontainerSelector: elementRichEditorSelector,\r\n\t\t\t\t\ttextareaTargetSelector: elementRichEditor.attr('editor-target'),\r\n\t\t\t\t})\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t} catch (error) {\r\n\t\tconsole.log(error)\r\n\t\tif (error.name == 'ReferenceError') {\r\n\t\t\tconsole.log(\"RichEditorAdapterComponent no está definido.\")\r\n\t\t} else {\r\n\t\t\tconsole.log(error)\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * configColorPickers\r\n * @returns {void}\r\n */\r\nfunction configColorPickers() {\r\n\r\n\tlet selector = 'input[color-picker-js]'\r\n\tlet colorPickers = $(selector)\r\n\r\n\ttry {\r\n\r\n\t\tcolorPickers.spectrum({\r\n\t\t\tcolor: null,\r\n\t\t\tpreferredFormat: 'hex',\r\n\t\t\tshowInput: true,\r\n\t\t\tshowInitial: true,\r\n\t\t\tshowAlpha: false,\r\n\t\t\tclickoutFiresChange: false,\r\n\t\t\tallowEmpty: true,\r\n\t\t\tflat: false,\r\n\t\t\tdisabled: false,\r\n\t\t\tshowButtons: true,\r\n\t\t\tchooseText: 'Aceptar',\r\n\t\t\tcancelText: 'Cancelar',\r\n\t\t\tshowPalette: false,\r\n\t\t\tshowSelectionPalette: false,\r\n\t\t\ttogglePaletteOnly: true,\r\n\t\t\ttogglePaletteMoreText: '+',\r\n\t\t\ttogglePaletteLessText: '−',\r\n\t\t\tpalette: [\r\n\t\t\t\t\"red\",\r\n\t\t\t\t\"green\",\r\n\t\t\t\t\"blue\",\r\n\t\t\t\t\"purple\",\r\n\t\t\t\t\"yellow\",\r\n\t\t\t\t\"brown\",\r\n\t\t\t\t\"white\",\r\n\t\t\t\t\"gray\",\r\n\t\t\t\t\"black\",\r\n\t\t\t\t\"pink\",\r\n\t\t\t\t\"coral\",\r\n\t\t\t],\r\n\t\t})\r\n\r\n\t} catch (error) {\r\n\t\tif (colorPickers.spectrum !== undefined) {\r\n\t\t\tconsole.error(error)\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * pcsAdminSideBar\r\n * \r\n * Configura la barra lateral de PiecesPHP\r\n * \r\n * @param {HTMLElement|JQuery|string} selector Selector o elemento de la barra\r\n * @returns {void}\r\n */\r\nfunction pcsAdminSideBar(selector) {\r\n\r\n\tlet menu = $(selector)\r\n\r\n\tif (menu.length > 0) {\r\n\r\n\t\tlet groups = menu.find('.group')\r\n\r\n\t\tif (groups.length > 0) {\r\n\r\n\t\t\tlet titlesGroups = groups.find('.title-group').not('[href]')\r\n\r\n\t\t\tif (titlesGroups.length > 0) {\r\n\r\n\t\t\t\ttitlesGroups.click(function (e) {\r\n\r\n\t\t\t\t\te.preventDefault()\r\n\r\n\t\t\t\t\tlet ancester = $(this).parent()\r\n\t\t\t\t\tlet items = ancester.find('> .items')\r\n\r\n\t\t\t\t\tif (items.length > 0) {\r\n\t\t\t\t\t\tif (ancester.hasClass('active')) {\r\n\t\t\t\t\t\t\tancester.removeClass('active')\r\n\t\t\t\t\t\t\titems.hide(500)\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tancester.addClass('active')\r\n\t\t\t\t\t\t\titems.show(500)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet ancesterOthers = titlesGroups.parent().not(ancester).not($(this).parents('.group'))\r\n\t\t\t\t\tlet itemsOthers = ancesterOthers.find('.items')\r\n\t\t\t\t\tancesterOthers.removeClass('active')\r\n\t\t\t\t\titemsOthers.hide(500)\r\n\t\t\t\t})\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tlet toggle = $('.ui-pcs.sidebar-toggle')\r\n\r\n\t\tif (toggle.length > 0) {\r\n\r\n\t\t\tlet bgColor = menu.css('--bg-color')\r\n\r\n\t\t\ttoggle.on('click', function (e) {\r\n\r\n\t\t\t\tif (menu.is(':visible')) {\r\n\r\n\t\t\t\t\tmenu.fadeOut(500, function () {\r\n\t\t\t\t\t\tmenu.attr('style', `--bg-color:${bgColor};`)\r\n\t\t\t\t\t\t$(menu).removeClass('overlay')\r\n\t\t\t\t\t})\r\n\r\n\t\t\t\t\t$(this).removeClass('active')\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t$(menu).addClass('overlay')\r\n\t\t\t\t\t$(this).addClass('active')\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Internacionalización de mensajes\r\n * \r\n * @param {string} type Tipo de mensaje\r\n * @param {*} message Mensaje\r\n */\r\nfunction _i18n(type, message) {\r\n\r\n\tlet messages = pcsphpGlobals.messages\r\n\tlet langs = [\r\n\t\tpcsphpGlobals.lang,\r\n\t\tpcsphpGlobals.defaultLang,\r\n\t]\r\n\tlet lang = ''\r\n\r\n\tlet exists = false\r\n\r\n\tfor (let langToCheck of langs) {\r\n\r\n\t\tlang = langToCheck\r\n\t\tlet existsLang = messages[lang] !== undefined\r\n\r\n\t\tif (existsLang) {\r\n\r\n\t\t\tlet existsType = messages[lang][type] !== undefined\r\n\r\n\t\t\tif (existsType) {\r\n\t\t\t\tlet existsMessage = messages[lang][type][message] !== undefined\r\n\r\n\t\t\t\tif (existsMessage) {\r\n\t\t\t\t\texists = true\r\n\t\t\t\t\tbreak\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tif (exists) {\r\n\t\treturn messages[lang][type][message]\r\n\t} else {\r\n\t\treturn message\r\n\t}\r\n}\r\n","/**\r\n * @method successMessage\r\n * @description Mensaje modal con tipo success (iziToast|alert)\r\n * @param {String} title Título del mensaje\r\n * @param {String} message Mensaje\r\n * @param {Function} onClose Callback llamado al cerrar\r\n */\r\nfunction successMessage(title, message, onClose = null) {\r\n\ttitle = title !== undefined ? title : ''\r\n\tmessage = message !== undefined ? message : ''\r\n\r\n\tif (typeof iziToast !== 'undefined') {\r\n\t\tiziToast.success({\r\n\t\t\ttitle: title,\r\n\t\t\tmessage: message,\r\n\t\t\tposition: 'topCenter',\r\n\t\t\tonClosed: () => {\r\n\t\t\t\tif (typeof onClose == 'function') {\r\n\t\t\t\t\tonClose()\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t})\r\n\t} else {\r\n\t\twindow.alert(`${title}:\\r\\n${message}`)\r\n\t\tif (typeof onClose == 'function') {\r\n\t\t\tonClose()\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * @method warningMessage\r\n * @description Mensaje modal con tipo warning (iziToast|alert)\r\n * @param {String} title Título del mensaje\r\n * @param {String} message Mensaje\r\n * @param {Function} onClose Callback llamado al cerrar\r\n */\r\nfunction warningMessage(title, message, onClose = null) {\r\n\ttitle = title !== undefined ? title : ''\r\n\tmessage = message !== undefined ? message : ''\r\n\r\n\tif (typeof iziToast !== 'undefined') {\r\n\t\tiziToast.warning({\r\n\t\t\ttitle: title,\r\n\t\t\tmessage: message,\r\n\t\t\tposition: 'topCenter',\r\n\t\t\tonClosed: () => {\r\n\t\t\t\tif (typeof onClose == 'function') {\r\n\t\t\t\t\tonClose()\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t})\r\n\t} else {\r\n\t\twindow.alert(`${title}:\\r\\n${message}`)\r\n\t\tif (typeof onClose == 'function') {\r\n\t\t\tonClose()\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * @method infoMessage\r\n * @description Mensaje modal con tipo info (iziToast|alert)\r\n * @param {String} title Título del mensaje\r\n * @param {String} message Mensaje\r\n * @param {Function} onClose Callback llamado al cerrar\r\n */\r\nfunction infoMessage(title, message, onClose = null) {\r\n\ttitle = title !== undefined ? title : ''\r\n\tmessage = message !== undefined ? message : ''\r\n\r\n\tif (typeof iziToast !== 'undefined') {\r\n\t\tiziToast.info({\r\n\t\t\ttitle: title,\r\n\t\t\tmessage: message,\r\n\t\t\tposition: 'topCenter',\r\n\t\t\tonClosed: () => {\r\n\t\t\t\tif (typeof onClose == 'function') {\r\n\t\t\t\t\tonClose()\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t})\r\n\t} else {\r\n\t\twindow.alert(`${title}:\\r\\n${message}`)\r\n\t\tif (typeof onClose == 'function') {\r\n\t\t\tonClose()\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * @method errorMessage\r\n * @description Mensaje modal con tipo error (iziToast|alert)\r\n * @param {String} title Título del mensaje\r\n * @param {String} message Mensaje\r\n * @param {Function} onClose Callback llamado al cerrar\r\n */\r\nfunction errorMessage(title, message, onClose = null) {\r\n\ttitle = title !== undefined ? title : ''\r\n\tmessage = message !== undefined ? message : ''\r\n\r\n\tif (typeof iziToast !== 'undefined') {\r\n\t\tiziToast.error({\r\n\t\t\ttitle: title,\r\n\t\t\tmessage: message,\r\n\t\t\tposition: 'topCenter',\r\n\t\t\tonClosed: () => {\r\n\t\t\t\tif (typeof onClose == 'function') {\r\n\t\t\t\t\tonClose()\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t})\r\n\t} else {\r\n\t\twindow.alert(`${title}:\\r\\n${message}`)\r\n\t\tif (typeof onClose == 'function') {\r\n\t\t\tonClose()\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * @method setCountdown\r\n * @description Crea una cuenta regresiva y lanza un evento\r\n * 'util-countdown' según el tiempo establecido\r\n * @param {String} dateLimit Fecha límite con los formatos:\r\n * AAAA-MM-DD HH:MM:SS == 2000-01-01 00:00:00\r\n * AAAA-MM-DD HH:MM == 2000-01-01 00:00\r\n * AAAA-MM-DD == 2000-01-01\r\n * @param {Number} time Tiempo de refresco en milisegundos\r\n * @return {void}\r\n */\r\nfunction setCountdown(dateLimit, time = 1000) {\r\n\r\n\tvar fechaLimite = new Date(dateLimit)//Fecha límite\r\n\r\n\tfunction lanzar(fechaLimite, interval) {\r\n\r\n\t\tvar event = new Event('util-countdown')\r\n\r\n\t\t// Fecha actual\r\n\t\tvar ahora = new Date()\r\n\r\n\t\t// Diferencia entre la fecha límite y la actual\r\n\t\tvar tiempoFaltante = fechaLimite.getTime() - ahora.getTime()\r\n\r\n\t\t// Cálculo de dias, horas, minutos y segundos faltantes\r\n\t\tvar dias = Math.floor(tiempoFaltante / (1000 * 60 * 60 * 24))\r\n\t\tvar horas = Math.floor((tiempoFaltante % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))\r\n\t\tvar minutos = Math.floor((tiempoFaltante % (1000 * 60 * 60)) / (1000 * 60))\r\n\t\tvar segundos = Math.floor((tiempoFaltante % (1000 * 60)) / 1000)\r\n\r\n\t\tvar finalizado = tiempoFaltante <= 0 || (dias + horas + minutos + segundos) == 0\r\n\r\n\t\t// Datos del evento \r\n\t\tevent.tiempoFaltante = {\r\n\t\t\tdias: dias,\r\n\t\t\thoras: horas,\r\n\t\t\tminutos: minutos,\r\n\t\t\tsegundos: segundos,\r\n\t\t\tstring: dias + \"d \" + horas + \"h \" + minutos + \"m \" + segundos + \"s\",\r\n\t\t\tfinalizado: finalizado\r\n\t\t}\r\n\r\n\t\t//Lanzar evento\r\n\t\tdispatchEvent(event)\r\n\r\n\t\t// Terminar\r\n\t\tif (finalizado) {\r\n\t\t\tclearInterval(interval)\r\n\t\t}\r\n\t}\r\n\r\n\t//Intervalo de un segundo\r\n\tvar interval = setInterval(function () {\r\n\r\n\t\tlanzar(fechaLimite, interval)\r\n\r\n\t}, time)\r\n\r\n\tlanzar(fechaLimite, interval)\r\n\r\n}\r\n\r\n/**\r\n * postRequest\r\n * \r\n * Realiza una petición AJAX POST (JQuery.ajax) y devuelve el objeto jqXHR\r\n * que es un objeto Deferred, por lo que tiene los métodos:\r\n * done(data, textStatus, jqXHR),\r\n * fail(jqXHR, textStatus, errorThrown) y\r\n * always(data|jqXHR, textStatus, jqXHR|errorThrown)\r\n * \r\n * @param {string} url URL que se consultará\r\n * @param {FormData|Object} [data] Información enviada\r\n * @param {Object} [headers] Cabeceras\r\n * @param {Object} [options] Opciones de $.ajax\r\n * @returns {jqXHR}\r\n */\r\nfunction postRequest(url, data, headers = {}, options = {}) {\r\n\r\n\toptions.url = url\r\n\toptions.method = 'POST'\r\n\r\n\tif (data instanceof FormData) {\r\n\r\n\t\toptions.processData = false\r\n\t\toptions.enctype = \"multipart/form-data\"\r\n\t\toptions.contentType = false\r\n\t\toptions.cache = false\r\n\t\toptions.data = data\r\n\r\n\t} else if (typeof data == 'object') {\r\n\r\n\t\toptions.data = data\r\n\r\n\t}\r\n\r\n\tlet parsedHeaders = parseHeaders(headers)\r\n\r\n\tif (parsedHeaders.size > 0) {\r\n\r\n\t\toptions.beforeSend = function (request) {\r\n\r\n\t\t\tfor (let key of parsedHeaders.keys()) {\r\n\t\t\t\tlet value = parsedHeaders.get(key)\r\n\t\t\t\trequest.setRequestHeader(key, value)\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction parseHeaders(headers = {}) {\r\n\r\n\t\tlet mapHeaders = new Map()\r\n\r\n\t\tif (typeof headers == 'object') {\r\n\r\n\t\t\tfor (let name in headers) {\r\n\r\n\t\t\t\tlet value = headers[name]\r\n\t\t\t\tlet valueString = ''\r\n\r\n\t\t\t\tif (Array.isArray(value)) {\r\n\r\n\t\t\t\t\tlet length = value.length\r\n\t\t\t\t\tlet lastIndexValue = 0\r\n\r\n\t\t\t\t\tif (length == 1) {\r\n\t\t\t\t\t\tlastIndexValue = 0\r\n\t\t\t\t\t} else if (length > 1) {\r\n\t\t\t\t\t\tlastIndexValue = length - 1\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (let i = 0; i < length; i++) {\r\n\t\t\t\t\t\tif (i == lastIndexValue) {\r\n\t\t\t\t\t\t\tvalueString += value[i]\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvalueString += value[i] + \"\\r\\n\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if (typeof value == 'string') {\r\n\t\t\t\t\tvalueString = value\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmapHeaders.set(name, valueString)\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tmapHeaders.set('X-Requested-With', 'XMLHttpRequest')\r\n\r\n\t\treturn mapHeaders\r\n\r\n\t}\r\n\r\n\treturn this.$.ajax(options)\r\n\r\n}\r\n\r\n/**\r\n * getRequest\r\n * \r\n * Realiza una petición AJAX GET (JQuery.ajax) y devuelve el objeto jqXHR\r\n * que es un objeto Deferred, por lo que tiene los métodos:\r\n * done(data, textStatus, jqXHR),\r\n * fail(jqXHR, textStatus, errorThrown) y\r\n * always(data|jqXHR, textStatus, jqXHR|errorThrown)\r\n * \r\n * @param {String} url URL que se consultará\r\n * @param {String|HTMLElement|JQuery} [data] Formulario\r\n * @param {Object} [headers] Cabeceras\r\n * @param {Object} [options] Opciones de $.ajax\r\n * @returns {jqXHR}\r\n */\r\nfunction getRequest(url, data, headers = {}, options = {}) {\r\n\r\n\toptions.url = url\r\n\toptions.method = 'GET'\r\n\toptions.enctype = 'application/x-www-form-urlencoded'\r\n\r\n\tif (data instanceof HTMLFormElement) {\r\n\r\n\t\toptions.data = $(data).serialize()\r\n\r\n\t} else if (data instanceof $) {\r\n\r\n\t\toptions.data = data.serialize()\r\n\r\n\t} else if (typeof data == 'string') {\r\n\r\n\t\toptions.data = data\r\n\r\n\t}\r\n\r\n\tlet parsedHeaders = parseHeaders(headers)\r\n\r\n\tif (parsedHeaders.size > 0) {\r\n\r\n\t\toptions.beforeSend = function (request) {\r\n\r\n\t\t\tfor (let key of parsedHeaders.keys()) {\r\n\t\t\t\tlet value = parsedHeaders.get(key)\r\n\t\t\t\trequest.setRequestHeader(key, value)\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction parseHeaders(headers = {}) {\r\n\r\n\t\tlet mapHeaders = new Map()\r\n\r\n\t\tif (typeof headers == 'object') {\r\n\r\n\t\t\tfor (let name in headers) {\r\n\r\n\t\t\t\tlet value = headers[name]\r\n\t\t\t\tlet valueString = ''\r\n\r\n\t\t\t\tif (Array.isArray(value)) {\r\n\r\n\t\t\t\t\tlet length = value.length\r\n\t\t\t\t\tlet lastIndexValue = 0\r\n\r\n\t\t\t\t\tif (length == 1) {\r\n\t\t\t\t\t\tlastIndexValue = 0\r\n\t\t\t\t\t} else if (length > 1) {\r\n\t\t\t\t\t\tlastIndexValue = length - 1\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (let i = 0; i < length; i++) {\r\n\t\t\t\t\t\tif (i == lastIndexValue) {\r\n\t\t\t\t\t\t\tvalueString += value[i]\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvalueString += value[i] + \"\\r\\n\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if (typeof value == 'string') {\r\n\t\t\t\t\tvalueString = value\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmapHeaders.set(name, valueString)\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tmapHeaders.set('X-Requested-With', 'XMLHttpRequest')\r\n\r\n\t\treturn mapHeaders\r\n\r\n\t}\r\n\r\n\treturn this.$.ajax(options)\r\n\r\n}\r\n\r\n/**\r\n * formatNumberString\r\n * \r\n * @param {string} input \r\n * @param {string} thousandsSeparator \r\n * @param {string} decimalsSeparator \r\n * @param {boolean} inverse \r\n * @returns {number|string}\r\n */\r\nfunction formatNumberString(input, thousandsSeparator = '.', decimalsSeparator = ',', inverse = false) {\r\n\r\n\tif (typeof input == 'number') {\r\n\t\tconsole.log(input)\r\n\t\tinput = input.toString().replace('.', ',')\r\n\t\tconsole.log(input)\r\n\t}\r\n\r\n\tif (!inverse) {\r\n\t\tinput = input\r\n\t\t\t.replace('.', '')\r\n\t\t\t.replace(/\\s{1,}/gm, '')\r\n\r\n\t\tif (new RegExp('\\,{2,}').test(input)) {\r\n\t\t\tinput = input.replace(/\\,{2,}/gmi, ',')\r\n\t\t}\r\n\r\n\t\tlet commas = input.match(/\\,/gmi)\r\n\r\n\t\tif (Array.isArray(commas) && commas.length > 0) {\r\n\t\t\tfor (let i = 0; i < commas.length - 1; i++) {\r\n\t\t\t\tlet positionLastComma = input.lastIndexOf(',')\r\n\t\t\t\tinput = input.split('')\r\n\t\t\t\tinput[positionLastComma] = ''\r\n\t\t\t\tinput = input.join('')\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinput = input\r\n\t\t\t.replace(/[^0-9|\\,|\\s]/gmi, '')\r\n\r\n\t\tinput = input.split(',')\r\n\r\n\t\tlet number = String(input[0]).replace(/(.)(?=(\\d{3})+$)/g, '$1' + thousandsSeparator)\r\n\t\tlet decimals = input.length > 1 ? `${decimalsSeparator}${input[1]}` : ''\r\n\r\n\t\treturn `${number}${decimals}`\r\n\t} else {\r\n\r\n\t\tif (thousandsSeparator == '.') {\r\n\t\t\tinput = input\r\n\t\t\t\t.replace(new RegExp(`\\\\.{1,}`, 'gm'), '')\r\n\t\t} else {\r\n\t\t\tinput = input\r\n\t\t\t\t.replace(new RegExp(`${thousandsSeparator}{1,}`, 'gm'), '')\r\n\t\t}\r\n\t\tif (decimalsSeparator == '.') {\r\n\t\t\tinput = input\r\n\t\t\t\t.replace(new RegExp(`\\\\.{1,}`, 'gm'), '.')\r\n\t\t} else if (decimalsSeparator == ',') {\r\n\t\t\tinput = input\r\n\t\t\t\t.replace(new RegExp(`\\,{1,}`, 'gm'), '.')\r\n\t\t} else {\r\n\t\t\tinput = input\r\n\t\t\t\t.replace(new RegExp(`${decimalsSeparator}{1,}`, 'gm'), '')\r\n\t\t}\r\n\r\n\t\treturn parseFloat(input)\r\n\t}\r\n}\r\n\r\n/**\r\n * @function strReplace\r\n * @param {string[]|string} search Elementos a buscar\r\n * @param {strin[]|string} replace Elementos de reemplazo\r\n * @param {string} subject Cadena de entrada\r\n * @returns {string}\r\n */\r\nfunction strReplace(search, replace, subject) {\r\n\r\n\tif (typeof search == 'string') {\r\n\t\tsearch = [search]\r\n\t} else if (!Array.isArray(search)) {\r\n\t\treturn null\r\n\t}\r\n\r\n\tif (typeof replace != 'string' && !Array.isArray(replace)) {\r\n\t\treturn null\r\n\t}\r\n\r\n\tif (typeof subject != 'string') {\r\n\t\treturn null\r\n\t}\r\n\r\n\tlet searchLength = search.length\r\n\r\n\tfor (let i = 0; i < searchLength; i++) {\r\n\r\n\t\tlet searchString = search[i]\r\n\t\tlet replaceString = ''\r\n\r\n\t\tif (Array.isArray(replace)) {\r\n\t\t\tif (typeof replace[i] == 'string') {\r\n\t\t\t\treplaceString = replace[i]\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treplaceString = replace\r\n\t\t}\r\n\r\n\t\tlet replacedString = subject\r\n\r\n\t\twhile (replacedString.indexOf(searchString) !== -1) {\r\n\t\t\treplacedString = replacedString.replace(searchString, replaceString)\r\n\t\t}\r\n\r\n\t\tsubject = replacedString\r\n\r\n\t}\r\n\r\n\treturn subject\r\n}\r\n\r\n/**\r\n * @function friendlyURL\r\n * @param {string} str Cadena para formatear\r\n * @param {number} maxWords Cantidad máxima de palabras\r\n * @returns {string} Cadena formateada\r\n */\r\nfunction friendlyURL(str, maxWords) {\r\n\r\n\tif (typeof str != 'string') {\r\n\t\treturn null\r\n\t}\r\n\r\n\tstr = str.trim()\r\n\r\n\tlet dictionary = [\r\n\t\t'á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä', 'Ã',\r\n\t\t'é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë',\r\n\t\t'í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î',\r\n\t\t'ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô',\r\n\t\t'ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü',\r\n\t\t'ñ', 'Ñ', 'ç', 'Ç',\r\n\t\t' ', ' ',\r\n\t]\r\n\r\n\tlet replace_dictionary = [\r\n\t\t'a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A', 'A',\r\n\t\t'e', 'e', 'e', 'e', 'E', 'E', 'E', 'E',\r\n\t\t'i', 'i', 'i', 'i', 'I', 'I', 'I', 'I',\r\n\t\t'o', 'o', 'o', 'o', 'O', 'O', 'O', 'O',\r\n\t\t'u', 'u', 'u', 'u', 'U', 'U', 'U', 'U',\r\n\t\t'nn', 'NN', 'c', 'C',\r\n\t\t' ', '-',\r\n\t]\r\n\r\n\tlet other_characters = [\r\n\t\t\"\\\\\", \"¨\", \"º\", \"~\", '±',\r\n\t\t\"#\", \"@\", \"|\", \"!\", \"\\\"\",\r\n\t\t\"·\", \"$\", \"%\", \"&\", \"/\",\r\n\t\t\"(\", \")\", \"?\", \"'\", \"¡\",\r\n\t\t\"¿\", \"[\", \"^\", \"`\", \"]\",\r\n\t\t\"+\", \"}\", \"{\", \"¨\", \"´\",\r\n\t\t\">\", \"<\", \";\", \",\", \":\",\r\n\t\t\".\", 'º',\r\n\t]\r\n\r\n\tstr = str.replace(/(\\t|\\r\\n|\\r|\\n){1,}/gmi, '')\r\n\tstr = str.replace(/(\\u00a0){1,}/gmi, ' ')\r\n\tstr = strReplace(dictionary, replace_dictionary, str)\r\n\tstr = strReplace(other_characters, '', str)\r\n\tstr = str.replace(/-{2,}/gmi, '')\r\n\tstr = str.toLowerCase()\r\n\r\n\tif (typeof maxWords == 'number') {\r\n\r\n\t\tmaxWords = parseInt(maxWords)\r\n\r\n\t\tlet words = str.split('-')\r\n\r\n\t\tlet wordsLimitied = []\r\n\t\tlet countWords = words.length\r\n\r\n\t\tfor (let $i = 0; $i < maxWords && $i < countWords; $i++) {\r\n\t\t\tlet word = words[$i]\r\n\t\t\twordsLimitied.push(word)\r\n\t\t}\r\n\r\n\t\tstr = wordsLimitied.join('-')\r\n\r\n\t}\r\n\r\n\treturn str\r\n}\r\n\r\n/**\r\n * dataTableServerProccesing\r\n * @description Requiere datatables y jquery\r\n * @param {String} table \r\n * @param {String} ajaxURL \r\n * @param {Number} perPage \r\n * @param {Object} options \r\n * @returns {$}\r\n */\r\nfunction dataTableServerProccesing(table, ajaxURL, perPage, options) {\r\n\r\n\tperPage = typeof perPage == 'number' ? parseInt(perPage) : 10\r\n\tperPage = perPage < 1 ? 10 : perPage\r\n\tajaxURL = typeof ajaxURL == 'string' && ajaxURL.length > 0 ? ajaxURL : null\r\n\toptions = typeof options == 'object' ? options : {}\r\n\r\n\tif (table instanceof HTMLElement) {\r\n\t\ttable = $(table)\r\n\t}\r\n\r\n\tlet columnsDefinitions = []\r\n\tlet thElements = table.find('thead th').toArray()\r\n\r\n\tfor (let index in thElements) {\r\n\r\n\t\tlet e = thElements[index]\r\n\r\n\t\tlet columnDefinition = {\r\n\t\t\ttargets: parseInt(index),\r\n\t\t\ttitle: e.innerHTML,\r\n\t\t\tname: e.innerHTML,\r\n\t\t\tsearchable: true,\r\n\t\t\torderable: true,\r\n\t\t}\r\n\r\n\t\tlet searchable = e.getAttribute('search')\r\n\t\tlet orderable = e.getAttribute('order')\r\n\t\tlet name = e.getAttribute('name')\r\n\r\n\t\tif (searchable != null) {\r\n\t\t\tcolumnDefinition.searchable = searchable == 'true'\r\n\t\t}\r\n\t\tif (orderable != null) {\r\n\t\t\tcolumnDefinition.orderable = orderable == 'true'\r\n\t\t}\r\n\t\tif (name != null) {\r\n\t\t\tcolumnDefinition.name = name\r\n\t\t}\r\n\r\n\t\tcolumnsDefinitions.push(columnDefinition)\r\n\t}\r\n\r\n\tif (typeof options.columnDefs != 'undefined' && Array.isArray(options.columnDefs)) {\r\n\r\n\t\tfor (let index in options.columnDefs) {\r\n\r\n\t\t\tlet definition = options.columnDefs[index]\r\n\t\t\tlet targets = []\r\n\r\n\t\t\tif (typeof definition.targets != 'undefined') {\r\n\r\n\t\t\t\ttargets = Array.isArray(definition.targets) ? definition.targets : [definition.targets]\r\n\r\n\t\t\t\tfor (let target of targets) {\r\n\t\t\t\t\tif (typeof columnsDefinitions[target] != 'undefined') {\r\n\t\t\t\t\t\tfor (let optionDef in definition) {\r\n\t\t\t\t\t\t\tif (optionDef != 'targets') {\r\n\t\t\t\t\t\t\t\tcolumnsDefinitions[target][optionDef] = definition[optionDef]\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\toptions.columnDefs = columnsDefinitions\r\n\r\n\tlet is_valid = table instanceof $ || table instanceof HTMLElement\r\n\tis_valid = is_valid && ajaxURL != null\r\n\r\n\tif (is_valid) {\r\n\r\n\t\tlet configDataTable = Object.assign({}, pcsphpGlobals.configDataTables)\r\n\r\n\t\tfor (let option in options) {\r\n\t\t\tconfigDataTable[option] = options[option]\r\n\t\t}\r\n\r\n\t\tif (typeof options.ajax !== 'undefined') {\r\n\r\n\t\t\tconfigDataTable.ajax = options.ajax\r\n\r\n\t\t\tif (typeof options.ajax.url == 'undefined') {\r\n\t\t\t\tconfigDataTable.ajax.url = ajaxURL\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\tconfigDataTable.ajax = ajaxURL\r\n\t\t}\r\n\r\n\t\tconfigDataTable.processing = true\r\n\t\tconfigDataTable.serverSide = true\r\n\t\tconfigDataTable.pageLength = perPage\r\n\r\n\t\ttable.DataTable(configDataTable)\r\n\r\n\t\treturn table\r\n\r\n\t} else {\r\n\t\tthrow new Error('Los parámetros son inválidos')\r\n\t}\r\n}\r\n\r\n/**\r\n * dataTablesServerProccesingOnCards\r\n * @description Requiere datatables y jquery\r\n * @param {String} containerSelector \r\n * @param {Number} perPage \r\n * @param {Object} options\r\n * @param {Function} options.initComplete\r\n * @param {function($):void} options.initCompleteEnd\r\n * @param {Function} options.preDrawCallback\r\n * @param {Function} options.drawCallback\r\n * @param {function($):void} options.drawCallbackEnd\r\n * @returns {Object}\r\n */\r\nfunction dataTablesServerProccesingOnCards(containerSelector, perPage, options) {\r\n\r\n\tcontainerSelector = typeof containerSelector == 'string' ? containerSelector : null\r\n\tperPage = typeof perPage == 'number' ? perPage : 10\r\n\toptions = typeof options == 'object' ? options : {}\r\n\r\n\tlet container = containerSelector !== null ? $(containerSelector) : null\r\n\r\n\tif (container !== null && container.length > 0) {\r\n\r\n\t\tlet nameLoader = 'PROCCESSING_dataTablesServerProccesingOnCards'\r\n\t\tlet table = container.find('table')\r\n\t\tlet cardsContainer, cards\r\n\r\n\t\tshowGenericLoader(nameLoader)\r\n\r\n\t\ttable.hide()\r\n\r\n\t\tlet processURL = table.attr('url')\r\n\r\n\t\tlet initComplete = typeof options.initComplete == 'function' ? options.initComplete : () => { }\r\n\t\tlet initCompleteEnd = typeof options.initCompleteEnd == 'function' ? options.initCompleteEnd : () => { }\r\n\t\tlet preDrawCallback = typeof options.preDrawCallback == 'function' ? options.preDrawCallback : () => { }\r\n\t\tlet drawCallback = typeof options.drawCallback == 'function' ? options.drawCallback : () => { }\r\n\t\tlet drawCallbackEnd = typeof options.drawCallbackEnd == 'function' ? options.drawCallbackEnd : () => { }\r\n\r\n\t\tlet optionsDataTables = {\r\n\t\t\tdom: `<\"component-wrapper\"t<\"component-pagination\"p>>`,\r\n\t\t\tinitComplete: function (settings, json) {\r\n\r\n\t\t\t\tinitComplete(settings, json)\r\n\r\n\t\t\t\tlet thisDataTable = table.DataTable()\r\n\r\n\t\t\t\tlet columns = []\r\n\r\n\t\t\t\tfor (let i in settings.aoColumns) {\r\n\r\n\t\t\t\t\tlet columnSettings = settings.aoColumns[i]\r\n\t\t\t\t\tcolumns.push({\r\n\t\t\t\t\t\tindex: i,\r\n\t\t\t\t\t\tname: columnSettings.name,\r\n\t\t\t\t\t\tvisible: columnSettings.bVisible,\r\n\t\t\t\t\t\torderable: columnSettings.orderable,\r\n\t\t\t\t\t\tsearchable: columnSettings.searchable,\r\n\t\t\t\t\t\thtmlElement: columnSettings.nTh,\r\n\t\t\t\t\t})\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Creación del contenedor de fichas y otras manipulaciones de html\r\n\t\t\t\tlet wrapper = container.find('.component-wrapper')\r\n\r\n\t\t\t\twrapper.prepend(`


`)\r\n\r\n\t\t\t\t//──── Controles ─────────────────────────────────────────────────────────────────────────\r\n\t\t\t\tlet controls = container.find('.component-controls')\r\n\t\t\t\tlet selectionOrder = controls.find('select[options-order]')\r\n\t\t\t\tlet selectionOrderType = controls.find('.ui.dropdown[options-order-type]')\r\n\t\t\t\tlet search = controls.find(`[type=\"search\"]`)\r\n\t\t\t\tlet lengthPagination = controls.find(`[type=\"number\"][length-pagination]`)\r\n\r\n\t\t\t\t//Ordenamiento\t\t\t\t\r\n\t\t\t\tcolumns.map((e, i) => {\r\n\r\n\t\t\t\t\tif (e.orderable) {\r\n\t\t\t\t\t\tselectionOrder.append(``)\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t})\r\n\r\n\t\t\t\tlet orderEvent = function () {\r\n\r\n\t\t\t\t\tlet orderColumn = columns[selectionOrder.val()]\r\n\t\t\t\t\tlet orderType = selectionOrderType.dropdown('get value')\r\n\r\n\t\t\t\t\torderType = typeof orderType == 'string' && orderType.trim().length > 0 ? orderType.trim() : 'asc'\r\n\t\t\t\t\torderType = orderType.toLowerCase()\r\n\t\t\t\t\torderType = orderType == 'asc' || orderType == 'desc' ? orderType : 'asc'\r\n\r\n\t\t\t\t\tthisDataTable.column(orderColumn.index).order(orderType).draw()\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tselectionOrder.dropdown({\r\n\t\t\t\t\tonChange: orderEvent,\r\n\t\t\t\t})\r\n\t\t\t\tselectionOrderType.dropdown({\r\n\t\t\t\t\tonChange: orderEvent,\r\n\t\t\t\t})\r\n\r\n\t\t\t\t//Buscador\r\n\t\t\t\tsearch.on('keyup', function () {\r\n\t\t\t\t\tthisDataTable.search(search.val()).draw()\r\n\t\t\t\t})\r\n\r\n\t\t\t\t//Cantidad de elementos por página\r\n\t\t\t\tlengthPagination.attr('min', 1)\r\n\t\t\t\tlengthPagination.attr('step', 1)\r\n\t\t\t\tlengthPagination.val(perPage)\r\n\t\t\t\tlengthPagination.on('change', function () {\r\n\t\t\t\t\tlet length = lengthPagination.val()\r\n\t\t\t\t\tlength = parseInt(length)\r\n\t\t\t\t\tlength = !isNaN(length) ? length : perPage\r\n\t\t\t\t\tlength = length > 0 ? length : perPage\r\n\t\t\t\t\tthisDataTable.page.len(length).draw()\r\n\t\t\t\t})\r\n\r\n\t\t\t\tthisDataTable.draw()\r\n\r\n\t\t\t\tinitCompleteEnd(wrapper)\r\n\r\n\t\t\t\tremoveGenericLoader(nameLoader)\r\n\r\n\t\t\t},\r\n\t\t\tpreDrawCallback: function (settings) {\r\n\r\n\t\t\t\tpreDrawCallback(settings)\r\n\r\n\t\t\t\tcardsContainer = container.find('.ui.cards')\r\n\t\t\t\tcards = cardsContainer.find('.card')\r\n\r\n\t\t\t\tcardsContainer.html('')\r\n\r\n\t\t\t},\r\n\t\t\tdrawCallback: function (settings) {\r\n\r\n\t\t\t\tdrawCallback(settings)\r\n\r\n\t\t\t\tthis.find('tbody').remove()\r\n\r\n\t\t\t\tlet json = settings.json\r\n\t\t\t\tlet rawData = json.rawData\r\n\r\n\t\t\t\tfor (let data of rawData) {\r\n\t\t\t\t\tcardsContainer.append(data)\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcards = cardsContainer.find('.card')\r\n\r\n\t\t\t\tif (cards.length == 0) {\r\n\t\t\t\t\tcardsContainer.html(`

${pcsphpGlobals.messages[pcsphpGlobals.lang].datatables.lang.emptyTable}

`)\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdrawCallbackEnd(cards)\r\n\r\n\t\t\t},\r\n\t\t}\r\n\r\n\t\toptions.dom = optionsDataTables.dom\r\n\t\toptions.initComplete = optionsDataTables.initComplete\r\n\t\toptions.preDrawCallback = optionsDataTables.preDrawCallback\r\n\t\toptions.drawCallback = optionsDataTables.drawCallback\r\n\r\n\t\ttable = dataTableServerProccesing(table, processURL, perPage, options)\r\n\r\n\t\ttable.on('processing.dt', function (e, settings, proccesing) {\r\n\t\t\tif (proccesing) {\r\n\r\n\t\t\t\tif (!activeGenericLoader(nameLoader)) {\r\n\t\t\t\t\tshowGenericLoader(nameLoader)\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\t\t\t\tremoveGenericLoader(nameLoader)\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\treturn table\r\n\r\n\t}\r\n\r\n\treturn null\r\n\r\n}\r\n\r\n/**\r\n * Manejador genérico de formularios, requiere jquery\r\n * \r\n * @param {String|$} selectorForm \r\n * @param {genericFormHandler.Options} options\r\n * @param {Boolean} [overwrite=true] Si es true aplica .off al evento submit\r\n * @param {Boolean} [defaultInvalidHandler=true] Si es true aplica un manejador de invalidez del formulario predefinido\r\n * @returns {$} \r\n */\r\nfunction genericFormHandler(selectorForm = 'form[pcs-generic-handler-js]', options = {}, overwrite = true, defaultInvalidHandler = true) {\r\n\r\n\t/**\r\n\t * @typedef genericFormHandler.Options\r\n\t * @property {genericFormHandler.Options.ConfirmationOption} [confirmation]\r\n\t * @property {Function} [onSetFormData]\r\n\t * @property {Function} [onSetForm]\r\n\t * @property {Function} [validate]\r\n\t * @property {Function} [onSuccess]\r\n\t * @property {Function} [onError]\r\n\t * @property {Function} [onInvalidEvent]\r\n\t * @property {Boolean} [toast]\r\n\t */\r\n\t/**\r\n\t * @typedef genericFormHandler.Options.ConfirmationOption\r\n\t * @property {String} selector Selector del elemento\r\n\t * @property {String} [title] Título\r\n\t * @property {String} [message]\tMensaje de advertencia\r\n\t * @property {String} [positive] Texto afirmativo\r\n\t * @property {String} [negative] Texto negativo\r\n\t * @property {Function} [condition]\r\n\t */\r\n\tlet ignore;\r\n\r\n\tif (!(selectorForm instanceof $)) {\r\n\t\tselectorForm = typeof selectorForm == 'string' && selectorForm.trim().length > 0 ? selectorForm.trim() : `form[pcs-generic-handler-js]`\r\n\t}\r\n\r\n\toverwrite = overwrite === true\r\n\tdefaultInvalidHandler = defaultInvalidHandler === true\r\n\r\n\tlet form = selectorForm instanceof $ ? selectorForm : $(`${selectorForm}`)\r\n\r\n\tlet hasConfirmation = false\r\n\tlet buttonConfirmation = null\r\n\tlet onSetFormData = function (formData) {\r\n\t\treturn formData\r\n\t}\r\n\tlet onSetForm = function (form) {\r\n\t\treturn form\r\n\t}\r\n\tlet validate = function (form) {\r\n\t\treturn true\r\n\t}\r\n\tlet onSuccess = function () {\r\n\t}\r\n\tlet onError = function () {\r\n\t}\r\n\r\n\tlet onInvalidEventOnToTopAnimation = false\r\n\tlet onInvalidEvent = function (event) {\r\n\r\n\t\tlet element = event.target\r\n\t\tlet validationMessage = element.validationMessage\r\n\t\tlet jElement = $(element)\r\n\t\tlet field = jElement.closest('.field')\r\n\t\tlet nameOnLabel = field.find('label').html()\r\n\t\tlet parentForm = jElement.closest('form')\r\n\r\n\t\t//Si es un dropdown con simulador se ignora\r\n\t\tif (typeof jElement.attr('data-simulator') == 'string' && jElement.attr('data-simulator').length > 1) {\r\n\t\t\tevent.preventDefault()\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tfield.addClass('error')\r\n\t\tfield.find('input,select,textarea').map((i, e) => e.blur())\r\n\t\tlet removeErrorClass = function () {\r\n\t\t\tfield.removeClass('error')\r\n\t\t\tform.find(`li[data-name=\"${dataID}\"]`).remove()\r\n\t\t\tconst messageContainer = form.find(`[${errorMessageContainerAttr}]`)\r\n\t\t\tif (messageContainer.find('.list li').length < 1) {\r\n\t\t\t\tmessageContainer.remove()\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfield.off('focus change', '*', removeErrorClass)\r\n\t\tfield.on('focus change', '*', removeErrorClass)\r\n\r\n\t\t//Agregar errores\r\n\t\tconst dataID = configElementDataID()\r\n\t\tconst errorMessageContainerAttr = 'error-form-container'\r\n\r\n\t\tconfigErrorMessageContainer(parentForm)\r\n\r\n\t\tevent.preventDefault()\r\n\r\n\t\tfunction configElementDataID() {\r\n\t\t\tlet dataID = jElement.data('id')\r\n\t\t\tjElement.data('id')\r\n\t\t\tconst hasDataID = typeof dataID == 'string' && dataID.trim().length > 0\r\n\t\t\tdataID = hasDataID ? dataID.trim() : generateUniqueID().trim()\r\n\t\t\tif (!hasDataID) {\r\n\t\t\t\tjElement.attr('data-id', dataID)\r\n\t\t\t}\r\n\t\t\treturn dataID\r\n\t\t}\r\n\r\n\t\tfunction configErrorMessageContainer(form) {\r\n\r\n\t\t\tlet messageContainer = form.find(`[${errorMessageContainerAttr}]`)\r\n\r\n\t\t\tif (messageContainer.length < 1) {\r\n\t\t\t\tlet html = `
`\r\n\t\t\t\thtml += `
`\r\n\t\t\t\thtml += `
    `\r\n\t\t\t\thtml += `
    `\r\n\t\t\t\tform.prepend(html)\r\n\t\t\t\tmessageContainer = form.find(`[${errorMessageContainerAttr}]`)\r\n\t\t\t\tmessageContainer.find('.close').off('click')\r\n\t\t\t\tmessageContainer.find('.close').on('click', function () {\r\n\t\t\t\t\t$(this).closest('.message').transition('fade')\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\t\t\tlet toTop = () => {\r\n\t\t\t\tif (!onInvalidEventOnToTopAnimation) {\r\n\t\t\t\t\tonInvalidEventOnToTopAnimation = true\r\n\t\t\t\t\t$('body,html,.ui-pcs.container-sidebar>.content').animate({\r\n\t\t\t\t\t\tscrollTop: form.offset().top\r\n\t\t\t\t\t}, {\r\n\t\t\t\t\t\teasing: 'linear',\r\n\t\t\t\t\t\tcomplete: function () {\r\n\t\t\t\t\t\t\tonInvalidEventOnToTopAnimation = false\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}\r\n\r\n\t\t\tif (!messageContainer.is(':visible')) {\r\n\t\t\t\tmessageContainer.transition('fade', {\r\n\t\t\t\t\tonComplete: function () {\r\n\t\t\t\t\t\tif (!visibleInViewPort(messageContainer)) {\r\n\t\t\t\t\t\t\ttoTop()\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmessageContainer.find('.content').css('min-height', 'min-content')\r\n\t\t\t\t\t\tmessageContainer.find('.content').css('overflow', 'auto')\r\n\t\t\t\t\t\tmessageContainer.find('.content').css('max-height', '220px')\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t} else {\r\n\t\t\t\ttoTop()\r\n\t\t\t}\r\n\r\n\t\t\tconfigIndividualError(messageContainer)\r\n\t\t\tremoveOrphanIndividualErrors(messageContainer)\r\n\r\n\t\t\tfunction configIndividualError(messageContainer) {\r\n\r\n\t\t\t\tconst liErrorSelector = `[data-name=\"${dataID}\"]`\r\n\t\t\t\tlet liError = messageContainer.find(liErrorSelector)\r\n\t\t\t\tliError.remove()\r\n\r\n\t\t\t\tmessageContainer.find('.list').append(`
  • `)\r\n\t\t\t\tliError = messageContainer.find(liErrorSelector)\r\n\t\t\t\tliError.html(`${nameOnLabel}: ${validationMessage}`)\r\n\r\n\t\t\t\tmessageContainer.find('.list').append(liError)\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction removeOrphanIndividualErrors() {\r\n\t\t\t\tconst liErrors = messageContainer.find('.list li')\r\n\t\t\t\tliErrors.map(function (i, element) {\r\n\t\t\t\t\tlet dataID = element.dataset.name\r\n\t\t\t\t\tlet inputElement = form.find(`[data-id=\"${dataID}\"]`)\r\n\t\t\t\t\tif (inputElement.length < 1) {\r\n\t\t\t\t\t\t$(element).remove()\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\t\t\treturn messageContainer\r\n\r\n\t\t}\r\n\r\n\t}\r\n\tonInvalidEvent = defaultInvalidHandler ? onInvalidEvent : function (event) {\r\n\t}\r\n\tlet toast = true\r\n\r\n\tif (typeof options == 'object') {\r\n\t\tif (typeof options.confirmation == 'object') {\r\n\r\n\t\t\tlet confirmationOptions = options.confirmation\r\n\r\n\t\t\tif (typeof confirmationOptions.selector == 'string') {\r\n\t\t\t\tbuttonConfirmation = $(confirmationOptions.selector)\r\n\t\t\t\thasConfirmation = buttonConfirmation.length > 0\r\n\t\t\t}\r\n\t\t\tif (typeof confirmationOptions.title != 'string') {\r\n\t\t\t\toptions.confirmation.title = 'Confirmación'\r\n\t\t\t}\r\n\t\t\tif (typeof confirmationOptions.message != 'string') {\r\n\t\t\t\toptions.confirmation.message = '¿Está seguro de realizar esta acción?'\r\n\t\t\t}\r\n\t\t\tif (typeof confirmationOptions.positive != 'string') {\r\n\t\t\t\toptions.confirmation.positive = 'Sí'\r\n\t\t\t}\r\n\t\t\tif (typeof confirmationOptions.negative != 'string') {\r\n\t\t\t\toptions.confirmation.negative = 'No'\r\n\t\t\t}\r\n\t\t\tif (typeof confirmationOptions.condition != 'function') {\r\n\t\t\t\toptions.confirmation.condition = () => true\r\n\t\t\t}\r\n\r\n\t\t\tif (hasConfirmation) {\r\n\t\t\t\thasConfirmation = options.confirmation.condition(buttonConfirmation) === true\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\tif (typeof options.onSetFormData == 'function') {\r\n\t\t\tonSetFormData = options.onSetFormData\r\n\t\t}\r\n\t\tif (typeof options.onSetForm == 'function') {\r\n\t\t\tonSetForm = options.onSetForm\r\n\t\t}\r\n\t\tif (typeof options.validate == 'function') {\r\n\t\t\tvalidate = options.validate\r\n\t\t}\r\n\t\tif (typeof options.onSuccess == 'function') {\r\n\t\t\tonSuccess = options.onSuccess\r\n\t\t}\r\n\t\tif (typeof options.onError == 'function') {\r\n\t\t\tonError = options.onError\r\n\t\t}\r\n\t\tif (typeof options.onInvalidEvent == 'function') {\r\n\t\t\tonInvalidEvent = options.onInvalidEvent\r\n\t\t}\r\n\t\tif (typeof options.toast == 'boolean') {\r\n\t\t\ttoast = options.toast\r\n\t\t}\r\n\t}\r\n\r\n\tif (form.length > 0) {\r\n\r\n\t\tform.off('invalid')\r\n\t\tform.find('input,textarea,select').off('invalid')\r\n\t\tform.find('input,textarea,select').on('invalid', onInvalidEvent)\r\n\r\n\t\tif (overwrite) {\r\n\t\t\tform.off('submit')\r\n\t\t}\r\n\t\tform.on('submit', function (e) {\r\n\r\n\t\t\te.preventDefault()\r\n\r\n\t\t\tlet thisForm = $(e.target)\r\n\r\n\t\t\tif (validate(form)) {\r\n\t\t\t\tif (!hasConfirmation) {\r\n\r\n\t\t\t\t\tsubmit(thisForm)\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tiziToast.question({\r\n\t\t\t\t\t\ttimeout: 20000,\r\n\t\t\t\t\t\tclose: false,\r\n\t\t\t\t\t\toverlay: true,\r\n\t\t\t\t\t\tdisplayMode: 'once',\r\n\t\t\t\t\t\tid: 'question',\r\n\t\t\t\t\t\tzindex: 999,\r\n\t\t\t\t\t\ttitle: options.confirmation.title,\r\n\t\t\t\t\t\tmessage: options.confirmation.message,\r\n\t\t\t\t\t\tposition: 'center',\r\n\t\t\t\t\t\tbuttons: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t``,\r\n\t\t\t\t\t\t\t\t(instance, toast) => {\r\n\t\t\t\t\t\t\t\t\tsubmit(thisForm)\r\n\t\t\t\t\t\t\t\t\tinstance.hide({\r\n\t\t\t\t\t\t\t\t\t\ttransitionOut: 'fadeOut'\r\n\t\t\t\t\t\t\t\t\t}, toast, 'button')\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\ttrue\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t``,\r\n\t\t\t\t\t\t\t\t(instance, toast) => {\r\n\t\t\t\t\t\t\t\t\tinstance.hide({\r\n\t\t\t\t\t\t\t\t\t\ttransitionOut: 'fadeOut'\r\n\t\t\t\t\t\t\t\t\t}, toast, 'button')\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t})\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn false\r\n\r\n\t\t})\r\n\t}\r\n\r\n\tfunction submit(form) {\r\n\r\n\t\tlet formData = new FormData(form[0])\r\n\t\tform.find('button[submit]').attr('disabled', true)\r\n\r\n\t\tlet action = form.attr('action')\r\n\t\tlet method = form.attr('method')\r\n\t\tlet validAction = typeof action == 'string' && action.trim().length > 0\r\n\t\tlet validMethod = typeof method == 'string' && method.trim().length > 0\r\n\t\tmethod = validMethod ? method.trim().toUpperCase() : 'POST'\r\n\r\n\t\tif (validAction) {\r\n\r\n\t\t\tlet request = null\r\n\r\n\t\t\tlet loaderElement = showLoader()\r\n\r\n\t\t\tif (method == 'POST') {\r\n\r\n\t\t\t\tlet processFormData = onSetFormData(formData, form)\r\n\t\t\t\tlet optionsPost = {\r\n\t\t\t\t\txhr: function () {\r\n\r\n\t\t\t\t\t\tlet xhr = new XMLHttpRequest()\r\n\r\n\t\t\t\t\t\txhr.upload.addEventListener(\"progress\", function (e) {\r\n\r\n\t\t\t\t\t\t\tif (e.lengthComputable) {\r\n\t\t\t\t\t\t\t\tlet percentComplete = ((e.loaded / e.total) * 100);\r\n\t\t\t\t\t\t\t\tloaderElement.updatePercent(percentComplete >= 100 ? 99 : percentComplete)\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}, false)\r\n\r\n\t\t\t\t\t\treturn xhr\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (typeof processFormData.then !== 'undefined') {\r\n\t\t\t\t\tprocessFormData.then(function (formData) {\r\n\t\t\t\t\t\trequest = postRequest(action, formData, {}, optionsPost)\r\n\t\t\t\t\t\thandlerRequest(request, form, formData)\r\n\t\t\t\t\t})\r\n\t\t\t\t} else {\r\n\t\t\t\t\trequest = postRequest(action, processFormData, {}, optionsPost)\r\n\t\t\t\t\thandlerRequest(request, form, formData)\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\t\t\t\tlet processForm = onSetForm(form)\r\n\t\t\t\tif (typeof processForm.then !== 'undefined') {\r\n\t\t\t\t\tprocessForm.then(function (form) {\r\n\t\t\t\t\t\trequest = getRequest(action, form)\r\n\t\t\t\t\t\thandlerRequest(request, form, formData)\r\n\t\t\t\t\t})\r\n\t\t\t\t} else {\r\n\t\t\t\t\trequest = getRequest(action, processForm)\r\n\t\t\t\t\thandlerRequest(request, form, formData)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconsole.error('No se ha definido ninguna acción')\r\n\r\n\t\t\tif (toast) {\r\n\t\t\t\terrorMessage('Error', 'Ha ocurrido un error desconocido, intente más tarde.')\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tfunction handlerRequest(request, formProcess, formData) {\r\n\r\n\t\trequest.done(function (response) {\r\n\r\n\t\t\tlet responseStructure = {\r\n\t\t\t\tsuccess: {\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tvalidate: (val) => {\r\n\t\t\t\t\t\treturn typeof val == 'boolean'\r\n\t\t\t\t\t},\r\n\t\t\t\t\tparse: (val) => {\r\n\t\t\t\t\t\treturn val === true\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdefault: false,\r\n\t\t\t\t},\r\n\t\t\t\tname: {\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tvalidate: (val) => {\r\n\t\t\t\t\t\treturn typeof val == 'string' && val.trim().length > 0\r\n\t\t\t\t\t},\r\n\t\t\t\t\tparse: (val) => {\r\n\t\t\t\t\t\treturn val.trim()\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdefault: 'Acción',\r\n\t\t\t\t},\r\n\t\t\t\tmessage: {\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tvalidate: (val) => {\r\n\t\t\t\t\t\treturn typeof val == 'string' && val.trim().length > 0\r\n\t\t\t\t\t},\r\n\t\t\t\t\tparse: (val) => {\r\n\t\t\t\t\t\treturn val.trim()\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdefault: '',\r\n\t\t\t\t},\r\n\t\t\t\tvalues: {\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tvalidate: (val) => {\r\n\t\t\t\t\t\treturn typeof val == 'object'\r\n\t\t\t\t\t},\r\n\t\t\t\t\tparse: (val) => {\r\n\t\t\t\t\t\treturn val\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdefault: {},\r\n\t\t\t\t},\r\n\t\t\t}\r\n\r\n\t\t\tlet responseIsObject = typeof response == 'object'\r\n\r\n\t\t\tif (!responseIsObject) {\r\n\t\t\t\tconsole.error(`La respuesta debe ser un objeto`)\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\r\n\t\t\tfor (let option in responseStructure) {\r\n\t\t\t\tlet config = responseStructure[option]\r\n\t\t\t\tlet optional = config.optional\r\n\t\t\t\tlet validate = config.validate\r\n\t\t\t\tlet parse = config.parse\r\n\t\t\t\tlet value = config.default\r\n\t\t\t\tlet optionExists = typeof response[option]\r\n\t\t\t\tif (optionExists) {\r\n\t\t\t\t\tlet inputValue = response[option]\r\n\t\t\t\t\tif (validate(inputValue)) {\r\n\t\t\t\t\t\tvalue = parse(inputValue)\r\n\t\t\t\t\t}\r\n\t\t\t\t\tresponse[option] = value\r\n\t\t\t\t} else if (optional) {\r\n\t\t\t\t\tresponse[option] = value\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconsole.error(`Falta la opción ${option} en el cuerpo de la respuesta.`)\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif (response.success) {\r\n\r\n\t\t\t\tif (toast) {\r\n\t\t\t\t\tsuccessMessage(response.name, response.message)\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet resposeValues = response.values\r\n\r\n\t\t\t\tlet hasReload = typeof resposeValues.reload != 'undefined' && resposeValues.reload == true\r\n\t\t\t\tlet hasRedirection = typeof resposeValues.redirect != 'undefined' && resposeValues.redirect == true\r\n\t\t\t\tlet validRedirection = typeof resposeValues.redirect_to == 'string' && resposeValues.redirect_to.trim().length > 0\r\n\r\n\t\t\t\tif (hasRedirection && validRedirection) {\r\n\r\n\t\t\t\t\tsetTimeout(function (e) {\r\n\r\n\t\t\t\t\t\twindow.location = resposeValues.redirect_to\r\n\r\n\t\t\t\t\t}, 1500)\r\n\r\n\t\t\t\t} else if (hasReload) {\r\n\r\n\t\t\t\t\tsetTimeout(function (e) {\r\n\r\n\t\t\t\t\t\twindow.location.reload()\r\n\r\n\t\t\t\t\t}, 1500)\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tform.find('button').attr('disabled', false)\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tonSuccess(formProcess, formData, response)\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tif (toast) {\r\n\t\t\t\t\terrorMessage(response.name, response.message)\r\n\t\t\t\t}\r\n\r\n\t\t\t\tform.find('button').attr('disabled', false)\r\n\r\n\t\t\t\tonError(formProcess, formData, response)\r\n\r\n\t\t\t}\r\n\r\n\t\t})\r\n\r\n\t\trequest.fail(function (error) {\r\n\r\n\t\t\tform.find('button').attr('disabled', false)\r\n\r\n\t\t\tif (toast) {\r\n\t\t\t\terrorMessage('Error', 'Ha ocurrido un error al conectar con el servidor, intente más tarde.')\r\n\t\t\t}\r\n\r\n\t\t\tonError(formProcess, formData, error)\r\n\r\n\t\t\tconsole.error(error)\r\n\r\n\t\t})\r\n\r\n\t\trequest.always(function (res) {\r\n\t\t\tremoveLoader()\r\n\t\t})\r\n\t}\r\n\r\n\tfunction showLoader() {\r\n\t\treturn showGenericLoader('genericFormHandler')\r\n\t}\r\n\r\n\tfunction removeLoader() {\r\n\t\tremoveGenericLoader('genericFormHandler')\r\n\t}\r\n\r\n\treturn form\r\n\r\n}\r\n\r\n/**\r\n * showGenericLoader\r\n * \r\n * Muestra un modal de carga en el body\r\n * \r\n * @returns {HTMLElement} \r\n */\r\nfunction showGenericLoader(name = 'DEFAULT', classPrefix = 'ui-pcs-', withProgress = false) {\r\n\r\n\tclassPrefix = typeof classPrefix == 'string' && classPrefix.length ? classPrefix : 'ui-pcs-'\r\n\r\n\tname = typeof name == 'string' && name.length > 0 ? name : 'DEFAULT'\r\n\r\n\tlet contentLoader = document.createElement('div')\r\n\tlet boxLoader = document.createElement('div')\r\n\tlet loader = document.createElement('div')\r\n\r\n\tcontentLoader.classList.add(`${classPrefix}global-loader`, 'active')\r\n\tboxLoader.classList.add(`${classPrefix}box`)\r\n\tloader.classList.add(`${classPrefix}loader`)\r\n\r\n\tcontentLoader.setAttribute('data-name', name)\r\n\r\n\tcontentLoader.updatePercent = function (percent) {\r\n\r\n\t\tpercent = parseInt(percent)\r\n\t\tpercent = !isNaN(percent) ? percent : 0\r\n\r\n\t\tif (this.hasProgress()) {\r\n\t\t\tlet progress = this.getProgressElement()\r\n\t\t\tprogress.update(percent)\r\n\t\t} else {\r\n\t\t\taddProgress(percent, this.querySelector(`.${classPrefix}box`))\r\n\t\t}\r\n\r\n\t\tif (percent == 100) {\r\n\t\t\tthis.remove()\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tcontentLoader.hasProgress = function () {\r\n\t\treturn contentLoader.querySelector(`.${classPrefix}progress`) !== null\r\n\t}\r\n\r\n\tcontentLoader.getProgressElement = function () {\r\n\t\treturn contentLoader.querySelector(`.${classPrefix}progress`)\r\n\t}\r\n\r\n\tlet currentActive = document.querySelector(`.${classPrefix}global-loader[data-name=\"${name}\"]`)\r\n\r\n\tif (!(currentActive instanceof HTMLElement)) {\r\n\t\tboxLoader.appendChild(loader)\r\n\t\tcontentLoader.appendChild(boxLoader)\r\n\t\tdocument.body.appendChild(contentLoader)\r\n\t\tif (withProgress) {\r\n\t\t\taddProgress(0, boxLoader)\r\n\t\t}\r\n\t\treturn contentLoader\r\n\t} else {\r\n\t\treturn currentActive\r\n\t}\r\n\r\n\tfunction addProgress(percent, parent) {\r\n\t\tlet progress = document.createElement('span')\r\n\t\tprogress.innerHTML = `${percent}%`\r\n\t\tprogress.classList.add(`${classPrefix}progress`)\r\n\t\tparent.appendChild(progress)\r\n\t\tprogress.update = function (percent) {\r\n\t\t\tprogress.innerHTML = `${percent}%`\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * removeGenericLoader\r\n * \r\n * Oculta un modal de carga en el body\r\n * \r\n * @returns {void} \r\n */\r\nfunction removeGenericLoader(name = 'DEFAULT', classPrefix = 'ui-pcs-') {\r\n\r\n\tclassPrefix = typeof classPrefix == 'string' && classPrefix.length ? classPrefix : 'ui-pcs-'\r\n\r\n\tname = typeof name == 'string' && name.length > 0 ? name : 'DEFAULT'\r\n\r\n\tlet contentLoader = document.createElement('div')\r\n\tlet boxLoader = document.createElement('div')\r\n\tlet loader = document.createElement('div')\r\n\r\n\tcontentLoader.classList.add(`${classPrefix}global-loader`, 'active')\r\n\tboxLoader.classList.add(`${classPrefix}box`)\r\n\tloader.classList.add(`${classPrefix}loader`)\r\n\r\n\tcontentLoader.setAttribute('data-name', name)\r\n\r\n\tlet currentActive = document.querySelector(`.${classPrefix}global-loader[data-name=\"${name}\"]`)\r\n\r\n\tif (currentActive instanceof HTMLElement) {\r\n\t\tcurrentActive.remove()\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * activeGenericLoader\r\n * \r\n * Verifica si está activo el loader\r\n * \r\n * @returns {void} \r\n */\r\nfunction activeGenericLoader(name = 'DEFAULT') {\r\n\r\n\tlet active = false\r\n\r\n\tif (typeof window.uiPcsActivityGenericLoader == 'object') {\r\n\r\n\t\tif (typeof window.uiPcsActivityGenericLoader[name] == 'object') {\r\n\t\t\tactive = (window.uiPcsActivityGenericLoader[name].active == true)\r\n\t\t}\r\n\r\n\t}\r\n\r\n\treturn active\r\n\r\n}\r\n\r\n/**\r\n * @function formatDate\r\n *\r\n * Formatea una fecha.\r\n *\r\n * @param {Date} date Fecha\r\n * @param {string} format Formato de la fecha\r\n * - d\tDía del mes, 2 dígitos con ceros iniciales\t01 a 31\r\n * - Y\tUna representación numérica completa de un año, 4 dígitos\tEjemplos: 1999 o 2003\r\n * - m\tRepresentación numérica de un mes, con ceros iniciales\t01 hasta 12\r\n * - g\tFormato de 12 horas de una hora sin ceros iniciales\t1 hasta 12\r\n * - G\tFormato de 24 horas de una hora sin ceros iniciales\t0 hasta 23\r\n * - h\tFormato de 12 horas de una hora con ceros iniciales\t01 hasta 12\r\n * - H\tFormato de 24 horas de una hora con ceros iniciales\t00 hasta 23\r\n * - A\tAnte meridiem y Post meridiem en mayúsculas\tAM o PM\r\n * - i\tMinutos con ceros iniciales\t00 hasta 59\r\n * - s\tSegundos con ceros iniciales\t00 hasta 59\r\n * @returns {string}\r\n */\r\nfunction formatDate(date, format) {\r\n\r\n\tformat = typeof format == 'string' && format.length > 0 ? format : 'd-m-Y'\r\n\tif (!(date instanceof Date)) {\r\n\t\tdate = new Date()\r\n\t\tconsole.warn('Fecha actual asignada en formatDate')\r\n\t}\r\n\r\n\tlet d = date.getDate()\r\n\td = d < 10 ? `0${d}` : d\r\n\r\n\tlet m = date.getMonth() + 1\r\n\tm = m < 10 ? `0${m}` : m\r\n\r\n\tlet Y = date.getFullYear().toString()\r\n\r\n\tlet hours = {\r\n\t\t0: 12,\r\n\t\t1: 1,\r\n\t\t2: 2,\r\n\t\t3: 3,\r\n\t\t4: 4,\r\n\t\t5: 5,\r\n\t\t6: 6,\r\n\t\t7: 7,\r\n\t\t8: 8,\r\n\t\t9: 9,\r\n\t\t10: 10,\r\n\t\t11: 11,\r\n\t\t12: 12,\r\n\t\t13: 1,\r\n\t\t14: 2,\r\n\t\t15: 3,\r\n\t\t16: 4,\r\n\t\t17: 5,\r\n\t\t18: 6,\r\n\t\t19: 7,\r\n\t\t20: 8,\r\n\t\t21: 9,\r\n\t\t22: 10,\r\n\t\t23: 11,\r\n\t}\r\n\tlet hour = date.getHours()\r\n\tlet g = hours[hour]\r\n\tlet G = hour\r\n\tlet h = g < 10 ? `0${g}` : g\r\n\tlet H = G < 10 ? `0${G}` : G\r\n\tlet A = hour >= 12 ? 'PM' : 'AM'\r\n\r\n\tlet i = parseInt(date.getMinutes())\r\n\ti = i < 10 ? `0${i}` : i\r\n\tlet s = parseInt(date.getSeconds())\r\n\ts = s < 10 ? `0${s}` : s\r\n\r\n\tlet replacesPattern = {\r\n\t\t'Y': Y,\r\n\t\t'm': m,\r\n\t\t'd': d,\r\n\t\t'A': A,\r\n\t\t'g': g,\r\n\t\t'G': G,\r\n\t\t'h': h,\r\n\t\t'H': H,\r\n\t\t'i': i,\r\n\t\t's': s,\r\n\t}\r\n\r\n\tfor (let pattern in replacesPattern) {\r\n\t\tlet value = replacesPattern[pattern]\r\n\t\tformat = format.replace(pattern, value)\r\n\t}\r\n\r\n\treturn format\r\n}\r\n\r\n/**\r\n * \r\n * @param {String} str Remplaza %r por los valores pasados\r\n * @param {Array} values \r\n */\r\nfunction formatStr(str, values) {\r\n\r\n\tif (Array.isArray(values)) {\r\n\r\n\t\tif (typeof str == 'string') {\r\n\r\n\t\t\tfor (let value of values) {\r\n\r\n\t\t\t\tlet indexReplaceElement = str.indexOf('%r')\r\n\r\n\t\t\t\tif (indexReplaceElement != -1) {\r\n\r\n\t\t\t\t\tstr = str.replace('%r', value)\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tbreak\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\treturn typeof str == 'string' ? str : ''\r\n\r\n}\r\n\r\n/**\r\n * \r\n * @param {String} prefix\r\n * @param {Boolean} moreEntropy\r\n * @param {String}\r\n */\r\nfunction generateUniqueID(prefix, moreEntropy) {\r\n\r\n\tif (typeof prefix === 'undefined') {\r\n\t\tprefix = ''\r\n\t}\r\n\r\n\tvar retId\r\n\tvar _formatSeed = function (seed, reqWidth) {\r\n\t\tseed = parseInt(seed, 10).toString(16) // to hex str\r\n\t\tif (reqWidth < seed.length) {\r\n\t\t\t// so long we split\r\n\t\t\treturn seed.slice(seed.length - reqWidth)\r\n\t\t}\r\n\t\tif (reqWidth > seed.length) {\r\n\t\t\t// so short we pad\r\n\t\t\treturn Array(1 + (reqWidth - seed.length)).join('0') + seed\r\n\t\t}\r\n\t\treturn seed\r\n\t}\r\n\r\n\tvar $global = (typeof window !== 'undefined' ? window : global)\r\n\t$global.$locutus = $global.$locutus || {}\r\n\tvar $locutus = $global.$locutus\r\n\t$locutus.php = $locutus.php || {}\r\n\r\n\tif (!$locutus.php.uniqidSeed) {\r\n\t\t// init seed with big random int\r\n\t\t$locutus.php.uniqidSeed = Math.floor(Math.random() * 0x75bcd15)\r\n\t}\r\n\t$locutus.php.uniqidSeed++\r\n\r\n\t// start with prefix, add current milliseconds hex string\r\n\tretId = prefix\r\n\tretId += _formatSeed(parseInt(new Date().getTime() / 1000, 10), 8)\r\n\t// add seed hex string\r\n\tretId += _formatSeed($locutus.php.uniqidSeed, 5)\r\n\tif (moreEntropy) {\r\n\t\t// for more entropy we add a float lower to 10\r\n\t\tretId += (Math.random() * 10).toFixed(8).toString()\r\n\t}\r\n\r\n\treturn retId\r\n}\r\n\r\n/**\r\n * @function addObjectToFormData\r\n * \r\n * @param {FormData} formData\r\n * @param {Object} inputValue\r\n * @param {String} name\r\n * @param {Bool} isFirstArray\r\n * @param {FormData} \r\n */\r\nfunction addObjectToFormData(formData, inputValue, name, isFirstArray = true) {\r\n\r\n\tif (typeof inputValue == 'object') {\r\n\r\n\t\tfor (let property in inputValue) {\r\n\r\n\t\t\tlet value = inputValue[property]\r\n\t\t\tlet subName = `${name}[${property}]`\r\n\r\n\t\t\tif (typeof value == 'string' || typeof value == 'number' || value == null) {\r\n\r\n\t\t\t\tformData.append(subName, value)\r\n\r\n\t\t\t} else if (Array.isArray(value)) {\r\n\r\n\t\t\t\tfor (let i in value) {\r\n\t\t\t\t\tif (isFirstArray) {\r\n\t\t\t\t\t\tformData = addObjectToFormData(formData, value, `${subName}`, false)\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tformData = addObjectToFormData(formData, value[i], `${subName}[${i}]`, false)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if (typeof value == 'object') {\r\n\r\n\t\t\t\tformData = addObjectToFormData(formData, value, subName)\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t} else {\r\n\t\tformData.append(name, inputValue)\r\n\t}\r\n\r\n\treturn formData\r\n\r\n}\r\n\r\n/**\r\n * Detección de evento swipe\r\n * @param {HTMLElement} el \r\n * @param {Function} callback Función que devuelve como parámetro alguna de las siguientes opciones: u, r, d, l, none y el evento\r\n * @link http://www.javascriptkit.com/javatutors/touchevents2.shtml\r\n */\r\nfunction swipedetect(el, callback) {\r\n\r\n\tvar touchsurface = el,\r\n\t\tswipedir,\r\n\t\tstartX,\r\n\t\tstartY,\r\n\t\tdistX,\r\n\t\tdistY,\r\n\t\tthreshold = 150, //required min distance traveled to be considered swipe\r\n\t\trestraint = 100, // maximum distance allowed at the same time in perpendicular direction\r\n\t\tallowedTime = 300, // maximum time allowed to travel that distance\r\n\t\telapsedTime,\r\n\t\tstartTime,\r\n\t\thandleswipe = callback || function (swipedir) { }\r\n\r\n\ttouchsurface.addEventListener('touchstart', function (e) {\r\n\t\tvar touchobj = e.changedTouches[0]\r\n\t\tswipedir = 'none'\r\n\t\tdist = 0\r\n\t\tstartX = touchobj.pageX\r\n\t\tstartY = touchobj.pageY\r\n\t\tstartTime = new Date().getTime() // record time when finger first makes contact with surface\r\n\t}, {\r\n\t\tpassive: true,\r\n\t})\r\n\r\n\ttouchsurface.addEventListener('touchend', function (e) {\r\n\t\tvar touchobj = e.changedTouches[0]\r\n\t\tdistX = touchobj.pageX - startX // get horizontal dist traveled by finger while in contact with surface\r\n\t\tdistY = touchobj.pageY - startY // get vertical dist traveled by finger while in contact with surface\r\n\t\telapsedTime = new Date().getTime() - startTime // get time elapsed\r\n\t\tif (elapsedTime <= allowedTime) { // first condition for awipe met\r\n\t\t\tif (Math.abs(distX) >= threshold && Math.abs(distY) <= restraint) { // 2nd condition for horizontal swipe met\r\n\t\t\t\tswipedir = (distX < 0) ? 'l' : 'r' // if dist traveled is negative, it indicates left swipe\r\n\t\t\t}\r\n\t\t\telse if (Math.abs(distY) >= threshold && Math.abs(distX) <= restraint) { // 2nd condition for vertical swipe met\r\n\t\t\t\tswipedir = (distY < 0) ? 'u' : 'd' // if dist traveled is negative, it indicates up swipe\r\n\t\t\t}\r\n\t\t}\r\n\t\thandleswipe(swipedir, e)\r\n\t}, false)\r\n}\r\n\r\n/**\r\n * Configura un scroll x espejo en la parte de arriba\r\n */\r\nfunction configMirrorScrollX() {\r\n\r\n\tlet mirrorScrollX = $('.mirror-scroll-x')\r\n\r\n\tif (mirrorScrollX.length > 0) {\r\n\r\n\t\tlet mirrorScrollXContent = mirrorScrollX.find('.mirror-scroll-x-content')\r\n\t\tlet mirrorTarget = $(mirrorScrollX.attr('mirror-scroll-target'))\r\n\r\n\t\tlet checkScrollX = function () {\r\n\r\n\t\t\tlet scrollXWidth = mirrorTarget.get(0).scrollWidth\r\n\t\t\tlet targetWidth = mirrorTarget.get(0).clientWidth\r\n\t\t\tlet isVisibleScrollX = targetWidth < scrollXWidth\r\n\r\n\t\t\tif (isVisibleScrollX) {\r\n\t\t\t\tmirrorScrollXContent.width(scrollXWidth)\r\n\t\t\t\tmirrorTarget.addClass('with-mirror-scroll-x')\r\n\t\t\t\tmirrorScrollX.show()\r\n\t\t\t} else {\r\n\t\t\t\tmirrorTarget.removeClass('with-mirror-scroll-x')\r\n\t\t\t\tmirrorScrollX.hide()\r\n\t\t\t}\r\n\r\n\t\t\tmirrorScrollX.get(0).onscroll = function () {\r\n\t\t\t\tmirrorTarget.get(0).scrollLeft = mirrorScrollX.get(0).scrollLeft\r\n\t\t\t}\r\n\r\n\t\t\tmirrorTarget.get(0).onscroll = function () {\r\n\t\t\t\tmirrorScrollX.get(0).scrollLeft = mirrorTarget.get(0).scrollLeft\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t$(window).off('resize', checkScrollX)\r\n\t\t$(window).on('resize', checkScrollX)\r\n\t\tsetTimeout(function () {\r\n\t\t\t$(window).trigger('resize')\r\n\t\t}, 500)\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Configura un dropdown\r\n * @param {String} selectSelector \r\n * @param {Object} defaultOptions \r\n * @param {Booloan} cacheOnAPI\r\n * @returns {$[]} \r\n */\r\nfunction configFomanticDropdown(selectSelector, defaultOptions = {}, cacheOnAPI = true) {\r\n\tselectSelector = typeof selectSelector == 'string' ? selectSelector : 'NONE_SELECTOR'\r\n\tdefaultOptions = typeof defaultOptions == 'object' ? defaultOptions : {}\r\n\r\n\tlet selects = Array.from(document.querySelectorAll(selectSelector))\r\n\tlet dropdowns = []\r\n\r\n\tfor (let select of selects) {\r\n\r\n\r\n\t\tconst originalSelectHTML = select.outerHTML\r\n\t\tselect = $(select)\r\n\t\tlet searchURL = select.data('search-url')\r\n\t\tsearchURL = typeof searchURL == 'string' && searchURL.trim().length > 0 ? searchURL.trim() : null\r\n\r\n\t\tlet options = Object.assign({}, defaultOptions)\r\n\r\n\t\tif (searchURL) {\r\n\t\t\tlet apiSettings = typeof options.apiSettings == 'object' ? options.apiSettings : {}\r\n\t\t\tconst URLSearch = new URL(searchURL)\r\n\t\t\tURLSearch.searchParams.set('search', 'SEARCH_QUERY')\r\n\t\t\tapiSettings.url = URLSearch.href.replace('SEARCH_QUERY', '{query}')\r\n\t\t\toptions.apiSettings = apiSettings\r\n\t\t\toptions.apiSettings.cache = cacheOnAPI === true ? true : false\r\n\t\t}\r\n\r\n\t\tlet dropdown = null\r\n\r\n\t\t//Input para simular el error de validación\r\n\t\tlet uniqueID = generateUniqueID()\r\n\t\tlet selectSimulator = document.createElement('select')\r\n\t\tif (select.get(0).required) {\r\n\t\t\tselectSimulator.setAttribute('required', true)\r\n\t\t}\r\n\t\tselect.attr('data-simulator', uniqueID)\r\n\t\tselectSimulator.setAttribute('simulator', uniqueID)\r\n\t\tselectSimulator.setAttribute('style', [\r\n\t\t\t\"display: block !important;\",\r\n\t\t\t\"height: 0px !important;\",\r\n\t\t\t\"width: 0px !important;\",\r\n\t\t\t\"margin: 0px !important;\",\r\n\t\t\t\"padding: 0px !important;\",\r\n\t\t\t\"outline: none !important;\",\r\n\t\t\t\"border: none !important;\",\r\n\t\t].join(' '))\r\n\r\n\t\tlet onChange = function (value, text, $selectedItem) {\r\n\t\t\tlet selectValidator = document.querySelector(`select[simulator=\"${uniqueID}\"]`)\r\n\r\n\t\t\tif (Array.isArray(value)) {\r\n\r\n\t\t\t\tselectValidator.innerHTML = ''\r\n\t\t\t\tfor (let i of value) {\r\n\t\t\t\t\tif (typeof i == 'string' && i.length > 0 && selectValidator !== null) {\r\n\t\t\t\t\t\tselectValidator.innerHTML += ``\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\t\t\t\tif (typeof value == 'string' && value.length > 0 && selectValidator !== null) {\r\n\t\t\t\t\tselectValidator.innerHTML = ``\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (typeof options.onChange == 'function') {\r\n\t\t\tlet onChangeOption = options.onChange\r\n\t\t\toptions.onChange = function (value, text, $selectedItem) {\r\n\t\t\t\tonChange(value, text, $selectedItem)\r\n\t\t\t\tonChangeOption(value, text, $selectedItem)\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\toptions.onChange = onChange\r\n\t\t}\r\n\r\n\t\tdropdown = $(select).dropdown(options)\r\n\t\tdropdown.getText = function (value, text = null) {\r\n\t\t\treturn dropdown.dropdown('get text')\r\n\t\t}\r\n\t\tdropdown.getValue = function (value, text = null) {\r\n\t\t\treturn dropdown.dropdown('get value')\r\n\t\t}\r\n\t\tdropdown.setValue = function (value, text = null) {\r\n\t\t\tif (text !== null) {\r\n\t\t\t\tdropdown.dropdown('set value', value)\r\n\t\t\t\tdropdown.dropdown('set text', text)\r\n\t\t\t\tdropdown.dropdown('set selected', value)\r\n\t\t\t\tdropdown.dropdown('refresh')\r\n\t\t\t} else {\r\n\t\t\t\tdropdown.dropdown('set selected', value)\r\n\t\t\t\tdropdown.dropdown('refresh')\r\n\t\t\t}\r\n\t\t\tonChange(dropdown.dropdown('get value'), dropdown.dropdown('get text'))\r\n\t\t}\r\n\t\tdropdown.recreate = function (removeItems = false, searchURL = null, options = {}) {\r\n\r\n\t\t\tdropdown.simulatorNode.remove()\r\n\t\t\tconst recreated = $(originalSelectHTML)\r\n\r\n\t\t\tif (searchURL !== null) {\r\n\t\t\t\trecreated.attr('data-search-url', searchURL)\r\n\t\t\t}\r\n\r\n\t\t\tif (removeItems) {\r\n\t\t\t\trecreated.find('option').remove()\r\n\t\t\t}\r\n\r\n\t\t\tdropdown.replaceWith(recreated)\r\n\r\n\t\t\tconst optionsRecreate = Object.assign({}, defaultOptions)\r\n\r\n\t\t\tfor (const option in options) {\r\n\t\t\t\toptionsRecreate[option] = options[option]\r\n\t\t\t}\r\n\r\n\t\t\tdropdown = configFomanticDropdown(selectSelector, optionsRecreate)[0]\r\n\r\n\t\t}\r\n\t\tdropdown.getOriginalSelect = function () {\r\n\t\t\treturn $(originalSelectHTML)\r\n\t\t}\r\n\r\n\t\t//Duplicar los atributos data-* en el dropdown\r\n\t\tconst originalSelect = $(originalSelectHTML)\r\n\t\tconst originalDataSet = originalSelect.get(0).dataset\r\n\r\n\t\tfor (const dataName in originalDataSet) {\r\n\t\t\tconst dataValue = originalDataSet[dataName]\r\n\t\t\tdropdown.get(0).dataset[dataName] = dataValue\r\n\t\t}\r\n\r\n\t\t//Añadir input para simular el error de validación\r\n\t\tdropdown.simulatorNode = dropdown.parent().get(0).insertBefore(selectSimulator, dropdown.get(0))\r\n\t\tdropdowns.push(dropdown)\r\n\t\tonChange(dropdown.dropdown('get value'), dropdown.dropdown('get text'))\r\n\r\n\t}\r\n\r\n\treturn dropdowns\r\n}\r\n\r\n/**\r\n * @param {$} dropdown \r\n * @param {Boolean} [required] \r\n * @param {Boolea} [hideOnNoRequire] \r\n */\r\nfunction toggleRequiredSemanticDropdown(dropdown, required = true, hideOnNoRequire = false) {\r\n\tlet mainSelect = dropdown.find('select')\r\n\tlet simulatorSelect = $(`select[simulator=\"${mainSelect.attr('data-simulator')}\"]`)\r\n\tsimulatorSelect.val('')\r\n\tdropdown.dropdown('restore defaults', '')\r\n\tdropdown.dropdown('refresh', '')\r\n\tdropdown.dropdown('set value', '')\r\n\tif (required) {\r\n\t\tmainSelect.attr('required', true)\r\n\t\tsimulatorSelect.attr('required', true)\r\n\t\tif (!dropdown.closest('.field').is(':visible')) {\r\n\t\t\tdropdown.closest('.field').show()\r\n\t\t}\r\n\t} else {\r\n\t\tmainSelect.removeAttr('required')\r\n\t\tsimulatorSelect.removeAttr('required')\r\n\t\tif (hideOnNoRequire) {\r\n\t\t\tdropdown.closest('.field').hide()\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * @param {$} input \r\n * @param {Boolean} [required] \r\n * @param {Boolea} [hideOnNoRequire] \r\n * @param {Boolea} [disableOnNoRequire] \r\n */\r\nfunction toggleRequiredSemanticInput(input, required = true, hideOnNoRequire = false, disableOnNoRequire = false) {\r\n\r\n\tlet prevValue = input.attr('data-prev-value')\r\n\tprevValue = typeof prevValue == 'string' && prevValue.trim().length > 0 ? prevValue : input.val()\r\n\r\n\tinput.attr('data-prev-value', prevValue)\r\n\r\n\tlet fieldContainer = input.closest('.field')\r\n\r\n\tif (required) {\r\n\t\tinput.attr('required', true)\r\n\t\tinput.val(prevValue)\r\n\t\tif (!fieldContainer.is(':visible')) {\r\n\t\t\tfieldContainer.show()\r\n\t\t}\r\n\t\tfieldContainer.removeClass('disabled')\r\n\t\tinput.removeAttr('disabled')\r\n\t} else {\r\n\t\tinput.removeAttr('required')\r\n\t\tinput.val('')\r\n\t\tif (hideOnNoRequire) {\r\n\t\t\tfieldContainer.hide()\r\n\t\t}\r\n\t\tif (disableOnNoRequire) {\r\n\t\t\tfieldContainer.addClass('disabled')\r\n\t\t\tinput.attr('disabled', true)\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * @param {$} dropdown \r\n * @param {String} value \r\n * @param {String} text \r\n */\r\nfunction changeValueSemanticDropdown(dropdown, value, text = null) {\r\n\tif (text !== null) {\r\n\t\tdropdown.dropdown('set value', value)\r\n\t\tdropdown.dropdown('set text', text)\r\n\t\tdropdown.dropdown('set selected', value)\r\n\t\tdropdown.dropdown('refresh')\r\n\t} else {\r\n\t\tdropdown.dropdown('set selected', value)\r\n\t\tdropdown.dropdown('refresh')\r\n\t}\r\n}\r\n\r\n/**\r\n * Simplifica una fracción\r\n * @param {Numbar} numerator \r\n * @param {Numbar} denominator \r\n * @returns {Object} Un objeto con las promiedades numerator, denominator\r\n */\r\nfunction simplify(numerator, denominator) {\r\n\r\n\tfor (var i = Math.max(numerator, denominator); i > 1; i--) {\r\n\r\n\t\tif ((numerator % i == 0) && (denominator % i == 0)) {\r\n\t\t\tnumerator /= i\r\n\t\t\tdenominator /= i\r\n\t\t}\r\n\r\n\t}\r\n\r\n\treturn {\r\n\t\tnumerator: numerator,\r\n\t\tdenominator: denominator,\r\n\t}\r\n}\r\n\r\n/**\r\n * @param {$} element\r\n * @returns {Boolean}\r\n */\r\nfunction visibleInViewPort(element) {\r\n\tconst elementTop = element.offset().top\r\n\tconst elementBottom = elementTop + element.outerHeight()\r\n\tconst viewportTop = $(window).scrollTop()\r\n\tconst viewportBottom = viewportTop + $(window).height()\r\n\treturn elementBottom > viewportTop && elementTop < viewportBottom\r\n}\r\n"]}