APIs

Show:
  1. /**
  2. * @namespace flexygo.ui.wc
  3. */
  4. var flexygo;
  5. (function (flexygo) {
  6. var ui;
  7. (function (ui) {
  8. var wc;
  9. (function (wc) {
  10. class SidePanelItem {
  11. }
  12. wc.SidePanelItem = SidePanelItem;
  13. /**
  14. * Library for the FlxSidePanelElement web component.
  15. *
  16. * @class FlxSidePanelElement
  17. * @constructor
  18. * @return {FlxSidePanelElement}
  19. */
  20. class FlxSidePanelElement extends HTMLElement {
  21. constructor() {
  22. super();
  23. /**
  24. * Set when component is attached to DOM
  25. * @property connected {boolean}
  26. */
  27. this.connected = false;
  28. this.lastTimer = null;
  29. }
  30. /**
  31. * Fires when element is attached to DOM
  32. * @method connectedCallback
  33. */
  34. connectedCallback() {
  35. this.connected = true;
  36. this.init();
  37. }
  38. /**
  39. * Array of observed attributes.
  40. * @property observedAttributes {Array}
  41. */
  42. static get observedAttributes() {
  43. return [];
  44. }
  45. /**
  46. * Fires when element is attached to DOM
  47. * @method connectedCallback
  48. */
  49. attributeChangedCallback(attrName, oldVal, newVal) {
  50. if (!this.connected) {
  51. return;
  52. }
  53. }
  54. init() {
  55. this.clearPanels();
  56. this.panels = {};
  57. }
  58. clearPanels() {
  59. let me = $(this);
  60. me.html('<div class="side-items hidden-m"></div><div class="side-panels hidden-m"></div>');
  61. me.find('.side-panels').on('mouseout', (e) => {
  62. this.lastTimer = setTimeout(() => {
  63. let lastActive = me.find('.active');
  64. lastActive.removeClass('active');
  65. lastActive.each((i, el) => {
  66. this.panels[$(el).attr('name')].panel.hide('blind', { direction: 'left' }, 500);
  67. });
  68. }, 1000);
  69. }).on('mouseover', (e) => {
  70. if (this.lastTimer) {
  71. clearTimeout(this.lastTimer);
  72. this.lastTimer = null;
  73. }
  74. });
  75. }
  76. addPanel(title, icon, content, debugOnly) {
  77. let me = $(this);
  78. let debugClass = '';
  79. if (debugOnly) {
  80. debugClass = 'develop-only';
  81. }
  82. let button = $('<span class="' + debugClass + '"><i class="' + icon + '" ></i> ' + title + '</span>').attr('name', title);
  83. let panel = $('<div class="' + debugClass + '" style="display:none" />').append(content);
  84. button.on('click', (e) => {
  85. this.togglePanel($(e.currentTarget));
  86. });
  87. me.find('.side-items').append(button);
  88. me.find('.side-panels').append(panel);
  89. this.panels[title] = ({ "button": button, "panel": panel });
  90. }
  91. togglePanel(itm) {
  92. let me = $(this);
  93. let lastActive = me.find('.active');
  94. let wasActive = itm.is('.active');
  95. let isAnyActive = lastActive.length;
  96. if (isAnyActive && !wasActive) {
  97. lastActive.removeClass('active');
  98. lastActive.each((i, e) => {
  99. this.panels[$(e).attr('name')].panel.hide();
  100. });
  101. itm.addClass('active');
  102. this.panels[itm.attr('name')].panel.show();
  103. }
  104. else {
  105. lastActive.removeClass('active');
  106. lastActive.each((i, e) => {
  107. this.panels[$(e).attr('name')].panel.hide('blind', { direction: 'left' }, 500);
  108. });
  109. if (!wasActive) {
  110. itm.addClass('active');
  111. this.panels[itm.attr('name')].panel.show('blind', { direction: 'left' }, 500);
  112. }
  113. }
  114. }
  115. removePanel(key) {
  116. this.panels[key].panel.remove();
  117. this.panels[key].button.remove();
  118. }
  119. hidePanels() {
  120. for (let key in this.panels) {
  121. this.panels[key].panel.hide();
  122. }
  123. }
  124. }
  125. wc.FlxSidePanelElement = FlxSidePanelElement;
  126. })(wc = ui.wc || (ui.wc = {}));
  127. })(ui = flexygo.ui || (flexygo.ui = {}));
  128. })(flexygo || (flexygo = {}));
  129. window.customElements.define('flx-sidepanel', flexygo.ui.wc.FlxSidePanelElement);
  130. //# sourceMappingURL=flx-sidepanel.js.map