Advertisement
vizrtexample

BrowserRequester

Feb 11th, 2025 (edited)
15
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VBScript 10.19 KB | None | 0 0
  1. dim browser As PluginInstance = this.GetFunctionPluginInstance("Browser")
  2. dim script As PluginInstance = this.ScriptPluginInstance
  3.  
  4. dim method As Array[String]
  5.     method.Push("  GET  ")
  6.     method.Push("  POST  ")
  7.     method.Push("  PUT  ")
  8.     method.Push("  DELETE  ")
  9.  
  10. sub OnInitParameters()
  11.     System.Map.RegisterChangedCallback( this.VizId & " BROWSER STATUS" )
  12.     RegisterRadioButton("method", "Method:", 0, method)
  13.     RegisterParameterString("url", "Url:", "", 80, 1000, "")
  14.     RegisterParameterText("jscode", "", 480, 100)
  15.     RegisterParameterText("data", "{\"key1\":\"value\"}", 580, 50)
  16.     RegisterParameterText("console", "", 580, 100)
  17.     RegisterPushButton( "send", " SEND ", 1 )  
  18. end sub
  19.  
  20. sub OnInit()
  21.     browser.SetParameterString("url", GetParameterString("url"))
  22.     script.SetParameterString("jscode", "")
  23.     browser.SetParameterString("javascript", "")
  24.     browser.PushButton("reload")
  25.     script.SetParameterString("jscode", JsFetchData() & JsFunctions())
  26.     dim imgid as string = system.sendCommand("#"& this.VizId &"*TEXTURE*IMAGE*OBJECT_ID GET")
  27.     system.sendcommand("#"& this.Vizid &"*TEXTURE*IMAGE2 SET " & imgid &" NULL")
  28. end sub
  29.  
  30. sub OnParameterChanged(parameterName As String)
  31.     if parameterName == "url" then
  32.        if GetParameterString("url") <> "" then
  33.           browser.SetParameterString("url", GetParameterString("url"))
  34.           browser.SetParameterString("javascript", "")
  35.        else
  36.           browser.SetParameterString("url", "vizgh:///Browser/snap.png")
  37.           browser.SetParameterString("javascript", "")
  38.           script.SetParameterString("console", "")
  39.           SendGuiRefresh()
  40.        end if
  41.     end if
  42. end sub
  43.  
  44. sub OnGuiStatus()
  45.     'Debug Javascript SHOW/HIDE
  46.    SendGuiParameterShow("jscode", HIDE)
  47.     select case GetParameterInt("method")
  48.        case 0
  49.            SendGuiParameterShow("data", HIDE)
  50.        case 1
  51.            SendGuiParameterShow("data", SHOW)
  52.        case 2
  53.            SendGuiParameterShow("data", SHOW)
  54.        case 3
  55.            SendGuiParameterShow("data", SHOW)
  56.     end select
  57. end sub
  58.  
  59. sub OnExecAction(buttonId as Integer)
  60.     dim js as string = GetParameterString("jscode")
  61.     js.Substitute("<URL>",  GetParameterString("url"), true)
  62.     select case GetParameterInt("method")
  63.         case 0
  64.             js.Substitute("<METHOD>",  "GET", true)
  65.             js.Substitute("<DATA>",  "null", true)
  66.         case 1
  67.             js.Substitute("<METHOD>",  "POST", true)
  68.             js.Substitute("<DATA>", GetParameterString("data"), true)
  69.         case 2
  70.             js.Substitute("<METHOD>",  "PUT", true)
  71.             js.Substitute("<DATA>", GetParameterString("data"), true)
  72.         case 3
  73.             js.Substitute("<METHOD>",  "DELETE", true)
  74.             js.Substitute("<DATA>", GetParameterString("data"), true)
  75.     end select
  76.     if buttonId = 1 then
  77.        script.SetParameterString("console", "")
  78.        browser.SetParameterString("javascript", js)
  79.        browser.PushButton("execjavascript")
  80.     end if
  81. end sub
  82.  
  83. sub OnSharedMemoryVariableChanged(map As SharedMemory, mapKey As String)
  84.     if mapKey = this.VizId & " BROWSER STATUS" then
  85.         dim response As String = map[mapKey]
  86.         if response.Find("VizCallback") <> -1 then
  87.             response.Substitute("0 javascript VizCallback", "", false)
  88.             response.Substitute("1 javascript VizCallback", "", false)
  89.             response.trim
  90.            if GetParameterInt("method") = 0 then
  91.                    script.SetParameterString("console", response)
  92.                    SendGuiRefresh()
  93.               end if
  94.            if GetParameterInt("method") = 1 then
  95.                    script.SetParameterString("console", response)
  96.                    SendGuiRefresh()
  97.               end if
  98.         else
  99.         end if
  100.     end if
  101. end sub
  102.  
  103. function JsFetchData() As String
  104.     dim jsCode As String
  105.     jsCode &= "fetchData('<URL>', method = '<METHOD>', data = <DATA>)" & "\n\n"
  106.     jsCode &= "function fetchData(url, method, data = null) {" & "\n"
  107.     jsCode &= "  document.body.innerHTML = '';" & "\n"
  108.     jsCode &= "  let options = {" & "\n"
  109.     jsCode &= "    method: method," & "\n"
  110.     jsCode &= "    headers: {}," & "\n"
  111.     jsCode &= "  };" & "\n"
  112.     jsCode &= "  if ((method === 'POST' || method === 'PUT' || method === 'DELETE') && data) {" & "\n"
  113.     jsCode &= "    options.headers['Content-Type'] = 'application/json';" & "\n"
  114.     jsCode &= "    options.body = JSON.stringify(data);" & "\n"
  115.     jsCode &= "  }" & "\n"
  116.     jsCode &= "  fetch(url, options)" & "\n"
  117.     jsCode &= "  .then((response) => {" & "\n"
  118.     jsCode &= "     let contentType = response.headers.get('Content-Type') || 'text/plain';" & "\n"
  119.     jsCode &= "     return response.text().then((text) => ({ status: response.status, statusText: response.statusText, type: contentType, text }));" & "\n"
  120.     jsCode &= "  })" & "\n"
  121.     jsCode &= ".then(({ status, statusText, type, text }) => {" & "\n"
  122.     jsCode &= "    let str = '';" & "\n"
  123.     jsCode &= "    if (type.startsWith(\"application/xml\") || type.startsWith(\"text/xml\")) {" & "\n"
  124.     jsCode &= "      text = text.replace(/>\\s*/g, '>').replace(/\\s*</g, '<');" & "\n"
  125.     jsCode &= "      let xml = new DOMParser().parseFromString(text, \"text/xml\");" & "\n"
  126.     jsCode &= "      str = JSON.stringify(xmlToJson(xml));" & "\n"
  127.     jsCode &= "    }" & "\n"
  128.     jsCode &= "    else if (type.startsWith(\"application/json\")) {" & "\n"
  129.     jsCode &= "      str = JSON.stringify(JSON.parse(text));" & "\n"
  130.     jsCode &= "    }" & "\n"
  131.     jsCode &= "    else if (type.startsWith(\"text/csv\")) {" & "\n"
  132.     jsCode &= "      str = JSON.stringify(csvToJson(text, \"\", \";\"));" & "\n"
  133.     jsCode &= "    }" & "\n"
  134.     jsCode &= "    else if (type.startsWith(\"text/plain\")) {" & "\n"
  135.     jsCode &= "      str = JSON.stringify({ text: text.trim() });" & "\n"
  136.     jsCode &= "    }" & "\n"
  137.     jsCode &= "    else if (type.startsWith(\"text/html\")) {" & "\n"
  138.     jsCode &= "      let parser = new DOMParser();" & "\n"
  139.     jsCode &= "      let doc = parser.parseFromString(text, \"text/html\");" & "\n"
  140.     jsCode &= "      str = JSON.stringify({ html: doc.body.innerHTML, text: doc.body.textContent.trim() });" & "\n"
  141.     jsCode &= "    }" & "\n"
  142.     jsCode &= "    else {" & "\n"
  143.     jsCode &= "      str = JSON.stringify({ error: `Unsupported data format: ${type}`, status });" & "\n"
  144.     jsCode &= "    }" & "\n"
  145.     jsCode &= "    window.vizrt.VizCallback(str);" & "\n"
  146.     jsCode &= "    document.body.innerHTML = str;" & "\n"
  147.     jsCode &= "  })" & "\n"
  148.     jsCode &= "  .catch(error => {" & "\n"
  149.     jsCode &= "    let errorMsg = JSON.stringify({ error: error.message });" & "\n"
  150.     jsCode &= "    window.vizrt.VizCallback(errorMsg);" & "\n"
  151.     jsCode &= "    document.body.innerHTML = errorMsg;" & "\n"
  152.     jsCode &= "  });" & "\n"
  153.     jsCode &= "}" & "\n\n"
  154.     JsFetchData = jsCode
  155. end function
  156.  
  157.  
  158. function JsFunctions()As String
  159.     dim jsCode As String
  160.     'XmlToJson
  161.    jsCode &= "function xmlToJson(xml) {" & "\n"
  162.     jsCode &= "  var obj = {};" & "\n"
  163.     jsCode &= "  if (xml.nodeType == 1) {" & "\n"
  164.     jsCode &= "    if (xml.attributes.length > 0) {" & "\n"
  165.     jsCode &= "      obj[\"@attributes\"] = {};" & "\n"
  166.     jsCode &= "      for (var j = 0; j < xml.attributes.length; j++) {" & "\n"
  167.     jsCode &= "        var attribute = xml.attributes.item(j);" & "\n"
  168.     jsCode &= "        obj[\"@attributes\"][attribute.nodeName] = attribute.nodeValue;" & "\n"
  169.     jsCode &= "      }" & "\n"
  170.     jsCode &= "    }" & "\n"
  171.     jsCode &= "  } else if (xml.nodeType == 3) {" & "\n"
  172.     jsCode &= "    obj = xml.nodeValue;" & "\n"
  173.     jsCode &= "  }" & "\n"
  174.     jsCode &= "  var textNodes = [].slice.call(xml.childNodes).filter(function(node) {" & "\n"
  175.     jsCode &= "    return node.nodeType === 3;" & "\n"
  176.     jsCode &= "  });" & "\n"
  177.     jsCode &= "  if (xml.hasChildNodes() && xml.childNodes.length === textNodes.length) {" & "\n"
  178.     jsCode &= "    obj = [].slice.call(xml.childNodes).reduce(function(text, node) {" & "\n"
  179.     jsCode &= "      return text + node.nodeValue;" & "\n"
  180.     jsCode &= "    }, \"\");" & "\n"
  181.     jsCode &= "  } else if (xml.hasChildNodes()) {" & "\n"
  182.     jsCode &= "    for (var i = 0; i < xml.childNodes.length; i++) {" & "\n"
  183.     jsCode &= "      var item = xml.childNodes.item(i);" & "\n"
  184.     jsCode &= "      var nodeName = item.nodeName;" & "\n"
  185.     jsCode &= "      if (typeof obj[nodeName] == \"undefined\") {" & "\n"
  186.     jsCode &= "        obj[nodeName] = xmlToJson(item);" & "\n"
  187.     jsCode &= "      } else {" & "\n"
  188.     jsCode &= "        if (typeof obj[nodeName].push == \"undefined\") {" & "\n"
  189.     jsCode &= "          var old = obj[nodeName];" & "\n"
  190.     jsCode &= "          obj[nodeName] = [];" & "\n"
  191.     jsCode &= "          obj[nodeName].push(old);" & "\n"
  192.     jsCode &= "        }" & "\n"
  193.     jsCode &= "        obj[nodeName].push(xmlToJson(item));" & "\n"
  194.     jsCode &= "      }" & "\n"
  195.     jsCode &= "    }" & "\n"
  196.     jsCode &= "  }" & "\n"
  197.     jsCode &= "  return obj;" & "\n"
  198.     jsCode &= "}" & "\n\n"
  199.     'CsvToJson Viz 5...
  200.    jsCode &= "function csvToJson(text, quoteChar = \"\", delimiter = \";\", hasHeader = true) {" & "\n"
  201.     jsCode &= "  text = text.trim();" & "\n"    
  202.     jsCode &= "  let rows = text.split(\"\\n\");" & "\n"  
  203.     jsCode &= "  const regex = new RegExp(`\\\\s*(${quoteChar})?(.*?)\\\\1\\\\s*(?:${delimiter}|$)`, \"gs\");" & "\n"
  204.     jsCode &= "  const match = (line) => {" & "\n"
  205.     jsCode &= "    return [...line.matchAll(regex)]" & "\n"
  206.     jsCode &= "      .map((m) => m[2].trim())" & "\n"
  207.     jsCode &= "      .filter((val, i, arr) => i < arr.length - 1 || val);" & "\n"
  208.     jsCode &= "  };" & "\n"
  209.     jsCode &= "  let headers;" & "\n"
  210.     jsCode &= "  if (hasHeader) {" & "\n"
  211.     jsCode &= "    headers = match(rows.shift());" & "\n"
  212.     jsCode &= "  } else {" & "\n"
  213.     jsCode &= "    const firstRow = match(rows[0]);" & "\n"
  214.     jsCode &= "    headers = firstRow.map((_, i) => `column_${i}`);" & "\n"
  215.     jsCode &= "  }" & "\n"
  216.     jsCode &= "  return rows.map((line) => {" & "\n"
  217.     jsCode &= "    return match(line).reduce((acc, cur, i) => {" & "\n"
  218.     jsCode &= "      const key = headers[i];" & "\n"
  219.     jsCode &= "      const val = cur === \"\" ? null : isNaN(cur) ? cur : Number(cur);" & "\n"
  220.     jsCode &= "      return { ...acc, [key]: val };" & "\n"
  221.     jsCode &= "    }, {});" & "\n"
  222.     jsCode &= "  });" & "\n"
  223.     jsCode &= "}" & "\n\n"
  224.     JsFunctions = jsCode
  225. end function
  226.  
  227.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement