{"version":3,"sources":["components/dataView.js","components/dataDetail.js","components/dataIterator.js"],"names":["dmx","Component","initialData","data","page","pages","items","sort","on","dir","has","first","prev","next","last","attributes","type","Array","Object","default","filter","String","Number","pageSize","sortOn","sortDir","validate","val","test","methods","select","this","setPage","prop","props","toLowerCase","_update","render","node","filtered","setData","$parse","beforeUpdate","idents","_needUpdate","$canSkip","getIdents","update","fields","size","updated","item","parse","DataScope","rev","a","b","set","length","Math","ceil","repeatItems","map","clone","$value","$index","$key","splice","key","value","isArray","hasOwnProperty","push","reset","index","findIndex","$node","requestAnimationFrame","forms","querySelectorAll","i","loop","Boolean","random","console","warn","floor","parseInt"],"mappings":"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","file":"../dmxDataTraversal/dmxDataTraversal.js","sourcesContent":["dmx.Component('data-view', {\r\n\r\n initialData: {\r\n data: [],\r\n page: 1,\r\n pages: 1,\r\n items: 0,\r\n sort: {\r\n on: '',\r\n dir: 'asc'\r\n },\r\n has: {\r\n first: false,\r\n prev: false,\r\n next: false,\r\n last: false\r\n }\r\n },\r\n\r\n attributes: {\r\n data: {\r\n type: [Array, Object],\r\n default: null\r\n },\r\n\r\n filter: {\r\n type: String,\r\n default: ''\r\n },\r\n\r\n page: {\r\n type: Number,\r\n default: 1\r\n },\r\n\r\n pageSize: {\r\n type: Number,\r\n default: 0\r\n },\r\n\r\n sortOn: {\r\n type: String,\r\n default: ''\r\n },\r\n\r\n sortDir: {\r\n type: String,\r\n default: 'asc',\r\n validate: function(val) {\r\n return /^(asc|desc)$/i.test(val);\r\n }\r\n }\r\n },\r\n\r\n methods: {\r\n select: function(page) {\r\n this.setPage(Number(page));\r\n },\r\n\r\n first: function() {\r\n this.page = 1;\r\n this.setPage(1);\r\n },\r\n\r\n prev: function() {\r\n var page = this.page - 1;\r\n if (page < 1) page = 1;\r\n if (page > this.data.pages) page = this.data.pages;\r\n this.page = page;\r\n this.setPage(page);\r\n },\r\n\r\n next: function() {\r\n var page = this.page + 1;\r\n if (page < 1) page = 1;\r\n if (page > this.data.pages) page = this.data.pages;\r\n this.page = page;\r\n this.setPage(page);\r\n },\r\n\r\n last: function() {\r\n var page = this.data.pages;\r\n this.page = page;\r\n this.setPage(page);\r\n },\r\n\r\n sort: function(prop, dir) {\r\n this.props.sortOn = prop;\r\n this.props.sortDir = (dir && dir.toLowerCase() == 'desc' ? 'desc' : 'asc');\r\n this._update();\r\n }\r\n },\r\n\r\n render: function(node) {\r\n this.items = [];\r\n this.filtered = [];\r\n\r\n if (this.props.data) {\r\n this.setData(this.props.data);\r\n this._update();\r\n }\r\n\r\n this.$parse();\r\n },\r\n\r\n beforeUpdate: function(idents) {\r\n if (this.props.filter) {\r\n this._needUpdate = !this.$canSkip({\r\n idents: dmx.getIdents(this.props.filter)\r\n }, idents);\r\n }\r\n },\r\n\r\n update: function(props, fields) {\r\n if (fields.has('data')) {\r\n this.setData(this.props.data);\r\n }\r\n\r\n if (fields.has('page')) {\r\n this.setPage(this.props.page);\r\n }\r\n\r\n if (fields.size) {\r\n // if any prop was updated\r\n this._needUpdate = true;\r\n }\r\n },\r\n\r\n updated: function() {\r\n if (this._needUpdate) this._update();\r\n },\r\n\r\n _update: function() {\r\n this._needUpdate = false;\r\n\r\n this.filtered = this.items.filter(item => {\r\n if (!this.props.filter) return true;\r\n return dmx.parse(this.props.filter, dmx.DataScope(item, this));\r\n });\r\n\r\n if (this.props.sortOn) {\r\n let on = this.props.sortOn;\r\n let dir = this.props.sortDir.toLowerCase()\r\n let rev = dir == 'desc';\r\n \r\n this.filtered.sort((a, b) => {\r\n if (rev) {\r\n return a[on] > b[on] ? -1 : a[on] < b[on] ? 1 : 0;\r\n } else {\r\n return a[on] < b[on] ? -1 : a[on] > b[on] ? 1 : 0;\r\n }\r\n });\r\n \r\n this.set('sort', { on, dir });\r\n }\r\n\r\n if (this.filtered.length) {\r\n let pageSize = this.props.pageSize;\r\n\r\n this.set('pages', pageSize ? Math.ceil(this.filtered.length / pageSize) : 1);\r\n } else {\r\n this.set('pages', 1);\r\n }\r\n\r\n this.set('items', this.filtered.length);\r\n\r\n this.setPage(this.props.page);\r\n },\r\n\r\n setData: function(data) {\r\n this.items = dmx.repeatItems(data).map(item => {\r\n item = dmx.clone(item);\r\n delete item.$value;\r\n delete item.$index;\r\n delete item.$key;\r\n return item;\r\n });\r\n },\r\n\r\n setPage: function(page) {\r\n const size = +this.props.pageSize;\r\n const pages = this.data.pages;\r\n\r\n page = page < 1 ? 1 : page > pages ? pages : page;\r\n\r\n this.set('page', page);\r\n this.set('data', size ? this.filtered.splice((page - 1) * size, size) : this.filtered);\r\n this.set('has', {\r\n first: page > 1,\r\n prev: page > 1,\r\n next: page < pages,\r\n last: page < pages\r\n });\r\n }\r\n});\r\n","dmx.Component('data-detail', {\r\n\r\n initialData: {\r\n data: {}\r\n },\r\n\r\n attributes: {\r\n data: {\r\n type: Array,\r\n default: []\r\n },\r\n\r\n key: {\r\n type: String\r\n },\r\n\r\n value: {\r\n type: [String, Number]\r\n }\r\n },\r\n\r\n methods: {\r\n select: function(value) {\r\n this.props.value = value;\r\n this.select(value, true);\r\n }\r\n },\r\n\r\n render: function(node) {\r\n this.items = [];\r\n this.setData(this.props.data);\r\n this.select(this.props.value);\r\n this.$parse();\r\n },\r\n\r\n update: function(props, fields) {\r\n if (fields.has('data')) {\r\n this.setData(this.props.data);\r\n this.select(this.props.value);\r\n } else if (props.value !== this.props.value) {\r\n this.select(this.props.value, true);\r\n }\r\n },\r\n\r\n setData: function(data) {\r\n this.items = [];\r\n\r\n if (data && typeof data == 'object') {\r\n if (Array.isArray(data)) {\r\n this.items = data.map(function(item) {\r\n return (typeof item === 'object') ? item : { $value: item };\r\n });\r\n } else {\r\n for (var key in data) {\r\n if (!data.hasOwnProperty(key)) continue;\r\n this.items.push({ $key: key, $value: data[key] });\r\n }\r\n }\r\n }\r\n },\r\n\r\n select: function(value, reset) {\r\n var index = this.items.findIndex(function(item) {\r\n return item[this.props.key] === value;\r\n }, this);\r\n\r\n this.set('data', this.items[index] || null);\r\n\r\n if (reset) {\r\n var node = this.$node;\r\n\r\n requestAnimationFrame(function() {\r\n var forms = node.querySelectorAll('form');\r\n\r\n for (var i = 0; i < forms.length; i++) {\r\n forms[i].reset();\r\n }\r\n });\r\n }\r\n }\r\n\r\n});\r\n","dmx.Component('data-iterator', {\r\n\r\n initialData: {\r\n index: -1,\r\n value: null,\r\n has: {\r\n first: false,\r\n prev: false,\r\n next: false,\r\n last: false\r\n }\r\n },\r\n\r\n attributes: {\r\n data: {\r\n type: Array,\r\n default: []\r\n },\r\n\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n\r\n loop: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n\r\n methods: {\r\n first: function() {\r\n this.first();\r\n },\r\n\r\n prev: function() {\r\n this.prev();\r\n },\r\n\r\n next: function() {\r\n this.next();\r\n },\r\n\r\n last: function() {\r\n this.last();\r\n },\r\n\r\n random: function() {\r\n this.random();\r\n },\r\n\r\n select: function(index) {\r\n this.select(index);\r\n }\r\n },\r\n\r\n render: function(node) {\r\n this.items = [];\r\n this.setData(this.props.data);\r\n this.select(this.props.index);\r\n this.$parse();\r\n },\r\n\r\n update: function(props, fields) {\r\n if (fields.has('data')) {\r\n this.setData(this.props.data);\r\n this.select(this.props.index);\r\n } else if (props.index !== this.props.index) {\r\n this.select(this.props.index);\r\n }\r\n },\r\n\r\n setData: function(data) {\r\n if (data) {\r\n if (Array.isArray(data)) {\r\n this.items = data;\r\n } else {\r\n console.warn('Iterator data is not array but a ' + (typeof data));\r\n }\r\n }\r\n },\r\n\r\n first: function() {\r\n if (this.items.length) {\r\n this.select(0);\r\n }\r\n },\r\n\r\n prev: function() {\r\n if (this.items.length) {\r\n index = this.data.index - 1;\r\n if (index < 0 && this.props.loop) {\r\n index = this.items.length - 1;\r\n }\r\n this.select(index);\r\n }\r\n },\r\n\r\n next: function() {\r\n if (this.items.length) {\r\n index = this.data.index + 1;\r\n if (index >= this.items.length && this.props.loop) {\r\n index = 0;\r\n }\r\n this.select(index);\r\n }\r\n },\r\n\r\n last: function() {\r\n if (this.items.length) {\r\n this.select(this.items.length - 1);\r\n }\r\n },\r\n\r\n random: function() {\r\n if (this.items.length) {\r\n this.select(Math.floor(this.items.length * Math.random()));\r\n }\r\n },\r\n\r\n select: function(index) {\r\n index = parseInt(index, 10);\r\n\r\n if (this.items.length) {\r\n var last = this.items.length - 1;\r\n if (index < 0) index = 0;\r\n if (index >= this.items.length) index = last;\r\n this.set('index', index);\r\n this.set('value', this.items[index]);\r\n this.set('has', {\r\n first: index > 0,\r\n prev: index > 0,\r\n next: index < last,\r\n last: index < last\r\n });\r\n } else {\r\n this.set('index', -1);\r\n this.set('value', null);\r\n this.set('has', {\r\n first: false,\r\n prev: false,\r\n next: false,\r\n last: false\r\n });\r\n }\r\n }\r\n\r\n});\r\n"]}