Old ngn4 website
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

234 lines
5.3 KiB

8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
  1. var set = new NameGeneratorSet();
  2. var categories = {};
  3. var backgrounds = {};
  4. var previous = null;
  5. var generator = null;
  6. var big = true;
  7. var gender = null;
  8. var format = null;
  9. function selectGenerator(id) {
  10. var gen = set.getGenerator(id);
  11. var element = $('div.item:hover');
  12. var index = element.index();
  13. var parent = element.parent();
  14. element.detach();
  15. element = element.clone();
  16. if(index > 0) {
  17. element.insertAfter(parent.children().eq(index - 1));
  18. } else {
  19. parent.prepend(element);
  20. }
  21. if(gen != null) {
  22. setGenerator(id, gen);
  23. } else {
  24. setMode(0);
  25. $.get('/d/' + id, {}, function(data) {
  26. var fullId = data.catId + '/' + data.id;
  27. setGenerator(fullId, set.addGenerator(fullId, data, true));
  28. });
  29. }
  30. }
  31. function setMode(mode) {
  32. $('#loading-screen').hide();
  33. $('#generator-screen').hide();
  34. switch(mode) {
  35. case 0: $('#loading-screen').show(); break;
  36. case 1: $('#generator-screen').show(); break;
  37. }
  38. }
  39. function setGenerator(id, gen) {
  40. setCookie('last_generator', id, 14);
  41. $('#gi-header').html(gen.name);
  42. $('#gi-genders').html('');
  43. $('#gi-formats').html('');
  44. if(gen.genders.length > 1) {
  45. for(var i = 0; i < gen.genders.length; ++i) {
  46. var className = '';
  47. if(i == 0) {
  48. className = "selected";
  49. }
  50. $('#gi-genders').append($('<a class="'+className+'" onclick="selectGender(this);">'+gen.genders[i]+'</a>'));
  51. }
  52. }
  53. var prev = null;
  54. var keys = Object.keys(gen.formats);
  55. if(keys.length > 1) {
  56. for(var i = 0; i < keys.length; ++i) {
  57. var className = '';
  58. if(i == 0) {
  59. className = "selected";
  60. }
  61. $('#gi-formats').append($('<a class="'+className+'" onclick="selectFormat(this);" data-id="'+keys[i]+'">'+gen.formats[keys[i]].name+'</a>'));
  62. }
  63. }
  64. setMode(1);
  65. selectBackground(id);
  66. gender = gen.genders[0];
  67. format = keys[i];
  68. generator = gen;
  69. $('#gi-button').focus();
  70. if(previous != id) {
  71. generate();
  72. }
  73. previous = id;
  74. }
  75. function selectBackground(id) {
  76. if(backgrounds.hasOwnProperty(id)) {
  77. setBackground(backgrounds[id]);
  78. } else {
  79. $.get('/b/' + id, {}, function(data) {
  80. backgrounds[id] = data;
  81. setBackground(backgrounds[id]);
  82. });
  83. }
  84. }
  85. function setBackground(fileName) {
  86. $('#generator-style').html('body { background-image: url(' + fileName + '); }');
  87. }
  88. function hideFooter() {
  89. $('.ngn4-footer').hide();
  90. setCookie('hide_footer', 'yes', 60);
  91. }
  92. function generate() {
  93. if(generator != null) {
  94. $('#gi-name').html(generator.generate(format, gender));
  95. }
  96. }
  97. function updateLists() {
  98. $('#menu-items').html("Loading...");
  99. $.get('/l/generators', function(data, err) {
  100. if(!err) {
  101. setList(data);
  102. }
  103. });
  104. }
  105. function setList(data) {
  106. // 1. Categories
  107. var keys = Object.keys(data.categories);
  108. var items = {};
  109. $('#menu-items').html('');
  110. for(var i = 0; i < keys.length; ++i) {
  111. var key = keys[i];
  112. var item = $('<div class="item" data-id="'+key+'"><span>'+data.categories[key]+'</span><div class="ngn4-panel"></div></div>');
  113. items[key] = item;
  114. $('#menu-items').append(item);
  115. categories[key] = data.categories[key];
  116. }
  117. // 2. Sub menus
  118. keys = Object.keys(data.generators);
  119. for(var i = 0; i < keys.length; ++i) {
  120. var key = keys[i];
  121. var item = $('<a href="javascript:selectGenerator(\''+key+'\')">'+data.generators[key]+'</a>');
  122. $('div', items[key.split('/')[0]]).append(item);
  123. }
  124. applyMediaQueries(true);
  125. }
  126. function applyMediaQueries(force) {
  127. var mq = window.matchMedia("(max-width: 980px)");
  128. if(typeof(force) !== 'boolean') {
  129. force = false;
  130. }
  131. if (mq.matches && (!big || force)) {
  132. $('#menu-items .item').each(function(index) {
  133. $('span', this).html($(this).data('id').toUpperCase());
  134. });
  135. big = true;
  136. }
  137. if (!mq.matches && (big || force)) {
  138. $('#menu-items .item').each(function(index) {
  139. $('span', this).html(categories[$(this).data('id')]);
  140. });
  141. big = false;
  142. }
  143. }
  144. function selectGender(elem) {
  145. gender = $(elem).text();
  146. $('#gi-genders a.selected').attr('class', '');
  147. $(elem).attr('class', 'selected');
  148. }
  149. function selectFormat(elem) {
  150. format = $(elem).data('id');
  151. $('#gi-formats a.selected').attr('class', '');
  152. $(elem).attr('class', 'selected');
  153. }
  154. $(document).ready(function() {
  155. if(getCookie('hide_footer') === 'yes') {
  156. $('.ngn4-footer').hide();
  157. }
  158. if(inited !== true) {
  159. var lastGenerator = getCookie('last_generator');
  160. if(lastGenerator.length > 0) {
  161. selectGenerator(lastGenerator);
  162. } else {
  163. selectGenerator('default');
  164. }
  165. updateLists();
  166. } else {
  167. var fullId = initData.catId + '/' + initData.id;
  168. setGenerator(fullId, set.addGenerator(fullId, initData, true));
  169. setList(genList);
  170. }
  171. });
  172. $(window).resize(applyMediaQueries);
  173. // http://www.w3schools.com/js/js_cookies.asp
  174. function getCookie(cname) {
  175. var name = cname + "=";
  176. var ca = document.cookie.split(';');
  177. for(var i=0; i<ca.length; i++) {
  178. var c = ca[i];
  179. while (c.charAt(0)==' ') c = c.substring(1);
  180. if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
  181. }
  182. return "";
  183. }
  184. function setCookie(cname, cvalue, exdays) {
  185. var d = new Date();
  186. d.setTime(d.getTime() + (exdays*24*60*60*1000));
  187. var expires = "expires="+d.toUTCString();
  188. document.cookie = cname + "=" + cvalue + "; " + expires;
  189. }