| @@ -17,7 +17,6 @@ | |||
| "type": "local" | |||
| } | |||
| ], | |||
| "hostingType": "wappler", | |||
| "projectServerModel": "node", | |||
| "runtime": "capacitor", | |||
| "webRootFolder": "/public", | |||
| @@ -29,10 +28,10 @@ | |||
| { | |||
| "name": "Development", | |||
| "remoteURL": "http://localhost:3000/", | |||
| "access": "local", | |||
| "targetType": "wappler" | |||
| "access": "local" | |||
| } | |||
| ], | |||
| "activeTarget": "Development", | |||
| "projectType": "web" | |||
| "projectType": "web", | |||
| "extensions": [] | |||
| } | |||
| @@ -0,0 +1,8 @@ | |||
| { | |||
| "debug": true, | |||
| "secret": "55XmluQ2OSLTa3N", | |||
| "cors": { | |||
| "origin": "*", | |||
| "methods": "GET,POST,DELETE,PATCH,PUT" | |||
| } | |||
| } | |||
| @@ -0,0 +1,566 @@ | |||
| { | |||
| "meta": { | |||
| "options": { | |||
| "linkedFile": "/views/dspec.ejs", | |||
| "linkedForm": "form1" | |||
| }, | |||
| "$_GET": [ | |||
| { | |||
| "type": "text", | |||
| "name": "id" | |||
| } | |||
| ], | |||
| "$_POST": [ | |||
| { | |||
| "type": "text", | |||
| "fieldName": "id", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| "exec": { | |||
| "steps": { | |||
| "name": "api", | |||
| "module": "api", | |||
| "action": "send", | |||
| "options": { | |||
| "url": "http://vapor.prelub.com/api/v1.0/designspecs/max/+$_GET.id", | |||
| "schema": [ | |||
| { | |||
| "type": "array", | |||
| "name": "data", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "reasonforchange" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "revisionlevel" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "boolean", | |||
| "name": "facrequired" | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "partnumber", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "description" | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "primarycustomer", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "replacedby", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "partcode", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "pickinglocation", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "createuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "weight" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "updatedate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "listprice" | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "replaces", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "secondaryvendorpartnumber" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "file" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "stdcost" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "primaryvendorpartnumber" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createdate" | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "packinglocation", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "secondaryvendor", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "primarycustomerpartnumber" | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "status", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "primaryvendor", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "number" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "comments" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "ppap" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "status", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createdate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "name" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "updatedate" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "approveuserid" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "workinstruction" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "note" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "createuserid" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "partnumberid" | |||
| }, | |||
| { | |||
| "type": "boolean", | |||
| "name": "faccompleted" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "headers", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "connection" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "content-length" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "content-type" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "date" | |||
| } | |||
| ] | |||
| } | |||
| ], | |||
| "data": { | |||
| "sort": "", | |||
| "dir": "", | |||
| "id": "{{$_GET.id}}" | |||
| } | |||
| }, | |||
| "output": true, | |||
| "meta": [ | |||
| { | |||
| "type": "array", | |||
| "name": "data", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "reasonforchange" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "revisionlevel" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "boolean", | |||
| "name": "facrequired" | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "partnumber", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "description" | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "primarycustomer", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "replacedby", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "partcode", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "pickinglocation", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "createuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "weight" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "updatedate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "listprice" | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "replaces", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "secondaryvendorpartnumber" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "file" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "stdcost" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "primaryvendorpartnumber" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createdate" | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "packinglocation", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "secondaryvendor", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "primarycustomerpartnumber" | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "status", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "primaryvendor", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "number" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "comments" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "ppap" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "status", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createdate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "name" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "updatedate" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "approveuserid" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "workinstruction" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "note" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "createuserid" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "partnumberid" | |||
| }, | |||
| { | |||
| "type": "boolean", | |||
| "name": "faccompleted" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "headers", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "connection" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "content-length" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "content-type" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "date" | |||
| } | |||
| ] | |||
| } | |||
| ], | |||
| "outputType": "object" | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,237 @@ | |||
| { | |||
| "meta": { | |||
| "options": { | |||
| "linkedFile": "/views/index.ejs", | |||
| "linkedForm": "form1" | |||
| }, | |||
| "$_POST": [ | |||
| { | |||
| "type": "text", | |||
| "fieldName": "partnumber", | |||
| "name": "partnumber" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "fieldName": "partcodes", | |||
| "name": "partcodes" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "fieldName": "text1", | |||
| "name": "text1" | |||
| } | |||
| ] | |||
| }, | |||
| "exec": { | |||
| "steps": { | |||
| "name": "api", | |||
| "module": "api", | |||
| "action": "send", | |||
| "options": { | |||
| "url": "http://vapor.prelub.com/api/v1.0/partcodes", | |||
| "schema": [ | |||
| { | |||
| "type": "array", | |||
| "name": "data", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "createuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "description" | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "parttype", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "ending" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createdate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "description" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "starting" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "updatedate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "name" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "createuserid" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "name" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "updatedate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createdate" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "headers", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "connection" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "content-length" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "content-type" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "date" | |||
| } | |||
| ] | |||
| } | |||
| ] | |||
| }, | |||
| "output": true, | |||
| "meta": [ | |||
| { | |||
| "type": "array", | |||
| "name": "data", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "createuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "description" | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "parttype", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "ending" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createdate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "description" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "starting" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "updatedate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "name" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "createuserid" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "name" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "updatedate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createdate" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "headers", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "connection" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "content-length" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "content-type" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "date" | |||
| } | |||
| ] | |||
| } | |||
| ], | |||
| "outputType": "object" | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,230 @@ | |||
| { | |||
| "name": "api", | |||
| "module": "api", | |||
| "action": "send", | |||
| "options": { | |||
| "url": "http://vapor.prelub.com/api/v1.0/parttypes", | |||
| "schema": [ | |||
| { | |||
| "type": "array", | |||
| "name": "data", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "name" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "updatedate" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "starting" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| }, | |||
| { | |||
| "type": "array", | |||
| "name": "partcodes", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "updatedate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createdate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "description" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "createuserid" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "name" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "parttype", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "createuserid" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createdate" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "ending" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "description" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "headers", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "connection" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "content-length" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "content-type" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "date" | |||
| } | |||
| ] | |||
| } | |||
| ] | |||
| }, | |||
| "output": true, | |||
| "meta": [ | |||
| { | |||
| "type": "array", | |||
| "name": "data", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "name" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "updatedate" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "starting" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| }, | |||
| { | |||
| "type": "array", | |||
| "name": "partcodes", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "updatedate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createdate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "description" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "createuserid" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "name" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "parttype", | |||
| "sub": [ | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "createuserid" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createdate" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "ending" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "description" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "headers", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "connection" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "content-length" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "content-type" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "date" | |||
| } | |||
| ] | |||
| } | |||
| ], | |||
| "outputType": "object" | |||
| } | |||
| @@ -0,0 +1,3 @@ | |||
| { | |||
| "exec": {} | |||
| } | |||
| @@ -0,0 +1,3 @@ | |||
| { | |||
| "exec": {} | |||
| } | |||
| @@ -0,0 +1,3 @@ | |||
| { | |||
| "exec": {} | |||
| } | |||
| @@ -0,0 +1,3 @@ | |||
| { | |||
| "exec": {} | |||
| } | |||
| @@ -0,0 +1,3 @@ | |||
| { | |||
| "exec": {} | |||
| } | |||
| @@ -0,0 +1,362 @@ | |||
| { | |||
| "meta": { | |||
| "options": { | |||
| "linkedFile": "/views/register.ejs", | |||
| "linkedForm": "register1" | |||
| }, | |||
| "$_POST": [ | |||
| { | |||
| "type": "text", | |||
| "fieldName": "firstname", | |||
| "options": { | |||
| "rules": { | |||
| "core:required": { | |||
| "param": "" | |||
| } | |||
| } | |||
| }, | |||
| "name": "firstname" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "fieldName": "lastname", | |||
| "options": { | |||
| "rules": { | |||
| "core:required": { | |||
| "param": "" | |||
| } | |||
| } | |||
| }, | |||
| "name": "lastname" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "fieldName": "email", | |||
| "options": { | |||
| "rules": { | |||
| "core:required": { | |||
| "param": "" | |||
| }, | |||
| "core:email": { | |||
| "param": "" | |||
| } | |||
| } | |||
| }, | |||
| "name": "email" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "fieldName": "username", | |||
| "options": { | |||
| "rules": { | |||
| "core:required": { | |||
| "param": "" | |||
| } | |||
| } | |||
| }, | |||
| "name": "username" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "fieldName": "password", | |||
| "options": { | |||
| "rules": { | |||
| "core:required": { | |||
| "param": "" | |||
| }, | |||
| "core:nowhitespace": { | |||
| "param": "" | |||
| } | |||
| } | |||
| }, | |||
| "name": "password" | |||
| }, | |||
| { | |||
| "type": "array", | |||
| "name": "roles", | |||
| "sub": [ | |||
| { | |||
| "type": "object", | |||
| "name": "defaultrole", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "id" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "description" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "name" | |||
| } | |||
| ] | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "fieldName": "confirmpassword", | |||
| "options": { | |||
| "rules": { | |||
| "core:required": { | |||
| "param": "" | |||
| }, | |||
| "core:equalTo": { | |||
| "param": "password" | |||
| } | |||
| } | |||
| }, | |||
| "name": "confirmpassword" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "fieldName": "productid", | |||
| "name": "productid" | |||
| } | |||
| ] | |||
| }, | |||
| "exec": { | |||
| "steps": [ | |||
| { | |||
| "name": "", | |||
| "module": "core", | |||
| "action": "condition", | |||
| "options": { | |||
| "if": "{{$_POST.productid.length()>0}}", | |||
| "then": { | |||
| "steps": { | |||
| "name": "bot", | |||
| "module": "core", | |||
| "action": "response", | |||
| "options": { | |||
| "status": 401, | |||
| "data": "Unauthorized Entry" | |||
| } | |||
| } | |||
| } | |||
| }, | |||
| "outputType": "boolean" | |||
| }, | |||
| { | |||
| "name": "insertUser", | |||
| "module": "api", | |||
| "action": "send", | |||
| "options": { | |||
| "url": "http://vapor.prelub.com/api/v1.0/users", | |||
| "method": "POST", | |||
| "data": { | |||
| "firstname": "{{$_POST.firstname}}", | |||
| "lastname": "{{$_POST.lastname}}", | |||
| "email": "{{$_POST.email}}", | |||
| "username": "{{$_POST.username}}", | |||
| "password": "{{$_POST.password}}", | |||
| "roles": [ | |||
| { | |||
| "id": 1, | |||
| "description": "Admin", | |||
| "name": "Admin" | |||
| } | |||
| ] | |||
| }, | |||
| "dataType": "json", | |||
| "schema": [ | |||
| { | |||
| "type": "object", | |||
| "name": "data", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "email" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "firstname" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| }, | |||
| { | |||
| "type": "array", | |||
| "name": "roles", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "updatedate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "description" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "name" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createdate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createuserid" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "lastname" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "createuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "password" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "username" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "headers", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "connection" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "content-length" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "content-type" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "date" | |||
| } | |||
| ] | |||
| } | |||
| ] | |||
| }, | |||
| "output": true, | |||
| "meta": [ | |||
| { | |||
| "type": "object", | |||
| "name": "data", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "email" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "firstname" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| }, | |||
| { | |||
| "type": "array", | |||
| "name": "roles", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "updatedate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "updateuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "description" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "name" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createdate" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "createuserid" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "id" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "lastname" | |||
| }, | |||
| { | |||
| "type": "number", | |||
| "name": "createuserid" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "password" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "username" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "type": "object", | |||
| "name": "headers", | |||
| "sub": [ | |||
| { | |||
| "type": "text", | |||
| "name": "connection" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "content-length" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "content-type" | |||
| }, | |||
| { | |||
| "type": "text", | |||
| "name": "date" | |||
| } | |||
| ] | |||
| } | |||
| ], | |||
| "outputType": "object" | |||
| } | |||
| ] | |||
| } | |||
| } | |||
| @@ -0,0 +1,8 @@ | |||
| { | |||
| "debug": true, | |||
| "secret": "55XmluQ2OSLTa3N", | |||
| "cors": { | |||
| "origin": "*", | |||
| "methods": "GET,POST,DELETE,PATCH,PUT" | |||
| } | |||
| } | |||
| @@ -4,6 +4,32 @@ | |||
| "path": "/", | |||
| "page": "index", | |||
| "routeType": "page", | |||
| "layout": "main", | |||
| "exec": "" | |||
| }, | |||
| { | |||
| "path": "/register", | |||
| "page": "register", | |||
| "layout": "main" | |||
| }, | |||
| { | |||
| "path": "/termsandconditions", | |||
| "page": "termsandconditions", | |||
| "layout": "main" | |||
| }, | |||
| { | |||
| "path": "/dspec", | |||
| "page": "dspec", | |||
| "layout": "main" | |||
| }, | |||
| { | |||
| "path": "/parttype", | |||
| "page": "parttype", | |||
| "layout": "main" | |||
| }, | |||
| { | |||
| "path": "/repeattest", | |||
| "page": "repeattest", | |||
| "layout": "main" | |||
| } | |||
| ] | |||
| @@ -0,0 +1,3 @@ | |||
| { | |||
| "exec": {} | |||
| } | |||
| @@ -256,9 +256,8 @@ App.prototype = { | |||
| switch (options.client) { | |||
| case 'couchdb': | |||
| const { host, port, user, password, database } = options.connection; | |||
| const nano = require('nano'); | |||
| global.db[name] = nano(`http://${user ? user + (password ? ':' + password : '') + '@' : ''}${host}${port ? ':' + port : ''}/${database}`); | |||
| global.db[name] = nano(options.connection); | |||
| global.db[name].client = options.client; | |||
| return global.db[name]; | |||
| @@ -118,9 +118,6 @@ module.exports = { | |||
| if (typeof obj == 'string') { | |||
| if (obj == 'now') { | |||
| date = new Date(); | |||
| } else if (/^\d{4}-\d{2}-\d{2}$/.test(obj)) { | |||
| let parts = obj.split('-'); | |||
| date = new Date(parts[0], parts[1] - 1, parts[2]); | |||
| } else if (/^\d{2}:\d{2}:\d{2}$/.test(obj)) { | |||
| let parts = obj.split(':'); | |||
| date = new Date(); | |||
| @@ -138,21 +135,21 @@ module.exports = { | |||
| return date; | |||
| }, | |||
| formatDate: function(date, format, utc, locale) { | |||
| formatDate: function(date, format, locale) { | |||
| date = module.exports.parseDate(date); | |||
| if (date == null) return date; | |||
| locale = typeof locale == 'string' ? locale : 'en-US'; | |||
| const lang = require('../locale/' + locale); | |||
| const pad = (v, n) => `0000${v}`.substr(-n); | |||
| let y = utc ? date.getUTCFullYear() : date.getFullYear(), | |||
| n = utc ? date.getUTCMonth() : date.getMonth(), | |||
| d = utc ? date.getUTCDate() : date.getDate(), | |||
| w = utc ? date.getUTCDay() : date.getDay(), | |||
| h = utc ? date.getUTCHours() : date.getHours(), | |||
| m = utc ? date.getUTCMinutes() : date.getMinutes(), | |||
| s = utc ? date.getUTCSeconds() : date.getSeconds(), | |||
| v = utc ? date.getUTCMilliseconds() : date.getMilliseconds(); | |||
| let y = date.getFullYear(), | |||
| n = date.getMonth(), | |||
| d = date.getDate(), | |||
| w = date.getDay(), | |||
| h = date.getHours(), | |||
| m = date.getMinutes(), | |||
| s = date.getSeconds(), | |||
| v = date.getMilliseconds(); | |||
| return format.replace(/([yMdHhmsaAv])(\1+)?/g, part => { | |||
| switch (part) { | |||
| @@ -2,11 +2,11 @@ const { padNumber, parseDate, formatDate } = require('../core/util'); | |||
| module.exports = { | |||
| formatDate: function(date, format, utc) { | |||
| formatDate: function(date, format) { | |||
| date = parseDate(date); | |||
| if (date == null) return date; | |||
| return formatDate(date, format, utc); | |||
| return formatDate(date, format); | |||
| }, | |||
| dateAdd: function(date, interval, num) { | |||
| @@ -42,7 +42,7 @@ module.exports = { | |||
| sql.type = 'select'; | |||
| if (db.client == 'couchdb') { | |||
| let table = sql.table.name || sql.table; | |||
| let table = sql.table.table || sql.table; | |||
| let { rows } = await db.list({ include_docs: true, startkey: table + '/', endkey: table + '0' }); | |||
| rows = rows.map(row => row.doc); | |||
| @@ -186,7 +186,7 @@ module.exports = { | |||
| sql.type = 'count'; | |||
| if (db.client == 'couchdb') { | |||
| let table = sql.table.name || sql.table; | |||
| let table = sql.table.table || sql.table; | |||
| let { rows } = await db.list({ include_docs: true, startkey: table + '/', endkey: table + '0' }); | |||
| rows = rows.map(row => row.doc); | |||
| @@ -270,7 +270,7 @@ module.exports = { | |||
| sql.type = 'first'; | |||
| if (db.client == 'couchdb') { | |||
| let table = sql.table.name || sql.table; | |||
| let table = sql.table.table || sql.table; | |||
| let { rows } = await db.list({ include_docs: true, startkey: table + '/', endkey: table + '0' }); | |||
| rows = rows.map(row => row.doc); | |||
| @@ -433,7 +433,7 @@ module.exports = { | |||
| } | |||
| if (db.client == 'couchdb') { | |||
| let table = sql.table.name || sql.table; | |||
| let table = sql.table.table || sql.table; | |||
| let { rows } = await db.list({ include_docs: true, startkey: table + '/', endkey: table + '0' }); | |||
| rows = rows.map(row => row.doc); | |||
| @@ -83,10 +83,11 @@ if (config.debug) { | |||
| if (config.redis) { | |||
| const { createClient } = require('redis'); | |||
| const client = createClient(typeof config.redis == 'object' ? config.redis : { | |||
| const client = createClient({ | |||
| url: config.redis === true ? 'redis://redis' : config.redis, | |||
| socket: { connectTimeout: 60000 }, | |||
| pingInterval: 10000, | |||
| socket: { | |||
| connectTimeout: 60000 | |||
| } | |||
| }); | |||
| client.on('error', err => console.error(err)); | |||
| @@ -94,8 +95,10 @@ if (config.redis) { | |||
| client.on('reconnecting', () => debug('Redis Reconnecting')); | |||
| client.on('ready', () => debug('Redis Ready')); | |||
| client.connect().catch(err => { | |||
| // we don't want to crash the server if redis is not available | |||
| client.connect().then(() => { | |||
| debug('redis connected'); | |||
| }).catch(err => { | |||
| debug('redis connection failed, %o', err); | |||
| }); | |||
| global.redisClient = client; | |||
| @@ -48,39 +48,14 @@ module.exports = async function (app) { | |||
| } | |||
| } | |||
| function createRoute({ auth, path, method, redirect, url, page, layout, exec, data, ttl, status, proxy }, parent) { | |||
| function createRoute({ path, method, redirect, url, page, layout, exec, data, ttl, status }, parent) { | |||
| method = method || 'all'; | |||
| data = data || {}; | |||
| if (page) page = page.replace(/^\//, ''); | |||
| if (layout) layout = layout.replace(/^\//, ''); | |||
| if (parent && parent.path) path = parent.path + path; | |||
| if (auth) { | |||
| app.use(path, (req, res, next) => { | |||
| if (typeof auth == 'string' && req.session && req.session[auth + 'Id']) { | |||
| next(); | |||
| } else if (typeof auth == 'object' && auth.user) { | |||
| const b64auth = (req.headers.authorization || '').split(' ')[1] || ''; | |||
| const [user, password] = Buffer.from(b64auth, 'base64').toString().split(':'); | |||
| if (user && password && user === auth.user && password === auth.password) { | |||
| next(); | |||
| } else { | |||
| res.set('WWW-Authenticate', 'Basic realm="401"'); | |||
| res.status(401).json({ error: 'Unauthorized' }); | |||
| } | |||
| } else { | |||
| res.status(401).json({ error: 'Unauthorized' }); | |||
| } | |||
| }); | |||
| } | |||
| if (proxy) { | |||
| const httpProxy = require('http-proxy'); | |||
| const proxyServer = httpProxy.createProxyServer(proxy); | |||
| app.use(path, (req, res) => { | |||
| proxyServer.web(req, res); | |||
| }); | |||
| } else if (redirect) { | |||
| if (redirect) { | |||
| app.get(path, (req, res) => res.redirect(status == 302 ? 302 : 301, redirect)); | |||
| } else if (url) { | |||
| app[method](path, (req, res, next) => { | |||
| @@ -40,7 +40,7 @@ module.exports = function (server, appSession) { | |||
| io.of('/api').on('connection', async (socket) => { | |||
| socket.onAny(async (event, params, cb) => { | |||
| try { | |||
| if (typeof cb == 'function' && global.redisClient && global.redisClient.isReady) { | |||
| if (typeof cb == 'function' && global.redisClient ** global.redisClient.isReady) { | |||
| const cached = await global.redisClient.get('ws:' + event + ':' + JSON.stringify(params)); | |||
| if (cached) return cb(JSON.parse(cached)); | |||
| } | |||
| @@ -27,7 +27,6 @@ | |||
| "express-session": "^1.17.2", | |||
| "follow-redirects": "^1.14.5", | |||
| "fs-extra": "^10.0.0", | |||
| "http-proxy": "^1.18.1", | |||
| "knex": "^2.3.0", | |||
| "mime-types": "^2.1.34", | |||
| "node-schedule": "^2.0.0", | |||
| @@ -0,0 +1,8 @@ | |||
| /*! | |||
| DMXzone Bootstrap 5 Modal | |||
| Version: 1.0.2 | |||
| (c) 2022 DMXzone.com | |||
| @build 2022-01-11 11:03:56 | |||
| */ | |||
| dmx.Component("bs5-modal",{attributes:{nobackdrop:{type:Boolean,default:!1},nocloseonclick:{type:Boolean,default:!1},nokeyboard:{type:Boolean,default:!1},nofocus:{type:Boolean,default:!1},show:{type:Boolean,default:!1}},methods:{toggle:function(){this.instance.toggle()},show:function(){this.instance.show()},hide:function(){this.instance.hide()},update:function(){this.instance.handleUpdate()}},events:{show:Event,shown:Event,hide:Event,hidden:Event},render:function(t){this.$node=t,this.$parse(),this.$node.addEventListener("show.bs.modal",this.dispatchEvent.bind(this,"show")),this.$node.addEventListener("shown.bs.modal",this.dispatchEvent.bind(this,"shown")),this.$node.addEventListener("hide.bs.modal",this.dispatchEvent.bind(this,"hide")),this.$node.addEventListener("hidden.bs.modal",this.dispatchEvent.bind(this,"hidden")),this.update({})},update:function(s){["nobackdrop","nocloseonclick","nokeyboard","nofocus"].some(function(t){return s[t]!=this.props[t]},this)&&(this.instance&&(this.instance.dispose(),delete this.instance),this.instance=new bootstrap.Modal(this.$node,{backdrop:!this.props.nobackdrop&&this.props.nocloseonclick?"static":!this.props.nobackdrop,keyboard:!this.props.nokeyboard,focus:!this.props.nofocus})),s.show!=this.props.show&&(this.props.show?this.instance.show():this.instance.hide())}}); | |||
| //# sourceMappingURL=../maps/dmxBootstrap5Modal.js.map | |||
| @@ -0,0 +1,40 @@ | |||
| (function() { | |||
| // Call init when DOM is ready | |||
| if (document.readyState === 'loading') { // Loading hasn't finished yet | |||
| document.addEventListener('DOMContentLoaded', _init, { once: true }); | |||
| } else { // DOMContentLoaded has already fired | |||
| _init(); | |||
| } | |||
| function _init() { | |||
| // Listen to url changes | |||
| window.addEventListener('popstate', _update); | |||
| window.addEventListener('pushstate', _update); | |||
| // Listen to DOM changes and call update when nodes are added | |||
| new MutationObserver(_update).observe(document.body, { subtree: true, childList: true }); | |||
| // Initial update | |||
| _update(); | |||
| } | |||
| function _update() { | |||
| var url = window.location.href; | |||
| document.querySelectorAll('a.nav-link:not([data-bs-toggle]), a.dropdown-item').forEach(function(elem) { | |||
| elem.classList.toggle('active', elem.href == url || elem.href == url.split("?")[0].split("#")[0]); | |||
| }); | |||
| document.querySelectorAll('a.dropdown-item.active').forEach(function(elem) { | |||
| var theItem = elem.closest('.nav-item.dropdown'); | |||
| if (theItem) { | |||
| var theToggle = theItem.querySelector('.dropdown-toggle'); | |||
| if (theToggle) { | |||
| theToggle.classList.toggle('active'); | |||
| } | |||
| } | |||
| }); | |||
| } | |||
| })() | |||
| @@ -0,0 +1,78 @@ | |||
| table.table thead>tr>th.sorting_asc, | |||
| table.table thead>tr>th.sorting_desc, | |||
| table.table thead>tr>th.sorting, | |||
| table.table thead>tr>td.sorting_asc, | |||
| table.table thead>tr>td.sorting_desc, | |||
| table.table thead>tr>td.sorting { | |||
| padding-right: 30px | |||
| } | |||
| table.table thead>tr>th:active, | |||
| table.table thead>tr>td:active { | |||
| outline: none | |||
| } | |||
| table.table thead .sorting, | |||
| table.table thead .sorting_asc, | |||
| table.table thead .sorting_desc, | |||
| table.table thead .sorting_asc_disabled, | |||
| table.table thead .sorting_desc_disabled { | |||
| cursor: pointer; | |||
| position: relative | |||
| } | |||
| table.table thead .sorting:before, | |||
| table.table thead .sorting:after, | |||
| table.table thead .sorting_asc:before, | |||
| table.table thead .sorting_asc:after, | |||
| table.table thead .sorting_desc:before, | |||
| table.table thead .sorting_desc:after, | |||
| table.table thead .sorting_asc_disabled:before, | |||
| table.table thead .sorting_asc_disabled:after, | |||
| table.table thead .sorting_desc_disabled:before, | |||
| table.table thead .sorting_desc_disabled:after { | |||
| position: absolute; | |||
| bottom: 0.9em; | |||
| display: block; | |||
| opacity: 0.3 | |||
| } | |||
| table.table-sm thead .sorting:before, | |||
| table.table-sm thead .sorting:after, | |||
| table.table-sm thead .sorting_asc:before, | |||
| table.table-sm thead .sorting_asc:after, | |||
| table.table-sm thead .sorting_desc:before, | |||
| table.table-sm thead .sorting_desc:after, | |||
| table.table-sm thead .sorting_asc_disabled:before, | |||
| table.table-sm thead .sorting_asc_disabled:after, | |||
| table.table-sm thead .sorting_desc_disabled:before, | |||
| table.table-sm thead .sorting_desc_disabled:after { | |||
| bottom: 0.3em; | |||
| } | |||
| table.table thead .sorting:before, | |||
| table.table thead .sorting_asc:before, | |||
| table.table thead .sorting_desc:before, | |||
| table.table thead .sorting_asc_disabled:before, | |||
| table.table thead .sorting_desc_disabled:before { | |||
| right: 1em; | |||
| content: "\2191" | |||
| } | |||
| table.table thead .sorting:after, | |||
| table.table thead .sorting_asc:after, | |||
| table.table thead .sorting_desc:after, | |||
| table.table thead .sorting_asc_disabled:after, | |||
| table.table thead .sorting_desc_disabled:after { | |||
| right: 0.5em; | |||
| content: "\2193" | |||
| } | |||
| table.table thead .sorting_asc:before, | |||
| table.table thead .sorting_desc:after { | |||
| opacity: 1 | |||
| } | |||
| table.table thead .sorting_asc_disabled:before, | |||
| table.table thead .sorting_desc_disabled:after { | |||
| opacity: 0 | |||
| } | |||
| @@ -0,0 +1,8 @@ | |||
| /*! | |||
| App Connect Data Traversal | |||
| Version: 1.1.4 | |||
| (c) 2022 Wappler.io | |||
| @build 2022-12-09 15:38:45 | |||
| */ | |||
| dmx.Component("data-view",{initialData:{data:[],page:1,pages:1,items:0,sort:{on:"",dir:"asc"},has:{first:!1,prev:!1,next:!1,last:!1}},attributes:{data:{type:[Array,Object],default:null},filter:{type:String,default:""},page:{type:Number,default:1},pageSize:{type:Number,default:0},sortOn:{type:String,default:""},sortDir:{type:String,default:"asc",validate:function(t){return/^(asc|desc)$/i.test(t)}}},methods:{select:function(t){this.setPage(Number(t))},first:function(){this.setPage(1)},prev:function(){var t=this.data.page-1;t<1&&(t=1),t>this.data.pages&&(t=this.data.pages),this.setPage(t)},next:function(){var t=this.data.page+1;t<1&&(t=1),t>this.data.pages&&(t=this.data.pages),this.setPage(t)},last:function(){var t=this.data.pages;this.setPage(t)},sort:function(t,e){this.props.sortOn=t,this.props.sortDir=e&&"desc"==e.toLowerCase()?"desc":"asc",this._update()}},render:function(t){this.items=[],this.filtered=[],this.props.data&&(this.setData(this.props.data),this._update()),this.$parse()},beforeUpdate:function(t){this.props.filter&&(this._needUpdate=!this.$canSkip({idents:dmx.getIdents(this.props.filter)},t))},update:function(t,e){e.has("data")&&this.setData(this.props.data),e.has("page")&&this.setPage(this.props.page),e.size&&(this._needUpdate=!0)},updated:function(){this._needUpdate&&this._update()},_update:function(){if(this._needUpdate=!1,this.filtered=this.items.filter((t=>!this.props.filter||dmx.parse(this.props.filter,dmx.DataScope(t,this)))),this.props.sortOn){let t=this.props.sortOn,e=this.props.sortDir.toLowerCase(),s="desc"==e;this.filtered.sort(((e,i)=>s?e[t]>i[t]?-1:e[t]<i[t]?1:0:e[t]<i[t]?-1:e[t]>i[t]?1:0)),this.set("sort",{on:t,dir:e})}if(this.filtered.length){let t=this.props.pageSize;this.set("pages",t?Math.ceil(this.filtered.length/t):1)}else this.set("pages",1);this.set("items",this.filtered.length),this.setPage(this.props.page)},setData:function(t){this.items=dmx.repeatItems(t).map((t=>(delete(t=dmx.clone(t)).$value,delete t.$index,delete t.$key,t)))},setPage:function(t){const e=+this.props.pageSize,s=this.data.pages,i=((t=t<1?1:t>s?s:t)-1)*e;this.set("page",t),this.set("data",e?this.filtered.slice(i,i+e):this.filtered),this.set("has",{first:t>1,prev:t>1,next:t<s,last:t<s})}}),dmx.Component("data-detail",{initialData:{data:{}},attributes:{data:{type:Array,default:[]},key:{type:String},value:{type:[String,Number]}},methods:{select:function(t){this.props.value=t,this.select(t,!0)}},render:function(t){this.items=[],this.setData(this.props.data),this.select(this.props.value),this.$parse()},update:function(t,e){e.has("data")?(this.setData(this.props.data),this.select(this.props.value)):t.value!==this.props.value&&this.select(this.props.value,!0)},setData:function(t){if(this.items=[],t&&"object"==typeof t)if(Array.isArray(t))this.items=t.map((function(t){return"object"==typeof t?t:{$value:t}}));else for(var e in t)t.hasOwnProperty(e)&&this.items.push({$key:e,$value:t[e]})},select:function(t,e){var s=this.items.findIndex((function(e){return e[this.props.key]===t}),this);if(this.set("data",this.items[s]||null),e){var i=this.$node;requestAnimationFrame((function(){for(var t=i.querySelectorAll("form"),e=0;e<t.length;e++)t[e].reset()}))}}}),dmx.Component("data-iterator",{initialData:{index:-1,value:null,has:{first:!1,prev:!1,next:!1,last:!1}},attributes:{data:{type:Array,default:[]},index:{type:Number,default:0},loop:{type:Boolean,default:!1}},methods:{first:function(){this.first()},prev:function(){this.prev()},next:function(){this.next()},last:function(){this.last()},random:function(){this.random()},select:function(t){this.select(t)}},render:function(t){this.items=[],this.setData(this.props.data),this.select(this.props.index),this.$parse()},update:function(t,e){e.has("data")?(this.setData(this.props.data),this.select(this.props.index)):t.index!==this.props.index&&this.select(this.props.index)},setData:function(t){t&&(Array.isArray(t)?this.items=t:console.warn("Iterator data is not array but a "+typeof t))},first:function(){this.items.length&&this.select(0)},prev:function(){this.items.length&&(index=this.data.index-1,index<0&&this.props.loop&&(index=this.items.length-1),this.select(index))},next:function(){this.items.length&&(index=this.data.index+1,index>=this.items.length&&this.props.loop&&(index=0),this.select(index))},last:function(){this.items.length&&this.select(this.items.length-1)},random:function(){this.items.length&&this.select(Math.floor(this.items.length*Math.random()))},select:function(t){if(t=parseInt(t,10),this.items.length){var e=this.items.length-1;t<0&&(t=0),t>=this.items.length&&(t=e),this.set("index",t),this.set("value",this.items[t]),this.set("has",{first:t>0,prev:t>0,next:t<e,last:t<e})}else this.set("index",-1),this.set("value",null),this.set("has",{first:!1,prev:!1,next:!1,last:!1})}}); | |||
| //# sourceMappingURL=../maps/dmxDataTraversal.js.map | |||
| @@ -0,0 +1,8 @@ | |||
| /*! | |||
| Form Repeat | |||
| Version: 1.0.1 | |||
| (c) 2022 Wappler.io | |||
| @build 2022-08-18 10:34:49 | |||
| */ | |||
| dmx.Component("form-repeat",{initialData:{canAdd:!0,items:[]},attributes:{items:{type:[Array,Number],default:0},min:{type:Number,default:0},max:{type:Number,default:1/0},sortable:{type:Boolean,default:!1},handle:{type:String,default:null},animation:{type:Number,default:0}},methods:{add:function(){this._add()},remove:function(e){this._remove(e)},move:function(e,t){this._mode(e,t,!0)},moveToStart:function(e){this._move(e,0,!0)},moveToEnd:function(e){this._move(e,this.children.length-1,!0)},moveBefore:function(e){this._move(e,e-1,!0)},moveAfter:function(e){this._move(e,e+1,!0)},duplicate:function(e){this._duplicate(e)},reset:function(){this._render()}},render:function(e){this._template=this._templateFromChildren(e);this._template.querySelectorAll("input[name], select[name], textarea[name]").forEach((e=>{const t=e.name.indexOf("[");t>0?e.setAttribute("dmx-bind:name",this.name+"[{{$index}}]["+e.name.slice(0,t)+"]"+e.name.slice(t)):e.setAttribute("dmx-bind:name",this.name+"[{{$index}}]["+e.name+"]")})),this.update({})},update:function(e,t){dmx.equal(e.items,this.props.items)||this._render(),e.sortable!=this.props.sortable&&(this.props.sortable?this.sortable?this.sortable.option("disabled",!1):window.Sortable?this.sortable=Sortable.create(this.$node,{handle:this.props.handle,onEnd:e=>this._move(e.oldIndex,e.newIndex)}):console.warn("Sortable script is missing."):this.sortable&&this.sortable.option("disabled",!0)),e.handle!=this.props.handle&&this.sortable&&this.sortable.option("handle",this.props.handle),e.animation!=this.props.animation&&this.sortable&&this.sortable.option("animation",this.props.animation),dmx.equal(e,this.props)||this._refresh()},_render:function(){const e=dmx.repeatItems("string"==typeof this.props.items?Number(this.props.items):this.props.items);e.length<this.props.min&&(e.length=this.props.min),e.length>this.props.max&&(e.length=this.props.max),this._clear();for(let t=0;t<e.length;t++)this._add(e[t])},_duplicate:function(e){this._add(),this._move(this.children.length-1,e+1,!0);let t=[];this.children[e].$nodes.forEach((e=>{1==e.nodeType&&t.push(...Array.from(e.querySelectorAll("input[name], textarea[name], select[name]")))}));let i=[];if(this.children[e+1].$nodes.forEach((e=>{1==e.nodeType&&i.push(...Array.from(e.querySelectorAll("input[name], textarea[name], select[name]")))})),t.length==i.length)for(let e=0;e<t.length;e++){const n=t[e],s=i[e];if(n.tagName!=s.tagName)break;if("TEXTAREA"==n.tagName)s.value=n.value;else if("INPUT"==n.tagName){if("file"==n.type||"password"==n.type)continue;"checkbox"==n.type||"radio"==n.type?s.checked=n.checked:s.value=n.value}else if("SELECT"==n.tagName)if(n.multiple)for(const e of n.selectedOptions)for(const t of s.options)e.value==t.value&&(t.selected=!0);else s.value=n.value;s.dispatchEvent(new Event("change"))}},_add:function(e={}){if(this.children.length>=this.props.max)return;const t=new(dmx.Component("repeat-item"))(this._template.cloneNode(!0),this,e);t.$nodes.forEach((e=>{this.$node.appendChild(e),t.$parse(e)})),this.children.push(t),this._refresh()},_remove:function(e){this.children.length<=this.props.min||(this.children.splice(e,1).forEach((e=>{e.$destroy()})),this._refresh())},_refresh:function(){this.children.forEach(((e,t)=>{e.set({$index:t,$canRemove:this.children.length>this.props.min,$canMoveToStart:t>0,$canMoveBefore:t>0,$canMoveAfter:t<this.children.length-1,$canMoveToEnd:t<this.children.length-1})})),this.set("canAdd",this.children.length<this.props.max),this.set("items",this.children.map((e=>e.data)))},_clear:function(){this.children.splice(0).forEach((e=>{e.$destroy()})),this.$node.innerHTML=""},_move:function(e,t,i){e<0||e>=this.children.length||t<0||t>=this.children.length||(this.children.splice(t,0,this.children.splice(e,1)[0]),i&&(this.$node.innerHTML="",this.children.forEach((e=>{e.$nodes.forEach((e=>{this.$node.appendChild(e)}))}))),this._refresh())},_templateFromChildren:function(e){const t=document.createDocumentFragment();for(;e.hasChildNodes();)t.appendChild(e.firstChild);return t}}); | |||
| //# sourceMappingURL=../maps/dmxFormRepeat.js.map | |||
| @@ -0,0 +1,58 @@ | |||
| .dmx-notifications { | |||
| display: block; | |||
| position: fixed; | |||
| z-index: 999999; | |||
| pointer-events: none; | |||
| } | |||
| .dmx-notify { | |||
| pointer-events: auto; | |||
| animation-fill-mode: forwards; | |||
| } | |||
| .dmx-notify > div { | |||
| box-shadow: 0 1px 5px rgba(0, 0, 0, .25); | |||
| border-radius: .25em; | |||
| min-width: 250px; | |||
| padding: .5em; | |||
| } | |||
| .dmx-notify .dmx-title { | |||
| font-weight: bold; | |||
| font-size: 1.1em; | |||
| } | |||
| .dmx-notify .dmx-message { | |||
| font-size: 1em; | |||
| } | |||
| .dmx-notify .dmx-icon { | |||
| float: left; | |||
| margin: 0 .5em 0 0; | |||
| } | |||
| .dmx-notify .dmx-close { | |||
| padding: 0; | |||
| margin: 0 0 0 .5em; | |||
| opacity: .5; | |||
| background-color: transparent; | |||
| color: inherit; | |||
| border: none; | |||
| -webkit-appearance: none; | |||
| cursor: pointer; | |||
| float: right; | |||
| } | |||
| .dmx-notify .dmx-close:hover { | |||
| opacity: 1; | |||
| } | |||
| @keyframes fadeIn { | |||
| from { opacity: 0; } | |||
| to { opacity: 1 } | |||
| } | |||
| @keyframes fadeOut { | |||
| from { opacity: 1 } | |||
| to { opacity: 0 } | |||
| } | |||
| @@ -0,0 +1,8 @@ | |||
| /*! | |||
| DMXzone Notifications | |||
| Version: 1.0.0 | |||
| (c) 2018 DMXzone.com | |||
| @build 2018-08-22 10:25:59 | |||
| */ | |||
| dmx.Component("notifications",{attributes:{position:{type:String,default:"top"},align:{type:String,default:"right"},"offset-x":{type:Number,default:15},"offset-y":{type:Number,default:15},spacing:{type:Number,default:10},opacity:{type:Number,default:.8},timeout:{type:Number,default:5e3},"extended-timeout":{type:Number,default:1e3},"newest-on-top":{type:Boolean,default:!1},"show-animation":{type:String,default:"fadeIn"},"show-duration":{type:Number,default:1e3},"hide-animation":{type:String,default:"fadeOut"},"hide-duration":{type:Number,default:1e3},"close-animation":{type:String,default:null},"close-duration":{type:Number,default:0},"close-icon":{type:String,default:"fa fa-times"},closable:{type:Boolean,default:!1},"info-background":{type:String,default:"#2f96b4"},"info-color":{type:String,default:"#fff"},"info-icon":{type:String,default:"fa fa-info"},"success-icon":{type:String,default:"fa fa-check"},"success-background":{type:String,default:"#51a351"},"success-color":{type:String,default:"#fff"},"warning-icon":{type:String,default:"fa fa-exclamation"},"warning-background":{type:String,default:"#f89406"},"warning-color":{type:String,default:"#fff"},"danger-icon":{type:String,default:"fa fa-warning"},"danger-background":{type:String,default:"#bd362f"},"danger-color":{type:String,default:"#fff"}},methods:{clear:function(){this.clear()},msg:function(t,e){this.show("msg",t,e)},info:function(t,e){this.show("info",t,Object.assign({icon:this.props["info-icon"],color:this.props["info-color"],background:this.props["info-background"]},e))},success:function(t,e){this.show("success",t,Object.assign({icon:this.props["success-icon"],color:this.props["success-color"],background:this.props["success-background"]},e))},warning:function(t,e){this.show("warning",t,Object.assign({icon:this.props["warning-icon"],color:this.props["warning-color"],background:this.props["warning-background"]},e))},danger:function(t,e){this.show("danger",t,Object.assign({icon:this.props["danger-icon"],color:this.props["danger-color"],background:this.props["danger-background"]},e))}},events:{click:CustomEvent},positionClasses:["top","bottom","left","right","full"],render:function(t){(this.$node=t).textContent="",t.classList.add("dmx-notifications"),this.update({})},update:function(t){this.props.position==t.position&&this.props["offset-x"]==t["offset-x"]&&this.props["offset-y"]==t["offset-y"]||(this.$node.style.removeProperty("top"),this.$node.style.removeProperty("bottom"),this.$node.style.setProperty(this.props.position,this.props["offset-y"]+"px"),this.$node.style.setProperty("left",this.props["offset-x"]+"px"),this.$node.style.setProperty("right",this.props["offset-x"]+"px"))},clear:function(){this.$node.textContent=""},create:function(o){var t='<div class="dmx-notify">';t+='<div style="background: {{background}}; color: {{color}}; opacity: {{opacity}}">',o.closable&&(t+='<button type="button" aria-hidden="true" class="dmx-close"><i class="{{close-icon}}"></i></button>'),o.icon&&(t+='<div class="dmx-icon"><i class="{{icon}}"></i></div>'),o.title&&(t+='<div class="dmx-title">{{title}}</div>'),o.message&&(t+='<div class="dmx-message">{{message}}</div>'),t=(t+="</div></div>").replace(/\{\{(.*?)\}\}/g,function(t,e){return o[e]});var e=document.createElement("div");return e.innerHTML=t,e.firstChild},show:function(t,e,o){o=Object.assign({type:t,message:e,background:"#f1f1f1",color:"#333"},this.props,o);var i=this.create(o);i.style.setProperty("top"==o.position?"margin-bottom":"margin-top",o.spacing+"px"),i.style.setProperty("float",o.align),i.style.setProperty("clear",o.align),i.style.setProperty("animation-name",o["show-animation"]),i.style.setProperty("animation-duration",o["show-duration"]+"ms"),i.addEventListener("mouseenter",this.pause.bind(this,i,o)),i.addEventListener("mouseleave",this.continue.bind(this,i,o)),i.addEventListener("click",this.dispatchEvent.bind(this,"click",{detail:o})),o.closable&&i.querySelector(".dmx-close").addEventListener("click",this.close.bind(this,i,o)),o.timeout&&(i.timeoutId=setTimeout(this.hide.bind(this,i,o),o["show-duration"]+o.timeout)),o["newest-on-top"]?this.$node.insertBefore(i,this.$node.firstChild):this.$node.appendChild(i)},hide:function(t,e){e["hide-animation"]&&e["hide-duration"]?(t.style.setProperty("animation-name",e["hide-animation"]),t.style.setProperty("animation-duration",e["hide-duration"]+"ms"),setTimeout(function(){t.remove()},e["hide-duration"])):t.remove()},close:function(t,e){e["close-animation"]&&e["close-duration"]?(t.style.setProperty("animation-name",e["close-animation"]),t.style.setProperty("animation-duration",e["close-duration"]+"ms"),setTimeout(function(){t.remove()},e["close-duration"])):t.remove()},pause:function(t,e){clearTimeout(t.timeoutId)},continue:function(t,e){(e.timeout||e["extended-timeout"])&&(t.timeoutId=setTimeout(this.hide.bind(this,t,e),e["extended-timeout"]))}}); | |||
| //# sourceMappingURL=../maps/dmxNotifications.js.map | |||
| @@ -0,0 +1,8 @@ | |||
| /*! | |||
| App Connect Scheduler | |||
| Version: 1.1.0 | |||
| (c) 2022 Wappler.io | |||
| @build 2022-04-14 12:03:48 | |||
| */ | |||
| dmx.Component("scheduler",{initialData:{running:!1,percent:0},attributes:{delay:{type:Number,default:60},unit:{type:String,default:"seconds"},noprogress:{type:Boolean,default:!1},norepeat:{type:Boolean,default:!1},noload:{type:Boolean,default:!1}},methods:{start:function(){this.start()},stop:function(){this.stop()}},events:{tick:Event},render:function(t){this.props.noload||this.start()},beforeDestroy:function(){this.stop()},start:function(){this.set("running",!0),this._startTime=Date.now(),this.tick()},stop:function(){clearTimeout(this._timer),this.set("running",!1),this.set("percent",0)},tick:function(){if(this.data.running)if(this.props.noprogress)this.dispatchEvent("tick"),this.props.norepeat||(this._timer=setTimeout((()=>this.tick()),this.delay()));else{let t=Date.now()-this._startTime,e=this.delay();t>=e?(this.set("percent",100),this.dispatchEvent("tick"),this.props.norepeat?this.stop():this.start()):(this.set("percent",Math.ceil(100*t/e)),requestAnimationFrame((()=>this.tick())))}},delay:function(){switch(this.props.unit){case"miliseconds":return this.props.delay;case"minutes":return 6e4*this.props.delay;case"hours":return 36e5*this.props.delay;case"days":return 864e5*this.props.delay;default:return 1e3*this.props.delay}}}); | |||
| //# sourceMappingURL=../maps/dmxScheduler.js.map | |||
| @@ -0,0 +1,8 @@ | |||
| /*! | |||
| DMXzone State Management | |||
| Version: 1.5.1 | |||
| (c) 2022 Wappler.io | |||
| @build 2022-08-25 10:52:07 | |||
| */ | |||
| dmx.Component("query-manager",{initialData:{data:{}},attributes:{},methods:{set:function(t,e){this.setQueryParam(t,e)},remove:function(t){this.setQueryParam(t)},removeAll:function(){this.setQueryParam()}},render:function(t){this.update()},update:function(){this.set("data",this.parseQuery(window.location.search))},setQueryParam:function(t,e){var a=!1;if(null==e?null==t?(this.data.data={},a=!0):this.data.data[t]&&(delete this.data.data[t],a=!0):this.data.data[t]!=e&&(this.data.data[t]=e,a=!0),a){if(window.URLSearchParams){var o=new URL(window.location);o.search=new URLSearchParams(this.data.data),window.history.pushState(null,null,o)}else window.history.pushState(null,null,window.location.pathname+this.buildQuery(this.data.data)+window.location.hash);dmx.requestUpdate()}},buildQuery:function(t){var e=Object.keys(t);return e.length?"?"+e.reduce((function(e,a){return e&&(e+="&"),e+=encodeURIComponent(a)+"="+encodeURIComponent(t[a])}),""):""},parseQuery:function(t){return(t=t.replace(/^\?/,"")).split("&").reduce((function(t,e){var a=e.replace(/\+/g," ").split("=");return a[0]&&(t[decodeURIComponent(a[0])]=decodeURIComponent(a[1]||"")),t}),{})}}),dmx.Component("cookie-manager",{initialData:{data:{}},attributes:{},methods:{set:function(t,e,a){this.setCookie(t,e,a)},remove:function(t,e){(e=e||{}).expires="1970-01-01T00:00:00Z",this.setCookie(t,"",e)},removeAll:function(t){(t=t||{}).expires="1970-01-01T00:00:00Z",Object.keys(this.data.data).forEach((function(e){this.setCookie(e,"",t)}))}},render:function(t){this.cookie="",this.update()},update:function(){this.cookie!=document.cookie&&(this.cookie=document.cookie,this.set("data",this.cookie.split(/;\s*/).reduce((function(t,e){var a=e.indexOf("=");return t[decodeURIComponent(e.substr(0,a))]=decodeURIComponent(e.substr(a+1)),t}),{})))},setCookie:function(t,e,a){if(!t||/^(?:expires|max\-age|path|domain|secure)$/i.test(t))return!1;(a=a||{}).path=a.path||"/";var o=(t=(t=(t=encodeURIComponent(String(t))).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent)).replace(/[\(\)]/g,escape))+"="+(e=(e=encodeURIComponent(String(e))).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent));a.expires&&("number"==typeof a.expires&&(a.expires=Date.now()+864e5*a.expires),o+="; expires="+new Date(a.expires).toUTCString()),a.domain&&(o+="; domain="+a.domain),a.path&&(o+="; path="+a.path),a.secure&&(o+="; secure"),document.cookie=o,dmx.requestUpdate()}}),dmx.Component("local-manager",{initialData:{data:{}},attributes:{},methods:{set:function(t,e){var a=JSON.stringify(e);null!=a?window.localStorage.setItem("dmxState-"+t,a):window.localStorage.removeItem("dmxState-"+t),this.getData()},remove:function(t){window.localStorage.removeItem("dmxState-"+t),this.getData()},removeAll:function(){Object.keys(window.localStorage).forEach((function(t){t.startsWith("dmxState-")&&window.localStorage.removeItem(t)})),this.getData()}},render:function(t){this.getData()},getData:function(){this.set("data",Object.keys(window.localStorage).reduce((function(t,e){if(e.startsWith("dmxState-"))try{t[e.substr(9)]=JSON.parse(window.localStorage.getItem(e))}catch(t){console.warn("Error parsing JSON: "+window.localStorage.getItem(e))}return t}),{}))}}),dmx.Component("session-manager",{initialData:{data:{}},attributes:{},methods:{set:function(t,e){var a=JSON.stringify(e);null!=a?window.sessionStorage.setItem("dmxState-"+t,a):window.sessionStorage.removeItem("dmxState-"+t),this.getData()},remove:function(t){window.sessionStorage.removeItem("dmxState-"+t),this.getData()},removeAll:function(){Object.keys(window.sessionStorage).forEach((function(t){t.startsWith("dmxState-")&&window.sessionStorage.removeItem(t)})),this.getData()}},render:function(t){this.getData()},getData:function(){this.set("data",Object.keys(window.sessionStorage).reduce((function(t,e){if(e.startsWith("dmxState-"))try{t[e.substr(9)]=JSON.parse(window.sessionStorage.getItem(e))}catch(t){console.warn("Error parsing JSON: "+window.sessionStorage.getItem(e))}return t}),{}))}}); | |||
| //# sourceMappingURL=../maps/dmxStateManagement.js.map | |||
| @@ -0,0 +1,8 @@ | |||
| /*! | |||
| DMXzone Typed | |||
| Version: 1.0.0 | |||
| (c) 2019 DMXzone.com | |||
| @build 2019-05-29 17:27:46 | |||
| */ | |||
| dmx.Component("typed",{attributes:{strings:{type:String,default:""},speed:{type:Number,default:0},delay:{type:Number,default:0},"back-speed":{type:Number,default:0},"back-delay":{type:Number,default:700},"smart-backspace":{type:Boolean,default:!1},shuffle:{type:Boolean,default:!1},fade:{type:Boolean,default:!1},loop:{type:Boolean,default:!1},hidecursor:{type:Boolean,default:!1}},methods:{toggle:function(){this.typed.toggle()},stop:function(){this.typed.stop()},start:function(){this.typed.start()}},events:{complete:Event},render:function(t){this.$node=t,this.update({})},update:function(t){if(JSON.stringify(t)!=JSON.stringify(this.props)){this.typed&&this.typed.destroy();var e="string"==typeof this.props.strings?this.props.strings.split(","):this.props.strings;this.typed=new Typed(this.$node,{strings:e,typeSpeed:this.props.speed,startDelay:this.props.delay,backSpeed:this.props["back-speed"],backDelay:this.props["back-delay"],smartBackspace:this.props["smart-backspace"],shuffle:this.props.shuffle,fadeOut:this.props.fade,loop:this.props.loop,showCursor:!this.props.hidecursor})}}}); | |||
| //# sourceMappingURL=../maps/dmxTyped.js.map | |||
| @@ -0,0 +1,35 @@ | |||
| /* CSS Document */ | |||
| input.dmxValidator-invalid, | |||
| select.dmxValidator-invalid, | |||
| textarea.dmxValidator-invalid { | |||
| border-color: #C80000; | |||
| outline: none; | |||
| border-style:solid; | |||
| border-width: 1px; | |||
| } | |||
| input.dmxValidator-invalid:focus, | |||
| select.dmxValidator-invalid:focus, | |||
| textarea.dmxValidator-invalid:focus { | |||
| -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; | |||
| box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; | |||
| } | |||
| input.dmxValidator-valid, | |||
| select.dmxValidator-valid, | |||
| textarea.dmxValidator-valid { | |||
| border-color: #3c763d; | |||
| outline: none; | |||
| border-style:solid; | |||
| border-width: 1px; | |||
| } | |||
| input.dmxValidator-valid:focus, | |||
| select.dmxValidator-valid:focus, | |||
| textarea.dmxValidator-valid:focus { | |||
| -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px #67b168; | |||
| box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px #67b168; | |||
| } | |||
| span.dmxValidator-error { | |||
| color: #C80000; | |||
| padding-left: 5px; | |||
| } | |||
| @@ -0,0 +1,34 @@ | |||
| { | |||
| "register.ejs": { | |||
| "layoutPage": "main", | |||
| "description": "" | |||
| }, | |||
| "termsandconditions.ejs": { | |||
| "layoutPage": "main", | |||
| "description": "" | |||
| }, | |||
| "dspec.ejs": { | |||
| "layoutPage": "main", | |||
| "description": "" | |||
| }, | |||
| "PartType.ejs": { | |||
| "layoutPage": "main", | |||
| "description": "" | |||
| }, | |||
| "SelectPartType.ejs": { | |||
| "layoutPage": "main", | |||
| "description": "" | |||
| }, | |||
| "parttype.ejs": { | |||
| "layoutPage": "main", | |||
| "description": "" | |||
| }, | |||
| "temp.ejs": { | |||
| "layoutPage": "main", | |||
| "description": "" | |||
| }, | |||
| "repeattest.ejs": { | |||
| "layoutPage": "main", | |||
| "description": "" | |||
| } | |||
| } | |||
| @@ -0,0 +1,70 @@ | |||
| <!-- Wappler include head-page="layouts/main" fontawesome_5="cdn" bootstrap5="local" is="dmx-app" id="dspec" appconnect="local" components="{dmxTyped:{},dmxStateManagement:{},dmxBootstrap5Modal:{},dmxFormatter:{},dmxValidator:{},dmxScheduler:{}}" --> | |||
| <dmx-api-action id="api_allpartcodes" noload="true" url="http://vapor.prelub.com/api/v1.0/partcodes"></dmx-api-action> | |||
| <dmx-api-action id="api_maxpn" url="http://vapor.prelub.com/api/v1.0/pns/max"></dmx-api-action> | |||
| <dmx-api-action id="api_partcodes" noload="true" url="http://vapor.prelub.com/api/v1.0/partcodes/bytype/0" dmx-bind:url="'http://vapor.prelub.com/api/v1.0/partcodes/bytype/'+modal1.sel_parttypes.value"></dmx-api-action> | |||
| <dmx-api-action id="api_childcodes" noload="true" url="http://vapor.prelub.com/api/v1.0/partcodes/byparent/" dmx-bind:url="'http://vapor.prelub.com/api/v1.0/partcodes/byparent/'+modal1.sel_nonproductionparts.value"></dmx-api-action> | |||
| <dmx-api-action id="api_parttypes" url="http://vapor.prelub.com/api/v1.0/parttypes"></dmx-api-action> | |||
| <div class="modal" id="modal1" is="dmx-bs5-modal" tabindex="-1" dmx-bind:show="!query1.data.id"> | |||
| <div class="modal-dialog" role="document"> | |||
| <div class="modal-content"> | |||
| <div class="modal-header"> | |||
| <h5 class="modal-title">New Part Number</h5> | |||
| <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> | |||
| </div> | |||
| <div class="modal-body"> | |||
| <input id="hdn_newpn" name="text1" type="hidden" class="form-control" placeholder="new part number"><input id="hdn_zeroo" name="text1" type="hidden" class="form-control" value="0"> | |||
| <p id="para_productionparts">Select Part Type</p> | |||
| <select id="sel_parttypes" class="form-select" name="parttypes" dmx-bind:options="api_parttypes.data" optiontext="name" optionvalue="id" dmx-on:changed="run({run:{action:`api_partcodes.load({})`,name:'filter_partcodes',outputType:'text'}})" required="" dmx-bind:value="api1.data.partnumber.partcode.parttype.id"> | |||
| <option selected="" value="0">Select</option> | |||
| </select> | |||
| <p id="para_nonproductionparts">Select Parent Part Code</p><select id="sel_nonproductionparts" class="form-select" name="nonproductionparts" dmx-on:changed="run([{run:{action:`api_childcodes.load({})`,name:'setchildren',outputType:'text'}},{run:{action:`sel_productionparts.setSelectedIndex(\'if(selectedValue>0){sel_productionparts.selectedValue=0;}\')`,outputType:'text'}}])" dmx-bind:options="api_partcodes.data" optiontext="name" optionvalue="id" required="" dmx-bind:value="api1.data.partnumber.partcode.id"> | |||
| <option value="0">Select</option> | |||
| </select> | |||
| <p>Select Part Code</p> | |||
| <select id="sel_childpartcode" class="form-select"> | |||
| <option value="0">Select</option> | |||
| </select> | |||
| <p>Description</p> | |||
| <textarea id="txt_ptdescription" class="form-control" name="ptdescription" required="" dmx-bind:value="api1.data.partnumber.description"></textarea> | |||
| <p>Comments</p> | |||
| <textarea id="txt_ptcomments" class="form-control" name="comments" required="" dmx-bind:value="api1.data.partnumber.comments"></textarea> | |||
| </div> | |||
| <div class="modal-footer"> | |||
| <button type="button" class="btn btn-danger" data-bs-dismiss="modal" id="btn_closenewpar">Cancel</button> | |||
| <button type="button" class="btn btn-primary" dmx-on:click="txt_partnumber.setValue(sel_parttypes.value.concat(sel_nonproductionparts.value.concat(hdn_newpn.value)));txt_rev.setValue(hdn_zeroo.value);modal1.hide()">Save changes</button> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <dmx-query-manager id="query1"></dmx-query-manager> | |||
| <dmx-api-action id="api1" url="http://localhost:8080/api/v1.0/designspecs/max/" dmx-bind:url="'http://vapor.prelub.com/api/v1.0/designspecs/max/'+query1.data.id"></dmx-api-action> | |||
| <div class="container"> | |||
| <h1>DSpec</h1> | |||
| <div class="row"> | |||
| <div class="col" style="width: 10%;"> | |||
| <p style="text-align: right;">Part Number</p> | |||
| </div> | |||
| <div class="col" style="width: 20%;"> | |||
| <input id="txt_partnumber" name="text1" type="text" class="form-control" placeholder="Part Number" dmx-bind:value="api1.data.partnumber.number"> | |||
| </div> | |||
| <div class="col" style="width: 10%;"> | |||
| <p style="text-align: right;">Rev</p> | |||
| </div> | |||
| <div class="col" style="width: 10%;"><input id="txt_rev" name="rev" type="text" class="form-control" placeholder="rev" dmx-bind:value="api1.data.revisionlevel"></div> | |||
| <div class="col" style="width: 50%;"> | |||
| <button id="btn_newpartnumber" class="btn text-danger fw-bold bg-secondary bg-opacity-50 ms-n1" dmx-on:click="txt_rev.setValue((txt_rev.value.toNumber() + 1))">New Rev</button> | |||
| </div> | |||
| </div> | |||
| <div class="row"> | |||
| <div class="col"> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <meta name="ac:route" content="/dspec"> | |||
| @@ -1,23 +1,67 @@ | |||
| <!-- Wappler include head-page="layouts/main" fontawesome_5="cdn" bootstrap5="local" is="dmx-app" id="index" appConnect="local" --> | |||
| <!-- Wappler include head-page="layouts/main" fontawesome_5="cdn" bootstrap5="local" is="dmx-app" id="index" appConnect="local" components="{dmxDataTraversal:{},dmxTyped:{},dmxFormatter:{},dmxStateManagement:{},dmxBrowser:{},dmxBootstrap5TableGenerator:{}}" --> | |||
| <dmx-api-action id="api1" noload="true" dmx-bind:url="'http://vapor.prelub.com/api/v1.0/partnumbers/num/'+txt_partNumber.value"></dmx-api-action> | |||
| <meta name="ac:route" content="/"> | |||
| <dmx-serverconnect id="serverconnect1" url="/api/PartCodes/All"></dmx-serverconnect> | |||
| <div class="container"> | |||
| <div class="row"> | |||
| <div class="col"> | |||
| <form id="form1"> | |||
| <div class="row"> | |||
| <input id="txtSerial" name="serial" type="text" class="form-control" placeholder="Serial #"> | |||
| </div> | |||
| <div class="row"> | |||
| <button id="btn1" class="btn">Button</button> | |||
| </div> | |||
| </form> | |||
| <h1>RPM Studio</h1> | |||
| </div> | |||
| </div> | |||
| <div class="row"> | |||
| <form is="dmx-api-form" id="apiform1" method="post"> | |||
| <div class="row"> | |||
| <small class="text-muted" id="lblResult" dmx-repeat:repeat1="form1.txtSerial.value">With faded secondary text</small> | |||
| <div class="col-break w-100"> | |||
| <input id="hdn_partid" name="partid" type="text" class="form-control visually-hidden" placeholder="partid" dmx-bind:value="api1.data.id"> | |||
| <input id="txt_partNumber" name="partnumber" type="text" class="form-control" placeholder="Part Number" dmx-on:blur="hdn_url.setValue(hdn_baseurl.value.concat(value))"> | |||
| </div> | |||
| </div> | |||
| <div class="row"> | |||
| <div class="col"><button id="btn_Search" class="btn btn-primary" dmx-on:click="api1.load({});hdn_partid.setValue(api1.data.id)">Search</button></div> | |||
| </div> | |||
| <div class="row"> | |||
| <div class="col"> | |||
| <div class="d-block"><input id="txt_description" name="description" type="text" class="form-control" placeholder="Description" dmx-bind:value="api1.data.description"><select id="select1" class="form-select" name="pcodes" dmx-bind:options="serverconnect1.data.api.data" optiontext="name" optionvalue="id" dmx-bind:value="api1.data.partcode.id"> | |||
| <option value="">Part Code</option> | |||
| </select></div> | |||
| </div> | |||
| <div class="col"> | |||
| <div class="d-block"><input id="txt_replaces" name="replaces" type="text" class="form-control" placeholder="Replaces" dmx-bind:value="api1.data.replaces.number"><input id="txt_replacedby" name="replacedby" type="text" class="form-control" placeholder="Replaced By" dmx-bind:value="api1.data.replacedby.number"></div> | |||
| </div> | |||
| </div> | |||
| <div class="row"> | |||
| <div class="col"> | |||
| <div class="d-block"> | |||
| <input id="txt_primaryvendor" name="primaryvendor" type="text" class="form-control" placeholder="Primary Vendor" dmx-bind:value="api1.data.primaryvendor.name"> | |||
| </div> | |||
| </div> | |||
| <div class="col"> | |||
| <div class="d-block"> | |||
| <input id="txt_secondaryvendor" name="seconaryvendor" type="text" class="form-control" placeholder="Secondary Vendor" dmx-bind:value="api1.data.secondaryvendor.name"> | |||
| </div> | |||
| </form> | |||
| </div> | |||
| </div> | |||
| <div class="row"> | |||
| <div class="col"> | |||
| <a href="#" class="btn btn-warning" id="btn_dspec" dmx-bind:href="'/dspec?id='+hdn_partid.value">DSpec</a> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </form> | |||
| </div> | |||
| @@ -1,21 +1,70 @@ | |||
| <!doctype html> | |||
| <html> | |||
| <head> | |||
| <base href="/"> | |||
| <script src="/dmxAppConnect/dmxAppConnect.js"></script> | |||
| <meta charset="UTF-8"> | |||
| <title>Untitled Document</title> | |||
| <base href="/"> | |||
| <script src="/dmxAppConnect/dmxAppConnect.js"></script> | |||
| <meta charset="UTF-8"> | |||
| <title>Untitled Document</title> | |||
| <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.14.0/css/all.css" integrity="sha384-HzLeBuhoNPvSl5KYnjx0BT+WB0QEEqLprO+NBkkk5gbc67FTaL7XIGa2w1L0Xbgc" crossorigin="anonymous" /> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | |||
| <link rel="stylesheet" href="/bootstrap/5/css/bootstrap.min.css" /> | |||
| <link rel="stylesheet" href="/css/style.css" /> | |||
| <script src="/dmxAppConnect/dmxRouting/dmxRouting.js" defer></script> | |||
| <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.14.0/css/all.css" integrity="sha384-HzLeBuhoNPvSl5KYnjx0BT+WB0QEEqLprO+NBkkk5gbc67FTaL7XIGa2w1L0Xbgc" crossorigin="anonymous" /> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | |||
| <link rel="stylesheet" href="/bootstrap/5/css/bootstrap.min.css" /> | |||
| <link rel="stylesheet" href="/css/style.css" /> | |||
| <script src="/dmxAppConnect/dmxRouting/dmxRouting.js" defer></script> | |||
| <script src="/dmxAppConnect/dmxDataTraversal/dmxDataTraversal.js" defer></script> | |||
| <script src="/dmxAppConnect/dmxTyped/dmxTyped.js" defer></script> | |||
| <script src="/dmxAppConnect/dmxTyped/typed.min.js" defer></script> | |||
| <link rel="stylesheet" href="/dmxAppConnect/dmxValidator/dmxValidator.css" /> | |||
| <script src="/dmxAppConnect/dmxValidator/dmxValidator.js" defer></script> | |||
| <link rel="stylesheet" href="/dmxAppConnect/dmxNotifications/dmxNotifications.css" /> | |||
| <script src="/dmxAppConnect/dmxNotifications/dmxNotifications.js" defer></script> | |||
| <script src="/dmxAppConnect/dmxBrowser/dmxBrowser.js" defer></script> | |||
| <script src="/dmxAppConnect/dmxBootstrap5Navigation/dmxBootstrap5Navigation.js" defer></script> | |||
| <script src="/dmxAppConnect/dmxFormatter/dmxFormatter.js" defer></script> | |||
| <script src="/dmxAppConnect/dmxStateManagement/dmxStateManagement.js" defer></script> | |||
| <script src="/dmxAppConnect/dmxFormRepeat/dmxFormRepeat.js" defer></script> | |||
| <link rel="stylesheet" href="/dmxAppConnect/dmxBootstrap5TableGenerator/dmxBootstrap5TableGenerator.css" /> | |||
| <script src="/dmxAppConnect/dmxBootstrap5Modal/dmxBootstrap5Modal.js" defer></script> | |||
| <script src="/dmxAppConnect/dmxScheduler/dmxScheduler.js" defer></script> | |||
| </head> | |||
| <body is="dmx-app" id="main"> | |||
| <div is="dmx-view" id="content"> | |||
| <%- await include(content, locals); %> | |||
| </div> | |||
| <script src="/bootstrap/5/js/bootstrap.bundle.min.js"></script> | |||
| <div class="container"> | |||
| <nav class="navbar navbar-expand-lg navbar-light bg-light"> | |||
| <div class="container-fluid"> | |||
| <a class="navbar-brand" href="#">RPM Studio</a> | |||
| <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar1_collapse" aria-controls="navbar1_collapse" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button> | |||
| <div class="collapse navbar-collapse" id="navbar1_collapse"> | |||
| <div class="navbar-nav"> | |||
| <div class="nav-item dropdown"> | |||
| <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" id="dropdown1" role="button" aria-haspopup="true" aria-expanded="false">Dropdown</a> | |||
| <div class="dropdown-menu" aria-labelledby="dropdown1"> | |||
| <a class="dropdown-item" href="/dspec" internal="true">New Part</a> | |||
| <a class="dropdown-item" href="#">Another action</a> | |||
| <a class="dropdown-item" href="#">Something else here</a> | |||
| </div> | |||
| </div> | |||
| <a class="nav-item nav-link active" href="/">Home</a> | |||
| <div class="nav-item dropdown"> | |||
| <a class="nav-link dropdown-toggle" href="#" id="navbar1_dropdown" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Account </a> | |||
| <div class="dropdown-menu" aria-labelledby="navbar1_dropdown"> | |||
| <a class="dropdown-item" href="#">Login</a> | |||
| <a class="dropdown-item" href="#">Logout</a> | |||
| <div class="dropdown-divider"></div> | |||
| <a class="dropdown-item" href="#">Account</a> | |||
| </div> | |||
| </div> | |||
| <a class="nav-item nav-link disabled" href="#">Disabled</a> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </nav> | |||
| </div> | |||
| <div is="dmx-view" id="content"> | |||
| <%- await include(content, locals); %> | |||
| </div> | |||
| <script src="/bootstrap/5/js/bootstrap.bundle.min.js"></script> | |||
| </body> | |||
| </html> | |||
| </html> | |||
| @@ -0,0 +1,16 @@ | |||
| <!-- Wappler include head-page="layouts/main" fontawesome_5="cdn" bootstrap5="local" is="dmx-app" id="parttype" appConnect="local" --> | |||
| <meta name="ac:route" content="/parttype"> | |||
| <div class="container"> | |||
| <dmx-serverconnect id="serverconnect1" url="/api/PartTypes/All"></dmx-serverconnect> | |||
| <h1>Part Type</h1> | |||
| <form id="form1"> | |||
| <div class="form-group mb-3 row" is="dmx-radio-group" id="group1"> | |||
| <label for="select1" class="col-sm-2 col-form-label">Select</label> | |||
| <div class="col-sm-10"> | |||
| <select id="select1" class="form-select" dmx-bind:options="serverconnect1.data.api.data" optiontext="name" optionvalue="id"> | |||
| </select> | |||
| <small id="select1Help" class="form-text text-muted">Enter a help text for your select.</small> | |||
| </div> | |||
| </div> | |||
| </form> | |||
| </div> | |||
| @@ -0,0 +1,61 @@ | |||
| <!-- Wappler include head-page="layouts/main" fontawesome_5="cdn" bootstrap5="local" is="dmx-app" id="register" appConnect="local" components="{dmxValidator:{},dmxNotifications:{},dmxBrowser:{}}" --> | |||
| <div is="dmx-browser" id="browser1"></div> | |||
| <dmx-notifications id="notifies1"></dmx-notifications> | |||
| <meta name="ac:route" content="/register"> | |||
| <div class="container"> | |||
| <form id="register1" is="dmx-serverconnect-form" method="post" action="/api/Users/registration" dmx-on:error="notifies1.danger('Error adding user')" dmx-on:unauthorized="notifies1.warning('Unathorized Entry')" dmx-on:success="register1.reset();notifies1.success('User added');browser1.goto('/',true,'Home Page')"> | |||
| <div class="row justify-content-center"> | |||
| <div class="col-12 col-md-8 col-lg-8 col-xl-6"> | |||
| <div class="row"> | |||
| <div class="col text-center"> | |||
| <h1>Register</h1> | |||
| <p class="text-h3">Enter your registration details below.</p> | |||
| </div> | |||
| </div> | |||
| <div class="row align-items-center"> | |||
| <div class="col mt-4"> | |||
| <input type="text" id="txt_firstname" name="firstname" class="form-control" placeholder="First Name" required=""> | |||
| </div> | |||
| </div> | |||
| <div class="row align-items-center"> | |||
| <div class="col mt-4"> | |||
| <input type="text" id="txt_lastname" name="lastname" class="form-control" placeholder="Last Name" required=""> | |||
| </div> | |||
| </div> | |||
| <div class="row align-items-center mt-4"> | |||
| <div class="col"> | |||
| <input type="email" id="txt_email" name="email" class="form-control" placeholder="Email" required="" data-rule-email=""> | |||
| </div> | |||
| </div> | |||
| <div class="row"> | |||
| <div class="col"> | |||
| <input id="txt_username" name="username" type="text" class="form-control" placeholder="username" required=""> | |||
| </div> | |||
| </div> | |||
| <div class="row align-items-center mt-4"> | |||
| <div class="col"> | |||
| <input type="password" id="txt_password" name="password" class="form-control" placeholder="Password" required="" data-rule-nowhitespace=""> | |||
| </div> | |||
| <div class="col"> | |||
| <input type="password" id="txt_confirmpassword" name="confirmpassword" class="form-control" placeholder="Confirm Password" required="" data-rule-equalto="password"> | |||
| </div> | |||
| </div> | |||
| <div class="row justify-content-start mt-4"> | |||
| <div class="col"> | |||
| <div class="form-check"> | |||
| <label class="form-check-label"> | |||
| <input type="checkbox" class="form-check-input" required=""> | |||
| I Read and Accept <a href="/termsandconditions" internal="true" target="_blank">Terms and Conditions</a> | |||
| </label> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="row"> | |||
| <input id="txt_bot" name="productid" type="hidden" class="form-control"> | |||
| <div class="col"><button id="btn_submit" class="btn mt-4 btn-primary" type="submit">Submit</button></div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </form> | |||
| </div> | |||
| @@ -0,0 +1,10 @@ | |||
| <!-- Wappler include head-page="layouts/main" fontawesome_5="cdn" bootstrap5="local" is="dmx-app" id="repeattest" appConnect="local" components="{dmxFormRepeat:{},dmxStateManagement:{}}" --> | |||
| <meta name="ac:route" content="/repeattest"> | |||
| <dmx-serverconnect id="serverconnect1" url="/api/PartTypes/All"></dmx-serverconnect> | |||
| <div class="container"> | |||
| <h1>Fancy display heading</h1> | |||
| <form id="form1" is="dmx-serverconnect-form" action="/api/PartTypes/All"> | |||
| <div class="row"> | |||
| </div> | |||
| </form> | |||
| </div> | |||
| @@ -0,0 +1,5 @@ | |||
| <!-- Wappler include head-page="layouts/main" fontawesome_5="cdn" bootstrap5="local" is="dmx-app" id="termsandconditions" appConnect="local" --> | |||
| <meta name="ac:route" content="/termsandconditions"> | |||
| <div class="container"> | |||
| <h1>Terms and Conditions</h1> | |||
| </div> | |||