@nixweb/nixloc-ui 0.0.119 → 0.0.122

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/docs/src/component/template/ModeloRelatorioView.drawio +160 -0
  2. package/docs/src/store/modulos/relatorio.drawio +37 -0
  3. package/package.json +77 -75
  4. package/public/index.html +2 -4
  5. package/public/styles/app.css +1 -2
  6. package/src/component/forms/{Botao.vue → Button.vue} +53 -57
  7. package/src/component/forms/CheckboxGroup.vue +63 -0
  8. package/src/component/forms/{CheckboxUnico.vue → CheckboxSimple.vue} +6 -6
  9. package/src/component/forms/{Cor.vue → Color.vue} +9 -9
  10. package/src/component/forms/DateTime.vue +53 -53
  11. package/src/component/forms/{BotaoDropdown.vue → Dropdown.vue} +50 -50
  12. package/src/component/forms/EditorHtml.vue +123 -0
  13. package/src/component/forms/FileUpload.vue +189 -0
  14. package/src/component/forms/InputDecimal.vue +137 -0
  15. package/src/component/forms/InputNumber.vue +149 -0
  16. package/src/component/forms/InputPassword.vue +135 -0
  17. package/src/component/forms/InputText.vue +157 -0
  18. package/src/component/forms/Modal.vue +15 -15
  19. package/src/component/forms/RadioGroup.vue +50 -0
  20. package/src/component/forms/Select.vue +337 -0
  21. package/src/component/forms/SelectStatic.vue +120 -0
  22. package/src/component/forms/TextArea.vue +126 -0
  23. package/src/component/forms/Toggle.vue +13 -13
  24. package/src/component/layout/{Conta.vue → Account.vue} +28 -28
  25. package/src/component/layout/{Alerta.vue → Alert.vue} +22 -22
  26. package/src/component/layout/Badge.vue +23 -23
  27. package/src/component/layout/{BarraFixa.vue → FixedBar.vue} +16 -16
  28. package/src/component/layout/{CarregandoTelaInteira.vue → LoadingFullPage.vue} +3 -3
  29. package/src/component/layout/Menu.vue +66 -66
  30. package/src/component/layout/{Moldura.vue → Molded.vue} +4 -4
  31. package/src/component/layout/Panel.vue +142 -0
  32. package/src/component/layout/Popover.vue +1 -1
  33. package/src/component/layout/{BarraRolagem.vue → Scrollbar.vue} +9 -11
  34. package/src/component/layout/Tag.vue +9 -9
  35. package/src/component/layout/Topo.vue +1 -1
  36. package/src/component/layout/Wizard.vue +3 -3
  37. package/src/component/shared/BotaoCarregarMais.vue +9 -9
  38. package/src/component/shared/BotaoConsulta.vue +9 -9
  39. package/src/component/shared/CabecalhoImpressao.vue +6 -6
  40. package/src/component/shared/CodigoEditor.vue +16 -16
  41. package/src/component/shared/Confirmacao.vue +28 -28
  42. package/src/component/shared/Dica.vue +10 -10
  43. package/src/component/shared/DocumentoEditor.vue +3 -3
  44. package/src/component/shared/DocumentoPreview.vue +2 -2
  45. package/src/component/shared/EsconderMostrar.vue +26 -26
  46. package/src/component/shared/ExportarExcel.vue +14 -14
  47. package/src/component/shared/ExportarPDF.vue +10 -10
  48. package/src/component/shared/FiltroHorizontal.vue +19 -19
  49. package/src/component/shared/LegendaParametro.vue +17 -17
  50. package/src/component/shared/{Carregando.vue → Loading.vue} +11 -11
  51. package/src/component/shared/Messages.vue +83 -0
  52. package/src/component/shared/Paginacao.vue +10 -10
  53. package/src/component/shared/Progresso.vue +2 -2
  54. package/src/component/shared/Registro.vue +2 -2
  55. package/src/component/shared/ResumoTabela.vue +6 -6
  56. package/src/component/shared/SalvarCancelar.vue +26 -26
  57. package/src/component/shared/{Pesquisa.vue → Search.vue} +36 -36
  58. package/src/component/shared/Tabela.vue +49 -49
  59. package/src/component/shared/TabelaBotao.vue +13 -13
  60. package/src/component/shared/Toast.vue +7 -7
  61. package/src/component/shared/{FiltroVertical.vue → VerticalFilter.vue} +14 -14
  62. package/src/component/shared/construtor-consulta/AdicionaFiltro.vue +191 -0
  63. package/src/component/shared/construtor-consulta/Campo.vue +127 -0
  64. package/src/component/shared/construtor-consulta/ComponenteDinamico.vue +109 -0
  65. package/src/component/shared/construtor-consulta/ConstrutorConsulta.vue +70 -0
  66. package/src/component/shared/construtor-consulta/ConverteParaOdata.js +80 -0
  67. package/src/component/shared/construtor-consulta/EscolherFiltro.vue +96 -0
  68. package/src/component/shared/{query-builder → construtor-consulta}/Filtro.vue +11 -16
  69. package/src/component/shared/construtor-consulta/ListaComponenteDinamico.vue +41 -0
  70. package/src/component/shared/{query-builder → construtor-consulta}/Rodape.vue +9 -9
  71. package/src/component/shared/{query-builder → construtor-consulta}/Tags.vue +7 -7
  72. package/src/component/shared/{query-builder → construtor-consulta}/utilities.js +0 -0
  73. package/src/component/template/ModeloAdicionarModificarView.vue +11 -11
  74. package/src/component/template/ModeloDocumentoView.vue +79 -79
  75. package/src/component/template/ModeloLista.vue +66 -66
  76. package/src/component/template/ModeloRelatorioListaView.vue +71 -68
  77. package/src/component/template/ModeloRelatorioView.vue +218 -200
  78. package/src/component/template/ModeloSubView.vue +13 -13
  79. package/src/component/template/ModeloView.vue +17 -17
  80. package/src/component/template/Relatorio.js +1 -5
  81. package/src/component/template/RelatorioAdicionarModificar.vue +44 -44
  82. package/src/component/value-objects/DadosContato.vue +27 -27
  83. package/src/component/value-objects/DadosPessoa.js +1 -1
  84. package/src/component/value-objects/DadosPessoa.vue +52 -52
  85. package/src/component/value-objects/Endereco.js +1 -1
  86. package/src/component/value-objects/Endereco.vue +83 -83
  87. package/src/config/dicas.js +1 -1
  88. package/src/config/token.js +2 -2
  89. package/src/store/modules/generic.js +489 -0
  90. package/src/store/modules/report.js +246 -0
  91. package/src/store/modules/user.js +38 -0
  92. package/src/store/modules/validation.js +39 -0
  93. package/src/store/store.js +4 -4
  94. package/public/js/menu.js +0 -11
  95. package/public/styles/menu.css +0 -1399
  96. package/src/component/forms/ArquivoUpload.vue +0 -199
  97. package/src/component/forms/CheckboxMultiplo.vue +0 -63
  98. package/src/component/forms/Decimal.vue +0 -137
  99. package/src/component/forms/Escolher.vue +0 -324
  100. package/src/component/forms/EscolherEstatico.vue +0 -139
  101. package/src/component/forms/Numero.vue +0 -153
  102. package/src/component/forms/Opcoes.vue +0 -51
  103. package/src/component/forms/Senha.vue +0 -139
  104. package/src/component/forms/Texto.vue +0 -161
  105. package/src/component/forms/TextoArea.vue +0 -126
  106. package/src/component/forms/TextoEditor.vue +0 -123
  107. package/src/component/layout/Painel.vue +0 -142
  108. package/src/component/shared/Mensagem.vue +0 -86
  109. package/src/component/shared/query-builder/Campo.vue +0 -116
  110. package/src/component/shared/query-builder/ConverteParaOdata.js +0 -73
  111. package/src/component/shared/query-builder/QueryBuilder.vue +0 -164
  112. package/src/component/shared/query-builder/components/CustomSelect.vue +0 -115
  113. package/src/component/shared/query-builder/components/QueryBuilderChildren.vue +0 -46
  114. package/src/component/shared/query-builder/components/QueryBuilderGroup.vue +0 -151
  115. package/src/component/shared/query-builder/components/QueryBuilderRule.vue +0 -81
  116. package/src/component/shared/query-builder/layouts/Bootstrap/BootstrapGroup.vue +0 -120
  117. package/src/component/shared/query-builder/layouts/Bootstrap/BootstrapRule.vue +0 -171
  118. package/src/component/shared/query-builder/main.js +0 -81
  119. package/src/store/modulos/generic.js +0 -494
  120. package/src/store/modulos/relatorio.js +0 -201
  121. package/src/store/modulos/usuario.js +0 -38
  122. package/src/store/modulos/validation.js +0 -39
