vendor: 1,702 bytes, lines 1-34
1"use strict"; 2(() => { 3 var __create = Object.create; 4 var __defProp = Object.defineProperty; 5 var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 6 var __getOwnPropNames = Object.getOwnPropertyNames; 7 var __getProtoOf = Object.getPrototypeOf; 8 var __hasOwnProp = Object.prototype.hasOwnProperty; 9 var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; 10 var __commonJS = (cb, mod) => function __require() { 11 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; 12 }; 13 var __copyProps = (to, from, except, desc) => { 14 if (from && typeof from === "object" || typeof from === "function") { 15 for (let key of __getOwnPropNames(from)) 16 if (!__hasOwnProp.call(to, key) && key !== except) 17 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 18 } 19 return to; 20 }; 21 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( 22 // If the importer is in node compatibility mode or this is not an ESM 23 // file that has been converted to a CommonJS file using a Babel- 24 // compatible transform (i.e. "__esModule" has not been set), then set 25 // "default" to the CommonJS "module.exports" for node compatibility. 26 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, 27 mod 28 )); 29 var __publicField = (obj, key, value) => { 30 __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); 31 return value; 32 }; 33 34
vendor: 34,172 bytes, lines 34-904
34// ../../../node_modules/lodash.groupby/index.js 35 var require_lodash = __commonJS({ 36 "../../../node_modules/lodash.groupby/index.js"(exports, module) { 37 var LARGE_ARRAY_SIZE = 200; 38 var FUNC_ERROR_TEXT = "Expected a function"; 39 var HASH_UNDEFINED = "__lodash_hash_undefined__"; 40 var UNORDERED_COMPARE_FLAG = 1; 41 var PARTIAL_COMPARE_FLAG = 2; 42 var INFINITY = 1 / 0; 43 var MAX_SAFE_INTEGER = 9007199254740991; 44 var argsTag = "[object Arguments]"; 45 var arrayTag = "[object Array]"; 46 var boolTag = "[object Boolean]"; 47 var dateTag = "[object Date]"; 48 var errorTag = "[object Error]"; 49 var funcTag = "[object Function]"; 50 var genTag = "[object GeneratorFunction]"; 51 var mapTag = "[object Map]"; 52 var numberTag = "[object Number]"; 53 var objectTag = "[object Object]"; 54 var promiseTag = "[object Promise]"; 55 var regexpTag = "[object RegExp]"; 56 var setTag = "[object Set]"; 57 var stringTag = "[object String]"; 58 var symbolTag = "[object Symbol]"; 59 var weakMapTag = "[object WeakMap]"; 60 var arrayBufferTag = "[object ArrayBuffer]"; 61 var dataViewTag = "[object DataView]"; 62 var float32Tag = "[object Float32Array]"; 63 var float64Tag = "[object Float64Array]"; 64 var int8Tag = "[object Int8Array]"; 65 var int16Tag = "[object Int16Array]"; 66 var int32Tag = "[object Int32Array]"; 67 var uint8Tag = "[object Uint8Array]"; 68 var uint8ClampedTag = "[object Uint8ClampedArray]"; 69 var uint16Tag = "[object Uint16Array]"; 70 var uint32Tag = "[object Uint32Array]"; 71 var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/; 72 var reIsPlainProp = /^\w*$/; 73 var reLeadingDot = /^\./; 74 var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; 75 var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; 76 var reEscapeChar = /\\(\\)?/g; 77 var reIsHostCtor = /^\[object .+?Constructor\]$/; 78 var reIsUint = /^(?:0|[1-9]\d*)$/; 79 var typedArrayTags = {}; 80 typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; 81 typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; 82 var freeGlobal = typeof global == "object" && global && global.Object === Object && global; 83 var freeSelf = typeof self == "object" && self && self.Object === Object && self; 84 var root = freeGlobal || freeSelf || Function("return this")(); 85 var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports; 86 var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module; 87 var moduleExports = freeModule && freeModule.exports === freeExports; 88 var freeProcess = moduleExports && freeGlobal.process; 89 var nodeUtil = function() { 90 try { 91 return freeProcess && freeProcess.binding("util"); 92 } catch (e) { 93 } 94 }(); 95 var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; 96 function arrayAggregator(array, setter, iteratee, accumulator) { 97 var index = -1, length = array ? array.length : 0; 98 while (++index < length) { 99 var value = array[index]; 100 setter(accumulator, value, iteratee(value), array); 101 } 102 return accumulator; 103 } 104 function arraySome(array, predicate) { 105 var index = -1, length = array ? array.length : 0; 106 while (++index < length) { 107 if (predicate(array[index], index, array)) { 108 return true; 109 } 110 } 111 return false; 112 } 113 function baseProperty(key) { 114 return function(object) { 115 return object == null ? void 0 : object[key]; 116 }; 117 } 118 function baseTimes(n, iteratee) { 119 var index = -1, result = Array(n); 120 while (++index < n) { 121 result[index] = iteratee(index); 122 } 123 return result; 124 } 125 function baseUnary(func) { 126 return function(value) { 127 return func(value); 128 }; 129 } 130 function getValue(object, key) { 131 return object == null ? void 0 : object[key]; 132 } 133 function isHostObject(value) { 134 var result = false; 135 if (value != null && typeof value.toString != "function") { 136 try { 137 result = !!(value + ""); 138 } catch (e) { 139 } 140 } 141 return result; 142 } 143 function mapToArray(map) { 144 var index = -1, result = Array(map.size); 145 map.forEach(function(value, key) { 146 result[++index] = [key, value]; 147 }); 148 return result; 149 } 150 function overArg(func, transform) { 151 return function(arg) { 152 return func(transform(arg)); 153 }; 154 } 155 function setToArray(set) { 156 var index = -1, result = Array(set.size); 157 set.forEach(function(value) { 158 result[++index] = value; 159 }); 160 return result; 161 } 162 var arrayProto = Array.prototype; 163 var funcProto = Function.prototype; 164 var objectProto = Object.prototype; 165 var coreJsData = root["__core-js_shared__"]; 166 var maskSrcKey = function() { 167 var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ""); 168 return uid ? "Symbol(src)_1." + uid : ""; 169 }(); 170 var funcToString = funcProto.toString; 171 var hasOwnProperty = objectProto.hasOwnProperty; 172 var objectToString = objectProto.toString; 173 var reIsNative = RegExp( 174 "^" + funcToString.call(hasOwnProperty).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" 175 ); 176 var Symbol2 = root.Symbol; 177 var Uint8Array2 = root.Uint8Array; 178 var propertyIsEnumerable = objectProto.propertyIsEnumerable; 179 var splice = arrayProto.splice; 180 var nativeKeys = overArg(Object.keys, Object); 181 var DataView = getNative(root, "DataView"); 182 var Map2 = getNative(root, "Map"); 183 var Promise2 = getNative(root, "Promise"); 184 var Set2 = getNative(root, "Set"); 185 var WeakMap2 = getNative(root, "WeakMap"); 186 var nativeCreate = getNative(Object, "create"); 187 var dataViewCtorString = toSource(DataView); 188 var mapCtorString = toSource(Map2); 189 var promiseCtorString = toSource(Promise2); 190 var setCtorString = toSource(Set2); 191 var weakMapCtorString = toSource(WeakMap2); 192 var symbolProto = Symbol2 ? Symbol2.prototype : void 0; 193 var symbolValueOf = symbolProto ? symbolProto.valueOf : void 0; 194 var symbolToString = symbolProto ? symbolProto.toString : void 0; 195 function Hash(entries) { 196 var index = -1, length = entries ? entries.length : 0; 197 this.clear(); 198 while (++index < length) { 199 var entry = entries[index]; 200 this.set(entry[0], entry[1]); 201 } 202 } 203 function hashClear() { 204 this.__data__ = nativeCreate ? nativeCreate(null) : {}; 205 } 206 function hashDelete(key) { 207 return this.has(key) && delete this.__data__[key]; 208 } 209 function hashGet(key) { 210 var data = this.__data__; 211 if (nativeCreate) { 212 var result = data[key]; 213 return result === HASH_UNDEFINED ? void 0 : result; 214 } 215 return hasOwnProperty.call(data, key) ? data[key] : void 0; 216 } 217 function hashHas(key) { 218 var data = this.__data__; 219 return nativeCreate ? data[key] !== void 0 : hasOwnProperty.call(data, key); 220 } 221 function hashSet(key, value) { 222 var data = this.__data__; 223 data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value; 224 return this; 225 } 226 Hash.prototype.clear = hashClear; 227 Hash.prototype["delete"] = hashDelete; 228 Hash.prototype.get = hashGet; 229 Hash.prototype.has = hashHas; 230 Hash.prototype.set = hashSet; 231 function ListCache(entries) { 232 var index = -1, length = entries ? entries.length : 0; 233 this.clear(); 234 while (++index < length) { 235 var entry = entries[index]; 236 this.set(entry[0], entry[1]); 237 } 238 } 239 function listCacheClear() { 240 this.__data__ = []; 241 } 242 function listCacheDelete(key) { 243 var data = this.__data__, index = assocIndexOf(data, key); 244 if (index < 0) { 245 return false; 246 } 247 var lastIndex = data.length - 1; 248 if (index == lastIndex) { 249 data.pop(); 250 } else { 251 splice.call(data, index, 1); 252 } 253 return true; 254 } 255 function listCacheGet(key) { 256 var data = this.__data__, index = assocIndexOf(data, key); 257 return index < 0 ? void 0 : data[index][1]; 258 } 259 function listCacheHas(key) { 260 return assocIndexOf(this.__data__, key) > -1; 261 } 262 function listCacheSet(key, value) { 263 var data = this.__data__, index = assocIndexOf(data, key); 264 if (index < 0) { 265 data.push([key, value]); 266 } else { 267 data[index][1] = value; 268 } 269 return this; 270 } 271 ListCache.prototype.clear = listCacheClear; 272 ListCache.prototype["delete"] = listCacheDelete; 273 ListCache.prototype.get = listCacheGet; 274 ListCache.prototype.has = listCacheHas; 275 ListCache.prototype.set = listCacheSet; 276 function MapCache(entries) { 277 var index = -1, length = entries ? entries.length : 0; 278 this.clear(); 279 while (++index < length) { 280 var entry = entries[index]; 281 this.set(entry[0], entry[1]); 282 } 283 } 284 function mapCacheClear() { 285 this.__data__ = { 286 "hash": new Hash(), 287 "map": new (Map2 || ListCache)(), 288 "string": new Hash() 289 }; 290 } 291 function mapCacheDelete(key) { 292 return getMapData(this, key)["delete"](key); 293 } 294 function mapCacheGet(key) { 295 return getMapData(this, key).get(key); 296 } 297 function mapCacheHas(key) { 298 return getMapData(this, key).has(key); 299 } 300 function mapCacheSet(key, value) { 301 getMapData(this, key).set(key, value); 302 return this; 303 } 304 MapCache.prototype.clear = mapCacheClear; 305 MapCache.prototype["delete"] = mapCacheDelete; 306 MapCache.prototype.get = mapCacheGet; 307 MapCache.prototype.has = mapCacheHas; 308 MapCache.prototype.set = mapCacheSet; 309 function SetCache(values) { 310 var index = -1, length = values ? values.length : 0; 311 this.__data__ = new MapCache(); 312 while (++index < length) { 313 this.add(values[index]); 314 } 315 } 316 function setCacheAdd(value) { 317 this.__data__.set(value, HASH_UNDEFINED); 318 return this; 319 } 320 function setCacheHas(value) { 321 return this.__data__.has(value); 322 } 323 SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; 324 SetCache.prototype.has = setCacheHas; 325 function Stack(entries) { 326 this.__data__ = new ListCache(entries); 327 } 328 function stackClear() { 329 this.__data__ = new ListCache(); 330 } 331 function stackDelete(key) { 332 return this.__data__["delete"](key); 333 } 334 function stackGet(key) { 335 return this.__data__.get(key); 336 } 337 function stackHas(key) { 338 return this.__data__.has(key); 339 } 340 function stackSet(key, value) { 341 var cache = this.__data__; 342 if (cache instanceof ListCache) { 343 var pairs = cache.__data__; 344 if (!Map2 || pairs.length < LARGE_ARRAY_SIZE - 1) { 345 pairs.push([key, value]); 346 return this; 347 } 348 cache = this.__data__ = new MapCache(pairs); 349 } 350 cache.set(key, value); 351 return this; 352 } 353 Stack.prototype.clear = stackClear; 354 Stack.prototype["delete"] = stackDelete; 355 Stack.prototype.get = stackGet; 356 Stack.prototype.has = stackHas; 357 Stack.prototype.set = stackSet; 358 function arrayLikeKeys(value, inherited) { 359 var result = isArray(value) || isArguments(value) ? baseTimes(value.length, String) : []; 360 var length = result.length, skipIndexes = !!length; 361 for (var key in value) { 362 if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && (key == "length" || isIndex(key, length)))) { 363 result.push(key); 364 } 365 } 366 return result; 367 } 368 function assocIndexOf(array, key) { 369 var length = array.length; 370 while (length--) { 371 if (eq(array[length][0], key)) { 372 return length; 373 } 374 } 375 return -1; 376 } 377 function baseAggregator(collection, setter, iteratee, accumulator) { 378 baseEach(collection, function(value, key, collection2) { 379 setter(accumulator, value, iteratee(value), collection2); 380 }); 381 return accumulator; 382 } 383 var baseEach = createBaseEach(baseForOwn); 384 var baseFor = createBaseFor(); 385 function baseForOwn(object, iteratee) { 386 return object && baseFor(object, iteratee, keys); 387 } 388 function baseGet(object, path) { 389 path = isKey(path, object) ? [path] : castPath(path); 390 var index = 0, length = path.length; 391 while (object != null && index < length) { 392 object = object[toKey(path[index++])]; 393 } 394 return index && index == length ? object : void 0; 395 } 396 function baseGetTag(value) { 397 return objectToString.call(value); 398 } 399 function baseHasIn(object, key) { 400 return object != null && key in Object(object); 401 } 402 function baseIsEqual(value, other, customizer, bitmask, stack) { 403 if (value === other) { 404 return true; 405 } 406 if (value == null || other == null || !isObject2(value) && !isObjectLike(other)) { 407 return value !== value && other !== other; 408 } 409 return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); 410 } 411 function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { 412 var objIsArr = isArray(object), othIsArr = isArray(other), objTag = arrayTag, othTag = arrayTag; 413 if (!objIsArr) { 414 objTag = getTag(object); 415 objTag = objTag == argsTag ? objectTag : objTag; 416 } 417 if (!othIsArr) { 418 othTag = getTag(other); 419 othTag = othTag == argsTag ? objectTag : othTag; 420 } 421 var objIsObj = objTag == objectTag && !isHostObject(object), othIsObj = othTag == objectTag && !isHostObject(other), isSameTag = objTag == othTag; 422 if (isSameTag && !objIsObj) { 423 stack || (stack = new Stack()); 424 return objIsArr || isTypedArray(object) ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); 425 } 426 if (!(bitmask & PARTIAL_COMPARE_FLAG)) { 427 var objIsWrapped = objIsObj && hasOwnProperty.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other, "__wrapped__"); 428 if (objIsWrapped || othIsWrapped) { 429 var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; 430 stack || (stack = new Stack()); 431 return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); 432 } 433 } 434 if (!isSameTag) { 435 return false; 436 } 437 stack || (stack = new Stack()); 438 return equalObjects(object, other, equalFunc, customizer, bitmask, stack); 439 } 440 function baseIsMatch(object, source, matchData, customizer) { 441 var index = matchData.length, length = index, noCustomizer = !customizer; 442 if (object == null) { 443 return !length; 444 } 445 object = Object(object); 446 while (index--) { 447 var data = matchData[index]; 448 if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) { 449 return false; 450 } 451 } 452 while (++index < length) { 453 data = matchData[index]; 454 var key = data[0], objValue = object[key], srcValue = data[1]; 455 if (noCustomizer && data[2]) { 456 if (objValue === void 0 && !(key in object)) { 457 return false; 458 } 459 } else { 460 var stack = new Stack(); 461 if (customizer) { 462 var result = customizer(objValue, srcValue, key, object, source, stack); 463 } 464 if (!(result === void 0 ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) : result)) { 465 return false; 466 } 467 } 468 } 469 return true; 470 } 471 function baseIsNative(value) { 472 if (!isObject2(value) || isMasked(value)) { 473 return false; 474 } 475 var pattern = isFunction(value) || isHostObject(value) ? reIsNative : reIsHostCtor; 476 return pattern.test(toSource(value)); 477 } 478 function baseIsTypedArray(value) { 479 return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; 480 } 481 function baseIteratee(value) { 482 if (typeof value == "function") { 483 return value; 484 } 485 if (value == null) { 486 return identity; 487 } 488 if (typeof value == "object") { 489 return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); 490 } 491 return property(value); 492 } 493 function baseKeys(object) { 494 if (!isPrototype(object)) { 495 return nativeKeys(object); 496 } 497 var result = []; 498 for (var key in Object(object)) { 499 if (hasOwnProperty.call(object, key) && key != "constructor") { 500 result.push(key); 501 } 502 } 503 return result; 504 } 505 function baseMatches(source) { 506 var matchData = getMatchData(source); 507 if (matchData.length == 1 && matchData[0][2]) { 508 return matchesStrictComparable(matchData[0][0], matchData[0][1]); 509 } 510 return function(object) { 511 return object === source || baseIsMatch(object, source, matchData); 512 }; 513 } 514 function baseMatchesProperty(path, srcValue) { 515 if (isKey(path) && isStrictComparable(srcValue)) { 516 return matchesStrictComparable(toKey(path), srcValue); 517 } 518 return function(object) { 519 var objValue = get(object, path); 520 return objValue === void 0 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, void 0, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); 521 }; 522 } 523 function basePropertyDeep(path) { 524 return function(object) { 525 return baseGet(object, path); 526 }; 527 } 528 function baseToString(value) { 529 if (typeof value == "string") { 530 return value; 531 } 532 if (isSymbol(value)) { 533 return symbolToString ? symbolToString.call(value) : ""; 534 } 535 var result = value + ""; 536 return result == "0" && 1 / value == -INFINITY ? "-0" : result; 537 } 538 function castPath(value) { 539 return isArray(value) ? value : stringToPath(value); 540 } 541 function createAggregator(setter, initializer) { 542 return function(collection, iteratee) { 543 var func = isArray(collection) ? arrayAggregator : baseAggregator, accumulator = initializer ? initializer() : {}; 544 return func(collection, setter, baseIteratee(iteratee, 2), accumulator); 545 }; 546 } 547 function createBaseEach(eachFunc, fromRight) { 548 return function(collection, iteratee) { 549 if (collection == null) { 550 return collection; 551 } 552 if (!isArrayLike2(collection)) { 553 return eachFunc(collection, iteratee); 554 } 555 var length = collection.length, index = fromRight ? length : -1, iterable = Object(collection); 556 while (fromRight ? index-- : ++index < length) { 557 if (iteratee(iterable[index], index, iterable) === false) { 558 break; 559 } 560 } 561 return collection; 562 }; 563 } 564 function createBaseFor(fromRight) { 565 return function(object, iteratee, keysFunc) { 566 var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; 567 while (length--) { 568 var key = props[fromRight ? length : ++index]; 569 if (iteratee(iterable[key], key, iterable) === false) { 570 break; 571 } 572 } 573 return object; 574 }; 575 } 576 function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { 577 var isPartial = bitmask & PARTIAL_COMPARE_FLAG, arrLength = array.length, othLength = other.length; 578 if (arrLength != othLength && !(isPartial && othLength > arrLength)) { 579 return false; 580 } 581 var stacked = stack.get(array); 582 if (stacked && stack.get(other)) { 583 return stacked == other; 584 } 585 var index = -1, result = true, seen = bitmask & UNORDERED_COMPARE_FLAG ? new SetCache() : void 0; 586 stack.set(array, other); 587 stack.set(other, array); 588 while (++index < arrLength) { 589 var arrValue = array[index], othValue = other[index]; 590 if (customizer) { 591 var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); 592 } 593 if (compared !== void 0) { 594 if (compared) { 595 continue; 596 } 597 result = false; 598 break; 599 } 600 if (seen) { 601 if (!arraySome(other, function(othValue2, othIndex) { 602 if (!seen.has(othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, customizer, bitmask, stack))) { 603 return seen.add(othIndex); 604 } 605 })) { 606 result = false; 607 break; 608 } 609 } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { 610 result = false; 611 break; 612 } 613 } 614 stack["delete"](array); 615 stack["delete"](other); 616 return result; 617 } 618 function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { 619 switch (tag) { 620 case dataViewTag: 621 if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { 622 return false; 623 } 624 object = object.buffer; 625 other = other.buffer; 626 case arrayBufferTag: 627 if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array2(object), new Uint8Array2(other))) { 628 return false; 629 } 630 return true; 631 case boolTag: 632 case dateTag: 633 case numberTag: 634 return eq(+object, +other); 635 case errorTag: 636 return object.name == other.name && object.message == other.message; 637 case regexpTag: 638 case stringTag: 639 return object == other + ""; 640 case mapTag: 641 var convert = mapToArray; 642 case setTag: 643 var isPartial = bitmask & PARTIAL_COMPARE_FLAG; 644 convert || (convert = setToArray); 645 if (object.size != other.size && !isPartial) { 646 return false; 647 } 648 var stacked = stack.get(object); 649 if (stacked) { 650 return stacked == other; 651 } 652 bitmask |= UNORDERED_COMPARE_FLAG; 653 stack.set(object, other); 654 var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack); 655 stack["delete"](object); 656 return result; 657 case symbolTag: 658 if (symbolValueOf) { 659 return symbolValueOf.call(object) == symbolValueOf.call(other); 660 } 661 } 662 return false; 663 } 664 function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { 665 var isPartial = bitmask & PARTIAL_COMPARE_FLAG, objProps = keys(object), objLength = objProps.length, othProps = keys(other), othLength = othProps.length; 666 if (objLength != othLength && !isPartial) { 667 return false; 668 } 669 var index = objLength; 670 while (index--) { 671 var key = objProps[index]; 672 if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { 673 return false; 674 } 675 } 676 var stacked = stack.get(object); 677 if (stacked && stack.get(other)) { 678 return stacked == other; 679 } 680 var result = true; 681 stack.set(object, other); 682 stack.set(other, object); 683 var skipCtor = isPartial; 684 while (++index < objLength) { 685 key = objProps[index]; 686 var objValue = object[key], othValue = other[key]; 687 if (customizer) { 688 var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); 689 } 690 if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack) : compared)) { 691 result = false; 692 break; 693 } 694 skipCtor || (skipCtor = key == "constructor"); 695 } 696 if (result && !skipCtor) { 697 var objCtor = object.constructor, othCtor = other.constructor; 698 if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) { 699 result = false; 700 } 701 } 702 stack["delete"](object); 703 stack["delete"](other); 704 return result; 705 } 706 function getMapData(map, key) { 707 var data = map.__data__; 708 return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map; 709 } 710 function getMatchData(object) { 711 var result = keys(object), length = result.length; 712 while (length--) { 713 var key = result[length], value = object[key]; 714 result[length] = [key, value, isStrictComparable(value)]; 715 } 716 return result; 717 } 718 function getNative(object, key) { 719 var value = getValue(object, key); 720 return baseIsNative(value) ? value : void 0; 721 } 722 var getTag = baseGetTag; 723 if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map2 && getTag(new Map2()) != mapTag || Promise2 && getTag(Promise2.resolve()) != promiseTag || Set2 && getTag(new Set2()) != setTag || WeakMap2 && getTag(new WeakMap2()) != weakMapTag) { 724 getTag = function(value) { 725 var result = objectToString.call(value), Ctor = result == objectTag ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : void 0; 726 if (ctorString) { 727 switch (ctorString) { 728 case dataViewCtorString: 729 return dataViewTag; 730 case mapCtorString: 731 return mapTag; 732 case promiseCtorString: 733 return promiseTag; 734 case setCtorString: 735 return setTag; 736 case weakMapCtorString: 737 return weakMapTag; 738 } 739 } 740 return result; 741 }; 742 } 743 function hasPath(object, path, hasFunc) { 744 path = isKey(path, object) ? [path] : castPath(path); 745 var result, index = -1, length = path.length; 746 while (++index < length) { 747 var key = toKey(path[index]); 748 if (!(result = object != null && hasFunc(object, key))) { 749 break; 750 } 751 object = object[key]; 752 } 753 if (result) { 754 return result; 755 } 756 var length = object ? object.length : 0; 757 return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object)); 758 } 759 function isIndex(value, length) { 760 length = length == null ? MAX_SAFE_INTEGER : length; 761 return !!length && (typeof value == "number" || reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length); 762 } 763 function isKey(value, object) { 764 if (isArray(value)) { 765 return false; 766 } 767 var type = typeof value; 768 if (type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol(value)) { 769 return true; 770 } 771 return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object); 772 } 773 function isKeyable(value) { 774 var type = typeof value; 775 return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null; 776 } 777 function isMasked(func) { 778 return !!maskSrcKey && maskSrcKey in func; 779 } 780 function isPrototype(value) { 781 var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto; 782 return value === proto; 783 } 784 function isStrictComparable(value) { 785 return value === value && !isObject2(value); 786 } 787 function matchesStrictComparable(key, srcValue) { 788 return function(object) { 789 if (object == null) { 790 return false; 791 } 792 return object[key] === srcValue && (srcValue !== void 0 || key in Object(object)); 793 }; 794 } 795 var stringToPath = memoize2(function(string) { 796 string = toString(string); 797 var result = []; 798 if (reLeadingDot.test(string)) { 799 result.push(""); 800 } 801 string.replace(rePropName, function(match, number, quote, string2) { 802 result.push(quote ? string2.replace(reEscapeChar, "$1") : number || match); 803 }); 804 return result; 805 }); 806 function toKey(value) { 807 if (typeof value == "string" || isSymbol(value)) { 808 return value; 809 } 810 var result = value + ""; 811 return result == "0" && 1 / value == -INFINITY ? "-0" : result; 812 } 813 function toSource(func) { 814 if (func != null) { 815 try { 816 return funcToString.call(func); 817 } catch (e) { 818 } 819 try { 820 return func + ""; 821 } catch (e) { 822 } 823 } 824 return ""; 825 } 826 var groupBy2 = createAggregator(function(result, value, key) { 827 if (hasOwnProperty.call(result, key)) { 828 result[key].push(value); 829 } else { 830 result[key] = [value]; 831 } 832 }); 833 function memoize2(func, resolver) { 834 if (typeof func != "function" || resolver && typeof resolver != "function") { 835 throw new TypeError(FUNC_ERROR_TEXT); 836 } 837 var memoized = function() { 838 var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; 839 if (cache.has(key)) { 840 return cache.get(key); 841 } 842 var result = func.apply(this, args); 843 memoized.cache = cache.set(key, result); 844 return result; 845 }; 846 memoized.cache = new (memoize2.Cache || MapCache)(); 847 return memoized; 848 } 849 memoize2.Cache = MapCache; 850 function eq(value, other) { 851 return value === other || value !== value && other !== other; 852 } 853 function isArguments(value) { 854 return isArrayLikeObject(value) && hasOwnProperty.call(value, "callee") && (!propertyIsEnumerable.call(value, "callee") || objectToString.call(value) == argsTag); 855 } 856 var isArray = Array.isArray; 857 function isArrayLike2(value) { 858 return value != null && isLength(value.length) && !isFunction(value); 859 } 860 function isArrayLikeObject(value) { 861 return isObjectLike(value) && isArrayLike2(value); 862 } 863 function isFunction(value) { 864 var tag = isObject2(value) ? objectToString.call(value) : ""; 865 return tag == funcTag || tag == genTag; 866 } 867 function isLength(value) { 868 return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; 869 } 870 function isObject2(value) { 871 var type = typeof value; 872 return !!value && (type == "object" || type == "function"); 873 } 874 function isObjectLike(value) { 875 return !!value && typeof value == "object"; 876 } 877 function isSymbol(value) { 878 return typeof value == "symbol" || isObjectLike(value) && objectToString.call(value) == symbolTag; 879 } 880 var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; 881 function toString(value) { 882 return value == null ? "" : baseToString(value); 883 } 884 function get(object, path, defaultValue) { 885 var result = object == null ? void 0 : baseGet(object, path); 886 return result === void 0 ? defaultValue : result; 887 } 888 function hasIn(object, path) { 889 return object != null && hasPath(object, path, baseHasIn); 890 } 891 function keys(object) { 892 return isArrayLike2(object) ? arrayLikeKeys(object) : baseKeys(object); 893 } 894 function identity(value) { 895 return value; 896 } 897 function property(path) { 898 return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); 899 } 900 module.exports = groupBy2; 901 } 902 }); 903 904
vendor: 27,968 bytes, lines 904-1605
904// ../../../node_modules/lodash.isequal/index.js 905 var require_lodash2 = __commonJS({ 906 "../../../node_modules/lodash.isequal/index.js"(exports, module) { 907 var LARGE_ARRAY_SIZE = 200; 908 var HASH_UNDEFINED = "__lodash_hash_undefined__"; 909 var COMPARE_PARTIAL_FLAG = 1; 910 var COMPARE_UNORDERED_FLAG = 2; 911 var MAX_SAFE_INTEGER = 9007199254740991; 912 var argsTag = "[object Arguments]"; 913 var arrayTag = "[object Array]"; 914 var asyncTag = "[object AsyncFunction]"; 915 var boolTag = "[object Boolean]"; 916 var dateTag = "[object Date]"; 917 var errorTag = "[object Error]"; 918 var funcTag = "[object Function]"; 919 var genTag = "[object GeneratorFunction]"; 920 var mapTag = "[object Map]"; 921 var numberTag = "[object Number]"; 922 var nullTag = "[object Null]"; 923 var objectTag = "[object Object]"; 924 var promiseTag = "[object Promise]"; 925 var proxyTag = "[object Proxy]"; 926 var regexpTag = "[object RegExp]"; 927 var setTag = "[object Set]"; 928 var stringTag = "[object String]"; 929 var symbolTag = "[object Symbol]"; 930 var undefinedTag = "[object Undefined]"; 931 var weakMapTag = "[object WeakMap]"; 932 var arrayBufferTag = "[object ArrayBuffer]"; 933 var dataViewTag = "[object DataView]"; 934 var float32Tag = "[object Float32Array]"; 935 var float64Tag = "[object Float64Array]"; 936 var int8Tag = "[object Int8Array]"; 937 var int16Tag = "[object Int16Array]"; 938 var int32Tag = "[object Int32Array]"; 939 var uint8Tag = "[object Uint8Array]"; 940 var uint8ClampedTag = "[object Uint8ClampedArray]"; 941 var uint16Tag = "[object Uint16Array]"; 942 var uint32Tag = "[object Uint32Array]"; 943 var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; 944 var reIsHostCtor = /^\[object .+?Constructor\]$/; 945 var reIsUint = /^(?:0|[1-9]\d*)$/; 946 var typedArrayTags = {}; 947 typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; 948 typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; 949 var freeGlobal = typeof global == "object" && global && global.Object === Object && global; 950 var freeSelf = typeof self == "object" && self && self.Object === Object && self; 951 var root = freeGlobal || freeSelf || Function("return this")(); 952 var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports; 953 var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module; 954 var moduleExports = freeModule && freeModule.exports === freeExports; 955 var freeProcess = moduleExports && freeGlobal.process; 956 var nodeUtil = function() { 957 try { 958 return freeProcess && freeProcess.binding && freeProcess.binding("util"); 959 } catch (e) { 960 } 961 }(); 962 var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; 963 function arrayFilter(array, predicate) { 964 var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; 965 while (++index < length) { 966 var value = array[index]; 967 if (predicate(value, index, array)) { 968 result[resIndex++] = value; 969 } 970 } 971 return result; 972 } 973 function arrayPush(array, values) { 974 var index = -1, length = values.length, offset = array.length; 975 while (++index < length) { 976 array[offset + index] = values[index]; 977 } 978 return array; 979 } 980 function arraySome(array, predicate) { 981 var index = -1, length = array == null ? 0 : array.length; 982 while (++index < length) { 983 if (predicate(array[index], index, array)) { 984 return true; 985 } 986 } 987 return false; 988 } 989 function baseTimes(n, iteratee) { 990 var index = -1, result = Array(n); 991 while (++index < n) { 992 result[index] = iteratee(index); 993 } 994 return result; 995 } 996 function baseUnary(func) { 997 return function(value) { 998 return func(value); 999 }; 1000 } 1001 function cacheHas(cache, key) { 1002 return cache.has(key); 1003 } 1004 function getValue(object, key) { 1005 return object == null ? void 0 : object[key]; 1006 } 1007 function mapToArray(map) { 1008 var index = -1, result = Array(map.size); 1009 map.forEach(function(value, key) { 1010 result[++index] = [key, value]; 1011 }); 1012 return result; 1013 } 1014 function overArg(func, transform) { 1015 return function(arg) { 1016 return func(transform(arg)); 1017 }; 1018 } 1019 function setToArray(set) { 1020 var index = -1, result = Array(set.size); 1021 set.forEach(function(value) { 1022 result[++index] = value; 1023 }); 1024 return result; 1025 } 1026 var arrayProto = Array.prototype; 1027 var funcProto = Function.prototype; 1028 var objectProto = Object.prototype; 1029 var coreJsData = root["__core-js_shared__"]; 1030 var funcToString = funcProto.toString; 1031 var hasOwnProperty = objectProto.hasOwnProperty; 1032 var maskSrcKey = function() { 1033 var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ""); 1034 return uid ? "Symbol(src)_1." + uid : ""; 1035 }(); 1036 var nativeObjectToString = objectProto.toString; 1037 var reIsNative = RegExp( 1038 "^" + funcToString.call(hasOwnProperty).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" 1039 ); 1040 var Buffer2 = moduleExports ? root.Buffer : void 0; 1041 var Symbol2 = root.Symbol; 1042 var Uint8Array2 = root.Uint8Array; 1043 var propertyIsEnumerable = objectProto.propertyIsEnumerable; 1044 var splice = arrayProto.splice; 1045 var symToStringTag = Symbol2 ? Symbol2.toStringTag : void 0; 1046 var nativeGetSymbols = Object.getOwnPropertySymbols; 1047 var nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : void 0; 1048 var nativeKeys = overArg(Object.keys, Object); 1049 var DataView = getNative(root, "DataView"); 1050 var Map2 = getNative(root, "Map"); 1051 var Promise2 = getNative(root, "Promise"); 1052 var Set2 = getNative(root, "Set"); 1053 var WeakMap2 = getNative(root, "WeakMap"); 1054 var nativeCreate = getNative(Object, "create"); 1055 var dataViewCtorString = toSource(DataView); 1056 var mapCtorString = toSource(Map2); 1057 var promiseCtorString = toSource(Promise2); 1058 var setCtorString = toSource(Set2); 1059 var weakMapCtorString = toSource(WeakMap2); 1060 var symbolProto = Symbol2 ? Symbol2.prototype : void 0; 1061 var symbolValueOf = symbolProto ? symbolProto.valueOf : void 0; 1062 function Hash(entries) { 1063 var index = -1, length = entries == null ? 0 : entries.length; 1064 this.clear(); 1065 while (++index < length) { 1066 var entry = entries[index]; 1067 this.set(entry[0], entry[1]); 1068 } 1069 } 1070 function hashClear() { 1071 this.__data__ = nativeCreate ? nativeCreate(null) : {}; 1072 this.size = 0; 1073 } 1074 function hashDelete(key) { 1075 var result = this.has(key) && delete this.__data__[key]; 1076 this.size -= result ? 1 : 0; 1077 return result; 1078 } 1079 function hashGet(key) { 1080 var data = this.__data__; 1081 if (nativeCreate) { 1082 var result = data[key]; 1083 return result === HASH_UNDEFINED ? void 0 : result; 1084 } 1085 return hasOwnProperty.call(data, key) ? data[key] : void 0; 1086 } 1087 function hashHas(key) { 1088 var data = this.__data__; 1089 return nativeCreate ? data[key] !== void 0 : hasOwnProperty.call(data, key); 1090 } 1091 function hashSet(key, value) { 1092 var data = this.__data__; 1093 this.size += this.has(key) ? 0 : 1; 1094 data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value; 1095 return this; 1096 } 1097 Hash.prototype.clear = hashClear; 1098 Hash.prototype["delete"] = hashDelete; 1099 Hash.prototype.get = hashGet; 1100 Hash.prototype.has = hashHas; 1101 Hash.prototype.set = hashSet; 1102 function ListCache(entries) { 1103 var index = -1, length = entries == null ? 0 : entries.length; 1104 this.clear(); 1105 while (++index < length) { 1106 var entry = entries[index]; 1107 this.set(entry[0], entry[1]); 1108 } 1109 } 1110 function listCacheClear() { 1111 this.__data__ = []; 1112 this.size = 0; 1113 } 1114 function listCacheDelete(key) { 1115 var data = this.__data__, index = assocIndexOf(data, key); 1116 if (index < 0) { 1117 return false; 1118 } 1119 var lastIndex = data.length - 1; 1120 if (index == lastIndex) { 1121 data.pop(); 1122 } else { 1123 splice.call(data, index, 1); 1124 } 1125 --this.size; 1126 return true; 1127 } 1128 function listCacheGet(key) { 1129 var data = this.__data__, index = assocIndexOf(data, key); 1130 return index < 0 ? void 0 : data[index][1]; 1131 } 1132 function listCacheHas(key) { 1133 return assocIndexOf(this.__data__, key) > -1; 1134 } 1135 function listCacheSet(key, value) { 1136 var data = this.__data__, index = assocIndexOf(data, key); 1137 if (index < 0) { 1138 ++this.size; 1139 data.push([key, value]); 1140 } else { 1141 data[index][1] = value; 1142 } 1143 return this; 1144 } 1145 ListCache.prototype.clear = listCacheClear; 1146 ListCache.prototype["delete"] = listCacheDelete; 1147 ListCache.prototype.get = listCacheGet; 1148 ListCache.prototype.has = listCacheHas; 1149 ListCache.prototype.set = listCacheSet; 1150 function MapCache(entries) { 1151 var index = -1, length = entries == null ? 0 : entries.length; 1152 this.clear(); 1153 while (++index < length) { 1154 var entry = entries[index]; 1155 this.set(entry[0], entry[1]); 1156 } 1157 } 1158 function mapCacheClear() { 1159 this.size = 0; 1160 this.__data__ = { 1161 "hash": new Hash(), 1162 "map": new (Map2 || ListCache)(), 1163 "string": new Hash() 1164 }; 1165 } 1166 function mapCacheDelete(key) { 1167 var result = getMapData(this, key)["delete"](key); 1168 this.size -= result ? 1 : 0; 1169 return result; 1170 } 1171 function mapCacheGet(key) { 1172 return getMapData(this, key).get(key); 1173 } 1174 function mapCacheHas(key) { 1175 return getMapData(this, key).has(key); 1176 } 1177 function mapCacheSet(key, value) { 1178 var data = getMapData(this, key), size = data.size; 1179 data.set(key, value); 1180 this.size += data.size == size ? 0 : 1; 1181 return this; 1182 } 1183 MapCache.prototype.clear = mapCacheClear; 1184 MapCache.prototype["delete"] = mapCacheDelete; 1185 MapCache.prototype.get = mapCacheGet; 1186 MapCache.prototype.has = mapCacheHas; 1187 MapCache.prototype.set = mapCacheSet; 1188 function SetCache(values) { 1189 var index = -1, length = values == null ? 0 : values.length; 1190 this.__data__ = new MapCache(); 1191 while (++index < length) { 1192 this.add(values[index]); 1193 } 1194 } 1195 function setCacheAdd(value) { 1196 this.__data__.set(value, HASH_UNDEFINED); 1197 return this; 1198 } 1199 function setCacheHas(value) { 1200 return this.__data__.has(value); 1201 } 1202 SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; 1203 SetCache.prototype.has = setCacheHas; 1204 function Stack(entries) { 1205 var data = this.__data__ = new ListCache(entries); 1206 this.size = data.size; 1207 } 1208 function stackClear() { 1209 this.__data__ = new ListCache(); 1210 this.size = 0; 1211 } 1212 function stackDelete(key) { 1213 var data = this.__data__, result = data["delete"](key); 1214 this.size = data.size; 1215 return result; 1216 } 1217 function stackGet(key) { 1218 return this.__data__.get(key); 1219 } 1220 function stackHas(key) { 1221 return this.__data__.has(key); 1222 } 1223 function stackSet(key, value) { 1224 var data = this.__data__; 1225 if (data instanceof ListCache) { 1226 var pairs = data.__data__; 1227 if (!Map2 || pairs.length < LARGE_ARRAY_SIZE - 1) { 1228 pairs.push([key, value]); 1229 this.size = ++data.size; 1230 return this; 1231 } 1232 data = this.__data__ = new MapCache(pairs); 1233 } 1234 data.set(key, value); 1235 this.size = data.size; 1236 return this; 1237 } 1238 Stack.prototype.clear = stackClear; 1239 Stack.prototype["delete"] = stackDelete; 1240 Stack.prototype.get = stackGet; 1241 Stack.prototype.has = stackHas; 1242 Stack.prototype.set = stackSet; 1243 function arrayLikeKeys(value, inherited) { 1244 var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; 1245 for (var key in value) { 1246 if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode. 1247 (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers. 1248 isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays. 1249 isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties. 1250 isIndex(key, length)))) { 1251 result.push(key); 1252 } 1253 } 1254 return result; 1255 } 1256 function assocIndexOf(array, key) { 1257 var length = array.length; 1258 while (length--) { 1259 if (eq(array[length][0], key)) { 1260 return length; 1261 } 1262 } 1263 return -1; 1264 } 1265 function baseGetAllKeys(object, keysFunc, symbolsFunc) { 1266 var result = keysFunc(object); 1267 return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); 1268 } 1269 function baseGetTag(value) { 1270 if (value == null) { 1271 return value === void 0 ? undefinedTag : nullTag; 1272 } 1273 return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); 1274 } 1275 function baseIsArguments(value) { 1276 return isObjectLike(value) && baseGetTag(value) == argsTag; 1277 } 1278 function baseIsEqual(value, other, bitmask, customizer, stack) { 1279 if (value === other) { 1280 return true; 1281 } 1282 if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) { 1283 return value !== value && other !== other; 1284 } 1285 return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); 1286 } 1287 function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { 1288 var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other); 1289 objTag = objTag == argsTag ? objectTag : objTag; 1290 othTag = othTag == argsTag ? objectTag : othTag; 1291 var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; 1292 if (isSameTag && isBuffer(object)) { 1293 if (!isBuffer(other)) { 1294 return false; 1295 } 1296 objIsArr = true; 1297 objIsObj = false; 1298 } 1299 if (isSameTag && !objIsObj) { 1300 stack || (stack = new Stack()); 1301 return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); 1302 } 1303 if (!(bitmask & COMPARE_PARTIAL_FLAG)) { 1304 var objIsWrapped = objIsObj && hasOwnProperty.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other, "__wrapped__"); 1305 if (objIsWrapped || othIsWrapped) { 1306 var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; 1307 stack || (stack = new Stack()); 1308 return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); 1309 } 1310 } 1311 if (!isSameTag) { 1312 return false; 1313 } 1314 stack || (stack = new Stack()); 1315 return equalObjects(object, other, bitmask, customizer, equalFunc, stack); 1316 } 1317 function baseIsNative(value) { 1318 if (!isObject2(value) || isMasked(value)) { 1319 return false; 1320 } 1321 var pattern = isFunction(value) ? reIsNative : reIsHostCtor; 1322 return pattern.test(toSource(value)); 1323 } 1324 function baseIsTypedArray(value) { 1325 return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; 1326 } 1327 function baseKeys(object) { 1328 if (!isPrototype(object)) { 1329 return nativeKeys(object); 1330 } 1331 var result = []; 1332 for (var key in Object(object)) { 1333 if (hasOwnProperty.call(object, key) && key != "constructor") { 1334 result.push(key); 1335 } 1336 } 1337 return result; 1338 } 1339 function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { 1340 var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length; 1341 if (arrLength != othLength && !(isPartial && othLength > arrLength)) { 1342 return false; 1343 } 1344 var stacked = stack.get(array); 1345 if (stacked && stack.get(other)) { 1346 return stacked == other; 1347 } 1348 var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : void 0; 1349 stack.set(array, other); 1350 stack.set(other, array); 1351 while (++index < arrLength) { 1352 var arrValue = array[index], othValue = other[index]; 1353 if (customizer) { 1354 var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); 1355 } 1356 if (compared !== void 0) { 1357 if (compared) { 1358 continue; 1359 } 1360 result = false; 1361 break; 1362 } 1363 if (seen) { 1364 if (!arraySome(other, function(othValue2, othIndex) { 1365 if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) { 1366 return seen.push(othIndex); 1367 } 1368 })) { 1369 result = false; 1370 break; 1371 } 1372 } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { 1373 result = false; 1374 break; 1375 } 1376 } 1377 stack["delete"](array); 1378 stack["delete"](other); 1379 return result; 1380 } 1381 function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { 1382 switch (tag) { 1383 case dataViewTag: 1384 if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { 1385 return false; 1386 } 1387 object = object.buffer; 1388 other = other.buffer; 1389 case arrayBufferTag: 1390 if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array2(object), new Uint8Array2(other))) { 1391 return false; 1392 } 1393 return true; 1394 case boolTag: 1395 case dateTag: 1396 case numberTag: 1397 return eq(+object, +other); 1398 case errorTag: 1399 return object.name == other.name && object.message == other.message; 1400 case regexpTag: 1401 case stringTag: 1402 return object == other + ""; 1403 case mapTag: 1404 var convert = mapToArray; 1405 case setTag: 1406 var isPartial = bitmask & COMPARE_PARTIAL_FLAG; 1407 convert || (convert = setToArray); 1408 if (object.size != other.size && !isPartial) { 1409 return false; 1410 } 1411 var stacked = stack.get(object); 1412 if (stacked) { 1413 return stacked == other; 1414 } 1415 bitmask |= COMPARE_UNORDERED_FLAG; 1416 stack.set(object, other); 1417 var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); 1418 stack["delete"](object); 1419 return result; 1420 case symbolTag: 1421 if (symbolValueOf) { 1422 return symbolValueOf.call(object) == symbolValueOf.call(other); 1423 } 1424 } 1425 return false; 1426 } 1427 function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { 1428 var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; 1429 if (objLength != othLength && !isPartial) { 1430 return false; 1431 } 1432 var index = objLength; 1433 while (index--) { 1434 var key = objProps[index]; 1435 if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { 1436 return false; 1437 } 1438 } 1439 var stacked = stack.get(object); 1440 if (stacked && stack.get(other)) { 1441 return stacked == other; 1442 } 1443 var result = true; 1444 stack.set(object, other); 1445 stack.set(other, object); 1446 var skipCtor = isPartial; 1447 while (++index < objLength) { 1448 key = objProps[index]; 1449 var objValue = object[key], othValue = other[key]; 1450 if (customizer) { 1451 var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); 1452 } 1453 if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { 1454 result = false; 1455 break; 1456 } 1457 skipCtor || (skipCtor = key == "constructor"); 1458 } 1459 if (result && !skipCtor) { 1460 var objCtor = object.constructor, othCtor = other.constructor; 1461 if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) { 1462 result = false; 1463 } 1464 } 1465 stack["delete"](object); 1466 stack["delete"](other); 1467 return result; 1468 } 1469 function getAllKeys(object) { 1470 return baseGetAllKeys(object, keys, getSymbols); 1471 } 1472 function getMapData(map, key) { 1473 var data = map.__data__; 1474 return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map; 1475 } 1476 function getNative(object, key) { 1477 var value = getValue(object, key); 1478 return baseIsNative(value) ? value : void 0; 1479 } 1480 function getRawTag(value) { 1481 var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; 1482 try { 1483 value[symToStringTag] = void 0; 1484 var unmasked = true; 1485 } catch (e) { 1486 } 1487 var result = nativeObjectToString.call(value); 1488 if (unmasked) { 1489 if (isOwn) { 1490 value[symToStringTag] = tag; 1491 } else { 1492 delete value[symToStringTag]; 1493 } 1494 } 1495 return result; 1496 } 1497 var getSymbols = !nativeGetSymbols ? stubArray : function(object) { 1498 if (object == null) { 1499 return []; 1500 } 1501 object = Object(object); 1502 return arrayFilter(nativeGetSymbols(object), function(symbol) { 1503 return propertyIsEnumerable.call(object, symbol); 1504 }); 1505 }; 1506 var getTag = baseGetTag; 1507 if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map2 && getTag(new Map2()) != mapTag || Promise2 && getTag(Promise2.resolve()) != promiseTag || Set2 && getTag(new Set2()) != setTag || WeakMap2 && getTag(new WeakMap2()) != weakMapTag) { 1508 getTag = function(value) { 1509 var result = baseGetTag(value), Ctor = result == objectTag ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : ""; 1510 if (ctorString) { 1511 switch (ctorString) { 1512 case dataViewCtorString: 1513 return dataViewTag; 1514 case mapCtorString: 1515 return mapTag; 1516 case promiseCtorString: 1517 return promiseTag; 1518 case setCtorString: 1519 return setTag; 1520 case weakMapCtorString: 1521 return weakMapTag; 1522 } 1523 } 1524 return result; 1525 }; 1526 } 1527 function isIndex(value, length) { 1528 length = length == null ? MAX_SAFE_INTEGER : length; 1529 return !!length && (typeof value == "number" || reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length); 1530 } 1531 function isKeyable(value) { 1532 var type = typeof value; 1533 return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null; 1534 } 1535 function isMasked(func) { 1536 return !!maskSrcKey && maskSrcKey in func; 1537 } 1538 function isPrototype(value) { 1539 var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto; 1540 return value === proto; 1541 } 1542 function objectToString(value) { 1543 return nativeObjectToString.call(value); 1544 } 1545 function toSource(func) { 1546 if (func != null) { 1547 try { 1548 return funcToString.call(func); 1549 } catch (e) { 1550 } 1551 try { 1552 return func + ""; 1553 } catch (e) { 1554 } 1555 } 1556 return ""; 1557 } 1558 function eq(value, other) { 1559 return value === other || value !== value && other !== other; 1560 } 1561 var isArguments = baseIsArguments(/* @__PURE__ */ function() { 1562 return arguments; 1563 }()) ? baseIsArguments : function(value) { 1564 return isObjectLike(value) && hasOwnProperty.call(value, "callee") && !propertyIsEnumerable.call(value, "callee"); 1565 }; 1566 var isArray = Array.isArray; 1567 function isArrayLike2(value) { 1568 return value != null && isLength(value.length) && !isFunction(value); 1569 } 1570 var isBuffer = nativeIsBuffer || stubFalse; 1571 function isEqual2(value, other) { 1572 return baseIsEqual(value, other); 1573 } 1574 function isFunction(value) { 1575 if (!isObject2(value)) { 1576 return false; 1577 } 1578 var tag = baseGetTag(value); 1579 return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; 1580 } 1581 function isLength(value) { 1582 return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; 1583 } 1584 function isObject2(value) { 1585 var type = typeof value; 1586 return value != null && (type == "object" || type == "function"); 1587 } 1588 function isObjectLike(value) { 1589 return value != null && typeof value == "object"; 1590 } 1591 var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; 1592 function keys(object) { 1593 return isArrayLike2(object) ? arrayLikeKeys(object) : baseKeys(object); 1594 } 1595 function stubArray() { 1596 return []; 1597 } 1598 function stubFalse() { 1599 return false; 1600 } 1601 module.exports = isEqual2; 1602 } 1603 }); 1604 1605
1605// src/main/resources/META-INF/resources/liferay/global.es.js 1606 var import_lodash = __toESM(require_lodash()); 1607 var import_lodash2 = __toESM(require_lodash2()); 1608 1609
1609// src/main/resources/META-INF/resources/utils/client_extensions/loadModule.ts 1610 async function loadModule(importDeclarationOrAMDModule) { 1611 if (importDeclarationOrAMDModule.includes(" from ")) { 1612 const [moduleName, symbolName] = getModuleAndSymbolNames( 1613 importDeclarationOrAMDModule 1614 ); 1615 const module = await import( 1616 /* webpackIgnore: true */ 1617 moduleName 1618 ); 1619 return module[symbolName]; 1620 } else { 1621 return new Promise((resolve, reject) => { 1622 Liferay.Loader.require( 1623 importDeclarationOrAMDModule, 1624 (jsModule) => resolve(jsModule.default || jsModule), 1625 (error) => reject(error) 1626 ); 1627 }); 1628 } 1629 } 1630 function getModuleAndSymbolNames(importDeclaration) { 1631 const parts = importDeclaration.split(" from "); 1632 const moduleName = parts[1].trim(); 1633 let symbolName = parts[0].trim(); 1634 if (symbolName.startsWith("{") && symbolName.endsWith("}")) { 1635 symbolName = symbolName.substring(1, symbolName.length - 1).trim(); 1636 } 1637 return [moduleName, symbolName]; 1638 } 1639 1640
1640// src/main/resources/META-INF/resources/utils/client_extensions/loadClientExtensions.ts 1641 function loadClientExtensions(clientExtensionDefinitionsHandlers) { 1642 for (const { 1643 clientExtensionDefinitions, 1644 onLoad 1645 } of clientExtensionDefinitionsHandlers) { 1646 if (!clientExtensionDefinitions.length) { 1647 continue; 1648 } 1649 const promises = clientExtensionDefinitions.map( 1650 ({ context, importDeclaration }) => { 1651 return loadModule(importDeclaration).then((binding) => ({ 1652 binding, 1653 context 1654 })).catch((error) => ({ 1655 context, 1656 error 1657 })); 1658 } 1659 ); 1660 Promise.all(promises).then(onLoad); 1661 } 1662 } 1663 1664
1664// src/main/resources/META-INF/resources/utils/client_extensions/loadEditorClientExtensions.ts 1665 function loadEditorClientExtensions({ 1666 config, 1667 onLoad 1668 }) { 1669 loadClientExtensions([ 1670 { 1671 clientExtensionDefinitions: config.editorTransformerURLs.map( 1672 (url) => ({ 1673 importDeclaration: `default from ${url}` 1674 }) 1675 ), 1676 onLoad: (bindingContexts) => { 1677 let transformedConfig = config; 1678 bindingContexts.forEach( 1679 ({ binding: editorTransformer, error }) => { 1680 if (error) { 1681 console.error(error); 1682 } 1683 const editorConfigTransformer = editorTransformer?.editorConfigTransformer; 1684 if (editorConfigTransformer) { 1685 transformedConfig = editorConfigTransformer(transformedConfig); 1686 } 1687 } 1688 ); 1689 onLoad({ transformedConfig }); 1690 } 1691 } 1692 ]); 1693 } 1694 1695
1695// src/main/resources/META-INF/resources/liferay/util/is_object.js 1696 function isObject(val) { 1697 const type = typeof val; 1698 return type === "object" && val !== null || type === "function"; 1699 } 1700 1701
1701// src/main/resources/META-INF/resources/liferay/util/form/object_to_form_data.es.js 1702 function objectToFormData(object = {}, formData = new FormData(), namespace) { 1703 Object.entries(object).forEach(([key, value]) => { 1704 const formKey = namespace ? `${namespace}[${key}]` : key; 1705 if (Array.isArray(value)) { 1706 value.forEach((item) => { 1707 objectToFormData( 1708 { 1709 [formKey]: item 1710 }, 1711 formData 1712 ); 1713 }); 1714 } else if (isObject(value) && !(value instanceof File)) { 1715 objectToFormData(value, formData, formKey); 1716 } else { 1717 formData.append(formKey, value); 1718 } 1719 }); 1720 return formData; 1721 } 1722 1723
1723// src/main/resources/META-INF/resources/liferay/PortletBase.es.js 1724 function toElementHelper(elementOrSelector) { 1725 if (typeof elementOrSelector === "string") { 1726 elementOrSelector = document.querySelector(elementOrSelector); 1727 } 1728 return elementOrSelector; 1729 } 1730 var LifeCycles = class { 1731 get namespace() { 1732 return this._STATE_.namespace; 1733 } 1734 get portletNamespace() { 1735 return this._STATE_.portletNamespace; 1736 } 1737 get rootNode() { 1738 return this._STATE_.rootNode; 1739 } 1740 set portletNamespace(portletNamespace) { 1741 this.rootNode = `#p_p_id${portletNamespace}`; 1742 this._STATE_.portletNamespace = portletNamespace; 1743 } 1744 set namespace(namespace) { 1745 this.rootNode = `#p_p_id${namespace}`; 1746 this._STATE_.namespace = namespace; 1747 } 1748 set rootNode(rootNode) { 1749 if (typeof rootNode === "string") { 1750 rootNode = document.getElementById( 1751 rootNode[0] === "#" ? rootNode.slice(1) : rootNode 1752 ); 1753 } 1754 this._STATE_.rootNode = rootNode; 1755 } 1756 constructor(props) { 1757 this._EVENTS_ = {}; 1758 this._STATE_ = { 1759 namespace: null, 1760 portletNamespace: null, 1761 rootNode: null 1762 }; 1763 const { namespace, portletNamespace, rootNode } = props; 1764 if (namespace) { 1765 this.namespace = namespace; 1766 } 1767 if (portletNamespace) { 1768 this.portletNamespace = portletNamespace; 1769 } 1770 if (rootNode) { 1771 this.rootNode = rootNode; 1772 } 1773 this.created(props); 1774 this.attached(props); 1775 } 1776 dispose() { 1777 this.disposeInternal(); 1778 this.detached(); 1779 this.disposed(); 1780 } 1781 attached() { 1782 } 1783 created() { 1784 } 1785 detached() { 1786 } 1787 disposed() { 1788 } 1789 disposeInternal() { 1790 } 1791 emit(eventName, data) { 1792 const callbacks = this._EVENTS_[eventName]; 1793 if (callbacks && callbacks.length) { 1794 for (let i = 0; i < callbacks.length; i++) { 1795 callbacks[i](data); 1796 } 1797 } 1798 } 1799 on(eventName, callback) { 1800 if (!this._EVENTS_[eventName]) { 1801 this._EVENTS_[eventName] = []; 1802 } 1803 this._EVENTS_[eventName].push(callback); 1804 } 1805 }; 1806 var PortletBase = class extends LifeCycles { 1807 /** 1808 * Returns a Node List containing all the matching element nodes within the 1809 * subtrees of the root object, in tree order. If there are no matching 1810 * nodes, the method returns an empty Node List. 1811 * 1812 * @param {string} selectors A list of one or more CSS relative selectors. 1813 * @param {(string|Element|Document)=} root The root node of the search. If 1814 * not specified, the element search will start in the portlet's 1815 * root node or in the document. 1816 * @return {NodeList<Element>} A list of elements matching the selectors, in 1817 * tree order. 1818 */ 1819 all(selectors, root) { 1820 root = toElementHelper(root) || this.rootNode || document; 1821 return root.querySelectorAll( 1822 this.namespaceSelectors_( 1823 this.portletNamespace || this.namespace, 1824 selectors 1825 ) 1826 ); 1827 } 1828 /** 1829 * Performs an HTTP POST request to the given URL with the given body. 1830 * 1831 * @deprecated As of Athanasius (7.3.x), replaced by `Liferay.Util.fetch`. 1832 * @param {!string} url The URL to send the post request to. 1833 * @param {!Object|!FormData} body The request body. 1834 * @return {Promise} A promise. 1835 */ 1836 fetch(url, body) { 1837 const requestBody = this.getRequestBody_(body); 1838 return fetch(url, { 1839 body: requestBody, 1840 credentials: "include", 1841 method: "POST" 1842 }); 1843 } 1844 /** 1845 * Transforms the given body into a valid <code>FormData</code> element. 1846 * 1847 * @param {!FormData|!HTMLFormElement|!Object} body The original data. 1848 * @return {FormData} The transformed form data. 1849 */ 1850 getRequestBody_(body) { 1851 let requestBody; 1852 if (body instanceof FormData) { 1853 requestBody = body; 1854 } else if (body instanceof HTMLFormElement) { 1855 requestBody = new FormData(body); 1856 } else if (typeof body === "object") { 1857 requestBody = objectToFormData(this.ns(body)); 1858 } else { 1859 requestBody = body; 1860 } 1861 return requestBody; 1862 } 1863 /** 1864 * Namespaces the list of selectors, appending the portlet namespace to the 1865 * selectors of type ID. Selectors of other types remain unaltered. 1866 * 1867 * @param {string} namespace The portlet's namespace. 1868 * @param {string} selectors A list of one or more CSS relative selectors. 1869 * @protected 1870 * @return {string} The namespaced ID selectors. 1871 */ 1872 namespaceSelectors_(namespace, selectors) { 1873 return selectors.replace( 1874 new RegExp(`(#|\\[id=(\\"|\\'))(?!` + namespace + ")", "g"), 1875 "$1" + namespace 1876 ); 1877 } 1878 /** 1879 * Appends the portlet's namespace to the given string or object properties. 1880 * 1881 * @param {!Object|string} obj The object or string to namespace. 1882 * @return {Object|string} An object with its properties namespaced, using 1883 * the portlet namespace or a namespaced string. 1884 */ 1885 ns(object) { 1886 return Liferay.Util.ns(this.portletNamespace || this.namespace, object); 1887 } 1888 /** 1889 * Returns the first matching Element node within the subtrees of the 1890 * root object. If there is no matching Element, the method returns null. 1891 * 1892 * @param {string} selectors A list of one or more CSS relative selectors. 1893 * @param {(string|Element|Document)=} root The root node of the search. If 1894 * not specified, the element search will start in the portlet's 1895 * root node or in the document. 1896 * @return {Element|null} A list of the first element matching the selectors 1897 * or <code>null</code>. 1898 */ 1899 one(selectors, root) { 1900 root = toElementHelper(root) || this.rootNode || document; 1901 return root.querySelector( 1902 this.namespaceSelectors_( 1903 this.portletNamespace || this.namespace, 1904 selectors 1905 ) 1906 ); 1907 } 1908 }; 1909 var PortletBase_es_default = PortletBase; 1910 1911
1911// src/main/resources/META-INF/resources/liferay/delegate/delegate.es.js 1912 var USE_CAPTURE = { 1913 blur: true, 1914 error: true, 1915 focus: true, 1916 invalid: true, 1917 load: true, 1918 scroll: true 1919 }; 1920 function isDisabled(node) { 1921 return !!(node.disabled || node.closest("[disabled]")); 1922 } 1923 function delegate(element, eventName, selector, callback) { 1924 const eventHandler = (event) => { 1925 const { defaultPrevented, target } = event; 1926 if (defaultPrevented || eventName === "click" && isDisabled(target)) { 1927 return; 1928 } 1929 const delegateTarget = target.closest(selector); 1930 if (delegateTarget) { 1931 event.delegateTarget = delegateTarget; 1932 callback(event); 1933 } 1934 }; 1935 element.addEventListener(eventName, eventHandler, !!USE_CAPTURE[eventName]); 1936 return { 1937 dispose() { 1938 element.removeEventListener(eventName, eventHandler); 1939 } 1940 }; 1941 } 1942 var delegate_es_default = delegate; 1943 1944
1944// src/main/resources/META-INF/resources/liferay/DynamicInlineScroll.es.js 1945 var DynamicInlineScroll = class extends PortletBase_es_default { 1946 /** 1947 * @inheritDoc 1948 */ 1949 attached() { 1950 let { rootNode } = this; 1951 rootNode = rootNode || document.body; 1952 this.inlineScrollEventHandler_ = delegate_es_default( 1953 rootNode, 1954 "scroll", 1955 "ul.pagination ul.inline-scroller", 1956 this.onScroll_.bind(this) 1957 ); 1958 } 1959 /** 1960 * @inheritDoc 1961 */ 1962 created(props) { 1963 this.cur = Number(props.cur); 1964 this.curParam = props.curParam; 1965 this.forcePost = props.forcePost; 1966 this.formName = props.formName; 1967 this.initialPages = Number(props.initialPages); 1968 this.jsCall = props.jsCall; 1969 this.namespace = props.namespace; 1970 this.pages = Number(props.pages); 1971 this.randomNamespace = props.randomNamespace; 1972 this.url = props.url; 1973 this.urlAnchor = props.urlAnchor; 1974 this.handleListItemClick_ = this.handleListItemClick_.bind(this); 1975 } 1976 /** 1977 * @inheritDoc 1978 */ 1979 detached() { 1980 super.detached(); 1981 this.inlineScrollEventHandler_.dispose(); 1982 const listItem = document.createElement("li"); 1983 listItem.removeEventListener("click", this.handleListItemClick_); 1984 } 1985 /** 1986 * Dynamically adds list item elements to the dropdown menu. 1987 * 1988 * @param {element} listElement The list element's DOM node. 1989 * @param {number} pageIndex The Index of the page with an inline-scroller. 1990 * @protected 1991 */ 1992 addListItem_(listElement, pageIndex) { 1993 const listItem = document.createElement("li"); 1994 listItem.innerHTML = `<a class="dropdown-item" href="${this.getHREF_( 1995 pageIndex 1996 )}"><span class="sr-only">${'Pàgina'} </span>${pageIndex}</a>`; 1997 pageIndex++; 1998 listElement.appendChild(listItem); 1999 listElement.setAttribute("data-page-index", pageIndex); 2000 listItem.addEventListener("click", this.handleListItemClick_); 2001 } 2002 /** 2003 * Returns the <code>href</code> attribute value for each page. 2004 * 2005 * @param {number} pageIndex The Index of the page. 2006 * @protected 2007 * @return {string} The <code>href</code> value as a string. 2008 */ 2009 getHREF_(pageIndex) { 2010 const { curParam, formName, jsCall, namespace, url, urlAnchor } = this; 2011 let href = `javascript:document.${formName}.${namespace}${curParam}.value = "${pageIndex}; ${jsCall}`; 2012 if (this.url !== null) { 2013 href = `${url}&${namespace}${curParam}=${pageIndex}${urlAnchor}`; 2014 } 2015 return href; 2016 } 2017 /** 2018 * Returns the numerical value of the parameter passed in. 2019 * 2020 * @param {string|!Object} val The string or object to be converted to a number. 2021 * @protected 2022 * @return {number} The parameter's numberical value. 2023 */ 2024 getNumber_(val) { 2025 return Number(val ?? 0); 2026 } 2027 /** 2028 * Handles the click event of the dynmaically added list item, preventing 2029 * the default behavior and submitting the search container form. 2030 * 2031 * @param {Event} event The click event of the dynamically added list item. 2032 * @protected 2033 */ 2034 handleListItemClick_(event) { 2035 if (this.forcePost) { 2036 event.preventDefault(); 2037 const { curParam, namespace, randomNamespace } = this; 2038 const form = document.getElementById( 2039 randomNamespace + namespace + "pageIteratorFm" 2040 ); 2041 form.elements[namespace + curParam].value = event.currentTarget.textContent; 2042 form.submit(); 2043 } 2044 } 2045 /** 2046 * An event triggered when a dropdown menu with an inline-scroller is 2047 * scrolled. This dynamically adds list item elements to the dropdown menu 2048 * as it is scrolled down. 2049 * 2050 * @param {Event} event The scroll event triggered by scrolling a dropdown 2051 * menu with an inline-scroller. 2052 * @protected 2053 */ 2054 onScroll_(event) { 2055 const { cur, initialPages, pages } = this; 2056 const { target } = event; 2057 if (target.nodeName !== "UL") { 2058 return; 2059 } 2060 let pageIndex = this.getNumber_(target.dataset.pageIndex); 2061 let pageIndexMax = this.getNumber_(target.dataset.maxIndex); 2062 if (pageIndex === 0) { 2063 const pageIndexCurrent = this.getNumber_( 2064 target.dataset.currentIndex 2065 ); 2066 if (pageIndexCurrent === 0) { 2067 pageIndex = initialPages; 2068 } else { 2069 pageIndex = pageIndexCurrent + initialPages; 2070 } 2071 } 2072 if (pageIndexMax === 0) { 2073 pageIndexMax = pages; 2074 } 2075 if (cur <= pages && pageIndex < pageIndexMax && target.scrollTop >= target.scrollHeight - 300) { 2076 this.addListItem_(target, pageIndex); 2077 } 2078 } 2079 }; 2080 var DynamicInlineScroll_es_default = DynamicInlineScroll; 2081 2082
2082// src/main/resources/META-INF/resources/liferay/util/html_util.js 2083 var MAP_HTML_CHARS_ESCAPED = { 2084 '"': """, 2085 "&": "&", 2086 "'": "'", 2087 "/": "/", 2088 "<": "<", 2089 ">": ">", 2090 "`": "`" 2091 }; 2092 var MAP_HTML_CHARS_UNESCAPED = {}; 2093 Object.entries(MAP_HTML_CHARS_ESCAPED).forEach(([char, escapedChar]) => { 2094 MAP_HTML_CHARS_UNESCAPED[escapedChar] = char; 2095 }); 2096 var HTML_UNESCAPED_VALUES = Object.keys(MAP_HTML_CHARS_ESCAPED); 2097 var HTML_ESCAPE = new RegExp(`[${HTML_UNESCAPED_VALUES.join("")}]`, "g"); 2098 var HTML_UNESCAPE = /&([^\s;]+);/g; 2099 function escapeHTML(string) { 2100 return string.replace( 2101 HTML_ESCAPE, 2102 (match) => MAP_HTML_CHARS_ESCAPED[match] 2103 ); 2104 } 2105 function unescapeHTML(string) { 2106 return string.replace(HTML_UNESCAPE, (match) => { 2107 return new DOMParser().parseFromString(match, "text/html").documentElement.textContent; 2108 }); 2109 } 2110 2111
2111// src/main/resources/META-INF/resources/liferay/util/toggle_disabled.js 2112 function toggleDisabled(nodes, state) { 2113 if (typeof nodes === "string") { 2114 nodes = document.querySelectorAll(nodes); 2115 } else if (nodes._node) { 2116 nodes = [nodes._node]; 2117 } else if (nodes._nodes) { 2118 nodes = nodes._nodes; 2119 } else if (nodes.nodeType === Node.ELEMENT_NODE) { 2120 nodes = [nodes]; 2121 } 2122 nodes.forEach((node) => { 2123 node.disabled = state; 2124 if (state) { 2125 node.classList.add("disabled"); 2126 } else { 2127 node.classList.remove("disabled"); 2128 } 2129 }); 2130 } 2131 2132
2132// src/main/resources/META-INF/resources/liferay/DynamicSelect.js 2133 function sortByValue(a, b) { 2134 let position = a.indexOf('">'); 2135 const nameA = a.substring(position); 2136 position = b.indexOf('">'); 2137 const nameB = b.substring(position); 2138 if (nameA < nameB) { 2139 return -1; 2140 } else if (nameA > nameB) { 2141 return 1; 2142 } else { 2143 return 0; 2144 } 2145 } 2146 function isArrayLike(value) { 2147 if (Array.isArray(value)) { 2148 return true; 2149 } 2150 return !!(value && typeof value === "object" && typeof value.length === "number" && !value.tagName && !value.scrollTo && !value.document); 2151 } 2152 function toArray(value) { 2153 return isArrayLike(value) ? Array.from(value) : [value]; 2154 } 2155 function updateSelect(array, index, list) { 2156 const options = array[index]; 2157 const select = document.getElementById(options.select); 2158 if (!select) { 2159 return; 2160 } 2161 const selectVal = toArray(options.selectVal); 2162 const selectOptions = []; 2163 if (options.selectNullable !== false) { 2164 selectOptions.push('<option selected value="0"></option>'); 2165 } 2166 list.forEach((item) => { 2167 const key = escapeHTML(item[options.selectId]); 2168 const value = escapeHTML(item[options.selectDesc]); 2169 let selected = ""; 2170 if (selectVal.indexOf(key) > -1) { 2171 selected = 'selected="selected"'; 2172 } 2173 selectOptions.push( 2174 `<option ${selected} value="${key}">${value}</option>` 2175 ); 2176 }); 2177 if (options.selectSort) { 2178 selectOptions.sort(sortByValue); 2179 } 2180 while (select.lastChild) { 2181 select.removeChild(select.lastChild); 2182 } 2183 select.innerHTML = selectOptions.join(""); 2184 if (options.selectDisableOnEmpty) { 2185 toggleDisabled(select, !list.length); 2186 } 2187 } 2188 function callSelectData(array, index) { 2189 if (index + 1 < array.length) { 2190 const currentSelect = document.getElementById(array[index].select); 2191 const nextSelectData = array[index + 1].selectData; 2192 nextSelectData((list) => { 2193 updateSelect(array, index + 1, list); 2194 }, currentSelect && currentSelect.value); 2195 } 2196 } 2197 function process2(array) { 2198 array.forEach((item, index) => { 2199 const id = item.select; 2200 const select = document.getElementById(id); 2201 const selectData = item.selectData; 2202 if (select) { 2203 select.setAttribute("data-componentType", "dynamic_select"); 2204 let prevSelectVal; 2205 if (index > 0) { 2206 prevSelectVal = array[index - 1].selectVal; 2207 } 2208 selectData((list) => { 2209 updateSelect(array, index, list); 2210 }, prevSelectVal); 2211 if (!select.getAttribute("name")) { 2212 select.setAttribute("name", id); 2213 } 2214 select.addEventListener("change", () => { 2215 callSelectData(array, index); 2216 }); 2217 } 2218 }); 2219 } 2220 var DynamicSelect = class { 2221 constructor(array) { 2222 process2(array); 2223 } 2224 }; 2225 2226
2226// src/main/resources/META-INF/resources/liferay/autosize/autosize.es.js 2227 var DEFAULT_APPEND_CONTENT = " "; 2228 var AutoSize = class { 2229 constructor(inputElement) { 2230 __publicField(this, "handleInput", (event) => { 2231 requestAnimationFrame(() => { 2232 this._resizeInput(event.target); 2233 }); 2234 }); 2235 this.inputElement = inputElement; 2236 this.computedStyle = getComputedStyle(this.inputElement); 2237 this.minHeight = parseInt( 2238 this.computedStyle.height.replace("px", ""), 2239 10 2240 ); 2241 this.paddingHeight = parseInt(this.computedStyle.paddingTop.replace("px", ""), 10) + parseInt(this.computedStyle.paddingBottom.replace("px", ""), 10); 2242 this.template = this.createTemplate(this.computedStyle); 2243 document.body.appendChild(this.template); 2244 this.inputElement.addEventListener("input", this.handleInput); 2245 this._resizeInput(this.inputElement); 2246 } 2247 createTemplate(computedStyle) { 2248 const template = document.createElement("pre"); 2249 template.style.clip = "rect(0, 0, 0, 0) !important"; 2250 template.style.left = "0"; 2251 template.style.overflowWrap = "break-word"; 2252 template.style.position = "absolute"; 2253 template.style.top = "0"; 2254 template.style.transform = "scale(0)"; 2255 template.style.whiteSpace = "pre-wrap"; 2256 template.style.wordBreak = "break-word"; 2257 template.style.fontFamily = computedStyle.fontFamily; 2258 template.style.fontSize = computedStyle.fontSize; 2259 template.style.fontStyle = computedStyle.fontStyle; 2260 template.style.fontWeight = computedStyle.fontWeight; 2261 template.style.lineHeight = computedStyle.lineHeight; 2262 template.style.letterSpacing = computedStyle.letterSpacing; 2263 template.style.textTransform = computedStyle.textTransform; 2264 template.style.width = computedStyle.width; 2265 template.textContent = DEFAULT_APPEND_CONTENT; 2266 return template; 2267 } 2268 _resizeInput(inputElement) { 2269 if (this.template.style.width !== this.computedStyle.width) { 2270 this.template.style.width = this.computedStyle.width; 2271 } 2272 this.template.innerHTML = escapeHTML(inputElement.value) + DEFAULT_APPEND_CONTENT; 2273 inputElement.style.height = `${this.template.scrollHeight + this.paddingHeight < this.minHeight ? this.minHeight : this.template.scrollHeight + this.paddingHeight}px`; 2274 } 2275 }; 2276 var autosize_es_default = AutoSize; 2277 2278
2278// src/main/resources/META-INF/resources/liferay/breakpoints.js 2279 var breakpoints_default = { 2280 PHONE: 768, 2281 TABLET: 980 2282 }; 2283 2284
2284// src/main/resources/META-INF/resources/liferay/component.es.js 2285 var componentConfigs = {}; 2286 var componentPromiseWrappers = {}; 2287 var components = {}; 2288 var componentsCache = {}; 2289 var componentsFn = {}; 2290 var DEFAULT_CACHE_VALIDATION_PARAMS = ["p_p_id", "p_p_lifecycle"]; 2291 var DEFAULT_CACHE_VALIDATION_PORTLET_PARAMS = [ 2292 "ddmStructureKey", 2293 "fileEntryTypeId", 2294 "folderId", 2295 "navigation", 2296 "status" 2297 ]; 2298 var LIFERAY_COMPONENT = "liferay.component"; 2299 var _createPromiseWrapper = function(value) { 2300 let promiseWrapper; 2301 if (value) { 2302 promiseWrapper = { 2303 promise: Promise.resolve(value), 2304 resolve() { 2305 } 2306 }; 2307 } else { 2308 let promiseResolve; 2309 const promise = new Promise((resolve) => { 2310 promiseResolve = resolve; 2311 }); 2312 promiseWrapper = { 2313 promise, 2314 resolve: promiseResolve 2315 }; 2316 } 2317 return promiseWrapper; 2318 }; 2319 var _restoreTask = function(state, params, node) { 2320 const cache = state.data; 2321 const componentIds = Object.keys(cache); 2322 componentIds.forEach((componentId) => { 2323 const container = node.querySelector(`#${componentId}`); 2324 if (container) { 2325 container.innerHTML = cache[componentId].html; 2326 } 2327 }); 2328 }; 2329 var _onStartNavigate = function(event) { 2330 const currentUri = new URL(window.location.href); 2331 const uri = new URL(event.path, window.location.href); 2332 const cacheableUri = DEFAULT_CACHE_VALIDATION_PARAMS.every((param) => { 2333 return uri.searchParams.get(param) === currentUri.searchParams.get(param); 2334 }); 2335 if (cacheableUri) { 2336 let componentIds = Object.keys(components); 2337 componentIds = componentIds.filter((componentId) => { 2338 const component2 = components[componentId]; 2339 if (!component2) { 2340 return false; 2341 } 2342 const componentConfig = componentConfigs[componentId]; 2343 const cacheablePortletUri = DEFAULT_CACHE_VALIDATION_PORTLET_PARAMS.every((param) => { 2344 let cacheable = false; 2345 if (componentConfig) { 2346 const namespacedParam = `_${componentConfig.portletId}_${param}`; 2347 cacheable = uri.searchParams.get(namespacedParam) === currentUri.searchParams.get(namespacedParam); 2348 } 2349 return cacheable; 2350 }); 2351 const cacheableComponent = typeof component2.isCacheable === "function" ? component2.isCacheable(uri) : false; 2352 return cacheableComponent && cacheablePortletUri && componentConfig && componentConfig.cacheState && component2.element && component2.getState; 2353 }); 2354 componentsCache = componentIds.reduce((cache, componentId) => { 2355 const component2 = components[componentId]; 2356 const componentConfig = componentConfigs[componentId]; 2357 const componentState = component2.getState(); 2358 const componentCache = componentConfig.cacheState.reduce( 2359 (cache2, stateKey) => { 2360 cache2[stateKey] = componentState[stateKey]; 2361 return cache2; 2362 }, 2363 {} 2364 ); 2365 cache[componentId] = { 2366 html: component2.element.innerHTML, 2367 state: componentCache 2368 }; 2369 return cache; 2370 }, []); 2371 Liferay.DOMTaskRunner.addTask({ 2372 action: _restoreTask, 2373 condition: (state) => state.owner === LIFERAY_COMPONENT 2374 }); 2375 Liferay.DOMTaskRunner.addTaskState({ 2376 data: componentsCache, 2377 owner: LIFERAY_COMPONENT 2378 }); 2379 } else { 2380 componentsCache = {}; 2381 } 2382 }; 2383 var component = function(id, value, componentConfig) { 2384 let retVal; 2385 if (arguments.length === 1) { 2386 let component2 = components[id]; 2387 if (component2 && typeof component2 === "function") { 2388 componentsFn[id] = component2; 2389 component2 = component2(); 2390 components[id] = component2; 2391 } 2392 retVal = component2; 2393 } else { 2394 if (components[id] && value !== null) { 2395 delete componentConfigs[id]; 2396 delete componentPromiseWrappers[id]; 2397 console.warn( 2398 'Component with id "' + id + '" is being registered twice. This can lead to unexpected behaviour in the "Liferay.component" and "Liferay.componentReady" APIs, as well as in the "*:registered" events.' 2399 ); 2400 } 2401 retVal = components[id] = value; 2402 if (value === null) { 2403 delete componentConfigs[id]; 2404 delete componentPromiseWrappers[id]; 2405 } else { 2406 componentConfigs[id] = componentConfig; 2407 Liferay.fire(id + ":registered"); 2408 const componentPromiseWrapper = componentPromiseWrappers[id]; 2409 if (componentPromiseWrapper) { 2410 componentPromiseWrapper.resolve(value); 2411 } else { 2412 componentPromiseWrappers[id] = _createPromiseWrapper(value); 2413 } 2414 } 2415 } 2416 return retVal; 2417 }; 2418 var componentReady = function() {
2419 let component2; 2420 let componentPromise; 2421 if (arguments.length === 1) { 2422 component2 = arguments[0]; 2423 } else { 2424 component2 = []; 2425 for (let i = 0; i < arguments.length; i++) { 2426 component2[i] = arguments[i]; 2427 } 2428 } 2429 if (Array.isArray(component2)) { 2430 componentPromise = Promise.all( 2431 component2.map((id) => componentReady(id)) 2432 ); 2433 } else { 2434 let componentPromiseWrapper = componentPromiseWrappers[component2]; 2435 if (!componentPromiseWrapper) { 2436 componentPromiseWrappers[component2] = componentPromiseWrapper = _createPromiseWrapper(); 2437 } 2438 componentPromise = componentPromiseWrapper.promise; 2439 } 2440 return componentPromise; 2441 }; 2442 var destroyComponent = function(componentId) { 2443 const component2 = components[componentId]; 2444 if (component2) { 2445 const destroyFn = component2.destroy || component2.dispose; 2446 if (destroyFn) { 2447 destroyFn.call(component2); 2448 } 2449 delete componentConfigs[componentId]; 2450 delete componentPromiseWrappers[componentId]; 2451 delete componentsFn[componentId]; 2452 delete components[componentId]; 2453 } 2454 }; 2455 var destroyComponents = function(filterFn) {
2456 let componentIds = Object.keys(components); 2457 if (filterFn) { 2458 componentIds = componentIds.filter((componentId) => { 2459 return filterFn( 2460 components[componentId], 2461 componentConfigs[componentId] || {} 2462 ); 2463 }); 2464 } 2465 componentIds.forEach(destroyComponent); 2466 }; 2467 var destroyUnfulfilledPromises = function() { 2468 componentPromiseWrappers = {}; 2469 }; 2470 var getComponentCache = function(componentId) { 2471 const componentCache = componentsCache[componentId]; 2472 return componentCache ? componentCache.state : {}; 2473 }; 2474 var initComponentCache = function() { 2475 Liferay.on("startNavigate", _onStartNavigate); 2476 }; 2477 2478
2478// src/main/resources/META-INF/resources/liferay/debounce/debounce.es.js 2479 function debounce(fn, delay) { 2480 return function debounced() { 2481 const args = arguments; 2482 cancelDebounce(debounced); 2483 debounced.id = setTimeout(() => { 2484 fn(...args); 2485 }, delay); 2486 }; 2487 } 2488 function cancelDebounce(debounced) { 2489 clearTimeout(debounced.id); 2490 } 2491 var debounce_es_default = debounce; 2492 2493
2493// src/main/resources/META-INF/resources/liferay/util/get_top.js 2494 var SIMULATION_DEVICE_IFRAME = "simulationDeviceIframe"; 2495 var _topWindow; 2496 function getTop() { 2497 let topWindow = _topWindow; 2498 if (!topWindow) { 2499 let parentWindow = window.parent; 2500 let parentThemeDisplay; 2501 while (parentWindow !== window) { 2502 try { 2503 if (typeof parentWindow.location.href === "undefined") { 2504 break; 2505 } 2506 parentThemeDisplay = parentWindow.themeDisplay; 2507 } catch (error) { 2508 break; 2509 } 2510 if (!parentThemeDisplay || window.name === SIMULATION_DEVICE_IFRAME) { 2511 break; 2512 } else if (!parentThemeDisplay.isStatePopUp() || parentWindow === parentWindow.parent) { 2513 topWindow = parentWindow; 2514 break; 2515 } 2516 parentWindow = parentWindow.parent; 2517 } 2518 if (!topWindow) { 2519 topWindow = window; 2520 } 2521 _topWindow = topWindow; 2522 } 2523 return topWindow; 2524 } 2525 2526
2526// src/main/resources/META-INF/resources/liferay/util/open_window.js 2527 function openWindow(config, callback) { 2528 const topUtil = getTop(); 2529 config.openingWindow = window; 2530 topUtil.Liferay.Util._openWindowProvider(config, callback); 2531 } 2532 2533
2533// src/main/resources/META-INF/resources/liferay/layout_exporter.es.js 2534 function hideLayoutPane(options) { 2535 options = options || {}; 2536 const object = options.obj; 2537 let pane = options.pane; 2538 if (object && object.checked) { 2539 pane = document.querySelector(pane); 2540 if (pane) { 2541 pane.classList.add("hide"); 2542 } 2543 } 2544 } 2545 function getLayoutIcons() { 2546 return { 2547 minus: themeDisplay.getPathThemeImages() + "/arrows/01_minus.png", 2548 plus: themeDisplay.getPathThemeImages() + "/arrows/01_plus.png" 2549 }; 2550 } 2551 function proposeLayout(options) { 2552 options = options || {}; 2553 const namespace = options.namespace; 2554 const reviewers = options.reviewers; 2555 let contents = '<div><form action="' + options.url + '" method="post">'; 2556 if (reviewers.length) { 2557 contents += '<textarea name="' + namespace + 'description" style="height: 100px; width: 284px;"></textarea><br /><br />' + 'Revisor' + ' <select name="' + namespace + 'reviewUserId">'; 2558 for (let i = 0; i < reviewers.length; i++) { 2559 contents += '<option value="' + reviewers[i].userId + '">' + reviewers[i].fullName + "</option>"; 2560 } 2561 contents += '</select><br /><br /><input type="submit" value="' + 'Continua' + '" />'; 2562 } else { 2563 contents += 'No\x20s\x27ha\x20trobat\x20cap\x20revisor\x2e' + "<br />" + 'Contacteu\x20amb\x20l\x27administrador\x20per\x20assignar\x20revisors\x2e' + "<br /><br />"; 2564 } 2565 contents += "</form></div>"; 2566 openWindow({ 2567 dialog: { 2568 destroyOnHide: true 2569 }, 2570 title: contents 2571 }); 2572 } 2573 function publishToLive(options) { 2574 options = options || {}; 2575 openWindow({ 2576 dialog: { 2577 constrain: true, 2578 modal: true, 2579 on: { 2580 visibleChange(event) { 2581 const instance = this; 2582 if (!event.newVal) { 2583 instance.destroy(); 2584 } 2585 } 2586 } 2587 }, 2588 title: options.title, 2589 uri: options.url 2590 }); 2591 } 2592 function showLayoutPane(options) { 2593 options = options || {}; 2594 const object = options.obj; 2595 let pane = options.pane; 2596 if (object && object.checked) { 2597 pane = document.querySelector(pane); 2598 if (pane) { 2599 pane.classList.remove("hide"); 2600 } 2601 } 2602 } 2603 function toggleLayoutDetails(options) { 2604 options = options || {}; 2605 const detail = document.querySelector(options.detail); 2606 const image = document.querySelector(options.toggle); 2607 if (detail && image) { 2608 let icon = themeDisplay.getPathThemeImages() + "/arrows/01_plus.png"; 2609 if (detail.classList.contains("hide")) { 2610 detail.classList.remove("hide"); 2611 icon = themeDisplay.getPathThemeImages() + "/arrows/01_minus.png"; 2612 } else { 2613 detail.classList.add("hide"); 2614 } 2615 image.setAttribute("src", icon); 2616 } 2617 } 2618 2619
2619// src/main/resources/META-INF/resources/liferay/util/memoize.js 2620 function memoize(fn) { 2621 if (typeof fn !== "function") { 2622 throw new TypeError(`Parameter fn must be a function`); 2623 } 2624 const cache = /* @__PURE__ */ new Map(); 2625 const memoized = (...args) => { 2626 let key; 2627 if (args.find((arg) => typeof arg === "object")) { 2628 const objectArguments = args.filter( 2629 (arg) => typeof arg === "object" 2630 ); 2631 key = objectArguments.map((objArg) => JSON.stringify(objArg)); 2632 if (args.length > 1 && objectArguments.length < args.length) { 2633 args.forEach((arg) => typeof arg !== "object" && key.push(arg)); 2634 } 2635 key = key.join(","); 2636 } else { 2637 key = args.length > 1 ? args.join(",") : args[0]; 2638 } 2639 if (cache.has(key)) { 2640 return cache.get(key); 2641 } else { 2642 const result = fn.apply(null, args); 2643 cache.set(key, result); 2644 return result; 2645 } 2646 }; 2647 memoized.getCache = () => cache; 2648 return memoized; 2649 } 2650 2651
2651// src/main/resources/META-INF/resources/liferay/util/to_char_code.es.js 2652 var toCharCode = memoize( 2653 (name) => name.split("").map((val) => val.charCodeAt()).join("") 2654 ); 2655 var to_char_code_es_default = toCharCode; 2656 2657
2657// src/main/resources/META-INF/resources/liferay/portal/tabs.es.js 2658 var EVENT_SHOW_TAB = "showTab"; 2659 function showTab(namespace, names, id, callback) { 2660 const namespacedId = namespace + to_char_code_es_default(id); 2661 const selectedTab = document.getElementById(namespacedId + "TabsId"); 2662 const selectedTabSection = document.getElementById( 2663 namespacedId + "TabsSection" 2664 ); 2665 if (selectedTab && selectedTabSection) { 2666 const details = { 2667 id, 2668 names, 2669 namespace, 2670 selectedTab, 2671 selectedTabSection 2672 }; 2673 if (callback && typeof callback === "function") { 2674 callback.call(this, namespace, names, id, details); 2675 } 2676 try { 2677 Liferay.on(EVENT_SHOW_TAB, applyTabSelectionDOMChanges); 2678 Liferay.fire(EVENT_SHOW_TAB, details); 2679 } finally { 2680 Liferay.detach(EVENT_SHOW_TAB, applyTabSelectionDOMChanges); 2681 } 2682 } 2683 } 2684 function applyTabSelectionDOMChanges({ 2685 id, 2686 names, 2687 namespace, 2688 selectedTab, 2689 selectedTabSection 2690 }) { 2691 const selectedTabLink = selectedTab.querySelector("a"); 2692 if (selectedTab && selectedTabLink) { 2693 const activeTab = selectedTab.parentElement.querySelector(".active"); 2694 if (activeTab) { 2695 activeTab.classList.remove("active"); 2696 } 2697 selectedTabLink.classList.add("active"); 2698 } 2699 if (selectedTabSection) { 2700 selectedTabSection.classList.remove("hide"); 2701 } 2702 const tabTitle = document.getElementById(namespace + "dropdownTitle"); 2703 if (tabTitle && selectedTabLink) { 2704 tabTitle.innerHTML = selectedTabLink.textContent; 2705 } 2706 names.splice(names.indexOf(id), 1); 2707 let tabSection; 2708 for (let i = 0; i < names.length; i++) { 2709 tabSection = document.getElementById( 2710 namespace + to_char_code_es_default(names[i]) + "TabsSection" 2711 ); 2712 if (tabSection) { 2713 tabSection.classList.add("hide"); 2714 } 2715 } 2716 } 2717 2718
2718// src/main/resources/META-INF/resources/liferay/portal/tooltip.es.js 2719 function showTooltip(element, text) { 2720 element.setAttribute("title", text); 2721 element.classList.add("lfr-portal-tooltip"); 2722 } 2723 2724
2724// src/main/resources/META-INF/resources/liferay/util/fetch.es.js 2725 function setNewLocation(resource, newLocation) { 2726 if (typeof resource === "string") { 2727 resource = newLocation; 2728 } else if (resource instanceof URL) { 2729 resource = new URL(newLocation); 2730 } else if (resource instanceof Request) { 2731 resource = new Request(newLocation, resource); 2732 } else { 2733 console.warn( 2734 "Resource passed to `fetch()` must either be a string, Request, or URL." 2735 ); 2736 } 2737 return resource; 2738 } 2739 function defaultFetch(resource, init = {}) { 2740 if (!resource) { 2741 resource = "/o/"; 2742 } 2743 let resourceLocation = resource.url ? resource.url : resource.toString(); 2744 if (resourceLocation.startsWith("/")) { 2745 const pathContext = Liferay.ThemeDisplay.getPathContext(); 2746 if (pathContext && !resourceLocation.startsWith(pathContext)) { 2747 resourceLocation = pathContext + resourceLocation; 2748 resource = setNewLocation(resource, resourceLocation); 2749 } 2750 resourceLocation = window.location.origin + resourceLocation; 2751 } 2752 const resourceURL = new URL(resourceLocation); 2753 const headers = new Headers({}); 2754 const config = {}; 2755 if (resourceURL.origin === window.location.origin) { 2756 headers.set("x-csrf-token", Liferay.authToken); 2757 config.credentials = "include"; 2758 const doAsUserIdEncoded = Liferay.ThemeDisplay.getDoAsUserIdEncoded(); 2759 if (doAsUserIdEncoded) { 2760 resourceURL.searchParams.set("doAsUserId", doAsUserIdEncoded); 2761 resourceLocation = resourceURL.toString(); 2762 resource = setNewLocation(resource, resourceLocation); 2763 } 2764 } 2765 new Headers(init.headers || {}).forEach((value, key) => { 2766 headers.set(key, value); 2767 }); 2768 return fetch(resource, { ...config, ...init, headers }); 2769 } 2770 2771
2771// src/main/resources/META-INF/resources/liferay/util/get_portlet_id.js 2772 var REGEX_PORTLET_ID = /^(?:p_p_id)?_(.*)_.*$/; 2773 function getPortletId(portletId) { 2774 return portletId.replace(REGEX_PORTLET_ID, "$1"); 2775 } 2776 2777
2777// src/main/resources/META-INF/resources/liferay/util/get_portlet_namespace.es.js 2778 function getPortletNamespace(portletId) { 2779 if (typeof portletId !== "string") { 2780 throw new TypeError("portletId must be a string"); 2781 } 2782 return `_${portletId}_`; 2783 } 2784 2785
2785// src/main/resources/META-INF/resources/liferay/util/portlet_url/create_portlet_url.es.js 2786 var SCHEME_REGEXP = /^[a-z][a-z0-9+.-]*:/i; 2787 function isAbsolute_(urlString) { 2788 return SCHEME_REGEXP.test(urlString); 2789 } 2790 function createPortletURL(basePortletURL, parameters = {}) { 2791 if (typeof basePortletURL !== "string") { 2792 throw new TypeError("basePortletURL parameter must be a string"); 2793 } 2794 if (!parameters || typeof parameters !== "object") { 2795 throw new TypeError("parameters argument must be an object"); 2796 } 2797 const reservedParameters = /* @__PURE__ */ new Set([ 2798 "doAsGroupId", 2799 "doAsUserId", 2800 "doAsUserLanguageId", 2801 "p_auth", 2802 "p_auth_secret", 2803 "p_f_id", 2804 "p_j_a_id", 2805 "p_l_id", 2806 "p_l_reset", 2807 "p_p_auth", 2808 "p_p_cacheability", 2809 "p_p_i_id", 2810 "p_p_id", 2811 "p_p_isolated", 2812 "p_p_lifecycle", 2813 "p_p_mode", 2814 "p_p_resource_id", 2815 "p_p_state", 2816 "p_p_state_rcv", 2817 "p_p_static", 2818 "p_p_url_type", 2819 "p_p_width", 2820 "p_t_lifecycle", 2821 "p_v_l_s_g_id", 2822 "refererGroupId", 2823 "refererPlid", 2824 "saveLastPath", 2825 "scroll" 2826 ]); 2827 if (basePortletURL.indexOf(Liferay.ThemeDisplay.getPortalURL()) !== 0 && !isAbsolute_(basePortletURL)) { 2828 if (basePortletURL.indexOf("/") !== 0) { 2829 basePortletURL = `${Liferay.ThemeDisplay.getPortalURL()}/${basePortletURL}`; 2830 } else { 2831 basePortletURL = Liferay.ThemeDisplay.getPortalURL() + basePortletURL; 2832 } 2833 } 2834 const portletURL = new URL(basePortletURL); 2835 const urlSearchParams = new URLSearchParams(portletURL.search); 2836 const portletID = parameters.p_p_id || urlSearchParams.get("p_p_id"); 2837 if (Object.entries(parameters).length && !portletID) { 2838 throw new TypeError( 2839 "Portlet ID must not be null if parameters are provided" 2840 ); 2841 } 2842 let namespace = ""; 2843 if (Object.entries(parameters).length) { 2844 namespace = getPortletNamespace(portletID); 2845 } 2846 Object.keys(parameters).forEach((key) => { 2847 let param; 2848 if (reservedParameters.has(key)) { 2849 param = key; 2850 } else { 2851 param = `${namespace}${key}`; 2852 } 2853 urlSearchParams.set(param, parameters[key]); 2854 }); 2855 portletURL.search = urlSearchParams.toString(); 2856 return portletURL; 2857 } 2858 2859
vendor: 497 bytes, lines 2859-2872
2859// ../../../node_modules/uuid/dist/esm-browser/rng.js 2860 var getRandomValues; 2861 var rnds8 = new Uint8Array(16); 2862 function rng() { 2863 if (!getRandomValues) { 2864 getRandomValues = typeof crypto !== "undefined" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto); 2865 if (!getRandomValues) { 2866 throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported"); 2867 } 2868 } 2869 return getRandomValues(rnds8); 2870 } 2871 2872
vendor: 746 bytes, lines 2872-2881
2872// ../../../node_modules/uuid/dist/esm-browser/stringify.js 2873 var byteToHex = []; 2874 for (let i = 0; i < 256; ++i) { 2875 byteToHex.push((i + 256).toString(16).slice(1)); 2876 } 2877 function unsafeStringify(arr, offset = 0) { 2878 return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); 2879 } 2880 2881
vendor: 210 bytes, lines 2881-2887
2881// ../../../node_modules/uuid/dist/esm-browser/native.js 2882 var randomUUID = typeof crypto !== "undefined" && crypto.randomUUID && crypto.randomUUID.bind(crypto); 2883 var native_default = { 2884 randomUUID 2885 }; 2886 2887
vendor: 562 bytes, lines 2887-2907
2887// ../../../node_modules/uuid/dist/esm-browser/v4.js 2888 function v4(options, buf, offset) { 2889 if (native_default.randomUUID && !buf && !options) { 2890 return native_default.randomUUID(); 2891 } 2892 options = options || {}; 2893 const rnds = options.random || (options.rng || rng)(); 2894 rnds[6] = rnds[6] & 15 | 64; 2895 rnds[8] = rnds[8] & 63 | 128; 2896 if (buf) { 2897 offset = offset || 0; 2898 for (let i = 0; i < 16; ++i) { 2899 buf[offset + i] = rnds[i]; 2900 } 2901 return buf; 2902 } 2903 return unsafeStringify(rnds); 2904 } 2905 var v4_default = v4; 2906 2907
2907// src/main/resources/META-INF/resources/liferay/portlet/portlet_constants.es.js 2908 var PortletConstants = { 2909 // Portlet mode 2910 EDIT: "edit", 2911 HELP: "help", 2912 VIEW: "view", 2913 // Window state 2914 MAXIMIZED: "maximized", 2915 MINIMIZED: "minimized", 2916 NORMAL: "normal", 2917 // Resource URL cacheability 2918 FULL: "cacheLevelFull", 2919 PAGE: "cacheLevelPage", 2920 PORTLET: "cacheLevelPortlet" 2921 }; 2922 var portlet_constants_es_default = PortletConstants; 2923 2924
2924// src/main/resources/META-INF/resources/liferay/portlet/RenderState.es.js 2925 var RenderState = class _RenderState { 2926 constructor(state) { 2927 if (isObject(state)) { 2928 this.from(state); 2929 } else { 2930 this.parameters = {}; 2931 this.portletMode = portlet_constants_es_default.VIEW; 2932 this.windowState = portlet_constants_es_default.NORMAL; 2933 } 2934 } 2935 /** 2936 * Clone returns a copy of this RenderState instance. 2937 * @memberof RenderState 2938 * @return {RenderState} A RenderState instance with same properties. 2939 * @review 2940 */ 2941 clone() { 2942 return new _RenderState(this); 2943 } 2944 /** 2945 * Set the properties of a RenderState instance based on another RenderState 2946 * @memberof RenderState 2947 * @review 2948 */ 2949 from(renderState) { 2950 this.parameters = {}; 2951 Object.keys(renderState.parameters).forEach((name) => { 2952 if (Array.isArray(renderState.parameters[name])) { 2953 this.parameters[name] = renderState.parameters[name].slice(0); 2954 } 2955 }); 2956 this.setPortletMode(renderState.portletMode); 2957 this.setWindowState(renderState.windowState); 2958 } 2959 /** 2960 * Returns the portletMode for this RenderState. 2961 * @memberof RenderState 2962 * @return {String} The portletMode for this render state 2963 * @review 2964 */ 2965 getPortletMode() { 2966 return this.portletMode; 2967 } 2968 /** 2969 * Returns the string parameter value for the given name. 2970 * If name designates a multi-valued parameter this function returns 2971 * the first value in the values array. If the parameter is undefined 2972 * this function returns the optional default parameter <code>defaultValue</code>. 2973 * @memberof RenderState 2974 * @param {String} name The name of the parameter to retreive. 2975 * @param {?String} defaultValue The default value of the parameter in case it is undefined. 2976 * @return {String} The value of the parameter 2977 * @review 2978 */ 2979 getValue(name, defaultValue) { 2980 if (typeof name !== "string") { 2981 throw new TypeError("Parameter name must be a string"); 2982 } 2983 let value = this.parameters[name]; 2984 if (Array.isArray(value)) { 2985 value = value[0]; 2986 } 2987 if (value === void 0 && defaultValue !== void 0) { 2988 value = defaultValue; 2989 } 2990 return value; 2991 } 2992 /** 2993 * Gets the string array parameter value for the given <code>name</code>. 2994 * If the parameter for the given name is undefined, this function 2995 * returns the optional default value array <code>def</code>. 2996 * @memberof RenderState 2997 * @param {String} name The name of the parameter to retrieve. 2998 * @param {?Array} defaultValue The default value for the parameter if it is undefined. 2999 * @return {Array} 3000 * @review 3001 */ 3002 getValues(name, defaultValue) { 3003 if (typeof name !== "string") { 3004 throw new TypeError("Parameter name must be a string"); 3005 } 3006 const value = this.parameters[name]; 3007 return value ? value : defaultValue; 3008 } 3009 /** 3010 * Returns the windowState for this RenderState. 3011 * @memberof RenderState 3012 * @return {String} the window state for this render state 3013 * @review 3014 */ 3015 getWindowState() { 3016 return this.windowState; 3017 } 3018 /** 3019 * Removes the parameter with the given name. 3020 * @memberof RenderState 3021 * @param {String} name The name of the parameter to be removed. 3022 * @review 3023 */ 3024 remove(name) { 3025 if (typeof name !== "string") { 3026 throw new TypeError("Parameter name must be a string"); 3027 } 3028 if (this.parameters[name] !== void 0) { 3029 delete this.parameters[name]; 3030 } 3031 } 3032 /** 3033 * Sets the portletMode to the specified value. 3034 * @memberof RenderState 3035 * @param {String} portletMode The portlet mode to be set. 3036 * @review 3037 * @see {PortletConstants} 3038 */ 3039 setPortletMode(portletMode) { 3040 if (typeof portletMode !== "string") { 3041 throw new TypeError("Portlet Mode must be a string"); 3042 } 3043 if (portletMode === portlet_constants_es_default.EDIT || portletMode === portlet_constants_es_default.HELP || portletMode === portlet_constants_es_default.VIEW) { 3044 this.portletMode = portletMode; 3045 } 3046 } 3047 /** 3048 * Sets a parameter with a given name and value. 3049 * The value may be a string or an array.
3050 * @memberof RenderState 3051 * @param {String} name The name of the parameter. 3052 * @param {Array|String} value The value of the parameter. 3053 * @review 3054 */ 3055 setValue(name, value) { 3056 if (typeof name !== "string") { 3057 throw new TypeError("Parameter name must be a string"); 3058 } 3059 if (typeof value !== "string" && value !== null && !Array.isArray(value)) { 3060 throw new TypeError( 3061 "Parameter value must be a string, an array or null" 3062 ); 3063 } 3064 if (!Array.isArray(value)) { 3065 value = [value]; 3066 } 3067 this.parameters[name] = value; 3068 } 3069 /** 3070 * Sets a parameter with a given name and value. 3071 * The value may be a string or an array. 3072 * @memberof RenderState 3073 * @param {String} name The name of the parameter. 3074 * @param {Array|String} value The value of the parameter. 3075 * @review 3076 */ 3077 setValues(name, value) { 3078 this.setValue(name, value); 3079 } 3080 /** 3081 * Sets the windowState to the specified value. 3082 * @memberof RenderState 3083 * @param {String} windowSstate The window state to be set. 3084 * @return {String} 3085 * @review 3086 * @see {PortletConstants} 3087 */ 3088 setWindowState(windowState) { 3089 if (typeof windowState !== "string") { 3090 throw new TypeError("Window State must be a string"); 3091 } 3092 if (windowState === portlet_constants_es_default.MAXIMIZED || windowState === portlet_constants_es_default.MINIMIZED || windowState === portlet_constants_es_default.NORMAL) { 3093 this.windowState = windowState; 3094 } 3095 } 3096 }; 3097 var RenderState_es_default = RenderState; 3098 3099
3099// src/main/resources/META-INF/resources/liferay/portlet/portlet_util.es.js 3100 var AJAX_ACTION_VALUE = "0"; 3101 var CACHE_LEVEL_KEY = "p_p_cacheability"; 3102 var HUB_ACTION_KEY = "p_p_hub"; 3103 var PARTIAL_ACTION_VALUE = "1"; 3104 var PORTLET_MODE_KEY = "p_p_mode"; 3105 var PUBLIC_RENDER_PARAM_KEY = "p_r_p_"; 3106 var RENDER_PARAM_KEY = "priv_r_p_"; 3107 var RESOURCE_ID_KEY = "p_p_resource_id"; 3108 var TOKEN_DELIM = "&"; 3109 var VALUE_ARRAY_EMPTY = ""; 3110 var VALUE_DELIM = "="; 3111 var VALUE_NULL = ""; 3112 var WINDOW_STATE_KEY = "p_p_state"; 3113 var isParameterEqual = function(parameter1, parameter2) { 3114 let result = false; 3115 if (parameter1 === void 0 && parameter2 === void 0) { 3116 result = true; 3117 } 3118 if (parameter1 === void 0 || parameter2 === void 0) { 3119 result = false; 3120 } 3121 if (parameter1.length !== parameter2.length) { 3122 result = false; 3123 } 3124 for (let i = parameter1.length - 1; i >= 0; i--) { 3125 if (parameter1[i] !== parameter2[i]) { 3126 result = false; 3127 } 3128 } 3129 return result; 3130 }; 3131 var stateChanged = function(pageRenderState2, newState, portletId) { 3132 let result = false;
3133 if (pageRenderState2 && pageRenderState2.portlets) { 3134 const portletData = pageRenderState2.portlets[portletId]; 3135 if (portletData) { 3136 const oldState = pageRenderState2.portlets[portletId].state; 3137 if (!newState.portletMode || !newState.windowState || !newState.parameters) { 3138 throw new Error(`Error decoding state: ${newState}`); 3139 } 3140 if (newState.porletMode !== oldState.portletMode || newState.windowState !== oldState.windowState) { 3141 result = true; 3142 } else { 3143 const newKeys = Object.keys(newState.parameters); 3144 newKeys.forEach((key) => { 3145 const newParameter = newState.parameters[key]; 3146 const oldParameter = oldState.parameters[key]; 3147 if (!isParameterEqual(newParameter, oldParameter)) { 3148 result = true; 3149 } 3150 }); 3151 const oldKeys = Object.keys(oldState.parameters); 3152 oldKeys.forEach((key) => { 3153 if (!newState.parameters[key]) { 3154 result = true; 3155 } 3156 }); 3157 } 3158 } 3159 } 3160 return result; 3161 }; 3162 var decodeUpdateString = function(pageRenderState2, updateString) { 3163 const portlets = pageRenderState2 && pageRenderState2.portlets ? pageRenderState2.portlets : {}; 3164 try { 3165 const newRenderState = JSON.parse(updateString); 3166 if (newRenderState.portlets) { 3167 const keys = Object.keys(portlets); 3168 keys.forEach((key) => { 3169 const newState = newRenderState.portlets[key].state; 3170 const oldState = portlets[key].state; 3171 if (!newState || !oldState) { 3172 throw new Error( 3173 `Invalid update string. 3174old state=${oldState} 3175new state=${newState}` 3176 ); 3177 } 3178 if (stateChanged(pageRenderState2, newState, key)) { 3179 portlets[key] = newRenderState.portlets[key]; 3180 } 3181 }); 3182 } 3183 } catch (error) { 3184 } 3185 return portlets; 3186 }; 3187 var encodeFormAsString = function(portletId, form) { 3188 const parameters = []; 3189 for (let i = 0; i < form.elements.length; i++) { 3190 const element = form.elements[i]; 3191 const name = element.name; 3192 const tag = element.nodeName.toUpperCase(); 3193 const type = tag === "INPUT" ? element.type.toUpperCase() : ""; 3194 const value = element.value; 3195 if (name && !element.disabled && type !== "FILE") { 3196 if (tag === "SELECT" && element.multiple) { 3197 const options = [...element.options]; 3198 options.forEach((opt) => { 3199 if (opt.checked) { 3200 const value2 = opt.value; 3201 const parameter = encodeURIComponent(portletId + name) + "=" + encodeURIComponent(value2); 3202 parameters.push(parameter); 3203 } 3204 }); 3205 } else if (type !== "CHECKBOX" && type !== "RADIO" || element.checked) { 3206 const param = encodeURIComponent(portletId + name) + "=" + encodeURIComponent(value); 3207 parameters.push(param); 3208 } 3209 } 3210 } 3211 return parameters.join("&"); 3212 }; 3213 var encodeParameter = function(name, values) { 3214 let str = ""; 3215 if (Array.isArray(values)) { 3216 if (!values.length) { 3217 str += TOKEN_DELIM + encodeURIComponent(name) + VALUE_DELIM + VALUE_ARRAY_EMPTY; 3218 } else { 3219 values.forEach((value) => { 3220 str += TOKEN_DELIM + encodeURIComponent(name); 3221 if (value === null) { 3222 str += VALUE_DELIM + VALUE_NULL; 3223 } else { 3224 str += VALUE_DELIM + encodeURIComponent(value); 3225 } 3226 }); 3227 } 3228 } 3229 return str; 3230 }; 3231 var generateActionUrl = function(portletId, url, form) { 3232 const request = { 3233 credentials: "same-origin", 3234 method: "POST", 3235 url 3236 }; 3237 if (form) { 3238 const enctype = form.enctype; 3239 if (enctype === "multipart/form-data") { 3240 const formData = new FormData(form); 3241 request.body = formData; 3242 } else { 3243 const formAsString = encodeFormAsString(portletId, form); 3244 const method = form.method ? form.method.toUpperCase() : "GET"; 3245 if (method === "GET") { 3246 if (url.indexOf("?") >= 0) { 3247 url += `&${formAsString}`; 3248 } else { 3249 url += `?${formAsString}`; 3250 } 3251 request.url = url; 3252 } else { 3253 request.body = formAsString; 3254 request.headers = { 3255 "Content-Type": "application/x-www-form-urlencoded" 3256 }; 3257 } 3258 } 3259 } 3260 return request; 3261 }; 3262 var generateParameterString = function(pageRenderState2, portletId, name, type, group) { 3263 let str = ""; 3264 if (pageRenderState2.portlets && pageRenderState2.portlets[portletId]) { 3265 const portletData = pageRenderState2.portlets[portletId]; 3266 if (portletData && portletData.state && portletData.state.parameters) { 3267 const values = portletData.state.parameters[name]; 3268 if (values !== void 0) { 3269 if (type === PUBLIC_RENDER_PARAM_KEY) { 3270 str += encodeParameter(group, values); 3271 } else if (type === RENDER_PARAM_KEY) { 3272 str += encodeParameter( 3273 portletId + RENDER_PARAM_KEY + name, 3274 values 3275 ); 3276 } else { 3277 str += encodeParameter(portletId + name, values); 3278 } 3279 } 3280 } 3281 } 3282 return str; 3283 }; 3284 var generatePortletModeAndWindowStateString = function(pageRenderState2, portletId) { 3285 let str = ""; 3286 if (pageRenderState2.portlets) { 3287 const portletData = pageRenderState2.portlets[portletId]; 3288 if (portletData.state) { 3289 const state = portletData.state; 3290 str += TOKEN_DELIM + PORTLET_MODE_KEY + VALUE_DELIM + encodeURIComponent(state.portletMode); 3291 str += TOKEN_DELIM + WINDOW_STATE_KEY + VALUE_DELIM + encodeURIComponent(state.windowState); 3292 } 3293 } 3294 return str; 3295 }; 3296 var isParameterInStateEqual = function(pageRenderState2, portletId, state, name) { 3297 let result = false;
3298 if (pageRenderState2 && pageRenderState2.portlets) { 3299 const portletData = pageRenderState2.portlets[portletId]; 3300 if (state.parameters[name] && portletData.state.parameters[name]) { 3301 const newParameter = state.parameters[name]; 3302 const oldParameter = portletData.state.parameters[name]; 3303 result = isParameterEqual(newParameter, oldParameter); 3304 } 3305 } 3306 return result; 3307 }; 3308 var getUpdatedPublicRenderParameters = function(pageRenderState2, portletId, state) { 3309 const publicRenderParameters = {}; 3310 if (pageRenderState2 && pageRenderState2.portlets) { 3311 const portletData = pageRenderState2.portlets[portletId]; 3312 if (portletData && portletData.pubParms) { 3313 const portletPublicParameters = portletData.pubParms; 3314 const keys = Object.keys(portletPublicParameters); 3315 keys.forEach((key) => { 3316 if (!isParameterInStateEqual( 3317 pageRenderState2, 3318 portletId, 3319 state, 3320 key 3321 )) { 3322 const group = portletPublicParameters[key]; 3323 publicRenderParameters[group] = state.parameters[key]; 3324 } 3325 }); 3326 } 3327 } 3328 return publicRenderParameters; 3329 }; 3330 var isPublicParameter = function(pageRenderState2, portletId, name) { 3331 let result = false;
3332 if (pageRenderState2 && pageRenderState2.portlets) { 3333 const portletData = pageRenderState2.portlets[portletId]; 3334 if (portletData && portletData.pubParms) { 3335 const keys = Object.keys(portletData.pubParms); 3336 result = keys.includes(name); 3337 } 3338 } 3339 return result; 3340 }; 3341 var getUrl = function(pageRenderState2, type, portletId, parameters, cache, resourceId) { 3342 let cacheability = "cacheLevelPage"; 3343 let str = ""; 3344 let url = ""; 3345 if (pageRenderState2 && pageRenderState2.portlets) { 3346 if (type === "RENDER" && portletId === void 0) { 3347 portletId = null; 3348 } 3349 const portletData = pageRenderState2.portlets[portletId]; 3350 if (portletData) { 3351 if (type === "RESOURCE") { 3352 url = decodeURIComponent(portletData.encodedResourceURL); 3353 if (cache) { 3354 cacheability = cache; 3355 } 3356 url += TOKEN_DELIM + CACHE_LEVEL_KEY + VALUE_DELIM + encodeURIComponent(cacheability); 3357 if (resourceId) { 3358 url += TOKEN_DELIM + RESOURCE_ID_KEY + VALUE_DELIM + encodeURIComponent(resourceId); 3359 } 3360 } else if (type === "RENDER" && portletId !== null) { 3361 url = decodeURIComponent(portletData.encodedRenderURL); 3362 } else if (type === "RENDER") { 3363 url = decodeURIComponent(pageRenderState2.encodedCurrentURL); 3364 } else if (type === "ACTION") { 3365 url = decodeURIComponent(portletData.encodedActionURL); 3366 url += TOKEN_DELIM + HUB_ACTION_KEY + VALUE_DELIM + encodeURIComponent(AJAX_ACTION_VALUE); 3367 } else if (type === "PARTIAL_ACTION") { 3368 url = decodeURIComponent(portletData.encodedActionURL); 3369 url += TOKEN_DELIM + HUB_ACTION_KEY + VALUE_DELIM + encodeURIComponent(PARTIAL_ACTION_VALUE); 3370 } 3371 if (type !== "RESOURCE" || cacheability !== "cacheLevelFull") { 3372 if (portletId) { 3373 url += generatePortletModeAndWindowStateString( 3374 pageRenderState2, 3375 portletId 3376 ); 3377 } 3378 if (portletId) { 3379 str = ""; 3380 if (portletData.state && portletData.state.parameters) { 3381 const stateParameters = portletData.state.parameters; 3382 const keys = Object.keys(stateParameters); 3383 keys.forEach((key) => { 3384 if (!isPublicParameter( 3385 pageRenderState2, 3386 portletId, 3387 key 3388 )) { 3389 str += generateParameterString( 3390 pageRenderState2, 3391 portletId, 3392 key, 3393 RENDER_PARAM_KEY 3394 ); 3395 } 3396 }); 3397 url += str; 3398 } 3399 } 3400 if (pageRenderState2.prpMap) { 3401 str = ""; 3402 const publicRenderParameters = {}; 3403 const mapKeys = Object.keys(pageRenderState2.prpMap); 3404 mapKeys.forEach((mapKey) => { 3405 const groupKeys = Object.keys( 3406 pageRenderState2.prpMap[mapKey] 3407 ); 3408 groupKeys.forEach((groupKey) => { 3409 const groupName = pageRenderState2.prpMap[mapKey][groupKey]; 3410 const parts = groupName.split("|"); 3411 if (!Object.hasOwnProperty.call( 3412 publicRenderParameters, 3413 mapKey 3414 )) { 3415 publicRenderParameters[mapKey] = generateParameterString( 3416 pageRenderState2, 3417 parts[0], 3418 parts[1], 3419 PUBLIC_RENDER_PARAM_KEY, 3420 mapKey 3421 ); 3422 str += publicRenderParameters[mapKey]; 3423 } 3424 }); 3425 }); 3426 url += str; 3427 } 3428 } 3429 } 3430 } 3431 if (parameters) { 3432 str = ""; 3433 const parameterKeys = Object.keys(parameters); 3434 parameterKeys.forEach((parameterKey) => { 3435 str += encodeParameter( 3436 portletId + parameterKey, 3437 parameters[parameterKey] 3438 ); 3439 }); 3440 url += str; 3441 } 3442 return Promise.resolve(url); 3443 };
3444 var validateArguments = function(args = [], min = 0, max = 1, types = []) { 3445 if (args.length < min) { 3446 throw new TypeError( 3447 `Too few arguments provided: Number of arguments: ${args.length}` 3448 ); 3449 } else if (args.length > max) { 3450 throw new TypeError( 3451 `Too many arguments provided: ${[].join.call(args, ", ")}` 3452 ); 3453 } else if (Array.isArray(types)) { 3454 let i = Math.min(args.length, types.length) - 1; 3455 for (i; i >= 0; i--) { 3456 if (typeof args[i] !== types[i]) { 3457 throw new TypeError( 3458 `Parameter ${i} is of type ${typeof args[i]} rather than the expected type ${types[i]}` 3459 ); 3460 } 3461 if (args[i] === null || args[i] === void 0) { 3462 throw new TypeError(`Argument is ${typeof args[i]}`); 3463 } 3464 } 3465 } 3466 }; 3467 var validateForm = function(form) { 3468 if (!(form instanceof HTMLFormElement)) { 3469 throw new TypeError("Element must be an HTMLFormElement"); 3470 } 3471 const method = form.method ? form.method.toUpperCase() : void 0; 3472 if (method && method !== "GET" && method !== "POST") { 3473 throw new TypeError( 3474 `Invalid form method ${method}. Allowed methods are GET & POST` 3475 ); 3476 } 3477 const enctype = form.enctype; 3478 if (enctype && enctype !== "application/x-www-form-urlencoded" && enctype !== "multipart/form-data") { 3479 throw new TypeError( 3480 `Invalid form enctype ${enctype}. Allowed: 'application/x-www-form-urlencoded' & 'multipart/form-data'` 3481 ); 3482 } 3483 if (enctype && enctype === "multipart/form-data" && method !== "POST") { 3484 throw new TypeError( 3485 "Invalid method with multipart/form-data. Must be POST" 3486 ); 3487 } 3488 if (!enctype || enctype === "application/x-www-form-urlencoded") { 3489 const l = form.elements.length; 3490 for (let i = 0; i < l; i++) { 3491 if (form.elements[i].nodeName.toUpperCase() === "INPUT" && form.elements[i].type.toUpperCase() === "FILE") { 3492 throw new TypeError( 3493 "Must use enctype = 'multipart/form-data' with input type FILE." 3494 ); 3495 } 3496 } 3497 } 3498 }; 3499 var validateParameters = function(parameters) { 3500 if (!(parameters !== void 0 && parameters !== null)) { 3501 throw new TypeError(`The parameter object is: ${typeof parameters}`); 3502 } 3503 const keys = Object.keys(parameters); 3504 keys.forEach((key) => { 3505 if (!Array.isArray(parameters[key])) { 3506 throw new TypeError(`${key} parameter is not an array`); 3507 } 3508 if (!parameters[key].length) { 3509 throw new TypeError(`${key} parameter is an empty array`); 3510 } 3511 }); 3512 }; 3513 var validatePortletId = function(pageRenderState2 = {}, portletId = "") { 3514 return pageRenderState2.portlets && Object.keys(pageRenderState2.portlets).includes(portletId); 3515 }; 3516 var validateState = function(state = {}, portletData = {}) { 3517 validateParameters(state.parameters); 3518 const portletMode = state.portletMode; 3519 if (typeof portletMode !== "string") { 3520 throw new TypeError( 3521 `Invalid parameters. portletMode is ${typeof portletMode}` 3522 ); 3523 } else { 3524 const allowedPortletModes = portletData.allowedPM; 3525 if (!allowedPortletModes.includes(portletMode.toLowerCase())) { 3526 throw new TypeError( 3527 `Invalid portletMode=${portletMode} is not in ${allowedPortletModes}` 3528 ); 3529 } 3530 } 3531 const windowState = state.windowState; 3532 if (typeof windowState !== "string") { 3533 throw new TypeError( 3534 `Invalid parameters. windowState is ${typeof windowState}` 3535 ); 3536 } else { 3537 const allowedWindowStates = portletData.allowedWS; 3538 if (!allowedWindowStates.includes(windowState.toLowerCase())) { 3539 throw new TypeError( 3540 `Invalid windowState=${windowState} is not in ${allowedWindowStates}` 3541 ); 3542 } 3543 } 3544 }; 3545 3546
3546// src/main/resources/META-INF/resources/liferay/portlet/PortletInit.es.js 3547 var doHistory = window.history && window.history.pushState; 3548 var portletRegex = "^portlet[.].*"; 3549 var busy = false; 3550 var eventListeners = {}; 3551 var eventListenersQueue = []; 3552 var pageRenderState; 3553 var PortletInit = class { 3554 constructor(portletId) { 3555 this._portletId = portletId; 3556 this.constants = { ...portlet_constants_es_default }; 3557 if (!pageRenderState) { 3558 pageRenderState = global.portlet.data.pageRenderState; 3559 this._updateHistory(true); 3560 } 3561 this.portletModes = pageRenderState.portlets[this._portletId].allowedPM.slice(0); 3562 this.windowStates = pageRenderState.portlets[this._portletId].allowedWS.slice(0); 3563 } 3564 /** 3565 * Performs the actual action. 3566 * @param {Object} parameters Additional parameters to be set. 3567 * @param {HTMLFormElement} element Form to be submitted. May be <code>null</code>. 3568 * @protected 3569 * @review 3570 */ 3571 _executeAction(parameters, element) { 3572 return new Promise((resolve, reject) => { 3573 getUrl(pageRenderState, "ACTION", this._portletId, parameters).then( 3574 (url) => { 3575 const options = generateActionUrl( 3576 this._portletId, 3577 url, 3578 element 3579 ); 3580 defaultFetch(options.url, options).then((res) => res.text()).then((text) => { 3581 const updatedIds = this._updatePageStateFromString( 3582 text, 3583 this._portletId 3584 ); 3585 resolve(updatedIds); 3586 }).catch((error) => { 3587 reject(error); 3588 }); 3589 } 3590 ); 3591 }); 3592 } 3593 /** 3594 * Returns true if an onStateChange listener is registered for the portlet. 3595 * @memberof PortletInit 3596 * @param {string} portletId The portlet ID. 3597 * @return {boolean} Returns true if a listener is registered. 3598 * @protected 3599 * @review 3600 */ 3601 _hasListener(portletId) { 3602 const eventListenerPortletIds = Object.keys(eventListeners).map( 3603 (key) => eventListeners[key].id 3604 ); 3605 return eventListenerPortletIds.includes(portletId); 3606 } 3607 /** 3608 * Sends an onError event to all registered error event handlers for a given 3609 * portlet. 3610 * @memberof PortletInit 3611 * @param {string} portletId The portlet ID. 3612 * @param {string} err The error message. 3613 * @protected 3614 * @review 3615 */ 3616 _reportError(portletId, error) { 3617 Object.keys(eventListeners).map((key) => { 3618 const listener = eventListeners[key]; 3619 if (listener.id === portletId && listener.type === "portlet.onError") { 3620 setTimeout(() => { 3621 listener.handler("portlet.onError", error); 3622 }); 3623 } 3624 return false; 3625 }); 3626 } 3627 /** 3628 * Callback function that must be called after a partial action has been 3629 * started. 3630 * 3631 * The page state is generated by the portal and transmitted to the client by 3632 * the portlet. The portlet client that initiated the partial action must 3633 * pass the page state string to this function. 3634 * 3635 * The callback should only be called once to conclude a partial action sequence. 3636 * @memberof PortletInit 3637 * @param {string} portletId The portlet ID. 3638 * @param {string} updateString The new page state in string form. 3639 * @throws {TypeError} Thrown if the parameter is not a string. 3640 * @protected 3641 * @review 3642 */ 3643 _setPageState(portletId, updateString) { 3644 if (typeof updateString !== "string") { 3645 throw new TypeError(`Invalid update string: ${updateString}`); 3646 } 3647 this._updatePageState(updateString, portletId).then( 3648 (updatedIds) => { 3649 this._updatePortletStates(updatedIds); 3650 }, 3651 (error) => { 3652 busy = false; 3653 this._reportError(portletId, error); 3654 } 3655 ); 3656 } 3657 /** 3658 * Sets state for the portlet. 3659 * returns array of IDs for portlets that were affected by the change, 3660 * taking into account the public render parameters. 3661 * @memberof PortletInit 3662 * @param {Object} state The state to be set. 3663 * @return {Array} 3664 * @protected 3665 * @review 3666 */ 3667 _setState(state) { 3668 const publicRenderParameters = getUpdatedPublicRenderParameters( 3669 pageRenderState, 3670 this._portletId, 3671 state 3672 ); 3673 const updatedIds = []; 3674 const parameterKeys = Object.keys(publicRenderParameters); 3675 parameterKeys.forEach((parameterKey) => { 3676 const newValue = publicRenderParameters[parameterKey]; 3677 const groupMap = pageRenderState.prpMap[parameterKey]; 3678 const groupKeys = Object.keys(groupMap); 3679 groupKeys.forEach((groupKey) => { 3680 if (groupKey !== this._portletId) { 3681 const parts = groupMap[groupKey].split("|"); 3682 const portletId2 = parts[0]; 3683 const parameterName = parts[1]; 3684 if (newValue === void 0) { 3685 delete pageRenderState.portlets[portletId2].state.parameters[parameterName]; 3686 } else { 3687 pageRenderState.portlets[portletId2].state.parameters[parameterName] = [...newValue]; 3688 } 3689 updatedIds.push(portletId2); 3690 } 3691 }); 3692 }); 3693 const portletId = this._portletId; 3694 pageRenderState.portlets[portletId].state = state; 3695 updatedIds.push(portletId); 3696 updatedIds.forEach((updatedId) => { 3697 pageRenderState.portlets[updatedId].renderData.content = null; 3698 }); 3699 this._updateHistory(); 3700 return Promise.resolve(updatedIds); 3701 } 3702 /** 3703 * Sets up for the action. 3704 * @memberof PortletInit 3705 * @param {Object} parameters Additional parameters. May be <code>null</code>. 3706 * @param {HTMLFormElement} element Form to be submitted May be <code>null</code>. 3707 * @throws {AccessDeniedException} Thrown if a blocking operation is already in progress. 3708 * @throws {NotInitializedException} Thrown if a portlet ID is provided, but no onStateChange 3709 * listener has been registered. 3710 * @protected 3711 * @review 3712 */ 3713 _setupAction(parameters, element) { 3714 if (this.isInProgress()) { 3715 throw { 3716 message: "Operation is already in progress", 3717 name: "AccessDeniedException" 3718 }; 3719 } 3720 if (!this._hasListener(this._portletId)) { 3721 throw { 3722 message: `No onStateChange listener registered for portlet: ${this._portletId}`, 3723 name: "NotInitializedException" 3724 }; 3725 } 3726 busy = true; 3727 return this._executeAction(parameters, element).then( 3728 (updatedIds) => { 3729 return this._updatePortletStates(updatedIds).then( 3730 (updatedIds2) => { 3731 busy = false;
3732 return updatedIds2; 3733 } 3734 ); 3735 }, 3736 (error) => { 3737 busy = false; 3738 this._reportError(this._portletId, error); 3739 } 3740 ); 3741 } 3742 /** 3743 * Called when the page state has been updated to allow 3744 * the browser history to be taken care of. 3745 * @memberof PortletInit 3746 * @param {boolean} replace Replace the state rather than pushing. 3747 * @protected 3748 * @review 3749 */ 3750 _updateHistory(replace) { 3751 if (doHistory) { 3752 getUrl(pageRenderState, "RENDER", null, {}).then((url) => { 3753 const token = JSON.stringify(pageRenderState); 3754 if (replace) { 3755 history.replaceState(token, ""); 3756 } else { 3757 try { 3758 history.pushState(token, "", url); 3759 } catch (error) { 3760 } 3761 } 3762 }); 3763 } 3764 } 3765 /** 3766 * Update page state passed in after partial action. The list of 3767 * ID's of updated portlets is passed back through a promise in order 3768 * to decouple the layers. 3769 * 3770 * @memberof PortletInit 3771 * @param {string} updateString The updated render state string. 3772 * @review 3773 */ 3774 _updatePageState(updateString) { 3775 return new Promise((resolve, reject) => { 3776 try { 3777 const updatedIds = this._updatePageStateFromString( 3778 updateString, 3779 this._portletId 3780 ); 3781 resolve(updatedIds); 3782 } catch (error) { 3783 reject( 3784 new Error(`Partial Action decode status: ${error.message}`) 3785 ); 3786 } 3787 }); 3788 } 3789 /** 3790 * Updates page state from string and returns array of portlet IDs 3791 * to be updated. 3792 * 3793 * @memberof PortletInit 3794 * @param {string} updateString The update string. 3795 * @param {string} portletId The portlet ID. 3796 * @protected 3797 * @review 3798 */ 3799 _updatePageStateFromString(updateString, portletId) { 3800 const portlets = decodeUpdateString(pageRenderState, updateString); 3801 const updatedIds = []; 3802 let stateUpdated = false; 3803 const entries = Object.entries(portlets); 3804 entries.forEach(([key, portletData]) => { 3805 pageRenderState.portlets[key] = portletData; 3806 updatedIds.push(key); 3807 stateUpdated = true; 3808 }); 3809 if (stateUpdated && portletId) { 3810 this._updateHistory(); 3811 } 3812 return updatedIds; 3813 } 3814 /** 3815 *
3816 * Accepts an object containing changed render states. 3817 * Updates the state for each portlet present. 3818 * 3819 * @memberof PortletInit 3820 * @param {Array} updatedIds Array of portlet IDs to be updated. 3821 * @return {Promsise.<string>} 3822 * @protected 3823 * @review 3824 */ 3825 _updatePortletStates(updatedIds) { 3826 return new Promise((resolve) => { 3827 if (!updatedIds.length) { 3828 busy = false; 3829 } else { 3830 updatedIds.forEach((updatedId) => { 3831 this._updateStateForPortlet(updatedId); 3832 }); 3833 } 3834 resolve(updatedIds); 3835 }); 3836 } 3837 /** 3838 * Updates the page render state 3839 * 3840 * @memberof PortletInit 3841 * @param {Object} state The new state to be set. 3842 * @protected 3843 * @review 3844 */ 3845 _updateState(state) { 3846 if (busy) { 3847 throw { 3848 message: "Operation in progress", 3849 name: "AccessDeniedException" 3850 }; 3851 } else if (!this._hasListener(this._portletId)) { 3852 throw { 3853 message: `No onStateChange listener registered for portlet: ${this._portletId}`, 3854 name: "NotInitializedException" 3855 }; 3856 } 3857 busy = true; 3858 this._setState(state).then((updatedIds) => { 3859 this._updatePortletStates(updatedIds); 3860 }).catch((error) => { 3861 busy = false; 3862 this._reportError(this._portletId, error); 3863 }); 3864 } 3865 /** 3866 * Calls the portlet onStateChange method in an asynchronous manner in order 3867 * to decouple the public API. This method is intended for use after 3868 * portlet client registers an onStateChange listener. 3869 * 3870 * @memberof PortletInit 3871 * @param {string} portletId The portlet ID. 3872 * @protected 3873 * @review 3874 */ 3875 _updateStateForPortlet(portletId) { 3876 const updateQueueIds = eventListenersQueue.map((item) => item.handle); 3877 const entries = Object.entries(eventListeners); 3878 entries.forEach(([key, eventData]) => { 3879 if (eventData.type !== "portlet.onStateChange") { 3880 return; 3881 } 3882 if (eventData.id === portletId && !updateQueueIds.includes(key)) { 3883 eventListenersQueue.push(eventData); 3884 } 3885 }); 3886 if (eventListenersQueue.length) { 3887 setTimeout(() => { 3888 busy = true; 3889 while (eventListenersQueue.length) { 3890 const eventData = eventListenersQueue.shift(); 3891 const handler = eventData.handler; 3892 const id = eventData.id; 3893 if (!pageRenderState.portlets[id]) { 3894 continue; 3895 } 3896 const renderData = pageRenderState.portlets[id].renderData; 3897 const renderState = new RenderState_es_default( 3898 pageRenderState.portlets[id].state 3899 ); 3900 if (renderData && renderData.content) { 3901 handler( 3902 "portlet.onStateChange", 3903 renderState, 3904 renderData 3905 ); 3906 } else { 3907 handler("portlet.onStateChange", renderState); 3908 } 3909 } 3910 busy = false; 3911 }); 3912 } 3913 } 3914 /** 3915 * Initiates a portlet action using the specified action parameters and 3916 * element arguments. 3917 * 3918 * @memberof PortletInit 3919 * @param {PortletParameters} parameters Action parameters to be added to the URL 3920 * @param {HTMLFormElement} element DOM element of form to be submitted 3921 * @return {Promise} A Promise object that is resolved with no argument when the action request has completed. 3922 * @throws {TypeError} Thrown if the input parameters are invalid 3923 * @throws {AccessDeniedException} Thrown if a blocking operation is already in progress. 3924 * @throws {NotInitializedException} Thrown if a portlet ID is provided, but no onStateChange listener has been registered. 3925 * @review 3926 */ 3927 action(...args) { 3928 let actionParameters = null; 3929 let argCount = 0; 3930 let element = null; 3931 args.forEach((arg) => { 3932 if (arg instanceof HTMLFormElement) { 3933 if (element !== null) { 3934 throw new TypeError( 3935 `Too many [object HTMLFormElement] arguments: ${arg}, ${element}` 3936 ); 3937 } 3938 element = arg; 3939 } else if (isObject(arg)) { 3940 validateParameters(arg); 3941 if (actionParameters !== null) { 3942 throw new TypeError("Too many parameters arguments"); 3943 } 3944 actionParameters = arg;
3945 } else if (arg !== void 0) { 3946 const type = Object.prototype.toString.call(arg); 3947 throw new TypeError( 3948 `Invalid argument type. Argument ${argCount + 1} is of type ${type}` 3949 ); 3950 } 3951 argCount++; 3952 }); 3953 if (element) { 3954 validateForm(element); 3955 } 3956 return this._setupAction(actionParameters, element).then((val) => { 3957 Promise.resolve(val); 3958 }).catch((error) => { 3959 Promise.reject(error); 3960 }); 3961 } 3962 /** 3963 * Adds a listener function for specified event type. 3964 * 3965 * @memberof PortletInit 3966 * @param {string} type The type of listener 3967 * @param {function} handler Function called when event occurs 3968 * @return {Object} A handle that can be used to remove the event listener 3969 * @throws {TypeError} Thrown if the input parameters are invalid 3970 * @review 3971 */ 3972 addEventListener(type, handler) { 3973 if (arguments.length > 2) { 3974 throw new TypeError( 3975 "Too many arguments passed to addEventListener" 3976 ); 3977 } 3978 if (typeof type !== "string" || typeof handler !== "function") { 3979 throw new TypeError("Invalid arguments passed to addEventListener"); 3980 } 3981 const id = this._portletId; 3982 if (type.startsWith("portlet.")) { 3983 if (type !== "portlet.onStateChange" && type !== "portlet.onError") { 3984 throw new TypeError( 3985 `The system event type is invalid: ${type}` 3986 ); 3987 } 3988 } 3989 const handle = v4_default(); 3990 const listener = { 3991 handle, 3992 handler, 3993 id, 3994 type 3995 }; 3996 eventListeners[handle] = listener; 3997 if (type === "portlet.onStateChange") { 3998 this._updateStateForPortlet(this._portletId); 3999 } 4000 return handle; 4001 } 4002 /** 4003 * Returns a promise for a resource URL with parameters set appropriately 4004 * for the page state according to the resource parameters, cacheability 4005 * option, and resource ID provided. 4006 * @memberof PortletInit 4007 * @param {Object} parameters Resource parameters to be added to the URL 4008 * @param {string} cache Cacheability option. The strings defined under 4009 * {@link PortletConstants} should be used to specifiy cacheability. 4010 * @param {string} resourceId Resource ID. 4011 * @return {Promise} A Promise object. Returns a string representing the 4012 * resource URL on successful resolution. Returns an Error object containing 4013 * a descriptive message on failure. 4014 * @throws {TypeError} Thrown if the input parameters are invalid 4015 * @review 4016 */ 4017 createResourceUrl(parameters, cache, resourceId) { 4018 if (arguments.length > 3) { 4019 throw new TypeError("Too many arguments. 3 arguments are allowed."); 4020 } 4021 if (parameters) { 4022 if (isObject(parameters)) { 4023 validateParameters(parameters); 4024 } else { 4025 throw new TypeError( 4026 "Invalid argument type. Resource parameters must be a parameters object." 4027 ); 4028 } 4029 } 4030 let cacheability = null; 4031 if (cache) { 4032 if (typeof cache === "string") { 4033 if (cache === "cacheLevelPage" || cache === "cacheLevelPortlet" || cache === "cacheLevelFull") { 4034 cacheability = cache; 4035 } else { 4036 throw new TypeError( 4037 `Invalid cacheability argument: ${cache}` 4038 ); 4039 } 4040 } else { 4041 throw new TypeError( 4042 "Invalid argument type. Cacheability argument must be a string." 4043 ); 4044 } 4045 } 4046 if (!cacheability) { 4047 cacheability = "cacheLevelPage"; 4048 } 4049 if (resourceId && typeof resourceId !== "string") { 4050 throw new TypeError( 4051 "Invalid argument type. Resource ID argument must be a string." 4052 ); 4053 } 4054 return getUrl( 4055 pageRenderState, 4056 "RESOURCE", 4057 this._portletId, 4058 parameters, 4059 cacheability, 4060 resourceId 4061 ); 4062 } 4063 /** 4064 * Dispatches a client event. 4065 * @memberof PortletInit 4066 * @param {string} type The type of listener. 4067 * @param {any} payload The payload to be delivered. 4068 * @return {number} The number of events queued for delivery. 4069 * @throws {TypeError} Thrown if the type is a system event type. 4070 * @review 4071 */ 4072 dispatchClientEvent(type, payload) { 4073 validateArguments(arguments, 2, 2, ["string"]); 4074 if (type.match(new RegExp(portletRegex))) {
4075 throw new TypeError("The event type is invalid: " + type); 4076 } 4077 return Object.keys(eventListeners).reduce((amount, key) => { 4078 const listener = eventListeners[key]; 4079 if (type.match(listener.type)) { 4080 listener.handler(type, payload); 4081 amount++; 4082 } 4083 return amount; 4084 }, 0); 4085 } 4086 /** 4087 * Tests whether a blocking operation is in progress. 4088 * @memberof PortletInit 4089 * @return {boolean} 4090 * @review 4091 */ 4092 isInProgress() { 4093 return busy; 4094 } 4095 /** 4096 * Creates and returns a new PortletParameters object. 4097 * @memberof PortletInit 4098 * @param {?Object} optParameters The optional parameters to be copied. 4099 * @return {Object} The new parameters object. 4100 * @review 4101 */ 4102 newParameters(optParameters = {}) { 4103 const newParameters = {}; 4104 Object.keys(optParameters).forEach((key) => { 4105 if (Array.isArray(optParameters[key])) { 4106 newParameters[key] = [...optParameters[key]]; 4107 } 4108 }); 4109 return newParameters; 4110 } 4111 /** 4112 * Creates and returns a new RenderState object. 4113 * @memberof PortletInit 4114 * @param {?RenderState} optState An optional RenderState object to be copied. 4115 * @return {RenderState} The new RenderState object. 4116 * @review 4117 */ 4118 newState(optState) { 4119 return new RenderState_es_default(optState); 4120 } 4121 /** 4122 * Removes a previously added listener function designated by the handle. 4123 * The handle must be the same object previously returned by the 4124 * addEventListener function. 4125 * @memberof PortletInit 4126 * @param {Object} handle The handle of the listener to be removed. 4127 * @throws {TypeError} Thrown if the input parameters are invalid. 4128 * @throws {AccessDeniedException} Thrown if the event listener associated 4129 * with this handle was registered by a different portlet. 4130 * @review 4131 */ 4132 removeEventListener(handle) { 4133 if (arguments.length > 1) { 4134 throw new TypeError( 4135 "Too many arguments passed to removeEventListener" 4136 ); 4137 } 4138 if (handle === void 0 || handle === null) { 4139 throw new TypeError( 4140 `The event handle provided is ${typeof handle}` 4141 ); 4142 } 4143 let found = false; 4144 if (isObject(eventListeners[handle])) { 4145 if (eventListeners[handle].id === this._portletId) { 4146 delete eventListeners[handle]; 4147 const l = eventListenersQueue.length; 4148 for (let i = 0; i < l; i++) { 4149 const eventData = eventListenersQueue[i]; 4150 if (eventData && eventData.handle === handle) { 4151 eventListenersQueue.splice(i, 1); 4152 } 4153 } 4154 found = true; 4155 } 4156 } 4157 if (!found) { 4158 throw new TypeError( 4159 "The event listener handle doesn't match any listeners." 4160 ); 4161 } 4162 } 4163 /** 4164 * Sets the render state, which consists of the public and private render 4165 * parameters, the portlet mode, and the window state. 4166 * @memberof PortletInit 4167 * @param {RenderState} state The new state to be set. 4168 * @throws {TypeError} Thrown if the input parameters are invalid. 4169 * @throws {AccessDeniedException} Thrown if a blocking operation is already in progress. 4170 * @throws {NotInitializedException} Thrown if a portlet ID is provided, but no onStateChange 4171 * listener has been registered. 4172 * @review 4173 */ 4174 setRenderState(state) { 4175 validateArguments(arguments, 1, 1, ["object"]); 4176 if (pageRenderState.portlets && pageRenderState.portlets[this._portletId]) { 4177 const portletData = pageRenderState.portlets[this._portletId]; 4178 validateState(state, portletData); 4179 this._updateState(state); 4180 } 4181 } 4182 /** 4183 * Starts partial action processing and returns a {@link PartialActionInit} object to the caller. 4184 * @memberof PortletInit 4185 * @param {PortletParameters} actionParameters Action parameters to be added to the URL. 4186 * @return {Promise} A Promise. Returns a {@link PortletActionInit} object 4187 * containing a partial action URL and the _setPageState callback function
4188 * on successful resolution. Returns an Error object containing a 4189 * descriptive message on failure. 4190 * @throws {TypeError} Thrown if the input parameters are invalid. 4191 * @throws {AccessDeniedException} Thrown if a blocking operation is already in progress. 4192 * @throws {NotInitializedException} Thrown if a portlet ID is provided, but 4193 * no onStateChange listener has been registered. 4194 * @review 4195 */ 4196 startPartialAction(actionParameters) { 4197 const instance = this; 4198 let parameters = null; 4199 if (arguments.length > 1) { 4200 throw new TypeError("Too many arguments. 1 arguments are allowed"); 4201 } else if (actionParameters !== void 0) { 4202 if (isObject(actionParameters)) { 4203 validateParameters(actionParameters); 4204 parameters = actionParameters; 4205 } else { 4206 throw new TypeError( 4207 `Invalid argument type. Argument is of type ${typeof actionParameters}` 4208 ); 4209 } 4210 } 4211 if (busy === true) { 4212 throw { 4213 message: "Operation in progress", 4214 name: "AccessDeniedException" 4215 }; 4216 } else if (!this._hasListener(this._portletId)) { 4217 throw { 4218 message: `No onStateChange listener registered for portlet: ${this._portletId}`, 4219 name: "NotInitializedException" 4220 }; 4221 } 4222 busy = true; 4223 const partialActionInitObject = { 4224 setPageState(updateString) { 4225 instance._setPageState(instance._portletId, updateString); 4226 }, 4227 url: "" 4228 }; 4229 return getUrl( 4230 pageRenderState, 4231 "PARTIAL_ACTION", 4232 this._portletId, 4233 parameters 4234 ).then((url) => { 4235 partialActionInitObject.url = url; 4236 return partialActionInitObject; 4237 }); 4238 } 4239 }; 4240 var PortletInit_es_default = PortletInit; 4241 4242
4242// src/main/resources/META-INF/resources/liferay/portlet/register.es.js 4243 var register = function(portletId) { 4244 validateArguments(arguments, 1, 1, ["string"]); 4245 const pageRenderState2 = global.portlet.data.pageRenderState; 4246 return new Promise((resolve, reject) => { 4247 if (validatePortletId(pageRenderState2, portletId)) { 4248 resolve(new PortletInit_es_default(portletId)); 4249 } else { 4250 reject(new Error("Invalid portlet ID")); 4251 } 4252 }); 4253 }; 4254 var register_es_default = register; 4255 4256
4256// src/main/resources/META-INF/resources/liferay/portlet/portlet.es.js 4257 function minimizePortlet(portletSelector, trigger, options) { 4258 options = { 4259 doAsUserId: themeDisplay.getDoAsUserIdEncoded(), 4260 plid: themeDisplay.getPlid(), 4261 ...options 4262 }; 4263 const portlet = document.querySelector(portletSelector); 4264 if (portlet) { 4265 const content = portlet.querySelector(".portlet-content-container"); 4266 if (content) { 4267 const minimized = content.classList.contains("d-none"); 4268 if (minimized) { 4269 content.classList.remove("d-none"); 4270 portlet.classList.remove("portlet-minimized"); 4271 } else { 4272 content.classList.add("d-none"); 4273 portlet.classList.add("portlet-minimized"); 4274 } 4275 if (trigger) { 4276 const title = minimized ? 'Minimitza' : 'Restaura'; 4277 trigger.setAttribute("alt", title); 4278 trigger.setAttribute("title", title); 4279 trigger.innerHTML = title; 4280 const icon = trigger.querySelector("i"); 4281 if (icon) { 4282 icon.classList.remove("icon-minus", "icon-resize-vertical"); 4283 if (minimized) { 4284 icon.classList.add("icon-minus"); 4285 icon.classList.remove("icon-resize-vertical"); 4286 } else { 4287 icon.classList.add("icon-resize-vertical"); 4288 icon.classList.remove("icon-minus"); 4289 } 4290 } 4291 } 4292 const portletId = getPortletId(portlet.id); 4293 const formData = objectToFormData({ 4294 cmd: "minimize", 4295 doAsUserId: options.doAsUserId, 4296 p_auth: Liferay.authToken, 4297 p_l_id: options.plid, 4298 p_p_id: portletId, 4299 p_p_restore: minimized, 4300 p_v_l_s_g_id: themeDisplay.getSiteGroupId() 4301 }); 4302 defaultFetch(themeDisplay.getPathMain() + "/portal/update_layout", { 4303 body: formData, 4304 method: "POST" 4305 }).then((response) => { 4306 if (response.ok && minimized) { 4307 const params = { 4308 doAsUserId: options.doAsUserId, 4309 p_l_id: options.plid, 4310 p_p_boundary: false, 4311 p_p_id: portletId, 4312 p_p_isolated: true 4313 }; 4314 defaultFetch( 4315 createPortletURL( 4316 themeDisplay.getPathMain() + "/portal/render_portlet", 4317 params 4318 ) 4319 ).then((response2) => response2.text()).then((response2) => { 4320 const range = document.createRange(); 4321 range.selectNode(portlet); 4322 portlet.innerHTML = ""; 4323 const fragment = range.createContextualFragment(response2); 4324 portlet.appendChild(fragment); 4325 }).catch((error) => { 4326 if (true) { 4327 console.error(error); 4328 } 4329 }); 4330 } 4331 }).catch((error) => { 4332 if (true) { 4333 console.error(error); 4334 } 4335 }); 4336 } 4337 } 4338 } 4339 var portlet_es_default = { 4340 register: register_es_default 4341 }; 4342 4343
4343// src/main/resources/META-INF/resources/liferay/events/Disposable.js 4344 var Disposable = class { 4345 /** 4346 * Disposable constructor 4347 */ 4348 constructor() { 4349 this._disposed = false; 4350 } 4351 /** 4352 * Disposes of this instance's object references. Calls `disposeInternal`. 4353 */ 4354 dispose() { 4355 if (!this._disposed) { 4356 this.disposeInternal(); 4357 this._disposed = true; 4358 } 4359 } 4360 /** 4361 * Subclasses should override this method to implement any specific 4362 * disposing logic (like clearing references and calling `dispose` on other 4363 * disposables). 4364 */ 4365 disposeInternal() { 4366 } 4367 /** 4368 * Checks if this instance has already been disposed. 4369 * @return {boolean} 4370 */ 4371 isDisposed() { 4372 return this._disposed; 4373 } 4374 }; 4375 var Disposable_default = Disposable; 4376 4377
4377// src/main/resources/META-INF/resources/liferay/events/EventHandle.js 4378 var EventHandle = class extends Disposable_default { 4379 /** 4380 * EventHandle constructor 4381 * @param {!EventEmitter} emitter Emitter the event was subscribed to. 4382 * @param {string} event The name of the event that was subscribed to. 4383 * @param {!Function} listener The listener subscribed to the event. 4384 */ 4385 constructor(emitter, event, listener) { 4386 super(); 4387 this._emitter = emitter; 4388 this._event = event; 4389 this._listener = listener; 4390 } 4391 /** 4392 * Disposes of this instance's object references. 4393 * @override 4394 */ 4395 disposeInternal() { 4396 this.removeListener(); 4397 this._emitter = null; 4398 this._listener = null; 4399 } 4400 /** 4401 * Removes the listener subscription from the emitter. 4402 */ 4403 removeListener() { 4404 if (!this._emitter.isDisposed()) { 4405 this._emitter.removeListener(this._event, this._listener); 4406 } 4407 } 4408 }; 4409 var EventHandle_default = EventHandle; 4410 4411
4411// src/main/resources/META-INF/resources/liferay/events/EventEmitter.js 4412 var singleArray = [0]; 4413 var EventEmitter = class extends Disposable_default { 4414 /** 4415 * EventEmitter constructor 4416 */ 4417 constructor() { 4418 super(); 4419 this._events = null; 4420 this._listenerHandlers = null; 4421 this._shouldUseFacade = false; 4422 } 4423 /** 4424 * Adds a handler to given holder variable. If the holder doesn't have a 4425 * value yet, it will receive the handler directly. If the holder is an array, 4426 * the value will just be added to it. Otherwise, the holder will be set to a 4427 * new array containing its previous value plus the new handler. 4428 * @param {*} holder 4429 * @param {!function()|Object} handler 4430 * @return {*} The holder's new value. 4431 * @protected 4432 */ 4433 _addHandler(holder, handler) { 4434 if (!holder) { 4435 holder = handler; 4436 } else { 4437 if (!Array.isArray(holder)) { 4438 holder = [holder]; 4439 } 4440 holder.push(handler); 4441 } 4442 return holder; 4443 } 4444 /** 4445 * Adds a listener to the end of the listeners array for the specified events. 4446 * @param {!(Array|string)} event 4447 * @param {!Function} listener 4448 * @param {boolean} defaultListener Flag indicating if this listener is a default 4449 * action for this event. Default actions are run last, and only if no previous 4450 * listener call `preventDefault()` on the received event facade. 4451 * @return {!EventHandle} Can be used to remove the listener. 4452 */ 4453 addListener(event, listener, defaultListener) { 4454 this._validateListener(listener); 4455 const events = this._toEventsArray(event); 4456 for (let i = 0; i < events.length; i++) { 4457 this._addSingleListener(events[i], listener, defaultListener); 4458 } 4459 return new EventHandle_default(this, event, listener); 4460 } 4461 /** 4462 * Adds a listener to the end of the listeners array for a single event. 4463 * @param {string} event 4464 * @param {!Function} listener 4465 * @param {boolean} defaultListener Flag indicating if this listener is a default 4466 * action for this event. Default actions are run last, and only if no previous 4467 * listener call `preventDefault()` on the received event facade. 4468 * @param {Function=} origin The original function that was added as a 4469 * listener, if there is any. 4470 * @protected 4471 */ 4472 _addSingleListener(event, listener, defaultListener, origin) { 4473 this._runListenerHandlers(event); 4474 if (defaultListener || origin) { 4475 listener = { 4476 default: defaultListener, 4477 fn: listener, 4478 origin 4479 }; 4480 } 4481 this._events = this._events || {}; 4482 this._events[event] = this._addHandler(this._events[event], listener); 4483 } 4484 /** 4485 * Builds facade for the given event. 4486 * @param {string} event 4487 * @return {Object} 4488 * @protected 4489 */ 4490 _buildFacade(event) { 4491 if (this.getShouldUseFacade()) { 4492 const facade = { 4493 preventDefault() { 4494 facade.preventedDefault = true; 4495 }, 4496 target: this, 4497 type: event 4498 }; 4499 return facade; 4500 } 4501 } 4502 /** 4503 * Disposes of this instance's object references. 4504 * @override 4505 */ 4506 disposeInternal() { 4507 this._events = null; 4508 } 4509 /** 4510 * Execute each of the listeners in order with the supplied arguments. 4511 * @param {string} event 4512 * @param {*} opt_args [arg1], [arg2], [...] 4513 * @return {boolean} Returns true if event had listeners, false otherwise. 4514 */ 4515 emit(event) { 4516 const listeners = this._getRawListeners(event); 4517 if (!listeners.length) { 4518 return false; 4519 } 4520 const args = Array.prototype.slice.call(arguments, 1); 4521 this._runListeners(listeners, args, this._buildFacade(event)); 4522 return true; 4523 } 4524 /** 4525 * Gets the listener objects for the given event, if there are any. 4526 * @param {string} event 4527 * @return {!Array} 4528 * @protected 4529 */ 4530 _getRawListeners(event) { 4531 const directListeners = toArray2(this._events && this._events[event]); 4532 return directListeners.concat( 4533 toArray2(this._events && this._events["*"]) 4534 ); 4535 } 4536 /** 4537 * Gets the configuration option which determines if an event facade should 4538 * be sent as a param of listeners when emitting events. If set to true, the 4539 * facade will be passed as the first argument of the listener. 4540 * @return {boolean} 4541 */ 4542 getShouldUseFacade() { 4543 return this._shouldUseFacade; 4544 } 4545 /** 4546 * Returns an array of listeners for the specified event. 4547 * @param {string} event 4548 * @return {Array} Array of listeners. 4549 */ 4550 listeners(event) { 4551 return this._getRawListeners(event).map( 4552 (listener) => listener.fn ? listener.fn : listener 4553 ); 4554 } 4555 /** 4556 * Adds a listener that will be invoked a fixed number of times for the 4557 * events. After each event is triggered the specified amount of times, the 4558 * listener is removed for it. 4559 * @param {!(Array|string)} event 4560 * @param {number} amount The amount of times this event should be listened 4561 * to. 4562 * @param {!Function} listener 4563 * @return {!EventHandle} Can be used to remove the listener. 4564 */ 4565 many(event, amount, listener) { 4566 const events = this._toEventsArray(event); 4567 for (let i = 0; i < events.length; i++) { 4568 this._many(events[i], amount, listener); 4569 } 4570 return new EventHandle_default(this, event, listener); 4571 } 4572 /** 4573 * Adds a listener that will be invoked a fixed number of times for a single 4574 * event. After the event is triggered the specified amount of times, the 4575 * listener is removed. 4576 * @param {string} event 4577 * @param {number} amount The amount of times this event should be listened 4578 * to. 4579 * @param {!Function} listener 4580 * @protected 4581 */ 4582 _many(event, amount, listener) { 4583 const self2 = this; 4584 if (amount <= 0) { 4585 return; 4586 } 4587 function handlerInternal() { 4588 if (--amount === 0) { 4589 self2.removeListener(event, handlerInternal); 4590 } 4591 listener.apply(self2, arguments); 4592 } 4593 self2._addSingleListener(event, handlerInternal, false, listener); 4594 } 4595 /** 4596 * Checks if a listener object matches the given listener function. To match, 4597 * it needs to either point to that listener or have it as its origin. 4598 * @param {!Object} listenerObj 4599 * @param {!Function} listener 4600 * @return {boolean} 4601 * @protected 4602 */ 4603 _matchesListener(listenerObj, listener) { 4604 const fn = listenerObj.fn || listenerObj; 4605 return fn === listener || listenerObj.origin && listenerObj.origin === listener; 4606 } 4607 /** 4608 * Removes a listener for the specified events. 4609 * Caution: changes array indices in the listener array behind the listener. 4610 * @param {!(Array|string)} event 4611 * @param {!Function} listener 4612 * @return {!Object} Returns emitter, so calls can be chained. 4613 */ 4614 off(event, listener) {
4615 this._validateListener(listener); 4616 if (!this._events) { 4617 return this; 4618 } 4619 const events = this._toEventsArray(event); 4620 for (let i = 0; i < events.length; i++) { 4621 this._events[events[i]] = this._removeMatchingListenerObjs( 4622 toArray2(this._events[events[i]]), 4623 listener 4624 ); 4625 } 4626 return this; 4627 } 4628 /** 4629 * Adds a listener to the end of the listeners array for the specified events. 4630 * @param {!(Array|string)} events 4631 * @param {!Function} listener 4632 * @return {!EventHandle} Can be used to remove the listener. 4633 */ 4634 on() { 4635 return this.addListener.apply(this, arguments); 4636 } 4637 /** 4638 * Adds handler that gets triggered when an event is listened to on this 4639 * instance. 4640 * @param {!function()} handler 4641 */ 4642 onListener(handler) { 4643 this._listenerHandlers = this._addHandler( 4644 this._listenerHandlers, 4645 handler 4646 ); 4647 } 4648 /** 4649 * Adds a one time listener for the events. This listener is invoked only the 4650 * next time each event is fired, after which it is removed. 4651 * @param {!(Array|string)} events 4652 * @param {!Function} listener 4653 * @return {!EventHandle} Can be used to remove the listener. 4654 */ 4655 once(events, listener) { 4656 return this.many(events, 1, listener); 4657 } 4658 /** 4659 * Removes all listeners, or those of the specified events. It's not a good 4660 * idea to remove listeners that were added elsewhere in the code, 4661 * especially when it's on an emitter that you didn't create. 4662 * @param {(Array|string)=} event 4663 * @return {!Object} Returns emitter, so calls can be chained. 4664 */ 4665 removeAllListeners(event) { 4666 if (this._events) { 4667 if (event) { 4668 const events = this._toEventsArray(event); 4669 for (let i = 0; i < events.length; i++) { 4670 this._events[events[i]] = null; 4671 } 4672 } else { 4673 this._events = null; 4674 } 4675 } 4676 return this; 4677 } 4678 /** 4679 * Removes all listener objects from the given array that match the given 4680 * listener function. 4681 * @param {Array.<Object>} listenerObjs 4682 * @param {!Function} listener 4683 * @return {Array.<Object>|Object} The new listeners array for this event. 4684 * @protected 4685 */ 4686 _removeMatchingListenerObjs(listenerObjs, listener) { 4687 const finalListeners = []; 4688 for (let i = 0; i < listenerObjs.length; i++) { 4689 if (!this._matchesListener(listenerObjs[i], listener)) { 4690 finalListeners.push(listenerObjs[i]); 4691 } 4692 } 4693 return finalListeners.length ? finalListeners : null; 4694 } 4695 /** 4696 * Removes a listener for the specified events. 4697 * Caution: changes array indices in the listener array behind the listener. 4698 * @param {!(Array|string)} events 4699 * @param {!Function} listener 4700 * @return {!Object} Returns emitter, so calls can be chained. 4701 */ 4702 removeListener() { 4703 return this.off.apply(this, arguments); 4704 } 4705 /** 4706 * Runs the handlers when an event is listened to. 4707 * @param {string} event 4708 * @protected 4709 */ 4710 _runListenerHandlers(event) { 4711 let handlers = this._listenerHandlers; 4712 if (handlers) { 4713 handlers = toArray2(handlers); 4714 for (let i = 0; i < handlers.length; i++) { 4715 handlers[i](event); 4716 } 4717 } 4718 } 4719 /** 4720 * Runs the given listeners. 4721 * @param {!Array} listeners 4722 * @param {!Array} args 4723 * @param {Object} facade 4724 * @protected 4725 */ 4726 _runListeners(listeners, args, facade) { 4727 if (facade) { 4728 args.push(facade); 4729 } 4730 const defaultListeners = []; 4731 for (let i = 0; i < listeners.length; i++) { 4732 const listener = listeners[i].fn || listeners[i]; 4733 if (listeners[i].default) { 4734 defaultListeners.push(listener); 4735 } else { 4736 listener.apply(this, args); 4737 } 4738 } 4739 if (!facade || !facade.preventedDefault) { 4740 for (let j = 0; j < defaultListeners.length; j++) { 4741 defaultListeners[j].apply(this, args); 4742 } 4743 } 4744 } 4745 /** 4746 * Sets the configuration option which determines if an event facade should 4747 * be sent as a param of listeners when emitting events. If set to true, the 4748 * facade will be passed as the first argument of the listener. 4749 * @param {boolean} shouldUseFacade 4750 * @return {!Object} Returns emitter, so calls can be chained. 4751 */ 4752 setShouldUseFacade(shouldUseFacade) { 4753 this._shouldUseFacade = shouldUseFacade; 4754 return this; 4755 } 4756 /** 4757 * Converts the parameter to an array if only one event is given. Reuses the 4758 * same array each time this conversion is done, to avoid using more memory 4759 * than necessary. 4760 * @param {!(Array|string)} events 4761 * @return {!Array} 4762 * @protected 4763 */ 4764 _toEventsArray(events) { 4765 if (typeof events === "string") { 4766 singleArray[0] = events; 4767 events = singleArray; 4768 } 4769 return events; 4770 } 4771 /** 4772 * Checks if the given listener is valid, throwing an exception when it's not. 4773 * @param {*} listener 4774 * @protected 4775 */ 4776 _validateListener(listener) { 4777 if (typeof listener !== "function") { 4778 throw new TypeError("Listener must be a function"); 4779 } 4780 } 4781 }; 4782 function toArray2(val) { 4783 val = val || []; 4784 return Array.isArray(val) ? val : [val]; 4785 } 4786 var EventEmitter_default = EventEmitter; 4787 4788
4788// src/main/resources/META-INF/resources/liferay/throttle.es.js 4789 function throttle(fn, interval) { 4790 let timeout = null; 4791 let last; 4792 return function(...args) { 4793 const context = this; 4794 const now = Date.now(); 4795 const schedule = () => { 4796 timeout = setTimeout(() => { 4797 timeout = null; 4798 }, interval); 4799 last = now; 4800 fn.apply(context, args); 4801 }; 4802 if (timeout === null) { 4803 schedule(); 4804 } else { 4805 const remaining = Math.max(last + interval - now, 0); 4806 clearTimeout(timeout); 4807 timeout = setTimeout(schedule, remaining); 4808 } 4809 }; 4810 } 4811 4812
4812// src/main/resources/META-INF/resources/liferay/side_navigation.es.js 4813 var DEFAULTS = { 4814 breakpoint: 576, 4815 content: ".sidenav-content", 4816 gutter: "12px", 4817 loadingIndicatorTPL: '<div class="loading-animation loading-animation-md"></div>', 4818 navigation: ".sidenav-menu-slider", 4819 position: "left", 4820 type: "relative", 4821 typeMobile: "relative", 4822 url: null, 4823 width: "225px" 4824 }; 4825 var INSTANCE_MAP = /* @__PURE__ */ new WeakMap(); 4826 function getElement(element) { 4827 if (element && element.jquery) { 4828 if (element.length > 1) { 4829 throw new Error( 4830 `getElement(): Expected at most one element, got ${element.length}` 4831 ); 4832 } 4833 element = element.get(0); 4834 } 4835 if (element && !(element instanceof HTMLElement)) { 4836 element = element.element; 4837 } 4838 return element; 4839 } 4840 function getInstance(element) { 4841 element = getElement(element); 4842 const instance = INSTANCE_MAP.get(element); 4843 return instance; 4844 } 4845 var IDENTITY_ATTRIBUTES = [/^aria-/, /^data-/, /^type$/]; 4846 function getUniqueSelector(element) { 4847 element = getElement(element); 4848 if (element.id) { 4849 return `#${element.id}`; 4850 } 4851 let ancestorWithId = element.parentNode; 4852 while (ancestorWithId) { 4853 if (ancestorWithId.id) { 4854 break; 4855 } 4856 ancestorWithId = ancestorWithId.parentNode; 4857 } 4858 const attributes = Array.from(element.attributes).map(({ name, value }) => { 4859 const isIdentifying = IDENTITY_ATTRIBUTES.some((regExp) => { 4860 return regExp.test(name); 4861 }); 4862 return isIdentifying ? `[${name}=${JSON.stringify(value)}]` : null; 4863 }).filter(Boolean).sort(); 4864 return [ 4865 ancestorWithId ? `#${ancestorWithId.id} ` : "", 4866 element.tagName.toLowerCase(), 4867 ...attributes 4868 ].join(""); 4869 } 4870 function dispatchCustomEvent(element, eventName, detail = null) { 4871 const customEvent = new CustomEvent(eventName, { detail }); 4872 element.dispatchEvent(customEvent); 4873 } 4874 function addClass(element, className) { 4875 setClasses(element, { 4876 [className]: true 4877 }); 4878 } 4879 function removeClass(element, className) { 4880 setClasses(element, { 4881 [className]: false 4882 }); 4883 } 4884 function setClasses(element, classes) { 4885 element = getElement(element); 4886 if (element) { 4887 Object.entries(classes).forEach(([className, present]) => { 4888 className.split(/\s+/).forEach((name) => { 4889 if (present) { 4890 element.classList.add(name); 4891 } else { 4892 element.classList.remove(name); 4893 } 4894 }); 4895 }); 4896 } 4897 } 4898 function hasClass(element, className) { 4899 element = getElement(element); 4900 return className.split(/\s+/).every((name) => { 4901 return element.classList.contains(name); 4902 }); 4903 } 4904 function setStyles(element, styles) { 4905 element = getElement(element); 4906 if (element) { 4907 Object.entries(styles).forEach(([property, value]) => { 4908 element.style[property] = value; 4909 }); 4910 } 4911 } 4912 function px(dimension) { 4913 if (typeof dimension === "number") { 4914 return dimension + "px"; 4915 } else if (typeof dimension === "string" && dimension.match(/^\s*\d+\s*$/)) { 4916 return dimension.trim() + "px"; 4917 } else { 4918 return dimension; 4919 } 4920 } 4921 function offsetLeft(element) { 4922 const elementLeft = element.getBoundingClientRect().left; 4923 const documentOffset = element.ownerDocument.defaultView.pageOffsetX || 0; 4924 return elementLeft + documentOffset; 4925 } 4926 var eventNamesToSelectors = {}; 4927 function handleEvent(eventName, event) { 4928 Object.keys(eventNamesToSelectors[eventName]).forEach((selector) => { 4929 let matches = false; 4930 let target = event.target; 4931 while (target) { 4932 matches = target.matches && target.matches(selector); 4933 if (matches) { 4934 break; 4935 } 4936 target = target.parentNode; 4937 } 4938 if (matches) { 4939 const emitter = eventNamesToSelectors[eventName][selector]; 4940 emitter.emit("click", event); 4941 } 4942 }); 4943 } 4944 var handleWindowResize; 4945 function setupResizeListener() { 4946 if (!handleWindowResize) { 4947 handleWindowResize = throttle(() => { 4948 dispatchCustomEvent(document, "screenChange.lexicon.sidenav"); 4949 }, 150); 4950 window.addEventListener("resize", handleWindowResize); 4951 } 4952 } 4953 function subscribe(elementOrSelector, eventName, handler) { 4954 if (elementOrSelector) { 4955 if (!eventNamesToSelectors[eventName]) { 4956 eventNamesToSelectors[eventName] = {}; 4957 document.addEventListener( 4958 eventName, 4959 (event) => handleEvent(eventName, event) 4960 ); 4961 } 4962 const emitters = eventNamesToSelectors[eventName]; 4963 const selector = typeof elementOrSelector === "string" ? elementOrSelector : getUniqueSelector(elementOrSelector); 4964 if (!emitters[selector]) { 4965 emitters[selector] = new EventEmitter_default(); 4966 } 4967 const emitter = emitters[selector]; 4968 const subscription = emitter.on(eventName, (event) => { 4969 if (!event.defaultPrevented) { 4970 handler(event); 4971 } 4972 }); 4973 return { 4974 dispose() { 4975 subscription.dispose(); 4976 } 4977 }; 4978 } 4979 return null; 4980 } 4981 function toInt(str) { 4982 return parseInt(str, 10) || 0; 4983 } 4984 function SideNavigation(toggler, options) { 4985 toggler = getElement(toggler); 4986 this.init(toggler, options); 4987 } 4988 SideNavigation.TRANSITION_DURATION = 500; 4989 SideNavigation.prototype = { 4990 _bindUI() { 4991 this._subscribeClickTrigger(); 4992 this._subscribeReducedMotion(); 4993 this._subscribeClickSidenavClose(); 4994 }, 4995 _emit(event) { 4996 this._emitter.emit(event, this); 4997 }, 4998 _focusNavigation() { 4999 const container = document.querySelector(this.options.container); 5000 if (!container) { 5001 return; 5002 } 5003 const navigation = container.querySelector(this.options.navigation); 5004 if (!navigation) { 5005 container.focus(); 5006 return; 5007 } 5008 navigation.focus(); 5009 }, 5010 _focusTrigger() { 5011 const toggler = this.toggler; 5012 if (!toggler || !document.activeElement.classList.contains("sidenav-close")) { 5013 return; 5014 } 5015 toggler.focus(); 5016 }, 5017 _getSidenavWidth() { 5018 const options = this.options; 5019 const widthOriginal = options.widthOriginal; 5020 let width = widthOriginal; 5021 const winWidth = window.innerWidth; 5022 if (winWidth < widthOriginal + 40) { 5023 width = winWidth - 40; 5024 } 5025 return width; 5026 }, 5027 _getSimpleSidenavType() { 5028 const type = this._getType(); 5029 if (this._isDesktop() && type === "fixed-push") { 5030 return "desktop-fixed-push"; 5031 } else if (!this._isDesktop() && type === "fixed-push") { 5032 return "mobile-fixed-push"; 5033 } 5034 return "fixed"; 5035 }, 5036 _getType() { 5037 return this._isDesktop() ? this.options.type : this.options.typeMobile; 5038 }, 5039 _isDesktop() { 5040 return window.innerWidth >= this.options.breakpoint; 5041 }, 5042 _isSidenavRight() { 5043 const options = this.options; 5044 const container = document.querySelector(options.container); 5045 if (!container) { 5046 return; 5047 } 5048 const isSidenavRight = hasClass(container, "sidenav-right"); 5049 return isSidenavRight; 5050 }, 5051 _isSimpleSidenavClosed() { 5052 const options = this.options; 5053 const openClass = options.openClass; 5054 const container = document.querySelector(options.container); 5055 if (!container) { 5056 return; 5057 } 5058 return !hasClass(container, openClass); 5059 }, 5060 _loadUrl(element, url) { 5061 const instance = this; 5062 const sidebar = element.querySelector(".sidebar-body"); 5063 if (!instance._fetchPromise && sidebar) { 5064 while (sidebar.firstChild) { 5065 sidebar.removeChild(sidebar.firstChild); 5066 } 5067 const loading = document.createElement("div"); 5068 addClass(loading, "sidenav-loading"); 5069 loading.innerHTML = instance.options.loadingIndicatorTPL; 5070 sidebar.appendChild(loading); 5071 instance._fetchPromise = defaultFetch(url); 5072 instance._fetchPromise.then((response) => { 5073 if (!response.ok) { 5074 throw new Error(`Failed to fetch ${url}`); 5075 } 5076 return response.text(); 5077 }).then((text) => { 5078 const range = document.createRange(); 5079 range.selectNode(sidebar); 5080 const fragment = range.createContextualFragment(text); 5081 sidebar.removeChild(loading); 5082 sidebar.appendChild(fragment); 5083 instance.setHeight(); 5084 }).catch((error) => { 5085 console.error(error); 5086 }); 5087 } 5088 }, 5089 _onClosed() { 5090 const options = this.options; 5091 const container = document.querySelector(options.container); 5092 if (!container) { 5093 return; 5094 } 5095 if (!this._handleClosed) { 5096 this._handleClosed = () => { 5097 const type = this._getType(); 5098 if (type === "relative" && hasClass(container, "open")) { 5099 removeClass(container, "sidenav-transition"); 5100 } 5101 }; 5102 document.addEventListener( 5103 "closed.lexicon.sidenav", 5104 this._handleClosed 5105 ); 5106 } 5107 }, 5108 _onClosedStart() { 5109 const options = this.options; 5110 const container = document.querySelector(options.container); 5111 const content = document.querySelector(options.content); 5112 if (!container || !content) { 5113 return; 5114 } 5115 if (!this._handleClosedStart) { 5116 this._handleClosedStart = () => { 5117 const type = this._getType(); 5118 if (type === "relative" && hasClass(container, "open") && content.closest(".page-maximized")) { 5119 let contentMargin = document.body.scrollWidth - content.getBoundingClientRect().right; 5120 let paddingRight = options.gutter + options.width; 5121 const contentMaxWidth = getComputedStyle(content).maxWidth || getComputedStyle(content).width; 5122 if (/px$/.test(contentMaxWidth)) { 5123 contentMargin = (document.body.scrollWidth - toInt(contentMaxWidth)) / 2; 5124 if (contentMargin > options.width) { 5125 paddingRight = ""; 5126 } else if (contentMargin > 0 && contentMargin < options.width) { 5127 paddingRight = options.gutter + options.width - contentMargin; 5128 } 5129 } 5130 if (!this.isReducedMotion()) { 5131 addClass(container, "sidenav-transition"); 5132 } 5133 setStyles(content, { 5134 "padding-right": px(paddingRight) 5135 }); 5136 } 5137 }; 5138 document.addEventListener( 5139 "closedStart.lexicon.sidenav", 5140 this._handleClosedStart 5141 ); 5142 } 5143 }, 5144 _onOpen() { 5145 const options = this.options; 5146 const container = document.querySelector(options.container); 5147 if (!container) { 5148 return; 5149 } 5150 if (!this._handleOpen) { 5151 this._handleOpen = () => { 5152 const type = this._getType(); 5153 if (type === "relative" && hasClass(container, "open")) { 5154 removeClass(container, "sidenav-transition"); 5155 } 5156 }; 5157 document.addEventListener("open.lexicon.sidenav", this._handleOpen); 5158 } 5159 }, 5160 _onOpenStart() { 5161 const options = this.options; 5162 const container = document.querySelector(options.container); 5163 const content = document.querySelector(options.content); 5164 if (!container || !content) { 5165 return; 5166 } 5167 if (!this._handleOpenStart) { 5168 this._handleOpenStart = (event) => { 5169 const type = this._getType(); 5170 if (type === "relative" && hasClass(container, "open") && content.closest(".page-maximized")) { 5171 const otherMenu = document.querySelector( 5172 event.detail.options.container + " .sidenav-menu" 5173 ); 5174 if (!otherMenu) { 5175 return; 5176 } 5177 const otherMenuWidth = otherMenu.getBoundingClientRect().width; 5178 const contentMargin = document.body.scrollWidth - content.getBoundingClientRect().right - otherMenuWidth / 2; 5179 const paddingRight = contentMargin > 0 ? options.width + options.gutter - contentMargin : options.width + options.gutter; 5180 if (!this.isReducedMotion()) { 5181 addClass(container, "sidenav-transition"); 5182 } 5183 setStyles(content, { 5184 "padding-right": px(paddingRight) 5185 }); 5186 } 5187 }; 5188 document.addEventListener( 5189 "openStart.lexicon.sidenav", 5190 this._handleOpenStart 5191 ); 5192 } 5193 }, 5194 _onScreenChange() { 5195 const options = this.options; 5196 const container = document.querySelector(options.container); 5197 const content = document.querySelector(options.content); 5198 if (!container || !content) { 5199 return; 5200 } 5201 let originalIsDesktop = this._isDesktop(); 5202 if (!this._handleOnScreenChange) { 5203 this._handleOnScreenChange = () => { 5204 const type = this._getType(); 5205 if (type === "relative" && hasClass(container, "open")) { 5206 this.setHeight(); 5207 this.setWidth(); 5208 } 5209 if (this._isDesktop() !== originalIsDesktop) { 5210 if (type !== "relative") { 5211 addClass(container, "sidenav-fixed"); 5212 content.style.paddingRight = ""; 5213 content.style.minHeight = ""; 5214 } else { 5215 removeClass(container, "sidenav-fixed"); 5216 } 5217 originalIsDesktop = this._isDesktop(); 5218 } 5219 }; 5220 document.addEventListener( 5221 "screenChange.lexicon.sidenav", 5222 this._handleOnScreenChange 5223 ); 5224 } 5225 }, 5226 _renderNav() { 5227 const options = this.options; 5228 const container = document.querySelector(options.container); 5229 const navigation = container.querySelector(options.navigation); 5230 if (!container || !navigation) { 5231 return; 5232 } 5233 const menu = navigation.querySelector(".sidenav-menu"); 5234 const closed = hasClass(container, "closed"); 5235 const sidenavRight = this._isSidenavRight(); 5236 const width = this._getSidenavWidth(); 5237 if (closed) { 5238 setStyles(menu, { 5239 width: px(width) 5240 }); 5241 if (sidenavRight) { 5242 const positionDirection = options.rtl ? "left" : "right"; 5243 setStyles(menu, { 5244 [positionDirection]: px(width) 5245 }); 5246 } 5247 } else { 5248 this.showSidenav(); 5249 this.setHeight(); 5250 } 5251 }, 5252 _renderUI() { 5253 const options = this.options; 5254 const container = document.querySelector(options.container); 5255 if (!container) { 5256 return; 5257 } 5258 const toggler = this.toggler; 5259 const type = this._getType(); 5260 if (!this.useDataAttribute) { 5261 setupResizeListener(); 5262 this._onClosedStart(); 5263 this._onClosed(); 5264 this._onOpenStart(); 5265 this._onOpen(); 5266 this._onScreenChange(); 5267 if (!this._isDesktop()) { 5268 setClasses(container, { 5269 closed: true, 5270 open: false 5271 }); 5272 setClasses(toggler, { 5273 active: false, 5274 open: false 5275 }); 5276 } 5277 if (options.position === "right") { 5278 addClass(container, "sidenav-right"); 5279 } 5280 if (type !== "relative") { 5281 addClass(container, "sidenav-fixed"); 5282 } 5283 this._renderNav(); 5284 } 5285 setStyles(container, { 5286 display: "" 5287 }); 5288 }, 5289 _subscribeClickSidenavClose() { 5290 const instance = this; 5291 const options = instance.options; 5292 const containerSelector = options.container; 5293 if (!instance._sidenavCloseSubscription) { 5294 const closeButtonSelector = `${containerSelector} .sidenav-close`; 5295 instance._sidenavCloseSubscription = subscribe( 5296 closeButtonSelector, 5297 "click", 5298 function handleSidenavClose(event) { 5299 event.preventDefault();
5300 instance.toggle(); 5301 } 5302 ); 5303 } 5304 }, 5305 _subscribeClickTrigger() { 5306 const instance = this; 5307 if (!instance._togglerSubscription) { 5308 const toggler = instance.toggler; 5309 instance._togglerSubscription = subscribe( 5310 toggler, 5311 "click", 5312 function handleTogglerClick(event) { 5313 instance.toggle(); 5314 event.preventDefault(); 5315 } 5316 ); 5317 } 5318 }, 5319 _subscribeReducedMotion() { 5320 const instance = this; 5321 import( 5322 // eslint-disable-next-line lines-around-comment 5323 /* webpackIgnore: true */ 5324 themeDisplay.getPathContext() + "/o/frontend-js-web/__liferay__/index.js" 5325 ).then(({ isReducedMotion }) => { 5326 instance.isReducedMotion = isReducedMotion; 5327 }); 5328 }, 5329 _subscribeSidenavTransitionEnd(element, fn) { 5330 if (this.isReducedMotion()) { 5331 removeClass(element, "sidenav-transition"); 5332 fn(); 5333 } else { 5334 setTimeout(() => { 5335 removeClass(element, "sidenav-transition"); 5336 fn(); 5337 }, SideNavigation.TRANSITION_DURATION); 5338 } 5339 }, 5340 clearHeight() { 5341 const options = this.options; 5342 const container = document.querySelector(options.container); 5343 if (container) { 5344 const content = container.querySelector(options.content); 5345 const navigation = container.querySelector(options.navigation); 5346 const menu = container.querySelector(".sidenav-menu"); 5347 [content, navigation, menu].forEach((element) => { 5348 setStyles(element, { 5349 "height": "", 5350 "min-height": "" 5351 }); 5352 }); 5353 } 5354 }, 5355 destroy() { 5356 const instance = this; 5357 if (instance._sidenavCloseSubscription) { 5358 instance._sidenavCloseSubscription.dispose(); 5359 instance._sidenavCloseSubscription = null; 5360 } 5361 if (instance._togglerSubscription) { 5362 instance._togglerSubscription.dispose(); 5363 instance._togglerSubscription = null; 5364 } 5365 INSTANCE_MAP.delete(instance.toggler); 5366 document.removeEventListener( 5367 "closedStart.lexicon.sidenav", 5368 instance._handleClosedStart 5369 ); 5370 document.removeEventListener( 5371 "closed.lexicon.sidenav", 5372 instance._handleClosed 5373 ); 5374 document.removeEventListener( 5375 "openStart.lexicon.sidenav", 5376 instance._handleOpenStart 5377 ); 5378 document.removeEventListener( 5379 "open.lexicon.sidenav", 5380 instance._handleOpen 5381 ); 5382 document.removeEventListener( 5383 "screenChange.lexicon.sidenav", 5384 instance._handleOnScreenChange 5385 ); 5386 if (handleWindowResize) { 5387 window.removeEventListener("resize", handleWindowResize); 5388 handleWindowResize = null; 5389 } 5390 }, 5391 hide() { 5392 if (this.useDataAttribute) { 5393 this.hideSimpleSidenav(); 5394 } else { 5395 this.toggleNavigation(false); 5396 } 5397 }, 5398 hideSidenav() { 5399 const instance = this; 5400 const options = instance.options; 5401 const container = document.querySelector(options.container); 5402 if (container) { 5403 const content = container.querySelector(options.content); 5404 const navigation = container.querySelector(options.navigation); 5405 const menu = navigation.querySelector(".sidenav-menu"); 5406 const sidenavRight = instance._isSidenavRight(); 5407 let positionDirection = options.rtl ? "right" : "left"; 5408 if (sidenavRight) { 5409 positionDirection = options.rtl ? "left" : "right"; 5410 } 5411 const paddingDirection = "padding-" + positionDirection; 5412 setStyles(content, { 5413 [paddingDirection]: "", 5414 [positionDirection]: "" 5415 }); 5416 setStyles(navigation, { 5417 width: "" 5418 }); 5419 if (sidenavRight) { 5420 setStyles(menu, { 5421 [positionDirection]: px(instance._getSidenavWidth()) 5422 }); 5423 } 5424 instance._subscribeSidenavTransitionEnd(menu, () => { 5425 instance._focusTrigger(); 5426 }); 5427 } 5428 }, 5429 hideSimpleSidenav() { 5430 const instance = this; 5431 const options = instance.options; 5432 const simpleSidenavClosed = instance._isSimpleSidenavClosed(); 5433 if (!simpleSidenavClosed) { 5434 const container = document.querySelector(options.container); 5435 const content = document.querySelector(options.content); 5436 if (!container || !content) { 5437 return; 5438 } 5439 const closedClass = options.closedClass; 5440 const openClass = options.openClass; 5441 const toggler = instance.toggler; 5442 const target = toggler.dataset.target || toggler.getAttribute("href");
5443 instance._emit("closedStart.lexicon.sidenav"); 5444 dispatchCustomEvent( 5445 document, 5446 "closedStart.lexicon.sidenav", 5447 instance 5448 ); 5449 instance._subscribeSidenavTransitionEnd(content, () => { 5450 removeClass(container, "sidenav-transition"); 5451 removeClass(toggler, "sidenav-transition"); 5452 instance._emit("closed.lexicon.sidenav"); 5453 dispatchCustomEvent( 5454 document, 5455 "closed.lexicon.sidenav", 5456 instance 5457 ); 5458 instance._focusTrigger(); 5459 }); 5460 const isReducedMotion = instance.isReducedMotion(); 5461 if (hasClass(content, openClass)) { 5462 setClasses(content, { 5463 [closedClass]: true, 5464 [openClass]: false, 5465 "sidenav-transition": !isReducedMotion 5466 }); 5467 } 5468 if (!isReducedMotion) { 5469 addClass(container, "sidenav-transition"); 5470 addClass(toggler, "sidenav-transition"); 5471 } 5472 setClasses(container, { 5473 [closedClass]: true, 5474 [openClass]: false 5475 }); 5476 const nodes = document.querySelectorAll( 5477 `[data-target="${target}"], [href="${target}"]` 5478 ); 5479 Array.from(nodes).forEach((node) => { 5480 setClasses(node, { 5481 active: false, 5482 [openClass]: false 5483 }); 5484 setClasses(node, { 5485 active: false, 5486 [openClass]: false 5487 }); 5488 }); 5489 } 5490 }, 5491 init(toggler, options) { 5492 const useDataAttribute = toggler.dataset.toggle === "liferay-sidenav"; 5493 options = { ...DEFAULTS, ...options }; 5494 options.breakpoint = toInt(options.breakpoint); 5495 options.container = options.container || toggler.dataset.target || toggler.getAttribute("href"); 5496 options.gutter = toInt(options.gutter); 5497 options.rtl = document.dir === "rtl"; 5498 options.width = toInt(options.width); 5499 options.widthOriginal = options.width; 5500 if (useDataAttribute) { 5501 options.closedClass = toggler.dataset.closedClass || "closed"; 5502 options.content = toggler.dataset.content; 5503 options.loadingIndicatorTPL = toggler.dataset.loadingIndicatorTpl || options.loadingIndicatorTPL; 5504 options.openClass = toggler.dataset.openClass || "open"; 5505 options.type = toggler.dataset.type; 5506 options.typeMobile = toggler.dataset.typeMobile; 5507 options.url = toggler.dataset.url; 5508 options.width = ""; 5509 } 5510 this.toggler = toggler; 5511 this.options = options; 5512 this.useDataAttribute = useDataAttribute; 5513 this._emitter = new EventEmitter_default(); 5514 this._bindUI(); 5515 this._renderUI(); 5516 }, 5517 on(event, listener) { 5518 return this._emitter.on(event, listener); 5519 }, 5520 setHeight() { 5521 const options = this.options; 5522 const container = document.querySelector(options.container); 5523 if (!container) { 5524 return; 5525 } 5526 const type = this._getType(); 5527 if (type !== "fixed" && type !== "fixed-push") { 5528 const content = container.querySelector(options.content); 5529 const navigation = container.querySelector(options.navigation); 5530 const menu = container.querySelector(".sidenav-menu"); 5531 const contentHeight = content.closest(".page-maximized") ? window.innerHeight - menu.getBoundingClientRect().top : content.getBoundingClientRect().height; 5532 const navigationHeight = navigation.getBoundingClientRect().height; 5533 const tallest = px(Math.max(contentHeight, navigationHeight)); 5534 setStyles(content, { 5535 "min-height": tallest 5536 }); 5537 setStyles(navigation, { 5538 "height": "100%", 5539 "min-height": tallest 5540 }); 5541 setStyles(menu, { 5542 "height": "100%", 5543 "min-height": tallest 5544 }); 5545 } 5546 }, 5547 setWidth() { 5548 const options = this.options; 5549 const container = document.querySelector(options.container); 5550 const content = container.querySelector(options.content); 5551 const navigation = container.querySelector(options.navigation); 5552 if (!container || !content || !navigation) { 5553 return; 5554 } 5555 const menu = navigation.querySelector(".sidenav-menu"); 5556 const sidenavRight = this._isSidenavRight(); 5557 const width = this._getSidenavWidth(); 5558 const offset = width + options.gutter; 5559 const url = options.url; 5560 if (url) { 5561 this._loadUrl(menu, url); 5562 } 5563 setStyles(navigation, { 5564 width: px(width) 5565 }); 5566 setStyles(menu, { 5567 width: px(width) 5568 }); 5569 let positionDirection = options.rtl ? "right" : "left"; 5570 if (sidenavRight) { 5571 positionDirection = options.rtl ? "left" : "right"; 5572 } 5573 const paddingDirection = "padding-" + positionDirection; 5574 const pushContentCssProperty = this._isDesktop() ? paddingDirection : positionDirection; 5575 const type = this._getType(); 5576 if (type !== "relative") { 5577 addClass(container, "sidenav-fixed"); 5578 } 5579 if (type !== "fixed") { 5580 let navigationStartX = hasClass(container, "open") ? offsetLeft(navigation) - options.gutter : offsetLeft(navigation) - offset; 5581 const contentStartX = offsetLeft(content); 5582 const contentWidth = toInt(getComputedStyle(content).width); 5583 let padding = ""; 5584 if (options.rtl && sidenavRight || !options.rtl && options.position === "left") { 5585 navigationStartX = offsetLeft(navigation) + offset; 5586 if (navigationStartX > contentStartX) { 5587 padding = navigationStartX - contentStartX; 5588 } 5589 } else if (options.rtl && options.position === "left" || !options.rtl && sidenavRight) { 5590 if (navigationStartX < contentStartX + contentWidth) { 5591 padding = contentStartX + contentWidth - navigationStartX; 5592 if (padding >= offset) { 5593 padding = offset; 5594 } 5595 } 5596 } 5597 setStyles(content, { 5598 [pushContentCssProperty]: px(padding) 5599 }); 5600 } 5601 }, 5602 show() { 5603 if (this.useDataAttribute) { 5604 this.showSimpleSidenav(); 5605 } else { 5606 this.toggleNavigation(true); 5607 } 5608 }, 5609 showSidenav() { 5610 const instance = this; 5611 const options = instance.options; 5612 const container = document.querySelector(options.container); 5613 const navigation = container.querySelector(options.navigation); 5614 if (!container || !navigation) { 5615 return; 5616 } 5617 const menu = navigation.querySelector(".sidenav-menu"); 5618 const url = options.url; 5619 if (url) { 5620 instance._loadUrl(menu, url); 5621 } 5622 instance.setWidth(); 5623 instance._subscribeSidenavTransitionEnd(menu, () => { 5624 instance._focusNavigation(); 5625 }); 5626 }, 5627 showSimpleSidenav() { 5628 const instance = this; 5629 const options = instance.options; 5630 const simpleSidenavClosed = instance._isSimpleSidenavClosed(); 5631 if (simpleSidenavClosed) { 5632 const container = document.querySelector(options.container); 5633 const content = document.querySelector(options.content); 5634 if (!container || !content) { 5635 return; 5636 } 5637 const closedClass = options.closedClass; 5638 const openClass = options.openClass; 5639 const toggler = instance.toggler; 5640 const url = toggler.dataset.url; 5641 if (url) { 5642 instance._loadUrl(container, url); 5643 }
5644 instance._emit("openStart.lexicon.sidenav"); 5645 dispatchCustomEvent( 5646 document, 5647 "openStart.lexicon.sidenav", 5648 instance 5649 ); 5650 const isReducedMotion = instance.isReducedMotion(); 5651 setClasses(content, { 5652 [closedClass]: false, 5653 [openClass]: true, 5654 "sidenav-transition": !isReducedMotion 5655 }); 5656 setClasses(container, { 5657 [closedClass]: false, 5658 [openClass]: true, 5659 "sidenav-transition": !isReducedMotion 5660 }); 5661 setClasses(toggler, { 5662 "active": true, 5663 [openClass]: true, 5664 "sidenav-transition": !isReducedMotion 5665 }); 5666 instance._subscribeSidenavTransitionEnd(content, () => { 5667 if (!isReducedMotion) { 5668 removeClass(container, "sidenav-transition"); 5669 removeClass(toggler, "sidenav-transition"); 5670 } 5671 instance._emit("open.lexicon.sidenav"); 5672 dispatchCustomEvent(document, "open.lexicon.sidenav", instance); 5673 this._focusNavigation(); 5674 }); 5675 } 5676 }, 5677 toggle() { 5678 if (this.useDataAttribute) { 5679 this.toggleSimpleSidenav(); 5680 } else { 5681 this.toggleNavigation(); 5682 } 5683 }, 5684 toggleNavigation(force) { 5685 const instance = this; 5686 const options = instance.options; 5687 const type = instance._getType(); 5688 const container = document.querySelector(options.container); 5689 const menu = container.querySelector(".sidenav-menu"); 5690 if (!container || !menu) { 5691 return; 5692 } 5693 const toggler = instance.toggler; 5694 const width = options.width; 5695 const closed = typeof force === "boolean" ? force : hasClass(container, "closed"); 5696 const sidenavRight = instance._isSidenavRight(); 5697 if (closed) { 5698 instance._emit("openStart.lexicon.sidenav"); 5699 dispatchCustomEvent( 5700 document, 5701 "openStart.lexicon.sidenav", 5702 instance 5703 ); 5704 } else { 5705 instance._emit("closedStart.lexicon.sidenav"); 5706 dispatchCustomEvent( 5707 document, 5708 "closedStart.lexicon.sidenav", 5709 instance 5710 ); 5711 } 5712 instance._subscribeSidenavTransitionEnd(container, () => { 5713 const menu2 = container.querySelector(".sidenav-menu"); 5714 if (hasClass(container, "closed")) { 5715 instance.clearHeight(); 5716 setClasses(toggler, { 5717 "open": false, 5718 "sidenav-transition": false 5719 }); 5720 instance._emit("closed.lexicon.sidenav"); 5721 dispatchCustomEvent( 5722 document, 5723 "closed.lexicon.sidenav", 5724 instance 5725 ); 5726 } else { 5727 setClasses(toggler, { 5728 "open": true, 5729 "sidenav-transition": false 5730 }); 5731 instance._emit("open.lexicon.sidenav"); 5732 dispatchCustomEvent(document, "open.lexicon.sidenav", instance); 5733 } 5734 if (!instance._isDesktop()) { 5735 menu2.focus(); 5736 } 5737 }); 5738 if (closed) { 5739 if (type === "relative") { 5740 instance.setHeight(); 5741 } 5742 setStyles(menu, { 5743 width: px(width) 5744 }); 5745 const positionDirection = options.rtl ? "left" : "right"; 5746 if (sidenavRight) { 5747 setStyles(menu, { 5748 [positionDirection]: "" 5749 }); 5750 } 5751 } 5752 if (!instance.isReducedMotion()) { 5753 addClass(container, "sidenav-transition"); 5754 addClass(toggler, "sidenav-transition"); 5755 } 5756 if (closed) { 5757 instance.showSidenav(); 5758 } else { 5759 instance.hideSidenav(); 5760 } 5761 setClasses(container, { 5762 closed: !closed, 5763 open: closed 5764 }); 5765 setClasses(toggler, { 5766 active: closed, 5767 open: closed 5768 }); 5769 }, 5770 toggleSimpleSidenav() { 5771 const simpleSidenavClosed = this._isSimpleSidenavClosed(); 5772 if (simpleSidenavClosed) { 5773 this.showSimpleSidenav(); 5774 } else { 5775 this.hideSimpleSidenav(); 5776 } 5777 }, 5778 visible() { 5779 let closed; 5780 if (this.useDataAttribute) { 5781 closed = this._isSimpleSidenavClosed(); 5782 } else { 5783 const container = document.querySelector(this.options.container); 5784 if (!container) { 5785 return; 5786 } 5787 closed = hasClass(container, "sidenav-transition") ? !hasClass(container, "closed") : hasClass(container, "closed"); 5788 } 5789 return !closed; 5790 } 5791 }; 5792 SideNavigation.destroy = function destroy(element) { 5793 const instance = getInstance(element); 5794 if (instance) { 5795 instance.destroy(); 5796 } 5797 }; 5798 SideNavigation.hide = function hide(element) { 5799 const instance = getInstance(element); 5800 if (instance) { 5801 instance.hide(); 5802 } 5803 }; 5804 SideNavigation.initialize = function initialize(toggler, options = {}) { 5805 toggler = getElement(toggler); 5806 let instance = INSTANCE_MAP.get(toggler); 5807 if (!instance) { 5808 instance = new SideNavigation(toggler, options); 5809 INSTANCE_MAP.set(toggler, instance); 5810 } 5811 return instance; 5812 }; 5813 SideNavigation.instance = getInstance; 5814 function onReady() { 5815 const togglers = document.querySelectorAll( 5816 '[data-toggle="liferay-sidenav"]' 5817 );
5818 Array.from(togglers).forEach(SideNavigation.initialize); 5819 } 5820 if (document.readyState !== "loading") { 5821 onReady(); 5822 } else { 5823 document.addEventListener("DOMContentLoaded", () => { 5824 onReady(); 5825 }); 5826 } 5827 var side_navigation_es_default = SideNavigation; 5828 5829
5829// src/main/resources/META-INF/resources/liferay/status_code.js 5830 var status_code_default = { 5831 BAD_REQUEST: 400, 5832 INTERNAL_SERVER_ERROR: 500, 5833 OK: 200, 5834 SC_DUPLICATE_FILE_EXCEPTION: 490, 5835 SC_FILE_ANTIVIRUS_EXCEPTION: 494, 5836 SC_FILE_CUSTOM_EXCEPTION: 499, 5837 SC_FILE_EXTENSION_EXCEPTION: 491, 5838 SC_FILE_NAME_EXCEPTION: 492, 5839 SC_FILE_SIZE_EXCEPTION: 493, 5840 SC_UPLOAD_REQUEST_SIZE_EXCEPTION: 495 5841 }; 5842 5843
5843// src/main/resources/META-INF/resources/liferay/util/add_params.js 5844 function addParams(params, baseUrl) { 5845 if (!params || typeof params !== "object" && typeof params !== "string") { 5846 throw new TypeError("Parameter params must be an object or string"); 5847 } 5848 if (typeof baseUrl !== "string") { 5849 throw new TypeError("Parameter baseUrl must be a string"); 5850 } 5851 const url = baseUrl.startsWith("/") ? new URL(baseUrl, location.href) : new URL(baseUrl); 5852 if (typeof params === "object") { 5853 Object.entries(params).forEach(([key, value]) => { 5854 url.searchParams.append(key, value); 5855 }); 5856 } else { 5857 const searchParams = new URLSearchParams(params.trim()); 5858 searchParams.forEach((value, key) => { 5859 if (value) { 5860 url.searchParams.append(key, value); 5861 } else { 5862 url.searchParams.append(key, ""); 5863 } 5864 }); 5865 } 5866 return url.toString(); 5867 } 5868 5869
5869// src/main/resources/META-INF/resources/liferay/util/address/get_countries.es.js 5870 function getCountries(callback) { 5871 if (typeof callback !== "function") { 5872 throw new TypeError("Parameter callback must be a function"); 5873 } 5874 Liferay.Service( 5875 "/country/get-company-countries", 5876 { 5877 active: true, 5878 companyId: Liferay.ThemeDisplay.getCompanyId() 5879 }, 5880 callback 5881 ); 5882 } 5883 5884
5884// src/main/resources/META-INF/resources/liferay/util/address/get_regions.es.js 5885 function getRegions(callback, selectKey) { 5886 if (typeof callback !== "function") { 5887 throw new TypeError("Parameter callback must be a function"); 5888 } 5889 if (typeof selectKey !== "string") { 5890 throw new TypeError("Parameter selectKey must be a string"); 5891 } 5892 Liferay.Service( 5893 "/region/get-regions", 5894 { 5895 active: true, 5896 countryId: parseInt(selectKey, 10) 5897 }, 5898 callback 5899 ); 5900 } 5901 5902
5902// src/main/resources/META-INF/resources/liferay/util/consent.js 5903 var CONSENT_TYPES = { 5904 FUNCTIONAL: "CONSENT_TYPE_FUNCTIONAL", 5905 NECESSARY: "CONSENT_TYPE_NECESSARY", 5906 PERFORMANCE: "CONSENT_TYPE_PERFORMANCE", 5907 PERSONALIZATION: "CONSENT_TYPE_PERSONALIZATION" 5908 }; 5909 function checkConsent(type) { 5910 return type === CONSENT_TYPES.NECESSARY || getCookie(type, CONSENT_TYPES.NECESSARY) !== "false"; 5911 } 5912 5913
5913// src/main/resources/META-INF/resources/liferay/util/cookie/cookie.js 5914 var generateCookie = (name, value, options = {}) => { 5915 let cookie = `${name}=${value}`; 5916 if (!options.path) { 5917 cookie += `; path=/`; 5918 } 5919 if (!options.expires && !("max-age" in options)) { 5920 cookie += `; max-age=${365 * 24 * 60 * 60}`; 5921 } 5922 for (const [key, value2] of Object.entries(options)) { 5923 if (value2 === false) { 5924 continue; 5925 } else if (value2 === true) { 5926 cookie += `; ${key}`; 5927 } else { 5928 cookie += `; ${key}=${value2}`; 5929 } 5930 } 5931 return cookie; 5932 }; 5933 function getCookie(name, type) { 5934 if (!checkConsent(type)) { 5935 return void 0; 5936 } 5937 return document.cookie.split("; ").find((v) => v.startsWith(`${name}=`))?.split("=")[1]; 5938 } 5939 function removeCookie(name) { 5940 document.cookie = generateCookie(name, "", { "max-age": 0 }); 5941 } 5942 function setCookie(name, value, type, options) { 5943 if (checkConsent(type)) { 5944 document.cookie = generateCookie(name, value, options); 5945 return true; 5946 } 5947 return false; 5948 } 5949 var cookie_default = { 5950 TYPES: CONSENT_TYPES, 5951 get: getCookie, 5952 remove: removeCookie, 5953 set: setCookie 5954 }; 5955 5956
5956// src/main/resources/META-INF/resources/liferay/util/get_dom.js 5957 function getDOM(element) { 5958 if (element._node || element._nodes) { 5959 return element.nodeType ? element : element._node || null; 5960 } 5961 return element; 5962 } 5963 5964
5964// src/main/resources/META-INF/resources/liferay/util/get_element.js 5965 function getElement2(element) { 5966 const currentElement = getDOM(element); 5967 return typeof currentElement === "string" ? document.querySelector(currentElement) : currentElement.jquery ? currentElement[0] : currentElement; 5968 } 5969 5970
5970// src/main/resources/META-INF/resources/liferay/util/in_browser_view.js 5971 function inBrowserView(node, baseWindow, nodeRegion) { 5972 let viewable = false; 5973 node = getElement2(node); 5974 if (node) { 5975 if (!nodeRegion) { 5976 nodeRegion = node.getBoundingClientRect(); 5977 nodeRegion = { 5978 left: nodeRegion.left + window.scrollX, 5979 top: nodeRegion.top + window.scrollY 5980 }; 5981 nodeRegion.bottom = nodeRegion.top + node.offsetHeight; 5982 nodeRegion.right = nodeRegion.left + node.offsetWidth; 5983 } 5984 if (!baseWindow) { 5985 baseWindow = window; 5986 } 5987 baseWindow = getElement2(baseWindow); 5988 const winRegion = {}; 5989 winRegion.left = baseWindow.scrollX; 5990 winRegion.right = winRegion.left + baseWindow.innerWidth; 5991 winRegion.top = baseWindow.scrollY; 5992 winRegion.bottom = winRegion.top + baseWindow.innerHeight; 5993 viewable = nodeRegion.bottom <= winRegion.bottom && nodeRegion.left >= winRegion.left && nodeRegion.right <= winRegion.right && nodeRegion.top >= winRegion.top; 5994 if (viewable) { 5995 const frameElement = baseWindow.frameElement; 5996 if (frameElement) { 5997 let frameOffset = frameElement.getBoundingClientRect(); 5998 frameOffset = { 5999 left: frameOffset.left + window.scrollX, 6000 top: frameOffset.top + window.scrollY 6001 }; 6002 const xOffset = frameOffset.left - winRegion.left; 6003 nodeRegion.left += xOffset; 6004 nodeRegion.right += xOffset; 6005 const yOffset = frameOffset.top - winRegion.top; 6006 nodeRegion.top += yOffset; 6007 nodeRegion.bottom += yOffset; 6008 viewable = inBrowserView(node, baseWindow.parent, nodeRegion); 6009 } 6010 } 6011 } 6012 return viewable; 6013 } 6014 6015
6015// src/main/resources/META-INF/resources/liferay/util/focus_form_field.js 6016 function getDisabledParents(element) { 6017 const result = []; 6018 while (element.parentElement) { 6019 if (element.parentElement.getAttribute("disabled")) { 6020 result.push(element.parentElement); 6021 } 6022 element = element.parentElement; 6023 } 6024 return result; 6025 } 6026 function focusFormField(element) { 6027 element = getElement2(element); 6028 if (inBrowserView(element)) { 6029 const disabledParents = getDisabledParents(element); 6030 const focusable = !element.getAttribute("disabled") && element.offsetWidth > 0 && element.offsetHeight > 0 && !disabledParents.length; 6031 const form = element.closest("form"); 6032 if (!form || focusable) { 6033 element.focus(); 6034 } else if (form) { 6035 const portletName = form.dataset.fmNamespace; 6036 const formReadyEventName = portletName + "formReady"; 6037 const formReadyHandler = (event) => { 6038 const elFormName = form.getAttribute("name"); 6039 const formName = event.formName; 6040 if (elFormName === formName) { 6041 element.focus(); 6042 Liferay.detach(formReadyEventName, formReadyHandler); 6043 } 6044 }; 6045 Liferay.on(formReadyEventName, formReadyHandler); 6046 } 6047 } 6048 } 6049 6050
6050// src/main/resources/META-INF/resources/liferay/util/form/get_form_element.es.js 6051 function getFormElement(form, elementName) { 6052 let formElement = null; 6053 if (form !== void 0 && form.nodeName === "FORM" && typeof elementName === "string") { 6054 const ns2 = form.dataset.fmNamespace || ""; 6055 formElement = form.elements[ns2 + elementName] || null; 6056 } 6057 return formElement; 6058 } 6059 6060
6060// src/main/resources/META-INF/resources/liferay/util/form/set_form_values.es.js 6061 function setFormValues(form, data) { 6062 if (form === void 0 || form.nodeName !== "FORM" || !isObject(data)) { 6063 return; 6064 } 6065 const entries = Object.entries(data); 6066 entries.forEach(([elementName, elementValue]) => { 6067 const element = getFormElement(form, elementName); 6068 if (element) { 6069 element.value = elementValue; 6070 } 6071 }); 6072 } 6073 6074
6074// src/main/resources/META-INF/resources/liferay/util/form/post_form.es.js 6075 function postForm(form, options) { 6076 if (typeof form === "string") { 6077 form = document.querySelector(form); 6078 } 6079 if (form && form.nodeName === "FORM") { 6080 form.setAttribute("method", "post"); 6081 if (isObject(options)) { 6082 const { data, url } = options; 6083 if (isObject(data)) { 6084 setFormValues(form, data); 6085 } else { 6086 return; 6087 } 6088 if (url === void 0) { 6089 submitForm(form); 6090 } else if (typeof url === "string") { 6091 submitForm(form, url); 6092 } 6093 } else { 6094 submitForm(form); 6095 } 6096 } 6097 } 6098 6099
6099// src/main/resources/META-INF/resources/liferay/util/format_storage.es.js 6100 var DEFAULT_OPTIONS = { 6101 addSpaceBeforeSuffix: false, 6102 decimalSeparator: ".", 6103 denominator: 1024, 6104 suffixGB: "GB", 6105 suffixKB: "KB", 6106 suffixMB: "MB" 6107 }; 6108 function formatStorage(size, options = {}) { 6109 const { 6110 addSpaceBeforeSuffix, 6111 decimalSeparator, 6112 denominator, 6113 suffixGB, 6114 suffixKB, 6115 suffixMB 6116 } = { 6117 ...DEFAULT_OPTIONS, 6118 ...options 6119 }; 6120 if (typeof size !== "number") { 6121 throw new TypeError("Parameter size must be a number"); 6122 } 6123 let decimalPlaces = 0; 6124 let suffix = suffixKB; 6125 size /= denominator; 6126 if (size >= denominator) { 6127 suffix = suffixMB; 6128 size /= denominator; 6129 decimalPlaces = 1; 6130 } 6131 if (size >= denominator) { 6132 suffix = suffixGB; 6133 size /= denominator; 6134 decimalPlaces = 1; 6135 } 6136 let fixedSize = size.toFixed(decimalPlaces); 6137 if (decimalSeparator !== ".") { 6138 fixedSize = fixedSize.replace(/\./, decimalSeparator); 6139 } 6140 return fixedSize + (addSpaceBeforeSuffix ? " " : "") + suffix; 6141 } 6142 6143
6143// src/main/resources/META-INF/resources/liferay/util/format_xml.es.js 6144 var NEW_LINE = "\r\n"; 6145 var REGEX_CDATA = /<!\[CDATA\[.*?\]\]>/gs; 6146 var REGEX_DECLARATIVE_CLOSE = /-->|\]>/; 6147 var REGEX_DECLARATIVE_OPEN = /<!/; 6148 var REGEX_DIRECTIVE = /<\?/; 6149 var REGEX_DOCTYPE = /!DOCTYPE/; 6150 var REGEX_ELEMENT = /^<\w/; 6151 var REGEX_ELEMENT_CLOSE = /^<\/\w/; 6152 var REGEX_ELEMENT_NAMESPACED = /^<[\w:\-.,]+/; 6153 var REGEX_ELEMENT_NAMESPACED_CLOSE = /^<\/[\w:\-.,]+/; 6154 var REGEX_ELEMENT_OPEN = /<\w/; 6155 var REGEX_NAMESPACE_XML = /xmlns(?::|=)/g; 6156 var REGEX_NAMESPACE_XML_ATTR = /\s*(xmlns)(:|=)/g; 6157 var REGEX_TAG_CLOSE = /<\//; 6158 var REGEX_TAG_OPEN = /</g; 6159 var REGEX_TAG_SINGLE_CLOSE = /\/>/; 6160 var REGEX_WHITESPACE_BETWEEN_TAGS = />\s+</g; 6161 var STR_BLANK = ""; 6162 var STR_TOKEN = "~::~"; 6163 var STR_TOKEN_CDATA = "<" + STR_TOKEN + "CDATA" + STR_TOKEN + ">"; 6164 var REGEX_TOKEN_CDATA = new RegExp(STR_TOKEN_CDATA, "g"); 6165 var TAG_INDENT = " "; 6166 var DEFAULT_OPTIONS2 = { 6167 newLine: NEW_LINE, 6168 tagIndent: TAG_INDENT 6169 }; 6170 function formatXML(content, options = {}) { 6171 const { newLine, tagIndent } = { 6172 ...DEFAULT_OPTIONS2, 6173 ...options 6174 }; 6175 if (typeof content !== "string") { 6176 throw new TypeError("Parameter content must be a string"); 6177 } 6178 const cdata = []; 6179 content = content.trim(); 6180 content = content.replace(REGEX_CDATA, (match) => { 6181 cdata.push(match); 6182 return STR_TOKEN_CDATA; 6183 }); 6184 content = content.replace(REGEX_WHITESPACE_BETWEEN_TAGS, "><"); 6185 content = content.replace(REGEX_TAG_OPEN, STR_TOKEN + "<"); 6186 content = content.replace(REGEX_NAMESPACE_XML_ATTR, STR_TOKEN + "$1$2"); 6187 content = content.replace(REGEX_TOKEN_CDATA, () => cdata.shift()); 6188 let commentCounter = 0; 6189 let inComment = false; 6190 const items = content.split(STR_TOKEN); 6191 let level = 0; 6192 let result = ""; 6193 items.forEach((item, index) => { 6194 if (REGEX_CDATA.test(item)) { 6195 result += indent(level, newLine, tagIndent) + item; 6196 } else if (REGEX_DECLARATIVE_OPEN.test(item)) { 6197 result += indent(level, newLine, tagIndent) + item; 6198 commentCounter++; 6199 inComment = true; 6200 if (REGEX_DECLARATIVE_CLOSE.test(item) || REGEX_DOCTYPE.test(item)) { 6201 commentCounter--; 6202 inComment = commentCounter !== 0; 6203 } 6204 } else if (REGEX_DECLARATIVE_CLOSE.test(item)) { 6205 result += item; 6206 commentCounter--; 6207 inComment = commentCounter !== 0; 6208 } else if (REGEX_ELEMENT.exec(items[index - 1]) && REGEX_ELEMENT_CLOSE.exec(item) && REGEX_ELEMENT_NAMESPACED.exec(items[index - 1]).toString() === REGEX_ELEMENT_NAMESPACED_CLOSE.exec(item)[0].replace("/", STR_BLANK).toString()) { 6209 result += item; 6210 if (!inComment) { 6211 --level; 6212 } 6213 } else if (REGEX_ELEMENT_OPEN.test(item) && !REGEX_TAG_CLOSE.test(item) && !REGEX_TAG_SINGLE_CLOSE.test(item)) { 6214 if (inComment) { 6215 result += item; 6216 } else { 6217 result += indent(level++, newLine, tagIndent) + item; 6218 } 6219 } else if (REGEX_ELEMENT_OPEN.test(item) && REGEX_TAG_CLOSE.test(item)) { 6220 if (inComment) { 6221 result += item; 6222 } else { 6223 result += indent(level, newLine, tagIndent) + item; 6224 } 6225 } else if (REGEX_TAG_CLOSE.test(item)) { 6226 if (inComment) { 6227 result += item; 6228 } else { 6229 result += indent(--level, newLine, tagIndent) + item; 6230 } 6231 } else if (REGEX_TAG_SINGLE_CLOSE.test(item)) { 6232 if (inComment) { 6233 result += item; 6234 } else { 6235 result += indent(level, newLine, tagIndent) + item; 6236 } 6237 } else if (REGEX_DIRECTIVE.test(item)) { 6238 result += indent(level, newLine, tagIndent) + item; 6239 } else if (REGEX_NAMESPACE_XML) { 6240 result += indent(level, newLine, tagIndent) + item; 6241 } else { 6242 result += item; 6243 } 6244 if (new RegExp("^" + newLine).test(result)) { 6245 result = result.slice(newLine.length); 6246 } 6247 }); 6248 return result; 6249 } 6250 function indent(level, newLine, tagIndent) { 6251 return newLine + new Array(level + 1).join(tagIndent); 6252 } 6253 6254
6254// src/main/resources/META-INF/resources/liferay/util/get_checkboxes.js 6255 function getCheckboxes(form, except, name, state) { 6256 if (typeof form === "string") { 6257 form = document.querySelector(form); 6258 } else { 6259 form = form._node || form; 6260 } 6261 let selector = "input[type=checkbox]"; 6262 if (name) { 6263 selector += `[name=${name}]`; 6264 } 6265 const checkboxes = Array.from(form.querySelectorAll(selector)); 6266 if (!checkboxes.length) { 6267 return ""; 6268 } 6269 return checkboxes.reduce((previous, item) => { 6270 const { checked, disabled, name: name2, value } = item; 6271 if (value && name2 !== except && checked === state && !disabled) { 6272 previous.push(value); 6273 } 6274 return previous; 6275 }, []).join(); 6276 } 6277 function getCheckedCheckboxes(form, except, name) { 6278 return getCheckboxes(form, except, name, true); 6279 } 6280 function getUncheckedCheckboxes(form, except, name) { 6281 return getCheckboxes(form, except, name, false); 6282 } 6283 6284
6284// src/main/resources/META-INF/resources/liferay/util/get_crop_region.es.js 6285 function getCropRegion(imagePreview, region) { 6286 if (!isObject(imagePreview) || isObject(imagePreview) && imagePreview.tagName !== "IMG") { 6287 throw new TypeError("Parameter imagePreview must be an image"); 6288 } 6289 if (!isObject(region)) { 6290 throw new TypeError("Parameter region must be an object"); 6291 } 6292 const scaleX = imagePreview.naturalWidth / imagePreview.offsetWidth; 6293 const scaleY = imagePreview.naturalHeight / imagePreview.offsetHeight; 6294 const height = region.height ? region.height * scaleY : imagePreview.naturalHeight; 6295 const width = region.width ? region.width * scaleX : imagePreview.naturalWidth; 6296 const x = region.x ? Math.max(region.x * scaleX, 0) : 0; 6297 const y = region.y ? Math.max(region.y * scaleY, 0) : 0; 6298 return { 6299 height, 6300 width, 6301 x, 6302 y 6303 }; 6304 } 6305 6306
6306// src/main/resources/META-INF/resources/liferay/util/get_geolocation.js 6307 function getGeolocation(success, fallback, options) { 6308 if (success && navigator.geolocation) { 6309 navigator.geolocation.getCurrentPosition( 6310 (position) => { 6311 success( 6312 position.coords.latitude, 6313 position.coords.longitude, 6314 position 6315 ); 6316 }, 6317 fallback, 6318 options 6319 ); 6320 } else if (fallback) { 6321 fallback(); 6322 } 6323 } 6324 6325
6325// src/main/resources/META-INF/resources/liferay/util/get_lexicon_icon.js 6326 function getLexiconIcon(icon, cssClass = "") { 6327 if (!icon) { 6328 throw new TypeError("Parameter icon must be provided"); 6329 } 6330 function getLexiconIconHTML(iconName, cssClass2) { 6331 return `<svg 6332 aria-hidden="true" 6333 class="lexicon-icon lexicon-icon-${iconName} ${cssClass2}" 6334 focusable="false" 6335 role="presentation" 6336 > 6337 <use href="${Liferay.Icons.spritemap}#${iconName}" /> 6338 </svg>`; 6339 } 6340 const lexiconIconTemplate = getLexiconIconHTML(icon, cssClass); 6341 const tempElement = document.createElement("div"); 6342 tempElement.innerHTML = lexiconIconTemplate; 6343 return tempElement.firstChild; 6344 } 6345 6346
6346// src/main/resources/META-INF/resources/liferay/util/get_lexicon_icon_template.js 6347 function getLexiconIconTpl(icon, cssClass = "") { 6348 return `<svg aria-hidden="true" class="lexicon-icon lexicon-icon-${icon} ${cssClass}" focusable="false" role="presentation"><use href="${Liferay.Icons.spritemap}#${icon}" /></svg>`; 6349 } 6350 6351
6351// src/main/resources/META-INF/resources/liferay/util/get_opener.js 6352 var _opener; 6353 function getOpener() { 6354 let openingWindow = _opener; 6355 if (!openingWindow) { 6356 const topUtil = getTop().Liferay.Util; 6357 const windowName = window.name; 6358 const dialog = topUtil.Window.getById(windowName); 6359 if (dialog) { 6360 openingWindow = dialog._opener; 6361 _opener = openingWindow; 6362 } 6363 } 6364 return openingWindow || window.opener || window.parent; 6365 } 6366 6367
6367// src/main/resources/META-INF/resources/liferay/util/get_selected_option_values.js 6368 function getSelectedOptionValues(select, delimiter = ",") { 6369 const optionsArray = Array.from(select.getElementsByTagName("option")); 6370 return optionsArray.reduce((previous, item) => { 6371 const { value } = item; 6372 if (value) { 6373 previous.push(value); 6374 } 6375 return previous; 6376 }, []).join(delimiter); 6377 } 6378 6379
6379// src/main/resources/META-INF/resources/liferay/util/get_url_with_session_id.js 6380 function getURLWithSessionId(url) { 6381 if (!themeDisplay.isAddSessionIdToURL()) { 6382 return url; 6383 } 6384 let separatorIndex = url.indexOf(";"); 6385 if (separatorIndex > -1) { 6386 return url; 6387 } 6388 const sessionId = `;jsessionid=${themeDisplay.getSessionId()}`; 6389 separatorIndex = url.indexOf("?"); 6390 if (separatorIndex > -1) { 6391 return `${url.substring(0, separatorIndex)}${sessionId}${url.substring( 6392 separatorIndex 6393 )}`; 6394 } 6395 separatorIndex = url.indexOf("//"); 6396 if (separatorIndex > -1) { 6397 const lastSeparatorIndex = url.lastIndexOf("/"); 6398 if (separatorIndex + 1 === lastSeparatorIndex) { 6399 return `${url}/${sessionId}`; 6400 } 6401 } 6402 return `${url}${sessionId}`; 6403 } 6404 6405
6405// src/main/resources/META-INF/resources/liferay/util/get_window.js 6406 function getWindow(windowId = window.name) { 6407 const topWindow = getTop(); 6408 return topWindow.Liferay.Util.Window.getById(windowId); 6409 } 6410 6411
6411// src/main/resources/META-INF/resources/liferay/util/is_phone.js 6412 function isPhone() { 6413 return window.innerWidth < breakpoints_default.PHONE; 6414 } 6415 6416
6416// src/main/resources/META-INF/resources/liferay/util/is_tablet.js 6417 function isTablet() { 6418 return window.innerWidth < breakpoints_default.TABLET; 6419 } 6420 6421
6421// src/main/resources/META-INF/resources/liferay/util/storage.js 6422 var Storage = class { 6423 constructor(storage) { 6424 __publicField(this, "TYPES", CONSENT_TYPES); 6425 this.storage = storage; 6426 } 6427 clear() { 6428 return this.storage.clear(); 6429 } 6430 getItem(key, type) { 6431 if (!checkConsent(type)) { 6432 return null; 6433 } 6434 return this.storage.getItem(key); 6435 } 6436 key(index, type) { 6437 if (!checkConsent(type)) { 6438 return null; 6439 } 6440 return this.storage.key(index); 6441 } 6442 removeItem(key) { 6443 return this.storage.removeItem(key); 6444 } 6445 setItem(key, value, type) { 6446 if (!checkConsent(type)) { 6447 return false; 6448 } 6449 this.storage.setItem(key, value); 6450 return true; 6451 } 6452 get length() { 6453 return this.storage.length; 6454 } 6455 }; 6456 6457
6457// src/main/resources/META-INF/resources/liferay/util/local_storage.js 6458 var local_storage_default = new Storage(localStorage); 6459 6460
6460// src/main/resources/META-INF/resources/liferay/util/navigate.es.js 6461 function navigate_es_default(url, listeners) { 6462 let urlString = url; 6463 if (url?.constructor?.name === "URL") { 6464 urlString = String(url); 6465 } 6466 if (Liferay.SPA?.app?.canNavigate(urlString)) { 6467 Liferay.SPA.app.navigate(urlString); 6468 if (listeners) { 6469 Object.keys(listeners).forEach((key) => { 6470 Liferay.once(key, listeners[key]); 6471 }); 6472 } 6473 } else if (isValidURL(urlString)) { 6474 window.location.href = urlString; 6475 } 6476 } 6477 function isValidURL(url) { 6478 let urlObject; 6479 try { 6480 if (url.startsWith("/")) { 6481 urlObject = new URL(url, window.location.origin); 6482 } else { 6483 urlObject = new URL(url); 6484 } 6485 } catch (error) { 6486 return false; 6487 } 6488 return urlObject.protocol === "http:" || urlObject.protocol === "https:"; 6489 } 6490 6491
6491// src/main/resources/META-INF/resources/liferay/util/normalize_friendly_url.js 6492 function normalizeFriendlyURL(text) { 6493 if (typeof text !== "string") { 6494 throw new TypeError("parameter text must be a string"); 6495 } 6496 return text.replace(/[^a-z0-9_-]/gi, "-").replace(/^-+/, "").replace(/--+/, "-").toLowerCase(); 6497 } 6498 6499
6499// src/main/resources/META-INF/resources/liferay/util/ns.es.js 6500 var nsCached = memoize((namespace, str) => { 6501 if (typeof str !== "undefined" && !(str.lastIndexOf(namespace, 0) === 0)) { 6502 str = `${namespace}${str}`; 6503 } 6504 return str; 6505 }); 6506 function ns(namespace, object) { 6507 let value; 6508 if (typeof object !== "object") { 6509 value = nsCached(namespace, object); 6510 } else { 6511 value = {}; 6512 const keys = Object.keys(object); 6513 keys.forEach((item) => { 6514 const originalItem = item; 6515 item = nsCached(namespace, item); 6516 value[item] = object[originalItem]; 6517 }); 6518 } 6519 return value; 6520 } 6521 6522
6522// src/main/resources/META-INF/resources/liferay/util/object_to_url_search_params.es.js 6523 function objectToURLSearchParams(object) { 6524 if (!isObject(object)) { 6525 throw new TypeError("Parameter obj must be an object"); 6526 } 6527 const urlSearchParams = new URLSearchParams(); 6528 Object.entries(object).forEach(([key, value]) => { 6529 if (Array.isArray(value)) { 6530 for (let i = 0; i < value.length; i++) { 6531 urlSearchParams.append(key, value[i]); 6532 } 6533 } else { 6534 urlSearchParams.append(key, value); 6535 } 6536 }); 6537 return urlSearchParams; 6538 } 6539 6540
6540// src/main/resources/META-INF/resources/liferay/util/portlet_configuration_icon_action.js 6541 var portletConfigurationIconActions = /* @__PURE__ */ new Map(); 6542 function getPortletConfigurationIconAction(id) { 6543 return portletConfigurationIconActions.get(id); 6544 } 6545 function setPortletConfigurationIconAction(id, callback) { 6546 portletConfigurationIconActions.set(id, callback); 6547 } 6548 6549
6549// src/main/resources/META-INF/resources/liferay/util/portlet_url/create_action_url.es.js 6550 function createActionURL(basePortletURL, parameters = {}) { 6551 return createPortletURL(basePortletURL, { 6552 ...parameters, 6553 p_p_lifecycle: "1" 6554 }); 6555 } 6556 6557
6557// src/main/resources/META-INF/resources/liferay/util/portlet_url/create_render_url.es.js 6558 function createRenderURL(basePortletURL, parameters = {}) { 6559 return createPortletURL(basePortletURL, { 6560 ...parameters, 6561 p_p_lifecycle: "0" 6562 }); 6563 } 6564 6565
6565// src/main/resources/META-INF/resources/liferay/util/portlet_url/create_resource_url.es.js 6566 function createResourceURL(basePortletURL, parameters = {}) { 6567 return createPortletURL(basePortletURL, { 6568 ...parameters, 6569 p_p_lifecycle: "2" 6570 }); 6571 } 6572 6573
6573// src/main/resources/META-INF/resources/liferay/util/remove_entity_selection.js 6574 function removeEntitySelection(entityIdString, entityNameString, removeEntityButton, namespace) { 6575 const elementByEntityId = document.getElementById( 6576 `${namespace}${entityIdString}` 6577 ); 6578 if (elementByEntityId) { 6579 elementByEntityId.value = 0; 6580 } 6581 const elementByEntityName = document.getElementById( 6582 `${namespace}${entityNameString}` 6583 ); 6584 if (elementByEntityName) { 6585 elementByEntityName.value = ""; 6586 } 6587 toggleDisabled(removeEntityButton, true); 6588 Liferay.fire("entitySelectionRemoved"); 6589 } 6590 6591
6591// src/main/resources/META-INF/resources/liferay/util/run_scripts_in_element.es.js 6592 function runJSFromText(sourceScriptElement, next, appendFn) { 6593 const { text, type } = sourceScriptElement; 6594 const scriptElement = document.createElement("script"); 6595 if (Liferay.CSP.nonce) { 6596 scriptElement.setAttribute("nonce", Liferay.CSP.nonce); 6597 } 6598 scriptElement.text = text; 6599 scriptElement.type = type; 6600 if (appendFn) { 6601 appendFn(scriptElement); 6602 } else { 6603 document.head.appendChild(scriptElement); 6604 } 6605 scriptElement.remove(); 6606 next(); 6607 } 6608 function runJSFromFile(sourceScriptElement, next, appendFn) { 6609 const { src, type } = sourceScriptElement; 6610 const scriptElement = document.createElement("script"); 6611 if (Liferay.CSP.nonce) { 6612 scriptElement.setAttribute("nonce", Liferay.CSP.nonce); 6613 } 6614 scriptElement.src = src; 6615 scriptElement.type = type; 6616 const callback = function() { 6617 scriptElement.remove(); 6618 next(); 6619 }; 6620 scriptElement.addEventListener("load", callback, { once: true }); 6621 scriptElement.addEventListener("error", callback, { once: true }); 6622 if (appendFn) { 6623 appendFn(scriptElement); 6624 } else { 6625 document.head.appendChild(scriptElement); 6626 } 6627 } 6628 function runScriptsInOrder(scripts, i, defaultFn, appendFn) { 6629 const scriptElement = scripts[i]; 6630 const runNextScript = () => { 6631 if (i < scripts.length - 1) { 6632 runScriptsInOrder(scripts, i + 1, defaultFn, appendFn); 6633 } else if (defaultFn) { 6634 setTimeout(defaultFn); 6635 } 6636 }; 6637 if (!scriptElement) { 6638 return; 6639 } else if (scriptElement.type && scriptElement.type !== "text/javascript" && scriptElement.type !== "module" && scriptElement.type !== "module-shim") { 6640 runNextScript(); 6641 } else { 6642 scriptElement.remove(); 6643 if (scriptElement.src) { 6644 runJSFromFile(scriptElement, runNextScript, appendFn); 6645 } else { 6646 runJSFromText(scriptElement, runNextScript, appendFn); 6647 } 6648 } 6649 } 6650 function run_scripts_in_element_es_default(element, defaultFn, appendFn) { 6651 const scripts = element.querySelectorAll("script"); 6652 if (!scripts.length && defaultFn) { 6653 setTimeout(defaultFn); 6654 return; 6655 } 6656 runScriptsInOrder(scripts, 0, defaultFn, appendFn); 6657 } 6658 6659
6659// src/main/resources/META-INF/resources/liferay/util/select_folder.js 6660 function selectFolder(folderData, namespace) { 6661 const folderDataElement = document.getElementById( 6662 `${namespace}${folderData.idString}` 6663 ); 6664 if (folderDataElement) { 6665 folderDataElement.value = folderData.idValue; 6666 } 6667 const folderNameElement = document.getElementById( 6668 `${namespace}${folderData.nameString}` 6669 ); 6670 if (folderNameElement) { 6671 folderNameElement.value = Liferay.Util.unescape(folderData.nameValue); 6672 } 6673 const removeFolderButton = document.getElementById( 6674 `${namespace}removeFolderButton` 6675 ); 6676 if (removeFolderButton) { 6677 toggleDisabled(removeFolderButton, false); 6678 } 6679 } 6680 6681
6681// src/main/resources/META-INF/resources/liferay/util/session.es.js 6682 var TOKEN_SERIALIZE = "serialize://"; 6683 function getSessionClickFormData(cmd) { 6684 const doAsUserIdEncoded = Liferay.ThemeDisplay.getDoAsUserIdEncoded(); 6685 const formData = new FormData(); 6686 formData.append("cmd", cmd); 6687 formData.append("p_auth", Liferay.authToken); 6688 if (doAsUserIdEncoded) { 6689 formData.append("doAsUserId", doAsUserIdEncoded); 6690 } 6691 return formData; 6692 } 6693 function getSessionClickURL() { 6694 return `${Liferay.ThemeDisplay.getPortalURL()}${Liferay.ThemeDisplay.getPathMain()}/portal/session_click`; 6695 } 6696 function getSessionValue(key, options = {}) { 6697 const formData = getSessionClickFormData("get"); 6698 formData.append("key", key); 6699 if (options.useHttpSession) { 6700 formData.append("useHttpSession", true); 6701 } 6702 return defaultFetch(getSessionClickURL(), { 6703 body: formData, 6704 method: "POST" 6705 }).then((response) => response.text()).then((responseText) => { 6706 if (responseText.startsWith(TOKEN_SERIALIZE)) { 6707 const value = responseText.substring(TOKEN_SERIALIZE.length); 6708 responseText = JSON.parse(value); 6709 } 6710 return responseText; 6711 }); 6712 } 6713 function setSessionValue(key, value, options = {}) { 6714 const formData = getSessionClickFormData("set"); 6715 if (value && typeof value === "object") { 6716 value = TOKEN_SERIALIZE + JSON.stringify(value); 6717 } 6718 formData.append(key, value); 6719 if (options.useHttpSession) { 6720 formData.append("useHttpSession", true); 6721 } 6722 return defaultFetch(getSessionClickURL(), { 6723 body: formData, 6724 method: "POST" 6725 }); 6726 } 6727 6728
6728// src/main/resources/META-INF/resources/liferay/util/session_storage.js 6729 var session_storage_default = new Storage(sessionStorage); 6730 6731
6731// src/main/resources/META-INF/resources/liferay/util/show_caps_lock.js 6732 function showCapsLock(event, elementId) { 6733 const element = document.getElementById(elementId); 6734 if (element) { 6735 element.style.display = "none"; 6736 if (event.getModifierState("CapsLock")) { 6737 element.style.display = ""; 6738 } 6739 } 6740 } 6741 6742
6742// src/main/resources/META-INF/resources/liferay/util/sub.ts 6743 var SPLIT_REGEX = /({\d+})/g; 6744 function sub(langKey, ...params) { 6745 const paramList = params.reduce( 6746 (paramList2, param) => Array.isArray(param) ? [...paramList2, ...param] : [...paramList2, param], 6747 [] 6748 ); 6749 const keyArray = langKey.split(SPLIT_REGEX).filter((val) => val.length !== 0); 6750 for (let i = 0; i < paramList.length; i++) { 6751 const param = paramList[i]; 6752 const indexKey = `{${i}}`; 6753 let paramIndex = keyArray.indexOf(indexKey); 6754 while (paramIndex >= 0) { 6755 keyArray.splice(paramIndex, 1, param); 6756 paramIndex = keyArray.indexOf(indexKey); 6757 } 6758 } 6759 return keyArray.some((value) => value && typeof value === "object") ? keyArray : keyArray.join(""); 6760 } 6761 6762
6762// src/main/resources/META-INF/resources/liferay/util/toggle_boxes.js 6763 function toggleBoxes(checkBoxId, toggleBoxId, displayWhenUnchecked, toggleChildCheckboxes) { 6764 const checkBox = document.getElementById(checkBoxId); 6765 const toggleBox = document.getElementById(toggleBoxId); 6766 if (checkBox && toggleBox) { 6767 let checked = checkBox.checked; 6768 if (displayWhenUnchecked) { 6769 checked = !checked; 6770 } 6771 if (checked) { 6772 toggleBox.classList.remove("hide"); 6773 } else { 6774 toggleBox.classList.add("hide"); 6775 } 6776 checkBox.addEventListener("click", () => { 6777 toggleBox.classList.toggle("hide"); 6778 if (toggleChildCheckboxes) { 6779 const childCheckboxes = toggleBox.querySelectorAll( 6780 "input[type=checkbox]" 6781 ); 6782 childCheckboxes.forEach((childCheckbox) => { 6783 childCheckbox.checked = checkBox.checked; 6784 }); 6785 } 6786 }); 6787 } 6788 } 6789 6790
6790// src/main/resources/META-INF/resources/liferay/util/toggle_controls.js 6791 var MAP_TOGGLE_STATE = { 6792 false: { 6793 cssClass: "controls-hidden", 6794 iconCssClass: "hidden", 6795 state: "hidden" 6796 }, 6797 true: { 6798 cssClass: "controls-visible", 6799 iconCssClass: "view", 6800 state: "visible" 6801 } 6802 }; 6803 function toggleControls(node) { 6804 const body = document.body; 6805 node = node._node || body; 6806 const trigger = node.querySelector(".toggle-controls"); 6807 if (!trigger) { 6808 return; 6809 } 6810 let controlsVisible = Liferay._editControlsState === "visible"; 6811 let currentState = MAP_TOGGLE_STATE[controlsVisible]; 6812 let icon = trigger.querySelector(".lexicon-icon"); 6813 if (icon) { 6814 currentState.icon = icon; 6815 } 6816 body.classList.add(currentState.cssClass); 6817 Liferay.fire("toggleControls", { 6818 enabled: controlsVisible 6819 }); 6820 trigger.addEventListener("click", () => { 6821 controlsVisible = !controlsVisible; 6822 const previousState = currentState; 6823 currentState = MAP_TOGGLE_STATE[controlsVisible]; 6824 body.classList.toggle(previousState.cssClass); 6825 body.classList.toggle(currentState.cssClass);
6826 const editControlsIconClass = currentState.iconCssClass; 6827 const editControlsState = currentState.state; 6828 const newIcon = getLexiconIcon(editControlsIconClass); 6829 currentState.icon = newIcon; 6830 icon.replaceWith(newIcon); 6831 icon = newIcon; 6832 Liferay._editControlsState = editControlsState; 6833 setSessionValue( 6834 "com.liferay.frontend.js.web_toggleControls", 6835 editControlsState 6836 ); 6837 Liferay.fire("toggleControls", { 6838 enabled: controlsVisible, 6839 src: "ui" 6840 }); 6841 }); 6842 } 6843 6844
6844// src/main/resources/META-INF/resources/liferay/util/toggle_radio.js 6845 function toggleRadio(radioId, showBoxIds, hideBoxIds) { 6846 const radioButton = document.getElementById(radioId); 6847 if (radioButton) { 6848 let showBoxes; 6849 if (showBoxIds) { 6850 if (Array.isArray(showBoxIds)) { 6851 showBoxIds = showBoxIds.join(",#"); 6852 } 6853 showBoxes = document.querySelectorAll(`#${showBoxIds}`); 6854 showBoxes.forEach((showBox) => { 6855 if (radioButton.checked) { 6856 showBox.classList.remove("hide"); 6857 } else { 6858 showBox.classList.add("hide"); 6859 } 6860 }); 6861 } 6862 radioButton.addEventListener("change", () => { 6863 if (showBoxes) { 6864 showBoxes.forEach((showBox) => { 6865 showBox.classList.remove("hide"); 6866 }); 6867 } 6868 if (hideBoxIds) { 6869 if (Array.isArray(hideBoxIds)) { 6870 hideBoxIds = hideBoxIds.join(",#"); 6871 } 6872 const hideBoxes = document.querySelectorAll(`#${hideBoxIds}`); 6873 hideBoxes.forEach((hideBox) => { 6874 hideBox.classList.add("hide"); 6875 }); 6876 } 6877 }); 6878 } 6879 } 6880 6881
6881// src/main/resources/META-INF/resources/liferay/util/toggle_select_box.js 6882 var toggle = (selectBox, toggleBox, dynamicValue, value) => { 6883 const currentValue = selectBox.value; 6884 const visible = dynamicValue ? value(currentValue, value) : value === currentValue; 6885 toggleBox.classList.toggle("hide", !visible); 6886 }; 6887 function toggleSelectBox(selectBoxId, value, toggleBoxId) { 6888 const selectBox = document.getElementById(selectBoxId); 6889 const toggleBox = document.getElementById(toggleBoxId); 6890 if (!selectBox || !toggleBox) { 6891 return; 6892 } 6893 const dynamicValue = typeof value === "function"; 6894 toggle(selectBox, toggleBox, dynamicValue, value); 6895 selectBox.addEventListener( 6896 "change", 6897 () => toggle(selectBox, toggleBox, dynamicValue, value) 6898 ); 6899 } 6900 6901
6901// src/main/resources/META-INF/resources/liferay/zIndex.js 6902 var zIndex_default = { 6903 ALERT: 430, 6904 DOCK: 10, 6905 DOCK_PARENT: 20, 6906 DRAG_ITEM: 460, 6907 DROP_AREA: 440, 6908 DROP_POSITION: 450, 6909 MENU: 5e3, 6910 OVERLAY: 1e3, 6911 POPOVER: 1600, 6912 TOOLTIP: 1e4, 6913 WINDOW: 1200 6914 }; 6915 6916
6916// src/main/resources/META-INF/resources/liferay/global.es.js 6917 var PATH_CONTEXT = Liferay.ThemeDisplay.getPathContext(); 6918 Liferay = window.Liferay || {}; 6919 Liferay.BREAKPOINTS = breakpoints_default; 6920 Liferay.STATUS_CODE = status_code_default; 6921 Liferay.zIndex = zIndex_default; 6922 Liferay.component = component; 6923 Liferay.componentReady = componentReady; 6924 Liferay.destroyComponent = destroyComponent; 6925 Liferay.destroyComponents = destroyComponents; 6926 Liferay.destroyUnfulfilledPromises = destroyUnfulfilledPromises; 6927 Liferay.getComponentCache = getComponentCache; 6928 Liferay.initComponentCache = initComponentCache; 6929 Liferay.Address = { 6930 getCountries, 6931 getRegions 6932 }; 6933 Liferay.DynamicSelect = DynamicSelect; 6934 Liferay.LayoutExporter = { 6935 all: hideLayoutPane, 6936 details: toggleLayoutDetails, 6937 icons: getLayoutIcons(), 6938 proposeLayout, 6939 publishToLive, 6940 selected: showLayoutPane 6941 }; 6942 Liferay.Portal = { 6943 Tabs: { 6944 show: showTab 6945 }, 6946 ToolTip: { 6947 show: showTooltip 6948 } 6949 }; 6950 Liferay.Portlet = Liferay.Portlet || {}; 6951 Liferay.Portlet.minimize = minimizePortlet; 6952 Liferay.Portlet.openModal = (...args) => { 6953 import( 6954 // eslint-disable-next-line lines-around-comment 6955 /* webpackIgnore: true */ 6956 PATH_CONTEXT + "/o/frontend-js-web/__liferay__/index.js" 6957 ).then(({ openPortletModal }) => openPortletModal(...args)); 6958 }; 6959 Liferay.Portlet.openWindow = (...args) => { 6960 import( 6961 // eslint-disable-next-line lines-around-comment 6962 /* webpackIgnore: true */ 6963 PATH_CONTEXT + "/o/frontend-js-web/__liferay__/index.js" 6964 ).then(({ openPortletWindow }) => openPortletWindow(...args)); 6965 }; 6966 Liferay.SideNavigation = side_navigation_es_default; 6967 Liferay.Util = Liferay.Util || {}; 6968 Liferay.Util.MAP_HTML_CHARS_ESCAPED = MAP_HTML_CHARS_ESCAPED; 6969 Liferay.Util.addParams = addParams; 6970 Liferay.Util.openAlertModal = (...args) => { 6971 import( 6972 // eslint-disable-next-line lines-around-comment 6973 /* webpackIgnore: true */ 6974 PATH_CONTEXT + "/o/frontend-js-web/__liferay__/index.js" 6975 ).then(({ openAlertModal }) => openAlertModal(...args)); 6976 }; 6977 Liferay.Util.openSimpleInputModal = (...args) => { 6978 import( 6979 // eslint-disable-next-line lines-around-comment 6980 /* webpackIgnore: true */ 6981 PATH_CONTEXT + "/o/frontend-js-web/__liferay__/index.js" 6982 ).then(({ openSimpleInputModal }) => openSimpleInputModal(...args)); 6983 }; 6984 Liferay.Util.AutoSize = autosize_es_default; 6985 Liferay.Util.debounce = debounce_es_default; 6986 Liferay.Util.delegate = delegate_es_default; 6987 Liferay.Util.DynamicInlineScroll = DynamicInlineScroll_es_default; 6988 Liferay.Util.runScriptsInElement = run_scripts_in_element_es_default; 6989 Liferay.Util.disableEsc = () => { 6990 if (document.all && window.event.keyCode === 27) { 6991 window.event.returnValue = false; 6992 } 6993 }; 6994 var htmlEscapes = { 6995 '"': """, 6996 "&": "&", 6997 "'": "'", 6998 "<": "<", 6999 ">": ">" 7000 }; 7001 var reUnescapedHtml = /[&<>"']/g; 7002 var reHasUnescapedHtml = RegExp(reUnescapedHtml.source); 7003 Liferay.Util.escape = (string) => { 7004 return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, (chr) => htmlEscapes[chr]) : string || ""; 7005 }; 7006 Liferay.Util.escapeHTML = escapeHTML; 7007 Liferay.Util.fetch = defaultFetch; 7008 Liferay.Util.focusFormField = focusFormField; 7009 Liferay.Util.formatStorage = formatStorage; 7010 Liferay.Util.formatXML = formatXML; 7011 Liferay.Util.getCheckedCheckboxes = getCheckedCheckboxes; 7012 Liferay.Util.getUncheckedCheckboxes = getUncheckedCheckboxes; 7013 Liferay.Util.getCropRegion = getCropRegion; 7014 Liferay.Util.getDOM = getDOM; 7015 Liferay.Util.getElement = getElement2; 7016 Liferay.Util.getGeolocation = getGeolocation; 7017 Liferay.Util.getFormElement = getFormElement; 7018 Liferay.Util.getLexiconIcon = getLexiconIcon; 7019 Liferay.Util.getLexiconIconTpl = getLexiconIconTpl; 7020 Liferay.Util.getOpener = getOpener; 7021 Liferay.Util.getPortletConfigurationIconAction = getPortletConfigurationIconAction; 7022 Liferay.Util.getPortletId = getPortletId; 7023 Liferay.Util.getPortletNamespace = getPortletNamespace; 7024 Liferay.Util.getSelectedOptionValues = getSelectedOptionValues; 7025 Liferay.Util.getTop = getTop; 7026 Liferay.Util.getURLWithSessionId = getURLWithSessionId; 7027 Liferay.Util.getWindow = getWindow; 7028 Liferay.Util.groupBy = import_lodash.default; 7029 Liferay.Util.inBrowserView = inBrowserView; 7030 Liferay.Util.isEqual = import_lodash2.default; 7031 Liferay.Util.isPhone = isPhone; 7032 Liferay.Util.isTablet = isTablet;
7033 Liferay.Util.loadClientExtensions = loadClientExtensions; 7034 Liferay.Util.loadEditorClientExtensions = loadEditorClientExtensions; 7035 Liferay.Util.navigate = navigate_es_default; 7036 Liferay.Util.ns = ns; 7037 Liferay.Util.objectToFormData = objectToFormData; 7038 Liferay.Util.objectToURLSearchParams = objectToURLSearchParams; 7039 Liferay.Util.normalizeFriendlyURL = normalizeFriendlyURL; 7040 Liferay.Util.PortletURL = { 7041 createActionURL, 7042 createPortletURL, 7043 createRenderURL, 7044 createResourceURL 7045 }; 7046 Liferay.Util.postForm = postForm; 7047 Liferay.Util.setFormValues = setFormValues; 7048 Liferay.Util.toCharCode = to_char_code_es_default; 7049 Liferay.Util.toggleDisabled = toggleDisabled; 7050 Liferay.Util.openConfirmModal = (...args) => { 7051 import( 7052 // eslint-disable-next-line lines-around-comment 7053 /* webpackIgnore: true */ 7054 PATH_CONTEXT + "/o/frontend-js-web/__liferay__/index.js" 7055 ).then(({ openConfirmModal }) => openConfirmModal(...args)); 7056 }; 7057 Liferay.Util.openModal = (...args) => { 7058 import( 7059 // eslint-disable-next-line lines-around-comment 7060 /* webpackIgnore: true */ 7061 PATH_CONTEXT + "/o/frontend-js-web/__liferay__/index.js" 7062 ).then(({ openModal }) => openModal(...args)); 7063 }; 7064 Liferay.Util.openSelectionModal = (...args) => { 7065 import( 7066 // eslint-disable-next-line lines-around-comment 7067 /* webpackIgnore: true */ 7068 PATH_CONTEXT + "/o/frontend-js-web/__liferay__/index.js" 7069 ).then(({ openSelectionModal }) => openSelectionModal(...args)); 7070 }; 7071 Liferay.Util.openToast = (...args) => { 7072 import( 7073 // eslint-disable-next-line lines-around-comment 7074 /* webpackIgnore: true */ 7075 PATH_CONTEXT + "/o/frontend-js-web/__liferay__/index.js" 7076 ).then(({ openToast }) => openToast(...args)); 7077 }; 7078 Liferay.Util.openWindow = openWindow; 7079 Liferay.Util.removeEntitySelection = removeEntitySelection; 7080 Liferay.Util.selectFolder = selectFolder; 7081 Liferay.Util.setPortletConfigurationIconAction = setPortletConfigurationIconAction; 7082 Liferay.Util.showCapsLock = showCapsLock; 7083 Liferay.Util.sub = sub; 7084 Liferay.Util.Session = { 7085 get: getSessionValue, 7086 set: setSessionValue 7087 }; 7088 Liferay.Util.toggleBoxes = toggleBoxes; 7089 Liferay.Util.toggleControls = toggleControls; 7090 Liferay.Util.toggleRadio = toggleRadio; 7091 Liferay.Util.toggleSelectBox = toggleSelectBox; 7092 var htmlUnescapes = { 7093 "'": "'", 7094 "&": "&", 7095 ">": ">", 7096 "<": "<", 7097 """: '"' 7098 }; 7099 var reEscapedHtml = /&(?:amp|lt|gt|quot|#(0+)?39);/g; 7100 var reHasEscapedHtml = RegExp(reEscapedHtml.source); 7101 Liferay.Util.unescape = (string) => { 7102 return string && reHasEscapedHtml.test(string) ? string.replace( 7103 reEscapedHtml, 7104 (entity) => htmlUnescapes[entity] || "'" 7105 ) : string || ""; 7106 }; 7107 Liferay.Util.unescapeHTML = unescapeHTML; 7108 Liferay.Util.Cookie = cookie_default; 7109 Liferay.Util.LocalStorage = local_storage_default; 7110 Liferay.Util.SessionStorage = session_storage_default; 7111 window.portlet = portlet_es_default; 7112})(); 7113//# sourceMappingURL=global.bundle.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.