TIANYONG 4 months ago
parent
commit
4dd5cc41da
100 changed files with 774 additions and 0 deletions
  1. 1 0
      dist/css/index-23ff396c.css
  2. 0 0
      dist/css/index-44d5a4cb.css
  3. 1 0
      dist/css/index-e2246bb5.css
  4. 0 0
      dist/css/instrument-59fc06e9.css
  5. 1 0
      dist/css/modeView-c4c5480d.css
  6. BIN
      dist/favicon.ico
  7. 68 0
      dist/flexible.js
  8. 14 0
      dist/helpers/html-to-image.js
  9. 19 0
      dist/helpers/html2canvas.js
  10. 0 0
      dist/helpers/lottie.min.js
  11. 0 0
      dist/helpers/plyr.css
  12. 0 0
      dist/helpers/plyr.min.js
  13. 0 0
      dist/helpers/qrcode.js
  14. 6 0
      dist/helpers/qs.min.js
  15. 4 0
      dist/helpers/rem-fit.min.js
  16. 72 0
      dist/instrument.html
  17. 0 0
      dist/js/index-03bddf2b.js
  18. 0 0
      dist/js/index-03c84c67.js
  19. 1 0
      dist/js/index-0af054ba.js
  20. 0 0
      dist/js/index-0bbf84fb.js
  21. 0 0
      dist/js/index-0d3b7b42.js
  22. 0 0
      dist/js/index-142fdf16.js
  23. 0 0
      dist/js/index-20c025d3.js
  24. 0 0
      dist/js/index-2270f2d1.js
  25. 0 0
      dist/js/index-2499965c.js
  26. 0 0
      dist/js/index-2a1343e0.js
  27. 0 0
      dist/js/index-330cb7c5.js
  28. 0 0
      dist/js/index-38262e39.js
  29. 0 0
      dist/js/index-4b43430a.js
  30. 0 0
      dist/js/index-58c2eaac.js
  31. 0 0
      dist/js/index-655a454b.js
  32. 0 0
      dist/js/index-662173fe.js
  33. 0 0
      dist/js/index-6972bb98.js
  34. 0 0
      dist/js/index-71a277d3.js
  35. 0 0
      dist/js/index-7ad0b9f0.js
  36. 0 0
      dist/js/index-7f22768f.js
  37. 0 0
      dist/js/index-902205b3.js
  38. 0 0
      dist/js/index-91fbf033.js
  39. 0 0
      dist/js/index-97e45cdd.js
  40. 0 0
      dist/js/index-ad04d4cf.js
  41. 0 0
      dist/js/index-ad5b3309.js
  42. 0 0
      dist/js/index-c7652d9b.js
  43. 0 0
      dist/js/index-cb2d56fd.js
  44. 0 0
      dist/js/index-cef965b9.js
  45. 0 0
      dist/js/index-d0f39753.js
  46. 0 0
      dist/js/index-d13c0247.js
  47. 0 0
      dist/js/index-f01bef28.js
  48. 0 0
      dist/js/index-f23e3dbf.js
  49. 0 0
      dist/js/index-f5dd9e1d.js
  50. 0 0
      dist/js/index-f9270c49.js
  51. 0 0
      dist/js/index-fad5795c.js
  52. 0 0
      dist/js/index-legacy-0f6cde19.js
  53. 0 0
      dist/js/index-legacy-18f4a1c4.js
  54. 0 0
      dist/js/index-legacy-1fec36a2.js
  55. 0 0
      dist/js/index-legacy-31794bdf.js
  56. 0 0
      dist/js/index-legacy-34e08e3e.js
  57. 0 0
      dist/js/index-legacy-36e7f78a.js
  58. 0 0
      dist/js/index-legacy-3851c136.js
  59. 0 0
      dist/js/index-legacy-3a02f1ea.js
  60. 0 0
      dist/js/index-legacy-3e4d4286.js
  61. 0 0
      dist/js/index-legacy-4514d1bb.js
  62. 0 0
      dist/js/index-legacy-457fb6fa.js
  63. 0 0
      dist/js/index-legacy-5fc4ec32.js
  64. 0 0
      dist/js/index-legacy-6888bad9.js
  65. 0 0
      dist/js/index-legacy-68c78177.js
  66. 0 0
      dist/js/index-legacy-733f2636.js
  67. 0 0
      dist/js/index-legacy-7e8508f0.js
  68. 0 0
      dist/js/index-legacy-7f19d6d4.js
  69. 0 0
      dist/js/index-legacy-9b4d7da4.js
  70. 0 0
      dist/js/index-legacy-a35707f4.js
  71. 0 0
      dist/js/index-legacy-ac9e06ec.js
  72. 0 0
      dist/js/index-legacy-b25f7627.js
  73. 0 0
      dist/js/index-legacy-b4dddc9f.js
  74. 0 0
      dist/js/index-legacy-c0c0450a.js
  75. 1 0
      dist/js/index-legacy-c67665f8.js
  76. 0 0
      dist/js/index-legacy-cb5028d7.js
  77. 0 0
      dist/js/index-legacy-d7f2e64d.js
  78. 0 0
      dist/js/index-legacy-d942ef39.js
  79. 0 0
      dist/js/index-legacy-df191e0e.js
  80. 0 0
      dist/js/index-legacy-eb6058b4.js
  81. 0 0
      dist/js/index-legacy-ec8184e8.js
  82. 0 0
      dist/js/index-legacy-f02b4e94.js
  83. 0 0
      dist/js/index-legacy-f4aeb5cd.js
  84. 0 0
      dist/js/index-legacy-f7c0163b.js
  85. 0 0
      dist/js/index-legacy-faa1dba8.js
  86. 0 0
      dist/js/index-legacy-fbabd463.js
  87. 0 0
      dist/js/instrument-98ef3583.js
  88. 0 0
      dist/js/instrument-legacy-7c9a95ca.js
  89. 0 0
      dist/js/modeView-880e0b02.js
  90. 0 0
      dist/js/modeView-legacy-60136519.js
  91. 0 0
      dist/js/polyfills-86411078.js
  92. 0 0
      dist/js/polyfills-legacy-0024857d.js
  93. 0 0
      dist/loading.json
  94. 11 0
      dist/loading.svg
  95. 24 0
      dist/midi/inc/jasmid/LICENSE
  96. 238 0
      dist/midi/inc/jasmid/midifile.js
  97. 102 0
      dist/midi/inc/jasmid/replayer.js
  98. 69 0
      dist/midi/inc/jasmid/stream.js
  99. 61 0
      dist/midi/inc/shim/Base64.js
  100. 81 0
      dist/midi/inc/shim/Base64binary.js

