mirror of
https://github.com/OMGeeky/andors-trail.git
synced 2025-12-30 16:33:33 +01:00
139 lines
2.8 KiB
JavaScript
139 lines
2.8 KiB
JavaScript
var ATEditor = (function(ATEditor, _) {
|
|
|
|
function deepClone(o) {
|
|
// https://github.com/documentcloud/underscore/issues/162
|
|
return JSON.parse(JSON.stringify(o));
|
|
}
|
|
|
|
function removeDefaults(o, defaults) {
|
|
for (var key in defaults) {
|
|
if (o[key] === defaults[key]) {
|
|
delete o[key];
|
|
}
|
|
}
|
|
}
|
|
|
|
function copyDefaults(o, defaults) {
|
|
var key;
|
|
for (key in defaults) {
|
|
var v = defaults[key];
|
|
if ((!o[key]) && (o[key] !== 0)) {
|
|
o[key] = v;
|
|
} else if (_.isObject(v)) {
|
|
copyDefaults(o[key], v);
|
|
}
|
|
}
|
|
}
|
|
|
|
function removeAngularFields(o) {
|
|
var key;
|
|
for (key in o) {
|
|
var v = o[key];
|
|
if (key.charAt(0) === '$') {
|
|
delete o[key];
|
|
} else if (_.isArray(v) || _.isObject(v)) {
|
|
removeAngularFields(v);
|
|
}
|
|
}
|
|
}
|
|
function compact(o) {
|
|
if (!o) { return null; }
|
|
var key;
|
|
for (key in o) {
|
|
var v = o[key];
|
|
if (_.isArray(v)) {
|
|
v = _.map(v, compact);
|
|
} else if (_.isObject(v)) {
|
|
v = compact(v);
|
|
}
|
|
if (!hasValues(v)) {
|
|
delete o[key];
|
|
} else {
|
|
o[key] = v;
|
|
}
|
|
}
|
|
if (!hasValues(o)) { return null; }
|
|
return o;
|
|
}
|
|
|
|
function hasValues(o) {
|
|
if (_.isArray(o)) {
|
|
return _.some(o, hasValues);
|
|
} else if (_.isObject(o)) {
|
|
var key;
|
|
for (key in o) {
|
|
if (hasValues(o[key])) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
return o;
|
|
}
|
|
|
|
function isNumber(s) {
|
|
if (!_.isString(s)) { return false; }
|
|
var v = parseInt(s);
|
|
if (_.isNaN(v)) { return false; }
|
|
return (v.toString() == s);
|
|
}
|
|
|
|
function convertStringsToIntegers(o) {
|
|
var key;
|
|
for (key in o) {
|
|
var v = o[key];
|
|
if (isNumber(v)) {
|
|
o[key] = parseInt(v);
|
|
} else if (_.isArray(v)) {
|
|
convertStringsToIntegers(v);
|
|
} else if (_.isObject(v)) {
|
|
convertStringsToIntegers(v);
|
|
}
|
|
}
|
|
}
|
|
|
|
function convertIntegersToStrings(o) {
|
|
var key;
|
|
for (key in o) {
|
|
var v = o[key];
|
|
if (_.isNumber(v)) {
|
|
o[key] = String(v);
|
|
} else if (_.isArray(v)) {
|
|
convertIntegersToStrings(v);
|
|
} else if (_.isObject(v)) {
|
|
convertIntegersToStrings(v);
|
|
}
|
|
}
|
|
}
|
|
|
|
_.toBool = function(b) {
|
|
return b ? true : false;
|
|
};
|
|
|
|
function getUrlRelativeToBaseSrcDir(relativeUrl) {
|
|
var url = document.location.href;
|
|
var idx = url.lastIndexOf('#');
|
|
if (idx > 0) {
|
|
url = url.substring(0, idx);
|
|
}
|
|
url = url.substring(0, url.lastIndexOf('/'));
|
|
url = url.substring(0, url.lastIndexOf('/'));
|
|
url = url + "/" + relativeUrl;
|
|
return url;
|
|
}
|
|
|
|
ATEditor.utils = {
|
|
deepClone: deepClone
|
|
,removeDefaults: removeDefaults
|
|
,copyDefaults: copyDefaults
|
|
,removeAngularFields: removeAngularFields
|
|
,compact: compact
|
|
,hasValues: hasValues
|
|
,convertStringsToIntegers: convertStringsToIntegers
|
|
,convertIntegersToStrings: convertIntegersToStrings
|
|
,getUrlRelativeToBaseSrcDir: getUrlRelativeToBaseSrcDir
|
|
};
|
|
|
|
return ATEditor;
|
|
})(ATEditor || {}, _);
|