@@ -0,0 +1,246 @@
1
+ import ConvertToOdata from "@nixweb/nixloc-ui/src/component/shared/query-builder/ConvertToOdata.js";
2
+
3
+ export default {
4
+ namespaced: true,
5
+ state: {
6
+ report: {
7
+ fields: [],
8
+ rules: [],
9
+ },
10
+ query_builder: { rules: [] },
11
+ optionTable: {
12
+ initialValue: [],
13
+ options: []
14
+ },
15
+ optionsInitValue: [],
16
+ queryOData: {
17
+ fields: [],
18
+ totalization: [],
19
+ },
20
+ selectedField: [],
21
+ campoOrdenado: {},
22
+ query: [],
23
+ totalization: [],
24
+ tags: []
25
+ },
26
+ getters: {
27
+ headerTable: (state) => {
28
+ let list = [];
29
+ state.report.fields.forEach(function (field) {
30
+ if (field.show) list.push(field);
31
+ });
32
+ return list;
33
+ },
34
+ optionTable: (state) => {
35
+ // optionsInitValue é quando vem da query salva pelo usuário
36
+ state.optionTable = {
37
+ initialValue: [],
38
+ options: []
39
+ };
40
+
41
+ var hasInitValue = state.optionsInitValue.length;
42
+
43
+ state.report.fields.forEach(function (field) {
44
+ let option = { text: field.title, value: field.value };
45
+ state.optionTable.options.push(option);
46
+
47
+ if (field.show && hasInitValue == 0)
48
+ state.optionTable.initialValue.push(option);
49
+
50
+ if (hasInitValue > 0)
51
+ state.optionTable.initialValue = state.optionsInitValue;
52
+ });
53
+
54
+ return state.optionTable;
55
+ },
56
+ requiredRules: (state) => {
57
+ var filter = state.report.rules.filter(item => item.isRequired == true);
58
+ return filter;
59
+ },
60
+ regraObrigatoriaJaAdicionada: (state) => (rule) => {
61
+ return false;
62
+ },
63
+ selectedRules: (state) => {
64
+ let rules = [];
65
+ state.report.rules.forEach(function (rule) {
66
+ if (rule.value != null && rule.value != "" && rule.value != undefined)
67
+ rules.push(rule);
68
+ });
69
+ return rules;
70
+ },
71
+ hasSelectedField: (state) => (field, value) => {
72
+ var hasField = value.find((item) => {
73
+ if (field == value) return true;
74
+ });
75
+ return hasField;
76
+ },
77
+ oDataOrderBy: (state) => {
78
+ let orderBy = `$orderby=${state.campoOrdenado.id} ${state.campoOrdenado.ordenar}`;
79
+ return "";
80
+ },
81
+ oDataSelect: (state) => {
82
+ let query = "";
83
+ let indexQuery = 0;
84
+
85
+ state.queryOData.fields.forEach(function (rule) {
86
+ if (rule.show || rule.isRequired) {
87
+ if (indexQuery == 0) query += `$select=${rule.formatOdata}`;
88
+ if (indexQuery > 0) query += `,${rule.formatOdata}`;
89
+ indexQuery++;
90
+ }
91
+ });
92
+ return query;
93
+ },
94
+ oDataFilter: (state) => {
95
+ let query = "";
96
+ let totalization = "";
97
+ let indexQuery = 0;
98
+ let indexTotalization = 0;
99
+ var size = state.queryOData.fields.length;
100
+ var andOr = [];
101
+
102
+ state.queryOData.fields.forEach(function (rule) {
103
+ if (rule.type == "field") {
104
+ if (indexQuery == 0 && size > 0) query += `$filter=${rule.formatOdata}`;
105
+
106
+ if (indexQuery > 0 && size > 0) {
107
+ query += ` ${rule.andOr} ${rule.formatOdata}`;
108
+ andOr.push(rule.andOr);
109
+ }
110
+ indexQuery++;
111
+
112
+ /* Verifica no array se o último item é o "and", se sim será necessário inserir "(" depois do filter = e ")" antes do "and"
113
+ para que o oData consiga efetuar a query corretamente */
114
+ if (andOr[andOr.length - 1] == "and") {
115
+
116
+ let initIndex = query.indexOf("=");
117
+ let lastIndex = query.indexOf("and");
118
+
119
+ var query1 = [query.slice(0, initIndex + 1), "(", query.slice(initIndex)].join('').replace("=(=", "=(");
120
+ var query2 = [query1.slice(0, lastIndex + 1), ")", query1.slice(lastIndex)].join('');
121
+ query = query2;
122
+ }
123
+
124
+ } else {
125
+ if (indexTotalization == 0 && size > 0) totalization += `${rule.formatOdata}`;
126
+ if (indexTotalization > 0 && size > 0) totalization += `,${rule.formatOdata}`;
127
+ indexTotalization++;
128
+ }
129
+ });
130
+ return { query, totalization };
131
+ },
132
+ tags: (state) => {
133
+
134
+ state.tags = [];
135
+ let description = "";
136
+
137
+ state.queryOData.fields.forEach(function (rule) {
138
+ if (rule.fieldType == "dateTime") {
139
+ description = `${rule.value[0]} - ${rule.value[1]}`;
140
+ }
141
+
142
+ if (rule.fieldType == "select") {
143
+ description = rule.value.content;
144
+ }
145
+
146
+ if (rule.fieldType == "text" || rule.fieldType == "numeric") {
147
+ description = `${rule.operator} "${rule.value}"`;
148
+ }
149
+
150
+ if (rule.fieldType == "checkbox") {
151
+ rule.options.forEach(function (option) {
152
+ rule.value.forEach(function (value) {
153
+ if (option.value == value) {
154
+ description += `${option.title},`;
155
+ }
156
+ });
157
+ });
158
+ }
159
+
160
+ let tag = { id: rule.id, title: rule.title, value: description };
161
+ state.tags.push(tag);
162
+ });
163
+ return state.tags;
164
+ }
165
+ },
166
+ mutations: {
167
+ addFieldsReport: (state, fields) => {
168
+ state.report.fields = fields;
169
+ },
170
+ addRulesReport: (state, rules) => {
171
+ state.report.rules = rules;
172
+ },
173
+ addSelectedRules: (state, selectedRule) => {
174
+ state.query_builder.rules.push(selectedRule);
175
+ },
176
+ removeSelectedRule: (state, id) => {
177
+ var filter = state.query_builder.rules.filter((item) => {
178
+ return id != item.id;
179
+ })
180
+ state.query_builder.rules = filter;
181
+ },
182
+ updateSelectedField: (state, value) => {
183
+ state.selectedField = value;
184
+ },
185
+ updateOptionsInitValue: (state, value) => {
186
+ state.optionsInitValue = value;
187
+ },
188
+ atualizaFiltroSelecionado: (state, value) => {
189
+ state.filtroSelecionado = value;
190
+ },
191
+ atualizaCampoOrdenado: (state, value) => {
192
+ state.campoOrdenado = value;
193
+ },
194
+ removeFiltroSelecionado: (state, id) => {
195
+ var filter = state.filtroSelecionado.children.filter((x) => {
196
+ return x.query.id != id;
197
+ });
198
+ state.filtroSelecionado.children = filter;
199
+ },
200
+ convertRulesToOdata: (state, rules) => {
201
+ state.queryOData = {
202
+ fields: [],
203
+ totalization: [],
204
+ };
205
+
206
+ rules.forEach(function (rule) {
207
+
208
+ /* if (key.query.choices && key.query.type == "totalization") {
209
+ key.query.choices.forEach(function (value) {
210
+ let obj = {
211
+ title: value.como.title,
212
+ value: value.como.value,
213
+ classeCss: key.query.classeCss,
214
+ type: value.como.type,
215
+ };
216
+ state.totalization.push(obj);
217
+ });
218
+ }*/
219
+
220
+
221
+ if (rule.value != null && rule.value != "" && rule.value != undefined) {
222
+
223
+ let convertToOdata = new convertToOdata();
224
+ let formatOdata = convertToOdata.ConvertToOdata(rule);
225
+
226
+ let ruleOdata = {
227
+ id: rule.id,
228
+ title: rule.title,
229
+ type: rule.type,
230
+ fieldType: rule.fieldType,
231
+ options: rule.options,
232
+ operator: rule.operator,
233
+ show: rule.show,
234
+ isRequired: rule.isRequired,
235
+ formatOdata: formatOdata,
236
+ andOr: rule.andOr,
237
+ value: rule.value,
238
+ };
239
+
240
+ state.queryOData.fields.push(ruleOdata);
241
+ }
242
+ });
243
+ }
244
+
245
+ },
246
+ }
@@ -0,0 +1,38 @@
1
+ export default {
2
+ namespaced: true,
3
+ state: {
4
+ userLogged: {},
5
+ menu: {
6
+ items: []
7
+ },
8
+ },
9
+ getters: {
10
+ hasRule: (state) => (name) => {
11
+ var hasRule = state.userLogged.user.rules.find(obj => {
12
+ return obj.name === name
13
+ })
14
+ if (hasRule == undefined) return false;
15
+ return true;
16
+ },
17
+ hasModule: (state) => (name) => {
18
+ var hasRule = state.userLogged.user.modules.find(obj => {
19
+ return obj.name === name
20
+ })
21
+ if (hasRule == undefined) return false;
22
+ return true;
23
+ }
24
+ },
25
+ mutations: {
26
+ addUserLogged: (state, obj) => {
27
+ state.userLogged = obj;
28
+ },
29
+ addItemMenu: (state, items) => {
30
+ items.forEach(function (obj) {
31
+ state.menu.items.push(obj);
32
+ });
33
+ },
34
+ removeItemMenu: (state) => {
35
+ state.menu.items = [];
36
+ },
37
+ },
38
+ }
@@ -0,0 +1,39 @@
1
+ export default {
2
+ namespaced: true,
3
+ state: {
4
+ formDirty: false,
5
+ validations: [],
6
+ resetForm: {
7
+ name: undefined,
8
+ dateTime: undefined
9
+ }
10
+ },
11
+ getters: {
12
+ isFormValid: (state) => (formName) => {
13
+ var hasNotification = state.validations.find(obj => {
14
+ return obj.formName === formName
15
+ })
16
+ if (hasNotification != undefined) return false;
17
+ return true;
18
+ }
19
+ },
20
+ mutations: {
21
+ addValidation: (state, obj) => {
22
+ state.validations.push(obj);
23
+ },
24
+ removeValidation: (state, obj) => {
25
+ let filter = state.validations.filter(v => v.key != obj.key);
26
+ state.validations = filter;
27
+ },
28
+ resetValidation: (state, formName) => {
29
+ state.resetForm.dateTime = new Date();
30
+ state.resetForm.name = formName;
31
+ },
32
+ addFormDirty: (state, formDirty) => {
33
+ state.formDirty = formDirty;
34
+ },
35
+ removeFormDirty: (state) => {
36
+ state.formDirty = false;
37
+ }
38
+ },
39
+ }
@@ -1,14 +1,14 @@
1
1
  import Vue from 'vue';
