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
JavaScript
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;
}
});