1
0

uiSettings.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. var Settings = (function() {
  2. var displayed = false,
  3. currentPage = null,
  4. pages = {
  5. services: "services",
  6. display: "display",
  7. privacy: "privacy"
  8. },
  9. spawn = function() {
  10. document.getElementById(R.id.settings.wrapper).classList.remove(R.klass.hidden);
  11. // SERVICES
  12. var serviceFrag = document.createDocumentFragment(),
  13. hasServices = false;
  14. for (var i in CONFIG.services) {
  15. var provider = CONFIG.services[i];
  16. for (var service in provider) {
  17. var serviceItem = document.createElement("li"),
  18. providerDom = document.createElement("span"),
  19. serviceDom = document.createElement("span");
  20. providerDom.textContent = i;
  21. serviceDom.textContent = provider[service];
  22. serviceItem.className = R.klass.settings.services.item;
  23. providerDom.className = R.klass.settings.services.provider;
  24. serviceDom.className = R.klass.settings.services.service;
  25. serviceItem.appendChild(providerDom);
  26. serviceItem.appendChild(serviceDom);
  27. serviceFrag.appendChild(serviceItem);
  28. hasServices = true;
  29. }
  30. }
  31. var serviceListDom = document.getElementById(R.id.settings.services.serviceList);
  32. serviceListDom.textContent = "";
  33. if (hasServices) {
  34. document.getElementById(R.id.settings.services.serviceListEmpty).classList.remove(R.klass.hidden);
  35. serviceListDom.appendChild(serviceFrag);
  36. } else {
  37. document.getElementById(R.id.settings.services.serviceListEmpty).classList.add(R.klass.hidden);
  38. }
  39. // EMOJIS
  40. var emojiFrag = document.createDocumentFragment(),
  41. emojiList = document.getElementById(R.id.settings.display.emojiProvider);
  42. for (var i in EmojiProvider) {
  43. var opt = document.createElement("option");
  44. opt.value = i;
  45. opt.textContent = EmojiProvider[i].name;
  46. if (EmojiProvider[i] === CURRENT_EMOJI_PROVIDER)
  47. opt.selected = true;
  48. emojiFrag.appendChild(opt);
  49. }
  50. emojiList.textContent = "";
  51. emojiList.appendChild(emojiFrag);
  52. document.getElementById(R.id.settings.display.displayAvatar).checked = CONFIG.isDisplayAvatars();
  53. document.getElementById(R.id.settings.display.colorfulNames).checked = CONFIG.isColorfulNames();
  54. document.getElementById(R.id.settings.display.scrollAvatars).checked = CONFIG.isScrollAvatars();
  55. displayed = true;
  56. },
  57. setVisiblePage = function(page) {
  58. if (currentPage) {
  59. document.getElementById(R.id.settings.wrapper).classList.remove("display-" +currentPage);
  60. document.getElementById("setting-menu-" +currentPage).classList.remove(R.klass.selected);
  61. document.getElementById(R.id.settings.services.addSection).classList.add(R.klass.hidden);
  62. }
  63. document.getElementById(R.id.settings.wrapper).classList.add("display-" +page);
  64. document.getElementById("setting-menu-" +page).classList.add(R.klass.selected);
  65. currentPage = page;
  66. },
  67. close = function() {
  68. document.getElementById(R.id.settings.wrapper).classList.add(R.klass.hidden);
  69. displayed = false;
  70. };
  71. document.getElementById(R.id.settings.menu.list).addEventListener("click", function(e) {
  72. for (var target = e.target; e.currentTarget !== target && target; target = target.parentNode) {
  73. if (target.dataset && target.dataset["target"]) {
  74. for (var i in pages) {
  75. if (pages[i] === target.dataset["target"]) {
  76. setVisiblePage(pages[i]);
  77. return;
  78. }
  79. }
  80. }
  81. }
  82. });
  83. document.getElementById(R.id.settings.closeButton).addEventListener("click", close);
  84. document.getElementById(R.id.settings.services.addButton).addEventListener("click", function(e) {
  85. e.preventDefault();
  86. document.getElementById(R.id.settings.services.addSection).classList.remove(R.klass.hidden);
  87. return false;
  88. });
  89. document.getElementById(R.id.settings.services.serviceAddConfirm).addEventListener("click", function(e) {
  90. e.preventDefault();
  91. document.location.href = document.getElementById(R.id.settings.services.serviceProviderList).value;
  92. return false;
  93. });
  94. document.getElementById(R.id.settings.commitBt).addEventListener("click", function() {
  95. var newSettings = {},
  96. emojiProvider = document.getElementById(R.id.settings.display.emojiProvider).value;
  97. if (emojiProvider !== CONFIG.getEmojiProvider()) {
  98. newSettings["emojiProvider"] = document.getElementById(R.id.settings.display.emojiProvider).value;
  99. }
  100. var displayAvatar = !!document.getElementById(R.id.settings.display.displayAvatar).checked;
  101. if (displayAvatar !== CONFIG.isDisplayAvatars()) {
  102. newSettings["displayAvatar"] = displayAvatar;
  103. }
  104. var isColorfulNames = !!document.getElementById(R.id.settings.display.colorfulNames).checked;
  105. if (isColorfulNames !== CONFIG.isColorfulNames()) {
  106. newSettings["colorfulNames"] = isColorfulNames;
  107. }
  108. var isScrollAvatars = !!document.getElementById(R.id.settings.display.scrollAvatars).checked;
  109. if (isScrollAvatars !== CONFIG.isScrollAvatars()) {
  110. newSettings["scrollAvatars"] = isScrollAvatars;
  111. }
  112. CONFIG.commitNewSettings(newSettings);
  113. close();
  114. });
  115. return {
  116. /** @type {function(string=)} */
  117. display: function(page) {
  118. if (!displayed)
  119. spawn();
  120. setVisiblePage(page || pages.services);
  121. return this;
  122. },
  123. /** @type {function(boolean)} */
  124. setClosable: function(closable) {
  125. return this;
  126. },
  127. pages: pages
  128. };
  129. })();