+ 1 - 0
dist/css/index-23ff396c.css

@@ -0,0 +1 @@
+body{overflow:hidden}._skeleton_oe0r3_4{position:fixed;left:0;top:0;width:100vw;height:100vh;padding:.53333rem .8rem;background-color:#fff;z-index:1000;--van-skeleton-paragraph-height: .8rem}._detail_oe0r3_15{width:100vw;height:auto;overflow:hidden;--header-height: 1.65333rem;background:transparent;position:relative}._detail_oe0r3_15 ._mask_oe0r3_23{position:absolute;z-index:6;width:100%;height:100%}._detail_oe0r3_15 ._container_oe0r3_29{margin:0;border-radius:.26667rem}._detail_oe0r3_15 #osmdCanvasPage1{position:relative!important}._detail_oe0r3_15 #musicAndSelection{height:initial!important;max-height:initial!important}._detail_oe0r3_15 .smoothAnimationBox{height:0!important;overflow:hidden}._detail_oe0r3_15 #cursorImg-0{margin-top:-20PX!important;transform:translate(6PX)!important}._whiteBg_oe0r3_48{background:#fff}

File diff suppressed because it is too large
+ 0 - 0
dist/css/index-44d5a4cb.css


+ 1 - 0
dist/css/index-e2246bb5.css

@@ -0,0 +1 @@
+._skeleton_vtlsh_1{position:fixed;left:0;top:0;width:100vw;height:100vh;padding:.53333rem .8rem;background-color:#fff;z-index:1000;--van-skeleton-paragraph-height: .8rem}._detail_vtlsh_12{width:100vw;height:100vh;overflow:hidden;overflow-y:auto;--header-height: 1.65333rem;background:var(--container-background)}._detail_vtlsh_12 ._container_vtlsh_20{margin:0 .26667rem;border-radius:.26667rem}._detail_vtlsh_12 #musicAndSelection{overflow:initial!important;height:initial!important;max-height:initial!important}

File diff suppressed because it is too large
+ 0 - 0
dist/css/instrument-59fc06e9.css


+ 1 - 0
dist/css/modeView-c4c5480d.css

@@ -0,0 +1 @@
+._container_jp744_1{position:relative;width:7.41333rem;height:6.72rem;background:url(../png/icon_bg-d91f5fbc.png) no-repeat;background-size:contain;display:flex;flex-direction:column;padding-top:3.36rem}._close_jp744_11{position:absolute;right:0;top:.8rem;width:.64rem;height:.64rem}._title_jp744_18{margin-left:.37333rem;width:2.13333rem;display:block}._content_jp744_23{position:relative;padding:0 .34667rem .66667rem;font-size:.37333rem;font-weight:400;color:#333;line-height:.58667rem;z-index:10}._btns_jp744_32{margin:0 auto .61333rem;display:flex;justify-content:center;font-size:.42667rem;color:#777;line-height:.58667rem;text-align:center}._btns_jp744_32 ._btn_jp744_32{width:2.69333rem;height:.98667rem;cursor:pointer}._btns_jp744_32 ._btnCancel_jp744_46{margin-right:.26667rem}._btns_jp744_32 img{width:100%}

BIN
dist/favicon.ico


+ 68 - 0
dist/flexible.js

@@ -0,0 +1,68 @@
+! function (a, b) {
+  function c() {
+    try {
+      var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
+      var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
+      var b = width > height ? height : width;
+      b / i > 640 && (b = 640 * i);
+      b / i < 375 && (b = 375 * i);
+      var c = b / 10;
+      // 老师端,fontsize计算
+      // if (window.location.search.includes('platform=pc') || window.location.search.includes('platform=PC')) {
+      //   c = width / 21.7;
+      // }
+      // console.log('fontSize:',c,'屏幕宽度:',width,'老师端:',window.location.search.includes('platform=pc'))
+      c = c || 64;
+      f.style.fontSize = c + "px", k.rem = a.rem = c
+      window.fontSize = c
+    } catch (error) {
+      f.style.fontSize = 37.5 + "px"
+      window.fontSize = 37.5
+    }
+
+  }
+  var d, e = a.document,
+    f = e.documentElement,
+    g = e.querySelector('meta[name="viewport"]'),
+    h = e.querySelector('meta[name="flexible"]'),
+    i = 0,
+    j = 0,
+    k = b.flexible || (b.flexible = {});
+  if (g) {
+    console.warn("将根据已有的meta标签来设置缩放比例");
+    var l = g.getAttribute("content").match(/initial\-scale=([\d\.]+)/);
+    l && (j = parseFloat(l[1]), i = parseInt(1 / j))
+  } else if (h) {
+    var m = h.getAttribute("content");
+    if (m) {
+      var n = m.match(/initial\-dpr=([\d\.]+)/),
+        o = m.match(/maximum\-dpr=([\d\.]+)/);
+      n && (i = parseFloat(n[1]), j = parseFloat((1 / i).toFixed(2))), o && (i = parseFloat(o[1]), j = parseFloat((1 / i).toFixed(2)))
+    }
+  }
+  if (!i && !j) {
+    var p = a.navigator.userAgent,
+      q = (!!p.match(/android/gi), !!p.match(/iphone/gi)),
+      r = q && !!p.match(/OS 9_3/),
+      s = a.devicePixelRatio;
+    i = q && !r ? s >= 3 && (!i || i >= 3) ? 3 : s >= 2 && (!i || i >= 2) ? 2 : 1 : 1, j = 1 / i
+  }
+  if (f.setAttribute("data-dpr", i), !g)
+    if (g = e.createElement("meta"), g.setAttribute("name", "viewport"), g.setAttribute("content", "initial-scale=" + j + ", maximum-scale=" + j + ", minimum-scale=" + j + ", user-scalable=no"), f.firstElementChild) f.firstElementChild.appendChild(g);
+    else {
+      var t = e.createElement("div");
+      t.appendChild(g), e.write(t.innerHTML)
+    } a.addEventListener("resize", function () {
+    clearTimeout(d), d = setTimeout(c, 300)
+  }, !1), a.addEventListener("pageshow", function (a) {
+    a.persisted && (clearTimeout(d), d = setTimeout(c, 300))
+  }, !1), "complete" === e.readyState ? e.body.style.fontSize = 12 * i + "px" : e.addEventListener("DOMContentLoaded", function () {
+    e.body.style.fontSize = 12 * i + "px"
+  }, !1), c(), k.dpr = a.dpr = i, k.refreshRem = c, k.rem2px = function (a) {
+    var b = parseFloat(a) * this.rem;
+    return "string" == typeof a && a.match(/rem$/) && (b += "px"), b
+  }, k.px2rem = function (a) {
+    var b = parseFloat(a) / this.rem;
+    return "string" == typeof a && a.match(/px$/) && (b += "rem"), b
+  }
+}(window, window.lib || (window.lib = {}));

File diff suppressed because it is too large
+ 14 - 0
dist/helpers/html-to-image.js


File diff suppressed because it is too large
+ 19 - 0
dist/helpers/html2canvas.js


File diff suppressed because it is too large
+ 0 - 0
dist/helpers/lottie.min.js


File diff suppressed because it is too large
+ 0 - 0
dist/helpers/plyr.css


File diff suppressed because it is too large
+ 0 - 0
dist/helpers/plyr.min.js


File diff suppressed because it is too large
+ 0 - 0
dist/helpers/qrcode.js


File diff suppressed because it is too large
+ 6 - 0
dist/helpers/qs.min.js


File diff suppressed because it is too large
+ 4 - 0
dist/helpers/rem-fit.min.js


+ 72 - 0
dist/instrument.html

@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <script type="module" crossorigin src="./js/polyfills-86411078.js"></script>
+
+  <meta charset="UTF-8" />
+  <meta name="viewport"
+    content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover" />
+  <title>AI学练</title>
+  <link rel="icon" href="./favicon.ico?v=1" />
+  <script src="./flexible.js" charset="UTF-8"></script>
+  <style>
+    #loading {
+      position: fixed;
+      left: 50%;
+      top: 50%;
+      transform: translate(-50%, -50%);
+      display: none;
+    }
+
+    #loading.show {
+      display: block;
+    }
+  </style>
+  <script>
+    function _postMessage(data, callback) {
+      const instance = window.COLEXIU || (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.COLEXIU)
+      if (instance) {
+        instance.postMessage(JSON.stringify(data))
+      }
+    }
+    // APP的全屏loading动画
+    if (!location.href.includes('iscurseplay=play') && !location.href.includes('isPreView=true') && !location.href.includes("simple-detail")) {
+      _postMessage({
+        api: 'cloudLoading',
+        content: {
+          show: true,
+          type: 'fullscreen',
+        },
+      })
+    }
+  </script>
+  <script type="module" crossorigin src="./js/instrument-98ef3583.js"></script>
+  <link rel="stylesheet" href="./css/instrument-59fc06e9.css">
+  <script type="module">import.meta.url;import("_").catch(()=>1);async function* g(){};window.__vite_is_modern_browser=true;</script>
+  <script type="module">!function(){if(window.__vite_is_modern_browser)return;console.warn("vite: loading legacy chunks, syntax error above and the same error below should be ignored");var e=document.getElementById("vite-legacy-polyfill"),n=document.createElement("script");n.src=e.src,n.onload=function(){System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))},document.body.appendChild(n)}();</script>
+</head>
+
+<body>
+  <div id="app"></div>
+  <!-- <img id="loading" class="show" src="/loading.svg" alt="loading" /> -->
+  <!-- <script>
+    // 处理课堂乐器老师端打开听音练习时去掉加载动画
+    if (location.href.indexOf('view-figner') >= 0 && location.href.indexOf('platform=pc') >= 0 && location.href.indexOf('linkSource=class') < 0 && !location.href.includes("simple-detail")) {
+      var _loading = document.getElementById("loading");
+      _loading && document.body.removeChild(_loading);
+    }
+  </script> -->
+
+  
+  <!-- <script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script>
+  <script>
+    // VConsole will be exported to `window.VConsole` by default.
+    var vConsole = new window.VConsole();
+  </script>   -->
+  <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
+  <script nomodule crossorigin id="vite-legacy-polyfill" src="./js/polyfills-legacy-0024857d.js"></script>
+  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/instrument-legacy-7c9a95ca.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
+</body>
+
+</html>

