Заметки с перенаправлением | Notes with redirection
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. <!DOCTYPE html>
  2. <html>
  3. <meta charset="utf-8">
  4. <head>
  5. <style>
  6. table
  7. {
  8. border-collapse: collapse;
  9. width: 100%;
  10. }
  11. table, th, td
  12. {
  13. border: 1px solid #aaa;
  14. padding: 0.5em;
  15. margin-top: 0.5em;
  16. margin-bottom: 0.5em;
  17. }
  18. </style>
  19. <title>Метки</title>
  20. </head>
  21. <body>
  22. <script>
  23. function базаБезФайла()
  24. {
  25. var база = window.location.href;
  26. var компоненты = база.split(/\//);
  27. компоненты.pop();
  28. return decodeURIComponent(компоненты.join("/"));
  29. }
  30. function ограниченнаяСтрока(строка)
  31. {
  32. const предел = 93;
  33. if (строка.length > предел)
  34. {
  35. return строка.substring(0, предел) + ". . .";
  36. }
  37. return строка;
  38. }
  39. // JavaScript equivalent to printf/String.Format
  40. // https://stackoverflow.com/a/4673436
  41. function форматСтроки() {
  42. // How to shift “arguments”
  43. // https://stackoverflow.com/questions/4775895/how-to-shift-arguments
  44. var args = Array.prototype.slice.call(arguments);
  45. var str = args.shift();
  46. return str.replace(/{(\d+)}/g, function(match, number) {
  47. return typeof args[number] != 'undefined'
  48. ? args[number]
  49. : match
  50. ;
  51. });
  52. }
  53. function взять(адрес, откликУспеха, откликПровала)
  54. {
  55. var запрос = new XMLHttpRequest();
  56. запрос.onreadystatechange = function()
  57. {
  58. if (this.readyState == 4)
  59. {
  60. if (this.status == 200)
  61. {
  62. откликУспеха(this.responseText);
  63. }
  64. else if (откликПровала)
  65. {
  66. откликПровала(this.status);
  67. }
  68. }
  69. }
  70. запрос.open("GET", адрес);
  71. запрос.send();
  72. }
  73. </script>
  74. <script>
  75. var м = {};
  76. м.метки = [];
  77. м.таблица = null;
  78. м.создатьТаблицу = function()
  79. {
  80. const интерфейс = `
  81. <table id="метки">
  82. <tr>
  83. <th>Имя</th>
  84. <th>Описание</th>
  85. <th>Дата</th>
  86. <th>Коротко</th>
  87. <th>Адрес</th>
  88. </tr>
  89. </table>
  90. `;
  91. document.body.innerHTML = интерфейс;
  92. м.таблица = document.getElementById("метки");
  93. };
  94. м.заполнитьТаблицу = function()
  95. {
  96. for (var номер in м.метки)
  97. {
  98. var метка = м.метки[номер];
  99. var ряд = м.таблица.insertRow(-1);
  100. var ячейки = {
  101. "имя": ряд.insertCell(0),
  102. "описание": ряд.insertCell(1),
  103. "дата": ряд.insertCell(2),
  104. "коротко": ряд.insertCell(3),
  105. "адрес": ряд.insertCell(4),
  106. };
  107. ячейки.имя.innerHTML = метка.имя;
  108. ячейки.коротко.innerHTML = базаБезФайла() + "?" + метка.имя;
  109. ячейки.описание.innerHTML = метка.описание;
  110. ячейки.дата.innerHTML = метка.дата;
  111. ячейки.адрес.innerHTML =
  112. форматСтроки(
  113. "<a href='{0}'>{1}</a>",
  114. метка.адрес,
  115. ограниченнаяСтрока(метка.адрес)
  116. );
  117. }
  118. };
  119. м.имя = null;
  120. м.разобратьИмяПеренаправления = function()
  121. {
  122. const имя = decodeURIComponent(window.location.search.substring(1));
  123. if (имя.length)
  124. {
  125. м.имя = имя;
  126. }
  127. };
  128. м.адрес = function(имя)
  129. {
  130. if (!имя)
  131. {
  132. return null;
  133. }
  134. for (var номер in м.метки)
  135. {
  136. var метка = м.метки[номер];
  137. if (метка.имя == имя)
  138. {
  139. return метка.адрес;
  140. }
  141. }
  142. return null;
  143. };
  144. м.разобратьМетки = function(текст)
  145. {
  146. var сейчас = "";
  147. var метки = [];
  148. var метка = {
  149. "имя" : "",
  150. "дата" : "",
  151. "адрес" : "",
  152. "описание" : "",
  153. };
  154. function возможноЗабратьМетку()
  155. {
  156. if (
  157. метка.имя.length &&
  158. метка.дата.length &&
  159. метка.адрес.length &&
  160. метка.описание.length
  161. ) {
  162. метки.push(метка);
  163. // Освободить место для следующей метки.
  164. метка = {
  165. "имя" : "",
  166. "дата" : "",
  167. "адрес" : "",
  168. "описание" : "",
  169. };
  170. }
  171. }
  172. const строки = текст.split(/\n/);
  173. for (var номер in строки)
  174. {
  175. const строка = строки[номер];
  176. // Ключ.
  177. if (строка == "ИМЯ")
  178. {
  179. возможноЗабратьМетку();
  180. сейчас = "имя";
  181. }
  182. else if (строка == "ДАТА")
  183. {
  184. возможноЗабратьМетку();
  185. сейчас = "дата";
  186. }
  187. else if (строка == "ОПИСАНИЕ")
  188. {
  189. возможноЗабратьМетку();
  190. сейчас = "описание";
  191. }
  192. else if (строка == "АДРЕС")
  193. {
  194. возможноЗабратьМетку();
  195. сейчас = "адрес";
  196. }
  197. // Значение.
  198. else
  199. {
  200. if (сейчас == "имя")
  201. {
  202. метка.имя += строка;
  203. }
  204. else if (сейчас == "дата")
  205. {
  206. метка.дата += строка;
  207. }
  208. else if (сейчас == "адрес")
  209. {
  210. метка.адрес += строка;
  211. }
  212. else if (сейчас == "описание")
  213. {
  214. метка.описание += строка + "\n";
  215. }
  216. }
  217. }
  218. // Последний раз.
  219. возможноЗабратьМетку();
  220. м.метки = метки;
  221. };
  222. м.загрузитьМетки = function(откликЗавершения)
  223. {
  224. console.log("Загружаем");
  225. взять(
  226. м.меткиАдрес,
  227. function(текст)
  228. {
  229. console.log("Загрузили");
  230. м.разобратьМетки(текст);
  231. откликЗавершения();
  232. }
  233. );
  234. };
  235. м.запустить = function()
  236. {
  237. м.разобратьИмяПеренаправления();
  238. const адр = м.адрес(м.имя)
  239. // Перенаправить.
  240. if (адр)
  241. {
  242. window.location.href = адр;
  243. }
  244. // Показать заметки.
  245. else
  246. {
  247. м.создатьТаблицу();
  248. м.заполнитьТаблицу();
  249. // Уведомить о неверном имени.
  250. if (м.имя)
  251. {
  252. console.log("ВНИМАНИЕ Неверное имя: '" + м.имя + "'");
  253. }
  254. }
  255. };
  256. </script>
  257. <script>
  258. м.меткиАдрес = "https://git.opengamestudio.org/kornerr/notes/raw/branch/master/база";
  259. м.загрузитьМетки(
  260. м.запустить
  261. );
  262. </script>
  263. </body>
  264. </html>