From 8f166a1b2a74126dab0243ec2444a749e9c1f554 Mon Sep 17 00:00:00 2001 From: Maik Derstappen Date: Sat, 11 Jul 2026 19:42:16 +0000 Subject: [PATCH] tech(pat-querystring): lazify pattern, split registration from implementation pat-querystring contributed ~33KB src to the eager patterns chunk on every page, though the widget only appears on Collection edit forms and the querystring criteria UI. It also statically imported the contentbrowser pattern, dragging an eager edge into pat-contentbrowser. Split it into a thin registration module and querystring--implementation.js (holding the widget and the contentbrowser import). The implementation is grafted onto the single pattern instance in init(), so external consumers that reach into instance state (pat-structure's textfilter reads this.queryString.$sortOn/$sortOrder) keep working. Public options and emitted markup are unchanged. The implementation and its contentbrowser edge now load only on pages with a .pat-querystring element. --- .../querystring--implementation.js | 930 +++++++++++++++++ src/pat/querystring/querystring.js | 934 +----------------- 2 files changed, 943 insertions(+), 921 deletions(-) create mode 100644 src/pat/querystring/querystring--implementation.js diff --git a/src/pat/querystring/querystring--implementation.js b/src/pat/querystring/querystring--implementation.js new file mode 100644 index 000000000..94279c4ff --- /dev/null +++ b/src/pat/querystring/querystring--implementation.js @@ -0,0 +1,930 @@ +import $ from "jquery"; +import _ from "underscore"; +import _t from "../../core/i18n-wrapper"; +import utils from "../../core/utils"; +import { Pattern as ContentbrowserPattern } from "../contentbrowser/contentbrowser"; + + +var Criteria = function () { + this.init.apply(this, arguments); +}; +Criteria.prototype = { + defaults: { + indexWidth: "20em", + remove: "", + classBetweenDtName: "querystring-criteria-betweendt", + classWrapperName: "querystring-criteria-wrapper", + classIndexName: "querystring-criteria-index", + classOperatorName: "querystring-criteria-operator", + classValueName: "querystring-criteria-value", + classRemoveName: "querystring-criteria-remove", + classResultsName: "querystring-criteria-results", + classClearName: "querystring-criteria-clear", + classDepthName: "querystring-criteria-depth", + }, + init: function ( + $el, + app, + options, + indexes, + index, + operator, + value, + baseUrl, + patternDateOptions, + patternAjaxSelectOptions, + patternRelateditemsOptions + ) { + var self = this; + self.app = app; + + self.options = { + ...self.defaults, + ...options, + }; + self.indexes = indexes; + self.indexGroups = {}; + self.baseUrl = baseUrl; + self.advanced = false; + self.initial = value; + // create wrapper criteria and append it to DOM + self.$wrapper = $("
") + .addClass(self.options.classWrapperName) + .appendTo($el); + + // Sub widgets options + self.patternDateOptions = patternDateOptions || {}; + self.patternAjaxSelectOptions = patternAjaxSelectOptions || {}; + self.patternRelateditemsOptions = patternRelateditemsOptions || {}; + // Defaults + self.patternAjaxSelectOptions = { + width: "250px", + ...self.patternAjaxSelectOptions, + }; + self.patternRelateditemsOptions = { + vocabularyUrl: + self.baseUrl + + "@@getVocabulary?name=plone.app.vocabularies.Catalog&field=relatedItems", + width: "20rem", + ...self.patternRelateditemsOptions, + }; + // Force set + self.patternRelateditemsOptions["maximumSelectionSize"] = 1; + + // Remove button + self.$remove = $("
" + self.options.remove + "
") + .addClass(self.options.classRemoveName) + .appendTo(self.$wrapper) + .on("click", function (e) { + e.stopPropagation(); + self.remove(); + }); + + // Index selection + self.$index = $("").attr( + "placeholder", + _t("Select criteria") + ); + + // list of indexes + for (const value in self.indexes) { + let options = self.indexes[value]; + if (options.enabled) { + if (!self.indexGroups[options.group]) { + self.indexGroups[options.group] = $("") + .attr("label", options.group) + .appendTo(self.$index); + } + self.indexGroups[options.group].append( + $("