File diff suppressed because it is too large
+ 0 - 0
dist/js/index-03bddf2b.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-03c84c67.js


+ 1 - 0
dist/js/index-0af054ba.js

@@ -0,0 +1 @@
+import{d as i,g as l,r as d,E as e,o as r,s as c,b as s,M as u}from"./instrument-98ef3583.js";const f="_skeleton_vtlsh_1",m="_detail_vtlsh_12",p="_container_vtlsh_20",a={skeleton:f,detail:m,container:p},y=i({name:"music-list",setup(){const n=l(),t=d({isLoading:!0,isProductLoading:!1,product:[{state:!1,name:"五线谱",type:e.staff,base64:""},{state:!1,name:"首调",type:e.firstTone,base64:""},{state:!1,name:"固定调",type:e.fixedTone,base64:""}]});r(()=>{window.appName="colexiu",c.xmlUrl=n.xmlUrl,t.isLoading=!1});const o=async()=>{console.log("渲染完成")};return()=>s("div",{class:a.detail},[s("div",{id:"scrollContainer",class:[a.container,"hideCursor"]},[!t.isLoading&&s(u,{onRendered:o},null)])])}});export{y as default};

File diff suppressed because it is too large
+ 0 - 0
dist/js/index-0bbf84fb.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-0d3b7b42.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-142fdf16.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-20c025d3.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-2270f2d1.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-2499965c.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-2a1343e0.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-330cb7c5.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-38262e39.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-4b43430a.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-58c2eaac.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-655a454b.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-662173fe.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-6972bb98.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-71a277d3.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-7ad0b9f0.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-7f22768f.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-902205b3.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-91fbf033.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-97e45cdd.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-ad04d4cf.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-ad5b3309.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-c7652d9b.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-cb2d56fd.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-cef965b9.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-d0f39753.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-d13c0247.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-f01bef28.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-f23e3dbf.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-f5dd9e1d.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-f9270c49.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-fad5795c.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-0f6cde19.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-18f4a1c4.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-1fec36a2.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-31794bdf.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-34e08e3e.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-36e7f78a.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-3851c136.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-3a02f1ea.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-3e4d4286.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-4514d1bb.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-457fb6fa.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-5fc4ec32.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-6888bad9.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-68c78177.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-733f2636.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-7e8508f0.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-7f19d6d4.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-9b4d7da4.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-a35707f4.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-ac9e06ec.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-b25f7627.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-b4dddc9f.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-c0c0450a.js


