iobroker.telegram-menu 0.6.2 → 0.6.3

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/README.md CHANGED
@@ -33,6 +33,10 @@ You can create different groups with separate menus, and then assign users to th
33
33
  Placeholder for the next version (at the beginning of the line):
34
34
  ### **WORK IN PROGRESS**
35
35
  -->
36
+ ### 0.6.3 (2023-08-17)
37
+
38
+ - user check, least one user must be checked
39
+
36
40
  ### 0.6.2 (2023-08-14)
37
41
 
38
42
  - Active Menu Output fixed
@@ -1,4 +1,10 @@
1
1
  /* Color and Border */
2
+ .m .border:has(p.warning) {
3
+ border-color: #f75555;
4
+ }
5
+ .m p.warning {
6
+ color: #f75555 !important;
7
+ }
2
8
  .border {
3
9
  border: 2px solid white;
4
10
  }
@@ -213,7 +213,7 @@ p[data-name="newline_checkbox"] {
213
213
  margin: 10px;
214
214
  text-align: center;
215
215
  }
216
- .showMenu {
216
+ .hide {
217
217
  display: none;
218
218
  }
219
219
  #activMenuOutput {
@@ -243,3 +243,6 @@ p[data-name="newline_checkbox"] {
243
243
  #group_UserInput div {
244
244
  display: inline-block;
245
245
  }
246
+ .warning {
247
+ text-align: center;
248
+ }
@@ -14,6 +14,7 @@
14
14
  "Add new User": "Neuen Benutzer hinzufügen",
15
15
  "Add new Username": "Neuen Benutzernamen hinzufügen",
16
16
  "All User from Telegram, seperate with": "Alle Benutzer von Telegram, getrennt mit",
17
+ "At least one user must be checked, or the menu must be deactivated.": "Mindestens ein Benutzer muss aktiviert sein oder das Menü muss deaktiviert sein.",
17
18
  "Call": "Forderung",
18
19
  "Call Text": "Aufruf Text",
19
20
  "Cancel": "Stornieren",
@@ -47,6 +48,7 @@
47
48
  "Startside": "Startseite",
48
49
  "Switch": "Schalten",
49
50
  "Text will be send if no entry was found!": "Text wird gesendet, wenn kein Eintrag gefunden wurde!",
51
+ "The trigger is allready in use.": "Der Auslöser ist bereits im Einsatz.",
50
52
  "Trigger": "Auslöser",
51
53
  "Users for this Group, seperate with": "Benutzer für diese Gruppe, trennen Sie mit",
52
54
  "Users from Telegram": "Benutzer von Telegram",
@@ -14,6 +14,7 @@
14
14
  "Add new User": "Add new User",
15
15
  "Add new Username": "Add new Username",
16
16
  "All User from Telegram, seperate with": "All User from Telegram, seperate with",
17
+ "At least one user must be checked, or the menu must be deactivated.": "At least one user must be checked, or the menu must be deactivated.",
17
18
  "Call": "Call",
18
19
  "Call Text": "Call Text",
19
20
  "Cancel": "Cancel",
@@ -47,6 +48,7 @@
47
48
  "Startside": "Startside",
48
49
  "Switch": "Switch",
49
50
  "Text will be send if no entry was found!": "Text will be send if no entry was found!",
51
+ "The trigger is allready in use.": "The trigger is allready in use.",
50
52
  "Trigger": "Trigger",
51
53
  "Users for this Group, seperate with": "Users for this Group, seperate with",
52
54
  "Users from Telegram": "Users from Telegram",
@@ -14,6 +14,7 @@
14
14
  "Add new User": "Añadir nuevo usuario",
15
15
  "Add new Username": "Agregar nuevo nombre de usuario",
16
16
  "All User from Telegram, seperate with": "Todos los usuarios de Telegram, separados con",
17
+ "At least one user must be checked, or the menu must be deactivated.": "Se debe marcar al menos un usuario o se debe desactivar el menú.",
17
18
  "Call": "Llamar",
18
19
  "Call Text": "Texto de llamada",
19
20
  "Cancel": "Cancelar",
@@ -47,6 +48,7 @@
47
48
  "Startside": "Lado de salida",
48
49
  "Switch": "Cambiar",
49
50
  "Text will be send if no entry was found!": "¡Se enviará texto si no se encontró ninguna entrada!",
51
+ "The trigger is allready in use.": "El gatillo ya está en uso.",
50
52
  "Trigger": "Desencadenar",
51
53
  "Users for this Group, seperate with": "Usuarios para este Grupo, separe con",
52
54
  "Users from Telegram": "Usuarios de Telegram",
@@ -14,6 +14,7 @@
14
14
  "Add new User": "Ajouter un nouvel utilisateur",
15
15
  "Add new Username": "Ajouter un nouveau nom d'utilisateur",
16
16
  "All User from Telegram, seperate with": "Tous les utilisateurs de Telegram, séparés par",
17
+ "At least one user must be checked, or the menu must be deactivated.": "Au moins un utilisateur doit être coché ou le menu doit être désactivé.",
17
18
  "Call": "Appel",
18
19
  "Call Text": "Texte d'appel",
19
20
  "Cancel": "Annuler",
@@ -47,6 +48,7 @@
47
48
  "Startside": "Côté départ",
48
49
  "Switch": "Changer",
49
50
  "Text will be send if no entry was found!": "Le texte sera envoyé si aucune entrée n'a été trouvée !",
51
+ "The trigger is allready in use.": "Le déclencheur est déjà utilisé.",
50
52
  "Trigger": "Déclencher",
51
53
  "Users for this Group, seperate with": "Utilisateurs pour ce groupe, séparés par",
52
54
  "Users from Telegram": "Utilisateurs de Telegram",
@@ -14,6 +14,7 @@
14
14
  "Add new User": "Aggiungi nuovo utente",
15
15
  "Add new Username": "Aggiungi nuovo nome utente",
16
16
  "All User from Telegram, seperate with": "Tutti gli utenti di Telegram, separati da",
17
+ "At least one user must be checked, or the menu must be deactivated.": "Almeno un utente deve essere selezionato o il menu deve essere disattivato.",
17
18
  "Call": "Chiamata",
18
19
  "Call Text": "Chiama il testo",
19
20
  "Cancel": "Annulla",
@@ -47,6 +48,7 @@
47
48
  "Startside": "Lato iniziale",
48
49
  "Switch": "Interruttore",
49
50
  "Text will be send if no entry was found!": "Il testo verrà inviato se non è stata trovata alcuna voce!",
51
+ "The trigger is allready in use.": "Il grilletto è già in uso.",
50
52
  "Trigger": "Grilletto",
51
53
  "Users for this Group, seperate with": "Utenti per questo gruppo, separati da",
52
54
  "Users from Telegram": "Utenti di Telegram",
@@ -14,6 +14,7 @@
14
14
  "Add new User": "Voeg een nieuwe gebruiker toe",
15
15
  "Add new Username": "Nieuwe gebruikersnaam toevoegen",
16
16
  "All User from Telegram, seperate with": "Alle gebruikers van Telegram, gescheiden met",
17
+ "At least one user must be checked, or the menu must be deactivated.": "Er moet minimaal één gebruiker zijn aangevinkt, of het menu moet zijn gedeactiveerd.",
17
18
  "Call": "Telefoongesprek",
18
19
  "Call Text": "Bel tekst",
19
20
  "Cancel": "Annuleren",
@@ -47,6 +48,7 @@
47
48
  "Startside": "Startzijde",
48
49
  "Switch": "Schakelaar",
49
50
  "Text will be send if no entry was found!": "Er wordt een tekst verzonden als er geen item is gevonden!",
51
+ "The trigger is allready in use.": "De trigger is al in gebruik.",
50
52
  "Trigger": "Trekker",
51
53
  "Users for this Group, seperate with": "Gebruikers voor deze groep, scheid met",
52
54
  "Users from Telegram": "Gebruikers van Telegram",
@@ -14,6 +14,7 @@
14
14
  "Add new User": "Dodaj nowego użytkownika",
15
15
  "Add new Username": "Dodaj nową nazwę użytkownika",
16
16
  "All User from Telegram, seperate with": "Wszyscy użytkownicy z Telegramu, oddzielni od",
17
+ "At least one user must be checked, or the menu must be deactivated.": "Należy zaznaczyć przynajmniej jednego użytkownika lub dezaktywować menu.",
17
18
  "Call": "Dzwonić",
18
19
  "Call Text": "Tekst połączenia",
19
20
  "Cancel": "Anulować",
@@ -47,6 +48,7 @@
47
48
  "Startside": "Strona startowa",
48
49
  "Switch": "Przełącznik",
49
50
  "Text will be send if no entry was found!": "Tekst zostanie wysłany, jeśli nie znaleziono żadnego wpisu!",
51
+ "The trigger is allready in use.": "Spust jest już w użyciu.",
50
52
  "Trigger": "Spust",
51
53
  "Users for this Group, seperate with": "Użytkownicy dla tej grupy, oddzielni od",
52
54
  "Users from Telegram": "Użytkownicy Telegrama",
@@ -14,6 +14,7 @@
14
14
  "Add new User": "Adicionar novo usuário",
15
15
  "Add new Username": "Adicionar novo nome de usuário",
16
16
  "All User from Telegram, seperate with": "Todos os usuários do Telegram, separados por",
17
+ "At least one user must be checked, or the menu must be deactivated.": "Pelo menos um usuário deve ser verificado ou o menu deve ser desativado.",
17
18
  "Call": "Chamar",
18
19
  "Call Text": "Texto de chamada",
19
20
  "Cancel": "Cancelar",
@@ -47,6 +48,7 @@
47
48
  "Startside": "Startside",
48
49
  "Switch": "Trocar",
49
50
  "Text will be send if no entry was found!": "O texto será enviado se nenhuma entrada for encontrada!",
51
+ "The trigger is allready in use.": "O gatilho já está em uso.",
50
52
  "Trigger": "Acionar",
51
53
  "Users for this Group, seperate with": "Usuários deste Grupo, separados por",
52
54
  "Users from Telegram": "Usuários do Telegram",
@@ -14,6 +14,7 @@
14
14
  "Add new User": "Добавить нового пользователя",
15
15
  "Add new Username": "Добавить новое имя пользователя",
16
16
  "All User from Telegram, seperate with": "Все пользователи из Telegram, отдельно от",
17
+ "At least one user must be checked, or the menu must be deactivated.": "Должен быть отмечен хотя бы один пользователь, или меню должно быть деактивировано.",
17
18
  "Call": "Вызов",
18
19
  "Call Text": "Текст вызова",
19
20
  "Cancel": "Отмена",
@@ -47,6 +48,7 @@
47
48
  "Startside": "Стартовая сторона",
48
49
  "Switch": "Выключатель",
49
50
  "Text will be send if no entry was found!": "Текст будет отправлен, если запись не найдена!",
51
+ "The trigger is allready in use.": "Триггер уже используется.",
50
52
  "Trigger": "Курок",
51
53
  "Users for this Group, seperate with": "Пользователи для этой группы, отдельно с",
52
54
  "Users from Telegram": "Пользователи из Telegram",
@@ -14,6 +14,7 @@
14
14
  "Add new User": "Додати нового користувача",
15
15
  "Add new Username": "Додайте нове ім'я користувача",
16
16
  "All User from Telegram, seperate with": "Всі користувачі з Telegram, окремо від",
17
+ "At least one user must be checked, or the menu must be deactivated.": "Принаймні один користувач повинен бути відмічений, або меню має бути дезактивовано.",
17
18
  "Call": "Телефонуйте",
18
19
  "Call Text": "Текст виклику",
19
20
  "Cancel": "Скасувати",
@@ -47,6 +48,7 @@
47
48
  "Startside": "Стартова сторона",
48
49
  "Switch": "Перемикач",
49
50
  "Text will be send if no entry was found!": "Текст буде надіслано, якщо запис не знайдено!",
51
+ "The trigger is allready in use.": "Тригер уже використовується.",
50
52
  "Trigger": "Тригер",
51
53
  "Users for this Group, seperate with": "Користувачі для цієї групи, окремо від",
52
54
  "Users from Telegram": "Користувачі з Telegram",
@@ -14,6 +14,7 @@
14
14
  "Add new User": "添加新用户",
15
15
  "Add new Username": "添加新用户名",
16
16
  "All User from Telegram, seperate with": "来自 Telegram 的所有用户,与",
17
+ "At least one user must be checked, or the menu must be deactivated.": "必须至少检查一名用户,否则必须停用菜单。",
17
18
  "Call": "称呼",
18
19
  "Call Text": "通话文字",
19
20
  "Cancel": "取消",
@@ -47,6 +48,7 @@
47
48
  "Startside": "起跑线",
48
49
  "Switch": "转变",
49
50
  "Text will be send if no entry was found!": "如果没有找到条目,将发送文本!",
51
+ "The trigger is allready in use.": "触发器已准备好使用。",
50
52
  "Trigger": "扳机",
51
53
  "Users for this Group, seperate with": "该组的用户,与",
52
54
  "Users from Telegram": "来自 Telegram 的用户",
@@ -11,8 +11,6 @@
11
11
  <script type="text/javascript" src="./js/main.js"></script>
12
12
  <script type="text/javascript" src="./js/component.js"></script>
13
13
  <script type="text/javascript" src="./js/emit.js"></script>
14
-
15
-
16
14
  <script type="text/javascript" src="../../js/translate.js"></script>
17
15
  <script type="text/javascript" src="../../lib/js/materialize.js"></script>
18
16
  <script type="text/javascript" src="../../js/adapter-settings.js"></script>
@@ -25,7 +23,6 @@
25
23
  <script type="text/javascript" src="../../lib/js/jquery.fancytree-all.min.js"></script>
26
24
  <script type="text/javascript" src="../../lib/js/selectID.js"></script>
27
25
 
28
- <!-- Load our own files -->
29
26
  <link rel="stylesheet" type="text/css" href="./css/style.css" />
30
27
  <link rel="stylesheet" type="text/css" href="./css/color.css" />
31
28
  <link rel="stylesheet" type="text/css" href="./css/scrolling.css" />
@@ -119,6 +116,7 @@
119
116
  obj.checkbox[$this.attr('id')] = $this.prop('checked')
120
117
  };
