uiSettings.js 4.7 KB

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