+ 1 - 0
dist/js/index-legacy-c67665f8.js

@@ -0,0 +1 @@
+System.register(["./instrument-legacy-7c9a95ca.js"],(function(e,t){"use strict";var i,n,a,o,r,s,l,d,c=document.createElement("style");return c.textContent="._skeleton_vtlsh_1{position:fixed;left:0;top:0;width:100vw;height:100vh;padding:.53333rem .8rem;background-color:#fff;z-index:1000;--van-skeleton-paragraph-height: .8rem}._detail_vtlsh_12{width:100vw;height:100vh;overflow:hidden;overflow-y:auto;--header-height: 1.65333rem;background:var(--container-background)}._detail_vtlsh_12 ._container_vtlsh_20{margin:0 .26667rem;border-radius:.26667rem}._detail_vtlsh_12 #musicAndSelection{overflow:initial!important;height:initial!important;max-height:initial!important}\n",document.head.appendChild(c),{setters:[e=>{i=e.d,n=e.g,a=e.r,o=e.E,r=e.o,s=e.s,l=e.b,d=e.M}],execute:function(){const t="_detail_vtlsh_12",c="_container_vtlsh_20";e("default",i({name:"music-list",setup(){const e=n(),i=a({isLoading:!0,isProductLoading:!1,product:[{state:!1,name:"五线谱",type:o.staff,base64:""},{state:!1,name:"首调",type:o.firstTone,base64:""},{state:!1,name:"固定调",type:o.fixedTone,base64:""}]});r((()=>{window.appName="colexiu",s.xmlUrl=e.xmlUrl,i.isLoading=!1}));const h=async()=>{console.log("渲染完成")};return()=>l("div",{class:t},[l("div",{id:"scrollContainer",class:[c,"hideCursor"]},[!i.isLoading&&l(d,{onRendered:h},null)])])}}))}}}));

