pinokiod 3.50.0 → 3.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/3 +1 -0
  2. package/kernel/gitconfig_template +3 -1
  3. package/kernel/index.js +11 -0
  4. package/kernel/scripts/git/create +1 -2
  5. package/kernel/scripts/git/push +1 -1
  6. package/package.json +6 -2
  7. package/server/index.js +44 -16
  8. package/server/public/common.js +0 -4
  9. package/server/public/serve/directory.html +106 -0
  10. package/server/public/serve/icons/application_xp.png +0 -0
  11. package/server/public/serve/icons/application_xp_terminal.png +0 -0
  12. package/server/public/serve/icons/box.png +0 -0
  13. package/server/public/serve/icons/cd.png +0 -0
  14. package/server/public/serve/icons/controller.png +0 -0
  15. package/server/public/serve/icons/drive.png +0 -0
  16. package/server/public/serve/icons/film.png +0 -0
  17. package/server/public/serve/icons/folder.png +0 -0
  18. package/server/public/serve/icons/font.png +0 -0
  19. package/server/public/serve/icons/image.png +0 -0
  20. package/server/public/serve/icons/map.png +0 -0
  21. package/server/public/serve/icons/page.png +0 -0
  22. package/server/public/serve/icons/page_add.png +0 -0
  23. package/server/public/serve/icons/page_attach.png +0 -0
  24. package/server/public/serve/icons/page_code.png +0 -0
  25. package/server/public/serve/icons/page_copy.png +0 -0
  26. package/server/public/serve/icons/page_delete.png +0 -0
  27. package/server/public/serve/icons/page_edit.png +0 -0
  28. package/server/public/serve/icons/page_error.png +0 -0
  29. package/server/public/serve/icons/page_excel.png +0 -0
  30. package/server/public/serve/icons/page_find.png +0 -0
  31. package/server/public/serve/icons/page_gear.png +0 -0
  32. package/server/public/serve/icons/page_go.png +0 -0
  33. package/server/public/serve/icons/page_green.png +0 -0
  34. package/server/public/serve/icons/page_key.png +0 -0
  35. package/server/public/serve/icons/page_lightning.png +0 -0
  36. package/server/public/serve/icons/page_link.png +0 -0
  37. package/server/public/serve/icons/page_paintbrush.png +0 -0
  38. package/server/public/serve/icons/page_paste.png +0 -0
  39. package/server/public/serve/icons/page_red.png +0 -0
  40. package/server/public/serve/icons/page_refresh.png +0 -0
  41. package/server/public/serve/icons/page_save.png +0 -0
  42. package/server/public/serve/icons/page_white.png +0 -0
  43. package/server/public/serve/icons/page_white_acrobat.png +0 -0
  44. package/server/public/serve/icons/page_white_actionscript.png +0 -0
  45. package/server/public/serve/icons/page_white_add.png +0 -0
  46. package/server/public/serve/icons/page_white_c.png +0 -0
  47. package/server/public/serve/icons/page_white_camera.png +0 -0
  48. package/server/public/serve/icons/page_white_cd.png +0 -0
  49. package/server/public/serve/icons/page_white_code.png +0 -0
  50. package/server/public/serve/icons/page_white_code_red.png +0 -0
  51. package/server/public/serve/icons/page_white_coldfusion.png +0 -0
  52. package/server/public/serve/icons/page_white_compressed.png +0 -0
  53. package/server/public/serve/icons/page_white_copy.png +0 -0
  54. package/server/public/serve/icons/page_white_cplusplus.png +0 -0
  55. package/server/public/serve/icons/page_white_csharp.png +0 -0
  56. package/server/public/serve/icons/page_white_cup.png +0 -0
  57. package/server/public/serve/icons/page_white_database.png +0 -0
  58. package/server/public/serve/icons/page_white_delete.png +0 -0
  59. package/server/public/serve/icons/page_white_dvd.png +0 -0
  60. package/server/public/serve/icons/page_white_edit.png +0 -0
  61. package/server/public/serve/icons/page_white_error.png +0 -0
  62. package/server/public/serve/icons/page_white_excel.png +0 -0
  63. package/server/public/serve/icons/page_white_find.png +0 -0
  64. package/server/public/serve/icons/page_white_flash.png +0 -0
  65. package/server/public/serve/icons/page_white_freehand.png +0 -0
  66. package/server/public/serve/icons/page_white_gear.png +0 -0
  67. package/server/public/serve/icons/page_white_get.png +0 -0
  68. package/server/public/serve/icons/page_white_go.png +0 -0
  69. package/server/public/serve/icons/page_white_h.png +0 -0
  70. package/server/public/serve/icons/page_white_horizontal.png +0 -0
  71. package/server/public/serve/icons/page_white_key.png +0 -0
  72. package/server/public/serve/icons/page_white_lightning.png +0 -0
  73. package/server/public/serve/icons/page_white_link.png +0 -0
  74. package/server/public/serve/icons/page_white_magnify.png +0 -0
  75. package/server/public/serve/icons/page_white_medal.png +0 -0
  76. package/server/public/serve/icons/page_white_office.png +0 -0
  77. package/server/public/serve/icons/page_white_paint.png +0 -0
  78. package/server/public/serve/icons/page_white_paintbrush.png +0 -0
  79. package/server/public/serve/icons/page_white_paste.png +0 -0
  80. package/server/public/serve/icons/page_white_php.png +0 -0
  81. package/server/public/serve/icons/page_white_picture.png +0 -0
  82. package/server/public/serve/icons/page_white_powerpoint.png +0 -0
  83. package/server/public/serve/icons/page_white_put.png +0 -0
  84. package/server/public/serve/icons/page_white_ruby.png +0 -0
  85. package/server/public/serve/icons/page_white_stack.png +0 -0
  86. package/server/public/serve/icons/page_white_star.png +0 -0
  87. package/server/public/serve/icons/page_white_swoosh.png +0 -0
  88. package/server/public/serve/icons/page_white_text.png +0 -0
  89. package/server/public/serve/icons/page_white_text_width.png +0 -0
  90. package/server/public/serve/icons/page_white_tux.png +0 -0
  91. package/server/public/serve/icons/page_white_vector.png +0 -0
  92. package/server/public/serve/icons/page_white_visualstudio.png +0 -0
  93. package/server/public/serve/icons/page_white_width.png +0 -0
  94. package/server/public/serve/icons/page_white_word.png +0 -0
  95. package/server/public/serve/icons/page_white_world.png +0 -0
  96. package/server/public/serve/icons/page_white_wrench.png +0 -0
  97. package/server/public/serve/icons/page_white_zip.png +0 -0
  98. package/server/public/serve/icons/page_word.png +0 -0
  99. package/server/public/serve/icons/page_world.png +0 -0
  100. package/server/public/serve/style.css +308 -0
  101. package/server/public/style.css +41 -2
  102. package/server/serveIndex.js +691 -0
  103. package/server/views/app.ejs +310 -88
  104. package/server/views/columns.ejs +1 -1
  105. package/server/views/connect/x.ejs +1 -0
  106. package/server/views/connect.ejs +1 -0
  107. package/server/views/container.ejs +1 -0
  108. package/server/views/download.ejs +1 -0
  109. package/server/views/explore.ejs +1 -0
  110. package/server/views/form.ejs +1 -0
  111. package/server/views/frame.ejs +1 -0
  112. package/server/views/github.ejs +1 -0
  113. package/server/views/help.ejs +1 -0
  114. package/server/views/index.ejs +1 -0
  115. package/server/views/init/index.ejs +2 -1
  116. package/server/views/mini.ejs +1 -0
  117. package/server/views/net.ejs +1 -0
  118. package/server/views/network.ejs +115 -17
  119. package/server/views/prototype/index.ejs +1 -0
  120. package/server/views/review.ejs +1 -0
  121. package/server/views/rows.ejs +1 -1
  122. package/server/views/screenshots.ejs +1 -0
  123. package/server/views/settings.ejs +1 -0
  124. package/server/views/setup.ejs +1 -0
  125. package/server/views/setup_home.ejs +1 -0
  126. package/server/views/tools.ejs +1 -0
