UNPKG

zettapi_client

Version:

Admin panel and client-side CRUD operations in angular to use with zettapi_server rest api to get started quickly in any CMS project.

101 lines (91 loc) 2.51 kB
app.service('$util', function () { this.flattenArray = function (items, json) { var table = [], keys = [], key, data = []; items.forEach(function (item) { var row = flatten(item); for (key in row) { if (keys.indexOf(key) !== -1) continue; keys.push(key); } table.push(row); }); if (!json) data.push(keys); table.forEach(function (row) { var datum; if (json) { datum = row; } else { datum = []; keys.forEach(function (key) { if (typeof row[key] === 'undefined') datum.push(""); else datum.push(row[key]); }); } data.push(datum); }); return data; }; this.setFormFiles = setFormFiles; this.skip = function () { var callback; for (var i = arguments.length - 1; i >= 0; i--) { if (typeof arguments[i] !== 'function') continue; callback = arguments[i]; break; } if (typeof callback === 'function') return callback(); }; function setFormFiles(fd, item, parent) { //ignore if current object has nothing or is a string if (!item || typeof item === 'string') return; //array if (item.length) { for (var i = 0; i < item.length; i++) { setFormFiles(fd, item[i], parent + '[' + i + ']'); } } //not array else { //for each nested object for (var property in item) { if (typeof item[property] !== 'object') continue; //file object if (property === 'newFile') { for (var file in item[property]) { var filePath = parent ? parent + '.' + file : file; fd.append(filePath, item[property][file]); } } //non file object else { setFormFiles(fd, item[property], parent ? parent + '.' + property : property); } } } } function flatten(data) { var result = {}; function recurse(cur, prop) { if (Object(cur) !== cur) { result[prop] = cur; } else if (Array.isArray(cur)) { for (var i = 0, l = cur.length; i < l; i++) recurse(cur[i], prop + "[" + i + "]"); if (l === 0) result[prop] = []; } else { var isEmpty = true; for (var p in cur) { isEmpty = false; recurse(cur[p], prop ? prop + "." + p : p); } if (isEmpty && prop) result[prop] = {}; } } recurse(data, ""); return result; } });