File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-cb5028d7.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-d7f2e64d.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-d942ef39.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-df191e0e.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-eb6058b4.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-ec8184e8.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-f02b4e94.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-f4aeb5cd.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-f7c0163b.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-faa1dba8.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-fbabd463.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/instrument-98ef3583.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/instrument-legacy-7c9a95ca.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/modeView-880e0b02.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/modeView-legacy-60136519.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/polyfills-86411078.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/polyfills-legacy-0024857d.js


File diff suppressed because it is too large
+ 0 - 0
dist/loading.json


+ 11 - 0
dist/loading.svg

@@ -0,0 +1,11 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin:auto;display:block;" width="100px" height="100px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">
+<circle cx="27.5" cy="57.5" r="5" fill="#01c1b5">
+  <animate attributeName="cy" calcMode="spline" keySplines="0 0.5 0.5 1;0.5 0 1 0.5;0.5 0.5 0.5 0.5" repeatCount="indefinite" values="57.5;42.5;57.5;57.5" keyTimes="0;0.3;0.6;1" dur="1s" begin="-0.6s"></animate>
+</circle> <circle cx="42.5" cy="57.5" r="5" fill="#ff979e">
+  <animate attributeName="cy" calcMode="spline" keySplines="0 0.5 0.5 1;0.5 0 1 0.5;0.5 0.5 0.5 0.5" repeatCount="indefinite" values="57.5;42.5;57.5;57.5" keyTimes="0;0.3;0.6;1" dur="1s" begin="-0.44999999999999996s"></animate>
+</circle> <circle cx="57.5" cy="57.5" r="5" fill="#01c1b5">
+  <animate attributeName="cy" calcMode="spline" keySplines="0 0.5 0.5 1;0.5 0 1 0.5;0.5 0.5 0.5 0.5" repeatCount="indefinite" values="57.5;42.5;57.5;57.5" keyTimes="0;0.3;0.6;1" dur="1s" begin="-0.3s"></animate>
+</circle> <circle cx="72.5" cy="57.5" r="5" fill="#ff979e">
+  <animate attributeName="cy" calcMode="spline" keySplines="0 0.5 0.5 1;0.5 0 1 0.5;0.5 0.5 0.5 0.5" repeatCount="indefinite" values="57.5;42.5;57.5;57.5" keyTimes="0;0.3;0.6;1" dur="1s" begin="-0.15s"></animate>
+</circle>
+</svg>

+ 24 - 0
dist/midi/inc/jasmid/LICENSE

@@ -0,0 +1,24 @@
+Copyright (c) 2010, Matt Westcott & Ben Firshman
+All rights reserved.
+ 
+Redistribution and use in source and binary forms, with or without 
+modification, are permitted provided that the following conditions are met:
+ 
+ * Redistributions of source code must retain the above copyright notice, this 
+   list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, 
+   this list of conditions and the following disclaimer in the documentation 
+   and/or other materials provided with the distribution.
+ * The names of its contributors may not be used to endorse or promote products 
+   derived from this software without specific prior written permission.
+ 
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+ 238 - 0
dist/midi/inc/jasmid/midifile.js

