diff --git a/src/config.js b/src/config.js new file mode 100644 index 0000000..f80a0b2 --- /dev/null +++ b/src/config.js @@ -0,0 +1,5 @@ +let config = { + templatePath: __dirname + "\\src\\templates", + pagePath: __dirname + "\\src\\pages", +}; +module.exports = config; diff --git a/src/engine.js b/src/engine.js index a423dc5..ecc46f3 100644 --- a/src/engine.js +++ b/src/engine.js @@ -1,7 +1,10 @@ const fs = require("fs"); -const path = require("path"); -var appdir = path.join(__dirname, ".."); -var app = {}; +//const path = require("path"); +//let appdir = path.join(__dirname, ".."); +let app = {}; + +app.config = require("./config"); + function escapeRegExp(string) { return string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); @@ -11,25 +14,23 @@ function replaceAll(str, find, replace) { return str.replace(new RegExp(escapeRegExp(find), "g"), replace); } -app.CONST = function(pagecode,constant,callback) -{ - if(pagecode[constant] !== undefined) - { - callback(pagecode,pagecode[constant]); - } - else - { +app.CONST = function (pagecode, constant, callback) { + if (pagecode[constant] !== undefined) { + callback(pagecode, pagecode[constant]); + } else { return 0; } -} - +}; app.render = function (pagecode, templatecode) { + //let result = ""; - - result = ""; - - if (!pagecode == JSON) pagecode = JSON.parse(pagecode); + //if (!pagecode == JSON) pagecode = JSON.parse(pagecode); + if (pagecode != null || pagecode != undefined) { + try { + pagecode = JSON.parse(pagecode); + } catch{} + } //TODO if (templatecode === null || templatecode == undefined) { @@ -37,23 +38,23 @@ app.render = function (pagecode, templatecode) { } app.CONST(pagecode, "_STYLES_", (pagecode, value) => { - var rex = /
(.|\n|\t|\r)*?<\/head>/; - var header = templatecode.match(rex); + let rex = /(.|\n|\t|\r)*?<\/head>/; + let header = templatecode.match(rex); header = header[0].replace("", ""); value.forEach((element) => { header += `\n`; }); header += "\n"; - // console.log(header); + // console.log(header); templatecode = templatecode.replace(/(.|\n|\t|\r)*?<\/head>/, header); + // replaceAll(templatecode,rex,value) }); + for (let i in pagecode) { + let value = undefined; - for (var i in pagecode) { - var value = undefined; - - var re = new RegExp(/\d*_([A-Z]|[a-z])\w*_/g); + let re = new RegExp(/\d*_([A-Z]|[a-z])\w*_/g); if (re.test(i)) continue; value = pagecode[i].toString(); diff --git a/src/jsonMerger.js b/src/jsonMerger.js new file mode 100644 index 0000000..2c304b9 --- /dev/null +++ b/src/jsonMerger.js @@ -0,0 +1,38 @@ +function mergeJson(org, ext) { + // let placeholder = undefined; + if (org !== JSON) { + try { + org = JSON.parse(org); + } catch (error) {} + } + if (ext !== JSON) { + try { + ext = JSON.parse(ext); + } catch (error) {} + } + + Object.keys(ext).forEach(function (key) { + let value = ext[key]; + + if (Array.isArray(ext[key])) { + if (Array.isArray(org[key])) { + value.forEach((item) => { + org[key].push(item); + }); + } + } else { + org[key] = value; + } + }); + + return org; +} + +function mergeJsons(org, ...ext) { + ext.forEach((element) => { + org = mergeJson(org, element); + }); + return org; +} + +module.exports = { mergeJson, mergeJsons }; diff --git a/src/scriptExecuter.js b/src/scriptExecuter.js new file mode 100644 index 0000000..47f4cc6 --- /dev/null +++ b/src/scriptExecuter.js @@ -0,0 +1,30 @@ +function Added() { + let outString = ""; + + function out(arg) { + outString += arg; + } + + function outLine(arg) { + outString += "\n" + arg; + } +} + +function exec(script) { + script = "".concat( + Added.toString().replace(/^function\s*\S+\s*\([^)]*\)\s*\{|\}$/g, ""), + script + ); + + script += "\n return outString;"; + + let F = new Function(script); + + return F(); +} + +module.exports = exec; + +/* + +*/ diff --git a/test/core.jste.test.js b/test/core.jste.test.js new file mode 100644 index 0000000..d6753ff --- /dev/null +++ b/test/core.jste.test.js @@ -0,0 +1,14 @@ + +let core_render = require("./core.render.test"); +let core_scriptexec = require("./scriptexec.jste.test"); + +function test() +{ + describe("JSTE CORE", function () { + + core_render(); + core_scriptexec(); + }); +} + +module.exports = test; \ No newline at end of file diff --git a/test/core.render.test.js b/test/core.render.test.js new file mode 100644 index 0000000..3b940d5 --- /dev/null +++ b/test/core.render.test.js @@ -0,0 +1,66 @@ +let libfolder = "../src/"; +let JSSTE_Engine = require(libfolder); + +function test() { + describe("render", function () { + it(" should return Hallo! -> JSON as Page", function () { + let template = "<[VAR]>!"; + let page = { VAR: "Hallo" }; + let result = JSSTE_Engine.render(page, template); + result.should.equal("Hallo!"); + }); + + it("should return Hallo! -> String as Page", function () { + let template = "<[VAR]>!"; + let page = '{"VAR":"Hallo"}'; + let result = JSSTE_Engine.render(page, template); + result.should.equal("Hallo!"); + }); + + it("should retrun one var two times", function () { + let template = "<[VAR]><[VAR]>!"; + let page = { VAR: "Hallo" }; + let result = JSSTE_Engine.render(page, template); + result.should.equal("HalloHallo!"); + }); + + it("should retrun EXAMPLE EXAMPLE", function () { + let template = "<[VAR]> <[VAR]>"; + let page = { VAR: "EXAMPLE" }; + let result = JSSTE_Engine.render(page, template); + result.should.equal("EXAMPLE EXAMPLE"); + }); + + it("should delete useless var", function () { + let template = "<[VAR]><[VAR2]><[VAR]>"; + let page = { VAR: "EXAMPLE" }; + let result = JSSTE_Engine.render(page, template); + result.should.equal("EXAMPLEEXAMPLE"); + }); + + it("should not rendern _VAR_", function () { + let template = "<[_VAR_]>"; + let page = { VAR: "EXAMPLE" }; + let result = JSSTE_Engine.render(page, template); + result.should.equal("<[_VAR_]>"); + }); + + it("should render in href a tag", function () { + let template = ""; + let page = { LINK: "www.nodejs.com" }; + let result = JSSTE_Engine.render(page, template); + + result.should.equal(""); + }); + + it("should render a tag", function () { + let template = "<[VAR]>"; + let page = { VAR: "EXAMPLE", LINK: "www.nodejs.com" }; + let result = JSSTE_Engine.render(page, template); + + result.should.equal("EXAMPLE"); + }); + }); +} + +module.exports = test; diff --git a/test/jsonMerger.test.js b/test/jsonMerger.test.js new file mode 100644 index 0000000..e0a7383 --- /dev/null +++ b/test/jsonMerger.test.js @@ -0,0 +1,59 @@ +let libfolder = "../src/"; +let jsonmerger = require(libfolder + "jsonMerger"); + +function test() { + describe("Test JsonMerger", function () { + it("should return merged json", function () { + let json1 = { a: "wert1" }; + let json2 = { b: "wert2" }; + + let result = jsonmerger.mergeJson(json1, json2); + result = JSON.stringify(result); + result.should.equal(JSON.stringify({ a: "wert1", b: "wert2" })); + }); + + it("should return merged json override b", function () { + let json1 = { a: "wert1", b: "wert3" }; + let json2 = { b: "wert2" }; + + let result = jsonmerger.mergeJson(json1, json2); + result = JSON.stringify(result); + result.should.equal(JSON.stringify({ a: "wert1", b: "wert2" })); + }); + + it("should merge 3 JSONs ", function () { + let json1 = { a: "wert1" }; + let json2 = { b: "wert2" }; + let json3 = { c: "wert3" }; + + let result = jsonmerger.mergeJsons(json1, json2, json3); + result = JSON.stringify(result); + result.should.equal( + JSON.stringify({ a: "wert1", b: "wert2", c: "wert3" }) + ); + }); + it("should merge 4 JSONs", function () { + let json1 = { a: "wert1" }; + let json2 = { b: "wert2" }; + let json3 = { c: "wert3" }; + let json4 = { d: "wert4" }; + + let result = jsonmerger.mergeJsons(json1, json2, json3, json4); + result = JSON.stringify(result); + result.should.equal( + JSON.stringify({ a: "wert1", b: "wert2", c: "wert3", d: "wert4" }) + ); + }); + + it("should merge 2 jsons with array", function () { + let json1 = { a: ["a", "b"] }; + let json2 = { a: ["c"], b: "hallo" }; + + let result = jsonmerger.mergeJsons(json1, json2); + result = JSON.stringify(result); + result.should.equal(JSON.stringify({ a: ["a", "b", "c"], b: "hallo" })); + }); + }); +} + +module.exports = test; diff --git a/test/scriptexec.jste.test.js b/test/scriptexec.jste.test.js new file mode 100644 index 0000000..edb97f6 --- /dev/null +++ b/test/scriptexec.jste.test.js @@ -0,0 +1,26 @@ +let libfolder = "../src"; +let scriptExecuter = require(libfolder + "/scriptExecuter"); +function test() { + describe("test scriptexecuter", () => { + it("should return script result 'HalloWelt'", function () { + let script = "return 'HalloWelt';"; + + let result = scriptExecuter(script); + result.should.equal("HalloWelt"); + }); + it("should return script result out()", function () { + let script = "out('HalloWelt')"; + + let result = scriptExecuter(script); + result.should.equal("HalloWelt"); + }); + + it("should return script result outLine()", function () { + let script = "outLine('HalloWelt'); outLine('HalloWelt')"; + + let result = scriptExecuter(script); + result.should.equal("\nHalloWelt\nHalloWelt"); + }); + }); +} +module.exports = test; diff --git a/test/test.js b/test/test.js deleted file mode 100644 index 42aaaab..0000000 --- a/test/test.js +++ /dev/null @@ -1,76 +0,0 @@ -const JSSTE = require("../src"); -const engine = require("../src/engine"); -var assert = require("assert"); -var expect = require("chai").expect; -var should = require("chai").should(); - -describe("test var rendering", function () { - it("should retrun EXAMPLE", function () { - var result = JSSTE.render({ VAR: "EXAMPLE" }, "<[VAR]>"); - result.should.equal("EXAMPLE"); - }); - it("should retrun EXAMPLEEXAMPLE", function () { - var result = JSSTE.render({ VAR: "EXAMPLE" }, "<[VAR]><[VAR]>"); - result.should.equal("EXAMPLEEXAMPLE"); - }); - it("should retrun EXAMPLE EXAMPLE", function () { - var result = JSSTE.render({ VAR: "EXAMPLE" }, "<[VAR]> <[VAR]>"); - result.should.equal("EXAMPLE EXAMPLE"); - }); - it("should delete useless var", function () { - var result = JSSTE.render({ VAR: "EXAMPLE" }, "<[VAR]><[VAR2]><[VAR]>"); - result.should.equal("EXAMPLEEXAMPLE"); - }); - it("should render in HTML tag", function () { - var result = JSSTE.render({ VAR: "EXAMPLE" }, "<[VAR]>"); - result.should.equal("EXAMPLE"); - }); - it("should render in href a tag", function () { - var result = JSSTE.render({ LINK: "www.nodejs.com" }, ""); - result.should.equal(""); - }); - - it("should render a tag", function () { - var result = JSSTE.render({VAR: "EXAMPLE", LINK: "www.nodejs.com" }, "<[VAR]>"); - result.should.equal("EXAMPLE"); - }); -}); - -describe("test Varnames",function (){ - it("should render varname: VAR", function () { - var result = JSSTE.render({ VAR: "EXAMPLE" }, "<[VAR]>"); - result.should.equal("EXAMPLE"); - }); - it("should render varname: Var", function () { - var result = JSSTE.render({ Var: "EXAMPLE" }, "<[Var]>"); - result.should.equal("EXAMPLE"); - }); - it("should render varname: vAr", function () { - var result = JSSTE.render({ vAr: "EXAMPLE" }, "<[vAr]>"); - result.should.equal("EXAMPLE"); - }); - it("should render varname: vaR", function () { - var result = JSSTE.render({ vaR: "EXAMPLE" }, "<[vaR]>"); - result.should.equal("EXAMPLE"); - }); - it("should render varname: var", function () { - var result = JSSTE.render({ var: "EXAMPLE" }, "<[var]>"); - result.should.equal("EXAMPLE"); - }); - it("should not rende _VAR_", function () { - var result = JSSTE.render({ _VAR_: "EXAMPLE" }, "<[_VAR_]>"); - result.should.equal("<[_VAR_]>"); - }); - it("should not render _var_", function () { - var result = JSSTE.render({ _var_: "EXAMPLE" }, "<[_var_]>"); - result.should.equal("<[_var_]>"); - }); - it("should impliment _STYLE_", function () { - var result = JSSTE.render({ _STYLES_: ["EXAMPLE","EXAMPLE2"] }, "