PageSourceSearch

https://rimuhc.ca/o/frontend-js-web/liferay/portlet.js

js rimuhc.ca collected 2026-09-25 18:34:46 UTC 16,554 bytes, 496 lines download raw bytes

1function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
2
3function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
4
5function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
7/**
8 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
9 *
10 * This library is free software; you can redistribute it and/or modify it under
11 * the terms of the GNU Lesser General Public License as published by the Free
12 * Software Foundation; either version 2.1 of the License, or (at your option)
13 * any later version.
14 *
15 * This library is distributed in the hope that it will be useful, but WITHOUT
16 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
18 * details.
19 */
20(function (A, Liferay) {
21  var Lang = A.Lang;
22  var Util = Liferay.Util;
23  var STR_HEAD = 'head';
24  var TPL_NOT_AJAXABLE = '<div class="alert alert-info">{0}</div>';
25
26  var Portlet = _objectSpread({}, Liferay.Portlet, {
27    _defCloseFn: function _defCloseFn(event) {
28      event.portlet.remove(true);
29
30      if (!event.nestedPortlet) {
31        var formData = Liferay.Util.objectToFormData({
32          cmd: 'delete',
33          doAsUserId: event.doAsUserId,
34          p_auth: Liferay.authToken,
35          p_l_id: event.plid,
36          p_p_id: event.portletId,
37          p_v_l_s_g_id: themeDisplay.getSiteGroupId()
38        });
39        Liferay.Util.fetch(themeDisplay.getPathMain() + '/portal/update_layout', {
40          body: formData,
41          method: 'POST'
42        }).then(function (response) {
43          if (response.ok) {
44            Liferay.fire('updatedLayout');
45          }
46        });
47      }
48    },
49    _loadMarkupHeadElements: function _loadMarkupHeadElements(response) {
50      var markupHeadElements = response.markupHeadElements;
51
52      if (markupHeadElements && markupHeadElements.length) {
53        var head = A.one(STR_HEAD);
54        head.append(markupHeadElements);
55        var container = A.Node.create('<div />');
56        container.plug(A.Plugin.ParseContent);
57        container.setContent(markupHeadElements);
58      }
59    },
60    _loadPortletFiles: function _loadPortletFiles(response, loadHTML) {
61      var footerCssPaths = response.footerCssPaths || [];
62      var headerCssPaths = response.headerCssPaths || [];
63      var javascriptPaths = response.headerJavaScriptPaths || [];
64      javascriptPaths = javascriptPaths.concat(response.footerJavaScriptPaths || []);
65      var body = A.getBody();
66      var head = A.one(STR_HEAD);
67
68      if (headerCssPaths.length) {
69        A.Get.css(headerCssPaths, {
70          insertBefore: head.get('firstChild').getDOM()
71        });
72      }
73
74      var lastChild = body.get('lastChild').getDOM();
75
76      if (footerCssPaths.length) {
77        A.Get.css(footerCssPaths, {
78          insertBefore: lastChild
79        });
80      }
81
82      var responseHTML = response.portletHTML;
83
84      if (javascriptPaths.length) {
85        A.Get.script(javascriptPaths, {
86          onEnd: function onEnd() {
87            loadHTML(responseHTML);
88          }
89        });
90      } else {
91        loadHTML(responseHTML);
92      }
93    },
94    _mergeOptions: function _mergeOptions(portlet, options) {
95      options = options || {};
96      options.doAsUserId = options.doAsUserId || themeDisplay.getDoAsUserIdEncoded();
97      options.plid = options.plid || themeDisplay.getPlid();
98      options.portlet = portlet;
99      options.portletId = portlet.portletId;
100      return options;
101    },
102    _staticPortlets: {},
103    destroyComponents: function destroyComponents(portletId) {
104      Liferay.destroyComponents(function (_component, componentConfig) {
105        return portletId === componentConfig.portletId;
106      });
107    },
108    isStatic: function isStatic(portletId) {
109      var instance = this;
110      var id = Util.getPortletId(portletId.id || portletId);
111      return id in instance._staticPortlets;
112    },
113    list: [],
114    readyCounter: 0,
115    refreshLayout: function refreshLayout(_portletBoundary) {},
116    register: function register(portletId) {
117      var instance = this;
118
119      if (instance.list.indexOf(portletId) < 0) {
120        instance.list.push(portletId);
121      }
122    }
123  });
124
125  Liferay.provide(Portlet, 'add', function (options) {
126    var instance = this;
127    Liferay.fire('initLayout');
128    var doAsUserId = options.doAsUserId || themeDisplay.getDoAsUserIdEncoded();
129    var plid = options.plid || themeDisplay.getPlid();
130    var portletData = options.portletData;
131    var portletId = options.portletId;
132    var portletItemId = options.portletItemId;
133    var placeHolder = options.placeHolder;
134
135    if (!placeHolder) {
136      placeHolder = A.Node.create('<div class="loading-animation" />');
137    } else {
138      placeHolder = A.one(placeHolder);
139    }
140
141    var beforePortletLoaded = options.beforePortletLoaded;
142    var onCompleteFn = options.onComplete;
143
144    var onComplete = function onComplete(portlet, portletId) {
145      if (onCompleteFn) {
146        onCompleteFn(portlet, portletId);
147      }
148
149      instance.list.push(portlet.portletId);
150
151      if (portlet) {
152        portlet.attr('data-qa-id', 'app-loaded');
153      }
154
155      Liferay.fire('addPortlet', {
156        portlet: portlet
157      });
158    };
159
160    var container = null;
161
162    if (Liferay.Layout && Liferay.Layout.INITIALIZED) {
163      container = Liferay.Layout.getActiveDropContainer();
164    }
165
166    if (!container) {
167      return;
168    }
169
170    var currentColumnId = Util.getColumnId(container.attr('id'));
171    var portletPosition = 0;
172
173    if (options.placeHolder) {
174      var column = placeHolder.get('parentNode');
175
176      if (!column) {
177        return;
178      }
179
180      placeHolder.addClass('portlet-boundary');
181      var columnPortlets = column.all('.portlet-boundary');
182      var nestedPortlets = column.all('.portlet-nested-portlets');
183      portletPosition = columnPortlets.indexOf(placeHolder);
184      var nestedPortletOffset = 0;
185      nestedPortlets.some(function (nestedPortlet) {
186        var nestedPortletIndex = columnPortlets.indexOf(nestedPortlet);
187
188        if (nestedPortletIndex !== -1 && nestedPortletIndex < portletPosition) {
189          nestedPortletOffset += nestedPortlet.all('.portlet-boundary').size();
190        } else if (nestedPortletIndex >= portletPosition) {
191          return true;
192        }
193      });
194      portletPosition -= nestedPortletOffset;
195      currentColumnId = Util.getColumnId(column.attr('id'));
196    }
197
198    var url = themeDisplay.getPathMain() + '/portal/update_layout';
199    var data = {
200      cmd: 'add',
201      dataType: 'JSON',
202      doAsUserId: doAsUserId,
203      p_auth: Liferay.authToken,
204      p_l_id: plid,
205      p_p_col_id: currentColumnId,
206      p_p_col_pos: portletPosition,
207      p_p_i_id: portletItemId,
208      p_p_id: portletId,
209      p_p_isolated: true,
210      p_v_l_s_g_id: themeDisplay.getSiteGroupId(),
211      portletData: portletData
212    };
213    var firstPortlet = container.one('.portlet-boundary');
214    var hasStaticPortlet = firstPortlet && firstPortlet.isStatic;
215
216    if (!options.placeHolder && !options.plid) {
217      if (!hasStaticPortlet) {
218        container.prepend(placeHolder);
219      } else {
220        firstPortlet.placeAfter(placeHolder);
221      }
222    }
223
224    data.currentURL = Liferay.currentURL;
225    instance.addHTML({
226      beforePortletLoaded: beforePortletLoaded,
227      data: data,
228      onComplete: onComplete,
229      placeHolder: placeHolder,
230      url: url
231    });
232  }, ['aui-base']);
233  Liferay.provide(Portlet, 'addHTML', function (options) {
234    var instance = this;
235    var portletBoundary = null;
236    var beforePortletLoaded = options.beforePortletLoaded;
237    var data = options.data;
238    var dataType = 'HTML';
239    var onComplete = options.onComplete;
240    var placeHolder = options.placeHolder;
241    var url = options.url;
242
243    if (data && Lang.isString(data.dataType)) {
244      dataType = data.dataType;
245    }
246
247    dataType = dataType.toUpperCase();
248
249    var addPortletReturn = function addPortletReturn(html) {
250      var container = placeHolder.get('parentNode');
251      var portletBound = A.Node.create('<div></div>');
252      portletBound.plug(A.Plugin.ParseContent);
253      portletBound.setContent(html);
254      portletBound = portletBound.one('> *');
255      var portletId;
256
257      if (portletBound) {
258        var id = portletBound.attr('id');
259        portletId = Util.getPortletId(id);
260        portletBound.portletId = portletId;
261        placeHolder.hide();
262        placeHolder.placeAfter(portletBound);
263        placeHolder.remove();
264        instance.refreshLayout(portletBound);
265
266        if (window.location.hash) {
267          window.location.href = window.location.hash;
268        }
269
270        portletBoundary = portletBound;
271        var Layout = Liferay.Layout;
272
273        if (Layout && Layout.INITIALIZED) {
274          Layout.updateCurrentPortletInfo(portletBoundary);
275
276          if (container) {
277            Layout.syncEmptyColumnClassUI(container);
278          }
279
280          Layout.syncDraggableClassUI();
281          Layout.updatePortletDropZones(portletBoundary);
282        }
283
284        if (onComplete) {
285          onComplete(portletBoundary, portletId);
286        }
287      } else {
288        placeHolder.remove();
289      }
290
291      return portletId;
292    };
293
294    if (beforePortletLoaded) {
295      beforePortletLoaded(placeHolder);
296    }
297
298    Liferay.Util.fetch(url, {
299      body: Liferay.Util.objectToURLSearchParams(data),
300      method: 'POST'
301    }).then(function (response) {
302      if (dataType === 'JSON') {
303        return response.json();
304      } else {
305        return response.text();
306      }
307    }).then(function (response) {
308      if (dataType === 'HTML') {
309        addPortletReturn(response);
310      } else if (response.refresh) {
311        addPortletReturn(response.portletHTML);
312      } else {
313        Portlet._loadMarkupHeadElements(response);
314
315        Portlet._loadPortletFiles(response, addPortletReturn);
316      }
317
318      if (!data || !data.preventNotification) {
319        Liferay.fire('updatedLayout');
320      }
321    })["catch"](function (error) {
322      var message = typeof error === 'string' ? error : 'Il\x20y\x20a\x20eu\x20une\x20erreur\x20inattendue\x2e\x20Veuillez\x20rafraîchir\x20la\x20page\x20actuelle\x2e';
323      Liferay.Util.openToast({
324        message: message,
325        type: 'danger'
326      });
327    });
328  }, ['aui-parse-content']);
329  Liferay.provide(Portlet, 'close', function (portlet, skipConfirm, options) {
330    var instance = this;
331    portlet = A.one(portlet);
332
333    if (portlet && (skipConfirm || confirm('Êtes-vous\x20sûr\x20de\x20vouloir\x20supprimer\x20ce\x20composant\x20\x3f'))) {
334      var portletId = portlet.portletId;
335      var portletIndex = instance.list.indexOf(portletId);
336
337      if (portletIndex >= 0) {
338        instance.list.splice(portletIndex, 1);
339      }
340
341      options = Portlet._mergeOptions(portlet, options);
342      Portlet.destroyComponents(portletId);
343      Liferay.fire('destroyPortlet', options);
344      Liferay.fire('closePortlet', options);
345    } else {
346      A.config.win.focus();
347    }
348  }, []);
349  Liferay.provide(Portlet, 'destroy', function (portlet, options) {
350    portlet = A.one(portlet);
351
352    if (portlet) {
353      var portletId = portlet.portletId || Util.getPortletId(portlet.attr('id'));
354      Portlet.destroyComponents(portletId);
355      Liferay.fire('destroyPortlet', Portlet._mergeOptions(portlet, options));
356    }
357  }, ['aui-node-base']);
358  Liferay.provide(Portlet, 'onLoad', function (options) {
359    var instance = this;
360    var canEditTitle = options.canEditTitle;
361    var columnPos = options.columnPos;
362    var isStatic = options.isStatic == 'no' ? null : options.isStatic;
363    var namespacedId = options.namespacedId;
364    var portletId = options.portletId;
365    var refreshURL = options.refreshURL;
366    var refreshURLData = options.refreshURLData;
367
368    if (isStatic) {
369      instance.registerStatic(portletId);
370    }
371
372    var portlet = A.one('#' + namespacedId);
373
374    if (portlet && !portlet.portletProcessed) {
375      portlet.portletProcessed = true;
376      portlet.portletId = portletId;
377      portlet.columnPos = columnPos;
378      portlet.isStatic = isStatic;
379      portlet.refreshURL = refreshURL;
380      portlet.refreshURLData = refreshURLData; // Functions to run on portlet load
381
382      if (canEditTitle) {
383        // https://github.com/yui/yui3/issues/1808
384        var events = 'focus';
385
386        if (!A.UA.touchEnabled) {
387          events = ['focus', 'mousemove'];
388        }
389
390        var handle = portlet.on(events, function () {
391          Util.portletTitleEdit({
392            doAsUserId: themeDisplay.getDoAsUserIdEncoded(),
393            obj: portlet,
394            plid: themeDisplay.getPlid(),
395            portletId: portletId
396          });
397          handle.detach();
398        });
399      }
400    }
401
402    Liferay.fire('portletReady', {
403      portlet: portlet,
404      portletId: portletId
405    });
406    instance.readyCounter++;
407
408    if (instance.readyCounter === instance.list.length) {
409      Liferay.fire('allPortletsReady', {
410        portletId: portletId
411      });
412    }
413  }, ['aui-base', 'aui-timer', 'event-move']);
414  Liferay.provide(Portlet, 'refresh', function (portlet, data) {
415    var instance = this;
416    portlet = A.one(portlet);
417
418    if (portlet) {
419      data = data || portlet.refreshURLData || {};
420
421      if (!Object.prototype.hasOwnProperty.call(data, 'portletAjaxable')) {
422        data.portletAjaxable = true;
423      }
424
425      var id = portlet.attr('portlet');
426      var url = portlet.refreshURL;
427      var placeHolder = A.Node.create('<div class="loading-animation" id="p_p_id' + id + '" />');
428
429      if (data.portletAjaxable && url) {
430        portlet.placeBefore(placeHolder);
431        portlet.remove(true);
432        Portlet.destroyComponents(portlet.portletId);
433        var params = {};
434        var urlPieces = url.split('?');
435
436        if (urlPieces.length > 1) {
437          params = A.QueryString.parse(urlPieces[1]);
438          delete params.dataType;
439          url = urlPieces[0];
440        }
441
442        instance.addHTML({
443          data: A.mix(params, data, true),
444          onComplete: function onComplete(portlet, portletId) {
445            portlet.refreshURL = url;
446
447            if (portlet) {
448              portlet.attr('data-qa-id', 'app-refreshed');
449            }
450
451            Liferay.fire(portlet.portletId + ':portletRefreshed', {
452              portlet: portlet,
453              portletId: portletId
454            });
455          },
456          placeHolder: placeHolder,
457          url: url
458        });
459      } else if (!portlet.getData('pendingRefresh')) {
460        portlet.setData('pendingRefresh', true);
461        var nonAjaxableContentMessage = Lang.sub(TPL_NOT_AJAXABLE, ['Ce\x20changement\x20sera\x20affiché\x20uniquement\x20après\x20que\x20vous\x20régénériez\x20la\x20page\x20courante\x2e']);
462        var portletBody = portlet.one('.portlet-body');
463        portletBody.placeBefore(nonAjaxableContentMessage);
464        portletBody.hide();
465      }
466    }
467  }, ['aui-base', 'querystring-parse']);
468  Liferay.provide(Portlet, 'registerStatic', function (portletId) {
469    var instance = this;
470    var Node = A.Node;
471
472    if (Node && portletId instanceof Node) {
473      portletId = portletId.attr('id');
474    } else if (portletId.id) {
475      portletId = portletId.id;
476    }
477
478    var id = Util.getPortletId(portletId);
479    instance._staticPortlets[id] = true;
480  }, ['aui-base']);
481  Liferay.publish('closePortlet', {
482    defaultFn: Portlet._defCloseFn
483  });
484  Liferay.publish('allPortletsReady', {
485    fireOnce: true
486  }); // Backwards compatability
487
488  Portlet.ready = function (fn) {
489    Liferay.on('portletReady', function (event) {
490      fn(event.portletId, event.portlet);
491    });
492  };
493
494  Liferay.Portlet = Portlet;
495})(AUI(), Liferay);
496//# sourceMappingURL=portlet.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.