@@ -0,0 +1,238 @@
+/*
+class to parse the .mid file format
+(depends on stream.js)
+*/
+function MidiFile(data) {
+	function readChunk(stream) {
+		var id = stream.read(4);
+		var length = stream.readInt32();
+		return {
+			'id': id,
+			'length': length,
+			'data': stream.read(length)
+		};
+	}
+	
+	var lastEventTypeByte;
+	
+	function readEvent(stream) {
+		var event = {};
+		event.deltaTime = stream.readVarInt();
+		var eventTypeByte = stream.readInt8();
+		if ((eventTypeByte & 0xf0) == 0xf0) {
+			/* system / meta event */
+			if (eventTypeByte == 0xff) {
+				/* meta event */
+				event.type = 'meta';
+				var subtypeByte = stream.readInt8();
+				var length = stream.readVarInt();
+				switch(subtypeByte) {
+					case 0x00:
+						event.subtype = 'sequenceNumber';
+						if (length != 2) throw "Expected length for sequenceNumber event is 2, got " + length;
+						event.number = stream.readInt16();
+						return event;
+					case 0x01:
+						event.subtype = 'text';
+						event.text = stream.read(length);
+						return event;
+					case 0x02:
+						event.subtype = 'copyrightNotice';
+						event.text = stream.read(length);
+						return event;
+					case 0x03:
+						event.subtype = 'trackName';
+						event.text = stream.read(length);
+						return event;
+					case 0x04:
+						event.subtype = 'instrumentName';
+						event.text = stream.read(length);
+						return event;
+					case 0x05:
+						event.subtype = 'lyrics';
+						event.text = stream.read(length);
+						return event;
+					case 0x06:
+						event.subtype = 'marker';
+						event.text = stream.read(length);
+						return event;
+					case 0x07:
+						event.subtype = 'cuePoint';
+						event.text = stream.read(length);
+						return event;
+					case 0x20:
+						event.subtype = 'midiChannelPrefix';
+						if (length != 1) throw "Expected length for midiChannelPrefix event is 1, got " + length;
+						event.channel = stream.readInt8();
+						return event;
+					case 0x2f:
+						event.subtype = 'endOfTrack';
+						if (length != 0) throw "Expected length for endOfTrack event is 0, got " + length;
+						return event;
+					case 0x51:
+						event.subtype = 'setTempo';
+						if (length != 3) throw "Expected length for setTempo event is 3, got " + length;
+						event.microsecondsPerBeat = (
+							(stream.readInt8() << 16)
+							+ (stream.readInt8() << 8)
+							+ stream.readInt8()
+						)
+						return event;
+					case 0x54:
+						event.subtype = 'smpteOffset';
+						if (length != 5) throw "Expected length for smpteOffset event is 5, got " + length;
+						var hourByte = stream.readInt8();
+						event.frameRate = {
+							0x00: 24, 0x20: 25, 0x40: 29, 0x60: 30
+						}[hourByte & 0x60];
+						event.hour = hourByte & 0x1f;
+						event.min = stream.readInt8();
+						event.sec = stream.readInt8();
+						event.frame = stream.readInt8();
+						event.subframe = stream.readInt8();
+						return event;
+					case 0x58:
+						event.subtype = 'timeSignature';
+						if (length != 4) throw "Expected length for timeSignature event is 4, got " + length;
+						event.numerator = stream.readInt8();
+						event.denominator = Math.pow(2, stream.readInt8());
+						event.metronome = stream.readInt8();
+						event.thirtyseconds = stream.readInt8();
+						return event;
+					case 0x59:
+						event.subtype = 'keySignature';
+						if (length != 2) throw "Expected length for keySignature event is 2, got " + length;
+						event.key = stream.readInt8(true);
+						event.scale = stream.readInt8();
+						return event;
+					case 0x7f:
+						event.subtype = 'sequencerSpecific';
+						event.data = stream.read(length);
+						return event;
+					default:
+						// console.log("Unrecognised meta event subtype: " + subtypeByte);
+						event.subtype = 'unknown'
+						event.data = stream.read(length);
+						return event;
+				}
+				event.data = stream.read(length);
+				return event;
+			} else if (eventTypeByte == 0xf0) {
+				event.type = 'sysEx';
+				var length = stream.readVarInt();
+				event.data = stream.read(length);
+				return event;
+			} else if (eventTypeByte == 0xf7) {
+				event.type = 'dividedSysEx';
+				var length = stream.readVarInt();
+				event.data = stream.read(length);
+				return event;
+			} else {
+				throw "Unrecognised MIDI event type byte: " + eventTypeByte;
+			}
+		} else {
+			/* channel event */
+			var param1;
+			if ((eventTypeByte & 0x80) == 0) {
+				/* running status - reuse lastEventTypeByte as the event type.
+					eventTypeByte is actually the first parameter
+				*/
+				param1 = eventTypeByte;
+				eventTypeByte = lastEventTypeByte;
+			} else {
+				param1 = stream.readInt8();
+				lastEventTypeByte = eventTypeByte;
+			}
+			var eventType = eventTypeByte >> 4;
+			event.channel = eventTypeByte & 0x0f;
+			event.type = 'channel';
+			switch (eventType) {
+				case 0x08:
+					event.subtype = 'noteOff';
+					event.noteNumber = param1;
+					event.velocity = stream.readInt8();
+					return event;
+				case 0x09:
+					event.noteNumber = param1;
+					event.velocity = stream.readInt8();
+					if (event.velocity == 0) {
+						event.subtype = 'noteOff';
+					} else {
+						event.subtype = 'noteOn';
+					}
+					return event;
+				case 0x0a:
+					event.subtype = 'noteAftertouch';
+					event.noteNumber = param1;
+					event.amount = stream.readInt8();
+					return event;
+				case 0x0b:
+					event.subtype = 'controller';
+					event.controllerType = param1;
+					event.value = stream.readInt8();
+					return event;
+				case 0x0c:
+					event.subtype = 'programChange';
+					event.programNumber = param1;
+					return event;
+				case 0x0d:
+					event.subtype = 'channelAftertouch';
+					event.amount = param1;
+					return event;
+				case 0x0e:
+					event.subtype = 'pitchBend';
+					event.value = param1 + (stream.readInt8() << 7);
+					return event;
+				default:
+					throw "Unrecognised MIDI event type: " + eventType
+					/* 
+					console.log("Unrecognised MIDI event type: " + eventType);
+					stream.readInt8();
+					event.subtype = 'unknown';
+					return event;
+					*/
+			}
+		}
+	}
+	
+	stream = Stream(data);
+	var headerChunk = readChunk(stream);
+	if (headerChunk.id != 'MThd' || headerChunk.length != 6) {
+		throw "Bad .mid file - header not found";
+	}
+	var headerStream = Stream(headerChunk.data);
+	var formatType = headerStream.readInt16();
+	var trackCount = headerStream.readInt16();
+	var timeDivision = headerStream.readInt16();
+	
+	if (timeDivision & 0x8000) {
+		throw "Expressing time division in SMTPE frames is not supported yet"
+	} else {
+		ticksPerBeat = timeDivision;
+	}
+	
+	var header = {
+		'formatType': formatType,
+		'trackCount': trackCount,
+		'ticksPerBeat': ticksPerBeat
+	}
+	var tracks = [];
+	for (var i = 0; i < header.trackCount; i++) {
+		tracks[i] = [];
+		var trackChunk = readChunk(stream);
+		if (trackChunk.id != 'MTrk') {
+			throw "Unexpected chunk - expected MTrk, got "+ trackChunk.id;
+		}
+		var trackStream = Stream(trackChunk.data);
+		while (!trackStream.eof()) {
+			var event = readEvent(trackStream);
+			tracks[i].push(event);
+			//console.log(event);
+		}
+	}
+	
+	return {
+		'header': header,
+		'tracks': tracks
+	}
+}

