UNPKG

6.5 kBJavaScriptView Raw
1"use strict";
2/*!
3 * Simple Node Mobile Portal
4 * Copyright(c) 2012-2017 Faisal(admin@simpleportaljs.com)
5 *
6 * MIT Licensed
7 */
8var simpleportal=require("./../simpleportal"),Template=require("./../util/template"),template=require("./template"),events=require("events"),util=require("util"),fs=require("fs"),simpleportalUtil=require("./../util"),TemplateUtils=require("./../template/util");var JSONEditor=function(b,c){var a=this;a.init(b,c);return a};util.inherits(JSONEditor,events.EventEmitter);JSONEditor.DEFAULTS={title:"JSON Editor",name:"jsoneditor",uri:"/jsoneditor/",root:simpleportal.resourcesdir+"/settings",cdndir:simpleportal.resourcesdir+"/cdn",index:"index.ejs",form1:"configuration",form:"tabbedconfiguration",template:"ejs",fields:[]};JSONEditor.prototype.activate=function(b){var a=this;var c=true;if(!b){c=false}a.active=c};JSONEditor.prototype.init=function(b,c){var a=this;a.options=simpleportalUtil.clone(JSONEditor.DEFAULTS);if(b){a.options=simpleportalUtil.extendJSON(a.options,b)}if(a.options.root){a.options.templatedir=a.options.root+"/templates"}else{throw Error("JSON Editor need the root folder to proceed!")}if(a.options.jsonfile){a.jsonfile=a.options.jsonfile}if(a.options.ext_jsonfile){a.ext_jsonfile=a.options.ext_jsonfile}a.jsonobject={};a.defaultjsonobject={};a.editorsettings={};a.editorsettings.name=(a.options.name||"jsoneditor");a.editorsettings.header=(a.options.title||"Configuration / JSON Editor");if(a.options.url){a.editorsettings.url=(a.options.url)}else{a.editorsettings.url=(a.options.uri||"/")+"/update"}a.editorsettings.rooturl=(a.options.uri||"/");a.editorsettings.formURL=(a.options.uri||"/")+"/templates/"+a.options.form||"configuration";a.editorsettings.rootfield=a.options.rootfield;a.editorsettings.fields=a.options.fields||[];if(c){a.defaultjsonobject=simpleportalUtil.extendJSON({},c);a.updateJSONObject(a.defaultjsonobject)}a.active=true;events.EventEmitter.call(a)};JSONEditor.prototype.updateFieldFromJSONObject=function(b){var a=this;if(!a.defaultjsonobject){a.defaultjsonobject={}}a.defaultjsonobject=simpleportalUtil.extendJSON(a.defaultjsonobject,b);a.editorsettings.fields=TemplateUtils.getFieldFromObject(a.defaultjsonobject);a.updateJSONObject(a.defaultjsonobject)};JSONEditor.prototype.updateFields=function(b){var a=this;a.editorsettings.fields=b;a.updateJSONObject(a.defaultjsonobject)};JSONEditor.prototype.getFieldSetting=function(b){var a=this;return simpleportalUtil.getJSONObject(a.getEditorSettings().fields,"field",b)};JSONEditor.prototype.updateJSONObject=function(c){var j=this;j.jsonobject={};var f={general:[]};var a=simpleportalUtil.flattenJSON(c,"__");if(c){for(var d in j.editorsettings.fields){var h=j.editorsettings.fields[d];var e=h.field;if(j.options.rootfield&&h.field){e=h.field.replace(j.options.rootfield+"__","")}if(typeof a[e]=="object"&&a[e].id){j.jsonobject[h.field]=a[e].id}else{if(a[e]){j.jsonobject[h.field]=a[e]}else{if(typeof a[h.field]=="object"&&a[h.field].id){j.jsonobject[h.field]=a[h.field].id}else{j.jsonobject[h.field]=a[h.field]}}}if(h.field.indexOf("__")!=-1){var b=h.field.substring(0,h.field.indexOf("__"));if(!f[b]){f[b]=[]}f[b].push(h)}else{f.general.push(h)}}}var g=[];for(var d in f){if(!f[d]||f[d].length==0){console.log("Skipping tab no fields found!!")}else{g.push({id:d,caption:d,fields:f[d]})}}j.tabs=g;j.editorsettings.tabs=g;return j};JSONEditor.prototype.getEditorSettings=function(b){var a=this;return a.editorsettings};JSONEditor.prototype.getJSONObject=function(d,c,b){var a=this;if(d){return simpleportalUtil.flattenJSON(a.jsonobject,"__")}else{return a.jsonobject}};JSONEditor.prototype.getJSONDefaults=function(b){var a=this;if(!b||!a._defaults||!a._defaults[b]){return null}return a._defaults[b]};JSONEditor.prototype.addJSONDefaults=function(b,c){var a=this;if(!a._defaults){a._defaults={}}a._defaults[b]=c};JSONEditor.prototype.getObject=function(e,d,c){var a=this;var b=simpleportalUtil.clone(a.editorsettings);if(!e){b.record=a.getJSONObject(a.jsonobject[d])}else{b.record=a.getJSONObject(e)}if(d){b.name=d;b.fields=TemplateUtils.getFieldFromObject(a.getJSONDefaults(d))}return b};JSONEditor.prototype.renderTemplate=function(e,f,c){var a=this;var d={file:a.getTemplatePath(e),data:f};var b=new Template(d);b.render(c,function(g,h){if(typeof c=="function"){c(g,h)}else{if(g){c.send(500,null,g)}else{b.sendToResponse(c)}}})};JSONEditor.prototype.getTemplatePath=function(b){var a=this;return simpleportalUtil.getServerPath(a.options.templatedir+"/"+b+".ejs")};JSONEditor.prototype.render=function(c,b){var a=this;a.renderTemplate("index",c,b)};JSONEditor.prototype.getUpdatedObject=function(d,f,b,h){var a=this;var c={};for(var e in d){var g=simpleportalUtil.getJSONObject(b,"field",e);if(g&&!g.disabled){if(typeof d[e]=="object"&&d[e].id){if(f[e]!=d[e].id){c[e]=d[e].id}}else{if(f[e]!=d[e]&&d[e]!=""){c[e]=d[e]}}if(g.type=="checkbox"&&c[e]=="1"){c[e]=true}else{if(g.type=="checkbox"&&c[e]!="1"){if(f.hasOwnProperty(e)){c[e]=false}}else{if(g.multiple&&typeof d[e]=="string"){c[e]=d[e].trim().replace("\n","").split(",")}else{if(g.multiple&&typeof d[e]=="object"){c[e]=d[e]}}}}}}if(h){h(null,c)}return c};JSONEditor.prototype.updateRecord=function(b,c){var a=this;a.jsonobject=simpleportalUtil.extendJSON(a.jsonobject,b);if(c){c(null,jsonchanges_unflattened)}};JSONEditor.prototype.update=function(c,g){var a=this;var b={};for(var d in c){var f=simpleportalUtil.getJSONObject(a.editorsettings.fields,"field",d);if(f&&!f.disabled){if(typeof c[d]=="object"&&c[d].id){if(a.jsonobject[d]!=c[d].id){b[d]=c[d].id}}else{if(a.jsonobject[d]!=c[d]&&c[d]!=""){b[d]=c[d]}}if(f.type=="checkbox"&&b[d]=="1"){b[d]=true}else{if(f.type=="checkbox"&&b[d]!="1"){if(a.jsonobject.hasOwnProperty(d)){b[d]=false}}else{if(f.multiple&&typeof c[d]=="string"){b[d]=c[d].trim().replace("\n","").split(",")}else{if(f.multiple&&typeof c[d]=="object"){b[d]=c[d]}}}}}}var e=simpleportalUtil.unFlattenJSON(b,"__");a.jsonobject=simpleportalUtil.extendJSON(a.jsonobject,b);if(g){g(null,e)}};JSONEditor.prototype.save=function(c,b,f){var a=this;if(!b&&a.onsave){a.onsave(c)}else{if(a.ext_jsonfile&&c&&Object.keys(c).length>0){var d=simpleportalUtil.clone(c);if(fs.existsSync(a.ext_jsonfile)){var e=simpleportalUtil.readJSONFile(a.ext_jsonfile);d=simpleportalUtil.extendJSON(e,d)}if(f){return fs.writeFileSync(a.ext_jsonfile,JSON.stringify(d,null,"\t"))}else{fs.writeFile(a.ext_jsonfile,JSON.stringify(d,null,"\t"),f)}}}};JSONEditor.prototype.read=function(){var a=this};module.exports=JSONEditor;
\No newline at end of file