{"version":3,"file":"shared/chunks/1545.9f2846da301b4b97aa5f.js","mappings":"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","sources":["webpack://dsposal.web/./assets-es6/common/js/utils/JsonQuery.js","webpack://dsposal.web/./assets-es6/common/js/utils/filter.js"],"sourcesContent":["var JsonQuery = function (records, opts) {\r\n return new _JsonQuery(records, opts || {});\r\n};\r\n\r\nwindow.JsonQuery = JsonQuery;\r\n\r\nexport default JsonQuery;\r\n\r\nJsonQuery.VERSION = \"0.0.2\";\r\n\r\nJsonQuery.Config = {\r\n id: \"id\",\r\n latitude: \"latitude\",\r\n longitude: \"longitude\",\r\n date_regx: /^\\d{4}-\\d{2}-\\d{2}$/\r\n};\r\n\r\nJsonQuery.blankClone = function (jq, records) {\r\n return new _JsonQuery(records, {\r\n getterFns: jq.getterFns,\r\n schema: jq.schema,\r\n id: jq.id,\r\n latitude: jq.latitude,\r\n longitude: jq.longitude\r\n });\r\n};\r\n\r\nvar Config = JsonQuery.Config;\r\n\r\nvar each = function (objs, callback, context) {\r\n if (objs.length === +objs.length) {\r\n for (var i = 0, l = objs.length; i < l; i++) {\r\n callback.call(context, objs[i], i);\r\n }\r\n } else {\r\n for (var key in objs) {\r\n if (hasOwnProperty.call(objs, key)) {\r\n callback.call(context, objs[key], key);\r\n }\r\n }\r\n }\r\n};\r\n\r\nvar eachWithBreak = function (objs, callback, context) {\r\n for (var i = 0, l = objs.length; i < l; i++) {\r\n if (callback.call(context, objs[i], i) === false) {\r\n return;\r\n }\r\n }\r\n};\r\n\r\n\r\nvar _JsonQuery = function (records, opts) {\r\n this.records = records || [];\r\n this.getterFns = opts.getterFns || {};\r\n this.lat = opts.latitude || Config.latitude;\r\n this.lng = opts.longitude || Config.longitude;\r\n this.id = opts.id;\r\n\r\n if (opts.schema) {\r\n this.schema = opts.schema;\r\n }\r\n\r\n if (this.records.length && !this.schema) {\r\n initSchema(this, records[0], opts.schema);\r\n }\r\n};\r\n\r\nvar JQ = _JsonQuery.prototype;\r\n\r\nvar initSchema = function (context, record, hasSchema) {\r\n context.schema = {};\r\n\r\n if (!context.id) {\r\n context.id = record._id ? \"_id\" : Config.id;\r\n }\r\n\r\n if (!hasSchema) {\r\n buildSchema.call(context, record);\r\n buildPropGetters.call(context, record);\r\n }\r\n};\r\n\r\nvar getDataType = function (val) {\r\n if (val == null) {\r\n return \"String\";\r\n }\r\n\r\n /*\r\n * @info Fix for IE 10 & 11\r\n * @bug Invalid calling object\r\n */\r\n var type = Object.prototype.toString.call(val).slice(8, -1);\r\n\r\n if (type == \"String\" && val.match(Config.date_regx)) {\r\n return \"Date\";\r\n }\r\n\r\n return type;\r\n};\r\n\r\n// var parseValue = function (type, value) {\r\n// if (!value && value != 0) {\r\n// return value;\r\n// }\r\n\r\n// if (type == \"String\") {\r\n// return String(value);\r\n// } else if (type == \"Number\") {\r\n// return Number(value);\r\n// } else if (type == \"Boolean\") {\r\n// return (value == \"true\" || value == true || value == \"1\") ? true : false;\r\n// } else if (type == \"Date\") {\r\n// return new Date(value);\r\n// } else {\r\n// return value;\r\n// }\r\n// };\r\n\r\nvar buildSchema = function (obj, parentField) {\r\n var field, dataType, fullPath, fieldValue;\r\n\r\n for (field in obj) {\r\n fieldValue = obj[field];\r\n dataType = getDataType(fieldValue);\r\n\r\n fullPath = parentField ? (parentField + \".\" + field) : field;\r\n this.schema[fullPath] = dataType;\r\n\r\n if (dataType == \"Object\") {\r\n buildSchema.call(this, fieldValue, fullPath);\r\n } else if (dataType == \"Array\") {\r\n\r\n if ([\"Object\", \"Array\"].indexOf(getDataType(fieldValue[0])) > -1) {\r\n buildSchema.call(this, obj[field][0], fullPath);\r\n } else {\r\n this.schema[fullPath] = getDataType(fieldValue[0]);\r\n }\r\n }\r\n }\r\n};\r\n\r\n// var parseDate = function (dates) {\r\n// if (dates.constructor.name == \"Array\") {\r\n// return dates.map(function (d) { return (d ? new Date(d) : null); });\r\n// }\r\n// return (dates ? new Date(dates) : null);\r\n// };\r\n\r\nvar buildPropGetters = function (record) {\r\n var selector, type, val;\r\n\r\n for (selector in this.schema) {\r\n type = this.schema[selector];\r\n\r\n try {\r\n if (!this.getterFns[selector]) {\r\n this.getterFns[selector] = buildGetPropFn.call(this, selector, type);\r\n }\r\n\r\n //Remap if it is array\r\n val = this.getterFns[selector](record);\r\n if (getDataType(val) == \"Array\") {\r\n this.schema[selector] = \"Array\";\r\n }\r\n } catch (err) {\r\n console.log(\"Error while generating getter function for selector : \" + selector + \" NOTE: Define manually\");\r\n }\r\n }\r\n};\r\n\r\nvar countArrHierarchy = function (schema, nestedPath) {\r\n var lastArr = 0,\r\n arrCount = 0,\r\n path,\r\n pathLength = nestedPath.length - 1;\r\n\r\n for (var i = nestedPath.length - 1; i >= 0; i--) {\r\n path = nestedPath.slice(0, i + 1).join(\".\");\r\n\r\n if (schema[path] == \"Array\" && i < pathLength) {\r\n lastArr = i;\r\n arrCount = arrCount + 1;\r\n }\r\n }\r\n return (arrCount > 1 ? (lastArr + 1) : -1);\r\n};\r\n\r\nvar buildGetPropFn = function (field/*, type*/) {\r\n var accessPath = \"\",\r\n nestedPath = field.split(\".\"),\r\n path,\r\n lastArr = countArrHierarchy(this.schema, nestedPath),\r\n prefix,\r\n accessFnBody;\r\n\r\n for (var i = nestedPath.length - 1; i >= 0; i--) {\r\n path = nestedPath.slice(0, i + 1).join(\".\");\r\n prefix = \"['\" + nestedPath[i] + \"']\";\r\n\r\n if (this.schema[path] == \"Array\") {\r\n if (lastArr == i) {\r\n accessPath = prefix + (accessPath.length ? \".every(function(r\" + i + \"){ objs.push(r\" + i + accessPath + \")})\" : \"\");\r\n } else {\r\n accessPath = prefix + (accessPath.length ? \".map(function(r\" + i + \"){ return r\" + i + accessPath + \"})\" : \"\");\r\n }\r\n } else {\r\n accessPath = prefix + accessPath;\r\n }\r\n }\r\n\r\n if (lastArr > -1) {\r\n accessFnBody = \"var objs = []; obj\" + accessPath + \";\" + (this.schema[\"path\"] == \"Date\" ? \"return parseDate(objs)\" : \"return objs;\");\r\n } else {\r\n accessFnBody = \"return \" + (this.schema[\"path\"] == \"Date\" ? \"parseDate(obj\" + accessPath + \");\" : \"obj\" + accessPath + \";\");\r\n }\r\n\r\n return new Function(\"obj\", accessFnBody);\r\n};\r\n\r\nJQ.operators = {\r\n eq: function (v1, v2) { return v1 == v2; },\r\n ne: function (v1, v2) { return v1 != v2; },\r\n lt: function (v1, v2) { return v1 < v2; },\r\n lte: function (v1, v2) { return v1 <= v2; },\r\n gt: function (v1, v2) { return v1 > v2; },\r\n gte: function (v1, v2) { return v1 >= v2; },\r\n in: function (v1, v2) { return v2.indexOf(v1) > -1; },\r\n ni: function (v1, v2) { return v2.indexOf(v1) == -1; },\r\n li: function (v, regx) { return regx.test(v); },\r\n bt: function (v1, v2) { return (v1 >= v2[0] && v1 <= v2[1]); }\r\n};\r\n\r\nJQ.addOperator = function (name, fn) {\r\n this.operators[name] = fn;\r\n};\r\n\r\n// rVal = Record Value\r\n// cVal = Condition Value\r\nvar arrayMatcher = function (rVal, cVal, cFn) {\r\n var i = 0, l = rVal.length;\r\n\r\n for (i; i < l; i++) {\r\n if (cFn(rVal[i], cVal)) return true;\r\n }\r\n};\r\n\r\nJQ.addCondition = function (name, func) {\r\n this.operators[name] = func;\r\n};\r\n\r\nJQ.getCriteria = function (criteria) {\r\n var fieldCondition = criteria.split(\".$\");\r\n\r\n return {\r\n field: fieldCondition[0],\r\n operator: fieldCondition[1] || \"eq\"\r\n };\r\n};\r\n\r\nJQ.setGetterFn = function (field, fn) {\r\n this.getterFns[field] = fn;\r\n};\r\n\r\nJQ.addRecords = function (records) {\r\n if (!records || !records.length) {\r\n return false;\r\n }\r\n\r\n if (getDataType(records) == \"Array\") {\r\n this.records = this.records.concat(records);\r\n } else {\r\n this.records.push(records);\r\n }\r\n\r\n if (!this.schema) {\r\n initSchema(this, records[0]);\r\n }\r\n\r\n return true;\r\n};\r\n\r\nJQ._findAll = function (records, qField, cVal, cOpt) {\r\n var result = [],\r\n cFn,\r\n rVal,\r\n qFn = this.getterFns[qField], arrayCFn;\r\n\r\n if (cOpt == \"li\" && typeof cVal == \"string\") {\r\n cVal = new RegExp(cVal);\r\n }\r\n\r\n cFn = this.operators[cOpt];\r\n\r\n if (this.schema[qField] == \"Array\") {\r\n arrayCFn = cFn;\r\n cFn = arrayMatcher;\r\n }\r\n\r\n each(records, function (v) {\r\n rVal = qFn(v);\r\n\r\n if (cFn(rVal, cVal, arrayCFn)) {\r\n result.push(v);\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n\r\nJQ.find = function (field, value) {\r\n var result, qFn;\r\n\r\n if (!value) {\r\n value = field;\r\n field = this.id;\r\n }\r\n\r\n qFn = this.getterFns[field];\r\n\r\n eachWithBreak(this.records, function (r) {\r\n if (qFn(r) == value) {\r\n result = r;\r\n return false;\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n\r\neach([\"where\", \"or\", \"groupBy\", \"select\", \"pluck\", \"limit\", \"offset\", \"order\", \"uniq\", \"near\"], function (c) {\r\n JQ[c] = function (/*query*/) {\r\n var q = new Query(this, this.records);\r\n q[c].apply(q, arguments);\r\n return q;\r\n };\r\n});\r\n\r\neach([\"update_all\", \"destroy_all\"], function (c) {\r\n JQ[c] = function (/*query*/) {\r\n var q = new Query(this, this.records);\r\n return q[c].apply(q, arguments);\r\n };\r\n});\r\n\r\neach([\"count\", \"first\", \"last\", \"all\"], function (c) {\r\n Object.defineProperty(JQ, c, {\r\n get: function () {\r\n return (new Query(this, this.records))[c];\r\n }\r\n });\r\n});\r\n\r\nvar compareObj = function (obj1, obj2, fields) {\r\n for (var i = 0, l = fields.length; i < l; i++) {\r\n if (this.getterFns[fields[i]](obj1) !== this.getterFns[fields[i]](obj2)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nvar execWhere = function (query, records) {\r\n var q, criteria, result;\r\n\r\n for (q in query) {\r\n criteria = this.jQ.getCriteria(q);\r\n result = this.jQ._findAll(result || records, criteria.field, query[q], criteria.operator);\r\n }\r\n\r\n return result;\r\n};\r\n\r\nvar execGroupBy = function (field, records) {\r\n var fn = this.jQ.getterFns[field], v, result = {};//, i = 0, l = records.length;\r\n\r\n each(records, function (r) {\r\n v = fn(r);\r\n (result[v] || (result[v] = [])).push(r);\r\n });\r\n\r\n return result;\r\n};\r\n\r\nvar execOrder = function (orders, records) {\r\n var fn,\r\n direction,\r\n _records = records.slice(0);\r\n\r\n for (var i = 0, l = orders.length; i < l; i++) {\r\n fn = this.jQ.getterFns[orders[i].field],\r\n direction = orders[i].direction == \"asc\" ? 1 : -1;\r\n\r\n _records.sort(function (r1, r2) {\r\n var a = fn(r1), b = fn(r2);\r\n\r\n return (a < b ? -1 : a > b ? 1 : 0) * direction;\r\n });\r\n }\r\n\r\n return _records;\r\n};\r\n\r\nvar execSelect = function (fields, records) {\r\n var self = this, result = [], getFn;\r\n\r\n each(fields, function (f) {\r\n getFn = self.jQ.getterFns[f];\r\n\r\n each(records, function (r, i) {\r\n (result[i] || (result[i] = {}))[f] = getFn(r);\r\n });\r\n });\r\n\r\n return result;\r\n};\r\n\r\nvar execPluck = function (field, records) {\r\n var getFn = this.jQ.getterFns[field], result = [];\r\n\r\n each(records, function (r) {\r\n result.push(getFn(r));\r\n });\r\n\r\n return result;\r\n};\r\n\r\nvar execUniq = function (fields, records) {\r\n var result = [], self = this;\r\n\r\n if (getDataType(records[0]) != \"Object\") {\r\n each(records, function (r) {\r\n if (result.indexOf(r) == -1) {\r\n result.push(r);\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n result.push(records[0]);\r\n\r\n each(records, function (r) {\r\n var present = false;\r\n\r\n for (var i = 0, l = result.length; i < l; i++) {\r\n if (compareObj.call(self.jQ, result[i], r, fields)) {\r\n present = true;\r\n }\r\n }\r\n\r\n if (!present) {\r\n result.push(r);\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n\r\n\r\n\r\nvar Query = function (jQ, records) {\r\n this.jQ = jQ;\r\n this.records = records;\r\n this.criteria = {};\r\n return this;\r\n};\r\n\r\nvar Q = Query.prototype;\r\n\r\nQ.each = function (callback, context) {\r\n each(this.exec() || [], callback, context);\r\n};\r\n\r\nQ.exec = Q.toArray = function (callback) {\r\n var result;//, c;\r\n\r\n if (this.criteria[\"all\"]) {\r\n result = this.records;\r\n }\r\n\r\n if (this.criteria[\"where\"]) {\r\n result = execWhere.call(this, this.criteria[\"where\"], result || this.records);\r\n }\r\n\r\n if (this.criteria[\"or\"]) {\r\n result = result.concat(execWhere.call(this, this.criteria[\"or\"], this.records));\r\n result = execUniq.call(this, [this.jQ.id], result);\r\n }\r\n\r\n if (this.criteria[\"order\"]) {\r\n result = execOrder.call(this, this.criteria[\"order\"], result || this.records);\r\n }\r\n\r\n if (this.criteria[\"near\"]) {\r\n result = execNear.call(this, this.criteria[\"near\"], result || this.records);\r\n }\r\n\r\n if (this.criteria[\"uniq\"]) {\r\n result = execUniq.call(this, this.criteria[\"uniq\"], result || this.records);\r\n }\r\n\r\n if (this.criteria[\"select\"]) {\r\n result = execSelect.call(this, this.criteria[\"select\"], result || this.records);\r\n }\r\n\r\n if (this.criteria[\"pluck\"]) {\r\n result = execPluck.call(this, this.criteria[\"pluck\"], result || this.records);\r\n }\r\n\r\n if (this.criteria[\"limit\"]) {\r\n result = (result || this.records).slice(this.criteria[\"offset\"] || 0, (this.criteria[\"offset\"] || 0) + this.criteria[\"limit\"]);\r\n }\r\n\r\n if (this.criteria[\"group_by\"]) {\r\n result = execGroupBy.call(this, this.criteria[\"group_by\"], result || this.records);\r\n }\r\n\r\n if (!result) {\r\n result = this.records;\r\n }\r\n\r\n if (callback) {\r\n each(result, callback);\r\n }\r\n\r\n if (this.jQ.onResult) {\r\n this.jQ.onResult(result, this.criteria);\r\n }\r\n\r\n return result;\r\n};\r\n\r\nvar addToCriteria = function (type, query) {\r\n var c;\r\n\r\n if (!this.criteria[type]) {\r\n this.criteria[type] = {};\r\n }\r\n\r\n for (c in query) {\r\n this.criteria[type][c] = query[c];\r\n }\r\n\r\n return this;\r\n};\r\n\r\nQ.where = function (query) {\r\n return addToCriteria.call(this, \"where\", query);\r\n};\r\n\r\nQ.or = function (query) {\r\n return addToCriteria.call(this, \"or\", query);\r\n};\r\n\r\nQ.groupBy = function (field) {\r\n this.criteria[\"group_by\"] = field;\r\n return this;\r\n};\r\n\r\nQ.select = function () {\r\n this.criteria[\"select\"] = arguments;\r\n return this;\r\n};\r\n\r\nQ.pluck = function (field) {\r\n this.criteria[\"pluck\"] = field;\r\n return this;\r\n};\r\n\r\nQ.limit = function (l) {\r\n this.criteria[\"limit\"] = l;\r\n return this;\r\n};\r\n\r\nQ.offset = function (o) {\r\n this.criteria[\"offset\"] = o;\r\n return this;\r\n};\r\n\r\nQ.order = function (criteria) {\r\n var field;\r\n this.criteria[\"order\"] = this.criteria[\"order\"] || [];\r\n\r\n for (field in criteria) {\r\n this.criteria[\"order\"].push({ field: field, direction: criteria[field].toLowerCase() });\r\n }\r\n\r\n return this;\r\n};\r\n\r\nQ.uniq = function () {\r\n this.criteria[\"uniq\"] = (arguments.length > 0 ? arguments : true);\r\n return this;\r\n};\r\n\r\nObject.defineProperty(Q, \"count\", {\r\n get: function () {\r\n this.criteria[\"count\"] = true;\r\n var r = this.exec();\r\n\r\n if (getDataType(r) == \"Array\") {\r\n return this.exec().length;\r\n } else {\r\n return Object.keys(r).length;\r\n }\r\n }\r\n});\r\n\r\nObject.defineProperty(Q, \"all\", {\r\n get: function () {\r\n this.criteria[\"all\"] = true;\r\n return this.exec();\r\n }\r\n});\r\n\r\nObject.defineProperty(Q, \"first\", {\r\n get: function () {\r\n this.criteria[\"first\"] = true;\r\n return this.exec()[0];\r\n }\r\n});\r\n\r\nObject.defineProperty(Q, \"last\", {\r\n get: function () {\r\n this.criteria[\"last\"] = true;\r\n var r = this.exec();\r\n return r[r.length - 1];\r\n }\r\n});\r\n\r\n//Geocoding\r\nvar GEO = {\r\n redius: 6371,\r\n toRad: function (v) {\r\n return v * Math.PI / 180;\r\n }\r\n};\r\n\r\nvar calculateDistance = function (_lat1, _lat2, _lng1, _lng2) {\r\n var dLat = GEO.toRad(_lat2 - _lat1),\r\n dLon = GEO.toRad(_lng2 - _lng1),\r\n lat1 = GEO.toRad(_lat1),\r\n lat2 = GEO.toRad(_lat2);\r\n\r\n var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +\r\n Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);\r\n\r\n return (2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))) * GEO.redius;\r\n};\r\n\r\nvar execNear = function (opts, records) {\r\n var result = [],\r\n self = this,\r\n unit_c = opts.unit == \"mile\" ? 0.6214 : 1,\r\n latFn = self.jQ.getterFns[self.jQ.lat],\r\n lngFn = self.jQ.getterFns[self.jQ.lng];\r\n\r\n each(records, function (r) {\r\n r._distance = calculateDistance(latFn(r), opts.lat, lngFn(r), opts.lng) * unit_c;\r\n\r\n if (r._distance <= opts.distance) {\r\n result.push(r);\r\n }\r\n });\r\n\r\n result.sort(function (a, b) {\r\n return (a._distance < b._distance ? -1 : a._distance > b._distance ? 1 : 0);\r\n });\r\n\r\n return result;\r\n};\r\n\r\nQ.near = function (lat, lng, distance, unit) {\r\n this.criteria[\"near\"] = { lat: lat, lng: lng, distance: distance, unit: (unit || \"km\") };\r\n return this;\r\n};\r\n\r\n//Helpers\r\nQ.map = Q.collect = function (fn) {\r\n var result = [], out;\r\n\r\n this.exec(function (r) {\r\n if (out == fn(r)) {\r\n result.push(out);\r\n }\r\n });\r\n return result;\r\n};\r\n\r\nQ.sum = function (field) {\r\n var result = 0,\r\n group,\r\n getFn = this.jQ.getterFns[field];\r\n\r\n if (this.criteria[\"group_by\"]) {\r\n group = true;\r\n result = {};\r\n }\r\n\r\n this.exec(function (r, i) {\r\n if (group) {\r\n result[i] = 0;\r\n\r\n each(r, function (e) {\r\n result[i] = result[i] + (getFn(e) || 0);\r\n });\r\n } else {\r\n result = result + (getFn(r) || 0);\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n\r\nQ.toJQ = function () {\r\n var q = JsonQuery(this.all, { schema: true });\r\n q.schema = this.jQ.schema;\r\n q.getterFns = this.jQ.getterFns;\r\n\r\n return q;\r\n};\r\n\r\nQ.destroy_all = Q.destroy = function () {\r\n var marked_records = this.all;\r\n\r\n each(marked_records, function (r/*, i*/) {\r\n r._destroy_ = true;\r\n });\r\n\r\n this.records = this.jQ.records = this.records.filter(function (r) {\r\n return !r._destroy_;\r\n });\r\n\r\n return marked_records;\r\n};\r\n\r\nQ.update_all = Q.update = function (attrs) {\r\n if (!attrs) {\r\n return false;\r\n }\r\n\r\n var updated_count = 0;\r\n\r\n each(this.all, function (r) {\r\n each(attrs, function (value, key) {\r\n r[key] = value;\r\n });\r\n updated_count = updated_count + 1;\r\n });\r\n\r\n return updated_count;\r\n};\r\n\r\n\r\n//In IE 8 indexOf method not define.\r\nif (!Array.prototype.indexOf) {\r\n Array.prototype.indexOf = function (obj, start) {\r\n for (var i = (start || 0), j = this.length; i < j; i++) {\r\n if (this[i] === obj) { return i; }\r\n }\r\n return -1;\r\n };\r\n}\r\n\r\nif (!Object.defineProperty) {\r\n Object.defineProperty = function (obj, name, opts) {\r\n obj[name] = opts.get;\r\n };\r\n}","import JsonQuery from \"./JsonQuery\";\r\n\r\n//View Template\r\n// Ref: Underscopre.js\r\n//JavaScript micro-templating, similar to John Resig's implementation.\r\nvar templateSettings = {\r\n evaluate: /<%([\\s\\S]+?)%>/g,\r\n interpolate: /<%=([\\s\\S]+?)%>/g,\r\n escape: /<%-([\\s\\S]+?)%>/g\r\n};\r\n\r\nfunction templateBuilder(str, data) {\r\n var c = templateSettings;\r\n var tmpl = \"var __p=[],print=function(){__p.push.apply(__p,arguments);};\" +\r\n \"with(obj||{}){__p.push('\" +\r\n str.replace(/\\\\/g, \"\\\\\\\\\")\r\n .replace(/'/g, \"\\\\'\")\r\n .replace(c.escape, function (match, code) {\r\n return \"',escapeStr(\" + code.replace(/\\\\'/g, \"'\") + \"),'\";\r\n })\r\n .replace(c.interpolate, function (match, code) {\r\n return \"',\" + code.replace(/\\\\'/g, \"'\") + \",'\";\r\n })\r\n .replace(c.evaluate || null, function (match, code) {\r\n return \"');\" + code.replace(/\\\\'/g, \"'\")\r\n .replace(/[\\r\\n\\t]/g, \" \") + \";__p.push('\";\r\n })\r\n .replace(/\\r/g, \"\\\\r\")\r\n .replace(/\\n/g, \"\\\\n\")\r\n .replace(/\\t/g, \"\\\\t\")\r\n + \"');}return __p.join('');\";\r\n\r\n var func = new Function(\"obj\", tmpl);\r\n return data ? func(data) : function (data) { return func(data); };\r\n}\r\n\r\nvar FJS = function (records, container, options) {\r\n var self = this;\r\n\r\n this.opts = options || {};\r\n this.callbacks = this.opts.callbacks || {};\r\n this.$container = $(container);\r\n this.view = this.opts.view || renderRecord;\r\n this.criterias = [];\r\n this._index = 1;\r\n this.appendToContainer = this.opts.appendToContainer || appendToContainer;\r\n this.has_pagination = !!this.opts.pagination;\r\n this.search_text = \"\";\r\n this.anyFilterSelected = false;\r\n\r\n this.setTemplate(this.opts.template);\r\n\r\n $.each(this.opts.criterias || [], function () {\r\n self.addCriteria(this);\r\n });\r\n\r\n this.Model = JsonQuery();\r\n this.Model.getterFns[\"_fid\"] = function (r) { return r[\"_fid\"]; };\r\n this.addRecords(records, this.opts[\"filter_on_init\"] || false);\r\n\r\n if (this.has_pagination) {\r\n this.initPagination();\r\n }\r\n};\r\n\r\nvar F = FJS.prototype;\r\n\r\nObject.defineProperty(F, \"records\", {\r\n get: function () { return this.Model.records; }\r\n});\r\n\r\nObject.defineProperty(F, \"recordsCount\", {\r\n get: function () { return this.Model.records.length; }\r\n});\r\n\r\nF.templateBuilder = templateBuilder;\r\n\r\n//Callback\r\nF.execCallback = function () {\r\n var name = arguments[0];\r\n\r\n if (this.callbacks[name]) {\r\n this.callbacks[name].apply(this, Array.prototype.slice.call(arguments, 1));\r\n }\r\n};\r\n\r\nF.addCallback = function (name, fns) {\r\n if (name && fns) {\r\n this.callbacks[name] = fns;\r\n }\r\n};\r\n\r\n//Add Data\r\nF.addRecords = function (records, applyFilter) {\r\n //var has_scheme = !!this.Model.schema;\r\n\r\n this.execCallback(\"beforeAddRecords\", records);\r\n\r\n if (this.Model.addRecords(records)) {\r\n if (!this.has_scheme) {\r\n this.initSearch(this.opts.search);\r\n }\r\n\r\n this.render(records);\r\n if (applyFilter !== false) {\r\n this.filter();\r\n }\r\n }\r\n\r\n this.execCallback(\"afterAddRecords\", records);\r\n};\r\n\r\nF.removeRecords = function (criteria) {\r\n var ids;\r\n\r\n if ($.isPlainObject(criteria)) {\r\n ids = this.Model.where(criteria).pluck(\"_fid\").all;\r\n } else if ($.isArray(criteria)) {\r\n ids = this.Model.where({ \"id.$in\": criteria }).pluck(\"_fid\").all;\r\n }\r\n\r\n if (!ids) {\r\n return false;\r\n }\r\n\r\n var records = this.Model.records,\r\n removedCount = 0,\r\n idsLength = ids.length,\r\n fid;\r\n\r\n for (var i = records.length - 1; i > -1; i--) {\r\n fid = records[i]._fid;\r\n\r\n if (ids.indexOf(fid) > -1) {\r\n records.splice(i, 1);\r\n removedCount++;\r\n\r\n $(\"#fjs_\" + fid).remove();\r\n }\r\n\r\n if (removedCount == idsLength) {\r\n break;\r\n }\r\n }\r\n\r\n this.execCallback(\"afterRemove\");\r\n\r\n return true;\r\n};\r\n\r\nvar renderRecord = function (record/*, index*/) {\r\n return this.templateFn(record);\r\n};\r\n\r\nF.render = function (records) {\r\n var self = this,\r\n //ele,\r\n cbName;\r\n\r\n if (!records.length) { return; }\r\n\r\n this.execCallback(\"beforeRender\", records);\r\n cbName = \"beforeRecordRender\";\r\n\r\n $.each(records, function (i) {\r\n self.execCallback(cbName, this);\r\n this._fid = (self._index++);\r\n\r\n if (!self.has_pagination) {\r\n self.renderItem(this, i);\r\n }\r\n });\r\n};\r\n\r\nF.renderItem = function (record, i) {\r\n if (!record) {\r\n return;\r\n }\r\n\r\n var ele = this.view(record, i);\r\n\r\n if (typeof ele == \"string\") {\r\n ele = $($.trim(ele));\r\n }\r\n\r\n ele.attr(\"id\", \"fjs_\" + record._fid).addClass(\"fjs_item\");\r\n\r\n this.appendToContainer(ele, record);\r\n};\r\n\r\nvar appendToContainer = function (html_ele/*, record*/) {\r\n this.$container.append(html_ele);\r\n};\r\n\r\nvar setDefaultCriteriaOpts = function (criteria) {\r\n var ele = criteria.$ele,\r\n eleType = criteria.$ele.attr(\"type\");\r\n\r\n if (!criteria.selector) {\r\n if (ele.get(0).tagName == \"INPUT\") {\r\n criteria.selector = (eleType == \"checkbox\" || eleType == \"radio\") ? \":checked\" : \":input\";\r\n } else if (ele.get(0).tagName == \"SELECT\") {\r\n criteria.selector = \"select\";\r\n }\r\n }\r\n\r\n if (!criteria.event) {\r\n criteria.event = (eleType == \"checkbox\" || eleType == \"radio\") ? \"click\" : \"change\";\r\n }\r\n\r\n return criteria;\r\n};\r\n\r\nF.addCriteria = function (criterias) {\r\n var self = this;\r\n\r\n if (!criterias) { return false; }\r\n\r\n if ($.isArray(criterias)) {\r\n $.each(criterias, function () {\r\n addFilterCriteria.call(self, this);\r\n });\r\n } else {\r\n addFilterCriteria.call(self, criterias);\r\n }\r\n\r\n return true;\r\n};\r\n\r\n// Add Filter criteria\r\n// criteria: { ele: '#name', event: 'check', field: 'name', type: 'range' }\r\nvar addFilterCriteria = function (criteria) {\r\n if (!criteria || !criteria.field || !criteria.ele) {\r\n return false;\r\n }\r\n\r\n criteria.$ele = $(criteria.ele);\r\n\r\n if (!criteria.$ele.length) {\r\n return false;\r\n }\r\n\r\n criteria = setDefaultCriteriaOpts(criteria);\r\n this.bindEvent(criteria.ele, criteria.event);\r\n\r\n criteria._q = criteria.field + (criteria.type == \"range\" ? \".$bt\" : \"\");\r\n criteria.active = true;\r\n\r\n this.criterias.push(criteria);\r\n\r\n return true;\r\n};\r\n\r\nF.removeCriteria = function (field) {\r\n var self = this, criteria, index;\r\n\r\n $.each(self.criterias, function (i) {\r\n if (this.field == field) {\r\n index = i;\r\n }\r\n });\r\n\r\n if (index != null) {\r\n criteria = this.criterias.splice(index, 1)[0];\r\n $(\"body\").off(criteria.event, criteria.ele);\r\n }\r\n};\r\n\r\nvar changeCriteriaStatus = function (names, active) {\r\n var self = this;\r\n\r\n if (!names) { return; }\r\n\r\n if (!$.isArray(names)) {\r\n names = [names];\r\n }\r\n\r\n $.each(names, function () {\r\n var name = this;\r\n\r\n $.each(self.criterias, function () {\r\n if (this.field == name) {\r\n this.active = active;\r\n }\r\n });\r\n });\r\n};\r\n\r\nF.deactivateCriteria = function (names) {\r\n changeCriteriaStatus.call(self, names, false);\r\n};\r\n\r\nF.activateCriteria = function (names) {\r\n changeCriteriaStatus.call(this, names, true);\r\n};\r\n\r\nF.getSelectedValues = function (criteria, context) {\r\n var vals = [];\r\n\r\n criteria.$ele.filter(criteria.selector).each(function () {\r\n vals.push($(this).val());\r\n });\r\n\r\n if ($.isArray(vals[0])) {\r\n vals = [].concat.apply([], vals);\r\n }\r\n\r\n if (criteria.all && vals.indexOf(criteria.all) > -1) {\r\n return;\r\n }\r\n\r\n if (criteria.type == \"range\") {\r\n vals = vals[0].split(criteria.delimiter || \"-\");\r\n }\r\n\r\n vals = this.parseValues(criteria.field, vals);\r\n\r\n return context.execCallback(\"onFilterSelect\", { criteria: criteria, values: vals }) || vals;\r\n};\r\n\r\nF.lastResult = function () {\r\n return (this.last_result || this.records);\r\n};\r\n\r\nF.filter = function () {\r\n var query = {},\r\n vals, _q,\r\n count = 0,\r\n self = this,\r\n criteria;\r\n\r\n $.each(this.criterias, function () {\r\n if (this.active) {\r\n vals = self.getSelectedValues(this, self);\r\n\r\n if (vals && vals.length) {\r\n _q = ($.isArray(vals) && !this.type) ? (this._q + \".$in\") : this._q;\r\n query[_q] = vals;\r\n count = count + 1;\r\n }\r\n }\r\n });\r\n\r\n this.anyFilterSelected = count > 0;\r\n criteria = this.Model.where(query);\r\n this.execCallback(\"shortResult\", criteria);\r\n this.last_result = criteria.all;\r\n\r\n if (this.searchFilter(this.last_result)) {\r\n return query;\r\n }\r\n\r\n this.show(this.last_result);\r\n this.renderPagination(this.last_result.length);\r\n this.execCallback(\"afterFilter\", this.last_result, JsonQuery.blankClone(this.Model, this.last_result));\r\n\r\n return query;\r\n};\r\n\r\nF.show = function (result/*, type*/) {\r\n var i = 0, l = result.length;\r\n\r\n if (this.has_pagination) {\r\n\r\n i = this.page.perPage * (this.page.currentPage - 1);\r\n l = i + this.page.perPage;\r\n\r\n this.$container.html(\"\");\r\n\r\n for (i; i < l; i++) {\r\n this.renderItem(result[i], i);\r\n }\r\n\r\n return;\r\n }\r\n\r\n $(\".fjs_item\").hide();\r\n\r\n for (i; i < l; i++) {\r\n $(\"#fjs_\" + result[i]._fid).show();\r\n }\r\n\r\n};\r\n\r\nF.filterTimer = function (timeout) {\r\n var self = this;\r\n\r\n if (this.filterTimeoutId) {\r\n clearTimeout(this.filterTimeoutId);\r\n }\r\n\r\n this.filterTimeoutId = setTimeout(function () {\r\n self.filter();\r\n }, timeout);\r\n};\r\n\r\nF.bindEvent = function (ele, eventName) {\r\n var self = this;\r\n\r\n $(document).on(eventName, ele, function (/*e*/) {\r\n self.filterTimer(self.opts.timeout || 35);\r\n });\r\n\r\n};\r\n\r\nF.initSearch = function (opts) {\r\n if (!opts || !opts.ele) {\r\n return;\r\n }\r\n\r\n if (!opts.start_length) {\r\n this.opts.search.start_length = 2;\r\n }\r\n\r\n this.$search_ele = $(this.opts.search.ele);\r\n\r\n if (this.$search_ele.length) {\r\n this.has_search = true;\r\n this.searchFn = this.buildSearchFn(opts.fields);\r\n this.bindEvent(opts.ele, \"keyup\");\r\n }\r\n};\r\n\r\nF.buildSearchFn = function (fields) {\r\n var self = this, getterFns = [];\r\n\r\n if (fields) {\r\n $.each(fields, function () {\r\n getterFns.push(self.Model.getterFns[this]);\r\n });\r\n } else {\r\n $.each(self.Model.getterFns, function (i, fn) {\r\n getterFns.push(fn);\r\n });\r\n }\r\n\r\n return function (text, record) {\r\n text = text.toLocaleUpperCase();\r\n\r\n for (var i = 0, l = getterFns.length; i < l; i++) {\r\n\r\n if ((getterFns[i](record) + \"\").toLocaleUpperCase().indexOf(text) > -1) {\r\n return true;\r\n }\r\n\r\n }\r\n return false;\r\n };\r\n};\r\n\r\nF.lastSearchResult = function () {\r\n if (this.search_text.length > this.opts.search.start_length) {\r\n return this.search_result;\r\n } else {\r\n return this.lastResult();\r\n }\r\n};\r\n\r\nF.searchFilter = function (records) {\r\n if (!this.has_search) {\r\n return;\r\n }\r\n\r\n var result;\r\n this.search_text = $.trim(this.$search_ele.val());\r\n\r\n if (this.search_text.length < this.opts.search.start_length) {\r\n return false;\r\n }\r\n\r\n result = this.search(this.search_text, records || this.lastResult());\r\n\r\n this.search_result = result;\r\n this.show(result);\r\n this.renderPagination(result.length);\r\n this.execCallback(\"afterFilter\", result, JsonQuery.blankClone(this.Model, result));\r\n\r\n return true;\r\n};\r\n\r\nF.search = function (text, records) {\r\n text = text.toLocaleUpperCase();\r\n\r\n var result = [];\r\n\r\n for (var i = 0, l = records.length; i < l; i++) {\r\n if (this.searchFn(text, records[i])) {\r\n result.push(records[i]);\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\n//Streaming\r\nF.setStreaming = function (opts) {\r\n if (!opts) { return; }\r\n\r\n this.opts.streaming = opts;\r\n\r\n if (opts.data_url) {\r\n opts.stream_after = (opts.stream_after || 2) * 1000;\r\n opts.batch_size = opts.batch_size || false;\r\n this.streamData(opts.stream_after);\r\n }\r\n\r\n};\r\n\r\nvar fetchData = function () {\r\n var self = this,\r\n params = this.opts.params || {},\r\n opts = this.opts.streaming;\r\n\r\n params.offset = this.recordsCount;\r\n\r\n if (opts.batch_size) {\r\n params.limit = opts.batch_size;\r\n }\r\n\r\n if (this.has_search) {\r\n params[\"q\"] = $.trim(this.$search_ele.val());\r\n }\r\n\r\n $.getJSON(opts.data_url, params).done(function (records) {\r\n if (params.limit != null && (!records || !records.length)) {\r\n self.stopStreaming();\r\n } else {\r\n self.setStreamInterval();\r\n self.addRecords(records);\r\n }\r\n\r\n }).fail(function (/*e*/) {\r\n self.stopStreaming();\r\n });\r\n};\r\n\r\nF.setStreamInterval = function () {\r\n var self = this;\r\n\r\n if (self.opts.streaming.stop == true) { return; }\r\n\r\n self.streamingTimer = setTimeout(function () {\r\n fetchData.call(self);\r\n }, self.opts.streaming.stream_after);\r\n};\r\n\r\nF.stopStreaming = function () {\r\n this.opts.streaming.stop = true;\r\n\r\n if (this.streamingTimer) {\r\n clearTimeout(this.streamingTimer);\r\n }\r\n};\r\n\r\nF.resumeStreaming = function () {\r\n this.opts.streaming.stop = false;\r\n this.streamData(this.opts.streaming.stream_after);\r\n};\r\n\r\nF.streamData = function (/*time*/) {\r\n this.setStreamInterval();\r\n\r\n if (!this.opts.streaming.batch_size) {\r\n this.stopStreaming();\r\n }\r\n};\r\n\r\nF.clear = function () {\r\n if (this.opts.streaming) {\r\n this.stopStreaming();\r\n }\r\n\r\n $.each(this.criterias, function () {\r\n $(document).off(this.event, this.ele);\r\n });\r\n\r\n if (this.opts.search) {\r\n $(document).off(\"keyup\", this.opts.search.ele);\r\n }\r\n\r\n if (this.filterTimeoutId) {\r\n clearTimeout(this.filterTimeoutId);\r\n }\r\n};\r\n\r\nF.initPagination = function () {\r\n var self = this,\r\n opts = this.opts.pagination;\r\n\r\n if (!opts.perPage) {\r\n opts.perPage = {};\r\n }\r\n\r\n if (!opts.perPage.values) {\r\n opts.perPage.values = [10, 20, 30];\r\n }\r\n\r\n this.page = { currentPage: 1, perPage: opts.perPage.values };\r\n\r\n this.paginator = new Paginator(this.execCallback, this.callbacks, this.lastResult().length, this.opts.pagination, function (currentPage, perPage) {\r\n self.page = { currentPage: currentPage, perPage: perPage };\r\n\r\n if (self.has_search) {\r\n self.show(self.lastSearchResult());\r\n } else {\r\n self.show(self.lastResult());\r\n }\r\n });\r\n\r\n this.filter();\r\n};\r\n\r\nF.renderPagination = function (totalCount) {\r\n if (this.has_pagination) {\r\n this.paginator.setRecordCount(totalCount);\r\n }\r\n};\r\n\r\nF.parseValues = function (field, values) {\r\n var type = typeof this.Model.schema == \"undefined\" ? \"String\" : this.Model.schema[field];\r\n\r\n if (type == \"Number\") {\r\n return $.map(values, function (v) { return Number(v); });\r\n } else if (type == \"Boolean\") {\r\n return $.map(values, function (v) { return (v == \"true\" || v == true); });\r\n } else {\r\n return values;\r\n }\r\n};\r\n\r\nF.setTemplate = function (template, rebuild) {\r\n this.templateFn = templateBuilder($(template).html());\r\n if (rebuild === true) {\r\n this.$container.empty();\r\n\r\n this.render(this.records);\r\n this.filter();\r\n }\r\n};\r\n\r\n\r\n\r\nvar Paginator = function (execCallback, callbacks, recordsCount, opts, onPagination) {\r\n var paginationView;\r\n\r\n this.recordsCount = recordsCount;\r\n this.execCallback = execCallback;\r\n this.callbacks = callbacks;\r\n this.opts = opts;\r\n this.$container = $(this.opts.container);\r\n this.$containerSecondary = $(this.opts.containerSecondary);\r\n if (this.opts.paginationView) {\r\n paginationView = $(this.opts.paginationView).html();\r\n } else {\r\n if (this.opts.liClass && this.opts.aClass)\r\n paginationView = \"\";\r\n else\r\n paginationView = views.pagination;\r\n }\r\n\r\n this.paginationTmpl = templateBuilder(paginationView);\r\n\r\n this.currentPage = 1;\r\n this.onPagination = onPagination;\r\n this.initPerPage();\r\n this.render();\r\n this.bindEvents();\r\n};\r\n\r\nvar P = Paginator.prototype;\r\n\r\nP.bindEvents = function () {\r\n var self = this;\r\n\r\n $(this.opts.container).on(\"click\", \"[data-page]\", function (e) {\r\n self.execCallback(\"beforeChangePage\");\r\n self.setCurrentPage($(this).data(\"page\"));\r\n self.execCallback(\"afterChangePage\");\r\n e.preventDefault();\r\n });\r\n if (this.opts.containerSecondary) {\r\n $(this.opts.containerSecondary).on(\"click\", \"[data-page]\", function (e) {\r\n self.execCallback(\"beforeChangePage\");\r\n self.setCurrentPage($(this).data(\"page\"));\r\n self.execCallback(\"afterChangePage\");\r\n e.preventDefault();\r\n });\r\n }\r\n};\r\n\r\nP.totalPages = function () {\r\n return Math.ceil(this.recordsCount / this.perPageCount);\r\n};\r\n\r\nP.setCurrentPage = function (page) {\r\n page = this.toPage(page);\r\n this.prevCurrentPage = this.currentPage;\r\n this.currentPage = page;\r\n this.paginate(page);\r\n};\r\n\r\nP.setRecordCount = function (total) {\r\n this.recordsCount = total;\r\n this.setCurrentPage(this.currentPage);\r\n};\r\n\r\nP.toPage = function (page) {\r\n if (page == \"first\") {\r\n return 1;\r\n }\r\n\r\n if (page == \"last\") {\r\n return this.totalPages();\r\n }\r\n\r\n if (page == \"next\") {\r\n var next_page = this.currentPage + 1;\r\n return (next_page > this.totalPages() ? this.currentPage : next_page);\r\n }\r\n\r\n if (page == \"prev\") {\r\n var prev_page = this.currentPage - 1;\r\n return (prev_page <= 0 ? this.currentPage : prev_page);\r\n }\r\n\r\n return parseInt(page);\r\n};\r\n\r\nP.paginate = function (/*page*/) {\r\n this.render();\r\n this.onPagination(this.currentPage, this.perPageCount);\r\n};\r\n\r\nP.render = function () {\r\n var pages = this.getPages();\r\n if (pages.totalPages > 1) {\r\n if (this.currentPage > pages.totalPages) {\r\n this.currentPage = pages.totalPages;\r\n }\r\n\r\n if (this.currentPage == 0) {\r\n this.currentPage = 1;\r\n }\r\n\r\n pages.currentPage = this.currentPage;\r\n this.$container.html(this.paginationTmpl(pages));\r\n if (this.$containerSecondary)\r\n this.$containerSecondary.html(this.paginationTmpl(pages));\r\n }\r\n\r\n};\r\n\r\nfunction makePageArray(start, end) {\r\n var i = start, pages = [];\r\n\r\n for (i; i <= end; i++) {\r\n pages.push(i);\r\n }\r\n\r\n return pages;\r\n}\r\n\r\nP.getPages = function () {\r\n var total = this.totalPages();\r\n\r\n if (!this.opts.visiblePages) {\r\n return { totalPages: total, pages: makePageArray(0, total), self: this };\r\n }\r\n\r\n var half = Math.floor(this.opts.visiblePages / 2);\r\n var start = this.currentPage - half + 1 - this.opts.visiblePages % 2;\r\n var end = this.currentPage + half;\r\n\r\n // handle boundary case\r\n if (start <= 0) {\r\n start = 1;\r\n end = this.opts.visiblePages;\r\n }\r\n\r\n if (end > total) {\r\n start = total - this.opts.visiblePages;\r\n\r\n if (start <= 0) {\r\n start = 1;\r\n }\r\n\r\n end = total;\r\n }\r\n\r\n return { currentPage: this.currentPage, totalPages: total, pages: makePageArray(start, end), self: this };\r\n},\r\n\r\nP.initPerPage = function () {\r\n var opts = this.opts.perPage,\r\n template,\r\n html,\r\n ele,\r\n event_type,\r\n self = this;\r\n\r\n this.perPageCount = opts.values[0];\r\n\r\n template = opts.perPageView ? $(opts.perPageView).html() : views.per_page;\r\n html = templateBuilder(template)({ values: opts.values });\r\n if (opts.container) {\r\n $(opts.container).html(html);\r\n\r\n ele = $(opts.container).find(\"[data-perpage]\");\r\n event_type = ele.get(0).tagName == \"SELECT\" ? \"change\" : \"click\";\r\n\r\n $(opts.container).on(event_type, \"[data-perpage]\", function (e) {\r\n var value = parseInt($(this).val() || $(this).data(\"value\"));\r\n self.setPerPage(value);\r\n e.preventDefault();\r\n });\r\n }\r\n};\r\n\r\nP.setPerPage = function (value) {\r\n console.log(\"setPerPage\", this, value);\r\n \r\n this.perPageCount = value;\r\n this.setCurrentPage(this.currentPage);\r\n};\r\n\r\n\r\n$.fn.filterjs = function (records, options) {\r\n var $this = $(this);\r\n\r\n if (!$this.data(\"fjs\")) {\r\n $this.data(\"fjs\", FilterJS(records, $this, options));\r\n }\r\n};\r\n\r\nvar list = [];\r\nvar views = [];\r\nvar FilterJS = function (records, container, options) {\r\n var fjs = new FJS(records, container, options);\r\n list.push(fjs);\r\n\r\n\r\n return fjs;\r\n};\r\nFilterJS.list = list;\r\nFilterJS.templateBuilder = templateBuilder;\r\n\r\nwindow.FilterJS = FilterJS;\r\nviews[\"pagination\"] = \"\";\r\nviews[\"per_page\"] = \"\";\r\n\r\nexport default FilterJS;\r\n\r\n/*\r\n * Find html tag and parse options for filter\r\n */\r\nfunction getElementWithOptions(name, hasMany) {\r\n var attr = \"fjs-\" + name;\r\n var $eles = $(\"[\" + attr + \"]\");\r\n var options = [];\r\n\r\n if (!$eles.length) {\r\n return;\r\n }\r\n\r\n $.each($eles, function () {\r\n var $ele = $(this);\r\n var option = { ele: $ele };\r\n var optionStr = $ele.attr(attr);\r\n\r\n options.push(option);\r\n\r\n if (!optionStr) {\r\n return options;\r\n }\r\n\r\n $.each(optionStr.split(\",\"), function (i, opt) {\r\n var kv = opt.split(\"=\");\r\n option[kv[0]] = kv[1];\r\n });\r\n });\r\n\r\n return hasMany ? options : options[0];\r\n}\r\n\r\nFilterJS.auto = function (records, callbacks) {\r\n var options = {};\r\n var container = getElementWithOptions(\"items\");\r\n var fjs,\r\n search,\r\n //template,\r\n criterias;\r\n\r\n if (!container || !container.template) {\r\n return;\r\n }\r\n\r\n options.template = container.template;\r\n search = getElementWithOptions(\"search\");\r\n\r\n if (search) {\r\n if (search.fields) {\r\n search.fields = search.fields.split(\",\");\r\n }\r\n options.search = search;\r\n }\r\n\r\n if (callbacks) {\r\n options.callbacks = callbacks;\r\n }\r\n\r\n fjs = FilterJS(records, container.ele, options);\r\n\r\n criterias = getElementWithOptions(\"criteria\", true);\r\n\r\n if (criterias) {\r\n fjs.addCriteria(criterias);\r\n }\r\n\r\n return fjs;\r\n};"],"names":["JsonQuery","records","opts","_JsonQuery","window","VERSION","Config","id","latitude","longitude","date_regx","blankClone","jq","getterFns","schema","each","objs","callback","context","length","i","l","call","key","hasOwnProperty","this","lat","lng","initSchema","JQ","prototype","record","hasSchema","_id","buildSchema","buildPropGetters","getDataType","val","type","Object","toString","slice","match","obj","parentField","field","dataType","fullPath","fieldValue","indexOf","selector","buildGetPropFn","err","console","log","path","prefix","accessFnBody","accessPath","nestedPath","split","lastArr","arrCount","pathLength","join","countArrHierarchy","Function","operators","eq","v1","v2","ne","lt","lte","gt","gte","in","ni","li","v","regx","test","bt","addOperator","name","fn","arrayMatcher","rVal","cVal","cFn","addCondition","func","getCriteria","criteria","fieldCondition","operator","setGetterFn","addRecords","concat","push","_findAll","qField","cOpt","arrayCFn","result","qFn","RegExp","find","value","eachWithBreak","r","c","q","Query","apply","arguments","defineProperty","get","compareObj","obj1","obj2","fields","execWhere","query","jQ","execGroupBy","execOrder","orders","direction","_records","sort","r1","r2","a","b","execSelect","getFn","self","f","execPluck","execUniq","present","Q","exec","toArray","execNear","onResult","addToCriteria","where","or","groupBy","select","pluck","limit","offset","o","order","toLowerCase","uniq","keys","GEO","Math","PI","unit_c","unit","latFn","lngFn","_lat1","_lat2","_lng1","_lng2","dLat","dLon","lat1","lat2","_distance","sin","cos","atan2","sqrt","distance","near","map","collect","out","sum","group","e","toJQ","all","destroy_all","destroy","marked_records","_destroy_","filter","update_all","update","attrs","updated_count","Array","start","j","templateSettings","evaluate","interpolate","escape","templateBuilder","str","data","tmpl","replace","code","FJS","container","options","callbacks","$container","$","view","renderRecord","criterias","_index","appendToContainer","has_pagination","pagination","search_text","anyFilterSelected","setTemplate","template","addCriteria","Model","initPagination","F","execCallback","addCallback","fns","applyFilter","has_scheme","initSearch","search","render","removeRecords","ids","isPlainObject","isArray","fid","removedCount","idsLength","_fid","splice","remove","templateFn","renderItem","ele","trim","attr","addClass","html_ele","append","addFilterCriteria","$ele","eleType","tagName","event","setDefaultCriteriaOpts","bindEvent","_q","active","removeCriteria","index","off","changeCriteriaStatus","names","deactivateCriteria","activateCriteria","getSelectedValues","vals","delimiter","parseValues","values","lastResult","last_result","count","searchFilter","show","renderPagination","page","perPage","currentPage","html","hide","filterTimer","timeout","filterTimeoutId","clearTimeout","setTimeout","eventName","document","on","start_length","$search_ele","has_search","searchFn","buildSearchFn","text","toLocaleUpperCase","lastSearchResult","search_result","setStreaming","streaming","data_url","stream_after","batch_size","streamData","fetchData","params","recordsCount","getJSON","done","setStreamInterval","stopStreaming","fail","stop","streamingTimer","resumeStreaming","clear","paginator","Paginator","totalCount","setRecordCount","Number","rebuild","empty","onPagination","paginationView","$containerSecondary","containerSecondary","liClass","aClass","views","paginationTmpl","initPerPage","bindEvents","P","makePageArray","end","pages","setCurrentPage","preventDefault","totalPages","ceil","perPageCount","toPage","prevCurrentPage","paginate","total","next_page","prev_page","parseInt","getPages","visiblePages","half","floor","event_type","perPageView","per_page","setPerPage","filterjs","$this","FilterJS","list","fjs","getElementWithOptions","hasMany","$eles","option","optionStr","opt","kv","auto"],"sourceRoot":""}