ui.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. var reason ="";
  2. function showImage() {
  3. $.ajax({
  4. type: "GET",
  5. url: 'languages',
  6. success: function(ret) {
  7. $('#content .added').remove();
  8. var template = $('#content template')[0];
  9. var promises = [];
  10. $('language',ret).each(function(i,e){
  11. var clone = document.importNode(template.content, true);
  12. promises.push(new Promise((resolve, reject) => {
  13. $('> *',clone).each(function(j,c){
  14. $(c).addClass('added');
  15. $(c).attr('lang', e.textContent);
  16. $.ajax({
  17. type: "GET",
  18. url: 'images/' + e.textContent,
  19. success: function(img) {
  20. $(c).attr('style','background-image: url("' + img +'")');
  21. $('#content').append(c);
  22. resolve(true);
  23. },
  24. error: function() {
  25. reject(false);
  26. setTimeout(function(){ showImage(); }, 500);
  27. }
  28. });
  29. });
  30. }));
  31. });
  32. Promise.all(promises).then((values) => {
  33. $.ajax({
  34. type: "GET",
  35. url: 'style.url',
  36. success: function(ret) {
  37. $('head link.custom').attr('href',ret);
  38. }
  39. });
  40. $.ajax({
  41. type: "GET",
  42. url: 'num',
  43. success: function(num) {
  44. if (num == 1) {
  45. $("button[name=first]").addClass('hidden');
  46. $("button[name=previous]").addClass('hidden');
  47. } else {
  48. $("button[name=first]").removeClass('hidden');
  49. $("button[name=previous]").removeClass('hidden');
  50. }
  51. $.ajax({
  52. type: "GET",
  53. url: 'total',
  54. success: function(total) {
  55. if (num == total) {
  56. $("button[name=last]").addClass('hidden');
  57. $("button[name=next]").addClass('hidden');
  58. } else {
  59. $("button[name=last]").removeClass('hidden');
  60. $("button[name=next]").removeClass('hidden');
  61. }
  62. }
  63. });
  64. }
  65. });
  66. $.ajax({
  67. type: "GET",
  68. url: 'errors.xml',
  69. success: function(ret) {
  70. $("button[name=error]").removeClass('hidden');
  71. }
  72. });
  73. lang_init('#content','#languages');
  74. $('#languages').removeClass('hidden');
  75. $('#nav').removeClass('hidden');
  76. $('#nope').addClass('hidden');
  77. });
  78. },
  79. error: function() {
  80. reason = '';
  81. clearImage();
  82. }
  83. });
  84. }
  85. function clearImage() {
  86. $('#languages').addClass('hidden');
  87. $('#reasons').addClass('hidden');
  88. $('#nav').addClass('hidden');
  89. $('#nav button').addClass('hidden');
  90. $('#nope').removeClass('hidden');
  91. $("button").addClass('hidden');
  92. $('#content .added').remove();
  93. $('#reason').text(reason);
  94. }
  95. function init() {
  96. es = new EventSource('sse/');
  97. es.onopen = function() {
  98. showImage();
  99. // load
  100. };
  101. es.onmessage = function(e) {
  102. if (e.data == 'new') {
  103. reason = '';
  104. showImage();
  105. }
  106. if (e.data == 'reset') {
  107. reason = '';
  108. clearImage();
  109. }
  110. };
  111. es.onerror = function() {
  112. reason = 'Server down.';
  113. clearImage();
  114. setTimeout(init, 10000);
  115. };
  116. }
  117. $(document).ready(function() {
  118. init();
  119. $("button[name=next]").click(b_next);
  120. $("button[name=previous]").click(b_previous);
  121. $("button[name=error]").click(b_error);
  122. $("button[name=first]").click(b_first);
  123. $("button[name=last]").click(b_last);
  124. $("#reasons").on('click','button',b_reason);
  125. $('body').keypress(function(e){
  126. if (e.originalEvent.key == 'a' && !$("button[name=previous]").hasClass('hidden')) {
  127. b_previous();
  128. }
  129. if (e.originalEvent.key == 'c' && !$("button[name=next]").hasClass('hidden')) {
  130. b_next();
  131. }
  132. });
  133. });
  134. function b_previous() {
  135. $.ajax({
  136. type: "DELETE",
  137. data: { op: "prev" },
  138. url: location.href
  139. });
  140. }
  141. function b_next() {
  142. $.ajax({
  143. type: "DELETE",
  144. data: { op: "next" },
  145. url: location.href
  146. });
  147. }
  148. function b_first() {
  149. $.ajax({
  150. type: "DELETE",
  151. data: { op: "jump", target: 1 },
  152. url: location.href
  153. });
  154. }
  155. function b_last() {
  156. $.ajax({
  157. type: "DELETE",
  158. data: { op: "jump", target: -1 },
  159. url: location.href
  160. });
  161. }
  162. function b_reason() {
  163. var reason = $(this).text();
  164. $('#reasons').toggleClass('hidden');
  165. $.ajax({
  166. type: "DELETE",
  167. data: { op: "error", reason: reason },
  168. url: location.href
  169. });
  170. }
  171. function b_error() {
  172. $.ajax({
  173. type: "get",
  174. url: "errors.xml",
  175. success: function(x) {
  176. $('#reasons .added').remove();
  177. var template = $('#reasons template')[0];
  178. $('reason',x).each((k,v) => {
  179. var clone = document.importNode(template.content, true);
  180. $('> *',clone).each((j,c) => {
  181. $(c).addClass('error added');
  182. $('button',c).text(v.textContent);
  183. });
  184. $('#reasons').append(clone);
  185. });
  186. $('#reasons').toggleClass('hidden');
  187. }
  188. });
  189. }