+ 102 - 0
dist/midi/inc/jasmid/replayer.js

@@ -0,0 +1,102 @@
+var clone = function (o) {
+	if (typeof o != 'object') return (o);
+	if (o == null) return (o);
+	var ret = (typeof o.length == 'number') ? [] : {};
+	for (var key in o) ret[key] = clone(o[key]);
+	return ret;
+};
+
+function Replayer(midiFile, timeWarp, eventProcessor, bpm) {
+	var trackStates = [];
+	var beatsPerMinute = bpm ? bpm : 120;
+	var bpmOverride = bpm ? true : false;
+
+	var ticksPerBeat = midiFile.header.ticksPerBeat;
+	
+	for (var i = 0; i < midiFile.tracks.length; i++) {
+		trackStates[i] = {
+			'nextEventIndex': 0,
+			'ticksToNextEvent': (
+				midiFile.tracks[i].length ?
+					midiFile.tracks[i][0].deltaTime :
+					null
+			)
+		};
+	}
+
+	var nextEventInfo;
+	var samplesToNextEvent = 0;
+	
+	function getNextEvent() {
+		var ticksToNextEvent = null;
+		var nextEventTrack = null;
+		var nextEventIndex = null;
+		
+		for (var i = 0; i < trackStates.length; i++) {
+			if (
+				trackStates[i].ticksToNextEvent != null
+				&& (ticksToNextEvent == null || trackStates[i].ticksToNextEvent < ticksToNextEvent)
+			) {
+				ticksToNextEvent = trackStates[i].ticksToNextEvent;
+				nextEventTrack = i;
+				nextEventIndex = trackStates[i].nextEventIndex;
+			}
+		}
+		if (nextEventTrack != null) {
+			/* consume event from that track */
+			var nextEvent = midiFile.tracks[nextEventTrack][nextEventIndex];
+			if (midiFile.tracks[nextEventTrack][nextEventIndex + 1]) {
+				trackStates[nextEventTrack].ticksToNextEvent += midiFile.tracks[nextEventTrack][nextEventIndex + 1].deltaTime;
+			} else {
+				trackStates[nextEventTrack].ticksToNextEvent = null;
+			}
+			trackStates[nextEventTrack].nextEventIndex += 1;
+			/* advance timings on all tracks by ticksToNextEvent */
+			for (var i = 0; i < trackStates.length; i++) {
+				if (trackStates[i].ticksToNextEvent != null) {
+					trackStates[i].ticksToNextEvent -= ticksToNextEvent
+				}
+			}
+			return {
+				"ticksToEvent": ticksToNextEvent,
+				"event": nextEvent,
+				"track": nextEventTrack
+			}
+		} else {
+			return null;
+		}
+	};
+	//
+	var midiEvent;
+	var temporal = [];
+	//
+	function processEvents() {
+		function processNext() {
+		    if (!bpmOverride && midiEvent.event.type == "meta" && midiEvent.event.subtype == "setTempo" ) {
+				// tempo change events can occur anywhere in the middle and affect events that follow
+				beatsPerMinute = 60000000 / midiEvent.event.microsecondsPerBeat;
+			}
+			///
+			var beatsToGenerate = 0;
+			var secondsToGenerate = 0;
+			if (midiEvent.ticksToEvent > 0) {
+				beatsToGenerate = midiEvent.ticksToEvent / ticksPerBeat;
+				secondsToGenerate = beatsToGenerate / (beatsPerMinute / 60);
+			}
+			///
+			var time = (secondsToGenerate * 1000 * timeWarp) || 0;
+			temporal.push([ midiEvent, time]);
+			midiEvent = getNextEvent();
+		};
+		///
+		if (midiEvent = getNextEvent()) {
+			while(midiEvent) processNext(true);
+		}
+	};
+	processEvents();
+	return {
+		"getData": function() {
+			return clone(temporal);
+		}
+	};
+};

+ 69 - 0
dist/midi/inc/jasmid/stream.js

@@ -0,0 +1,69 @@
+/* Wrapper for accessing strings through sequential reads */
+function Stream(str) {
+	var position = 0;
+	
+	function read(length) {
+		var result = str.substr(position, length);
+		position += length;
+		return result;
+	}
+	
+	/* read a big-endian 32-bit integer */
+	function readInt32() {
+		var result = (
+			(str.charCodeAt(position) << 24)
+			+ (str.charCodeAt(position + 1) << 16)
+			+ (str.charCodeAt(position + 2) << 8)
+			+ str.charCodeAt(position + 3));
+		position += 4;
+		return result;
+	}
+
+	/* read a big-endian 16-bit integer */
+	function readInt16() {
+		var result = (
+			(str.charCodeAt(position) << 8)
+			+ str.charCodeAt(position + 1));
+		position += 2;
+		return result;
+	}
+	
+	/* read an 8-bit integer */
+	function readInt8(signed) {
+		var result = str.charCodeAt(position);
+		if (signed && result > 127) result -= 256;
+		position += 1;
+		return result;
+	}
+	
+	function eof() {
+		return position >= str.length;
+	}
+	
+	/* read a MIDI-style variable-length integer
+		(big-endian value in groups of 7 bits,
+		with top bit set to signify that another byte follows)
+	*/
+	function readVarInt() {
+		var result = 0;
+		while (true) {
+			var b = readInt8();
+			if (b & 0x80) {
+				result += (b & 0x7f);
+				result <<= 7;
+			} else {
+				/* b is the last byte */
+				return result + b;
+			}
+		}
+	}
+	
+	return {
+		'eof': eof,
+		'read': read,
+		'readInt32': readInt32,
+		'readInt16': readInt16,
+		'readInt8': readInt8,
+		'readVarInt': readVarInt
+	}
+}

