1
0

uiSettings.js 5.3 KB

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