You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

100 lines
6.7 KiB

  1. {
  2. "functions": {
  3. "increase": {
  4. "js": "let args = arguments[0]; let count = js.element({path:args}) || 0; count+=1; js.element({path:args, value: count}); "
  5. },
  6. "decrease": {
  7. "js": "let args = arguments[0]; let count = js.element({path:args}) || 0; count-=1; js.element({path:args, value: count}); "
  8. },
  9. "random": {
  10. "js": "let args = arguments[0]; let from=0, to=Infinity, decimals=0; if (Array.isArray(args)) {[from, to, decimals] = args;} else {to = args;} from = Number(from); to = Number(to); decimals = Number(decimals); return Number((from + (to-from)*Math.random()).toFixed(decimals))"
  11. },
  12. "removeFromArray": {
  13. "js": "let args = arguments[0]; let arr = js.element({path:args.from}); let index = arr.indexOf(args.value); if (index > -1) arr.splice(index, 1); js.element({path:args.from, value:arr});"
  14. },
  15. "substr": {
  16. "js": "let args = arguments[0]; let str, from=0, length; if (Array.isArray(args)) {[str, from, length] = args;} else {str = args;} console.warn('from:'+from + ' length:'+length + 'str:'+str); return str.substr(from, length);"
  17. },
  18. "stringify": {
  19. "js": "let args = arguments[0]; return JSON.strinfigy(args);"
  20. },
  21. "exportJSON": {
  22. "arguments": {
  23. "type": "object",
  24. "properties": {
  25. "name": {
  26. "type": "string"
  27. },
  28. "data": {
  29. "type": "object"
  30. }
  31. },
  32. "required": [
  33. "name",
  34. "data"
  35. ]
  36. },
  37. "js": "let args = arguments[0]; let el = document.createElement('a'); el.style.display = 'none'; el.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(JSON.stringify(args.data, null, '\t'))); el.setAttribute('download', args.name); document.body.appendChild(el); el.click(); document.body.removeChild(el);"
  38. },
  39. "fetch": {
  40. "note": "check if can be replaced with fetchJson adding the type parameter (json, form)",
  41. "js": "let args = arguments[0], formData = new FormData(); window.formData = formData; if (args.data) for (key in args.data) formData.append(key, args.data[key]); if (args.data) args.options.body = formData; fetch(args.url, args.options).then(response => response.json()).then(data => {js.callback({do:args.success, to:args.to, var:args.var, value:data}) }).catch((error)=>{console.warn('ERROR fetching '+args.url); console.warn(error); js.callback({do:args.error}) })"
  42. },
  43. "fetchToken": {
  44. "js": "let args = arguments[0]; if (args.options.body && typeof args.options.body !== 'string') args.options.body = JSON.stringify(args.options.body); fetch(args.url, args.options).then(response => response.json()).then(data => {console.log('fetchJson success'); console.log(data);}).catch((err) => {console.log('fetchJson error');console.log(err);})"
  45. },
  46. "fetchJson": {
  47. "js": "let args = arguments[0]; console.log('fetchJson'); console.log(args); if (args.options.body) args.options.body = JSON.stringify(args.options.body); fetch(args.url, args.options).then(response => response.json()).then(data => {console.log('data'); console.log(data); if (data) {js.callback({do:args.success, to:args.to, var:args.var, value:data})} }).catch((err)=>{console.log('fetchJson error'); console.log(err); if (args.error) js.callback({do:args.error}) })"
  48. },
  49. "formDataToJson": {
  50. "js": "let args = arguments[0]; let selector = args[0]; var object = {}; let formData = new FormData(document.querySelector(selector)); formData.forEach((value, key) => object[key] = value); return JSON.stringify(object);"
  51. },
  52. "uploadFromUrl": {
  53. "note": "add: if args.data[dataKey] not string -> JSON.stringify(args.data[dataKey])",
  54. "js": "let args = arguments[0]; if (!args.options) args.options = {method: 'POST'}; let el = document.createElement('a'); document.documentElement.append(el); el.append(document.createElement('img')); fetch(args.file.url).then(res => res.blob()).then(blob => {const myFile = new File([blob], 'image.jpg', blob); let formData = new FormData(); if (args.data) for (dataKey in args.data) formData.append(dataKey, args.data[dataKey]); formData.append(args.file.key, myFile); let options = JSON.parse(JSON.stringify(args.options)); options.body = formData; fetch(args.url, options).then(response => response.json()).then(data => { js.callback({ do: args.success, to: args.to, var: args.var, value: data }) }).catch((error) => { console.warn('ERROR fetching ' + args.url); console.warn(error); js.callback({ do: args.error }) }) })"
  55. },
  56. "upload": {
  57. "js": "let args = arguments[0], inp = document.querySelector(args.file.selector); for (let fileKey=0; fileKey < inp.files.length; fileKey++) {let formData = new FormData(); if (args.data) for (dataKey in args.data) formData.append(dataKey, args.data[dataKey]); formData.append(args.file.key, inp.files[fileKey]); let options = JSON.parse(JSON.stringify(args.options)); options.body = formData; fetch(args.url, options).then(response => response.json()).then(data => { js.callback({ do: args.success, to: args.to, var: args.var, value: data }) }).catch((error) => { console.warn('ERROR fetching ' + args.url); console.warn(error); js.callback({ do: args.error }) }) }"
  58. },
  59. "fileFromUrl": {
  60. "js": "let args = arguments[0]; let el = document.createElement('a'); document.documentElement.append(el); el.append(document.createElement('img')); fetch(args.url).then(res => res.blob()).then(blob => {console.log(blob); const myFile = new File([blob], 'image.jpg', blob);console.log(myFile); return myFile })"
  61. },
  62. "downloadImage": {
  63. "js": "let args = arguments[0]; let el = document.createElement('a'); document.documentElement.append(el); el.append(document.createElement('img')); fetch(args.url).then(res => res.blob()).then(blob => {el.download = args.name; el.href = URL.createObjectURL(blob); el.click(); document.documentElement.removeChild(el);})"
  64. }
  65. },
  66. "note": {
  67. "split": {
  68. "note": "use var x: '{var list}'.split(',')",
  69. "js": "let args = arguments[0]; let splitter=',', elements=''; if (Array.isArray(args)) {[elements, splitter] = args;} else {elements = args;} return elements.split(splitter);"
  70. },
  71. "reverse": {
  72. "note": "or use set var x: {var y}.reverse()",
  73. "js": "let args = arguments[0]; let path = ''; if (Array.isArray(args)) {[path] = args;} else {path = args;} let arr = js.element({path:path}); return arr.reverse() "
  74. },
  75. "sort": {
  76. "note": "work in progress",
  77. "js": "let args = arguments[0]; let el = js.element({path:args.list}); "
  78. },
  79. "push": {
  80. "js": "let args = arguments[0]; let arr = js.element({path:args.to}); arr.push(args.value); js.element({path:args.to, value:arr});"
  81. },
  82. "pop": {
  83. "js": "let args = arguments[0]; let arr = js.element({path:args.from}); arr.pop(args.value); js.element({path:args.from, value:arr});"
  84. }
  85. },
  86. "parts": {
  87. "objects": {
  88. "exportData": {
  89. "do": [
  90. {
  91. "exportJSON": {
  92. "name": "{arguments}.json",
  93. "data": "{data {arguments}}"
  94. }
  95. }
  96. ]
  97. }
  98. }
  99. }
  100. }