{"version":3,"file":"kendo.data.xml.min.js","names":["factory","define","amd","$","kendo","isArray","isPlainObject","map","each","extend","getter","XmlDataReader","window","jQuery","Array","Class","init","options","that","this","total","model","parse","errors","serialize","data","base","modelBase","Model","fields","field","value","isFunction","id","idField","xpathToMember","parseInt","modelInstance","result","evaluate","record","_parse","xmlParse","xml","call","length","parseDOM","element","parsedNode","node","nodeType","nodeName","member","attribute","idx","attributes","attributeCount","nodeValue","firstChild","nextSibling","push","expression","intermediateResult","members","split","shift","join","apply","documentElement","tree","parseXML","raw","replace","indexOf","readers"],"sources":["kendo.data.xml.js"],"mappings":"CAAA,SAAWA,GACW,mBAAXC,QAAyBA,OAAOC,IAAMD,OAAO,CAAC,kBAAmBD,GACxEA,IAFJ,EAGG,WACC,IASUG,EACFC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGAC,EAVER,EAwPPS,OAAOR,MAAMS,OAvPRT,EAAQQ,OAAOR,MACfC,EAAUS,MAAMT,QAChBC,EAAgBH,EAAEG,cAClBC,EAAMJ,EAAEI,IACRC,EAAOL,EAAEK,KACTC,EAASN,EAAEM,OACXC,EAASN,EAAMM,OAGfC,EAFQP,EAAMW,MAEQN,OAAO,CAC7BO,KAAM,SAASC,GACX,IAAIC,EAAOC,KACPC,EAAQH,EAAQG,MAChBC,EAAQJ,EAAQI,MAChBC,EAAQL,EAAQK,MAChBC,EAASN,EAAQM,OACjBC,EAAYP,EAAQO,UACpBC,EAAOR,EAAQQ,KAEnB,GAAIJ,EAAO,CACP,GAAIf,EAAce,GAAQ,CACtB,IAAIK,EAAOT,EAAQU,WAAavB,EAAMqB,KAAKG,MAEvCP,EAAMQ,QACNrB,EAAKa,EAAMQ,QAAQ,SAASC,EAAOC,GAC3BzB,EAAcyB,IAAUA,EAAMD,MACzB1B,EAAM4B,WAAWD,EAAMD,SACxBC,EAAQtB,EAAOsB,EAAO,CAAED,MAAOZ,EAAKR,OAAOqB,EAAMD,UAGrDC,EAAQ,CAAED,MAAOZ,EAAKR,OAAOqB,IAEjCV,EAAMQ,OAAOC,GAASC,KAI9B,IAAIE,EAAKZ,EAAMY,GACf,GAAIA,EAAI,CACJ,IAAIC,EAAU,GAEdA,EAAQhB,EAAKiB,cAAcF,GAAI,IAAS,CAAEH,MAAOZ,EAAKR,OAAOuB,IAC7DZ,EAAMQ,OAASpB,EAAOyB,EAASb,EAAMQ,QACrCR,EAAMY,GAAKf,EAAKiB,cAAcF,GAElCZ,EAAQK,EAAKzB,OAAOoB,GAGxBH,EAAKG,MAAQA,EAyDjB,GAtDID,IACoB,iBAATA,GACPA,EAAQF,EAAKR,OAAOU,GACpBF,EAAKE,MAAQ,SAASK,GAClB,OAAOW,SAAShB,EAAMK,GAAO,MAEV,mBAATL,IACdF,EAAKE,MAAQA,IAIjBG,IACqB,iBAAVA,GACPA,EAASL,EAAKR,OAAOa,GACrBL,EAAKK,OAAS,SAASE,GACnB,OAAOF,EAAOE,IAAS,OAEH,mBAAVF,IACdL,EAAKK,OAASA,IAIlBE,IACmB,iBAARA,GACPA,EAAOP,EAAKiB,cAAcV,GAC1BP,EAAKO,KAAO,SAASM,GACjB,IACIM,EADAC,EAASpB,EAAKqB,SAASR,EAAON,GAKlC,OAFAa,EAASjC,EAAQiC,GAAUA,EAAS,CAACA,GAEjCpB,EAAKG,OAASA,EAAMQ,QACpBQ,EAAgB,IAAInB,EAAKG,MAElBd,EAAI+B,GAAQ,SAASP,GACxB,GAAIA,EAAO,CACP,IAAiBD,EAAbU,EAAS,GAEb,IAAKV,KAAST,EAAMQ,OAChBW,EAAOV,GAASO,EAAcI,OAAOX,EAAOT,EAAMQ,OAAOC,GAAOA,MAAMC,IAG1E,OAAOS,OAKZF,IAEW,mBAARb,IACdP,EAAKO,KAAOA,IAIA,mBAATH,EAAqB,CAC5B,IAAIoB,EAAWxB,EAAKI,MAEpBJ,EAAKI,MAAQ,SAASG,GAClB,IAAIkB,EAAMrB,EAAMsB,KAAK1B,EAAMO,GAC3B,OAAOiB,EAASE,KAAK1B,EAAMyB,IAIX,mBAAbnB,IACPN,EAAKM,UAAYA,IAGzBJ,MAAO,SAASkB,GACZ,OAAOnB,KAAKM,KAAKa,GAAQO,QAE7BtB,OAAQ,SAASE,GACb,OAAOA,EAAOA,EAAKF,OAAS,MAEhCC,UAAW,SAASC,GAChB,OAAOA,GAEXqB,SAAU,SAASC,GACf,IACIC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGAC,EATAhB,EAAS,GAOTiB,EAAaR,EAAQQ,WACrBC,EAAiBD,EAAWV,OAGhC,IAAKS,EAAM,EAAGA,EAAME,EAAgBF,IAEhChB,EAAO,KADPe,EAAYE,EAAWD,IACAH,UAAYE,EAAUI,UAGjD,IAAKR,EAAOF,EAAQW,WAAYT,EAAMA,EAAOA,EAAKU,YAG7B,KAFjBT,EAAWD,EAAKC,WAEmB,IAAbA,EAElBZ,EAAO,SAAWW,EAAKQ,UACH,IAAbP,IAEPF,EAAa7B,KAAK2B,SAASG,GAI3BG,EAASd,EAFTa,EAAWF,EAAKE,UAIZ9C,EAAQ+C,GAERA,EAAOQ,KAAKZ,GAEZI,OAlKxB,IAiK+BA,EACE,CAACA,EAAQJ,GAETA,EAGbV,EAAOa,GAAYC,GAG3B,OAAOd,GAGXC,SAAU,SAASR,EAAO8B,GAQtB,IAPA,IACIT,EACAd,EACAO,EACAiB,EACAR,EALAS,EAAUF,EAAWG,MAAM,KAOxBZ,EAASW,EAAQE,SAGpB,GAFAlC,EAAQA,EAAMqB,GAEV/C,EAAQ0B,GAAQ,CAIhB,IAHAO,EAAS,GACTuB,EAAaE,EAAQG,KAAK,KAErBZ,EAAM,EAAGT,EAASd,EAAMc,OAAQS,EAAMT,EAAQS,IAC/CQ,EAAqB3C,KAAKoB,SAASR,EAAMuB,GAAMO,GAE/CC,EAAqBzD,EAAQyD,GAAsBA,EAAqB,CAACA,GAEzExB,EAAOsB,KAAKO,MAAM7B,EAAQwB,GAG9B,OAAOxB,EAIf,OAAOP,GAGXT,MAAO,SAASqB,GACZ,IAAIyB,EACAC,EACA/B,EAAS,GAQb,OANA8B,EAAkBzB,EAAIyB,iBAAmBjE,EAAEmE,SAAS3B,GAAKyB,gBAEzDC,EAAOlD,KAAK2B,SAASsB,GAErB9B,EAAO8B,EAAgBjB,UAAYkB,EAE5B/B,GAGXH,cAAe,SAASiB,EAAQmB,GAC5B,OAAKnB,GAILA,EAASA,EAAOoB,QAAQ,MAAO,IACfA,QAAQ,MAAO,MAEpBC,QAAQ,MAAQ,EAEhBrB,EAAOoB,QAAQ,WAAYD,EAAM,KAAO,UAG/CnB,EAAOqB,QAAQ,WAAa,EAErBrB,EAAOoB,QAAQ,gBAAiBD,EAAM,QAAU,aAGpDnB,EAhBI,IAkBf1C,OAAQ,SAAS0C,GACb,OAAO1C,EAAOS,KAAKgB,cAAciB,IAAS,MAIlDjD,EAAEM,QAAO,EAAML,EAAMqB,KAAM,CACvBd,cAAeA,EACf+D,QAAS,CACL/B,IAAKhC","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.core'], factory) :\n factory();\n})((function () {\n var __meta__ = {\n id: \"data.xml\",\n name: \"XML\",\n category: \"framework\",\n depends: [ \"core\" ],\n hidden: true\n };\n\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n isArray = Array.isArray,\n isPlainObject = $.isPlainObject,\n map = $.map,\n each = $.each,\n extend = $.extend,\n getter = kendo.getter,\n Class = kendo.Class;\n\n var XmlDataReader = Class.extend({\n init: function(options) {\n var that = this,\n total = options.total,\n model = options.model,\n parse = options.parse,\n errors = options.errors,\n serialize = options.serialize,\n data = options.data;\n\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n\n if (model.fields) {\n each(model.fields, function(field, value) {\n if (isPlainObject(value) && value.field) {\n if (!kendo.isFunction(value.field)) {\n value = extend(value, { field: that.getter(value.field) });\n }\n } else {\n value = { field: that.getter(value) };\n }\n model.fields[field] = value;\n });\n }\n\n var id = model.id;\n if (id) {\n var idField = {};\n\n idField[that.xpathToMember(id, true)] = { field: that.getter(id) };\n model.fields = extend(idField, model.fields);\n model.id = that.xpathToMember(id);\n }\n model = base.define(model);\n }\n\n that.model = model;\n }\n\n if (total) {\n if (typeof total == \"string\") {\n total = that.getter(total);\n that.total = function(data) {\n return parseInt(total(data), 10);\n };\n } else if (typeof total == \"function\") {\n that.total = total;\n }\n }\n\n if (errors) {\n if (typeof errors == \"string\") {\n errors = that.getter(errors);\n that.errors = function(data) {\n return errors(data) || null;\n };\n } else if (typeof errors == \"function\") {\n that.errors = errors;\n }\n }\n\n if (data) {\n if (typeof data == \"string\") {\n data = that.xpathToMember(data);\n that.data = function(value) {\n var result = that.evaluate(value, data),\n modelInstance;\n\n result = isArray(result) ? result : [result];\n\n if (that.model && model.fields) {\n modelInstance = new that.model();\n\n return map(result, function(value) {\n if (value) {\n var record = {}, field;\n\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n\n return record;\n }\n });\n }\n\n return result;\n };\n } else if (typeof data == \"function\") {\n that.data = data;\n }\n }\n\n if (typeof parse == \"function\") {\n var xmlParse = that.parse;\n\n that.parse = function(data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\n }\n\n if (typeof serialize == \"function\") {\n that.serialize = serialize;\n }\n },\n total: function(result) {\n return this.data(result).length;\n },\n errors: function(data) {\n return data ? data.errors : null;\n },\n serialize: function(data) {\n return data;\n },\n parseDOM: function(element) {\n var result = {},\n parsedNode,\n node,\n nodeType,\n nodeName,\n member,\n attribute,\n attributes = element.attributes,\n attributeCount = attributes.length,\n idx;\n\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result[\"@\" + attribute.nodeName] = attribute.nodeValue;\n }\n\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n\n if (nodeType === 3 || nodeType === 4) {\n // text nodes or CDATA are stored as #text field\n result[\"#text\"] = node.nodeValue;\n } else if (nodeType === 1) {\n // elements are stored as fields\n parsedNode = this.parseDOM(node);\n\n nodeName = node.nodeName;\n\n member = result[nodeName];\n\n if (isArray(member)) {\n // elements of same nodeName are stored as array\n member.push(parsedNode);\n } else if (member !== undefined$1) {\n member = [member, parsedNode];\n } else {\n member = parsedNode;\n }\n\n result[nodeName] = member;\n }\n }\n return result;\n },\n\n evaluate: function(value, expression) {\n var members = expression.split(\".\"),\n member,\n result,\n length,\n intermediateResult,\n idx;\n\n while (member = members.shift()) {\n value = value[member];\n\n if (isArray(value)) {\n result = [];\n expression = members.join(\".\");\n\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n\n result.push.apply(result, intermediateResult);\n }\n\n return result;\n }\n }\n\n return value;\n },\n\n parse: function(xml) {\n var documentElement,\n tree,\n result = {};\n\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n\n tree = this.parseDOM(documentElement);\n\n result[documentElement.nodeName] = tree;\n\n return result;\n },\n\n xpathToMember: function(member, raw) {\n if (!member) {\n return \"\";\n }\n\n member = member.replace(/^\\//, \"\") // remove the first \"/\"\n .replace(/\\//g, \".\"); // replace all \"/\" with \".\"\n\n if (member.indexOf(\"@\") >= 0) {\n // replace @attribute with '[\"@attribute\"]'\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n\n if (member.indexOf(\"text()\") >= 0) {\n // replace \".text()\" with '[\"#text\"]'\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n\n return member;\n },\n getter: function(member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: {\n xml: XmlDataReader\n }\n });\n })(window.kendo.jQuery);\n\n}));\n"]}