rpm-mcarman пре 2 година
родитељ
комит
bc4cda18fb
47 измењених фајлова са 10409 додато и 85 уклоњено
  1. +3
    -4
      .wappler/project.json
  2. +8
    -0
      .wappler/targets/Development/app/config/config.json
  3. +566
    -0
      app/api/DSpec/SearchPID.json
  4. +237
    -0
      app/api/PartCodes/All.json
  5. +230
    -0
      app/api/PartTypes/All.json
  6. +3
    -0
      app/api/Parts/Create.json
  7. +3
    -0
      app/api/Parts/Delete.json
  8. +3
    -0
      app/api/Parts/Read.json
  9. +3
    -0
      app/api/Parts/Seach.json
  10. +3
    -0
      app/api/Parts/Update.json
  11. +362
    -0
      app/api/Users/registration.json
  12. +8
    -0
      app/config/config.json
  13. +26
    -0
      app/config/routes.json
  14. +3
    -0
      app/modules/global.json
  15. +1
    -2
      lib/core/app.js
  16. +9
    -12
      lib/core/util.js
  17. +2
    -2
      lib/formatters/date.js
  18. +4
    -4
      lib/modules/dbconnector.js
  19. +8
    -5
      lib/setup/config.js
  20. +2
    -27
      lib/setup/routes.js
  21. +1
    -1
      lib/setup/sockets.js
  22. +4655
    -0
      package-lock.json
  23. +0
    -1
      package.json
  24. +3652
    -0
      public/dmxAppConnect/config.js
  25. +8
    -0
      public/dmxAppConnect/dmxBootstrap5Modal/dmxBootstrap5Modal.js
  26. +40
    -0
      public/dmxAppConnect/dmxBootstrap5Navigation/dmxBootstrap5Navigation.js
  27. +78
    -0
      public/dmxAppConnect/dmxBootstrap5TableGenerator/dmxBootstrap5TableGenerator.css
  28. +8
    -0
      public/dmxAppConnect/dmxBrowser/dmxBrowser.js
  29. +8
    -0
      public/dmxAppConnect/dmxDataTraversal/dmxDataTraversal.js
  30. +8
    -0
      public/dmxAppConnect/dmxFormRepeat/dmxFormRepeat.js
  31. +8
    -0
      public/dmxAppConnect/dmxFormatter/dmxFormatter.js
  32. +58
    -0
      public/dmxAppConnect/dmxNotifications/dmxNotifications.css
  33. +8
    -0
      public/dmxAppConnect/dmxNotifications/dmxNotifications.js
  34. +8
    -0
      public/dmxAppConnect/dmxScheduler/dmxScheduler.js
  35. +8
    -0
      public/dmxAppConnect/dmxStateManagement/dmxStateManagement.js
  36. +8
    -0
      public/dmxAppConnect/dmxTyped/dmxTyped.js
  37. +10
    -0
      public/dmxAppConnect/dmxTyped/typed.min.js
  38. +35
    -0
      public/dmxAppConnect/dmxValidator/dmxValidator.css
  39. +8
    -0
      public/dmxAppConnect/dmxValidator/dmxValidator.js
  40. +34
    -0
      views/.wappler_folder.json
  41. +70
    -0
      views/dspec.ejs
  42. +57
    -13
      views/index.ejs
  43. +63
    -14
      views/layouts/main.ejs
  44. +16
    -0
      views/parttype.ejs
  45. +61
    -0
      views/register.ejs
  46. +10
    -0
      views/repeattest.ejs
  47. +5
    -0
      views/termsandconditions.ejs

+ 3
- 4
.wappler/project.json Прегледај датотеку

@@ -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": []
}

+ 8
- 0
.wappler/targets/Development/app/config/config.json Прегледај датотеку

@@ -0,0 +1,8 @@
{
"debug": true,
"secret": "55XmluQ2OSLTa3N",
"cors": {
"origin": "*",
"methods": "GET,POST,DELETE,PATCH,PUT"
}
}

+ 566
- 0
app/api/DSpec/SearchPID.json Прегледај датотеку

@@ -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"
}
}
}

+ 237
- 0
app/api/PartCodes/All.json Прегледај датотеку

@@ -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"
}
}
}

+ 230
- 0
app/api/PartTypes/All.json Прегледај датотеку

@@ -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"
}

+ 3
- 0
app/api/Parts/Create.json Прегледај датотеку

@@ -0,0 +1,3 @@
{
"exec": {}
}

+ 3
- 0
app/api/Parts/Delete.json Прегледај датотеку

@@ -0,0 +1,3 @@
{
"exec": {}
}