@@ -17,7 +17,7 @@ body {
17
17
  }
18
18
  #dragger {
19
19
  -webkit-app-region: drag;
20
- cursor: drag;
20
+ cursor: grab;
21
21
  position: absolute;
22
22
  top: 0;
23
23
  left: 0;
@@ -191,6 +191,7 @@ pre {
191
191
  <script src="/highlight-js.js"></script>
192
192
  </head>
193
193
  <body class='<%=theme%>' data-agent="<%=agent%>">
194
+ <div id='dragger'></div>
194
195
  <header class='navheader grabbable'>
195
196
  <h1>
196
197
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -807,6 +807,7 @@ document.addEventListener('DOMContentLoaded', function() {
807
807
  </script>
808
808
  </head>
809
809
  <body class='<%=theme%>' data-agent="<%=agent%>">
810
+ <div id='dragger'></div>
810
811
  <header class='navheader grabbable'>
811
812
  <h1>
812
813
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -318,6 +318,7 @@ iframe {
318
318
  <script src="/report.js"></script>
319
319
  </head>
320
320
  <body class='<%=theme%>' data-agent="<%=agent%>">
321
+ <div id='dragger'></div>
321
322
  <!--
322
323
  <nav>
323
324
  <a class='logo' href="/">dal</a>
@@ -119,6 +119,7 @@ body.frozen {
119
119
  <% } else { %>
120
120
  <body class='<%=theme%>' data-agent="<%=agent%>">
121
121
  <% } %>
122
+ <div id='dragger'></div>
122
123
  <header class='grabbable'>
123
124
  <h1>
124
125
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -120,6 +120,7 @@ body main iframe {
120
120
  <script src="/nav.js"></script>
121
121
  </head>
122
122
  <body class='<%=theme%>' data-agent="<%=agent%>">
123
+ <div id='dragger'></div>
123
124
  <header class='navheader grabbable'>
124
125
  <h1>
125
126
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -150,6 +150,7 @@ document.addEventListener("DOMContentLoaded", async () => {
150
150
  </script>
151
151
  </head>
152
152
  <body>
153
+ <div id='dragger'></div>
153
154
  <header>
154
155
  <h1>
155
156
  <% paths.forEach((path) => { %>
@@ -46,6 +46,7 @@ main iframe {
46
46
  </style>
47
47
  </head>
48
48
  <body class='columns <%=theme%>' data-agent="<%=agent%>">
49
+ <div id='dragger'></div>
49
50
  <header>
50
51
  <h1>
51
52
  <% paths.forEach((path) => { %>
@@ -232,6 +232,7 @@ ol {
232
232
  <script src="/opener.js"></script>
233
233
  </head>
234
234
  <body class='<%=theme%>' data-agent="<%=agent%>">
235
+ <div id='dragger'></div>
235
236
  <header class='navheader grabbable'>
236
237
  <h1>
237
238
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -253,6 +253,7 @@ body.dark .item .tile .badge {
253
253
  <script src="/report.js"></script>
254
254
  </head>
255
255
  <body class='<%=theme%>' data-agent="<%=agent%>">
256
+ <div id='dragger'></div>
256
257
  <header class='navheader grabbable'>
257
258
  <h1>
258
259
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -401,6 +401,7 @@ body.dark aside .current.selected {
401
401
  <script src="/urldropdown.js"></script>
402
402
  </head>
403
403
  <body class='<%=theme%>' data-agent="<%=agent%>">
404
+ <div id='dragger'></div>
404
405
  <% if (error) { %>
405
406
  <nav class='error-message'>
406
407
  <div><%=error%></div>
@@ -1416,7 +1416,7 @@ body.dark .ace-editor {
1416
1416
  @media only screen and (max-width: 600px) {
1417
1417
  aside {
1418
1418
  width: unset;
1419
- flex-shrink: unset;
1419
+ flex-shrink: 0;
1420
1420
  }
1421
1421
  aside {
1422
1422
  padding: 0 10px;
@@ -1514,6 +1514,7 @@ body.dark .ace-editor {
1514
1514
  <script src="/fseditor.js"></script>
1515
1515
  </head>
1516
1516
  <body class='<%=theme%>' data-platform="<%=platform%>">
1517
+ <div id='dragger'></div>
1517
1518
  <header class='navheader grabbable'>
1518
1519
  <h1>
1519
1520
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -753,6 +753,7 @@ body.dark .appcanvas {
753
753
  <script src="/fseditor.js"></script>
754
754
  </head>
755
755
  <body class='<%=theme%>' data-platform="<%=platform%>" data-agent="<%=agent%>">
756
+ <div id='dragger'></div>
756
757
  <header class='navheader grabbable'>
757
758
  <h1>
758
759
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -523,6 +523,7 @@ document.addEventListener('DOMContentLoaded', function() {
523
523
  <script src="/fseditor.js"></script>
524
524
  </head>
525
525
  <body class='<%=theme%>' data-agent="<%=agent%>">
526
+ <div id='dragger'></div>
526
527
  <% if (error) { %>
527
528
  <nav class='error-message'>
528
529
  <div><%=error%></div>
@@ -285,7 +285,7 @@ body.dark .config {
285
285
  }
286
286
  .config {
287
287
  color: black;
288
- padding: 30px;
288
+ padding: 30px 30px 0;
289
289
  margin: 10px 0;
290
290
  }
291
291
  .config-header {
@@ -533,9 +533,14 @@ body.dark .net {
533
533
  display: block;
534
534
  background: none;
535
535
  }
536
+ form.search {
537
+ padding: 20px;
538
+ }
539
+ /*
536
540
  input[type=search] {
537
541
  visibility: hidden;
538
542
  }
543
+ */
539
544
  .line2 {
540
545
  display: flex;
541
546
  align-items: center;
@@ -673,9 +678,18 @@ body.dark .context-menu-wrapper {
673
678
  text-align: left;
674
679
  color: black;
675
680
  }
681
+ .section-header2 {
682
+ display: flex;
683
+ padding: 10px;
684
+ background: rgba(0,0,0,0.04);
685
+ font-weight: bold;
686
+ }
687
+ .section-header2 .col {
688
+ flex-grow: 1;
689
+ padding-left: 10px;
690
+ }
676
691
  .blank {
677
692
  width: 50px;
678
- height: 50px;
679
693
  flex-shrink: 0;
680
694
  }
681
695
  body.dark .section-header {
@@ -1028,6 +1042,7 @@ document.addEventListener('DOMContentLoaded', function() {
1028
1042
  </script>
1029
1043
  </head>
1030
1044
  <body class='<%=theme%>' data-agent="<%=agent%>">
1045
+ <div id='dragger'></div>
1031
1046
  <header class='navheader grabbable'>
1032
1047
  <h1>
1033
1048
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -1132,26 +1147,27 @@ document.addEventListener('DOMContentLoaded', function() {
1132
1147
  </div>
1133
1148
  </div>
1134
1149
  <div class='container'>
1150
+ <% if (!requirements_pending && peer_active && processes.length > 0) { %>
1151
+ <form class='search'>
1152
+ <input type='search' class="flexible" placeholder='Filter apps'>
1153
+ </form>
1154
+ <% } %>
1135
1155
  <div class='running-apps'>
1136
- <div class='section-header'>
1137
- <h3>
1156
+ <% if (!requirements_pending && peer_active && processes.length > 0) { %>
1157
+ <div class='section-header2'>
1138
1158
  <div class='blank'></div>
1139
1159
  <div class='col'>
1140
1160
  <div class='grid-3'>
1141
- <div class='section'>
1142
- <h2><i class='fas fa-laptop-code'></i> This machine</h2>
1143
- <div>Use these URLs on this machine.</div>
1144
- </div>
1145
- <div class='section'>
1146
- <h2><i class="fa-solid fa-wifi"></i> Local network</h2><div>Use these URLs from other machines on the same local network.</div>
1147
- </div>
1148
- <div class='section'>
1149
- <h2><i class="fa-solid fa-podcast"></i> Local HTTPS network</h2><div>Use these URLs from other pinokio peers on the same local network <a class='explain' data-type='peer'>How to start a peer</a></div>
1150
- </div>
1161
+ <div data-tippy-content="Use these URLs on this machine"><i class='fas fa-laptop-code'></i> This machine</div>
1162
+ <div data-tippy-content="Use these URLs from other machines on the same local network."><i class="fa-solid fa-wifi"></i> Local network</div>
1163
+ <div data-tippy-content="Use these URLs from other pinokio peers on the same local network"><i class="fa-solid fa-podcast"></i> Local HTTPS network</div>
1151
1164
  </div>
1152
1165
  </div>
1153
- </h3>
1154
- </div>
1166
+ </div>
1167
+ <% } %>
1168
+ <!--
1169
+ <a class='explain' data-type='peer'>How to start a peer</a>
1170
+ -->
1155
1171
  <% if (requirements_pending || peer_active && processes.length === 0) { %>
1156
1172
  <div class='loader'>
1157
1173
  <i class="fa-solid fa-circle-notch fa-spin"></i>
@@ -1329,12 +1345,13 @@ if (document.querySelector("#active").checked) {
1329
1345
  document.querySelector("#active").addEventListener("change", (e)=> {
1330
1346
  console.log(e.target.checked)
1331
1347
  if (e.target.checked) {
1348
+ document.querySelector("#network_name .label").innerHTML = "Network Name"
1332
1349
  document.querySelector("#network_name").classList.remove("hidden")
1333
1350
  document.querySelector(".network-name").classList.add("expanded")
1334
1351
  document.querySelector("#name").classList.remove("hidden")
1335
1352
  document.querySelector("#active-label").innerHTML = "On"
1336
1353
  } else {
1337
- document.querySelector("#network_name").classList.add("hidden")
1354
+ document.querySelector("#network_name .label").innerHTML = "Save Settings"
1338
1355
  document.querySelector(".network-name").classList.remove("expanded")
1339
1356
  document.querySelector("#name").classList.add("hidden")
1340
1357
  document.querySelector("#active-label").innerHTML = "Off"
@@ -1603,6 +1620,87 @@ setInterval(() => {
1603
1620
  })
1604
1621
  }, 2000)
1605
1622
  <% } %>
1623
+
1624
+ let list = []
1625
+ document.querySelectorAll(".line").forEach((el, index) => {
1626
+ list.push({
1627
+ index: parseInt(el.getAttribute("data-index")),
1628
+ name: el.getAttribute("data-name"),
1629
+ description: el.getAttribute("data-description"),
1630
+ uri: el.getAttribute("data-uri")
1631
+ })
1632
+ })
1633
+ const search = (items, value) => {
1634
+ let filtered = []
1635
+ for(let i=0; i<items.length; i++) {
1636
+ let item = items[i]
1637
+ let re = new RegExp(value, "i")
1638
+ if (re.test(item.name)) {
1639
+ filtered.push({ item })
1640
+ } else if (re.test(item.description)) {
1641
+ filtered.push({ item })
1642
+ } else if (re.test(item.uri)) {
1643
+ filtered.push({ item })
1644
+ }
1645
+ }
1646
+ return filtered
1647
+ }
1648
+ let selectedIndex = -1
1649
+ let selectedBtnIndex = 0
1650
+ let filteredCount = list.length
1651
+ let filteredBtnsCount = 0
1652
+ const renderSearch = () => {
1653
+ let target = document.querySelector("form input[type=search]")
1654
+ let result
1655
+ if (target.value.trim().length === 0) {
1656
+ result = list.map((i, index) => {
1657
+ return { item: i }
1658
+ })
1659
+ } else {
1660
+ result = search(list, target.value)
1661
+ }
1662
+ let all = document.querySelectorAll(".line")
1663
+ for(let el of all) {
1664
+ el.classList.add("hidden")
1665
+ el.classList.remove("selected")
1666
+ }
1667
+
1668
+ filteredCount = result.length
1669
+ for(let i=0; i<result.length; i++) {
1670
+ let selector = result[i]
1671
+ //let el = document.querySelector(".line[data-name='" + selector.item.name + "']")
1672
+ let el = document.querySelector(".line[data-index='" + selector.item.index + "']")
1673
+ el.classList.remove("hidden")
1674
+ if (i === selectedIndex) {
1675
+ el.classList.add("selected")
1676
+ let btns = el.querySelectorAll(".btns a")
1677
+ filteredBtnsCount = btns.length
1678
+ btns.forEach((_el, j) => {
1679
+ if (selectedBtnIndex === j) {
1680
+ _el.classList.add("selected")
1681
+ } else {
1682
+ _el.classList.remove("selected")
1683
+ }
1684
+ })
1685
+ } else {
1686
+ el.classList.remove("selected")
1687
+ let btns = el.querySelectorAll(".btns a")
1688
+ btns.forEach((_el, j) => {
1689
+ _el.classList.remove("selected")
1690
+ })
1691
+ }
1692
+ }
1693
+
1694
+ }
1695
+ if (document.querySelector("form input[type=search]")) {
1696
+ renderSearch()
1697
+ document.querySelector("form input[type=search]").addEventListener("input", (e) => {
1698
+ selectedIndex = 0
1699
+ selectedBtnIndex = 0
1700
+ renderSearch()
1701
+ })
1702
+ document.querySelector("form input[type=search]").focus()
1703
+ }
1606
1704
  </script>
1607
1705
  </body>
1608
1706
  </html>
@@ -1000,6 +1000,7 @@ body.dark .appcanvas {
1000
1000
  <script src="/fseditor.js"></script>
1001
1001
  </head>
1002
1002
  <body class='<%=theme%>' data-platform="<%=platform%>">
1003
+ <div id='dragger'></div>
1003
1004
  <header class='navheader grabbable'>
1004
1005
  <h1>
1005
1006
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -946,6 +946,7 @@ body.minimized #collapse {
946
946
  <script src="/tippy-bundle.umd.min.js"></script>
947
947
  </head>
948
948
  <body class='<%=theme%>' data-platform="<%=platform%>" data-agent="<%=agent%>">
949
+ <div id='dragger'></div>
949
950
  <header class='navheader grabbable'>
950
951
  <h1>
951
952
  <a class='home' href="/">
@@ -17,7 +17,7 @@ body {
17
17
  }
18
18
  #dragger {
19
19
  -webkit-app-region: drag;
20
- cursor: drag;
20
+ cursor: grab;
21
21
  position: absolute;
22
22
  top: 0;
23
23
  left: 0;
@@ -641,6 +641,7 @@ document.addEventListener('DOMContentLoaded', function() {
641
641
  <script src="/report.js"></script>
642
642
  </head>
643
643
  <body class='<%=theme%>' data-agent="<%=agent%>">
644
+ <div id='dragger'></div>
644
645
  <!--
645
646
  <nav>
646
647
  <a class='logo' href="/">dal</a>
@@ -363,6 +363,7 @@ document.addEventListener('DOMContentLoaded', function() {
363
363
  <script src="/report.js"></script>
364
364
  </head>
365
365
  <body class='<%=theme%>' data-agent="<%=agent%>">
366
+ <div id='dragger'></div>
366
367
  <!--
367
368
  <nav>
368
369
  <a class='logo' href="/">dal</a>
@@ -134,6 +134,7 @@ body {
134
134
  <script src="/report.js"></script>
135
135
  </head>
136
136
  <body class='<%=theme%>' data-agent="<%=agent%>">
137
+ <div id='dragger'></div>
137
138
  <header class='grabbable'>
138
139
  <h1>
139
140
  <a class='path' href="/"><%-logo%></a>
@@ -149,6 +149,7 @@ body.dark .card {
149
149
  <script src="/common.js"></script>
150
150
  </head>
151
151
  <body class='<%=theme%>' data-agent="<%=agent%>">
152
+ <div id='dragger'></div>
152
153
  <header class='grabbable'>
153
154
  <h1>
154
155
  <a class='path' href="/"><%-logo%></a>
@@ -833,6 +833,7 @@ document.addEventListener('DOMContentLoaded', function() {
833
833
  <script src="/report.js"></script>
834
834
  </head>
835
835
  <body class='<%=theme%>' data-agent="<%=agent%>">
836
+ <div id='dragger'></div>
836
837
  <!--
837
838
  <nav>
838
839
  <a class='logo' href="/">dal</a>