(function() { var __slice = [].slice; (function(root, factory) { if (typeof define === 'function' && define.amd) { return define(['_'], factory(root)); } else if (typeof module !== "undefined" && module !== null ? module.exports : void 0) { return module.exports = factory(); } })(this, function() { return { arrangeModelFilter: function(groups) { var data, index, item, list, others, sql, _i, _j, _len, _len1; data = []; others = -1; for (index = _i = 0, _len = groups.length; _i < _len; index = ++_i) { item = groups[index]; if (item.rule === 'else') { others = index; } item.sql = this.filterRuleToSql(item.rule); data.push(item); } if (others < 0) { return data; } list = []; for (index = _j = 0, _len1 = data.length; _j < _len1; index = ++_j) { item = data[index]; if (index !== others) { list.push(item.sql); } } sql = list.join(' OR '); data[others].sql = " NOT (" + sql + ")"; return data; }, filterRuleToSql: function(text) { var index, list, rule, rules, sql, _i, _len; rules = this.filterRuleMatcher(text); list = []; for (index = _i = 0, _len = rules.length; _i < _len; index = ++_i) { rule = rules[index]; sql = (function() { switch (rule.method) { case 'start': return "'" + rule.value + "%'"; case 'end': return "'%" + rule.value + "'"; case 'contain': return "'%" + rule.value + "%'"; case 'mid': return "'" + rule.placeholder + rule.value + "%'"; } })(); sql = "f0 LIKE " + sql; if (index > 0) { sql = rule.operator + " " + sql; } list.push(sql); } return list.join(' '); }, filterRuleMatcher: function(text) { var pattern, rules; rules = []; if (!text) { return rules; } if (text === 'else') { rules.push({ value: 'else', operator: ' and ', method: '' }); return rules; } pattern = /((and|or)\s)?(start|end|contain|mid)\((.+?)\)/g; text.replace(pattern, function() { var args, count, index, list, params, rule, _i; args = 1 <= arguments.length ? __slice.call(arguments, 0) : []; rule = { operator: args[2], method: args[3], value: args[4] }; rule.operator = rule.operator || ' and '; if (rule.method === 'mid') { params = rule.value.split(','); count = parseInt(params[0]); if (isNaN(count)) { count = 0; } count = Math.max(0, count - 2); list = []; for (index = _i = 0; 0 <= count ? _i <= count : _i >= count; index = 0 <= count ? ++_i : --_i) { list.push('_'); } rule.placeholder = list.join(''); rule.value = params[1]; } return rules.push(rule); }); return rules; }, /* config: */ modelFieldFilterIndex: function(config, env, language) { var index, result, rule, _fn, _i, _len, _ref; if (language == null) { language = 'en'; } result = []; if (typeof config === 'string') { config = JSON.parse(config); } if (!(config != null ? config.target : void 0)) { return result; } _ref = config.target; _fn = function() { var subtitle, title, _ref1, _ref2; title = (_ref1 = config.title[language]) != null ? _ref1[index] : void 0; subtitle = (_ref2 = config.subtitle[language]) != null ? _ref2[index] : void 0; if (rule.indexOf(env) >= 0 && (title || subtitle)) { return result.push(index); } }; for (index = _i = 0, _len = _ref.length; _i < _len; index = ++_i) { rule = _ref[index]; _fn(); } return result; }, modelFieldFilter: function(fields, indexes) { var index, _i, _len, _results; if (typeof fields === 'string') { fields = JSON.parse(fields); } _results = []; for (_i = 0, _len = indexes.length; _i < _len; _i++) { index = indexes[_i]; _results.push(fields[index]); } return _results; }, categoryLink: function(node) { var _ref; if (((_ref = node.children) != null ? _ref.length : void 0) > 0 || node.child_count > 0 || node.children > 0) { return "/category/" + node.rank + "-" + node.id + ".html"; } else { return "/category/" + node.id + "/product.html"; } }, analyseUnitIndex: function(items) { var current, index, last, _results; if (items.length === 0) { return; } index = 0; last = {}; _results = []; while (current = items[index++]) { current.unit = current.unit || 1; if (current.unit !== last.unit) { current.specialUnit = true; } _results.push(last = current); } return _results; } }; }); }).call(this);