121
118
  })
119
+ if (!isUserChecked(activeMenu)) return
122
120
  usersInMenus = {}
123
121
  usersInMenus = getUserInMenus()
124
122
  obj.usersInGroup = usersInMenus
@@ -144,45 +142,63 @@
144
142
 
145
143
  $(function () {
146
144
  let rowToUpdate;
145
+ // ----------------------------------------//
146
+ // Menu //
147
+ //-----------------------------------------//
147
148
 
148
- // User ------------------------------------------------------------------------------
149
- // New User Show Button
149
+ // Menu-input , disable-enable Add Btn //
150
150
  $("#groupname").keyup(function () {
151
- let userInput = $(this).val()
152
- let gefundenerName = menus.find(function (name) {
153
- return name.toLowerCase() === userInput.toLowerCase();
151
+ let valInputField = $(this).val()
152
+ let menuNameFound = menus.find(function (name) {
153
+ return name.toLowerCase() === valInputField.toLowerCase();
154
154
  });
155
- if ($(this).val() !== "" && !gefundenerName) {
155
+ if (valInputField !== "" && !menuNameFound) {
156
156
  $("#addNewGroup").removeClass("disabled")
157
157
  } else $("#addNewGroup").addClass("disabled")
158
158
  })
159
- // Add new User
159
+ // Add Btn new Menu
160
160
  $("#addNewGroup").click(() => {
161
- let newUser = $("#groupname").val().replace(" ", "_")
162
- if (menus.indexOf(newUser) == -1) {
163
- addNewGroup(menus, newUser, _onChange)
164
- activeMenu = newUser
165
- showUser(newUser, showHideUserCheckbox)
166
- console.log(valUserFromTelegram)
167
- buildUserSelection(valUserFromTelegram, [newUser], usersInMenus)
161
+ let newMenu = $("#groupname").val().replace(" ", "_")
162
+ if (menus.indexOf(newMenu) == -1) {
163
+ addNewGroup(menus, newMenu, _onChange)
164
+ activeMenu = newMenu
165
+ showUser(newMenu, showHideUserCheckbox)
166
+ buildUserSelection(valUserFromTelegram, [newMenu], usersInMenus)
168
167
  translateAll()
169
168
  }
170
169
  })
171
-
172
- $(".adapter-container").on("change", ".userSelection", function () {
173
- _onChange()
174
- })
175
- function showHideUserCheckbox(activeGroup) {
176
- $("#group_active_checkbox>div").hide()
177
- $(`#group_active_checkbox div.${activeGroup}`).show()
178
- }
179
- // Delete User
170
+ // Delete Btn, open popup
180
171
  $("#group_menu").on("click", "#deleteUser", function () {
181
172
  $("#dialog-confirm").show()
182
173
  })
183
- // Auf Confirm Group Ok reagieren
184
- $("#dialog-confirm a.btn-set").on("click", function () {
174
+ // Edit Btn Menu
175
+ $("#editUser").click(function () {
176
+ $("#dialog-change-groupname").show()
177
+ $("#inputEditUser").val(activeMenu)
178
+ })
179
+
180
+ // ----------------------------------------//
181
+ // Popup Menu Liste //
182
+ //-----------------------------------------//
185
183
 
184
+ // Click Menu, Show Menu Navigation or Action
185
+ $("#group_list").on("click", ".click_user", function () {
186
+ activeMenu = $(this).attr("name")
187
+ $("#btn-nav").attr("href", `#tab-nav-user-${activeMenu}`)
188
+ $("#btn_action").attr("href", `#tab-todo-user-${activeMenu}`)
189
+ $("adapter-container").load(`#tab-nav-user-${activeMenu}`)
190
+ showUser(activeMenu, showHideUserCheckbox)
191
+ // Menu active Button show
192
+ showHideUserCheckbox(activeMenu)
193
+ generateSelectTrigger(activeMenu)
194
+ })
195
+
196
+ // ----------------------------------------//
197
+ // Popup Confirm Delete Menu //
198
+ //-----------------------------------------//
199
+
200
+ // Confirm Dialog Btn OK
201
+ $("#dialog-confirm a.btn-set").on("click", function () {
186
202
  menus.splice(menus.indexOf(activeMenu), 1)
187
203
  $("#group_list .active").parent().remove()
188
204
  $(`#tab-nav tbody[name="${activeMenu}"]`).remove()
@@ -197,29 +213,18 @@
197
213
  activeMenu = menus[0]
198
214
  showUser(activeMenu, showHideUserCheckbox)
199
215
  } else menuToSpan("No User");
200
-
201
216
  _onChange()
202
217
  $("#dialog-confirm").hide()
203
218
  })
219
+ // Confirm Dialog Btn Abort
204
220
  $("#dialog-confirm a.btn-close").on("click", function () {
205
221
  $("#dialog-confirm").hide()
206
222
  })
207
- // Click User, Show User Navigation, Action
208
- $("#group_list").on("click", ".click_user", function () {
209
- activeMenu = $(this).attr("name")
210
-
211
- showUser(activeMenu, showHideUserCheckbox)
212
- // User active Button zeigen
213
- showHideUserCheckbox(activeMenu)
214
- generateSelectTrigger(activeMenu)
215
- })
223
+ // ----------------------------------------//
224
+ // Popup Edit Menu //
225
+ //-----------------------------------------//
216
226
 
217
- // Edit Group
218
- $("#editUser").click(function () {
219
- $("#dialog-change-groupname").show()
220
- $("#inputEditUser").val(activeMenu)
221
- })
222
- // Check Group doesn´t exist
227
+ // Check Menu doesn´t exist
223
228
  $("#inputEditUser").keyup(function () {
224
229
  let gefundenerName = menus.find(function (name) {
225
230
  return name.toLowerCase() === $("#inputEditUser").val().toLowerCase();
@@ -227,9 +232,9 @@
227
232
  if (gefundenerName) $("#dialog-change-groupname .btn-set").attr("disabled", "disabled")
228
233
  else $("#dialog-change-groupname .btn-set").removeAttr("disabled")
229
234
  })
230
- // Save Edit Group
235
+ // Save Edit Menu
231
236
  $("#dialog-change-groupname .btn-set").click(function () {
232
- // ActiveUser aus der User List enfernen und die Änderung hinzufügen
237
+ // ActiveMenu aus der User List enfernen und die Änderung hinzufügen
233
238
  menus = menus.filter(function (element) {
234
239
  return element != activeMenu
235
240
  })
@@ -253,36 +258,63 @@
253
258
  $("#dialog-change-groupname").hide()
254
259
  })
255
260
 
261
+ // ----------------------------------------//
262
+ // Navigation //
263
+ //-----------------------------------------//
256
264
 
257
- // Navigation -----------------------------------------------------------------------------------
258
265
  // Click Nav Buttons
259
266
  let activeBtn = "nav"
260
267
  $("header ul").on("click", ".btn_nav", function () {
268
+ if (!isUserChecked(activeMenu)) return
261
269
  activeBtn = $(this).attr("name")
262
270
  if (activeBtn === "nav") {
263
271
  $("#btn_add_action").hide()
264
272
  $(".group_menu").show()
273
+ $("#tab-nav").css("display", "block")
274
+ $("#tab-action").hide()
275
+ $("#tab-settings").hide()
265
276
  } else if (activeBtn === "action") {
266
277
  $("#btn_add_action").show()
267
278
  $(".group_menu").show()
279
+ $("#tab-action").css("display", "block")
280
+ $("#tab-nav").hide()
281
+ $("#tab-settings").hide()
268
282
  generateSelectTrigger(activeMenu)
269
283
  }
270
284
  else {
271
285
  $("#btn_add_action").hide()
272
286
  $(".group_menu").hide()
287
+ $("#tab-nav").hide()
288
+ $("#tab-action").hide()
289
+ $("#tab-settings").css("display", "block")
273
290
  }
274
291
  translateAll()
275
292
  })
276
- //ANCHOR - New Row in Navigation
293
+ // Btns new Row in Navigation
277
294
  $(".adapter-container").on("click", ".btn_add_row", function () {
278
295
  $(this).parent().parent().after(newTableRow_Nav(activeMenu, menus))
279
296
  checkUpAndDownArrowBtn(activeMenu)
280
297
  })
281
298
 
299
+ // Button Row up
300
+ $(".adapter-container").on("click", ".btn_up", function () {
301
+ $(this).parent().parent().insertBefore($(this).parent().parent().prev())
302
+ checkUpAndDownArrowBtn(activeMenu)
303
+ _onChange()
304
+ })
305
+ // Btn Row down
306
+ $(".adapter-container").on("click", ".btn_down", function (key) {
307
+ console.log("klick")
308
+ $(this).parent().parent().insertAfter($(this).parent().parent().next())
309
+ checkUpAndDownArrowBtn(activeMenu)
310
+ _onChange()
311
+ })
282
312
 
283
- // ------------------------------------------------------------------------------------------------------
284
- // Add Button New Row
313
+ // ----------------------------------------//
314
+ // Action //
315
+ //-----------------------------------------//
285
316
 
317
+ // Add Button in Action opens Action Popup
286
318
  $("#btn_add_action").click(function () {
287
319
  rowToUpdate = null
288
320
  translateAll()
@@ -295,15 +327,10 @@
295
327
  generateNav()
296
328
  })
297
329
 
330
+ // ----------------------------------------//
331
+ // Change Events //
332
+ //-----------------------------------------//
298
333
 
299
- // Change Events --------------------------------------------------------------------------------------
300
- // Eventhandler for save change
301
- $("#group_list").on("click", ".click-user", function () {
302
- activeMenu = $(this).attr("name")
303
- $("#btn-nav").attr("href", `#tab-nav-user-${activeMenu}`)
304
- $("#btn_action").attr("href", `#tab-todo-user-${activeMenu}`)
305
- $("adapter-container").load(`#tab-nav-user-${activeMenu}`)
306
- })
307
334
  // update
308
335
  $("#navigation").change(".value", function () {
309
336
  _onChange()
@@ -314,9 +341,21 @@
314
341
  $("#group_UserInput").on("keyup", "input", function () {
315
342
  _onChange()
316
343
  })
344
+ $(".adapter-container").on("change", ".userSelection", function () {
345
+ _onChange()
346
+ })
347
+ $("#select_instance").on('change', function () {
348
+ _onChange()
349
+ })
350
+ // Active User clicken und Speichern sichtbar machen
351
+ $("#group_active_checkbox").on("change", "input", function () {
352
+ _onChange()
353
+ })
317
354
 
355
+ // ----------------------------------------//
356
+ // Dialog get ID Iobroker //
357
+ //-----------------------------------------//
318
358
 
319
- //Dialog get ID Iobroker ------------------------------------------------------------------------------
320
359
  $(".adapter-container").on("click", ".btn_getID", function () {
321
360
  let $element = $(this).parent().prev().children("input")
322
361
  showSelectIdDialog($element.val(), function (newID) {
@@ -324,8 +363,10 @@
324
363
  })
325
364
  });
326
365
 
327
- // ----------------------------------------------------------------------------------------------------
328
- //Modal
366
+ // ----------------------------------------//
367
+ // Modal //
368
+ //-----------------------------------------//
369
+
329
370
  $('.modal').modal()
330
371
  // Tables in Action Verstecken und Button new Row
331
372
  $(".modal-content table").hide()
@@ -336,15 +377,14 @@
336
377
  resetModal()
337
378
  })
338
379
 
380
+ // ----------------------------------------//
381
+ // Telegram Instances in Select Input //
382
+ //-----------------------------------------//
339
383
 
340
-
341
- // Telegram Instances in Select -----------------------------------------------------------------------
342
384
  // Select Instance
343
385
  getAllTelegramInstances(socket, this)
344
386
  $("#select_instance").val(telegramInstance).select();
345
- $("#select_instance").on('change', function () {
346
- _onChange()
347
- })
387
+
348
388
  // Select Inizializieren
349
389
  $("select").select();
350
390
 
@@ -356,22 +396,51 @@
356
396
  $(`#tab_${$(this).val()}`).show()
357
397
  })
358
398
 
359
- // Action Side --------------------------------------------------------------------
399
+ // ----------------------------------------//
400
+ // Action Popup //
401
+ //-----------------------------------------//
402
+
360
403
  // New Row in Action
361
404
  $("#btn_action_newRow").on("click", function () {
362
405
  const rows = $("#tab_pic tbody tr").length
363
406
  $(`#tab_${$("#select_action").val()} tbody`).append(newTrInAction($("#select_action").val(), undefined, rows))
364
407
  $("#btn_action_set").attr("disabled", "disabled")
365
408
  })
409
+ // Edit entrys
410
+ $(".adapter-container").on("click", ".editEntry", function () {
411
+ rowToUpdate = $(this).parents("tr")
412
+ showTrigger = true;
413
+ // Select_action deaktivieren
414
+ $("#select_action").attr("disabled", "disabled")
415
+ // Select Button Aktivieren
416
+ $("#btn_action_set").removeAttr("disabled")
417
+ $("#btn_action_newRow").show()
418
+ let action = $(this).parents("tbody").attr("data-name")
419
+ $("#select_action").val(action).select()
420
+ $(`#tab_${action}`).show()
421
+ // Trigger
422
+ $("#select_trigger").val($(this).parent().siblings("[data-name='trigger']").html()).select()
423
+ insertEditValues(action, this)
424
+ disableValueInput()
425
+ })
426
+ // Value deaktivieren wenn Switch checked
427
+ $(".modal-content").on("change", ".switch_checkbox", function () {
428
+ disableValueInput()
429
+ })
430
+
431
+ // ----------------------------------------//
432
+ // Settings //
433
+ //-----------------------------------------//
366
434
 
367
- // Settings--------------------------------------------------------------------
368
435
  $("#tab-settings").on("change", "#checkboxNoValueFound", function () {
369
436
  disableEnableInputField("#checkboxNoValueFound", "#textNoEntry")
370
-
371
437
  })
372
438
 
373
- // --------------------------------------------------------------------------------
374
- // Global Disable delete Button in Tables
439
+ // ----------------------------------------//
440
+ // Global //
441
+ //-----------------------------------------//
442
+
443
+ // Disable delete Button in Tables
375
444
  $("div.adapter-container").on("click", "a.deleteRow", function () {
376
445
  if ($(this).children("tr").length > 1) {
377
446
  $(this).find($("a.deleteRow")).removeAttr("disabled")
@@ -385,6 +454,18 @@
385
454
  $(this).find("i").html("chevron_right")
386
455
  } else $(this).find("i").html("expand_more")
387
456
  })
457
+
458
+ // Inputs if its not ""
459
+ $(".modal-content").on("input ", function () {
460
+ checkValueModal(showTrigger)
461
+ })
462
+ $(".modal-content").on("change", "#tab_set input.switch_checkbox", function () {
463
+ checkValueModal(showTrigger)
464
+ })
465
+
466
+ // ----------------------------------------//
467
+ // Save //
468
+ //-----------------------------------------//
388
469
  // Save from Action Input Field
389
470
  //SECTION - Save 1
390
471
  $("#btn_action_set").on("click", function () {
@@ -458,59 +539,17 @@
458
539
  if ($(this).val() == null) showTrigger = false
459
540
  showSelectModal(showTrigger, true)
460
541
  })
461
- // Inputs if its not ""
462
- $(".modal-content").on("input ", function () {
463
- checkValueModal(showTrigger)
464
- })
465
- $(".modal-content").on("change", "#tab_set input.switch_checkbox", function () {
466
- checkValueModal(showTrigger)
467
- })
468
-
469
- // Edit entrys
470
- $(".adapter-container").on("click", ".editEntry", function () {
471
- rowToUpdate = $(this).parents("tr")
472
- showTrigger = true;
473
- // Select_action deaktivieren
474
- $("#select_action").attr("disabled", "disabled")
475
- // Select Button Aktivieren
476
- $("#btn_action_set").removeAttr("disabled")
477
- $("#btn_action_newRow").show()
478
- let action = $(this).parents("tbody").attr("data-name")
479
- $("#select_action").val(action).select()
480
- $(`#tab_${action}`).show()
481
- // Trigger
482
- $("#select_trigger").val($(this).parent().siblings("[data-name='trigger']").html()).select()
483
- insertEditValues(action, this)
484
- disableValueInput()
485
- })
486
-
487
-
488
- // Value deaktivieren wenn Switch checked
489
- $(".modal-content").on("change", ".switch_checkbox", function () {
490
- disableValueInput()
491
542
 
492
- })
493
- // Active User clicken und Speichern sichtbar machen
494
- $("#group_active_checkbox").on("change", "input", function () {
495
- _onChange()
496
- })
497
- // Button Row up and down
498
- $(".adapter-container").on("click", ".btn_up", function () {
499
- $(this).parent().parent().insertBefore($(this).parent().parent().prev())
500
- checkUpAndDownArrowBtn(activeMenu)
501
- _onChange()
502
- })
503
- $(".adapter-container").on("click", ".btn_down", function (key) {
504
- console.log("klick")
505
- $(this).parent().parent().insertAfter($(this).parent().parent().next())
506
- checkUpAndDownArrowBtn(activeMenu)
507
- _onChange()
508
- })
543
+ // ----------------------------------------//
544
+ // Copy Data Popup //
545
+ //-----------------------------------------//
509
546
 
510
- // Copy Data
547
+ // Open Popup
511
548
  $("#btn_copy_nav").click(function () {
512
549
  $("#dialog-copy-data").show()
513
550
  })
551
+
552
+ // Select choose
514
553
  $("#select-copy-data").on("change", function () {
515
554
  $("#copyData").empty()
516
555
  if ($(this).val() == "nav") {
@@ -557,19 +596,18 @@
557
596
  $(`#tab-action tbody[name="${activeMenu}"][data-name="${action}"]`).append(rowToCopy)
558
597
  }
559
598
  })
560
-
599
+ // Close Copy Data Popup
561
600
  $("#dialog-copy-data .btn-close").click(function () {
562
601
  resetSelect()
563
602
  _onChange()
564
603
  })
565
- function resetSelect() {
566
- $("#copyData").empty()
567
- $("#select-copy-data").val("").select()
568
- $("#dialog-copy-data").hide()
569
- }
604
+ // ----------------------------------------//
605
+ // Menu Navigation //
606
+ //-----------------------------------------//
607
+
570
608
  // Menu Popup
571
609
  $("#btn_expand").on("click", function () {
572
- $("#group_list").toggleClass("showMenu")
610
+ $("#group_list").toggleClass("hide")
573
611
  })
574
612
  let var1, var2
575
613
  $("#btn_expand").on("mouseover", function () {
@@ -611,13 +649,13 @@
611
649
  <div class="col s12">
612
650
  <ul class="tabs bg--header">
613
651
  <li class="tab col s3 "><a class="active btn_nav translate" name="nav" id="btn-nav"
614
- href="#tab-nav">Navigation</a>
652
+ href="#">Navigation</a>
615
653
  </li>
616
654
  <li class="tab col s3"><a class="btn_nav translate" name="action" id="btn_action"
617
- href="#tab-action">Action</a>
655
+ href="#">Action</a>
618
656
  </li>
619
657
  <li class="tab col s3"><a class="btn_nav translate" name="set" id="btn_settings"
620
- href="#tab-settings">Settings</a>
658
+ href="#">Settings</a>
621
659
  </li>
622
660
  </ul>
623
661
  </div>
@@ -773,7 +811,7 @@
773
811
  <br><span class="translate">Active Menu:</span><br><span class="border"
774
812
  id="activMenuOutput"></span>
775
813
  </p>
776
- <ul id="group_list" class="showMenu">
814
+ <ul id="group_list" class="hide">
777
815
  </ul>
778
816
  </div>
779
817
  <div class="col s10 m8 l8 border">
@@ -795,6 +833,16 @@
795
833
  </div>
796
834
  </div>
797
835
  </div>
836
+ <div class="row">
837
+ <div id="userSelection" class="col s8 offset-s2 border hide">
838
+ <p class="translate warning">At least one user must be checked, or the menu must be deactivated.</p>
839
+ </div>
840
+ </div>
841
+ <div class="row">
842
+ <div id="triggerAllreadyInUser" class="col s8 offset-s2 border hide">
843
+ <p class="translate warning">The trigger is allready in use.</p>
844
+ </div>
845
+ </div>
798
846
  <div class="row group_menu">
799
847
  <div class="col s4 m2 l2">
800
848
  <a class="waves-effect waves-light btn-large green translateT modal-trigger" id="btn_add_action"
@@ -814,7 +862,7 @@
814
862
  </div>
815
863
  </header>
816
864
  <!-- //SECTION - Navigation -->
817
- <div id="tab-nav" class="resizeFull">
865
+ <div id="tab-nav" class="resizeFull" style="display: block;">
818
866
  <div class="row">
819
867
  <div class="col s12 table_wrapper ">
820
868
  <div class="table-values-div saveTable nav" id="navigation">
@@ -839,9 +887,9 @@
839
887
  </div>
840
888
  </div>
841
889
  </div>
842
- <div id="tab-action" class="resizeFull"></div>
890
+ <div id="tab-action" class="resizeFull" style="display: none;"></div>
843
891
  <!-- //SECTION - Settings -->
844
- <div id="tab-settings">
892
+ <div id="tab-settings" style="display: none;">
845
893
  <div class=" row">
846
894
  <div class="col s12">
847
895
  <h1 class="translate">Settings</h1>
package/admin/js/main.js CHANGED
@@ -1,6 +1,28 @@
1
1
  /*global newUserBtn,getUsersFromTelegram ,navElement, userSelectionTelegram ,actionElement,createSelectTrigger,newTableRow_Action,newTableRow_Action,newTrInAction,userActivCheckbox,$, groupUserInput*/
2
2
  /*eslint no-unused-vars: ["error", { "varsIgnorePattern": "disableEnableInputField|isStringEmty|generate|create|set|fill|reset|add|show|ins|table|get|new|show|checkValueModal|disable|checkUpAndDownArrowBtn|"}]*/
3
+ function isUserChecked(activeMenu) {
4
+ let checked = false;
5
+ $(`#group_UserInput div[data-menu="${activeMenu}"] input`).each(function () {
6
+ if ($(this).prop("checked")) checked = true;
7
+ });
8
+ if (!$(`#group_active_checkbox div.${activeMenu} input`).prop("checked") || checked) {
9
+ $("#userSelection").addClass("hide");
10
+ return true;
11
+ } else {
12
+ $("#userSelection").removeClass("hide");
13
+ return false;
14
+ }
15
+ }
3
16
 
17
+ function resetSelect() {
18
+ $("#copyData").empty();
19
+ $("#select-copy-data").val("").select();
20
+ $("#dialog-copy-data").hide();
21
+ }
22
+ function showHideUserCheckbox(activeGroup) {
23
+ $("#group_active_checkbox>div").hide();
24
+ $(`#group_active_checkbox div.${activeGroup}`).show();
25
+ }
4
26
  function getUserInMenus() {
5
27
  const usersInMenus = {};
6
28
  $("#group_UserInput input[type='checkbox']").each(function () {
package/admin/words.js CHANGED
@@ -11,6 +11,7 @@ systemDictionary = {
11
11
  " No entry, send to all Users.": { "en": " No entry, send to all Users.", "de": "Kein Eintrag, an alle Benutzer senden.", "ru": "Нет записи, отправить всем пользователям.", "pt": "Sem entrada, envie para todos os usuários.", "nl": "Geen invoer, verzenden naar alle gebruikers.", "fr": "Aucune entrée, envoyer à tous les utilisateurs.", "it": "Nessuna voce, invia a tutti gli utenti.", "es": "Sin entrada, enviar a todos los usuarios.", "pl": "Brak wpisu, wyślij do wszystkich Użytkowników.", "uk": "Заборонено, відправити всім користувачам.", "zh-cn": "没有条目,发送给所有用户。"},
12
12
  "Action": { "en": "Action", "de": "Aktion", "ru": "Действие", "pt": "Ação", "nl": "Actie", "fr": "Action", "it": "Azione", "es": "Acción", "pl": "Działanie", "uk": "Дія", "zh-cn": "行动"},
13
13
  "Active": { "en": "Active", "de": "Aktiv", "ru": "Активный", "pt": "Ativo", "nl": "Actief", "fr": "Actif", "it": "Attivo", "es": "Activo", "pl": "Aktywny", "uk": "Активний", "zh-cn": "积极的"},
14
+ "Active Menu:": { "en": "Active Menu:", "de": "Aktives Menü:", "ru": "Активное меню:", "pt": "Menu ativo:", "nl": "Actief menu:", "fr": "Menu Actif :", "it": "Menù attivo:", "es": "Menú Activo:", "pl": "aktywne menu:", "uk": "Активне меню:", "zh-cn": "活动菜单:"},
14
15
  "Add": { "en": "add", "de": "hinzufügen", "ru": "добавлять", "pt": "adicionar", "nl": "toevoegen", "fr": "ajouter", "it": "aggiungere", "es": "agregar", "pl": "dodać", "uk": "додати", "zh-cn": "添加"},
15
16
  "Add && as a placeholder for the value in the text": {"en": "Add && as a placeholder for the value in the text", "de": "Fügen Sie && als Platzhalter für den Wert im Text hinzu", "ru": "Добавьте && в качестве заполнителя для значения в тексте", "pt": "Adicionar && como espaço reservado para o valor no texto", "nl": "Voeg && toe als tijdelijke aanduiding voor de waarde in de tekst", "fr": "Ajouter && comme espace réservé pour la valeur dans le texte", "it": "Aggiungi && come segnaposto per il valore nel testo", "es": "Agregue && como marcador de posición para el valor en el texto", "pl": "Dodaj && jako symbol zastępczy wartości w tekście", "uk": "Додайте && як заповнювач для значення в тексті", "zh-cn": "添加 && 作为文本中值的占位符"},
16
17
  "Add &amp;&amp; as a placeholder for the value in the text": {"en": "Add &amp;&amp; as a placeholder for the value in the text", "de": "Fügen Sie && als Platzhalter für den Wert im Text hinzu", "ru": "Добавьте && в качестве заполнителя для значения в тексте", "pt": "Adicionar && como espaço reservado para o valor no texto", "nl": "Voeg && toe als tijdelijke aanduiding voor de waarde in de tekst", "fr": "Ajouter && comme espace réservé pour la valeur dans le texte", "it": "Aggiungi && come segnaposto per il valore nel testo", "es": "Agregue && como marcador de posición para el valor en el texto", "pl": "Dodaj && jako symbol zastępczy wartości w tekście", "uk": "Додайте && як заповнювач для значення в тексті", "zh-cn": "添加 && 作为文本中值的占位符"},
@@ -57,10 +58,11 @@ systemDictionary = {
57
58
  "Text will be send if no entry was found!": { "en": "Text will be send if no entry was found!", "de": "Text wird gesendet, wenn kein Eintrag gefunden wurde!", "ru": "Текст будет отправлен, если запись не найдена!", "pt": "O texto será enviado se nenhuma entrada for encontrada!", "nl": "Er wordt een tekst verzonden als er geen item is gevonden!", "fr": "Le texte sera envoyé si aucune entrée n'a été trouvée !", "it": "Il testo verrà inviato se non è stata trovata alcuna voce!", "es": "¡Se enviará texto si no se encontró ninguna entrada!", "pl": "Tekst zostanie wysłany, jeśli nie znaleziono żadnego wpisu!", "uk": "Текст буде надіслано, якщо запис не знайдено!", "zh-cn": "如果没有找到条目,将发送文本!"},
58
59
  "Trigger": { "en": "Trigger", "de": "Auslöser", "ru": "Курок", "pt": "Acionar", "nl": "Trekker", "fr": "Déclencher", "it": "Grilletto", "es": "Desencadenar", "pl": "Spust", "uk": "Тригер", "zh-cn": "扳机"},
59
60
  "Users for this Group, seperate with": { "en": "Users for this Group, seperate with", "de": "Benutzer für diese Gruppe, trennen Sie mit", "ru": "Пользователи для этой группы, отдельно с", "pt": "Usuários deste Grupo, separados por", "nl": "Gebruikers voor deze groep, scheid met", "fr": "Utilisateurs pour ce groupe, séparés par", "it": "Utenti per questo gruppo, separati da", "es": "Usuarios para este Grupo, separe con", "pl": "Użytkownicy dla tej grupy, oddzielni od", "uk": "Користувачі для цієї групи, окремо від", "zh-cn": "该组的用户,与"},
61
+ "Users from Telegram": { "en": "Users from Telegram", "de": "Benutzer von Telegram", "ru": "Пользователи из Telegram", "pt": "Usuários do Telegram", "nl": "Gebruikers van Telegram", "fr": "Utilisateurs de Telegram", "it": "Utenti di Telegram", "es": "Usuarios de Telegram", "pl": "Użytkownicy Telegrama", "uk": "Користувачі з Telegram", "zh-cn": "来自 Telegram 的用户"},
60
62
  "Value": { "en": "Value", "de": "Wert", "ru": "Ценить", "pt": "Valor", "nl": "Waarde", "fr": "Valeur", "it": "Valore", "es": "Valor", "pl": "Wartość", "uk": "Значення", "zh-cn": "价值"},
61
63
  "What is to do?": { "en": "What is to do?", "de": "Was ist zu tun?", "ru": "Что делать?", "pt": "O que fazer?", "nl": "Wat is er te doen?", "fr": "Que faire ?", "it": "Cosa fare?", "es": "¿Qué hay que hacer?", "pl": "Co robić?", "uk": "Що робити?", "zh-cn": "怎么办?"},
62
64
  "active": { "en": "active", "de": "aktiv", "ru": "активный", "pt": "ativo", "nl": "actief", "fr": "actif", "it": "attivo", "es": "activo", "pl": "aktywny", "uk": "активний", "zh-cn": "积极的"},
63
65
  "telegram-menu adapter settings": { "en": "Adapter settings for telegram-menu", "de": "Adaptereinstellungen für Telegram-Menü", "ru": "Настройки адаптера для телеграм-меню", "pt": "Configurações do adaptador para menu de telegrama", "nl": "Adapterinstellingen voor telegrammenu", "fr": "Paramètres de l'adaptateur pour le menu télégramme", "it": "Impostazioni dell'adattatore per il menu del telegramma", "es": "Configuración del adaptador para el menú de telegramas", "pl": "Ustawienia adaptera dla menu telegramu", "uk": "Налаштування адаптера для telegram-меню", "zh-cn": "电报菜单的适配器设置"},
64
- "Users from Telegram": { "en": "Users from Telegram", "de": "Benutzer von Telegram", "ru": "Пользователи из Telegram", "pt": "Usuários do Telegram", "nl": "Gebruikers van Telegram", "fr": "Utilisateurs de Telegram", "it": "Utenti di Telegram", "es": "Usuarios de Telegram", "pl": "Użytkownicy Telegrama", "uk": "Користувачі з Telegram", "zh-cn": "来自 Telegram 的用户"},
65
- "Active Menu:": { "en": "Active Menu:", "de": "Aktives Menü:", "ru": "Активное меню:", "pt": "Menu ativo:", "nl": "Actief menu:", "fr": "Menu Actif :", "it": "Menù attivo:", "es": "Menú Activo:", "pl": "aktywne menu:", "uk": "Активне меню:", "zh-cn": "活动菜单:"},
66
+ "At least one user must be checked, or the menu must be deactivated.": {"en": "At least one user must be checked, or the menu must be deactivated.", "de": "Mindestens ein Benutzer muss aktiviert sein oder das Menü muss deaktiviert sein.", "ru": "Должен быть отмечен хотя бы один пользователь, или меню должно быть деактивировано.", "pt": "Pelo menos um usuário deve ser verificado ou o menu deve ser desativado.", "nl": "Er moet minimaal één gebruiker zijn aangevinkt, of het menu moet zijn gedeactiveerd.", "fr": "Au moins un utilisateur doit être coché ou le menu doit être désactivé.", "it": "Almeno un utente deve essere selezionato o il menu deve essere disattivato.", "es": "Se debe marcar al menos un usuario o se debe desactivar el menú.", "pl": "Należy zaznaczyć przynajmniej jednego użytkownika lub dezaktywować menu.", "uk": "Принаймні один користувач повинен бути відмічений, або меню має бути дезактивовано.", "zh-cn": "必须至少检查一名用户,否则必须停用菜单。"},
67
+ "The trigger is allready in use.": { "en": "The trigger is allready in use.", "de": "Der Auslöser ist bereits im Einsatz.", "ru": "Триггер уже используется.", "pt": "O gatilho já está em uso.", "nl": "De trigger is al in gebruik.", "fr": "Le déclencheur est déjà utilisé.", "it": "Il grilletto è già in uso.", "es": "El gatillo ya está en uso.", "pl": "Spust jest już w użyciu.", "uk": "Тригер уже використовується.", "zh-cn": "触发器已准备好使用。"},
66
68
  };
package/io-package.json CHANGED
@@ -1,8 +1,21 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "telegram-menu",
4
- "version": "0.6.2",
4
+ "version": "0.6.3",
5
5
  "news": {
6
+ "0.6.3": {
7
+ "en": "user check, least one user must be checked",
8
+ "de": "benutzerüberprüfung, mindestens ein benutzer muss überprüft werden",
9
+ "ru": "проверка пользователя, хотя бы один пользователь должен быть проверен",
10
+ "pt": "verificação do usuário, pelo menos um usuário deve ser verificado",
11
+ "nl": "eén gebruiker moet gecontroleerd worden",
12
+ "fr": "contrôle utilisateur, le moins d'un utilisateur doit être vérifié",
13
+ "it": "controllo utente, almeno un utente deve essere controllato",
14
+ "es": "control de usuario, al menos un usuario debe ser revisado",
15
+ "pl": "wskaźnik użytkownika musi być sprawdzany przynajmniej jeden użytkownik",
16
+ "uk": "перевірка користувачів, принаймні один користувач повинен перевіряти",
17
+ "zh-cn": "用户检查,至少必须检查一名用户。"
18
+ },
6
19
  "0.6.2": {
7
20
  "en": "Active Menu Output fixed\nchange instance, user will be load from new instance",
8
21
  "de": "Aktive Menüausgabe fest\nänderungsinstanz, benutzer wird aus neuer instanz geladen",
@@ -80,19 +93,6 @@
80
93
  "pl": "menu przełącza ersetzt menu yes-no, on-off, jest możliwe do dostosowania tekstu i wartości z tymi menu",
81
94
  "uk": "меню переключення ersetzt меню так-но, on-off, можна налаштувати текст та значення з цим меню",
82
95
  "zh-cn": "男性转化的男性是双赢的,有可能使文本和价值与这一男人定制。"
83
- },
84
- "0.4.1": {
85
- "en": "Return text for submenus adjusted",
86
- "de": "Rückgabetext für submenus angepasst",
87
- "ru": "Вернуться текст для подменю скорректирован",
88
- "pt": "Texto de retorno para submenus ajustado",
89
- "nl": "Een terugkeer sms voor submenus aangepast",
90
- "fr": "Texte de retour pour les sous-menus ajustés",
91
- "it": "Testo di ritorno per submenus regolato",
92
- "es": "Texto de retorno para submenú ajustado",
93
- "pl": "Powtórne teksty do podmenu poprawiły",
94
- "uk": "Повернення тексту для підменю",
95
- "zh-cn": "调整的分遣案文"
96
96
  }
97
97
  },
98
98
  "titleLang": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.telegram-menu",
3
- "version": "0.6.2",
3
+ "version": "0.6.3",
4
4
  "description": "Easily create Telegram Menus",
5
5
  "author": {
6
6
  "name": "MiRo1310",