//@include lib_Class.js /** * This mixin class contains convenience methods for working with element Services like * SordProvider. You can use these functions in your own building blocks * to be able to integrate a generally valid search. * * An example implementation can be found in {@see sol.common.ix.services.StandardPreconditions} * * @author MHe (ELO Digital Office GmbH) * * @requires sol.common.IxUtils * @requires sol.common.ObjectUtils * @requires sol.common.Template */ sol.define("sol.common.mixins.ElementService", { mixin: true, initialize: function (config) {}, sanitizeElementServiceConfig: function (opt) { var me = this, name = opt.name, isObj, validStr, args = opt.args || {}; isObj = function(obj) { return sol.common.ObjectUtils.type(obj, "object"); }; validStr = function(str) { return sol.common.ObjectUtils.type(str, "string") && String(str) && str.trim(); }; if (!((name = validStr(name)) && name.indexOf("RF_") === 0)) { throw "`elementService.name` must be a string starting with 'RF_' (a valid registered service)`: " + name; } if (args && !isObj(args)) { throw "`elementService.args` must be an object if it is defined. current type: " + typeof args; } me.logger.info("elementService config ok"); return { name: name, args: args }; }, executeElementService: function (cfg, templateData, options) { var elements, args = cfg.args || {}, opt = options || {}; opt.template = opt.template || false; if (opt.template) { if (!sol.common.TemplateUtils) { throw Error("templating can only be used with IX scripts which include `lib_sol.common.Template`"); } args = sol.common.TemplateUtils.render(args, templateData || {}); } elements = sol.common.IxUtils.execute(cfg.name, args); elements = elements.sords || elements.elements; if (!Array.isArray(elements)) { throw "The RF defined as `elementService` must return an object containing a property `sords` or `elements` which contains an array (of objects)"; } return elements; } });