@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.
- package/docs/src/component/template/ModeloRelatorioView.drawio +160 -0
- package/docs/src/store/modulos/relatorio.drawio +37 -0
- package/package.json +77 -75
- package/public/index.html +2 -4
- package/public/styles/app.css +1 -2
- package/src/component/forms/{Botao.vue → Button.vue} +53 -57
- package/src/component/forms/CheckboxGroup.vue +63 -0
- package/src/component/forms/{CheckboxUnico.vue → CheckboxSimple.vue} +6 -6
- package/src/component/forms/{Cor.vue → Color.vue} +9 -9
- package/src/component/forms/DateTime.vue +53 -53
- package/src/component/forms/{BotaoDropdown.vue → Dropdown.vue} +50 -50
- package/src/component/forms/EditorHtml.vue +123 -0
- package/src/component/forms/FileUpload.vue +189 -0
- package/src/component/forms/InputDecimal.vue +137 -0
- package/src/component/forms/InputNumber.vue +149 -0
- package/src/component/forms/InputPassword.vue +135 -0
- package/src/component/forms/InputText.vue +157 -0
- package/src/component/forms/Modal.vue +15 -15
- package/src/component/forms/RadioGroup.vue +50 -0
- package/src/component/forms/Select.vue +337 -0
- package/src/component/forms/SelectStatic.vue +120 -0
- package/src/component/forms/TextArea.vue +126 -0
- package/src/component/forms/Toggle.vue +13 -13
- package/src/component/layout/{Conta.vue → Account.vue} +28 -28
- package/src/component/layout/{Alerta.vue → Alert.vue} +22 -22
- package/src/component/layout/Badge.vue +23 -23
- package/src/component/layout/{BarraFixa.vue → FixedBar.vue} +16 -16
- package/src/component/layout/{CarregandoTelaInteira.vue → LoadingFullPage.vue} +3 -3
- package/src/component/layout/Menu.vue +66 -66
- package/src/component/layout/{Moldura.vue → Molded.vue} +4 -4
- package/src/component/layout/Panel.vue +142 -0
- package/src/component/layout/Popover.vue +1 -1
- package/src/component/layout/{BarraRolagem.vue → Scrollbar.vue} +9 -11
- package/src/component/layout/Tag.vue +9 -9
- package/src/component/layout/Topo.vue +1 -1
- package/src/component/layout/Wizard.vue +3 -3
- package/src/component/shared/BotaoCarregarMais.vue +9 -9
- package/src/component/shared/BotaoConsulta.vue +9 -9
- package/src/component/shared/CabecalhoImpressao.vue +6 -6
- package/src/component/shared/CodigoEditor.vue +16 -16
- package/src/component/shared/Confirmacao.vue +28 -28
- package/src/component/shared/Dica.vue +10 -10
- package/src/component/shared/DocumentoEditor.vue +3 -3
- package/src/component/shared/DocumentoPreview.vue +2 -2
- package/src/component/shared/EsconderMostrar.vue +26 -26
- package/src/component/shared/ExportarExcel.vue +14 -14
- package/src/component/shared/ExportarPDF.vue +10 -10
- package/src/component/shared/FiltroHorizontal.vue +19 -19
- package/src/component/shared/LegendaParametro.vue +17 -17
- package/src/component/shared/{Carregando.vue → Loading.vue} +11 -11
- package/src/component/shared/Messages.vue +83 -0
- package/src/component/shared/Paginacao.vue +10 -10
- package/src/component/shared/Progresso.vue +2 -2
- package/src/component/shared/Registro.vue +2 -2
- package/src/component/shared/ResumoTabela.vue +6 -6
- package/src/component/shared/SalvarCancelar.vue +26 -26
- package/src/component/shared/{Pesquisa.vue → Search.vue} +36 -36
- package/src/component/shared/Tabela.vue +49 -49
- package/src/component/shared/TabelaBotao.vue +13 -13
- package/src/component/shared/Toast.vue +7 -7
- package/src/component/shared/{FiltroVertical.vue → VerticalFilter.vue} +14 -14
- package/src/component/shared/construtor-consulta/AdicionaFiltro.vue +191 -0
- package/src/component/shared/construtor-consulta/Campo.vue +127 -0
- package/src/component/shared/construtor-consulta/ComponenteDinamico.vue +109 -0
- package/src/component/shared/construtor-consulta/ConstrutorConsulta.vue +70 -0
- package/src/component/shared/construtor-consulta/ConverteParaOdata.js +80 -0
- package/src/component/shared/construtor-consulta/EscolherFiltro.vue +96 -0
- package/src/component/shared/{query-builder → construtor-consulta}/Filtro.vue +11 -16
- package/src/component/shared/construtor-consulta/ListaComponenteDinamico.vue +41 -0
- package/src/component/shared/{query-builder → construtor-consulta}/Rodape.vue +9 -9
- package/src/component/shared/{query-builder → construtor-consulta}/Tags.vue +7 -7
- package/src/component/shared/{query-builder → construtor-consulta}/utilities.js +0 -0
- package/src/component/template/ModeloAdicionarModificarView.vue +11 -11
- package/src/component/template/ModeloDocumentoView.vue +79 -79
- package/src/component/template/ModeloLista.vue +66 -66
- package/src/component/template/ModeloRelatorioListaView.vue +71 -68
- package/src/component/template/ModeloRelatorioView.vue +218 -200
- package/src/component/template/ModeloSubView.vue +13 -13
- package/src/component/template/ModeloView.vue +17 -17
- package/src/component/template/Relatorio.js +1 -5
- package/src/component/template/RelatorioAdicionarModificar.vue +44 -44
- package/src/component/value-objects/DadosContato.vue +27 -27
- package/src/component/value-objects/DadosPessoa.js +1 -1
- package/src/component/value-objects/DadosPessoa.vue +52 -52
- package/src/component/value-objects/Endereco.js +1 -1
- package/src/component/value-objects/Endereco.vue +83 -83
- package/src/config/dicas.js +1 -1
- package/src/config/token.js +2 -2
- package/src/store/modules/generic.js +489 -0
- package/src/store/modules/report.js +246 -0
- package/src/store/modules/user.js +38 -0
- package/src/store/modules/validation.js +39 -0
- package/src/store/store.js +4 -4
- package/public/js/menu.js +0 -11
- package/public/styles/menu.css +0 -1399
- package/src/component/forms/ArquivoUpload.vue +0 -199
- package/src/component/forms/CheckboxMultiplo.vue +0 -63
- package/src/component/forms/Decimal.vue +0 -137
- package/src/component/forms/Escolher.vue +0 -324
- package/src/component/forms/EscolherEstatico.vue +0 -139
- package/src/component/forms/Numero.vue +0 -153
- package/src/component/forms/Opcoes.vue +0 -51
- package/src/component/forms/Senha.vue +0 -139
- package/src/component/forms/Texto.vue +0 -161
- package/src/component/forms/TextoArea.vue +0 -126
- package/src/component/forms/TextoEditor.vue +0 -123
- package/src/component/layout/Painel.vue +0 -142
- package/src/component/shared/Mensagem.vue +0 -86
- package/src/component/shared/query-builder/Campo.vue +0 -116
- package/src/component/shared/query-builder/ConverteParaOdata.js +0 -73
- package/src/component/shared/query-builder/QueryBuilder.vue +0 -164
- package/src/component/shared/query-builder/components/CustomSelect.vue +0 -115
- package/src/component/shared/query-builder/components/QueryBuilderChildren.vue +0 -46
- package/src/component/shared/query-builder/components/QueryBuilderGroup.vue +0 -151
- package/src/component/shared/query-builder/components/QueryBuilderRule.vue +0 -81
- package/src/component/shared/query-builder/layouts/Bootstrap/BootstrapGroup.vue +0 -120
- package/src/component/shared/query-builder/layouts/Bootstrap/BootstrapRule.vue +0 -171
- package/src/component/shared/query-builder/main.js +0 -81
- package/src/store/modulos/generic.js +0 -494
- package/src/store/modulos/relatorio.js +0 -201
- package/src/store/modulos/usuario.js +0 -38
- 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
|
+
}
|
package/src/store/store.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import Vue from 'vue';
|
|
2
2
|
import Vuex from 'vuex';
|
|
3
3
|
|
|
4
|
-
import
|
|
5
|
-
import generic from './
|
|
6
|
-
import validation from './
|
|
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,
|
|
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
|
-
}]);
|