uiSettings.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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. document.getElementById(R.id.settings.display.displayAttachments).value = CONFIG.autoExpandAttachments !== undefined ? CONFIG.autoExpandAttachments : CONFIG_AUTO_EXPAND.NOT_IMAGE;
  56. displayed = true;
  57. },
  58. setVisiblePage = function(page) {
  59. if (currentPage) {
  60. document.getElementById(R.id.settings.wrapper).classList.remove("display-" +currentPage);
  61. document.getElementById("setting-menu-" +currentPage).classList.remove(R.klass.selected);
  62. document.getElementById(R.id.settings.services.addSection).classList.add(R.klass.hidden);
  63. }
  64. document.getElementById(R.id.settings.wrapper).classList.add("display-" +page);
  65. document.getElementById("setting-menu-" +page).classList.add(R.klass.selected);
  66. currentPage = page;
  67. },
  68. close = function() {
  69. document.getElementById(R.id.settings.wrapper).classList.add(R.klass.hidden);
  70. displayed = false;
  71. };
  72. document.getElementById(R.id.settings.menu.list).addEventListener("click", function(e) {
  73. for (var target = e.target; e.currentTarget !== target && target; target = target.parentNode) {
  74. if (target.dataset && target.dataset["target"]) {
  75. for (var i in pages) {
  76. if (pages[i] === target.dataset["target"]) {
  77. setVisiblePage(pages[i]);
  78. return;
  79. }
  80. }
  81. }
  82. }
  83. });
  84. document.getElementById(R.id.settings.closeButton).addEventListener("click", close);
  85. document.getElementById(R.id.settings.services.addButton).addEventListener("click", function(e) {
  86. e.preventDefault();
  87. document.getElementById(R.id.settings.services.addSection).classList.remove(R.klass.hidden);
  88. return false;
  89. });
  90. document.getElementById(R.id.settings.services.serviceAddConfirm).addEventListener("click", function(e) {
  91. e.preventDefault();
  92. document.location.href = document.getElementById(R.id.settings.services.serviceProviderList).value;
  93. return false;
  94. });
  95. document.getElementById(R.id.settings.commitBt).addEventListener("click", function() {
  96. var newSettings = {},
  97. emojiProvider = document.getElementById(R.id.settings.display.emojiProvider).value;
  98. if (emojiProvider !== CONFIG.getEmojiProvider()) {
  99. newSettings["emojiProvider"] = document.getElementById(R.id.settings.display.emojiProvider).value;
  100. }
  101. var displayAvatar = !!document.getElementById(R.id.settings.display.displayAvatar).checked;
  102. if (displayAvatar !== CONFIG.isDisplayAvatars()) {
  103. newSettings["displayAvatar"] = displayAvatar;
  104. }
  105. var isColorfulNames = !!document.getElementById(R.id.settings.display.colorfulNames).checked;
  106. if (isColorfulNames !== CONFIG.isColorfulNames()) {
  107. newSettings["colorfulNames"] = isColorfulNames;
  108. }
  109. var isScrollAvatars = !!document.getElementById(R.id.settings.display.scrollAvatars).checked;
  110. if (isScrollAvatars !== CONFIG.isScrollAvatars()) {
  111. newSettings["scrollAvatars"] = isScrollAvatars;
  112. }
  113. var displayAttachmentValue = document.getElementById(R.id.settings.display.displayAttachments).value;
  114. if (displayAttachmentValue !== CONFIG.autoExpandAttachments) {
  115. newSettings["autoExpandAttachments"] = displayAttachmentValue;
  116. }
  117. CONFIG.commitNewSettings(newSettings);
  118. close();
  119. });
  120. return {
  121. /** @type {function(string=)} */
  122. display: function(page) {
  123. if (!displayed)
  124. spawn();
  125. setVisiblePage(page || pages.services);
  126. return this;
  127. },
  128. /** @type {function(boolean)} */
  129. setClosable: function(closable) {
  130. return this;
  131. },
  132. pages: pages
  133. };
  134. })();