2
2
  import Vuex from 'vuex';
3
3
 
4
- import usuario from './modulos/usuario'
5
- import generic from './modulos/generic'
6
- import validation from './modulos/validation'
4
+ import user from './modules/user'
5
+ import generic from './modules/generic'
6
+ import validation from './modules/validation'
7
7
 
8
8
  Vue.use(Vuex)
9
9
 
10
10
  export default new Vuex.Store({
11
11
  modules: {
12
- generic, validation, usuario
12
+ generic, validation, user
13
13
  }
14
14
  })
package/public/js/menu.js DELETED
@@ -1,11 +0,0 @@
1
- !function (e) { var t = {}; function n(s) { if (t[s]) return t[s].exports; var i = t[s] = { i: s, l: !1, exports: {} }; return e[s].call(i.exports, i, i.exports, n), i.l = !0, i.exports } n.m = e, n.c = t, n.d = function (e, t, s) { n.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: s }) }, n.r = function (e) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }) }, n.t = function (e, t) { if (1 & t && (e = n(e)), 8 & t) return e; if (4 & t && "object" == typeof e && e && e.__esModule) return e; var s = Object.create(null); if (n.r(s), Object.defineProperty(s, "default", { enumerable: !0, value: e }), 2 & t && "string" != typeof e) for (var i in e) n.d(s, i, function (t) { return e[t] }.bind(null, i)); return s }, n.n = function (e) { var t = e && e.__esModule ? function () { return e.default } : function () { return e }; return n.d(t, "a", t), t }, n.o = function (e, t) { return Object.prototype.hasOwnProperty.call(e, t) }, n.p = "", n(n.s = 0) }([function (e, t, n) {
2
- "use strict"; n.r(t); var s = { hooks: {}, extensions: [], navbar: { add: !0, title: "Menu", titleLink: "parent" }, slidingSubmenus: !0 }; var i = { classNames: { divider: "Divider", nolistview: "NoListview", nopanel: "NoPanel", panel: "Panel", selected: "Selected", vertical: "Vertical" }, language: null, panelNodetype: ["ul", "ol", "div"], screenReader: { closeSubmenu: "Close submenu", openSubmenu: "Open submenu", toggleSubmenu: "Toggle submenu" } }; const a = (e, t) => { "object" != o(e) && (e = {}), "object" != o(t) && (t = {}); for (let n in t) t.hasOwnProperty(n) && (void 0 === e[n] ? e[n] = t[n] : "object" == o(e[n]) && a(e[n], t[n])); return e }, o = e => ({}.toString.call(e).match(/\s([a-zA-Z]+)/)[1].toLowerCase()), r = () => "mm-" + l++; let l = 0; const m = e => "mm-" == e.slice(0, 3) ? e.slice(3) : e, c = {}, d = (e, t) => { void 0 === c[t] && (c[t] = {}), a(c[t], e) }; var h = { "Close submenu": "بستن زیرمنو", Menu: "منو", "Open submenu": "بازکردن زیرمنو", "Toggle submenu": "سوییچ زیرمنو" }, p = { "Close submenu": "Submenu sluiten", Menu: "Menu", "Open submenu": "Submenu openen", "Toggle submenu": "Submenu wisselen" }, u = { "Close submenu": "Fechar submenu", Menu: "Menu", "Open submenu": "Abrir submenu", "Toggle submenu": "Alternar submenu" }, f = { "Close submenu": "Закрыть подменю", Menu: "Меню", "Open submenu": "Открыть подменю", "Toggle submenu": "Переключить подменю" }, b = { "Close submenu": "Zatvoriť submenu", Menu: "Menu", "Open submenu": "Otvoriť submenu", "Toggle submenu": "Prepnúť submenu" }; const v = e => { const t = e.split("."), n = document.createElement(t.shift()); return n.classList.add(...t), n }, g = (e, t) => t.length ? [].slice.call(e.querySelectorAll(t)) : [], L = (e, t) => { const n = Array.prototype.slice.call(e.children); return t ? n.filter(e => e.matches(t)) : n }, _ = e => e.filter(e => !e.matches(".mm-hidden")), E = e => { let t = []; return _(e).forEach(e => { t.push(...L(e, "a.mm-listitem__text")) }), t.filter(e => !e.matches(".mm-btn--next")) }, y = (e, t, n) => { e.matches("." + t) && e.classList.add(n) }; let w = {}; const P = (e, t, n) => { "number" == typeof e && (e = "(min-width: " + e + "px)"), w[e] = w[e] || [], w[e].push({ yes: t, no: n }) }, S = (e, t) => { var n = t.matches ? "yes" : "no"; for (let t = 0; t < w[e].length; t++)w[e][t][n]() }; d({ "Close submenu": "Untermenü schließen", Menu: "Menü", "Open submenu": "Untermenü öffnen", "Toggle submenu": "Untermenü wechseln" }, "de"), d(h, "fa"), d(p, "nl"), d(u, "pt_br"), d(f, "ru"), d(b, "sk"); class x { constructor(e, t, n) { return this.opts = a(t, s), this.conf = a(n, i), this._api = ["i18n", "bind", "openPanel", "closePanel", "setSelected"], this.node = {}, this.hook = {}, this.node.menu = "string" == typeof e ? document.querySelector(e) : e, "function" == typeof this._deprecatedWarnings && this._deprecatedWarnings(), this.trigger("init:before"), this._initObservers(), this._initAddons(), this._initExtensions(), this._initHooks(), this._initAPI(), this._initMenu(), this._initPanels(), this._initOpened(), (() => { for (let e in w) { let t = window.matchMedia(e); S(e, t), t.onchange = n => { S(e, t) } } })(), this.trigger("init:after"), this } openPanel(e, t = !0, n = !0) { if (e) { if (e.matches(".mm-panel") || (e = e.closest(".mm-panel")), this.trigger("openPanel:before", [e, { animation: t, setfocus: n }]), e.parentElement.matches(".mm-listitem--vertical")) e.parentElement.classList.add("mm-listitem--opened"); else { const s = L(this.node.pnls, ".mm-panel--opened")[0]; e.matches(".mm-panel--parent") && s && s.classList.add("mm-panel--highest"); const i = ["mm-panel--opened", "mm-panel--parent"], a = []; t ? i.push("mm-panel--noanimation") : a.push("mm-panel--noanimation"), L(this.node.pnls, ".mm-panel").forEach(e => { e.classList.add(...a), e.classList.remove(...i), e !== s && e.classList.remove("mm-panel--highest") }), e.classList.add("mm-panel--opened"); let o = g(this.node.pnls, "#" + e.dataset.mmParent)[0]; for (; o;)o = o.closest(".mm-panel"), o.classList.add("mm-panel--parent"), o = g(this.node.pnls, "#" + o.dataset.mmParent)[0]; n && this.node.pnls.focus() } this.trigger("openPanel:after", [e, { animation: t, setfocus: n }]) } } closePanel(e, t = !0) { if (e) { if (this.trigger("closePanel:before", [e]), e.parentElement.matches(".mm-listitem--vertical")) e.parentElement.classList.remove("mm-listitem--opened"); else if (e.dataset.mmParent) { const n = g(this.node.pnls, "#" + e.dataset.mmParent)[0]; this.openPanel(n, t) } else { const n = L(this.node.pnls, ".mm-panel")[0]; e !== n && this.openPanel(n, t) } this.trigger("closePanel:after", [e]) } } togglePanel(e) { let t = "openPanel"; (e.parentElement.matches(".mm-listitem--opened") || e.matches(".mm-panel--opened")) && (t = "closePanel"), this[t](e) } setSelected(e) { this.trigger("setSelected:before", [e]), g(this.node.menu, ".mm-listitem--selected").forEach(e => { e.classList.remove("mm-listitem--selected") }), e.classList.add("mm-listitem--selected"), this.trigger("setSelected:after", [e]) } bind(e, t) { this.hook[e] = this.hook[e] || [], this.hook[e].push(t) } trigger(e, t) { if (this.hook[e]) for (var n = 0, s = this.hook[e].length; n < s; n++)this.hook[e][n].apply(this, t) } _initObservers() { this.panelObserver = new MutationObserver(e => { e.forEach(e => { e.addedNodes.forEach(e => { e.matches(this.conf.panelNodetype.join(", ")) && this._initListview(e) }) }) }), this.listviewObserver = new MutationObserver(e => { e.forEach(e => { e.addedNodes.forEach(e => { this._initListitem(e) }) }) }), this.listitemObserver = new MutationObserver(e => { e.forEach(e => { e.addedNodes.forEach(e => { console.log(e), (null == e ? void 0 : e.matches(this.conf.panelNodetype.join(", "))) && this._initSubPanel(e) }) }) }) } _initAPI() { const e = this; this.API = {}, this._api.forEach(t => { this.API[t] = function () { return e[t].apply(e, arguments) } }), this.node.menu.mmApi = this.API } _initHooks() { for (let e in this.opts.hooks) this.bind(e, this.opts.hooks[e]) } _initAddons() { this.trigger("initAddons:before"); for (let e in x.addons) x.addons[e].call(this); this.trigger("initAddons:after") } _initExtensions() { this.trigger("initExtensions:before"), "array" == o(this.opts.extensions) && (this.opts.extensions = { all: this.opts.extensions }), Object.keys(this.opts.extensions).forEach(e => { let t = this.opts.extensions[e].map(e => "mm-menu--" + e); t.length && P(e, () => { this.node.menu.classList.add(...t) }, () => { this.node.menu.classList.remove(...t) }) }), this.trigger("initExtensions:after") } _initMenu() { this.trigger("initMenu:before"), this.node.wrpr = this.node.wrpr || this.node.menu.parentElement, this.node.wrpr.classList.add("mm-wrapper"), this.node.menu.classList.add("mm-menu"), this.node.menu.id = this.node.menu.id || r(), this.node.menu.setAttribute("tabindex", "-1"); const e = L(this.node.menu).filter(e => e.matches(this.conf.panelNodetype.join(", "))); this.node.pnls = v("div.mm-panels"), this.node.menu.append(this.node.pnls), this.node.pnls.setAttribute("tabindex", "-1"), e.forEach(e => { this._initPanel(e) }), this.trigger("initMenu:after") } _initPanels() { this.trigger("initPanels:before"), this.node.menu.addEventListener("click", e => { var t, n; const s = (null === (n = null === (t = e.target) || void 0 === t ? void 0 : t.closest("a[href]")) || void 0 === n ? void 0 : n.getAttribute("href")) || ""; if ("#" === s.slice(0, 1)) try { const t = g(this.node.menu, s)[0]; t && (e.preventDefault(), this.togglePanel(t)) } catch (e) { } }, { capture: !0 }), this.trigger("initPanels:after") } _initPanel(e) { var t; if (!e.matches(".mm-panel") && (y(e, this.conf.classNames.panel, "mm-panel"), y(e, this.conf.classNames.nopanel, "mm-nopanel"), !e.matches(".mm-nopanel"))) { if (this.trigger("initPanel:before", [e]), e.id = e.id || r(), e.matches("ul, ol")) { const t = v("div"); t.id = e.id, e.removeAttribute("id"), [].slice.call(e.classList).filter(e => "mm-" === e.slice(0, 3)).forEach(n => { t.classList.add(n), e.classList.remove(n) }), Object.keys(e.dataset).filter(e => "mm" === e.slice(0, 2)).forEach(n => { t.dataset[n] = e.dataset[n], delete e.dataset[n] }), e.before(t), t.append(e), e = t } return e.classList.add("mm-panel"), (null === (t = e.parentElement) || void 0 === t ? void 0 : t.matches(".mm-listitem--vertical")) || this.node.pnls.append(e), this._initNavbar(e), L(e, "ul, ol").forEach(e => { this._initListview(e) }), this.panelObserver.observe(e, { childList: !0 }), this.trigger("initPanel:after", [e]), e } } _initNavbar(e) { if (L(e, ".mm-navbar").length) return; let t = null, n = null; if (e.dataset.mmParent) for (t = g(this.node.pnls, "#" + e.dataset.mmParent)[0], n = t.closest(".mm-panel"); n.closest(".mm-listitem--vertical");)n = n.parentElement.closest(".mm-panel"); if (null == t ? void 0 : t.matches(".mm-listitem--vertical")) return; this.trigger("initNavbar:before", [e]); const s = v("div.mm-navbar"); if (this.opts.navbar.add || s.classList.add("mm-hidden"), n) { const e = v("a.mm-btn.mm-btn--prev.mm-navbar__btn"); e.href = "#" + n.id, e.title = this.i18n(this.conf.screenReader.closeSubmenu), s.append(e) } let i = null; t ? i = L(t, ".mm-listitem__text")[0] : n && (i = g(n, 'a[href="#' + e.id + '"]')[0]); const a = v("a.mm-navbar__title"); switch (a.tabIndex = -1, a.ariaHidden = "true", this.opts.navbar.titleLink) { case "anchor": i && (a.href = i.getAttribute("href")); break; case "parent": n && (a.href = "#" + n.id) }const o = v("span"); var r; o.innerHTML = e.dataset.mmTitle || ((r = i) ? [].slice.call(r.childNodes).filter(e => e.nodeType === Node.TEXT_NODE).map(e => e.nodeValue.trim()).join(" ") : "") || this.i18n(this.opts.navbar.title) || this.i18n("Menu"), e.prepend(s), s.append(a), a.append(o), this.trigger("initNavbar:after", [e]) } _initListview(e) { ["htmlulistelement", "htmlolistelement"].includes(o(e)) && (e.matches(".mm-listview") || (y(e, this.conf.classNames.nolistview, "mm-nolistview"), e.matches(".mm-nolistview") || (this.trigger("initListview:before", [e]), e.classList.add("mm-listview"), L(e).forEach(e => { this._initListitem(e) }), this.listviewObserver.observe(e, { childList: !0 }), this.trigger("initListview:after", [e])))) } _initListitem(e) { ["htmllielement"].includes(o(e)) && (e.matches(".mm-listitem") || (y(e, this.conf.classNames.divider, "mm-divider"), e.matches(".mm-divider") || (this.trigger("initListitem:before", [e]), e.classList.add("mm-listitem"), y(e, this.conf.classNames.selected, "mm-listitem--selected"), L(e, "a, span").forEach(e => { e.classList.add("mm-listitem__text") }), L(e, this.conf.panelNodetype.join(", ")).forEach(e => { this._initSubPanel(e) }), this.listitemObserver.observe(e, { childList: !0 }), this.trigger("initListitem:after", [e])))) } _initSubPanel(e) { if (e.matches(".mm-panel")) return; const t = e.parentElement; (e.matches("." + this.conf.classNames.vertical) || !this.opts.slidingSubmenus) && t.classList.add("mm-listitem--vertical"), t.id = t.id || r(), e.id = e.id || r(), t.dataset.mmChild = e.id, e.dataset.mmParent = t.id; let n = L(t, ".mm-btn")[0]; n || (n = v("a.mm-btn.mm-btn--next.mm-listitem__btn"), L(t, "a, span").forEach(e => { e.matches("span") ? (n.classList.add("mm-listitem__text"), n.innerHTML = e.innerHTML, t.insertBefore(n, e.nextElementSibling), e.remove()) : t.insertBefore(n, e.nextElementSibling) }), n.title = this.i18n(this.conf.screenReader[t.matches(".mm-listitem--vertical") ? "toggleSubmenu" : "openSubmenu"])), n.href = "#" + e.id, this._initPanel(e) } _initOpened() { this.trigger("initOpened:before"); const e = g(this.node.pnls, ".mm-listitem--selected").pop(); let t = L(this.node.pnls, ".mm-panel")[0]; e && (this.setSelected(e), t = e.closest(".mm-panel")), this.openPanel(t, !1, !1), this.trigger("initOpened:after") } i18n(e) { return ((e, t) => "string" == typeof t && void 0 !== c[t] && c[t][e] || e)(e, this.conf.language) } static i18n(e = {}, t = "") { if (!e || !t) return c; d(e, t) } } x.addons = {}, x.node = {}, x.vars = {}; var M = { use: !0 }; var k = { clone: !1, menu: { insertMethod: "prepend", insertSelector: "body" }, page: { nodetype: "div", selector: null, noSelector: [] }, screenReader: { closeMenu: "Close menu", openMenu: "Open menu" } }; x.prototype.open = function () { if (!this.node.menu.matches(".mm-menu--opened")) { this.trigger("open:before"); this.node.wrpr.classList.add("mm-wrapper--opened"), this.node.menu.classList.add("mm-menu--opened"), this.node.wrpr.classList.add("mm-wrapper--opened"), this.node.menu.focus(), this.trigger("open:after") } }, x.prototype.close = function () { var e; if (!this.node.menu.matches(".mm-menu--opened")) return; this.trigger("close:before"), this.node.menu.classList.remove("mm-menu--opened"), this.node.wrpr.classList.remove("mm-wrapper--opened"); null === (e = document.querySelector(`[href="#${this.node.menu.id}"]`) || this.node.page || null) || void 0 === e || e.focus(), this.trigger("close:after") }, x.prototype.setPage = function (e) { var t = this.conf.offCanvas; if (!e) { let n = "string" == typeof t.page.selector ? g(document.body, t.page.selector) : L(document.body, t.page.nodetype); if (n = n.filter(e => !e.matches(".mm-menu, .mm-wrapper__blocker")), t.page.noSelector.length && (n = n.filter(e => !e.matches(t.page.noSelector.join(", ")))), n.length > 1) { let e = v("div"); n[0].before(e), n.forEach(t => { e.append(t) }), n = [e] } e = n[0] } this.trigger("setPage:before", [e]), e.setAttribute("tabindex", "-1"), e.classList.add("mm-page", "mm-slideout"), e.id = e.id || r(), x.node.blck.setAttribute("href", "#" + e.id), x.node.page = e, this.trigger("setPage:after", [e]) }; var T = { fix: !0 }; const C = "ontouchstart" in window || !!navigator.msMaxTouchPoints || !1; var O = { close: !1, open: !1 }; var N = { add: !1 }; var A = { use: !1, top: [], bottom: [], position: "left", type: "default" }; var j = { add: !1, blockPanel: !0, visible: 3 }; var H = { breadcrumbs: { separator: "/", removeFirst: !1 } }; function q() { this.opts.navbars = this.opts.navbars || [], this.conf.navbars = this.conf.navbars || {}, a(this.conf.navbars, H); let e = this.opts.navbars; if (void 0 !== e && (e instanceof Array || (e = [e]), e.length)) { var t = {}; e.forEach(e => { if (!(e = function (e) { return "boolean" == typeof e && e && (e = {}), "object" != typeof e && (e = {}), void 0 === e.content && (e.content = ["prev", "title"]), e.content instanceof Array || (e.content = [e.content]), void 0 === e.use && (e.use = !0), e }(e)).use) return; const n = v("div.mm-navbar"); let { position: s } = e; "bottom" !== s && (s = "top"), t[s] || (t[s] = v("div.mm-navbars.mm-navbars--" + s)), t[s].append(n); for (let t = 0, s = e.content.length; t < s; t++) { const s = e.content[t]; if ("string" == typeof s) { const e = q.navbarContents[s]; if ("function" == typeof e) e.call(this, n); else { let e = v("span"); e.innerHTML = s; const t = L(e); 1 == t.length && (e = t[0]), n.append(e) } } else n.append(s) } if ("string" == typeof e.type) { const t = q.navbarTypes[e.type]; "function" == typeof t && t.call(this, n) } let i = () => { n.classList.remove("mm-hidden") }, a = () => { n.classList.add("mm-hidden") }; "boolean" == typeof e.use ? this.bind("initMenu:after", i) : P(e.use, i, a) }), this.bind("initMenu:after", () => { for (let e in t) this.node.pnls["bottom" == e ? "after" : "before"](t[e]) }) } } q.navbarContents = { breadcrumbs: function (e) { var t = v("div.mm-navbar__breadcrumbs"); e.append(t), this.bind("initNavbar:after", e => { if (!e.querySelector(".mm-navbar__breadcrumbs")) { L(e, ".mm-navbar")[0].classList.add("mm-hidden"); for (var t = [], n = v("span.mm-navbar__breadcrumbs"), s = e, i = !0; s;) { if (!(s = s.closest(".mm-panel")).parentElement.matches(".mm-listitem--vertical")) { let e = g(s, ".mm-navbar__title span")[0]; if (e) { let n = e.textContent; n.length && t.unshift(i ? `<span>${n}</span>` : `<a \n href="#${s.id}" \n title="${this.i18n(this.conf.screenReader.openSubmenu)}"\n >${n}</a>`) } i = !1 } s = g(this.node.pnls, "#" + s.dataset.mmParent)[0] } this.conf.navbars.breadcrumbs.removeFirst && t.shift(), n.innerHTML = t.join('<span class="mm-separator">' + this.conf.navbars.breadcrumbs.separator + "</span>"), L(e, ".mm-navbar")[0].append(n) } }), this.bind("openPanel:before", e => { var n = e.querySelector(".mm-navbar__breadcrumbs"); t.innerHTML = n ? n.innerHTML : "" }) }, close: function (e) { const t = v("a.mm-btn.mm-btn--close.mm-navbar__btn"); t.title = this.i18n(this.conf.offCanvas.screenReader.closeMenu), e.append(t), this.bind("setPage:after", e => { t.href = "#" + e.id }) }, prev: function (e) { let t = v("a.mm-btn.mm-hidden"); e.append(t), this.bind("initNavbar:after", e => { L(e, ".mm-navbar")[0].classList.add("mm-hidden") }), this.bind("openPanel:before", e => { if (e.parentElement.matches(".mm-listitem--vertical")) return; t.classList.add("mm-hidden"); const n = e.querySelector(".mm-navbar__btn.mm-btn--prev"); if (n) { const e = n.cloneNode(!0); t.after(e), t.remove(), t = e } }) }, searchfield: function (e) { let t = v("div.mm-navbar__searchfield"); t.id = r(), e.append(t), this.opts.searchfield = this.opts.searchfield || {}, this.opts.searchfield.add = !0, this.opts.searchfield.addTo = "#" + t.id }, title: function (e) { let t = v("a.mm-navbar__title"); e.append(t), this.bind("openPanel:before", e => { if (e.parentElement.matches(".mm-listitem--vertical")) return; const n = e.querySelector(".mm-navbar__title"); if (n) { const e = n.cloneNode(!0); t.after(e), t.remove(), t = e } }) } }, q.navbarTypes = { tabs: function (e) { function t(n) { const s = L(e, `.mm-navbar__tab[href="#${n.id}"]`)[0]; if (s) s.classList.add("mm-navbar__tab--selected"), s.ariaExpanded = "true"; else { const e = g(this.node.pnls, "#" + n.dataset.mmParent)[0]; e && t.call(this, e.closest(".mm-panel")) } } e.classList.add("mm-navbar--tabs"), e.closest(".mm-navbars").classList.add("mm-navbars--has-tabs"), L(e, "a").forEach(e => { e.classList.add("mm-navbar__tab") }), this.bind("openPanel:before", n => { L(e, "a").forEach(e => { e.classList.remove("mm-navbar__tab--selected"), e.ariaExpanded = "false" }), t.call(this, n) }), this.bind("initPanels:after", () => { e.addEventListener("click", e => { var t, n, s; const i = null === (n = null === (t = e.target) || void 0 === t ? void 0 : t.closest(".mm-navbar__tab")) || void 0 === n ? void 0 : n.getAttribute("href"); try { null === (s = g(this.node.pnls, i + ".mm-panel")[0]) || void 0 === s || s.classList.add("mm-panel--noanimation") } catch (e) { } }, { capture: !0 }) }) } }; var I = { scroll: !1, update: !1 }; var R = { scrollOffset: 0, updateOffset: 50 }; var B = { add: !1, addTo: "panels", noResults: "No results found.", placeholder: "Search", searchIn: "panels", splash: "", title: "Search" }; var D = { cancel: !0, clear: !0, form: {}, input: {}, panel: {}, submit: !1 }, F = { cancel: "انصراف", "Cancel searching": "لغو جستجو", "Clear searchfield": "پاک کردن فیلد جستجو", "No results found.": "نتیجه‌ای یافت نشد.", Search: "جستجو" }, $ = { cancel: "annuleren", "Cancel searching": "Zoeken annuleren", "Clear searchfield": "Zoekveld leeg maken", "No results found.": "Geen resultaten gevonden.", Search: "Zoeken" }, Z = { cancel: "cancelar", "Cancel searching": "Cancelar pesquisa", "Clear searchfield": "Limpar campo de pesquisa", "No results found.": "Nenhum resultado encontrado.", Search: "Buscar" }, z = { cancel: "отменить", "Cancel searching": "Отменить поиск", "Clear searchfield": "Очистить поле поиска", "No results found.": "Ничего не найдено.", Search: "Найти" }, V = { cancel: "zrušiť", "Cancel searching": "Zrušiť vyhľadávanie", "Clear searchfield": "Vymazať pole vyhľadávania", "No results found.": "Neboli nájdené žiadne výsledky.", Search: "Vyhľadávanie" }; d({ cancel: "abbrechen", "Cancel searching": "Suche abbrechen", "Clear searchfield": "Suchfeld löschen", "No results found.": "Keine Ergebnisse gefunden.", Search: "Suche" }, "de"), d(F, "fa"), d($, "nl"), d(Z, "pt_br"), d(z, "ru"), d(V, "sk"); const U = function () { const e = this.opts.searchfield, t = this.conf.searchfield; let n = L(this.node.pnls, ".mm-panel--search")[0]; return n || (n = v("div.mm-panel--search"), ee(n, t.panel), e.title.length && (n.dataset.mmTitle = this.i18n(e.title)), n.append(v("ul")), this._initPanel(n), n) }, Y = function (e) { const t = this.opts.searchfield; if (e.matches(t.addTo)) { const t = e.matches(".mm-panel--search"); if (!g(e, ".mm-searchfield").length) { const n = K.call(this, t); t && n.classList.add("mm-searchfield--cancelable"), e.prepend(n), W.call(this, n) } } if (t.splash.length && e.matches(".mm-panel--search") && !g(e, ".mm-panel__splash").length) { const n = v("div.mm-panel__splash"); n.innerHTML = t.splash, e.append(n) } if (t.noResults.length && !g(e, ".mm-panel__noresults").length) { const n = v("div.mm-panel__noresults"); n.innerHTML = this.i18n(t.noResults), e.append(n) } }, K = function (e = !1) { const t = this.opts.searchfield, n = this.conf.searchfield, s = v("form.mm-searchfield"); ee(s, n.form); const i = v("div.mm-searchfield__input"); s.append(i); const a = v("input"); if (i.append(a), a.type = "text", a.autocomplete = "off", a.placeholder = this.i18n(t.placeholder), a.setAttribute("aria-label", this.i18n(t.placeholder)), ee(a, n.input), n.submit) { const e = v("button.mm-btnreset.mm-btn.mm-btn--next.mm-searchfield__btn"); e.type = "submit", i.append(e) } else if (n.clear) { const e = v("button.mm-btnreset.mm-btn.mm-btn--close.mm-searchfield__btn"); e.type = "reset", e.title = this.i18n("Clear searchfield"), i.append(e), s.addEventListener("reset", () => { window.requestAnimationFrame(() => { a.dispatchEvent(new Event("input")) }) }) } if (n.cancel && e) { const e = v("a.mm-searchfield__cancel"); e.href = "#", e.title = this.i18n("Cancel searching"), e.textContent = this.i18n("cancel"), s.append(e), e.addEventListener("click", () => { this.closePanel(L(this.node.pnls, ".mm-panel--search")[0], !1) }) } return s }, W = function (e) { const t = this.opts.searchfield, n = e.closest(".mm-panel") || g(this.node.pnls, ".mm-panel--search")[0], s = g(e, "input")[0]; let i = n.matches(".mm-panel--search") ? g(this.node.pnls, t.searchIn) : [n]; i = i.filter(e => !e.matches(".mm-panel--search")); const a = () => { const t = s.value.toLowerCase().trim(), a = []; if (i.forEach(e => { e.scrollTop = 0, a.push(...g(e, ".mm-listitem")) }), t.length) { this.trigger("search:before"), e.classList.add("mm-searchfield--searching"), n.classList.add("mm-panel--searching"), a.forEach(e => { const n = L(e, ".mm-listitem__text")[0]; var s; (!n || (s = n, Array.prototype.slice.call(s.childNodes).filter(e => 3 == e.nodeType).map(e => e.textContent).join(" ")).toLowerCase().indexOf(t) > -1) && (e.dataset.mmSearchresult = t) }); let s = 0; s = n.matches(".mm-panel--search") ? G(n, t, i) : J(t, i), n.classList[0 == s ? "add" : "remove"]("mm-panel--noresults"), this.trigger("search:after") } else this.trigger("clear:before"), e.classList.remove("mm-searchfield--searching"), n.classList.remove("mm-panel--searching", "mm-panel--noresults"), n.matches(".mm-panel--search") ? X(n) : Q(i), this.trigger("clear:after") }; s.addEventListener("input", a), a() }, G = (e, t, n) => { const s = g(e, ".mm-listview")[0]; s.innerHTML = ""; let i = 0; return n.forEach(e => { const n = g(e, `[data-mm-searchresult="${t}"]`); if (i += n.length, n.length) { const t = g(e, ".mm-navbar__title")[0]; if (t) { const e = v("li.mm-divider"); e.innerHTML = t.innerHTML, s.append(e) } n.forEach(e => { s.append(e.cloneNode(!0)) }) } }), i }, X = e => { g(e, ".mm-listview")[0].innerHTML = "" }, J = (e, t) => { let n = 0; return t.forEach(t => { const s = g(t, `[data-mm-searchresult="${e}"]`); n += s.length, s.length && s.forEach(t => { const n = ((e, t) => { let n = [], s = e.previousElementSibling; for (; s;)t && !s.matches(t) || n.push(s), s = s.previousElementSibling; return n })(t, ".mm-divider")[0]; n && (n.dataset.mmSearchresult = e) }), g(t, ".mm-listitem, .mm-divider").forEach(t => { t.classList[t.dataset.mmSearchresult === e ? "remove" : "add"]("mm-hidden") }) }), n }, Q = e => { e.forEach(e => { g(e, ".mm-listitem, .mm-divider").forEach(e => { e.classList.remove("mm-hidden") }) }) }, ee = (e, t) => { t && Object.keys(t).forEach(n => { e[n] = t[n] }) }; var te = { add: !1, addTo: "panels" }; var ne = { current: !0, hover: !1, parent: !1 }; var se = { collapsed: { use: !1, blockMenu: !0 }, expanded: { use: !1, initial: "open" } };
3
- /*!
4
- * mmenu.js
5
- * mmenujs.com
6
- *
7
- * Copyright (c) Fred Heusschen
8
- * frebsite.nl
9
- */
10
- x.addons = { offcanvas: function () { this.opts.offCanvas = this.opts.offCanvas || {}, this.conf.offCanvas = this.conf.offCanvas || {}; const e = a(this.opts.offCanvas, M), t = a(this.conf.offCanvas, k); e.use && (this._api.push("open", "close", "setPage"), x.node.blck || this.bind("initMenu:before", () => { const e = v("a.mm-wrapper__blocker.mm-slideout"); e.id = r(), e.title = this.i18n(t.screenReader.closeMenu), e.setAttribute("tabindex", "-1"), document.querySelector(t.menu.insertSelector).append(e), x.node.blck = e }), this.bind("initMenu:before", () => { t.clone && (this.node.menu = this.node.menu.cloneNode(!0), this.node.menu.id && (this.node.menu.id = "mm-" + this.node.menu.id), g(this.node.menu, "[id]").forEach(e => { e.id = "mm-" + e.id })), this.node.wrpr = document.querySelector(t.menu.insertSelector), document.querySelector(t.menu.insertSelector)[t.menu.insertMethod](this.node.menu) }), this.bind("initMenu:after", () => { this.setPage(x.node.page), this.node.menu.classList.add("mm-menu--offcanvas"); let e = window.location.hash; if (e) { let t = m(this.node.menu.id); t && t == e.slice(1) && setTimeout(() => { this.open() }, 1e3) } }), document.addEventListener("click", e => { var t; switch (null === (t = e.target.closest("a")) || void 0 === t ? void 0 : t.getAttribute("href")) { case "#" + m(this.node.menu.id): e.preventDefault(), this.open(); break; case "#" + m(x.node.page.id): e.preventDefault(), this.close() } }), document.addEventListener("keyup", e => { "Escape" == e.key && this.close() }), document.addEventListener("keyup", e => { var t; "Tab" == e.key && this.node.menu.matches(".mm-menu--opened") && !(null === (t = document.activeElement) || void 0 === t ? void 0 : t.closest("#" + this.node.menu.id)) && (console.log(document.activeElement), this.close()) })) }, scrollBugFix: function () { if (!C || !this.opts.offCanvas.use) return; this.opts.scrollBugFix = this.opts.scrollBugFix || {}; if (!a(this.opts.scrollBugFix, T).fix) return; const e = (e => { let t = "", n = null; return e.addEventListener("touchstart", e => { 1 === e.touches.length && (t = "", n = e.touches[0].pageY) }), e.addEventListener("touchend", e => { 0 === e.touches.length && (t = "", n = null) }), e.addEventListener("touchmove", e => { if (t = "", n && 1 === e.touches.length) { const s = e.changedTouches[0].pageY; s > n ? t = "down" : s < n && (t = "up"), n = s } }), { get: () => t } })(this.node.menu); this.node.menu.addEventListener("scroll", e => { e.preventDefault(), e.stopPropagation() }, { passive: !1 }), this.node.menu.addEventListener("touchmove", t => { let n = t.target.closest(".mm-panel, .mm-iconbar__top, .mm-iconbar__bottom"); n && n.closest(".mm-listitem--vertical") && (n = ((e, t) => { let n = [], s = e.parentElement; for (; s;)n.push(s), s = s.parentElement; return t ? n.filter(e => e.matches(t)) : n })(n, ".mm-panel").pop()), n ? (n.scrollHeight === n.offsetHeight || 0 == n.scrollTop && "down" == e.get() || n.scrollHeight == n.scrollTop + n.offsetHeight && "up" == e.get()) && t.stopPropagation() : t.stopPropagation() }, { passive: !1 }), this.bind("open:after", () => { var e = L(this.node.pnls, ".mm-panel--opened")[0]; e && (e.scrollTop = 0) }), window.addEventListener("orientationchange", e => { var t = L(this.node.pnls, ".mm-panel--opened")[0]; t && (t.scrollTop = 0, t.style["-webkit-overflow-scrolling"] = "auto", t.style["-webkit-overflow-scrolling"] = "touch") }) }, backButton: function () { if (this.opts.backButton = this.opts.backButton || {}, !this.opts.offCanvas.use) return; const e = a(this.opts.backButton, O), t = "#" + this.node.menu.id; if (e.close) { var n = []; const e = () => { n = [t], L(this.node.pnls, ".mm-panel--opened, .mm-panel--parent").forEach(e => { n.push("#" + e.id) }) }; this.bind("open:after", () => { history.pushState(null, document.title, t) }), this.bind("open:after", e), this.bind("openPanel:after", e), this.bind("close:after", () => { n = [], history.back(), history.pushState(null, document.title, location.pathname + location.search) }), window.addEventListener("popstate", e => { if (this.node.menu.matches(".mm-menu--opened") && n.length) { var s = (n = n.slice(0, -1))[n.length - 1]; s == t ? this.close() : (this.openPanel(this.node.menu.querySelector(s)), history.pushState(null, document.title, t)) } }) } e.open && window.addEventListener("popstate", e => { this.node.menu.matches(".mm-menu--opened") || location.hash != t || this.open() }) }, counters: function () { this.opts.counters = this.opts.counters || {}; if (!a(this.opts.counters, N).add) return; const e = e => { const t = this.node.pnls.querySelector("#" + e.dataset.mmParent); if (!t) return; const n = t.querySelector(".mm-counter"); if (!n) return; const s = []; L(e, ".mm-listview").forEach(e => { s.push(...L(e)) }), n.innerHTML = _(s).length.toString() }, t = new MutationObserver(t => { t.forEach(t => { "class" == t.attributeName && e(t.target.closest(".mm-panel")) }) }); this.bind("initListview:after", t => { const n = t.closest(".mm-panel"), s = this.node.pnls.querySelector("#" + n.dataset.mmParent); if (s) { if (!g(s, ".mm-counter").length) { const e = L(s, ".mm-btn")[0]; null == e || e.prepend(v("span.mm-counter")) } e(n) } }), this.bind("initListitem:after", e => { const n = e.closest(".mm-panel"); if (!n) return; this.node.pnls.querySelector("#" + n.dataset.mmParent) && t.observe(e, { attributes: !0 }) }) }, iconbar: function () { this.opts.iconbar = this.opts.iconbar || {}; const e = a(this.opts.iconbar, A); if (!e.use) return; let t; if (["top", "bottom"].forEach((n, s) => { let i = e[n]; "array" != o(i) && (i = [i]); const a = v("div.mm-iconbar__" + n); for (let e = 0, t = i.length; e < t; e++)"string" == typeof i[e] ? a.innerHTML += i[e] : a.append(i[e]); a.children.length && (t || (t = v("div.mm-iconbar")), t.append(a)) }), t) { this.bind("initMenu:after", () => { this.node.menu.prepend(t) }); let n = "mm-menu--iconbar-" + e.position, s = () => { this.node.menu.classList.add(n) }, i = () => { this.node.menu.classList.remove(n) }; if ("boolean" == typeof e.use ? this.bind("initMenu:after", s) : P(e.use, s, i), "tabs" == e.type) { t.classList.add("mm-iconbar--tabs"), t.addEventListener("click", e => { const t = e.target.closest(".mm-iconbar__tab"); if (t) if (t.matches(".mm-iconbar__tab--selected")) e.stopImmediatePropagation(); else try { const n = g(this.node.menu, t.getAttribute("href") + ".mm-panel")[0]; n && (e.preventDefault(), e.stopImmediatePropagation(), this.openPanel(n, !1)) } catch (e) { } }); const e = n => { g(t, "a").forEach(e => { e.classList.remove("mm-iconbar__tab--selected") }); const s = g(t, '[href="#' + n.id + '"]')[0]; if (s) s.classList.add("mm-iconbar__tab--selected"); else { const t = g(this.node.pnls, "#" + n.dataset.mmParent)[0]; t && e(t.closest(".mm-panel")) } }; this.bind("openPanel:before", e) } } }, iconPanels: function () { this.opts.iconPanels = this.opts.iconPanels || {}; const e = a(this.opts.iconPanels, j); let t = !1; if ("first" == e.visible && (t = !0, e.visible = 1), e.visible = Math.min(3, Math.max(1, e.visible)), e.visible++, e.add) { if (this.bind("initMenu:after", () => { this.node.menu.classList.add("mm-menu--iconpanel") }), this.bind("initPanel:after", e => { e.tabIndex = -1 }), this.bind("initPanels:after", () => { document.addEventListener("keyup", e => { var t; if ("Tab" === e.key && (null === (t = document.activeElement) || void 0 === t ? void 0 : t.closest(".mm-menu")) === this.node.menu) { const t = document.activeElement.closest(".mm-panel"); !document.activeElement.matches(".mm-panel__blocker") && (null == t ? void 0 : t.matches(".mm-panel--parent")) && (e.shiftKey ? L(t, ".mm-panel__blocker")[0].focus() : L(this.node.pnls, ".mm-panel--opened")[0].focus()) } }) }), t) this.bind("initMenu:after", () => { var e; null === (e = L(this.node.pnls, ".mm-panel")[0]) || void 0 === e || e.classList.add("mm-panel--iconpanel-first") }); else { const t = ["mm-panel--iconpanel-0", "mm-panel--iconpanel-1", "mm-panel--iconpanel-2", "mm-panel--iconpanel-3"]; this.bind("openPanel:after", n => { if (n.parentElement.matches(".mm-listitem--vertical")) return; let s = L(this.node.pnls, ".mm-panel"); s = s.filter(e => e.matches(".mm-panel--parent")), s.push(n), s = s.slice(-e.visible), s.forEach((e, n) => { e.classList.remove(...t), e.classList.add("mm-panel--iconpanel-" + n) }) }) } this.bind("initPanel:after", t => { if (e.blockPanel && !t.parentElement.matches(".mm-listitem--vertical") && !L(t, ".mm-panel__blocker")[0]) { const e = v("a.mm-panel__blocker"); e.href = "#" + t.closest(".mm-panel").id, e.title = this.i18n(this.conf.screenReader.closeSubmenu), t.prepend(e) } }) } }, navbars: q, pageScroll: function () { this.opts.pageScroll = this.opts.pageScroll || {}, this.conf.pageScroll = this.conf.pageScroll || {}; const e = a(this.opts.pageScroll, I), t = a(this.conf.pageScroll, R); var n; function s() { n && window.scrollTo({ top: n.getBoundingClientRect().top + document.scrollingElement.scrollTop - t.scrollOffset, behavior: "smooth" }), n = null } function i(e) { try { if ("#" == e.slice(0, 1)) return g(x.node.page, e)[0] } catch (e) { } return null } if (this.opts.offCanvas.use && e.scroll && (this.bind("close:after", () => { s() }), this.node.menu.addEventListener("click", e => { var t, a; const o = (null === (a = null === (t = e.target) || void 0 === t ? void 0 : t.closest("a[href]")) || void 0 === a ? void 0 : a.getAttribute("href")) || ""; (n = i(o)) && (e.preventDefault(), this.node.menu.matches(".mm-menu--sidebar-expanded") && this.node.wrpr.matches(".mm-wrapper--sidebar-expanded") ? s() : this.close()) })), e.update) { let e = []; this.bind("initListview:after", t => { const n = L(t, ".mm-listitem"); E(n).forEach(t => { const n = i(t.getAttribute("href")); n && e.unshift(n) }) }); let n = -1; window.addEventListener("scroll", s => { const i = window.scrollY; for (var a = 0; a < e.length; a++)if (e[a].offsetTop < i + t.updateOffset) { if (n !== a) { n = a; let t = L(this.node.pnls, ".mm-panel--opened")[0], s = g(t, ".mm-listitem"), i = E(s); i = i.filter(t => t.matches('[href="#' + e[a].id + '"]')), i.length && this.setSelected(i[0].parentElement) } break } }, { passive: !0 }) } }, searchfield: function () { this.opts.searchfield = this.opts.searchfield || {}, this.conf.searchfield = this.conf.searchfield || {}; const e = a(this.opts.searchfield, B); a(this.opts.searchfield, D); if (e.add) { switch (e.addTo) { case "panels": e.addTo = ".mm-panel"; break; case "searchpanel": e.addTo = ".mm-panel--search" }switch (e.searchIn) { case "panels": e.searchIn = ".mm-panel" }this.bind("initPanel:after", t => { t.matches(e.addTo) && !t.closest(".mm-listitem--vertical") && Y.call(this, t) }), this.bind("initMenu:after", () => { const t = U.call(this); Y.call(this, t), g(this.node.menu, e.addTo).forEach(n => { if (!n.matches(".mm-panel")) { const s = K.call(this, !0); n.append(s); const i = g(s, "input")[0]; e.splash.length ? (i.addEventListener("focusin", () => { this.openPanel(t, !1, !1) }), this.bind("openPanel:after", e => { e.matches(".mm-panel--search") ? s.classList.add("mm-searchfield--cancelable") : s.classList.remove("mm-searchfield--cancelable") })) : (this.bind("search:after", () => { this.openPanel(t, !1, !1) }), i.addEventListener("focusout", () => { i.value.length || this.closePanel(t, !1) })), W.call(this, s) } }) }), this.bind("close:before", () => { g(this.node.menu, ".mm-searchfield input").forEach(e => { e.blur() }) }) } }, sectionIndexer: function () { this.opts.sectionIndexer = this.opts.sectionIndexer || {}; a(this.opts.sectionIndexer, te).add && this.bind("initPanels:after", () => { if (!this.node.indx) { let e = ""; "abcdefghijklmnopqrstuvwxyz".split("").forEach(t => { e += '<a href="#">' + t + "</a>" }); let t = v("div.mm-sectionindexer"); t.innerHTML = e, this.node.pnls.prepend(t), this.node.indx = t, this.node.indx.addEventListener("click", e => { e.target.matches("a") && e.preventDefault() }); let n = e => { if (!e.target.matches("a")) return; const t = e.target.textContent, n = L(this.node.pnls, ".mm-panel--opened")[0]; let s = -1, i = n.scrollTop; n.scrollTop = 0, g(n, ".mm-divider").filter(e => !e.matches(".mm-hidden")).forEach(e => { s < 0 && t == e.textContent.trim().slice(0, 1).toLowerCase() && (s = e.offsetTop) }), n.scrollTop = s > -1 ? s : i }; C ? (this.node.indx.addEventListener("touchstart", n), this.node.indx.addEventListener("touchmove", n)) : this.node.indx.addEventListener("mouseover", n) } this.bind("openPanel:before", e => { const t = g(e, ".mm-divider").filter(e => !e.matches(".mm-hidden")).length; this.node.indx.classList[t ? "add" : "remove"]("mm-sectionindexer--active") }) }) }, setSelected: function () { this.opts.setSelected = this.opts.setSelected || {}; const e = a(this.opts.setSelected, ne); if ("detect" == e.current) { const e = t => { t = t.split("?")[0].split("#")[0]; const n = this.node.menu.querySelector('a[href="' + t + '"], a[href="' + t + '/"]'); if (n) this.setSelected(n.parentElement); else { const n = t.split("/").slice(0, -1); n.length && e(n.join("/")) } }; this.bind("initMenu:after", () => { e.call(this, window.location.href) }) } else e.current || this.bind("initListview:after", e => { L(e, ".mm-listitem--selected").forEach(e => { e.classList.remove("mm-listitem--selected") }) }); e.hover && this.bind("initMenu:after", () => { this.node.menu.classList.add("mm-menu--selected-hover") }), e.parent && (this.bind("openPanel:after", e => { g(this.node.pnls, ".mm-listitem--selected-parent").forEach(e => { e.classList.remove("mm-listitem--selected-parent") }); let t = e; for (; t;) { let e = g(this.node.pnls, "#" + t.dataset.mmParent)[0]; t = null == e ? void 0 : e.closest(".mm-panel"), e && !e.matches(".mm-listitem--vertical") && e.classList.add("mm-listitem--selected-parent") } }), this.bind("initMenu:after", () => { this.node.menu.classList.add("mm-menu--selected-parent") })) }, sidebar: function () { if (!this.opts.offCanvas.use) return; this.opts.sidebar = this.opts.sidebar || {}; const e = a(this.opts.sidebar, se); if (e.collapsed.use) { this.bind("initMenu:after", () => { if (this.node.menu.classList.add("mm-menu--sidebar-collapsed"), e.collapsed.blockMenu && !L(this.node.menu, ".mm-menu__blocker")[0]) { const e = v("a.mm-menu__blocker"); e.setAttribute("href", "#" + this.node.menu.id), this.node.menu.prepend(e), e.title = this.i18n(this.conf.screenReader.openMenu) } }); let t = () => { this.node.wrpr.classList.add("mm-wrapper--sidebar-collapsed") }, n = () => { this.node.wrpr.classList.remove("mm-wrapper--sidebar-collapsed") }; "boolean" == typeof e.collapsed.use ? this.bind("initMenu:after", t) : P(e.collapsed.use, t, n) } if (e.expanded.use) { this.bind("initMenu:after", () => { this.node.menu.classList.add("mm-menu--sidebar-expanded") }); let t = !1, n = () => { t = !0, this.node.wrpr.classList.add("mm-wrapper--sidebar-expanded"), this.open() }, s = () => { t = !1, this.node.wrpr.classList.remove("mm-wrapper--sidebar-expanded"), this.close() }; "boolean" == typeof e.expanded.use ? this.bind("initMenu:after", n) : P(e.expanded.use, n, s), this.bind("close:after", () => { t && window.sessionStorage.setItem("mmenuExpandedState", "closed") }), this.bind("open:after", () => { t && window.sessionStorage.setItem("mmenuExpandedState", "open") }); let i = e.expanded.initial; const a = window.sessionStorage.getItem("mmenuExpandedState"); switch (a) { case "open": case "closed": i = a }"closed" == i && this.bind("init:after", () => { this.close() }) } } }; t.default = x; window && (window.Mmenu = x)
11
- }]);