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( + $("