+ 61 - 0
dist/midi/inc/shim/Base64.js

@@ -0,0 +1,61 @@
+//https://github.com/davidchambers/Base64.js
+
+;(function () {
+  var object = typeof exports != 'undefined' ? exports : this; // #8: web workers
+  var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+  function InvalidCharacterError(message) {
+    this.message = message;
+  }
+  InvalidCharacterError.prototype = new Error;
+  InvalidCharacterError.prototype.name = 'InvalidCharacterError';
+
+  // encoder
+  // [https://gist.github.com/999166] by [https://github.com/nignag]
+  object.btoa || (
+  object.btoa = function (input) {
+    for (
+      // initialize result and counter
+      var block, charCode, idx = 0, map = chars, output = '';
+      // if the next input index does not exist:
+      //   change the mapping table to "="
+      //   check if d has no fractional digits
+      input.charAt(idx | 0) || (map = '=', idx % 1);
+      // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8
+      output += map.charAt(63 & block >> 8 - idx % 1 * 8)
+    ) {
+      charCode = input.charCodeAt(idx += 3/4);
+      if (charCode > 0xFF) {
+        throw new InvalidCharacterError("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");
+      }
+      block = block << 8 | charCode;
+    }
+    return output;
+  });
+
+  // decoder
+  // [https://gist.github.com/1020396] by [https://github.com/atk]
+  object.atob || (
+  object.atob = function (input) {
+    input = input.replace(/=+$/, '')
+    if (input.length % 4 == 1) {
+      throw new InvalidCharacterError("'atob' failed: The string to be decoded is not correctly encoded.");
+    }
+    for (
+      // initialize result and counters
+      var bc = 0, bs, buffer, idx = 0, output = '';
+      // get next character
+      buffer = input.charAt(idx++);
+      // character found in table? initialize bit storage and add its ascii value;
+      ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,
+        // and if not first of each 4 characters,
+        // convert the first 8 bits to one ascii character
+        bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0
+    ) {
+      // try to find character in table (0-63, not found => -1)
+      buffer = chars.indexOf(buffer);
+    }
+    return output;
+  });
+
+}());

+ 81 - 0
dist/midi/inc/shim/Base64binary.js

@@ -0,0 +1,81 @@
+/**
+ * @license -------------------------------------------------------------------
+ *   module: Base64Binary
+ *      src: http://blog.danguer.com/2011/10/24/base64-binary-decoding-in-javascript/
+ *  license: Simplified BSD License
+ * -------------------------------------------------------------------
+ * Copyright 2011, Daniel Guerrero. All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     - Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     - Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL DANIEL GUERRERO BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+var Base64Binary = {
+	_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
+
+	/* will return a  Uint8Array type */
+	decodeArrayBuffer: function(input) {
+		var bytes = Math.ceil( (3*input.length) / 4.0);
+		var ab = new ArrayBuffer(bytes);
+		this.decode(input, ab);
+
+		return ab;
+	},
+
+	decode: function(input, arrayBuffer) {
+		//get last chars to see if are valid
+		var lkey1 = this._keyStr.indexOf(input.charAt(input.length-1));		 
+		var lkey2 = this._keyStr.indexOf(input.charAt(input.length-1));		 
+
+		var bytes = Math.ceil( (3*input.length) / 4.0);
+		if (lkey1 == 64) bytes--; //padding chars, so skip
+		if (lkey2 == 64) bytes--; //padding chars, so skip
+
+		var uarray;
+		var chr1, chr2, chr3;
+		var enc1, enc2, enc3, enc4;
+		var i = 0;
+		var j = 0;
+
+		if (arrayBuffer)
+			uarray = new Uint8Array(arrayBuffer);
+		else
+			uarray = new Uint8Array(bytes);
+
+		input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+
+		for (i=0; i<bytes; i+=3) {	
+			//get the 3 octects in 4 ascii chars
+			enc1 = this._keyStr.indexOf(input.charAt(j++));
+			enc2 = this._keyStr.indexOf(input.charAt(j++));
+			enc3 = this._keyStr.indexOf(input.charAt(j++));
+			enc4 = this._keyStr.indexOf(input.charAt(j++));
+
+			chr1 = (enc1 << 2) | (enc2 >> 4);
+			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+			chr3 = ((enc3 & 3) << 6) | enc4;
+
+			uarray[i] = chr1;			
+			if (enc3 != 64) uarray[i+1] = chr2;
+			if (enc4 != 64) uarray[i+2] = chr3;
+		}
+
+		return uarray;	
+	}
+};

Some files were not shown because too many files changed in this diff