+ 3
- 0
app/api/Parts/Read.json Прегледај датотеку

@@ -0,0 +1,3 @@
{
"exec": {}
}

+ 3
- 0
app/api/Parts/Seach.json Прегледај датотеку

@@ -0,0 +1,3 @@
{
"exec": {}
}

+ 3
- 0
app/api/Parts/Update.json Прегледај датотеку

@@ -0,0 +1,3 @@
{
"exec": {}
}

+ 362
- 0
app/api/Users/registration.json Прегледај датотеку

@@ -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"
}
]
}
}

+ 8
- 0
app/config/config.json Прегледај датотеку

@@ -0,0 +1,8 @@
{
"debug": true,
"secret": "55XmluQ2OSLTa3N",
"cors": {
"origin": "*",
"methods": "GET,POST,DELETE,PATCH,PUT"
}
}

+ 26
- 0
app/config/routes.json Прегледај датотеку

@@ -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"
}
]

+ 3
- 0
app/modules/global.json Прегледај датотеку

@@ -0,0 +1,3 @@
{
"exec": {}
}

+ 1
- 2
lib/core/app.js Прегледај датотеку

@@ -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];


+ 9
- 12
lib/core/util.js Прегледај датотеку

@@ -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
- 2
lib/formatters/date.js Прегледај датотеку

@@ -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) {


+ 4
- 4
lib/modules/dbconnector.js Прегледај датотеку

@@ -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);


+ 8
- 5
lib/setup/config.js Прегледај датотеку

@@ -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;


+ 2
- 27
lib/setup/routes.js Прегледај датотеку

@@ -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) => {


+ 1
- 1
lib/setup/sockets.js Прегледај датотеку

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


+ 4655
- 0
package-lock.json
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 0
- 1
package.json Прегледај датотеку

@@ -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",


+ 3652
- 0
public/dmxAppConnect/config.js
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 8
- 0
public/dmxAppConnect/dmxBootstrap5Modal/dmxBootstrap5Modal.js Прегледај датотеку

@@ -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

+ 40
- 0
public/dmxAppConnect/dmxBootstrap5Navigation/dmxBootstrap5Navigation.js Прегледај датотеку

@@ -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');
}
}
});
}
})()

+ 78
- 0
public/dmxAppConnect/dmxBootstrap5TableGenerator/dmxBootstrap5TableGenerator.css Прегледај датотеку

@@ -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
}

+ 8
- 0
public/dmxAppConnect/dmxBrowser/dmxBrowser.js
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 8
- 0
public/dmxAppConnect/dmxDataTraversal/dmxDataTraversal.js Прегледај датотеку

@@ -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

+ 8
- 0
public/dmxAppConnect/dmxFormRepeat/dmxFormRepeat.js Прегледај датотеку

@@ -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

+ 8
- 0
public/dmxAppConnect/dmxFormatter/dmxFormatter.js
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 58
- 0
public/dmxAppConnect/dmxNotifications/dmxNotifications.css Прегледај датотеку

@@ -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 }
}

+ 8
- 0
public/dmxAppConnect/dmxNotifications/dmxNotifications.js Прегледај датотеку

@@ -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

+ 8
- 0
public/dmxAppConnect/dmxScheduler/dmxScheduler.js Прегледај датотеку

@@ -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

+ 8
- 0
public/dmxAppConnect/dmxStateManagement/dmxStateManagement.js Прегледај датотеку

@@ -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

+ 8
- 0
public/dmxAppConnect/dmxTyped/dmxTyped.js Прегледај датотеку

@@ -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

+ 10
- 0
public/dmxAppConnect/dmxTyped/typed.min.js
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 35
- 0
public/dmxAppConnect/dmxValidator/dmxValidator.css Прегледај датотеку

@@ -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;
}

+ 8
- 0
public/dmxAppConnect/dmxValidator/dmxValidator.js
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 34
- 0
views/.wappler_folder.json Прегледај датотеку

@@ -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": ""
}
}

+ 70
- 0
views/dspec.ejs Прегледај датотеку

@@ -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&gt;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">

+ 57
- 13
views/index.ejs Прегледај датотеку

@@ -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>

+ 63
- 14
views/layouts/main.ejs Прегледај датотеку

@@ -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&nbsp;</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>

+ 16
- 0
views/parttype.ejs Прегледај датотеку

@@ -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>

+ 61
- 0
views/register.ejs Прегледај датотеку

@@ -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>

+ 10
- 0
views/repeattest.ejs Прегледај датотеку

@@ -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>

+ 5
- 0
views/termsandconditions.ejs Прегледај датотеку

@@ -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>

Loading…
Откажи
Сачувај