From f339727d607bf7ba87b522ab633422d06b97d4c0 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 1 Dec 2024 20:38:26 +0100 Subject: [PATCH] Adding indexmenu version 2024-01-05 (ed06f21). Signed-off-by: Daniel Baumann --- .../indexmenu/.github/workflows/dokuwiki.yml | 11 + plugins/55/indexmenu/COPYING | 340 + plugins/55/indexmenu/CREDITS | 64 + plugins/55/indexmenu/README | 7 + plugins/55/indexmenu/Search.php | 858 + plugins/55/indexmenu/_test/ActionTest.php | 35 + .../55/indexmenu/_test/AjaxRequestsTest.php | 345 + plugins/55/indexmenu/_test/GeneralTest.php | 86 + .../indexmenu/_test/IndexmenuSyntaxTest.php | 353 + plugins/55/indexmenu/action.php | 559 + plugins/55/indexmenu/ajax.php | 85 + plugins/55/indexmenu/all.less | 44 + plugins/55/indexmenu/conf/default.php | 21 + plugins/55/indexmenu/conf/metadata.php | 21 + .../55/indexmenu/images/bj-tango.png/base.png | Bin 0 -> 606 bytes .../indexmenu/images/bj-tango.png/empty.png | Bin 0 -> 157 bytes .../indexmenu/images/bj-tango.png/folder.png | Bin 0 -> 498 bytes .../indexmenu/images/bj-tango.png/folderh.png | Bin 0 -> 528 bytes .../images/bj-tango.png/folderhopen.png | Bin 0 -> 537 bytes .../images/bj-tango.png/folderopen.png | Bin 0 -> 523 bytes .../55/indexmenu/images/bj-tango.png/info.txt | 3 + .../55/indexmenu/images/bj-tango.png/join.png | Bin 0 -> 131 bytes .../images/bj-tango.png/joinbottom.png | Bin 0 -> 132 bytes .../55/indexmenu/images/bj-tango.png/line.png | Bin 0 -> 128 bytes .../indexmenu/images/bj-tango.png/minus.png | Bin 0 -> 171 bytes .../images/bj-tango.png/minusbottom.png | Bin 0 -> 167 bytes .../images/bj-tango.png/nolines_minus.png | Bin 0 -> 144 bytes .../images/bj-tango.png/nolines_plus.png | Bin 0 -> 160 bytes .../55/indexmenu/images/bj-tango.png/page.png | Bin 0 -> 333 bytes .../55/indexmenu/images/bj-tango.png/plus.png | Bin 0 -> 183 bytes .../images/bj-tango.png/plusbottom.png | Bin 0 -> 183 bytes .../indexmenu/images/bj_ubuntu.png/base.png | Bin 0 -> 525 bytes .../indexmenu/images/bj_ubuntu.png/empty.png | Bin 0 -> 157 bytes .../indexmenu/images/bj_ubuntu.png/folder.png | Bin 0 -> 498 bytes .../images/bj_ubuntu.png/folderh.png | Bin 0 -> 537 bytes .../images/bj_ubuntu.png/folderhopen.png | Bin 0 -> 523 bytes .../images/bj_ubuntu.png/folderopen.png | Bin 0 -> 523 bytes .../indexmenu/images/bj_ubuntu.png/info.txt | 3 + .../indexmenu/images/bj_ubuntu.png/join.png | Bin 0 -> 131 bytes .../images/bj_ubuntu.png/joinbottom.png | Bin 0 -> 132 bytes .../indexmenu/images/bj_ubuntu.png/line.png | Bin 0 -> 128 bytes .../indexmenu/images/bj_ubuntu.png/minus.png | Bin 0 -> 171 bytes .../images/bj_ubuntu.png/minusbottom.png | Bin 0 -> 167 bytes .../images/bj_ubuntu.png/nolines_minus.png | Bin 0 -> 144 bytes .../images/bj_ubuntu.png/nolines_plus.png | Bin 0 -> 160 bytes .../indexmenu/images/bj_ubuntu.png/page.png | Bin 0 -> 333 bytes .../indexmenu/images/bj_ubuntu.png/plus.png | Bin 0 -> 183 bytes .../images/bj_ubuntu.png/plusbottom.png | Bin 0 -> 183 bytes plugins/55/indexmenu/images/bw.png/base.png | Bin 0 -> 3241 bytes plugins/55/indexmenu/images/bw.png/empty.png | Bin 0 -> 183 bytes plugins/55/indexmenu/images/bw.png/folder.png | Bin 0 -> 3116 bytes .../55/indexmenu/images/bw.png/folderh.png | Bin 0 -> 3197 bytes .../indexmenu/images/bw.png/folderhopen.png | Bin 0 -> 399 bytes .../55/indexmenu/images/bw.png/folderopen.png | Bin 0 -> 3203 bytes plugins/55/indexmenu/images/bw.png/info.txt | 2 + plugins/55/indexmenu/images/bw.png/join.png | Bin 0 -> 201 bytes .../55/indexmenu/images/bw.png/joinbottom.png | Bin 0 -> 204 bytes plugins/55/indexmenu/images/bw.png/line.png | Bin 0 -> 198 bytes plugins/55/indexmenu/images/bw.png/minus.png | Bin 0 -> 234 bytes .../indexmenu/images/bw.png/minusbottom.png | Bin 0 -> 235 bytes .../indexmenu/images/bw.png/nolines_minus.png | Bin 0 -> 207 bytes .../indexmenu/images/bw.png/nolines_plus.png | Bin 0 -> 212 bytes plugins/55/indexmenu/images/bw.png/page.png | Bin 0 -> 3212 bytes plugins/55/indexmenu/images/bw.png/plus.png | Bin 0 -> 243 bytes .../55/indexmenu/images/bw.png/plusbottom.png | Bin 0 -> 242 bytes plugins/55/indexmenu/images/close.gif | Bin 0 -> 64 bytes .../images/contis_tango.png/base.png | Bin 0 -> 440 bytes .../images/contis_tango.png/empty.png | Bin 0 -> 157 bytes .../images/contis_tango.png/folder.png | Bin 0 -> 417 bytes .../images/contis_tango.png/folderh.png | Bin 0 -> 440 bytes .../images/contis_tango.png/folderhopen.png | Bin 0 -> 438 bytes .../images/contis_tango.png/folderopen.png | Bin 0 -> 438 bytes .../images/contis_tango.png/info.txt | 3 + .../images/contis_tango.png/join.png | Bin 0 -> 131 bytes .../images/contis_tango.png/joinbottom.png | Bin 0 -> 132 bytes .../images/contis_tango.png/line.png | Bin 0 -> 128 bytes .../images/contis_tango.png/minus.png | Bin 0 -> 171 bytes .../images/contis_tango.png/minusbottom.png | Bin 0 -> 167 bytes .../images/contis_tango.png/nolines_minus.png | Bin 0 -> 144 bytes .../images/contis_tango.png/nolines_plus.png | Bin 0 -> 160 bytes .../images/contis_tango.png/page.png | Bin 0 -> 333 bytes .../images/contis_tango.png/plus.png | Bin 0 -> 183 bytes .../images/contis_tango.png/plusbottom.png | Bin 0 -> 183 bytes plugins/55/indexmenu/images/default/base.gif | Bin 0 -> 578 bytes plugins/55/indexmenu/images/default/empty.gif | Bin 0 -> 62 bytes .../55/indexmenu/images/default/folder.gif | Bin 0 -> 352 bytes .../55/indexmenu/images/default/folderh.gif | Bin 0 -> 572 bytes .../indexmenu/images/default/folderhopen.gif | Bin 0 -> 577 bytes .../indexmenu/images/default/folderopen.gif | Bin 0 -> 354 bytes plugins/55/indexmenu/images/default/info.txt | 2 + plugins/55/indexmenu/images/default/join.gif | Bin 0 -> 69 bytes .../indexmenu/images/default/joinbottom.gif | Bin 0 -> 66 bytes plugins/55/indexmenu/images/default/line.gif | Bin 0 -> 66 bytes plugins/55/indexmenu/images/default/minus.gif | Bin 0 -> 86 bytes .../indexmenu/images/default/minusbottom.gif | Bin 0 -> 85 bytes .../images/default/nolines_minus.gif | Bin 0 -> 861 bytes .../indexmenu/images/default/nolines_plus.gif | Bin 0 -> 870 bytes plugins/55/indexmenu/images/default/page.gif | Bin 0 -> 565 bytes plugins/55/indexmenu/images/default/plus.gif | Bin 0 -> 89 bytes .../indexmenu/images/default/plusbottom.gif | Bin 0 -> 88 bytes plugins/55/indexmenu/images/doku/base.gif | Bin 0 -> 54 bytes plugins/55/indexmenu/images/doku/empty.gif | Bin 0 -> 62 bytes plugins/55/indexmenu/images/doku/folder.gif | Bin 0 -> 54 bytes plugins/55/indexmenu/images/doku/folderh.gif | Bin 0 -> 54 bytes .../55/indexmenu/images/doku/folderhopen.gif | Bin 0 -> 54 bytes .../55/indexmenu/images/doku/folderopen.gif | Bin 0 -> 54 bytes plugins/55/indexmenu/images/doku/info.txt | 2 + plugins/55/indexmenu/images/doku/join.gif | Bin 0 -> 62 bytes .../55/indexmenu/images/doku/joinbottom.gif | Bin 0 -> 62 bytes plugins/55/indexmenu/images/doku/line.gif | Bin 0 -> 62 bytes plugins/55/indexmenu/images/doku/minus.gif | Bin 0 -> 62 bytes .../55/indexmenu/images/doku/minusbottom.gif | Bin 0 -> 62 bytes .../indexmenu/images/doku/nolines_minus.gif | Bin 0 -> 62 bytes .../55/indexmenu/images/doku/nolines_plus.gif | Bin 0 -> 62 bytes plugins/55/indexmenu/images/doku/page.gif | Bin 0 -> 50 bytes plugins/55/indexmenu/images/doku/plus.gif | Bin 0 -> 62 bytes .../55/indexmenu/images/doku/plusbottom.gif | Bin 0 -> 62 bytes plugins/55/indexmenu/images/doku2/Thumbs.db | Bin 0 -> 7168 bytes plugins/55/indexmenu/images/doku2/base.gif | Bin 0 -> 810 bytes plugins/55/indexmenu/images/doku2/empty.gif | Bin 0 -> 62 bytes plugins/55/indexmenu/images/doku2/folder.gif | Bin 0 -> 810 bytes plugins/55/indexmenu/images/doku2/folderh.gif | Bin 0 -> 810 bytes .../55/indexmenu/images/doku2/folderhopen.gif | Bin 0 -> 810 bytes .../55/indexmenu/images/doku2/folderopen.gif | Bin 0 -> 810 bytes plugins/55/indexmenu/images/doku2/info.txt | 2 + plugins/55/indexmenu/images/doku2/join.gif | Bin 0 -> 62 bytes .../55/indexmenu/images/doku2/joinbottom.gif | Bin 0 -> 62 bytes plugins/55/indexmenu/images/doku2/line.gif | Bin 0 -> 62 bytes plugins/55/indexmenu/images/doku2/minus.gif | Bin 0 -> 852 bytes .../55/indexmenu/images/doku2/minusbottom.gif | Bin 0 -> 852 bytes .../indexmenu/images/doku2/nolines_minus.gif | Bin 0 -> 861 bytes .../indexmenu/images/doku2/nolines_plus.gif | Bin 0 -> 870 bytes plugins/55/indexmenu/images/doku2/page.gif | Bin 0 -> 810 bytes plugins/55/indexmenu/images/doku2/plus.gif | Bin 0 -> 855 bytes .../55/indexmenu/images/doku2/plusbottom.gif | Bin 0 -> 855 bytes plugins/55/indexmenu/images/doku2/style.css | 19 + plugins/55/indexmenu/images/drktheme/base.gif | Bin 0 -> 139 bytes .../55/indexmenu/images/drktheme/empty.gif | Bin 0 -> 62 bytes .../55/indexmenu/images/drktheme/folder.gif | Bin 0 -> 190 bytes .../55/indexmenu/images/drktheme/folderh.gif | Bin 0 -> 190 bytes .../indexmenu/images/drktheme/folderhopen.gif | Bin 0 -> 197 bytes .../indexmenu/images/drktheme/folderopen.gif | Bin 0 -> 197 bytes plugins/55/indexmenu/images/drktheme/info.txt | 3 + plugins/55/indexmenu/images/drktheme/join.gif | Bin 0 -> 166 bytes .../indexmenu/images/drktheme/joinbottom.gif | Bin 0 -> 158 bytes plugins/55/indexmenu/images/drktheme/line.gif | Bin 0 -> 162 bytes .../55/indexmenu/images/drktheme/minus.gif | Bin 0 -> 91 bytes .../indexmenu/images/drktheme/minusbottom.gif | Bin 0 -> 89 bytes .../images/drktheme/nolines_minus.gif | Bin 0 -> 861 bytes .../images/drktheme/nolines_plus.gif | Bin 0 -> 870 bytes plugins/55/indexmenu/images/drktheme/page.gif | Bin 0 -> 565 bytes plugins/55/indexmenu/images/drktheme/plus.gif | Bin 0 -> 94 bytes .../indexmenu/images/drktheme/plusbottom.gif | Bin 0 -> 90 bytes .../55/indexmenu/images/drktheme/style.css | 7 + .../55/indexmenu/images/dryoo.png/base.png | Bin 0 -> 701 bytes .../55/indexmenu/images/dryoo.png/empty.png | Bin 0 -> 157 bytes .../55/indexmenu/images/dryoo.png/folder.png | Bin 0 -> 724 bytes .../55/indexmenu/images/dryoo.png/folderh.png | Bin 0 -> 731 bytes .../images/dryoo.png/folderhopen.png | Bin 0 -> 735 bytes .../indexmenu/images/dryoo.png/folderopen.png | Bin 0 -> 733 bytes .../55/indexmenu/images/dryoo.png/info.txt | 2 + .../55/indexmenu/images/dryoo.png/join.png | Bin 0 -> 131 bytes .../indexmenu/images/dryoo.png/joinbottom.png | Bin 0 -> 132 bytes .../55/indexmenu/images/dryoo.png/line.png | Bin 0 -> 128 bytes .../55/indexmenu/images/dryoo.png/minus.png | Bin 0 -> 171 bytes .../images/dryoo.png/minusbottom.png | Bin 0 -> 167 bytes .../images/dryoo.png/nolines_minus.png | Bin 0 -> 144 bytes .../images/dryoo.png/nolines_plus.png | Bin 0 -> 160 bytes .../55/indexmenu/images/dryoo.png/page.png | Bin 0 -> 733 bytes .../55/indexmenu/images/dryoo.png/plus.png | Bin 0 -> 183 bytes .../indexmenu/images/dryoo.png/plusbottom.png | Bin 0 -> 183 bytes plugins/55/indexmenu/images/empty.gif | Bin 0 -> 275 bytes .../55/indexmenu/images/gnome.png/base.png | Bin 0 -> 525 bytes .../55/indexmenu/images/gnome.png/empty.png | Bin 0 -> 157 bytes .../55/indexmenu/images/gnome.png/folder.png | Bin 0 -> 479 bytes .../55/indexmenu/images/gnome.png/folderh.png | Bin 0 -> 588 bytes .../images/gnome.png/folderhopen.png | Bin 0 -> 533 bytes .../indexmenu/images/gnome.png/folderopen.png | Bin 0 -> 533 bytes .../55/indexmenu/images/gnome.png/info.txt | 3 + .../55/indexmenu/images/gnome.png/join.png | Bin 0 -> 131 bytes .../indexmenu/images/gnome.png/joinbottom.png | Bin 0 -> 132 bytes .../55/indexmenu/images/gnome.png/line.png | Bin 0 -> 128 bytes .../55/indexmenu/images/gnome.png/minus.png | Bin 0 -> 171 bytes .../images/gnome.png/minusbottom.png | Bin 0 -> 167 bytes .../images/gnome.png/nolines_minus.png | Bin 0 -> 144 bytes .../images/gnome.png/nolines_plus.png | Bin 0 -> 160 bytes .../55/indexmenu/images/gnome.png/page.png | Bin 0 -> 333 bytes .../55/indexmenu/images/gnome.png/plus.png | Bin 0 -> 183 bytes .../indexmenu/images/gnome.png/plusbottom.png | Bin 0 -> 183 bytes .../55/indexmenu/images/human.png/base.png | Bin 0 -> 776 bytes .../55/indexmenu/images/human.png/empty.png | Bin 0 -> 157 bytes .../55/indexmenu/images/human.png/folder.png | Bin 0 -> 674 bytes .../55/indexmenu/images/human.png/folderh.png | Bin 0 -> 962 bytes .../images/human.png/folderhopen.png | Bin 0 -> 883 bytes .../indexmenu/images/human.png/folderopen.png | Bin 0 -> 733 bytes .../55/indexmenu/images/human.png/info.txt | 3 + .../55/indexmenu/images/human.png/join.png | Bin 0 -> 131 bytes .../indexmenu/images/human.png/joinbottom.png | Bin 0 -> 132 bytes .../55/indexmenu/images/human.png/line.png | Bin 0 -> 128 bytes .../55/indexmenu/images/human.png/minus.png | Bin 0 -> 171 bytes .../images/human.png/minusbottom.png | Bin 0 -> 167 bytes .../images/human.png/nolines_minus.png | Bin 0 -> 144 bytes .../images/human.png/nolines_plus.png | Bin 0 -> 160 bytes .../55/indexmenu/images/human.png/page.png | Bin 0 -> 333 bytes .../55/indexmenu/images/human.png/plus.png | Bin 0 -> 183 bytes .../indexmenu/images/human.png/plusbottom.png | Bin 0 -> 183 bytes .../55/indexmenu/images/human.png/style.css | 35 + .../images/icons8metrobw.png/base.png | Bin 0 -> 394 bytes .../images/icons8metrobw.png/empty.png | Bin 0 -> 183 bytes .../images/icons8metrobw.png/folder.png | Bin 0 -> 319 bytes .../images/icons8metrobw.png/folderh.png | Bin 0 -> 433 bytes .../images/icons8metrobw.png/folderhopen.png | Bin 0 -> 602 bytes .../images/icons8metrobw.png/folderopen.png | Bin 0 -> 439 bytes .../images/icons8metrobw.png/info.txt | 3 + .../images/icons8metrobw.png/join.png | Bin 0 -> 183 bytes .../images/icons8metrobw.png/joinbottom.png | Bin 0 -> 183 bytes .../images/icons8metrobw.png/line.png | Bin 0 -> 183 bytes .../images/icons8metrobw.png/minus.png | Bin 0 -> 290 bytes .../images/icons8metrobw.png/minusbottom.png | Bin 0 -> 290 bytes .../icons8metrobw.png/nolines_minus.png | Bin 0 -> 290 bytes .../images/icons8metrobw.png/nolines_plus.png | Bin 0 -> 327 bytes .../images/icons8metrobw.png/page.png | Bin 0 -> 527 bytes .../images/icons8metrobw.png/plus.png | Bin 0 -> 327 bytes .../images/icons8metrobw.png/plusbottom.png | Bin 0 -> 327 bytes .../indexmenu/images/icons8w10bw.png/base.png | Bin 0 -> 357 bytes .../images/icons8w10bw.png/empty.png | Bin 0 -> 183 bytes .../images/icons8w10bw.png/folder.png | Bin 0 -> 237 bytes .../images/icons8w10bw.png/folderh.png | Bin 0 -> 237 bytes .../images/icons8w10bw.png/folderhopen.png | Bin 0 -> 378 bytes .../images/icons8w10bw.png/folderopen.png | Bin 0 -> 341 bytes .../indexmenu/images/icons8w10bw.png/info.txt | 3 + .../indexmenu/images/icons8w10bw.png/join.png | Bin 0 -> 201 bytes .../images/icons8w10bw.png/joinbottom.png | Bin 0 -> 204 bytes .../indexmenu/images/icons8w10bw.png/line.png | Bin 0 -> 198 bytes .../images/icons8w10bw.png/minus.png | Bin 0 -> 234 bytes .../images/icons8w10bw.png/minusbottom.png | Bin 0 -> 235 bytes .../images/icons8w10bw.png/nolines_minus.png | Bin 0 -> 207 bytes .../images/icons8w10bw.png/nolines_plus.png | Bin 0 -> 212 bytes .../indexmenu/images/icons8w10bw.png/page.png | Bin 0 -> 295 bytes .../indexmenu/images/icons8w10bw.png/plus.png | Bin 0 -> 243 bytes .../images/icons8w10bw.png/plusbottom.png | Bin 0 -> 242 bytes .../55/indexmenu/images/indexmenu_toolbar.png | Bin 0 -> 726 bytes .../55/indexmenu/images/indextheme/base.gif | Bin 0 -> 530 bytes .../55/indexmenu/images/indextheme/empty.gif | Bin 0 -> 62 bytes .../55/indexmenu/images/indextheme/folder.gif | Bin 0 -> 596 bytes .../indexmenu/images/indextheme/folderh.gif | Bin 0 -> 596 bytes .../images/indextheme/folderhopen.gif | Bin 0 -> 537 bytes .../images/indextheme/folderopen.gif | Bin 0 -> 537 bytes .../55/indexmenu/images/indextheme/info.txt | 2 + .../55/indexmenu/images/indextheme/join.gif | Bin 0 -> 75 bytes .../images/indextheme/joinbottom.gif | Bin 0 -> 72 bytes .../55/indexmenu/images/indextheme/line.gif | Bin 0 -> 72 bytes .../55/indexmenu/images/indextheme/minus.gif | Bin 0 -> 276 bytes .../images/indextheme/minusbottom.gif | Bin 0 -> 274 bytes .../55/indexmenu/images/indextheme/page.gif | Bin 0 -> 635 bytes .../55/indexmenu/images/indextheme/plus.gif | Bin 0 -> 278 bytes .../images/indextheme/plusbottom.gif | Bin 0 -> 275 bytes plugins/55/indexmenu/images/kde.png/base.png | Bin 0 -> 935 bytes plugins/55/indexmenu/images/kde.png/empty.png | Bin 0 -> 157 bytes .../55/indexmenu/images/kde.png/folder.png | Bin 0 -> 938 bytes .../55/indexmenu/images/kde.png/folderh.png | Bin 0 -> 938 bytes .../indexmenu/images/kde.png/folderhopen.png | Bin 0 -> 930 bytes .../indexmenu/images/kde.png/folderopen.png | Bin 0 -> 934 bytes plugins/55/indexmenu/images/kde.png/info.txt | 3 + plugins/55/indexmenu/images/kde.png/join.png | Bin 0 -> 146 bytes .../indexmenu/images/kde.png/joinbottom.png | Bin 0 -> 146 bytes plugins/55/indexmenu/images/kde.png/line.png | Bin 0 -> 141 bytes plugins/55/indexmenu/images/kde.png/minus.png | Bin 0 -> 3638 bytes .../indexmenu/images/kde.png/minusbottom.png | Bin 0 -> 3638 bytes .../images/kde.png/nolines_minus.png | Bin 0 -> 3623 bytes .../indexmenu/images/kde.png/nolines_plus.png | Bin 0 -> 3627 bytes plugins/55/indexmenu/images/kde.png/page.png | Bin 0 -> 900 bytes plugins/55/indexmenu/images/kde.png/plus.png | Bin 0 -> 3641 bytes .../indexmenu/images/kde.png/plusbottom.png | Bin 0 -> 3641 bytes plugins/55/indexmenu/images/kde/base.gif | Bin 0 -> 1092 bytes plugins/55/indexmenu/images/kde/empty.gif | Bin 0 -> 56 bytes plugins/55/indexmenu/images/kde/folder.gif | Bin 0 -> 1089 bytes plugins/55/indexmenu/images/kde/folderh.gif | Bin 0 -> 1089 bytes .../55/indexmenu/images/kde/folderhopen.gif | Bin 0 -> 1088 bytes .../55/indexmenu/images/kde/folderopen.gif | Bin 0 -> 1091 bytes plugins/55/indexmenu/images/kde/info.txt | 2 + plugins/55/indexmenu/images/kde/join.gif | Bin 0 -> 75 bytes .../55/indexmenu/images/kde/joinbottom.gif | Bin 0 -> 72 bytes plugins/55/indexmenu/images/kde/line.gif | Bin 0 -> 72 bytes plugins/55/indexmenu/images/kde/minus.gif | Bin 0 -> 108 bytes .../55/indexmenu/images/kde/minusbottom.gif | Bin 0 -> 106 bytes .../55/indexmenu/images/kde/nolines_minus.gif | Bin 0 -> 98 bytes .../55/indexmenu/images/kde/nolines_plus.gif | Bin 0 -> 102 bytes plugins/55/indexmenu/images/kde/page.gif | Bin 0 -> 662 bytes plugins/55/indexmenu/images/kde/plus.gif | Bin 0 -> 111 bytes .../55/indexmenu/images/kde/plusbottom.gif | Bin 0 -> 110 bytes plugins/55/indexmenu/images/kgs/base.gif | Bin 0 -> 1031 bytes plugins/55/indexmenu/images/kgs/empty.gif | Bin 0 -> 62 bytes plugins/55/indexmenu/images/kgs/folder.gif | Bin 0 -> 952 bytes plugins/55/indexmenu/images/kgs/folderh.gif | Bin 0 -> 952 bytes .../55/indexmenu/images/kgs/folderhopen.gif | Bin 0 -> 952 bytes .../55/indexmenu/images/kgs/folderopen.gif | Bin 0 -> 956 bytes plugins/55/indexmenu/images/kgs/info.txt | 2 + plugins/55/indexmenu/images/kgs/join.gif | Bin 0 -> 850 bytes .../55/indexmenu/images/kgs/joinbottom.gif | Bin 0 -> 844 bytes plugins/55/indexmenu/images/kgs/line.gif | Bin 0 -> 846 bytes plugins/55/indexmenu/images/kgs/minus.gif | Bin 0 -> 908 bytes .../55/indexmenu/images/kgs/minusbottom.gif | Bin 0 -> 905 bytes .../55/indexmenu/images/kgs/nolines_minus.gif | Bin 0 -> 898 bytes .../55/indexmenu/images/kgs/nolines_plus.gif | Bin 0 -> 900 bytes plugins/55/indexmenu/images/kgs/page.gif | Bin 0 -> 3775 bytes plugins/55/indexmenu/images/kgs/plus.gif | Bin 0 -> 910 bytes .../55/indexmenu/images/kgs/plusbottom.gif | Bin 0 -> 907 bytes plugins/55/indexmenu/images/larrow.gif | Bin 0 -> 1829 bytes .../55/indexmenu/images/leopard.png/base.png | Bin 0 -> 886 bytes .../indexmenu/images/leopard.png/base_1.png | Bin 0 -> 3400 bytes .../indexmenu/images/leopard.png/base_2.png | Bin 0 -> 77214 bytes .../55/indexmenu/images/leopard.png/empty.png | Bin 0 -> 157 bytes .../indexmenu/images/leopard.png/folder.png | Bin 0 -> 3295 bytes .../indexmenu/images/leopard.png/folderh.png | Bin 0 -> 3387 bytes .../images/leopard.png/folderhopen.png | Bin 0 -> 3295 bytes .../images/leopard.png/folderopen.png | Bin 0 -> 3295 bytes .../55/indexmenu/images/leopard.png/info.txt | 3 + .../55/indexmenu/images/leopard.png/join.png | Bin 0 -> 131 bytes .../images/leopard.png/joinbottom.png | Bin 0 -> 132 bytes .../55/indexmenu/images/leopard.png/line.png | Bin 0 -> 128 bytes .../55/indexmenu/images/leopard.png/minus.png | Bin 0 -> 171 bytes .../images/leopard.png/minusbottom.png | Bin 0 -> 167 bytes .../images/leopard.png/nolines_minus.png | Bin 0 -> 144 bytes .../images/leopard.png/nolines_plus.png | Bin 0 -> 160 bytes .../55/indexmenu/images/leopard.png/page.png | Bin 0 -> 333 bytes .../55/indexmenu/images/leopard.png/plus.png | Bin 0 -> 183 bytes .../images/leopard.png/plusbottom.png | Bin 0 -> 183 bytes plugins/55/indexmenu/images/msort.gif | Bin 0 -> 420 bytes .../55/indexmenu/images/pcc_dotted/base.gif | Bin 0 -> 807 bytes .../55/indexmenu/images/pcc_dotted/empty.gif | Bin 0 -> 62 bytes .../55/indexmenu/images/pcc_dotted/folder.gif | Bin 0 -> 807 bytes .../indexmenu/images/pcc_dotted/folderh.gif | Bin 0 -> 807 bytes .../images/pcc_dotted/folderhopen.gif | Bin 0 -> 807 bytes .../images/pcc_dotted/folderopen.gif | Bin 0 -> 807 bytes .../55/indexmenu/images/pcc_dotted/info.txt | 3 + .../55/indexmenu/images/pcc_dotted/join.gif | Bin 0 -> 69 bytes .../images/pcc_dotted/joinbottom.gif | Bin 0 -> 66 bytes .../55/indexmenu/images/pcc_dotted/line.gif | Bin 0 -> 66 bytes .../55/indexmenu/images/pcc_dotted/minus.gif | Bin 0 -> 127 bytes .../images/pcc_dotted/minusbottom.gif | Bin 0 -> 125 bytes .../images/pcc_dotted/nolines_minus.gif | Bin 0 -> 861 bytes .../images/pcc_dotted/nolines_plus.gif | Bin 0 -> 870 bytes .../55/indexmenu/images/pcc_dotted/page.gif | Bin 0 -> 807 bytes .../55/indexmenu/images/pcc_dotted/plus.gif | Bin 0 -> 130 bytes .../images/pcc_dotted/plusbottom.gif | Bin 0 -> 129 bytes .../55/indexmenu/images/phoenity.png/base.png | Bin 0 -> 791 bytes .../indexmenu/images/phoenity.png/empty.png | Bin 0 -> 157 bytes .../indexmenu/images/phoenity.png/favicon.ico | Bin 0 -> 2238 bytes .../indexmenu/images/phoenity.png/folder.png | Bin 0 -> 629 bytes .../images/phoenity.png/folder_open_file.png | Bin 0 -> 817 bytes .../images/phoenity.png/folder_right.png | Bin 0 -> 813 bytes .../indexmenu/images/phoenity.png/folderh.png | Bin 0 -> 783 bytes .../images/phoenity.png/folderhopen.png | Bin 0 -> 653 bytes .../images/phoenity.png/folderopen.png | Bin 0 -> 653 bytes .../images/phoenity.png/home_house.png | Bin 0 -> 1130 bytes .../55/indexmenu/images/phoenity.png/info.txt | 3 + .../55/indexmenu/images/phoenity.png/join.png | Bin 0 -> 131 bytes .../images/phoenity.png/joinbottom.png | Bin 0 -> 132 bytes .../55/indexmenu/images/phoenity.png/line.png | Bin 0 -> 128 bytes .../indexmenu/images/phoenity.png/minus.png | Bin 0 -> 171 bytes .../images/phoenity.png/minusbottom.png | Bin 0 -> 167 bytes .../images/phoenity.png/new_page.png | Bin 0 -> 551 bytes .../images/phoenity.png/nolines_minus.png | Bin 0 -> 144 bytes .../images/phoenity.png/nolines_plus.png | Bin 0 -> 160 bytes .../55/indexmenu/images/phoenity.png/page.png | Bin 0 -> 612 bytes .../55/indexmenu/images/phoenity.png/plus.png | Bin 0 -> 183 bytes .../images/phoenity.png/plusbottom.png | Bin 0 -> 183 bytes .../images/phoenity.png/toc_bullet.gif | Bin 0 -> 528 bytes .../images/phoenity.png/toc_bullet_red.gif | Bin 0 -> 314 bytes .../images/phoenity.png/web_earth.png | Bin 0 -> 1589 bytes .../indexmenu/images/prdsuser-de.png/base.png | Bin 0 -> 523 bytes .../images/prdsuser-de.png/empty.png | Bin 0 -> 157 bytes .../images/prdsuser-de.png/folder.png | Bin 0 -> 611 bytes .../images/prdsuser-de.png/folderh.png | Bin 0 -> 611 bytes .../images/prdsuser-de.png/folderhopen.png | Bin 0 -> 366 bytes .../images/prdsuser-de.png/folderopen.png | Bin 0 -> 366 bytes .../indexmenu/images/prdsuser-de.png/info.txt | 3 + .../indexmenu/images/prdsuser-de.png/join.png | Bin 0 -> 146 bytes .../images/prdsuser-de.png/joinbottom.png | Bin 0 -> 146 bytes .../indexmenu/images/prdsuser-de.png/line.png | Bin 0 -> 141 bytes .../images/prdsuser-de.png/minus.png | Bin 0 -> 3638 bytes .../images/prdsuser-de.png/minusbottom.png | Bin 0 -> 3638 bytes .../images/prdsuser-de.png/nolines_minus.png | Bin 0 -> 3623 bytes .../images/prdsuser-de.png/nolines_plus.png | Bin 0 -> 3627 bytes .../indexmenu/images/prdsuser-de.png/page.png | Bin 0 -> 318 bytes .../indexmenu/images/prdsuser-de.png/plus.png | Bin 0 -> 3641 bytes .../images/prdsuser-de.png/plusbottom.png | Bin 0 -> 3641 bytes plugins/55/indexmenu/images/rarrow.gif | Bin 0 -> 81 bytes .../55/indexmenu/images/repository/.htaccess | 3 + .../images/repository/bj-tango.png.zip | Bin 0 -> 6730 bytes .../images/repository/bj_ubuntu.png.zip | Bin 0 -> 6677 bytes .../indexmenu/images/repository/default.zip | Bin 0 -> 5218 bytes .../55/indexmenu/images/repository/doku.zip | Bin 0 -> 2823 bytes .../indexmenu/images/repository/drktheme.zip | Bin 0 -> 4530 bytes .../indexmenu/images/repository/dryoo.png.zip | Bin 0 -> 7958 bytes .../indexmenu/images/repository/gnome.png.zip | Bin 0 -> 6594 bytes .../indexmenu/images/repository/human.png.zip | Bin 0 -> 8216 bytes .../images/repository/indextheme.zip | Bin 0 -> 6667 bytes .../indexmenu/images/repository/kde.png.zip | Bin 0 -> 29511 bytes .../55/indexmenu/images/repository/kde.zip | Bin 0 -> 7201 bytes .../55/indexmenu/images/repository/kgs.zip | Bin 0 -> 8677 bytes .../images/repository/leopard.png.zip | Bin 0 -> 46319 bytes .../images/repository/pcc_dotted.zip | Bin 0 -> 4313 bytes .../images/repository/phoenity.png.zip | Bin 0 -> 14961 bytes .../images/repository/prdsuser-de.png.zip | Bin 0 -> 27421 bytes .../images/repository/shiki_brave.png.zip | Bin 0 -> 6938 bytes .../55/indexmenu/images/repository/simple.zip | Bin 0 -> 4962 bytes .../indexmenu/images/repository/tango.png.zip | Bin 0 -> 8752 bytes .../55/indexmenu/images/repository/thread.zip | Bin 0 -> 3101 bytes .../indexmenu/images/repository/thread2.zip | Bin 0 -> 3704 bytes .../indexmenu/images/repository/vista.png.zip | Bin 0 -> 7819 bytes .../indexmenu/images/shiki_brave.png/base.png | Bin 0 -> 604 bytes .../images/shiki_brave.png/empty.png | Bin 0 -> 157 bytes .../images/shiki_brave.png/folder.png | Bin 0 -> 462 bytes .../images/shiki_brave.png/folderh.png | Bin 0 -> 572 bytes .../images/shiki_brave.png/folderhopen.png | Bin 0 -> 573 bytes .../images/shiki_brave.png/folderopen.png | Bin 0 -> 573 bytes .../indexmenu/images/shiki_brave.png/info.txt | 3 + .../indexmenu/images/shiki_brave.png/join.png | Bin 0 -> 131 bytes .../images/shiki_brave.png/joinbottom.png | Bin 0 -> 132 bytes .../indexmenu/images/shiki_brave.png/line.png | Bin 0 -> 128 bytes .../images/shiki_brave.png/minus.png | Bin 0 -> 171 bytes .../images/shiki_brave.png/minusbottom.png | Bin 0 -> 167 bytes .../images/shiki_brave.png/nolines_minus.png | Bin 0 -> 144 bytes .../images/shiki_brave.png/nolines_plus.png | Bin 0 -> 160 bytes .../indexmenu/images/shiki_brave.png/page.png | Bin 0 -> 333 bytes .../indexmenu/images/shiki_brave.png/plus.png | Bin 0 -> 183 bytes .../images/shiki_brave.png/plusbottom.png | Bin 0 -> 183 bytes plugins/55/indexmenu/images/simple/base.gif | Bin 0 -> 577 bytes plugins/55/indexmenu/images/simple/empty.gif | Bin 0 -> 62 bytes plugins/55/indexmenu/images/simple/folder.gif | Bin 0 -> 352 bytes .../55/indexmenu/images/simple/folderh.gif | Bin 0 -> 352 bytes .../indexmenu/images/simple/folderhopen.gif | Bin 0 -> 354 bytes .../55/indexmenu/images/simple/folderopen.gif | Bin 0 -> 354 bytes plugins/55/indexmenu/images/simple/info.txt | 2 + plugins/55/indexmenu/images/simple/join.gif | Bin 0 -> 69 bytes .../55/indexmenu/images/simple/joinbottom.gif | Bin 0 -> 66 bytes plugins/55/indexmenu/images/simple/line.gif | Bin 0 -> 66 bytes plugins/55/indexmenu/images/simple/minus.gif | Bin 0 -> 86 bytes .../indexmenu/images/simple/minusbottom.gif | Bin 0 -> 85 bytes .../indexmenu/images/simple/nolines_minus.gif | Bin 0 -> 861 bytes .../indexmenu/images/simple/nolines_plus.gif | Bin 0 -> 870 bytes plugins/55/indexmenu/images/simple/page.gif | Bin 0 -> 565 bytes plugins/55/indexmenu/images/simple/plus.gif | Bin 0 -> 89 bytes .../55/indexmenu/images/simple/plusbottom.gif | Bin 0 -> 88 bytes .../indexmenu/images/simplefact.png/Thumbs.db | Bin 0 -> 11264 bytes .../indexmenu/images/simplefact.png/base.png | Bin 0 -> 337 bytes .../indexmenu/images/simplefact.png/empty.png | Bin 0 -> 157 bytes .../images/simplefact.png/folder.png | Bin 0 -> 537 bytes .../images/simplefact.png/folderh.png | Bin 0 -> 694 bytes .../images/simplefact.png/folderhopen.png | Bin 0 -> 688 bytes .../images/simplefact.png/folderopen.png | Bin 0 -> 688 bytes .../indexmenu/images/simplefact.png/info.txt | 2 + .../indexmenu/images/simplefact.png/join.png | Bin 0 -> 131 bytes .../images/simplefact.png/joinbottom.png | Bin 0 -> 132 bytes .../indexmenu/images/simplefact.png/line.png | Bin 0 -> 128 bytes .../indexmenu/images/simplefact.png/minus.png | Bin 0 -> 171 bytes .../images/simplefact.png/minusbottom.png | Bin 0 -> 167 bytes .../images/simplefact.png/nolines_minus.png | Bin 0 -> 144 bytes .../images/simplefact.png/nolines_plus.png | Bin 0 -> 160 bytes .../indexmenu/images/simplefact.png/page.png | Bin 0 -> 635 bytes .../indexmenu/images/simplefact.png/plus.png | Bin 0 -> 183 bytes .../images/simplefact.png/plusbottom.png | Bin 0 -> 183 bytes .../55/indexmenu/images/tango.png/base.png | Bin 0 -> 528 bytes .../55/indexmenu/images/tango.png/empty.png | Bin 0 -> 157 bytes .../55/indexmenu/images/tango.png/favicon.ico | Bin 0 -> 2238 bytes .../55/indexmenu/images/tango.png/folder.png | Bin 0 -> 498 bytes .../55/indexmenu/images/tango.png/folderh.png | Bin 0 -> 537 bytes .../images/tango.png/folderhopen.png | Bin 0 -> 523 bytes .../indexmenu/images/tango.png/folderopen.png | Bin 0 -> 523 bytes .../images/tango.png/format-justify-left.png | Bin 0 -> 324 bytes .../55/indexmenu/images/tango.png/info.txt | 3 + .../images/tango.png/internet-group-chat.png | Bin 0 -> 422 bytes .../55/indexmenu/images/tango.png/join.png | Bin 0 -> 131 bytes .../indexmenu/images/tango.png/joinbottom.png | Bin 0 -> 132 bytes .../55/indexmenu/images/tango.png/line.png | Bin 0 -> 128 bytes .../55/indexmenu/images/tango.png/minus.png | Bin 0 -> 171 bytes .../images/tango.png/minusbottom.png | Bin 0 -> 167 bytes .../images/tango.png/network-transmit.png | Bin 0 -> 455 bytes .../images/tango.png/nolines_minus.png | Bin 0 -> 144 bytes .../images/tango.png/nolines_plus.png | Bin 0 -> 160 bytes .../55/indexmenu/images/tango.png/page.png | Bin 0 -> 333 bytes .../55/indexmenu/images/tango.png/plus.png | Bin 0 -> 183 bytes .../indexmenu/images/tango.png/plusbottom.png | Bin 0 -> 183 bytes plugins/55/indexmenu/images/thread/base.gif | Bin 0 -> 52 bytes plugins/55/indexmenu/images/thread/empty.gif | Bin 0 -> 62 bytes plugins/55/indexmenu/images/thread/folder.gif | Bin 0 -> 51 bytes .../55/indexmenu/images/thread/folderh.gif | Bin 0 -> 51 bytes .../indexmenu/images/thread/folderhopen.gif | Bin 0 -> 51 bytes .../55/indexmenu/images/thread/folderopen.gif | Bin 0 -> 51 bytes plugins/55/indexmenu/images/thread/info.txt | 2 + plugins/55/indexmenu/images/thread/join.gif | Bin 0 -> 69 bytes .../55/indexmenu/images/thread/joinbottom.gif | Bin 0 -> 66 bytes plugins/55/indexmenu/images/thread/line.gif | Bin 0 -> 66 bytes plugins/55/indexmenu/images/thread/minus.gif | Bin 0 -> 86 bytes .../indexmenu/images/thread/minusbottom.gif | Bin 0 -> 85 bytes .../indexmenu/images/thread/nolines_minus.gif | Bin 0 -> 861 bytes .../indexmenu/images/thread/nolines_plus.gif | Bin 0 -> 870 bytes plugins/55/indexmenu/images/thread/page.gif | Bin 0 -> 51 bytes plugins/55/indexmenu/images/thread/plus.gif | Bin 0 -> 89 bytes .../55/indexmenu/images/thread/plusbottom.gif | Bin 0 -> 88 bytes plugins/55/indexmenu/images/thread2/base.gif | Bin 0 -> 52 bytes plugins/55/indexmenu/images/thread2/empty.gif | Bin 0 -> 62 bytes .../55/indexmenu/images/thread2/folder.gif | Bin 0 -> 51 bytes .../55/indexmenu/images/thread2/folderh.gif | Bin 0 -> 51 bytes .../indexmenu/images/thread2/folderhopen.gif | Bin 0 -> 51 bytes .../indexmenu/images/thread2/folderopen.gif | Bin 0 -> 51 bytes plugins/55/indexmenu/images/thread2/info.txt | 3 + plugins/55/indexmenu/images/thread2/join.gif | Bin 0 -> 69 bytes .../indexmenu/images/thread2/joinbottom.gif | Bin 0 -> 66 bytes plugins/55/indexmenu/images/thread2/line.gif | Bin 0 -> 66 bytes plugins/55/indexmenu/images/thread2/minus.gif | Bin 0 -> 86 bytes .../indexmenu/images/thread2/minusbottom.gif | Bin 0 -> 85 bytes .../images/thread2/nolines_minus.gif | Bin 0 -> 861 bytes .../indexmenu/images/thread2/nolines_plus.gif | Bin 0 -> 870 bytes plugins/55/indexmenu/images/thread2/page.gif | Bin 0 -> 51 bytes plugins/55/indexmenu/images/thread2/plus.gif | Bin 0 -> 89 bytes .../indexmenu/images/thread2/plusbottom.gif | Bin 0 -> 88 bytes plugins/55/indexmenu/images/thread2/style.css | 31 + plugins/55/indexmenu/images/toc_bullet.gif | Bin 0 -> 74 bytes .../55/indexmenu/images/vista.png/base.png | Bin 0 -> 880 bytes .../55/indexmenu/images/vista.png/empty.png | Bin 0 -> 157 bytes .../55/indexmenu/images/vista.png/folder.png | Bin 0 -> 865 bytes .../55/indexmenu/images/vista.png/folderh.png | Bin 0 -> 872 bytes .../images/vista.png/folderhopen.png | Bin 0 -> 873 bytes .../indexmenu/images/vista.png/folderopen.png | Bin 0 -> 872 bytes .../55/indexmenu/images/vista.png/info.txt | 2 + .../55/indexmenu/images/vista.png/join.png | Bin 0 -> 131 bytes .../indexmenu/images/vista.png/joinbottom.png | Bin 0 -> 132 bytes .../55/indexmenu/images/vista.png/line.png | Bin 0 -> 128 bytes .../55/indexmenu/images/vista.png/minus.png | Bin 0 -> 171 bytes .../images/vista.png/minusbottom.png | Bin 0 -> 167 bytes .../images/vista.png/nolines_minus.png | Bin 0 -> 144 bytes .../images/vista.png/nolines_plus.png | Bin 0 -> 160 bytes .../55/indexmenu/images/vista.png/page.png | Bin 0 -> 352 bytes .../55/indexmenu/images/vista.png/plus.png | Bin 0 -> 183 bytes .../indexmenu/images/vista.png/plusbottom.png | Bin 0 -> 183 bytes plugins/55/indexmenu/images/was.png/base.png | Bin 0 -> 119 bytes plugins/55/indexmenu/images/was.png/empty.png | Bin 0 -> 87 bytes .../55/indexmenu/images/was.png/folder.png | Bin 0 -> 329 bytes .../55/indexmenu/images/was.png/folderh.png | Bin 0 -> 208 bytes .../indexmenu/images/was.png/folderhopen.png | Bin 0 -> 231 bytes .../indexmenu/images/was.png/folderopen.png | Bin 0 -> 3111 bytes plugins/55/indexmenu/images/was.png/info.txt | 3 + plugins/55/indexmenu/images/was.png/join.png | Bin 0 -> 125 bytes .../indexmenu/images/was.png/joinbottom.png | Bin 0 -> 115 bytes plugins/55/indexmenu/images/was.png/line.png | Bin 0 -> 119 bytes plugins/55/indexmenu/images/was.png/minus.png | Bin 0 -> 126 bytes .../indexmenu/images/was.png/minusbottom.png | Bin 0 -> 127 bytes .../images/was.png/nolines_minus.png | Bin 0 -> 115 bytes .../indexmenu/images/was.png/nolines_plus.png | Bin 0 -> 121 bytes plugins/55/indexmenu/images/was.png/page.png | Bin 0 -> 179 bytes plugins/55/indexmenu/images/was.png/plus.png | Bin 0 -> 133 bytes .../indexmenu/images/was.png/plusbottom.png | Bin 0 -> 134 bytes plugins/55/indexmenu/images/was.png/style.css | 7 + plugins/55/indexmenu/images/wb.png/base.png | Bin 0 -> 615 bytes plugins/55/indexmenu/images/wb.png/empty.png | Bin 0 -> 327 bytes plugins/55/indexmenu/images/wb.png/folder.png | Bin 0 -> 537 bytes .../55/indexmenu/images/wb.png/folderh.png | Bin 0 -> 571 bytes .../indexmenu/images/wb.png/folderhopen.png | Bin 0 -> 479 bytes .../55/indexmenu/images/wb.png/folderopen.png | Bin 0 -> 591 bytes plugins/55/indexmenu/images/wb.png/info.txt | 2 + plugins/55/indexmenu/images/wb.png/join.png | Bin 0 -> 339 bytes .../55/indexmenu/images/wb.png/joinbottom.png | Bin 0 -> 337 bytes plugins/55/indexmenu/images/wb.png/line.png | Bin 0 -> 335 bytes plugins/55/indexmenu/images/wb.png/minus.png | Bin 0 -> 356 bytes .../indexmenu/images/wb.png/minusbottom.png | Bin 0 -> 352 bytes .../indexmenu/images/wb.png/nolines_minus.png | Bin 0 -> 363 bytes .../indexmenu/images/wb.png/nolines_plus.png | Bin 0 -> 376 bytes plugins/55/indexmenu/images/wb.png/page.png | Bin 0 -> 584 bytes plugins/55/indexmenu/images/wb.png/plus.png | Bin 0 -> 360 bytes .../55/indexmenu/images/wb.png/plusbottom.png | Bin 0 -> 357 bytes plugins/55/indexmenu/inc/pclzip.lib.php | 5544 +++++++ plugins/55/indexmenu/inc/repo.class.php | 56 + plugins/55/indexmenu/lang/ckb/lang.php | 88 + plugins/55/indexmenu/lang/ckb/settings.php | 20 + plugins/55/indexmenu/lang/cs/lang.php | 48 + plugins/55/indexmenu/lang/cs/settings.php | 8 + plugins/55/indexmenu/lang/da/lang.php | 42 + plugins/55/indexmenu/lang/da/settings.php | 8 + .../55/indexmenu/lang/de-informal/lang.php | 81 + .../indexmenu/lang/de-informal/settings.php | 22 + plugins/55/indexmenu/lang/de/lang.php | 91 + plugins/55/indexmenu/lang/de/settings.php | 22 + plugins/55/indexmenu/lang/el/lang.php | 68 + plugins/55/indexmenu/lang/en/lang.php | 92 + plugins/55/indexmenu/lang/en/settings.php | 21 + plugins/55/indexmenu/lang/eo/lang.php | 89 + plugins/55/indexmenu/lang/eo/settings.php | 19 + plugins/55/indexmenu/lang/es/lang.php | 92 + plugins/55/indexmenu/lang/es/settings.php | 21 + plugins/55/indexmenu/lang/fr/lang.php | 93 + plugins/55/indexmenu/lang/fr/settings.php | 22 + plugins/55/indexmenu/lang/hr/lang.php | 88 + plugins/55/indexmenu/lang/hr/settings.php | 20 + plugins/55/indexmenu/lang/hu/lang.php | 89 + plugins/55/indexmenu/lang/hu/settings.php | 21 + plugins/55/indexmenu/lang/it/lang.php | 70 + plugins/55/indexmenu/lang/it/settings.php | 19 + plugins/55/indexmenu/lang/ja/lang.php | 75 + plugins/55/indexmenu/lang/ja/settings.php | 20 + plugins/55/indexmenu/lang/ko/lang.php | 89 + plugins/55/indexmenu/lang/ko/settings.php | 21 + plugins/55/indexmenu/lang/nl/lang.php | 89 + plugins/55/indexmenu/lang/nl/settings.php | 21 + plugins/55/indexmenu/lang/pl/lang.php | 36 + plugins/55/indexmenu/lang/pt-br/lang.php | 88 + plugins/55/indexmenu/lang/pt-br/settings.php | 20 + plugins/55/indexmenu/lang/ru/lang.php | 95 + plugins/55/indexmenu/lang/ru/settings.php | 23 + plugins/55/indexmenu/lang/sv/lang.php | 83 + plugins/55/indexmenu/lang/sv/settings.php | 18 + plugins/55/indexmenu/lang/tr/lang.php | 25 + plugins/55/indexmenu/lang/vi/lang.php | 37 + plugins/55/indexmenu/lang/zh-tw/lang.php | 40 + plugins/55/indexmenu/lang/zh/lang.php | 94 + plugins/55/indexmenu/lang/zh/settings.php | 22 + plugins/55/indexmenu/plugin.info.txt | 7 + plugins/55/indexmenu/script.js | 504 + plugins/55/indexmenu/scripts/contextmenu.js | 429 + .../scripts/contextmenu.local.js.example | 70 + .../contextmenu/jquery.ui-contextmenu.js | 634 + .../contextmenu/jquery.ui-contextmenu.min.js | 4 + .../jquery.ui-contextmenu.min.js.map | 1 + .../indexmenu/scripts/fancytree/LICENSE.txt | 21 + .../fancytree/jquery.fancytree-all-deps.js | 13856 ++++++++++++++++ .../jquery.fancytree-all-deps.min.js | 2 + .../jquery.fancytree-all-deps.min.js.map | 1 + .../scripts/fancytree/jquery.fancytree-all.js | 13178 +++++++++++++++ .../fancytree/jquery.fancytree-all.min.js | 62 + .../scripts/fancytree/jquery.fancytree.min.js | 1 + .../modules/jquery.fancytree.ariagrid.js | 714 + .../modules/jquery.fancytree.childcounter.js | 241 + .../modules/jquery.fancytree.clones.js | 514 + .../modules/jquery.fancytree.columnview.js | 205 + .../fancytree/modules/jquery.fancytree.dnd.js | 798 + .../modules/jquery.fancytree.dnd5.js | 1157 ++ .../modules/jquery.fancytree.edit.js | 403 + .../modules/jquery.fancytree.filter.js | 549 + .../modules/jquery.fancytree.fixed.js | 674 + .../modules/jquery.fancytree.glyph.js | 354 + .../modules/jquery.fancytree.grid.js | 1014 ++ .../modules/jquery.fancytree.gridnav.js | 218 + .../fancytree/modules/jquery.fancytree.js | 7374 ++++++++ .../modules/jquery.fancytree.logger.js | 309 + .../modules/jquery.fancytree.menu.js | 185 + .../modules/jquery.fancytree.multi.js | 128 + .../modules/jquery.fancytree.persist.js | 503 + .../modules/jquery.fancytree.table.js | 544 + .../modules/jquery.fancytree.themeroller.js | 125 + .../modules/jquery.fancytree.ui-deps.js | 1449 ++ .../modules/jquery.fancytree.wide.js | 257 + .../readme/icons_layout__from ods.png | Bin 0 -> 49517 bytes .../fancytree/skin-awesome/skin-common.less | 972 ++ .../fancytree/skin-awesome/ui.fancytree.css | 588 + .../fancytree/skin-awesome/ui.fancytree.less | 134 + .../skin-awesome/ui.fancytree.min.css | 6 + .../fancytree/skin-awesome/vline-rtl.gif | Bin 0 -> 842 bytes .../scripts/fancytree/skin-awesome/vline.gif | Bin 0 -> 844 bytes .../skin-bootstrap-n/skin-common.less | 972 ++ .../skin-bootstrap-n/ui.fancytree.css | 620 + .../skin-bootstrap-n/ui.fancytree.less | 185 + .../skin-bootstrap-n/ui.fancytree.min.css | 6 + .../fancytree/skin-bootstrap-n/vline-rtl.gif | Bin 0 -> 842 bytes .../fancytree/skin-bootstrap-n/vline.gif | Bin 0 -> 844 bytes .../scripts/fancytree/skin-bootstrap/boot.css | 1065 ++ .../fancytree/skin-bootstrap/skin-common.less | 972 ++ .../fancytree/skin-bootstrap/ui.fancytree.css | 680 + .../skin-bootstrap/ui.fancytree.less | 356 + .../skin-bootstrap/ui.fancytree.min.css | 6 + .../fancytree/skin-bootstrap/vline-rtl.gif | Bin 0 -> 842 bytes .../fancytree/skin-bootstrap/vline.gif | Bin 0 -> 844 bytes .../scripts/fancytree/skin-common.less | 972 ++ .../scripts/fancytree/skin-custom-1/README.md | 14 + .../scripts/fancytree/skin-lion/icons-rtl.gif | Bin 0 -> 5948 bytes .../scripts/fancytree/skin-lion/icons.gif | Bin 0 -> 5937 bytes .../scripts/fancytree/skin-lion/loading.gif | Bin 0 -> 1849 bytes .../fancytree/skin-lion/skin-common.less | 972 ++ .../fancytree/skin-lion/ui.fancytree.css | 757 + .../fancytree/skin-lion/ui.fancytree.less | 100 + .../fancytree/skin-lion/ui.fancytree.min.css | 6 + .../scripts/fancytree/skin-lion/vline-rtl.gif | Bin 0 -> 852 bytes .../scripts/fancytree/skin-lion/vline.gif | Bin 0 -> 852 bytes .../fancytree/skin-material/skin-common.less | 972 ++ .../fancytree/skin-material/ui.fancytree.css | 581 + .../fancytree/skin-material/ui.fancytree.less | 131 + .../skin-material/ui.fancytree.min.css | 6 + .../fancytree/skin-material/vline-rtl.gif | Bin 0 -> 842 bytes .../scripts/fancytree/skin-material/vline.gif | Bin 0 -> 844 bytes .../fancytree/skin-mdi/skin-common.less | 972 ++ .../fancytree/skin-mdi/ui.fancytree.less | 131 + .../scripts/fancytree/skin-mdi/vline-rtl.gif | Bin 0 -> 842 bytes .../scripts/fancytree/skin-mdi/vline.gif | Bin 0 -> 844 bytes .../fancytree/skin-themeroller/icons-rtl.gif | Bin 0 -> 5513 bytes .../fancytree/skin-themeroller/icons.gif | Bin 0 -> 5510 bytes .../fancytree/skin-themeroller/loading.gif | Bin 0 -> 3234 bytes .../skin-themeroller/ui.fancytree.css | 716 + .../skin-themeroller/ui.fancytree.less | 64 + .../skin-themeroller/ui.fancytree.min.css | 8 + .../fancytree/skin-themeroller/vline-rtl.gif | Bin 0 -> 852 bytes .../fancytree/skin-themeroller/vline.gif | Bin 0 -> 852 bytes .../fancytree/skin-typicons/skin-common.less | 972 ++ .../fancytree/skin-typicons/ui.fancytree.less | 138 + .../fancytree/skin-typicons/vline-rtl.gif | Bin 0 -> 842 bytes .../scripts/fancytree/skin-typicons/vline.gif | Bin 0 -> 844 bytes .../fancytree/skin-vista/icons-rtl.gif | Bin 0 -> 5513 bytes .../scripts/fancytree/skin-vista/icons.gif | Bin 0 -> 5510 bytes .../scripts/fancytree/skin-vista/loading.gif | Bin 0 -> 3234 bytes .../fancytree/skin-vista/skin-common.less | 972 ++ .../fancytree/skin-vista/ui.fancytree.css | 763 + .../fancytree/skin-vista/ui.fancytree.less | 117 + .../fancytree/skin-vista/ui.fancytree.min.css | 6 + .../fancytree/skin-vista/vline-rtl.gif | Bin 0 -> 852 bytes .../scripts/fancytree/skin-vista/vline.gif | Bin 0 -> 852 bytes .../scripts/fancytree/skin-win7/icons-rtl.gif | Bin 0 -> 5513 bytes .../scripts/fancytree/skin-win7/icons.gif | Bin 0 -> 5510 bytes .../scripts/fancytree/skin-win7/loading.gif | Bin 0 -> 3234 bytes .../fancytree/skin-win7/skin-common.less | 972 ++ .../fancytree/skin-win7/ui.fancytree.css | 822 + .../fancytree/skin-win7/ui.fancytree.less | 157 + .../fancytree/skin-win7/ui.fancytree.min.css | 6 + .../scripts/fancytree/skin-win7/vline-rtl.gif | Bin 0 -> 852 bytes .../scripts/fancytree/skin-win7/vline.gif | Bin 0 -> 852 bytes .../fancytree/skin-win8-n/icons-rtl.gif | Bin 0 -> 5513 bytes .../scripts/fancytree/skin-win8-n/icons.gif | Bin 0 -> 5510 bytes .../scripts/fancytree/skin-win8-n/loading.gif | Bin 0 -> 3234 bytes .../fancytree/skin-win8-n/ui.fancytree.css | 767 + .../fancytree/skin-win8-n/ui.fancytree.less | 145 + .../skin-win8-n/ui.fancytree.min.css | 6 + .../fancytree/skin-win8-n/vline-rtl.gif | Bin 0 -> 852 bytes .../scripts/fancytree/skin-win8-n/vline.gif | Bin 0 -> 852 bytes .../fancytree/skin-win8-xxl/icons-rtl.gif | Bin 0 -> 17451 bytes .../scripts/fancytree/skin-win8-xxl/icons.gif | Bin 0 -> 17624 bytes .../fancytree/skin-win8-xxl/loading.gif | Bin 0 -> 6243 bytes .../fancytree/skin-win8-xxl/ui.fancytree.css | 775 + .../fancytree/skin-win8-xxl/ui.fancytree.less | 40 + .../skin-win8-xxl/ui.fancytree.min.css | 11 + .../fancytree/skin-win8-xxl/vline-rtl.gif | Bin 0 -> 905 bytes .../scripts/fancytree/skin-win8-xxl/vline.gif | Bin 0 -> 905 bytes .../scripts/fancytree/skin-win8/icons-rtl.gif | Bin 0 -> 5513 bytes .../scripts/fancytree/skin-win8/icons.gif | Bin 0 -> 5510 bytes .../scripts/fancytree/skin-win8/loading.gif | Bin 0 -> 3234 bytes .../fancytree/skin-win8/skin-common.less | 972 ++ .../fancytree/skin-win8/ui.fancytree.css | 765 + .../fancytree/skin-win8/ui.fancytree.less | 158 + .../fancytree/skin-win8/ui.fancytree.min.css | 6 + .../scripts/fancytree/skin-win8/vline-rtl.gif | Bin 0 -> 852 bytes .../scripts/fancytree/skin-win8/vline.gif | Bin 0 -> 852 bytes .../scripts/fancytree/skin-xp/icons-rtl.gif | Bin 0 -> 4002 bytes .../icons-rtl__old__blue laxy expanders.gif | Bin 0 -> 4021 bytes .../scripts/fancytree/skin-xp/icons.gif | Bin 0 -> 4000 bytes .../icons__old__blue lazy expanders.gif | Bin 0 -> 4041 bytes .../scripts/fancytree/skin-xp/loading.gif | Bin 0 -> 570 bytes .../fancytree/skin-xp/skin-common.less | 972 ++ .../fancytree/skin-xp/ui.fancytree.css | 779 + .../fancytree/skin-xp/ui.fancytree.less | 133 + .../fancytree/skin-xp/ui.fancytree.min.css | 6 + .../scripts/fancytree/skin-xp/vline-rtl.gif | Bin 0 -> 842 bytes .../scripts/fancytree/skin-xp/vline.gif | Bin 0 -> 844 bytes plugins/55/indexmenu/scripts/indexmenu.js | 1008 ++ plugins/55/indexmenu/scripts/nojsindex.js | 27 + .../indexmenu/scripts/toolbarindexwizard.js | 349 + plugins/55/indexmenu/style.css | 311 + plugins/55/indexmenu/syntax/indexmenu.php | 861 + plugins/55/indexmenu/syntax/tag.php | 76 + 766 files changed, 83299 insertions(+) create mode 100644 plugins/55/indexmenu/.github/workflows/dokuwiki.yml create mode 100644 plugins/55/indexmenu/COPYING create mode 100644 plugins/55/indexmenu/CREDITS create mode 100644 plugins/55/indexmenu/README create mode 100644 plugins/55/indexmenu/Search.php create mode 100644 plugins/55/indexmenu/_test/ActionTest.php create mode 100644 plugins/55/indexmenu/_test/AjaxRequestsTest.php create mode 100644 plugins/55/indexmenu/_test/GeneralTest.php create mode 100644 plugins/55/indexmenu/_test/IndexmenuSyntaxTest.php create mode 100644 plugins/55/indexmenu/action.php create mode 100644 plugins/55/indexmenu/ajax.php create mode 100644 plugins/55/indexmenu/all.less create mode 100644 plugins/55/indexmenu/conf/default.php create mode 100644 plugins/55/indexmenu/conf/metadata.php create mode 100644 plugins/55/indexmenu/images/bj-tango.png/base.png create mode 100644 plugins/55/indexmenu/images/bj-tango.png/empty.png create mode 100644 plugins/55/indexmenu/images/bj-tango.png/folder.png create mode 100644 plugins/55/indexmenu/images/bj-tango.png/folderh.png create mode 100644 plugins/55/indexmenu/images/bj-tango.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/bj-tango.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/bj-tango.png/info.txt create mode 100644 plugins/55/indexmenu/images/bj-tango.png/join.png create mode 100644 plugins/55/indexmenu/images/bj-tango.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/bj-tango.png/line.png create mode 100644 plugins/55/indexmenu/images/bj-tango.png/minus.png create mode 100644 plugins/55/indexmenu/images/bj-tango.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/bj-tango.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/bj-tango.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/bj-tango.png/page.png create mode 100644 plugins/55/indexmenu/images/bj-tango.png/plus.png create mode 100644 plugins/55/indexmenu/images/bj-tango.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/bj_ubuntu.png/base.png create mode 100644 plugins/55/indexmenu/images/bj_ubuntu.png/empty.png create mode 100644 plugins/55/indexmenu/images/bj_ubuntu.png/folder.png create mode 100644 plugins/55/indexmenu/images/bj_ubuntu.png/folderh.png create mode 100644 plugins/55/indexmenu/images/bj_ubuntu.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/bj_ubuntu.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/bj_ubuntu.png/info.txt create mode 100644 plugins/55/indexmenu/images/bj_ubuntu.png/join.png create mode 100644 plugins/55/indexmenu/images/bj_ubuntu.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/bj_ubuntu.png/line.png create mode 100644 plugins/55/indexmenu/images/bj_ubuntu.png/minus.png create mode 100644 plugins/55/indexmenu/images/bj_ubuntu.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/bj_ubuntu.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/bj_ubuntu.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/bj_ubuntu.png/page.png create mode 100644 plugins/55/indexmenu/images/bj_ubuntu.png/plus.png create mode 100644 plugins/55/indexmenu/images/bj_ubuntu.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/bw.png/base.png create mode 100644 plugins/55/indexmenu/images/bw.png/empty.png create mode 100644 plugins/55/indexmenu/images/bw.png/folder.png create mode 100644 plugins/55/indexmenu/images/bw.png/folderh.png create mode 100644 plugins/55/indexmenu/images/bw.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/bw.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/bw.png/info.txt create mode 100644 plugins/55/indexmenu/images/bw.png/join.png create mode 100644 plugins/55/indexmenu/images/bw.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/bw.png/line.png create mode 100644 plugins/55/indexmenu/images/bw.png/minus.png create mode 100644 plugins/55/indexmenu/images/bw.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/bw.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/bw.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/bw.png/page.png create mode 100644 plugins/55/indexmenu/images/bw.png/plus.png create mode 100644 plugins/55/indexmenu/images/bw.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/close.gif create mode 100644 plugins/55/indexmenu/images/contis_tango.png/base.png create mode 100644 plugins/55/indexmenu/images/contis_tango.png/empty.png create mode 100644 plugins/55/indexmenu/images/contis_tango.png/folder.png create mode 100644 plugins/55/indexmenu/images/contis_tango.png/folderh.png create mode 100644 plugins/55/indexmenu/images/contis_tango.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/contis_tango.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/contis_tango.png/info.txt create mode 100644 plugins/55/indexmenu/images/contis_tango.png/join.png create mode 100644 plugins/55/indexmenu/images/contis_tango.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/contis_tango.png/line.png create mode 100644 plugins/55/indexmenu/images/contis_tango.png/minus.png create mode 100644 plugins/55/indexmenu/images/contis_tango.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/contis_tango.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/contis_tango.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/contis_tango.png/page.png create mode 100644 plugins/55/indexmenu/images/contis_tango.png/plus.png create mode 100644 plugins/55/indexmenu/images/contis_tango.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/default/base.gif create mode 100644 plugins/55/indexmenu/images/default/empty.gif create mode 100644 plugins/55/indexmenu/images/default/folder.gif create mode 100644 plugins/55/indexmenu/images/default/folderh.gif create mode 100644 plugins/55/indexmenu/images/default/folderhopen.gif create mode 100644 plugins/55/indexmenu/images/default/folderopen.gif create mode 100644 plugins/55/indexmenu/images/default/info.txt create mode 100644 plugins/55/indexmenu/images/default/join.gif create mode 100644 plugins/55/indexmenu/images/default/joinbottom.gif create mode 100644 plugins/55/indexmenu/images/default/line.gif create mode 100644 plugins/55/indexmenu/images/default/minus.gif create mode 100644 plugins/55/indexmenu/images/default/minusbottom.gif create mode 100644 plugins/55/indexmenu/images/default/nolines_minus.gif create mode 100644 plugins/55/indexmenu/images/default/nolines_plus.gif create mode 100644 plugins/55/indexmenu/images/default/page.gif create mode 100644 plugins/55/indexmenu/images/default/plus.gif create mode 100644 plugins/55/indexmenu/images/default/plusbottom.gif create mode 100644 plugins/55/indexmenu/images/doku/base.gif create mode 100644 plugins/55/indexmenu/images/doku/empty.gif create mode 100644 plugins/55/indexmenu/images/doku/folder.gif create mode 100644 plugins/55/indexmenu/images/doku/folderh.gif create mode 100644 plugins/55/indexmenu/images/doku/folderhopen.gif create mode 100644 plugins/55/indexmenu/images/doku/folderopen.gif create mode 100644 plugins/55/indexmenu/images/doku/info.txt create mode 100644 plugins/55/indexmenu/images/doku/join.gif create mode 100644 plugins/55/indexmenu/images/doku/joinbottom.gif create mode 100644 plugins/55/indexmenu/images/doku/line.gif create mode 100644 plugins/55/indexmenu/images/doku/minus.gif create mode 100644 plugins/55/indexmenu/images/doku/minusbottom.gif create mode 100644 plugins/55/indexmenu/images/doku/nolines_minus.gif create mode 100644 plugins/55/indexmenu/images/doku/nolines_plus.gif create mode 100644 plugins/55/indexmenu/images/doku/page.gif create mode 100644 plugins/55/indexmenu/images/doku/plus.gif create mode 100644 plugins/55/indexmenu/images/doku/plusbottom.gif create mode 100644 plugins/55/indexmenu/images/doku2/Thumbs.db create mode 100644 plugins/55/indexmenu/images/doku2/base.gif create mode 100644 plugins/55/indexmenu/images/doku2/empty.gif create mode 100644 plugins/55/indexmenu/images/doku2/folder.gif create mode 100644 plugins/55/indexmenu/images/doku2/folderh.gif create mode 100644 plugins/55/indexmenu/images/doku2/folderhopen.gif create mode 100644 plugins/55/indexmenu/images/doku2/folderopen.gif create mode 100644 plugins/55/indexmenu/images/doku2/info.txt create mode 100644 plugins/55/indexmenu/images/doku2/join.gif create mode 100644 plugins/55/indexmenu/images/doku2/joinbottom.gif create mode 100644 plugins/55/indexmenu/images/doku2/line.gif create mode 100644 plugins/55/indexmenu/images/doku2/minus.gif create mode 100644 plugins/55/indexmenu/images/doku2/minusbottom.gif create mode 100644 plugins/55/indexmenu/images/doku2/nolines_minus.gif create mode 100644 plugins/55/indexmenu/images/doku2/nolines_plus.gif create mode 100644 plugins/55/indexmenu/images/doku2/page.gif create mode 100644 plugins/55/indexmenu/images/doku2/plus.gif create mode 100644 plugins/55/indexmenu/images/doku2/plusbottom.gif create mode 100644 plugins/55/indexmenu/images/doku2/style.css create mode 100644 plugins/55/indexmenu/images/drktheme/base.gif create mode 100644 plugins/55/indexmenu/images/drktheme/empty.gif create mode 100644 plugins/55/indexmenu/images/drktheme/folder.gif create mode 100644 plugins/55/indexmenu/images/drktheme/folderh.gif create mode 100644 plugins/55/indexmenu/images/drktheme/folderhopen.gif create mode 100644 plugins/55/indexmenu/images/drktheme/folderopen.gif create mode 100644 plugins/55/indexmenu/images/drktheme/info.txt create mode 100644 plugins/55/indexmenu/images/drktheme/join.gif create mode 100644 plugins/55/indexmenu/images/drktheme/joinbottom.gif create mode 100644 plugins/55/indexmenu/images/drktheme/line.gif create mode 100644 plugins/55/indexmenu/images/drktheme/minus.gif create mode 100644 plugins/55/indexmenu/images/drktheme/minusbottom.gif create mode 100644 plugins/55/indexmenu/images/drktheme/nolines_minus.gif create mode 100644 plugins/55/indexmenu/images/drktheme/nolines_plus.gif create mode 100644 plugins/55/indexmenu/images/drktheme/page.gif create mode 100644 plugins/55/indexmenu/images/drktheme/plus.gif create mode 100644 plugins/55/indexmenu/images/drktheme/plusbottom.gif create mode 100644 plugins/55/indexmenu/images/drktheme/style.css create mode 100644 plugins/55/indexmenu/images/dryoo.png/base.png create mode 100644 plugins/55/indexmenu/images/dryoo.png/empty.png create mode 100644 plugins/55/indexmenu/images/dryoo.png/folder.png create mode 100644 plugins/55/indexmenu/images/dryoo.png/folderh.png create mode 100644 plugins/55/indexmenu/images/dryoo.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/dryoo.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/dryoo.png/info.txt create mode 100644 plugins/55/indexmenu/images/dryoo.png/join.png create mode 100644 plugins/55/indexmenu/images/dryoo.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/dryoo.png/line.png create mode 100644 plugins/55/indexmenu/images/dryoo.png/minus.png create mode 100644 plugins/55/indexmenu/images/dryoo.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/dryoo.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/dryoo.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/dryoo.png/page.png create mode 100644 plugins/55/indexmenu/images/dryoo.png/plus.png create mode 100644 plugins/55/indexmenu/images/dryoo.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/empty.gif create mode 100644 plugins/55/indexmenu/images/gnome.png/base.png create mode 100644 plugins/55/indexmenu/images/gnome.png/empty.png create mode 100644 plugins/55/indexmenu/images/gnome.png/folder.png create mode 100644 plugins/55/indexmenu/images/gnome.png/folderh.png create mode 100644 plugins/55/indexmenu/images/gnome.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/gnome.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/gnome.png/info.txt create mode 100644 plugins/55/indexmenu/images/gnome.png/join.png create mode 100644 plugins/55/indexmenu/images/gnome.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/gnome.png/line.png create mode 100644 plugins/55/indexmenu/images/gnome.png/minus.png create mode 100644 plugins/55/indexmenu/images/gnome.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/gnome.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/gnome.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/gnome.png/page.png create mode 100644 plugins/55/indexmenu/images/gnome.png/plus.png create mode 100644 plugins/55/indexmenu/images/gnome.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/human.png/base.png create mode 100644 plugins/55/indexmenu/images/human.png/empty.png create mode 100644 plugins/55/indexmenu/images/human.png/folder.png create mode 100644 plugins/55/indexmenu/images/human.png/folderh.png create mode 100644 plugins/55/indexmenu/images/human.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/human.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/human.png/info.txt create mode 100644 plugins/55/indexmenu/images/human.png/join.png create mode 100644 plugins/55/indexmenu/images/human.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/human.png/line.png create mode 100644 plugins/55/indexmenu/images/human.png/minus.png create mode 100644 plugins/55/indexmenu/images/human.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/human.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/human.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/human.png/page.png create mode 100644 plugins/55/indexmenu/images/human.png/plus.png create mode 100644 plugins/55/indexmenu/images/human.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/human.png/style.css create mode 100644 plugins/55/indexmenu/images/icons8metrobw.png/base.png create mode 100644 plugins/55/indexmenu/images/icons8metrobw.png/empty.png create mode 100644 plugins/55/indexmenu/images/icons8metrobw.png/folder.png create mode 100644 plugins/55/indexmenu/images/icons8metrobw.png/folderh.png create mode 100644 plugins/55/indexmenu/images/icons8metrobw.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/icons8metrobw.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/icons8metrobw.png/info.txt create mode 100644 plugins/55/indexmenu/images/icons8metrobw.png/join.png create mode 100644 plugins/55/indexmenu/images/icons8metrobw.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/icons8metrobw.png/line.png create mode 100644 plugins/55/indexmenu/images/icons8metrobw.png/minus.png create mode 100644 plugins/55/indexmenu/images/icons8metrobw.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/icons8metrobw.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/icons8metrobw.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/icons8metrobw.png/page.png create mode 100644 plugins/55/indexmenu/images/icons8metrobw.png/plus.png create mode 100644 plugins/55/indexmenu/images/icons8metrobw.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/icons8w10bw.png/base.png create mode 100644 plugins/55/indexmenu/images/icons8w10bw.png/empty.png create mode 100644 plugins/55/indexmenu/images/icons8w10bw.png/folder.png create mode 100644 plugins/55/indexmenu/images/icons8w10bw.png/folderh.png create mode 100644 plugins/55/indexmenu/images/icons8w10bw.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/icons8w10bw.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/icons8w10bw.png/info.txt create mode 100644 plugins/55/indexmenu/images/icons8w10bw.png/join.png create mode 100644 plugins/55/indexmenu/images/icons8w10bw.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/icons8w10bw.png/line.png create mode 100644 plugins/55/indexmenu/images/icons8w10bw.png/minus.png create mode 100644 plugins/55/indexmenu/images/icons8w10bw.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/icons8w10bw.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/icons8w10bw.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/icons8w10bw.png/page.png create mode 100644 plugins/55/indexmenu/images/icons8w10bw.png/plus.png create mode 100644 plugins/55/indexmenu/images/icons8w10bw.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/indexmenu_toolbar.png create mode 100644 plugins/55/indexmenu/images/indextheme/base.gif create mode 100644 plugins/55/indexmenu/images/indextheme/empty.gif create mode 100644 plugins/55/indexmenu/images/indextheme/folder.gif create mode 100644 plugins/55/indexmenu/images/indextheme/folderh.gif create mode 100644 plugins/55/indexmenu/images/indextheme/folderhopen.gif create mode 100644 plugins/55/indexmenu/images/indextheme/folderopen.gif create mode 100644 plugins/55/indexmenu/images/indextheme/info.txt create mode 100644 plugins/55/indexmenu/images/indextheme/join.gif create mode 100644 plugins/55/indexmenu/images/indextheme/joinbottom.gif create mode 100644 plugins/55/indexmenu/images/indextheme/line.gif create mode 100644 plugins/55/indexmenu/images/indextheme/minus.gif create mode 100644 plugins/55/indexmenu/images/indextheme/minusbottom.gif create mode 100644 plugins/55/indexmenu/images/indextheme/page.gif create mode 100644 plugins/55/indexmenu/images/indextheme/plus.gif create mode 100644 plugins/55/indexmenu/images/indextheme/plusbottom.gif create mode 100644 plugins/55/indexmenu/images/kde.png/base.png create mode 100644 plugins/55/indexmenu/images/kde.png/empty.png create mode 100644 plugins/55/indexmenu/images/kde.png/folder.png create mode 100644 plugins/55/indexmenu/images/kde.png/folderh.png create mode 100644 plugins/55/indexmenu/images/kde.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/kde.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/kde.png/info.txt create mode 100644 plugins/55/indexmenu/images/kde.png/join.png create mode 100644 plugins/55/indexmenu/images/kde.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/kde.png/line.png create mode 100644 plugins/55/indexmenu/images/kde.png/minus.png create mode 100644 plugins/55/indexmenu/images/kde.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/kde.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/kde.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/kde.png/page.png create mode 100644 plugins/55/indexmenu/images/kde.png/plus.png create mode 100644 plugins/55/indexmenu/images/kde.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/kde/base.gif create mode 100644 plugins/55/indexmenu/images/kde/empty.gif create mode 100644 plugins/55/indexmenu/images/kde/folder.gif create mode 100644 plugins/55/indexmenu/images/kde/folderh.gif create mode 100644 plugins/55/indexmenu/images/kde/folderhopen.gif create mode 100644 plugins/55/indexmenu/images/kde/folderopen.gif create mode 100644 plugins/55/indexmenu/images/kde/info.txt create mode 100644 plugins/55/indexmenu/images/kde/join.gif create mode 100644 plugins/55/indexmenu/images/kde/joinbottom.gif create mode 100644 plugins/55/indexmenu/images/kde/line.gif create mode 100644 plugins/55/indexmenu/images/kde/minus.gif create mode 100644 plugins/55/indexmenu/images/kde/minusbottom.gif create mode 100644 plugins/55/indexmenu/images/kde/nolines_minus.gif create mode 100644 plugins/55/indexmenu/images/kde/nolines_plus.gif create mode 100644 plugins/55/indexmenu/images/kde/page.gif create mode 100644 plugins/55/indexmenu/images/kde/plus.gif create mode 100644 plugins/55/indexmenu/images/kde/plusbottom.gif create mode 100644 plugins/55/indexmenu/images/kgs/base.gif create mode 100644 plugins/55/indexmenu/images/kgs/empty.gif create mode 100644 plugins/55/indexmenu/images/kgs/folder.gif create mode 100644 plugins/55/indexmenu/images/kgs/folderh.gif create mode 100644 plugins/55/indexmenu/images/kgs/folderhopen.gif create mode 100644 plugins/55/indexmenu/images/kgs/folderopen.gif create mode 100644 plugins/55/indexmenu/images/kgs/info.txt create mode 100644 plugins/55/indexmenu/images/kgs/join.gif create mode 100644 plugins/55/indexmenu/images/kgs/joinbottom.gif create mode 100644 plugins/55/indexmenu/images/kgs/line.gif create mode 100644 plugins/55/indexmenu/images/kgs/minus.gif create mode 100644 plugins/55/indexmenu/images/kgs/minusbottom.gif create mode 100644 plugins/55/indexmenu/images/kgs/nolines_minus.gif create mode 100644 plugins/55/indexmenu/images/kgs/nolines_plus.gif create mode 100644 plugins/55/indexmenu/images/kgs/page.gif create mode 100644 plugins/55/indexmenu/images/kgs/plus.gif create mode 100644 plugins/55/indexmenu/images/kgs/plusbottom.gif create mode 100644 plugins/55/indexmenu/images/larrow.gif create mode 100644 plugins/55/indexmenu/images/leopard.png/base.png create mode 100644 plugins/55/indexmenu/images/leopard.png/base_1.png create mode 100644 plugins/55/indexmenu/images/leopard.png/base_2.png create mode 100644 plugins/55/indexmenu/images/leopard.png/empty.png create mode 100644 plugins/55/indexmenu/images/leopard.png/folder.png create mode 100644 plugins/55/indexmenu/images/leopard.png/folderh.png create mode 100644 plugins/55/indexmenu/images/leopard.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/leopard.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/leopard.png/info.txt create mode 100644 plugins/55/indexmenu/images/leopard.png/join.png create mode 100644 plugins/55/indexmenu/images/leopard.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/leopard.png/line.png create mode 100644 plugins/55/indexmenu/images/leopard.png/minus.png create mode 100644 plugins/55/indexmenu/images/leopard.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/leopard.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/leopard.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/leopard.png/page.png create mode 100644 plugins/55/indexmenu/images/leopard.png/plus.png create mode 100644 plugins/55/indexmenu/images/leopard.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/msort.gif create mode 100644 plugins/55/indexmenu/images/pcc_dotted/base.gif create mode 100644 plugins/55/indexmenu/images/pcc_dotted/empty.gif create mode 100644 plugins/55/indexmenu/images/pcc_dotted/folder.gif create mode 100644 plugins/55/indexmenu/images/pcc_dotted/folderh.gif create mode 100644 plugins/55/indexmenu/images/pcc_dotted/folderhopen.gif create mode 100644 plugins/55/indexmenu/images/pcc_dotted/folderopen.gif create mode 100644 plugins/55/indexmenu/images/pcc_dotted/info.txt create mode 100644 plugins/55/indexmenu/images/pcc_dotted/join.gif create mode 100644 plugins/55/indexmenu/images/pcc_dotted/joinbottom.gif create mode 100644 plugins/55/indexmenu/images/pcc_dotted/line.gif create mode 100644 plugins/55/indexmenu/images/pcc_dotted/minus.gif create mode 100644 plugins/55/indexmenu/images/pcc_dotted/minusbottom.gif create mode 100644 plugins/55/indexmenu/images/pcc_dotted/nolines_minus.gif create mode 100644 plugins/55/indexmenu/images/pcc_dotted/nolines_plus.gif create mode 100644 plugins/55/indexmenu/images/pcc_dotted/page.gif create mode 100644 plugins/55/indexmenu/images/pcc_dotted/plus.gif create mode 100644 plugins/55/indexmenu/images/pcc_dotted/plusbottom.gif create mode 100644 plugins/55/indexmenu/images/phoenity.png/base.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/empty.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/favicon.ico create mode 100644 plugins/55/indexmenu/images/phoenity.png/folder.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/folder_open_file.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/folder_right.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/folderh.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/home_house.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/info.txt create mode 100644 plugins/55/indexmenu/images/phoenity.png/join.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/line.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/minus.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/new_page.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/page.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/plus.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/phoenity.png/toc_bullet.gif create mode 100644 plugins/55/indexmenu/images/phoenity.png/toc_bullet_red.gif create mode 100644 plugins/55/indexmenu/images/phoenity.png/web_earth.png create mode 100644 plugins/55/indexmenu/images/prdsuser-de.png/base.png create mode 100644 plugins/55/indexmenu/images/prdsuser-de.png/empty.png create mode 100644 plugins/55/indexmenu/images/prdsuser-de.png/folder.png create mode 100644 plugins/55/indexmenu/images/prdsuser-de.png/folderh.png create mode 100644 plugins/55/indexmenu/images/prdsuser-de.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/prdsuser-de.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/prdsuser-de.png/info.txt create mode 100644 plugins/55/indexmenu/images/prdsuser-de.png/join.png create mode 100644 plugins/55/indexmenu/images/prdsuser-de.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/prdsuser-de.png/line.png create mode 100644 plugins/55/indexmenu/images/prdsuser-de.png/minus.png create mode 100644 plugins/55/indexmenu/images/prdsuser-de.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/prdsuser-de.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/prdsuser-de.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/prdsuser-de.png/page.png create mode 100644 plugins/55/indexmenu/images/prdsuser-de.png/plus.png create mode 100644 plugins/55/indexmenu/images/prdsuser-de.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/rarrow.gif create mode 100644 plugins/55/indexmenu/images/repository/.htaccess create mode 100644 plugins/55/indexmenu/images/repository/bj-tango.png.zip create mode 100644 plugins/55/indexmenu/images/repository/bj_ubuntu.png.zip create mode 100644 plugins/55/indexmenu/images/repository/default.zip create mode 100644 plugins/55/indexmenu/images/repository/doku.zip create mode 100644 plugins/55/indexmenu/images/repository/drktheme.zip create mode 100644 plugins/55/indexmenu/images/repository/dryoo.png.zip create mode 100644 plugins/55/indexmenu/images/repository/gnome.png.zip create mode 100644 plugins/55/indexmenu/images/repository/human.png.zip create mode 100644 plugins/55/indexmenu/images/repository/indextheme.zip create mode 100644 plugins/55/indexmenu/images/repository/kde.png.zip create mode 100644 plugins/55/indexmenu/images/repository/kde.zip create mode 100644 plugins/55/indexmenu/images/repository/kgs.zip create mode 100644 plugins/55/indexmenu/images/repository/leopard.png.zip create mode 100644 plugins/55/indexmenu/images/repository/pcc_dotted.zip create mode 100644 plugins/55/indexmenu/images/repository/phoenity.png.zip create mode 100644 plugins/55/indexmenu/images/repository/prdsuser-de.png.zip create mode 100644 plugins/55/indexmenu/images/repository/shiki_brave.png.zip create mode 100644 plugins/55/indexmenu/images/repository/simple.zip create mode 100644 plugins/55/indexmenu/images/repository/tango.png.zip create mode 100644 plugins/55/indexmenu/images/repository/thread.zip create mode 100644 plugins/55/indexmenu/images/repository/thread2.zip create mode 100644 plugins/55/indexmenu/images/repository/vista.png.zip create mode 100644 plugins/55/indexmenu/images/shiki_brave.png/base.png create mode 100644 plugins/55/indexmenu/images/shiki_brave.png/empty.png create mode 100644 plugins/55/indexmenu/images/shiki_brave.png/folder.png create mode 100644 plugins/55/indexmenu/images/shiki_brave.png/folderh.png create mode 100644 plugins/55/indexmenu/images/shiki_brave.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/shiki_brave.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/shiki_brave.png/info.txt create mode 100644 plugins/55/indexmenu/images/shiki_brave.png/join.png create mode 100644 plugins/55/indexmenu/images/shiki_brave.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/shiki_brave.png/line.png create mode 100644 plugins/55/indexmenu/images/shiki_brave.png/minus.png create mode 100644 plugins/55/indexmenu/images/shiki_brave.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/shiki_brave.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/shiki_brave.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/shiki_brave.png/page.png create mode 100644 plugins/55/indexmenu/images/shiki_brave.png/plus.png create mode 100644 plugins/55/indexmenu/images/shiki_brave.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/simple/base.gif create mode 100644 plugins/55/indexmenu/images/simple/empty.gif create mode 100644 plugins/55/indexmenu/images/simple/folder.gif create mode 100644 plugins/55/indexmenu/images/simple/folderh.gif create mode 100644 plugins/55/indexmenu/images/simple/folderhopen.gif create mode 100644 plugins/55/indexmenu/images/simple/folderopen.gif create mode 100644 plugins/55/indexmenu/images/simple/info.txt create mode 100644 plugins/55/indexmenu/images/simple/join.gif create mode 100644 plugins/55/indexmenu/images/simple/joinbottom.gif create mode 100644 plugins/55/indexmenu/images/simple/line.gif create mode 100644 plugins/55/indexmenu/images/simple/minus.gif create mode 100644 plugins/55/indexmenu/images/simple/minusbottom.gif create mode 100644 plugins/55/indexmenu/images/simple/nolines_minus.gif create mode 100644 plugins/55/indexmenu/images/simple/nolines_plus.gif create mode 100644 plugins/55/indexmenu/images/simple/page.gif create mode 100644 plugins/55/indexmenu/images/simple/plus.gif create mode 100644 plugins/55/indexmenu/images/simple/plusbottom.gif create mode 100644 plugins/55/indexmenu/images/simplefact.png/Thumbs.db create mode 100644 plugins/55/indexmenu/images/simplefact.png/base.png create mode 100644 plugins/55/indexmenu/images/simplefact.png/empty.png create mode 100644 plugins/55/indexmenu/images/simplefact.png/folder.png create mode 100644 plugins/55/indexmenu/images/simplefact.png/folderh.png create mode 100644 plugins/55/indexmenu/images/simplefact.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/simplefact.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/simplefact.png/info.txt create mode 100644 plugins/55/indexmenu/images/simplefact.png/join.png create mode 100644 plugins/55/indexmenu/images/simplefact.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/simplefact.png/line.png create mode 100644 plugins/55/indexmenu/images/simplefact.png/minus.png create mode 100644 plugins/55/indexmenu/images/simplefact.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/simplefact.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/simplefact.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/simplefact.png/page.png create mode 100644 plugins/55/indexmenu/images/simplefact.png/plus.png create mode 100644 plugins/55/indexmenu/images/simplefact.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/tango.png/base.png create mode 100644 plugins/55/indexmenu/images/tango.png/empty.png create mode 100644 plugins/55/indexmenu/images/tango.png/favicon.ico create mode 100644 plugins/55/indexmenu/images/tango.png/folder.png create mode 100644 plugins/55/indexmenu/images/tango.png/folderh.png create mode 100644 plugins/55/indexmenu/images/tango.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/tango.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/tango.png/format-justify-left.png create mode 100644 plugins/55/indexmenu/images/tango.png/info.txt create mode 100644 plugins/55/indexmenu/images/tango.png/internet-group-chat.png create mode 100644 plugins/55/indexmenu/images/tango.png/join.png create mode 100644 plugins/55/indexmenu/images/tango.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/tango.png/line.png create mode 100644 plugins/55/indexmenu/images/tango.png/minus.png create mode 100644 plugins/55/indexmenu/images/tango.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/tango.png/network-transmit.png create mode 100644 plugins/55/indexmenu/images/tango.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/tango.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/tango.png/page.png create mode 100644 plugins/55/indexmenu/images/tango.png/plus.png create mode 100644 plugins/55/indexmenu/images/tango.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/thread/base.gif create mode 100644 plugins/55/indexmenu/images/thread/empty.gif create mode 100644 plugins/55/indexmenu/images/thread/folder.gif create mode 100644 plugins/55/indexmenu/images/thread/folderh.gif create mode 100644 plugins/55/indexmenu/images/thread/folderhopen.gif create mode 100644 plugins/55/indexmenu/images/thread/folderopen.gif create mode 100644 plugins/55/indexmenu/images/thread/info.txt create mode 100644 plugins/55/indexmenu/images/thread/join.gif create mode 100644 plugins/55/indexmenu/images/thread/joinbottom.gif create mode 100644 plugins/55/indexmenu/images/thread/line.gif create mode 100644 plugins/55/indexmenu/images/thread/minus.gif create mode 100644 plugins/55/indexmenu/images/thread/minusbottom.gif create mode 100644 plugins/55/indexmenu/images/thread/nolines_minus.gif create mode 100644 plugins/55/indexmenu/images/thread/nolines_plus.gif create mode 100644 plugins/55/indexmenu/images/thread/page.gif create mode 100644 plugins/55/indexmenu/images/thread/plus.gif create mode 100644 plugins/55/indexmenu/images/thread/plusbottom.gif create mode 100644 plugins/55/indexmenu/images/thread2/base.gif create mode 100644 plugins/55/indexmenu/images/thread2/empty.gif create mode 100644 plugins/55/indexmenu/images/thread2/folder.gif create mode 100644 plugins/55/indexmenu/images/thread2/folderh.gif create mode 100644 plugins/55/indexmenu/images/thread2/folderhopen.gif create mode 100644 plugins/55/indexmenu/images/thread2/folderopen.gif create mode 100644 plugins/55/indexmenu/images/thread2/info.txt create mode 100644 plugins/55/indexmenu/images/thread2/join.gif create mode 100644 plugins/55/indexmenu/images/thread2/joinbottom.gif create mode 100644 plugins/55/indexmenu/images/thread2/line.gif create mode 100644 plugins/55/indexmenu/images/thread2/minus.gif create mode 100644 plugins/55/indexmenu/images/thread2/minusbottom.gif create mode 100644 plugins/55/indexmenu/images/thread2/nolines_minus.gif create mode 100644 plugins/55/indexmenu/images/thread2/nolines_plus.gif create mode 100644 plugins/55/indexmenu/images/thread2/page.gif create mode 100644 plugins/55/indexmenu/images/thread2/plus.gif create mode 100644 plugins/55/indexmenu/images/thread2/plusbottom.gif create mode 100644 plugins/55/indexmenu/images/thread2/style.css create mode 100644 plugins/55/indexmenu/images/toc_bullet.gif create mode 100644 plugins/55/indexmenu/images/vista.png/base.png create mode 100644 plugins/55/indexmenu/images/vista.png/empty.png create mode 100644 plugins/55/indexmenu/images/vista.png/folder.png create mode 100644 plugins/55/indexmenu/images/vista.png/folderh.png create mode 100644 plugins/55/indexmenu/images/vista.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/vista.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/vista.png/info.txt create mode 100644 plugins/55/indexmenu/images/vista.png/join.png create mode 100644 plugins/55/indexmenu/images/vista.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/vista.png/line.png create mode 100644 plugins/55/indexmenu/images/vista.png/minus.png create mode 100644 plugins/55/indexmenu/images/vista.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/vista.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/vista.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/vista.png/page.png create mode 100644 plugins/55/indexmenu/images/vista.png/plus.png create mode 100644 plugins/55/indexmenu/images/vista.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/was.png/base.png create mode 100644 plugins/55/indexmenu/images/was.png/empty.png create mode 100644 plugins/55/indexmenu/images/was.png/folder.png create mode 100644 plugins/55/indexmenu/images/was.png/folderh.png create mode 100644 plugins/55/indexmenu/images/was.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/was.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/was.png/info.txt create mode 100644 plugins/55/indexmenu/images/was.png/join.png create mode 100644 plugins/55/indexmenu/images/was.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/was.png/line.png create mode 100644 plugins/55/indexmenu/images/was.png/minus.png create mode 100644 plugins/55/indexmenu/images/was.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/was.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/was.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/was.png/page.png create mode 100644 plugins/55/indexmenu/images/was.png/plus.png create mode 100644 plugins/55/indexmenu/images/was.png/plusbottom.png create mode 100644 plugins/55/indexmenu/images/was.png/style.css create mode 100644 plugins/55/indexmenu/images/wb.png/base.png create mode 100644 plugins/55/indexmenu/images/wb.png/empty.png create mode 100644 plugins/55/indexmenu/images/wb.png/folder.png create mode 100644 plugins/55/indexmenu/images/wb.png/folderh.png create mode 100644 plugins/55/indexmenu/images/wb.png/folderhopen.png create mode 100644 plugins/55/indexmenu/images/wb.png/folderopen.png create mode 100644 plugins/55/indexmenu/images/wb.png/info.txt create mode 100644 plugins/55/indexmenu/images/wb.png/join.png create mode 100644 plugins/55/indexmenu/images/wb.png/joinbottom.png create mode 100644 plugins/55/indexmenu/images/wb.png/line.png create mode 100644 plugins/55/indexmenu/images/wb.png/minus.png create mode 100644 plugins/55/indexmenu/images/wb.png/minusbottom.png create mode 100644 plugins/55/indexmenu/images/wb.png/nolines_minus.png create mode 100644 plugins/55/indexmenu/images/wb.png/nolines_plus.png create mode 100644 plugins/55/indexmenu/images/wb.png/page.png create mode 100644 plugins/55/indexmenu/images/wb.png/plus.png create mode 100644 plugins/55/indexmenu/images/wb.png/plusbottom.png create mode 100644 plugins/55/indexmenu/inc/pclzip.lib.php create mode 100644 plugins/55/indexmenu/inc/repo.class.php create mode 100644 plugins/55/indexmenu/lang/ckb/lang.php create mode 100644 plugins/55/indexmenu/lang/ckb/settings.php create mode 100644 plugins/55/indexmenu/lang/cs/lang.php create mode 100644 plugins/55/indexmenu/lang/cs/settings.php create mode 100644 plugins/55/indexmenu/lang/da/lang.php create mode 100644 plugins/55/indexmenu/lang/da/settings.php create mode 100644 plugins/55/indexmenu/lang/de-informal/lang.php create mode 100644 plugins/55/indexmenu/lang/de-informal/settings.php create mode 100644 plugins/55/indexmenu/lang/de/lang.php create mode 100644 plugins/55/indexmenu/lang/de/settings.php create mode 100644 plugins/55/indexmenu/lang/el/lang.php create mode 100644 plugins/55/indexmenu/lang/en/lang.php create mode 100644 plugins/55/indexmenu/lang/en/settings.php create mode 100644 plugins/55/indexmenu/lang/eo/lang.php create mode 100644 plugins/55/indexmenu/lang/eo/settings.php create mode 100644 plugins/55/indexmenu/lang/es/lang.php create mode 100644 plugins/55/indexmenu/lang/es/settings.php create mode 100644 plugins/55/indexmenu/lang/fr/lang.php create mode 100644 plugins/55/indexmenu/lang/fr/settings.php create mode 100644 plugins/55/indexmenu/lang/hr/lang.php create mode 100644 plugins/55/indexmenu/lang/hr/settings.php create mode 100644 plugins/55/indexmenu/lang/hu/lang.php create mode 100644 plugins/55/indexmenu/lang/hu/settings.php create mode 100644 plugins/55/indexmenu/lang/it/lang.php create mode 100644 plugins/55/indexmenu/lang/it/settings.php create mode 100644 plugins/55/indexmenu/lang/ja/lang.php create mode 100644 plugins/55/indexmenu/lang/ja/settings.php create mode 100644 plugins/55/indexmenu/lang/ko/lang.php create mode 100644 plugins/55/indexmenu/lang/ko/settings.php create mode 100644 plugins/55/indexmenu/lang/nl/lang.php create mode 100644 plugins/55/indexmenu/lang/nl/settings.php create mode 100644 plugins/55/indexmenu/lang/pl/lang.php create mode 100644 plugins/55/indexmenu/lang/pt-br/lang.php create mode 100644 plugins/55/indexmenu/lang/pt-br/settings.php create mode 100644 plugins/55/indexmenu/lang/ru/lang.php create mode 100644 plugins/55/indexmenu/lang/ru/settings.php create mode 100644 plugins/55/indexmenu/lang/sv/lang.php create mode 100644 plugins/55/indexmenu/lang/sv/settings.php create mode 100644 plugins/55/indexmenu/lang/tr/lang.php create mode 100644 plugins/55/indexmenu/lang/vi/lang.php create mode 100644 plugins/55/indexmenu/lang/zh-tw/lang.php create mode 100644 plugins/55/indexmenu/lang/zh/lang.php create mode 100644 plugins/55/indexmenu/lang/zh/settings.php create mode 100644 plugins/55/indexmenu/plugin.info.txt create mode 100644 plugins/55/indexmenu/script.js create mode 100644 plugins/55/indexmenu/scripts/contextmenu.js create mode 100644 plugins/55/indexmenu/scripts/contextmenu.local.js.example create mode 100644 plugins/55/indexmenu/scripts/contextmenu/jquery.ui-contextmenu.js create mode 100644 plugins/55/indexmenu/scripts/contextmenu/jquery.ui-contextmenu.min.js create mode 100644 plugins/55/indexmenu/scripts/contextmenu/jquery.ui-contextmenu.min.js.map create mode 100644 plugins/55/indexmenu/scripts/fancytree/LICENSE.txt create mode 100644 plugins/55/indexmenu/scripts/fancytree/jquery.fancytree-all-deps.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/jquery.fancytree-all-deps.min.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/jquery.fancytree-all-deps.min.js.map create mode 100644 plugins/55/indexmenu/scripts/fancytree/jquery.fancytree-all.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/jquery.fancytree-all.min.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/jquery.fancytree.min.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.ariagrid.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.childcounter.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.clones.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.columnview.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.dnd.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.dnd5.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.edit.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.filter.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.fixed.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.glyph.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.grid.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.gridnav.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.logger.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.menu.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.multi.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.persist.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.table.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.themeroller.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.ui-deps.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/modules/jquery.fancytree.wide.js create mode 100644 plugins/55/indexmenu/scripts/fancytree/readme/icons_layout__from ods.png create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-awesome/skin-common.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-awesome/ui.fancytree.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-awesome/ui.fancytree.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-awesome/ui.fancytree.min.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-awesome/vline-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-awesome/vline.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-bootstrap-n/skin-common.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-bootstrap-n/ui.fancytree.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-bootstrap-n/ui.fancytree.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-bootstrap-n/ui.fancytree.min.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-bootstrap-n/vline-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-bootstrap-n/vline.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-bootstrap/boot.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-bootstrap/skin-common.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-bootstrap/ui.fancytree.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-bootstrap/ui.fancytree.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-bootstrap/ui.fancytree.min.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-bootstrap/vline-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-bootstrap/vline.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-common.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-custom-1/README.md create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-lion/icons-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-lion/icons.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-lion/loading.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-lion/skin-common.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-lion/ui.fancytree.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-lion/ui.fancytree.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-lion/ui.fancytree.min.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-lion/vline-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-lion/vline.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-material/skin-common.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-material/ui.fancytree.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-material/ui.fancytree.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-material/ui.fancytree.min.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-material/vline-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-material/vline.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-mdi/skin-common.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-mdi/ui.fancytree.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-mdi/vline-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-mdi/vline.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-themeroller/icons-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-themeroller/icons.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-themeroller/loading.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-themeroller/ui.fancytree.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-themeroller/ui.fancytree.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-themeroller/ui.fancytree.min.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-themeroller/vline-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-themeroller/vline.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-typicons/skin-common.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-typicons/ui.fancytree.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-typicons/vline-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-typicons/vline.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-vista/icons-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-vista/icons.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-vista/loading.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-vista/skin-common.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-vista/ui.fancytree.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-vista/ui.fancytree.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-vista/ui.fancytree.min.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-vista/vline-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-vista/vline.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win7/icons-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win7/icons.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win7/loading.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win7/skin-common.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win7/ui.fancytree.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win7/ui.fancytree.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win7/ui.fancytree.min.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win7/vline-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win7/vline.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8-n/icons-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8-n/icons.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8-n/loading.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8-n/ui.fancytree.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8-n/ui.fancytree.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8-n/ui.fancytree.min.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8-n/vline-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8-n/vline.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8-xxl/icons-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8-xxl/icons.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8-xxl/loading.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8-xxl/ui.fancytree.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8-xxl/ui.fancytree.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8-xxl/ui.fancytree.min.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8-xxl/vline-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8-xxl/vline.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8/icons-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8/icons.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8/loading.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8/skin-common.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8/ui.fancytree.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8/ui.fancytree.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8/ui.fancytree.min.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8/vline-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-win8/vline.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-xp/icons-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-xp/icons-rtl__old__blue laxy expanders.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-xp/icons.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-xp/icons__old__blue lazy expanders.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-xp/loading.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-xp/skin-common.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-xp/ui.fancytree.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-xp/ui.fancytree.less create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-xp/ui.fancytree.min.css create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-xp/vline-rtl.gif create mode 100644 plugins/55/indexmenu/scripts/fancytree/skin-xp/vline.gif create mode 100644 plugins/55/indexmenu/scripts/indexmenu.js create mode 100644 plugins/55/indexmenu/scripts/nojsindex.js create mode 100644 plugins/55/indexmenu/scripts/toolbarindexwizard.js create mode 100644 plugins/55/indexmenu/style.css create mode 100644 plugins/55/indexmenu/syntax/indexmenu.php create mode 100644 plugins/55/indexmenu/syntax/tag.php diff --git a/plugins/55/indexmenu/.github/workflows/dokuwiki.yml b/plugins/55/indexmenu/.github/workflows/dokuwiki.yml new file mode 100644 index 0000000..ed134c5 --- /dev/null +++ b/plugins/55/indexmenu/.github/workflows/dokuwiki.yml @@ -0,0 +1,11 @@ +name: DokuWiki Default Tasks +on: + push: + pull_request: + schedule: + - cron: '14 17 21 * *' + + +jobs: + all: + uses: dokuwiki/github-action/.github/workflows/all.yml@main diff --git a/plugins/55/indexmenu/COPYING b/plugins/55/indexmenu/COPYING new file mode 100644 index 0000000..d60c31a --- /dev/null +++ b/plugins/55/indexmenu/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/plugins/55/indexmenu/CREDITS b/plugins/55/indexmenu/CREDITS new file mode 100644 index 0000000..3ec7881 --- /dev/null +++ b/plugins/55/indexmenu/CREDITS @@ -0,0 +1,64 @@ +Thanks to: + +Geir Landro: + Dtree Javascript code. + +Roland Hellebart: + The Dtree idea. + +Chris Beetle: + The root namespace index. + +Gleb: + The nons e headpage option suggestion. + +Malyfred: + Resolved incorrect namespaces levels bug. + +Raymond Elferink: + Resolved incorrect ACLs bug. + +Ilya Lebedev: + Skip index option. + +Franck Baron: + Js id option. + +Jon B: + Skip file option. + +Neosky: + Javascript toolbar bug. + +Paul Grove: + Css dynamic properties and suggestion of js theme with differents image formats + +Anja Vag: + Great help in testing and finding bugs. + +Blaz: + Current page highliting suggestion. + +Adrien CLERC: + Start page bug. + +Ryan Jake and Fullindex plugin: + Sort by metada suggestion. + +Herman Huitema: + Context menu search function and great help in testing patches. + +Thomas Binder: + Fixed a bug with msort/nsort that did not manage empty arrays. + +Fabian Pfannes: + German language + +Urban: + Context menu patch and other suggestions + +Gerrit Uitslag (Klap-in): + Rewrite of indexmenu to add new dokuwiki compatibility + Added a new toolbar wizard + add ''hsort'' for sorting [[config:startpage]] pages to top of listing + many others improvements diff --git a/plugins/55/indexmenu/README b/plugins/55/indexmenu/README new file mode 100644 index 0000000..b1a6c1e --- /dev/null +++ b/plugins/55/indexmenu/README @@ -0,0 +1,7 @@ +====== Indexmenu Plugin for DokuWiki ====== + +All documentation for the Indexmenu Plugin is available online at: + + * https://dokuwiki.org/plugin:indexmenu + +(c) 2006 - 2012 by Samuele Tognini diff --git a/plugins/55/indexmenu/Search.php b/plugins/55/indexmenu/Search.php new file mode 100644 index 0000000..19a2724 --- /dev/null +++ b/plugins/55/indexmenu/Search.php @@ -0,0 +1,858 @@ +sort = $sort['sort']; + $this->msort = $sort['msort']; + $this->rsort = $sort['rsort']; + $this->nsort = $sort['nsort']; + $this->hsort = $sort['hsort']; + } + + /** + * Build the data array for fancytree from search results + * + * @param array $data results from search + * @param bool $isInit true if first level of nodes from tree, false if next levels + * @param bool $currentPage current wikipage id + * @param bool $isNopg if nopg is set + * @return array + */ + public function buildFancytreeData($data, $isInit, $currentPage, $isNopg) + { + if (empty($data)) return []; + + $children = []; + $opts = [ + 'currentPage' => $currentPage, + 'isParentLazy' => false, + 'nopg' => $isNopg + ]; + $hasActiveNode = false; + $this->makeNodes($data, -1, 0, $children, $hasActiveNode, $opts); + + if ($isInit) { + $nodes['children'] = $children; + return $nodes; + } else { + return $children; + } + } + + /** + * Collects the children at the same level since last parsed item + * + * @param array $data results from search + * @param int $indexLatestParsedItem + * @param int $previousLevel level of parent + * @param array $nodes by reference, here the child nodes are stored + * @param bool $hasActiveNode active node must be unique, needs tracking + * @param array $opts
    + *
  • $opts['currentPage'] string id of main article
  • + *
  • $opts['isParentLazy'] bool Used for recognizing the extra level below lazy nodes
  • + *
  • $opts['nopg'] bool needed for currentpage handling
  • + *
+ * @return int latest parsed item from data array + */ + private function makeNodes(&$data, $indexLatestParsedItem, $previousLevel, &$nodes, &$hasActiveNode, $opts) + { + $i = 0; + $counter = 0; + foreach ($data as $i => $item) { + //skip parsed items + if ($i <= $indexLatestParsedItem) { + continue; + } + + if ($item['level'] < $previousLevel || $counter === 0 && $item['level'] == $previousLevel) { + return $i - 1; + } + $node = [ + 'title' => $item['title'], + 'key' => $item['id'] . ($item['type'] === 'f' ? '' : ':'), //ensure ns is unique + 'hns' => $item['hns'] //false if not available + ]; + + // f=file, d=directory, l=directory which is lazy loaded later + if ($item['type'] == 'f') { + // let php create url (considering rewriting etc) + $node['url'] = wl($item['id']); + + //set current page to active + if ($opts['currentPage'] == $item['id']) { + if (!$hasActiveNode) { + $node['active'] = true; + $hasActiveNode = true; + } + } + } else { + // type: d/l + $node['folder'] = true; + // let php create url (considering rewriting etc) + $node['url'] = $item['hns'] === false ? false : wl($item['hns']); + if (!$item['hnsExists']) { + //change link color + $node['hnsNotExisting'] = true; + } + + if ($item['open'] === true) { + $node['expanded'] = true; + } + + $node['children'] = []; + $indexLatestParsedItem = $this->makeNodes( + $data, + $i, + $item['level'], + $node['children'], + $hasActiveNode, + [ + 'currentPage' => $opts['currentPage'], + 'isParentLazy' => $item['type'] === 'l', + 'nopg' => $opts['nopg'] + ] + ); + + // a lazy node, but because we have sometime no pages or nodes (due e.g. acl/hidden/nopg), it could be + // empty. Therefore we did extra work by walking a level deeper and check here whether it has children + if ($item['type'] === 'l') { + if (empty($node['children'])) { + //an empty lazy node, is not marked lazy + if ($opts['isParentLazy']) { + //a lazy node with a lazy parent has no children loaded, so stays always empty + //(these nodes are not really used, but only counted) + $node['lazy'] = true; + unset($node['children']); + } + } else { + //has children, so mark lazy + $node['lazy'] = true; + unset($node['children']); //do not keep, because these nodes do not know yet their child folders + } + } + + //might be duplicated if hide_headpage is disabled, or with nopg and a :same: headpage + //mark active after processing children, such that deepest level is activated + if ( + $item['hns'] === $opts['currentPage'] + || $opts['nopg'] && getNS($opts['currentPage']) === $item['id'] + ) { + //with hide_headpage enabled, the parent node must be actived + //special: nopg has no pages, therefore, mark its parent node active + if (!$hasActiveNode) { + $node['active'] = true; + $hasActiveNode = true; + } + } + } + + if ($item['type'] === 'f' || !empty($node['children']) || isset($node['lazy']) || $item['hns'] !== false) { + // add only files, non-empty folders, lazy-loaded or folder with only a headpage + $nodes[] = $node; + } + + $previousLevel = $item['level']; + $counter++; + } + return $i; + } + + + /** + * Search pages/folders depending on the given options $opts + * + * @param string $ns + * @param array $opts
    + *
  • $opts['skipns'] string regexp matching namespaceids to skip (ignored)
  • + *
  • $opts['skipfile'] string regexp matching pageids to skip (ignored)
  • + *
  • $opts['skipnscombined'] array regexp matching namespaceids to skip
  • + *
  • $opts['skipfilecombined'] array regexp matching pageids to skip
  • + *
  • $opts['headpage'] string headpages options or pageids
  • + *
  • $opts['level'] int desired depth of main namespace, -1 = all levels
  • + *
  • $opts['subnss'] array with entries: array(namespaceid,level) specifying namespaces with their own + * number of opened levels
  • + *
  • $opts['nons'] bool exclude namespace nodes
  • + *
  • $opts['max'] int If initially closed, the node at max level will retrieve all its child nodes + * through the AJAX mechanism
  • + *
  • $opts['nopg'] bool exclude page nodes
  • + *
  • $opts['hide_headpage'] int don't hide (0) or hide (1)
  • + *
  • $opts['js'] bool use js-render (only used for old 'searchIndexmenuItems')
  • + *
+ * @return array The results of the search + */ + public function search($ns, $opts): array + { + global $conf; + + if (!empty($opts['tempNew'])) { + //a specific callback for Fancytree + $callback = [$this, 'searchIndexmenuItemsNew']; + } else { + $callback = [$this, 'searchIndexmenuItems']; + } + $dataDir = $conf['datadir']; + $data = []; + $fsDir = "/" . utf8_encodeFN(str_replace(':', '/', $ns)); + if ($this->sort || $this->msort || $this->rsort || $this->hsort) { + $this->customSearch($data, $dataDir, $callback, $opts, $fsDir); + } else { + search($data, $dataDir, $callback, $opts, $fsDir); + } + return $data; + } + + /** + * Callback that adds an item of namespace/page to the browsable index, if it fits in the specified options + * + * @param array $data Already collected nodes + * @param string $base Where to start the search, usually this is $conf['datadir'] + * @param string $file Current file or directory relative to $base + * @param string $type Type either 'd' for directory or 'f' for file + * @param int $lvl Current recursion depth + * @param array $opts Option array as given to search():
    + *
  • $opts['skipns'] string regexp matching namespaceids to skip (ignored),
  • + *
  • $opts['skipfile'] string regexp matching pageids to skip (ignored),
  • + *
  • $opts['skipnscombined'] array regexp matching namespaceids to skip,
  • + *
  • $opts['skipfilecombined'] array regexp matching pageids to skip,
  • + *
  • $opts['headpage'] string headpages options or pageids,
  • + *
  • $opts['level'] int desired depth of main namespace, -1 = all levels,
  • + *
  • $opts['subnss'] array with entries: array(namespaceid,level) specifying namespaces with their own number + * of opened levels,
  • + *
  • $opts['nons'] bool Exclude namespace nodes,
  • + *
  • $opts['max'] int If initially closed, the node at max level will retrieve all its child nodes through + * the AJAX mechanism,
  • + *
  • $opts['nopg'] bool Exclude page nodes,
  • + *
  • $opts['hide_headpage'] int don't hide (0) or hide (1),
  • + *
  • $opts['js'] bool use js-render
  • + *
+ * @return bool if this directory should be traversed (true) or not (false) + * + * @author Andreas Gohr + * modified by Samuele Tognini + */ + public function searchIndexmenuItems(&$data, $base, $file, $type, $lvl, $opts) + { + global $conf; + + $hns = false; + $isOpen = false; + $title = null; + $skipns = $opts['skipnscombined']; + $skipfile = $opts['skipfilecombined']; + $headpage = $opts['headpage']; + $id = pathID($file); + + if ($type == 'd') { + // Skip folders in plugin conf + foreach ($skipns as $skipn) { + if (!empty($skipn) && preg_match($skipn, $id)) { + return false; + } + } + //check ACL (for sneaky_index namespaces too). + if ($conf['sneaky_index'] && auth_quickaclcheck($id . ':') < AUTH_READ) return false; + + //Open requested level + if ($opts['level'] > $lvl || $opts['level'] == -1) { + $isOpen = true; + } + //Search optional subnamespaces with + if (!empty($opts['subnss'])) { + $subnss = $opts['subnss']; + $counter = count($subnss); + for ($a = 0; $a < $counter; $a++) { + if (preg_match("/^" . $id . "($|:.+)/i", $subnss[$a][0], $match)) { + //It contains a subnamespace + $isOpen = true; + } elseif (preg_match("/^" . $subnss[$a][0] . "(:.*)/i", $id, $match)) { + //It's inside a subnamespace, check level + // -1 is open all, otherwise count number of levels in the remainer of the pageid + // (match[0] is always prefixed with :) + if ($subnss[$a][1] == -1 || substr_count($match[1], ":") < $subnss[$a][1]) { + $isOpen = true; + } else { + $isOpen = false; + } + } + } + } + + //decide if it should be traversed + if ($opts['nons']) { + return $isOpen; // in nons, level is only way to show/hide nodes (in nons nodes are not expandable) + } elseif ($opts['max'] > 0 && !$isOpen && $lvl >= $opts['max']) { + //Stop recursive searching + $shouldBeTraversed = false; + //change type + $type = "l"; + } elseif ($opts['js']) { + $shouldBeTraversed = true; //TODO if js tree, then traverse deeper??? + } else { + $shouldBeTraversed = $isOpen; + } + //Set title and headpage + $title = static::getNamespaceTitle($id, $headpage, $hns); + // when excluding page nodes: guess a headpage based on the headpage setting + if ($opts['nopg'] && $hns === false) { + $hns = $this->guessHeadpage($headpage, $id); + } + } else { + //Nopg. Dont show pages + if ($opts['nopg']) return false; + + $shouldBeTraversed = true; + //Nons.Set all pages at first level + if ($opts['nons']) { + $lvl = 1; + } + //don't add + if (substr($file, -4) != '.txt') return false; + //check hiddens and acl + if (isHiddenPage($id) || auth_quickaclcheck($id) < AUTH_READ) return false; + //Skip files in plugin conf + foreach ($skipfile as $skipf) { + if (!empty($skipf) && preg_match($skipf, $id)) { + return false; + } + } + //Skip headpages to hide (nons has no namespace nodes, therefore, no duplicated links to headpage) + if (!$opts['nons'] && !empty($headpage) && $opts['hide_headpage']) { + //start page is in root + if ($id == $conf['start']) return false; + + $ahp = explode(",", $headpage); + foreach ($ahp as $hp) { + switch ($hp) { + case ":inside:": + if (noNS($id) == noNS(getNS($id))) return false; + break; + case ":same:": + if (@is_dir(dirname(wikiFN($id)) . "/" . utf8_encodeFN(noNS($id)))) return false; + break; + //it' s an inside start + case ":start:": + if (noNS($id) == $conf['start']) return false; + break; + default: + if (noNS($id) == cleanID($hp)) return false; + } + } + } + //Set title + if ($conf['useheading'] == 1 || $conf['useheading'] === 'navigation') { + $title = p_get_first_heading($id, false); + } + if (is_null($title)) { + $title = noNS($id); + } + $title = hsc($title); + } + + $item = [ + 'id' => $id, + 'type' => $type, + 'level' => $lvl, + 'open' => $isOpen, + 'title' => $title, + 'hns' => $hns, + 'file' => $file, + 'shouldBeTraversed' => $shouldBeTraversed + ]; + $item['sort'] = $this->getSortValue($item); + $data[] = $item; + + return $shouldBeTraversed; + } + + /** + * Callback that adds an item of namespace/page to the browsable index, if it fits in the specified options + * + * TODO Version as used for Fancytree js tree + * + * @param array $data indexed array of collected nodes, each item has:
    + *
  • $item['id'] string namespace or page id
  • + *
  • $item['type'] string f/d/l
  • + *
  • $item['level'] string current recursion depth (start count at 1)
  • + *
  • $item['open'] bool if a node is open
  • + *
  • $item['title'] string
  • + *
  • $item['hns'] string|false page id or false
  • + *
  • $item['hnsExists'] bool only false if hns is guessed(not-existing) for nopg
  • + *
  • $item['file'] string path to file or directory
  • + *
  • $item['shouldBeTraversed'] bool directory should be searched
  • + *
  • $item['sort'] mixed sort value
  • + *
+ * @param string $base Where to start the search, usually this is $conf['datadir'] + * @param string $file Current file or directory relative to $base + * @param string $type Type either 'd' for directory or 'f' for file + * @param int $lvl Current recursion depth + * @param array $opts Option array as given to search()
    + *
  • $opts['skipns'] string regexp matching namespaceids to skip (ignored)
  • + *
  • $opts['skipfile'] string regexp matching pageids to skip (ignored)
  • + *
  • $opts['skipnscombined'] array regexp matching namespaceids to skip
  • + *
  • $opts['skipfilecombined'] array regexp matching pageids to skip
  • + *
  • $opts['headpage'] string headpages options or pageids
  • + *
  • $opts['level'] int desired depth of main namespace, -1 = all levels
  • + *
  • $opts['subnss'] array with entries: array(namespaceid,level) specifying namespaces with their + * own level
  • + *
  • $opts['nons'] bool exclude namespace nodes
  • + *
  • $opts['max'] int If initially closed, the node at max level will retrieve all its child nodes + * through the AJAX mechanism
  • + *
  • $opts['nopg'] bool exclude page nodes
  • + *
  • $opts['hide_headpage'] int don't hide (0) or hide (1)
  • + *
+ * @return bool if this directory should be traversed (true) or not (false) + * + * @author Andreas Gohr + * modified by Samuele Tognini + */ + public function searchIndexmenuItemsNew(&$data, $base, $file, $type, $lvl, $opts) + { + global $conf; + + $hns = false; + $isOpen = false; + $title = null; + $skipns = $opts['skipnscombined']; + $skipfile = $opts['skipfilecombined']; + $headpage = $opts['headpage']; + $hnsExists = true; //nopg guesses pages + $id = pathID($file); + + if ($type == 'd') { + // Skip folders in plugin conf + foreach ($skipns as $skipn) { + if (!empty($skipn) && preg_match($skipn, $id)) { + return false; + } + } + //check ACL (for sneaky_index namespaces too). + if ($conf['sneaky_index'] && auth_quickaclcheck($id . ':') < AUTH_READ) return false; + + //Open requested level + if ($opts['level'] > $lvl || $opts['level'] == -1) { + $isOpen = true; + } + + //Search optional subnamespaces with + $isFolderAdjacentToSubNss = false; + if (!empty($opts['subnss'])) { + $subnss = $opts['subnss']; + $counter = count($subnss); + + for ($a = 0; $a < $counter; $a++) { + if (preg_match("/^" . $id . "($|:.+)/i", $subnss[$a][0], $match)) { + //this folder contains a subnamespace + $isOpen = true; + } elseif (preg_match("/^" . $subnss[$a][0] . "(:.*)/i", $id, $match)) { + //this folder is inside a subnamespace, check level + if ($subnss[$a][1] == -1 || substr_count($match[1], ":") < $subnss[$a][1]) { + $isOpen = true; + } else { + $isOpen = false; + } + } elseif ( + preg_match( + "/^" . (($ns = getNS($id)) === false ? '' : $ns) . "($|:.+)/i", + $subnss[$a][0], + $match + ) + ) { + // parent folder contains a subnamespace, if level deeper it does not match anymore + // that is handled with normal >max handling + $isOpen = false; + if ($opts['max'] > 0) { + $isFolderAdjacentToSubNss = true; + } + } + } + } + + //decide if it should be traversed + if ($opts['nons']) { + return $isOpen; // in nons, level is only way to show/hide nodes (in nons nodes are not expandable) + } elseif ($opts['max'] > 0 && !$isOpen) { // note: for Fancytree >=1 is used + // limited levels per request, node is closed + if ($lvl == $opts['max'] || $isFolderAdjacentToSubNss) { + // change type, more nodes should be loaded by ajax, but for nopg we need extra level to determine + // if folder is empty + // and folders adjacent to subns must be traversed as well + $type = "l"; + $shouldBeTraversed = true; + } elseif ($lvl > $opts['max']) { // deeper lvls only used temporary for checking existance children + //change type, more nodes should be loaded by ajax + $type = "l"; // use lazy loading + $shouldBeTraversed = false; + } else { + //node is closed, but still more levels requested with max + $shouldBeTraversed = true; + } + } else { + $shouldBeTraversed = $isOpen; + } + + //Set title and headpage + $title = static::getNamespaceTitle($id, $headpage, $hns); + + // when excluding page nodes: guess a headpage based on the headpage setting + if ($opts['nopg'] && $hns === false) { + $hns = $this->guessHeadpage($headpage, $id); + $hnsExists = false; + } + } else { + //Nopg.Dont show pages + if ($opts['nopg']) return false; + + $shouldBeTraversed = true; + //Nons.Set all pages at first level + if ($opts['nons']) { + $lvl = 1; + } + //don't add + if (substr($file, -4) != '.txt') return false; + //check hiddens and acl + if (isHiddenPage($id) || auth_quickaclcheck($id) < AUTH_READ) return false; + //Skip files in plugin conf + foreach ($skipfile as $skipf) { + if (!empty($skipf) && preg_match($skipf, $id)) { + return false; + } + } + //Skip headpages to hide + if (!$opts['nons'] && !empty($headpage) && $opts['hide_headpage']) { + //start page is in root + if ($id == $conf['start']) return false; + + $hpOptions = explode(",", $headpage); + foreach ($hpOptions as $hp) { + switch ($hp) { + case ":inside:": + if (noNS($id) == noNS(getNS($id))) return false; + break; + case ":same:": + if (@is_dir(dirname(wikiFN($id)) . "/" . utf8_encodeFN(noNS($id)))) return false; + break; + //it' s an inside start + case ":start:": + if (noNS($id) == $conf['start']) return false; + break; + default: + if (noNS($id) == cleanID($hp)) return false; + } + } + } + + //Set title + if ($conf['useheading'] == 1 || $conf['useheading'] === 'navigation') { + $title = p_get_first_heading($id, false); + } + if (is_null($title)) { + $title = noNS($id); + } + $title = hsc($title); + } + + $item = [ + 'id' => $id, + 'type' => $type, + 'level' => $lvl, + 'open' => $isOpen, + 'title' => $title, + 'hns' => $hns, + 'hnsExists' => $hnsExists, + 'file' => $file, + 'shouldBeTraversed' => $shouldBeTraversed + ]; + $item['sort'] = $this->getSortValue($item); + $data[] = $item; + + return $shouldBeTraversed; + } + + /** + * callback that recurse directory + * + * This function recurses into a given base directory + * and calls the supplied function for each file and directory + * + * Similar to search() of inc/search.php, but has extended sorting options + * + * @param array $data The results of the search are stored here + * @param string $base Where to start the search + * @param callback $func Callback (function name or array with object,method) + * @param array $opts List of indexmenu options + * @param string $dir Current directory beyond $base + * @param int $lvl Recursion Level + * + * @author Andreas Gohr + * @author modified by Samuele Tognini + */ + public function customSearch(&$data, $base, $func, $opts, $dir = '', $lvl = 1) + { + $dirs = []; + $files = []; + $files_tmp = []; + $dirs_tmp = []; + $count = count($data); + + //read in directories and files + $dh = @opendir($base . '/' . $dir); + if (!$dh) return; + while (($file = readdir($dh)) !== false) { + //skip hidden files and upper dirs + if (preg_match('/^[._]/', $file)) continue; + if (is_dir($base . '/' . $dir . '/' . $file)) { + $dirs[] = $dir . '/' . $file; + continue; + } + $files[] = $dir . '/' . $file; + } + closedir($dh); + + //Collect and sort files + foreach ($files as $file) { + call_user_func_array($func, [&$files_tmp, $base, $file, 'f', $lvl, $opts]); + } + usort($files_tmp, [$this, "compareNodes"]); + + //Collect and sort dirs + if ($this->nsort) { + //collect the wanted directories in dirs_tmp + foreach ($dirs as $dir) { + call_user_func_array($func, [&$dirs_tmp, $base, $dir, 'd', $lvl, $opts]); + } + //combine directories and pages and sort together + $dirsAndFiles = array_merge($dirs_tmp, $files_tmp); + usort($dirsAndFiles, [$this, "compareNodes"]); + + //add and search each directory + foreach ($dirsAndFiles as $dirOrFile) { + $data[] = $dirOrFile; + if ($dirOrFile['type'] != 'f' && $dirOrFile['shouldBeTraversed']) { + $this->customSearch($data, $base, $func, $opts, $dirOrFile['file'], $lvl + 1); + } + } + } else { + //sort by directory name + Sort::sort($dirs); + //collect directories + foreach ($dirs as $dir) { + if (call_user_func_array($func, [&$data, $base, $dir, 'd', $lvl, $opts])) { + $this->customSearch($data, $base, $func, $opts, $dir, $lvl + 1); + } + } + } + + //count added items + $added = count($data) - $count; + + if ($added === 0 && $files_tmp === []) { + //remove empty directory again, only if it has not a headpage associated + $lastItem = end($data); + if (!$lastItem['hns']) { + array_pop($data); + } + } elseif (!$this->nsort) { + //add files to index + $data = array_merge($data, $files_tmp); + } + } + + + /** + * Get namespace title, checking for headpages + * + * @param string $ns namespace + * @param string $headpage comma-separated headpages options and headpages + * @param string|false $hns reference pageid of headpage, false when not existing + * @return string when headpage & heading on: title of headpage, otherwise: namespace name + * + * @author Samuele Tognini + */ + public static function getNamespaceTitle($ns, $headpage, &$hns) + { + global $conf; + $hns = false; + $title = noNS($ns); + if (empty($headpage)) { + return $title; + } + $hpOptions = explode(",", $headpage); + foreach ($hpOptions as $hp) { + switch ($hp) { + case ":inside:": + $page = $ns . ":" . noNS($ns); + break; + case ":same:": + $page = $ns; + break; + //it's an inside start + case ":start:": + $page = ltrim($ns . ":" . $conf['start'], ":"); + break; + //inside pages + default: + if (!blank($hp)) { //empty setting results in empty string here + $page = $ns . ":" . $hp; + } + } + //check headpage + if (@file_exists(wikiFN($page)) && auth_quickaclcheck($page) >= AUTH_READ) { + if ($conf['useheading'] == 1 || $conf['useheading'] === 'navigation') { + $title_tmp = p_get_first_heading($page, false); + if (!is_null($title_tmp)) { + $title = $title_tmp; + } + } + $title = hsc($title); + $hns = $page; + //headpage found, exit for + break; + } + } + return $title; + } + + + /** + * callback that sorts nodes + * + * @param array $a first node as array with 'sort' entry + * @param array $b second node as array with 'sort' entry + * @return int if less than zero 1st node is less than 2nd, otherwise equal respectively larger + */ + private function compareNodes($a, $b) + { + if ($this->rsort) { + return Sort::strcmp($b['sort'], $a['sort']); + } else { + return Sort::strcmp($a['sort'], $b['sort']); + } + } + + /** + * Add sort information to item. + * + * @param array $item + * @return bool|int|mixed|string + * + * @author Samuele Tognini + */ + private function getSortValue($item) + { + global $conf; + + $sort = false; + $page = false; + if ($item['type'] == 'd' || $item['type'] == 'l') { + //Fake order info when nsort is not requested + if ($this->nsort) { + $page = $item['hns']; + } else { + $sort = 0; + } + } + if ($item['type'] == 'f') { + $page = $item['id']; + } + if ($page) { + if ($this->hsort && noNS($item['id']) == $conf['start']) { + $sort = 1; + } + if ($this->msort) { + $sort = p_get_metadata($page, $this->msort); + } + if (!$sort && $this->sort) { + switch ($this->sort) { + case 't': + $sort = $item['title']; + break; + case 'd': + $sort = @filectime(wikiFN($page)); + break; + } + } + } + if ($sort === false) { + $sort = noNS($item['id']); + } + return $sort; + } + + /** + * Guess based on first option of the headpage config setting (default :start: if enabled) the headpage of the node + * + * @param string $headpage config setting + * @param string $ns namespace + * @return string guessed headpage + */ + private function guessHeadpage(string $headpage, string $ns): string + { + global $conf; + $hns = false; + + $hpOptions = explode(",", $headpage); + foreach ($hpOptions as $hp) { + switch ($hp) { + case ":inside:": + $hns = $ns . ":" . noNS($ns); + break 2; + case ":same:": + $hns = $ns; + break 2; + //it's an inside start + case ":start:": + $hns = ltrim($ns . ":" . $conf['start'], ":"); + break 2; + //inside pages + default: + if (!blank($hp)) { + $hns = $ns . ":" . $hp; + break 2; + } + } + } + + if ($hns === false) { + //fallback to start if headpage setting was empty + $hns = ltrim($ns . ":" . $conf['start'], ":"); + } + return $hns; + } +} diff --git a/plugins/55/indexmenu/_test/ActionTest.php b/plugins/55/indexmenu/_test/ActionTest.php new file mode 100644 index 0000000..e55a7a7 --- /dev/null +++ b/plugins/55/indexmenu/_test/ActionTest.php @@ -0,0 +1,35 @@ +pluginsEnabled[] = 'indexmenu'; + parent::setUp(); // this enables the include plugin +// $this->helper = plugin_load('helper', 'include'); + +// global $conf; +// $conf['hidepages'] = 'inclhidden:hidden'; + + // for testing hidden pages + saveWikiText('ns2:bpage', "======H1======\nText", 'Sort different naturally/title/page'); + saveWikiText('ns2:apage', "======H3======\nText", 'Sort different naturally/title/page'); + saveWikiText('ns2:cpage', "======H2======\nText", 'Sort different naturally/title/page'); + + // pages on different levels + saveWikiText('ns1:ns1:apage', 'Page on level 1', 'Created page on level 1'); + saveWikiText('ns1:lvl2:lvl3:lvl4:apage', 'Page on level 4', 'Created page on level 4'); + saveWikiText('ns1:ns2:apage', 'Page on level 2', 'Created page on level 2'); + saveWikiText('ns1:ns0:bpage', 'Page on level 2', 'Created page on level 2'); + } + +} diff --git a/plugins/55/indexmenu/_test/AjaxRequestsTest.php b/plugins/55/indexmenu/_test/AjaxRequestsTest.php new file mode 100644 index 0000000..4fe5163 --- /dev/null +++ b/plugins/55/indexmenu/_test/AjaxRequestsTest.php @@ -0,0 +1,345 @@ +pluginsEnabled[] = 'indexmenu'; + parent::setUp(); // this enables the indexmenu plugin + + //needed for 'tsort' to use First headings, sets title during search, otherwise as fallback page name used. + global $conf; + $conf['useheading'] = 'navigation'; + + + // for testing sorting pages + saveWikiText('ns2:cpage', "======Bb======\nText", 'Sort different page/title/creation date'); + sleep(1); // ensure different timestamps for 'dsort' + saveWikiText('ns2:bpage', "======Aa======\nText", 'Sort different page/title/creation date'); + sleep(1); + saveWikiText('ns2:apage', "======Cc======\nText", 'Sort different page/title/creation date'); + + //ensures title is added to metadata of page + idx_addPage('ns2:cpage'); + idx_addPage('ns2:bpage'); + idx_addPage('ns2:apage'); + + // pages on different levels + saveWikiText('ns1:ns2:apage', "======Bb======\nPage on level 2", 'Created page on level 2'); + saveWikiText('ns1:ns1:apage', "======Ee======\nPage on level 2", 'Created page on level 2'); + saveWikiText('ns1:ns1:lvl3:lvl4:apage', "======Cc======\nPage on levl 4", 'Page on level 4'); + saveWikiText('ns1:ns1:start', "======Aa======\nPage on level 2", 'Startpage on level 2'); + saveWikiText('ns1:ns0:bpage', "======Aa2======\nPage on level 2", 'Created page on level 2'); + saveWikiText('ns1:apage', "======Dd======\nPage on level 1", 'Created page on level 1'); + + //ensures title is added to metadata + idx_addPage('ns1:ns1:apage'); + idx_addPage('ns1:ns1:lvl3:lvl4:apage'); + idx_addPage('ns1:ns1:start'); + idx_addPage('ns1:ns2:apage'); + idx_addPage('ns1:ns0:bpage'); + idx_addPage('ns1:apage'); + } + + /** + * DataProvider for the builtin Ajax calls + * + * @return array + */ + public static function indexmenuCalls() + { + return [ + // Call, POST parameters, result function + [ + 'indexmenu', + AjaxRequestsTest::prepareParams(['level' => 1]), + 'expectedResultWiki' + ], + [ + 'indexmenu', + AjaxRequestsTest::prepareParams(['ns' => 'ns2', 'level' => 1]), + 'expectedResultNs2PageSort' + ], + [ + 'indexmenu', + AjaxRequestsTest::prepareParams(['ns' => 'ns2', 'level' => 1, 'sort' => 't']), + 'expectedResultNs2TitleSort' + ], + [ + 'indexmenu', + AjaxRequestsTest::prepareParams(['ns' => 'ns2', 'level' => 1, 'sort' => 'd']), + 'expectedResultNs2CreationDateSort' + ], + [ + 'indexmenu', + AjaxRequestsTest::prepareParams(['ns' => 'ns1', 'level' => 1, 'sort' => 't']), + 'expectedResultNs1TitleSort' + ], + [ + 'indexmenu', + AjaxRequestsTest::prepareParams(['ns' => 'ns1', 'level' => 1, 'sort' => 't', 'nsort' => 1]), + 'expectedResultNs1TitleSortNamespaceSort' + ] + ]; + } + + /** + * @dataProvider indexmenuCalls + * + * @param string $call + * @param array $post + * @param $expectedResult + */ + public function testBasicSorting($call, $post, $expectedResult) + { + $request = new TestRequest(); + $response = $request->post(['call' => $call] + $post, '/lib/exe/ajax.php'); +// $this->assertNotEquals("AJAX call '$call' unknown!\n", $response->getContent()); + +//var_export(json_decode($response->getContent()), true); // print as PHP array + + $actualArray = json_decode($response->getContent(), true); + unset($actualArray['debug']); + unset($actualArray['sort']); + unset($actualArray['opts']); + + $this->assertEquals($this->$expectedResult(), $actualArray); + +// $regexp: null, or regexp pattern to match +// example: '/^
exampleIndex = "{{indexmenu>:}}"; +// +// parent::__construct(); +// } + + /** + * Create from list of values the output array of handle() + * + * @param array $values + * @return array aligned similar to output of handle() + */ + private function createData($values) + { + + [ + $ns, $theme, $identifier, $nocookie, $navbar, $noscroll, $maxjs, $notoc, $jsajax, $context, $nomenu, + $sort, $msort, $rsort, $nsort, $level, $nons, $nopg, $subnss, $max, $maxAjax, $js, $skipns, $skipfile, + $skipnscombined, $skipfilecombined, $hsort, $headpage, $hide_headpage, $jsVersion + ] = $values; + + return [ + $ns, + [ + 'theme' => $theme, + 'identifier' => $identifier, + 'nocookie' => $nocookie, + 'navbar' => $navbar, + 'noscroll' => $noscroll, + 'maxJs' => $maxjs, + 'notoc' => $notoc, + 'jsAjax' => $jsajax, + 'context' => $context, + 'nomenu' => $nomenu, + ], + [ + 'sort' => $sort, + 'msort' => $msort, + 'rsort' => $rsort, + 'nsort' => $nsort, + 'hsort' => $hsort, + ], + [ + 'level' => $level, + 'nons' => $nons, + 'nopg' => $nopg, + 'subnss' => $subnss, + 'max' => $max, + 'js' => $js, + 'skipns' => $skipns, + 'skipfile' => $skipfile, + 'skipnscombined' => $skipnscombined, + 'skipfilecombined' => $skipfilecombined, + 'headpage' => $headpage, + 'hide_headpage' => $hide_headpage, + 'maxajax' => $maxAjax, + 'navbar' => $navbar, + 'theme' => $theme + ], + $jsVersion + ]; + } + + /** + * Data provider + * + * @return array[] + */ + public static function someSyntaxes() + { + return [ + //root ns (empty is not recognized..) + // [syntax, data] + [ + "{{indexmenu>:}}", + [ + '', 'default', 'random', false, false, false, 1, false, '', false, false, + 0, false, false, false, -1, false, false, [], 0, 1, false, '', '', [''], [''], false, + ":start:,:same:,:inside:", 1, 1 + ] + ], + //root ns, #levels=1, js renderer + [ + "{{indexmenu>#1|js}}", + [ + '', 'default', 'random', false, false, false, 1, false, '', false, false, + 0, false, false, false, 1, false, false, [], 0, 1, true, '', '', [''], [''], false, + ":start:,:same:,:inside:", 1, 1 + ] + ], + //root ns, #levels=2, all not js specific options (nocookie is from context) + [ + "{{indexmenu>#2 test#6|navbar context tsort dsort msort hsort rsort nsort nons nopg}}", + [ + '', 'default', 'random', true, true, false, 1, false, '&sort=t&msort=indexmenu_n&rsort=1&nsort=1&hsort=1&nopg=1', true, false, + 't', 'indexmenu_n', true, true, 2, true, true, [['test', 6]], 0, 1, false, '', '', [''], [''], true, + ":start:,:same:,:inside:", 1, 1 + ] + ], + //root ns, #levels=2, js renderer, all not js specific options + [ + "{{indexmenu>#2 test#6|navbar js#bj_ubuntu.png context tsort dsort msort hsort rsort nsort nons nopg}}", + [ + '', 'bj_ubuntu.png', 'random', true, true, false, 1, false, '&sort=t&msort=indexmenu_n&rsort=1&nsort=1&hsort=1&nopg=1', true, false, + 't', 'indexmenu_n', true, true, 2, true, true, [['test', 6]], 0, 1, true, '', '', [''], [''], true, + ":start:,:same:,:inside:", 1, 1 + ] + ], + //root ns, #levels=1, all options + [ + "{{indexmenu>#1|navbar context nocookie noscroll notoc nomenu dsort msort#date:modified hsort rsort nsort nons nopg max#2#4 maxjs#3 id#54321}}", + [ + '', 'default', 'random', true, true, true, 1, true, '&sort=d&msort=date modified&rsort=1&nsort=1&hsort=1&nopg=1', true, true, + 'd', 'date modified', true, true, 1, true, true, [], 0, 1, false, '', '', [''], [''], true, + ":start:,:same:,:inside:", 1, 1 + ] + ], + //root ns, #levels=1, js renderer, all options + [ + "{{indexmenu>#1|js#bj_ubuntu.png navbar context nocookie noscroll notoc nomenu dsort msort#date:modified hsort rsort nsort nons nopg max#2#4 maxjs#3 id#54321}}", + [ + '', 'bj_ubuntu.png', 54321, true, true, true, 3, true, '&sort=d&msort=date modified&rsort=1&nsort=1&hsort=1&nopg=1&max=4', true, true, + 'd', 'date modified', true, true, 1, true, true, [], 2, 4, true, '', '', [''], [''], true, + ":start:,:same:,:inside:", 1, 1 + ] + ], + //root ns, #levels=1, skipfile and ns + + [ + "{{indexmenu>#1 test|skipfile+/(^myusers:spaces$|privatens:userss)/ skipns=/(^myusers:spaces$|privatens:users)/ id#ns}}", + [ + '', 'default', 'random', false, false, false, 1, false, '&skipns=%3D/%28%5Emyusers%3Aspaces%24%7Cprivatens%3Ausers%29/&skipfile=%2B/%28%5Emyusers%3Aspaces%24%7Cprivatens%3Auserss%29/', false, false, + 0, false, false, false, 1, false, false, [['test', -1]], 0, 1, false, '=/(^myusers:spaces$|privatens:users)/', + '+/(^myusers:spaces$|privatens:userss)/', ['/(^myusers:spaces$|privatens:users)/'], ['', '/(^myusers:spaces$|privatens:userss)/'], false, + ":start:,:same:,:inside:", 1, 1 + ] + ], + //root ns, #levels=1, js renderer, skipfile and ns + [ + "{{indexmenu>#1 test|js skipfile=/(^myusers:spaces$|privatens:userss)/ skipns+/(^myusers:spaces$|privatens:userssss)/ id#ns}}", + [ + '', 'default', 0, false, false, false, 1, false, '&skipns=%2B/%28%5Emyusers%3Aspaces%24%7Cprivatens%3Auserssss%29/&skipfile=%3D/%28%5Emyusers%3Aspaces%24%7Cprivatens%3Auserss%29/', false, false, + 0, false, false, false, 1, false, false, [['test', -1]], 0, 1, true, '+/(^myusers:spaces$|privatens:userssss)/', + '=/(^myusers:spaces$|privatens:userss)/', ['', '/(^myusers:spaces$|privatens:userssss)/'], ['/(^myusers:spaces$|privatens:userss)/'], false, + ":start:,:same:,:inside:", 1, 1 + ] + ] + ]; + } + + /** + * Parse the syntax to options + * expect: different combinations with or without js option, covers recognizing all syntax options + * + * @dataProvider someSyntaxes + */ + public function testHandle($syntax, $changedData) + { + $plugin = new syntax_plugin_indexmenu_indexmenu(); + + $null = new Doku_Handler(); + $result = $plugin->handle($syntax, 0, 40, $null); + + //copy unique generated number, which is about 23 characters + $len_id = strlen($result[1]['identifier']); + if (!is_numeric($changedData[2]) && ($len_id > 18 && $len_id <= 23)) { + $changedData[2] = $result[1]['identifier']; + } + $data = $this->createData($changedData); + + $this->assertEquals($data, $result, 'Data array corrupted'); + } + + + /** + * Data provider + * + * @return array[] + */ + public static function differentNSs() + { + $pageInRoot = 'page'; + $pageInLvl1 = 'ns:page'; + $pageInLvl2 = 'ns1:ns2:page'; + return [ + //indexmenu on page at root level + ['{{indexmenu>|}}', '', [], $pageInRoot], + ['{{indexmenu>#1}}', '', [], $pageInRoot], + ['{{indexmenu>:}}', '', [], $pageInRoot], + ['{{indexmenu>.}}', '', [], $pageInRoot], + ['{{indexmenu>.:}}', '', [], $pageInRoot], + ['{{indexmenu>..}}', '', [], $pageInRoot], + ['{{indexmenu>..:}}', '', [], $pageInRoot], + ['{{indexmenu>myns}}', 'myns', [], $pageInRoot], + ['{{indexmenu>:myns}}', 'myns', [], $pageInRoot], + ['{{indexmenu>.myns}}', 'myns', [], $pageInRoot], + ['{{indexmenu>.:myns}}', 'myns', [], $pageInRoot], + ['{{indexmenu>..myns}}', 'myns', [], $pageInRoot], + ['{{indexmenu>..:myns}}', 'myns', [], $pageInRoot], + + //indexmenu on page in a namespace + ['{{indexmenu>|}}', '', [], $pageInLvl1], + ['{{indexmenu>#1}}', '', [], $pageInLvl1], + ['{{indexmenu>:}}', '', [], $pageInLvl1], + ['{{indexmenu>.}}', 'ns', [], $pageInLvl1], + ['{{indexmenu>.:}}', 'ns', [], $pageInLvl1], + ['{{indexmenu>..}}', '', [], $pageInLvl1], + ['{{indexmenu>..:}}', '', [], $pageInLvl1], + ['{{indexmenu>myns}}', 'myns', [], $pageInLvl1], //was ns:myns + ['{{indexmenu>:myns}}', 'myns', [], $pageInLvl1], + ['{{indexmenu>.myns}}', 'ns:myns', [], $pageInLvl1], + ['{{indexmenu>.:myns}}', 'ns:myns', [], $pageInLvl1], + ['{{indexmenu>..myns}}', 'myns', [], $pageInLvl1], + ['{{indexmenu>..:myns}}', 'myns', [], $pageInLvl1], + ['{{indexmenu>myns:myns}}', 'myns:myns', [], $pageInLvl2], + + //indexmenu on page in a namespace + ['{{indexmenu>|}}', '', [], $pageInLvl2], + ['{{indexmenu>#1}}', '', [], $pageInLvl2], + ['{{indexmenu>:}}', '', [], $pageInLvl2], + ['{{indexmenu>.}}', 'ns1:ns2', [], $pageInLvl2], + ['{{indexmenu>.:}}', 'ns1:ns2', [], $pageInLvl2], + ['{{indexmenu>..}}', '', [], $pageInLvl2], //strange indexmenu specific exception! TODO remove? + ['{{indexmenu>..:}}', 'ns1', [], $pageInLvl2], + ['{{indexmenu>myns}}', 'myns', [], $pageInLvl2], //was ns1:ns2:myns + ['{{indexmenu>:myns}}', 'myns', [], $pageInLvl2], + ['{{indexmenu>.myns}}', 'ns1:ns2:myns', [], $pageInLvl2], + ['{{indexmenu>.:myns}}', 'ns1:ns2:myns', [], $pageInLvl2], + ['{{indexmenu>..myns}}', 'ns1:myns', [], $pageInLvl2], + ['{{indexmenu>..:myns}}', 'ns1:myns', [], $pageInLvl2], + ['{{indexmenu>myns:myns}}', 'myns:myns', [], $pageInLvl2], + + ['{{indexmenu>..:..:myns}}', 'ns1:myns', [], 'ns1:ns2:ns3:page'], + ['{{indexmenu>0}}', '0', [], 'ns1:page'], //was ns1:0 + + //indexmenu on page at root level and subns + ['{{indexmenu> #1|}}', '', [], $pageInLvl2], //no subns, spaces before are removed + ['{{indexmenu>#1 #1}}', '', [['', 1]], $pageInLvl2], + ['{{indexmenu>: :}}', '', [['', -1]], $pageInLvl2], + ['{{indexmenu>. .}}', 'ns1:ns2', [['ns1:ns2', -1]], $pageInLvl2], + ['{{indexmenu>.: .:}}', 'ns1:ns2', [['ns1:ns2', -1]], $pageInLvl2], + ['{{indexmenu>.. ..}}', '', [['', -1]], $pageInLvl2], + ['{{indexmenu>..: ..:}}', 'ns1', [['ns1', -1]], $pageInLvl2], + ['{{indexmenu>myns myns}}', 'myns', [['myns', -1]], $pageInLvl2], //was ns1:ns2:myns + ['{{indexmenu>:myns :myns}}', 'myns', [['myns', -1]], $pageInLvl2], + ['{{indexmenu>.myns .myns}}', 'ns1:ns2:myns', [['ns1:ns2:myns', -1]], $pageInLvl2], + ['{{indexmenu>.:myns .:myns}}', 'ns1:ns2:myns', [['ns1:ns2:myns', -1]], $pageInLvl2], + ['{{indexmenu>..myns ..myns}}', 'ns1:myns', [['ns1:myns', -1]], $pageInLvl2], + ['{{indexmenu>..:myns ..myns}}', 'ns1:myns', [['ns1:myns', -1]], $pageInLvl2], + ['{{indexmenu>myns:myns myns:myns}}', 'myns:myns', [['myns:myns', -1]], $pageInLvl2], + + //indexmenu on page in a namespace + ['{{indexmenu>|}}', '', [], $pageInLvl2], + ['{{indexmenu>#1}}', '', [], $pageInLvl2], + ['{{indexmenu>:}}', '', [], $pageInLvl2], + ['{{indexmenu>.}}', 'ns1:ns2', [], $pageInLvl2], + ['{{indexmenu>.:}}', 'ns1:ns2', [], $pageInLvl2], + ['{{indexmenu>..}}', '', [], $pageInLvl2], //strange indexmenu specific exception! TODO remove? + ['{{indexmenu>..:}}', 'ns1', [], $pageInLvl2], + ['{{indexmenu>myns:}}', 'myns', [], $pageInLvl2], //was ns1:ns2:myns + ['{{indexmenu>:myns:}}', 'myns', [], $pageInLvl2], + ['{{indexmenu>.myns:}}', 'ns1:ns2:myns', [], $pageInLvl2], + ['{{indexmenu>.:myns:}}', 'ns1:ns2:myns', [], $pageInLvl2], + ['{{indexmenu>..myns:}}', 'ns1:myns', [], $pageInLvl2], + ['{{indexmenu>..:myns:}}', 'ns1:myns', [], $pageInLvl2], + ['{{indexmenu>myns:myns:}}', 'myns:myns', [], $pageInLvl2], + ]; + } + + /** + * Parse the syntax to options + * expect: different combinations with or without js option, covers recognizing all syntax options + * + * @dataProvider differentNSs + */ + public function testResolving($syntax, $expectedNs, $expectedSubNss, $pageWithIndexmenu) + { + global $ID; + $ID = $pageWithIndexmenu; + + $plugin = new syntax_plugin_indexmenu_indexmenu(); + + $null = new Doku_Handler(); + $result = $plugin->handle($syntax, 0, 40, $null); + + $this->assertEquals($expectedNs, $result[0], 'check resolved ns'); + $this->assertEquals($expectedSubNss, $result[3]['subnss'], 'check resolved subNSs'); + } + + /** + * Rendering for nonexisting namespace + * expect: no paragraph due to no message set + * expect: one paragraph, since message set + * expect: contains namespace which replaced {{ns}} + * expect: message contained rendered italic syntax + */ + public function testRenderEmptymsg() + { + global $conf; + + $noexistns = 'nonexisting:namespace'; + $emptyindexsyntax = "{{indexmenu>$noexistns}}"; + + $xhtml = new Doku_Renderer_xhtml(); + $plugin = new syntax_plugin_indexmenu_indexmenu(); + + $null = new Doku_Handler(); + $result = $plugin->handle($emptyindexsyntax, 0, 10, $null); + + //no empty message + $plugin->render('xhtml', $xhtml, $result); + + $doc = (new Document())->html($xhtml->doc); + $this->assertEquals(0, $doc->find('p')->count()); + + // Fill in empty message + $conf['plugin']['indexmenu']['empty_msg'] = 'This namespace is //empty//: {{ns}}'; + $plugin->render('xhtml', $xhtml, $result); + $doc = (new Document())->html($xhtml->doc); + + $this->assertEquals(1, $doc->find('p')->count()); +// $this->assertEquals(1, $doc->find("p:contains($noexistns)")->count()); + $this->assertEquals(1, $doc->find("p em")->count()); + } + +} diff --git a/plugins/55/indexmenu/action.php b/plugins/55/indexmenu/action.php new file mode 100644 index 0000000..035b280 --- /dev/null +++ b/plugins/55/indexmenu/action.php @@ -0,0 +1,559 @@ + + */ + +use dokuwiki\Extension\ActionPlugin; +use dokuwiki\Extension\Event; +use dokuwiki\Extension\EventHandler; +use dokuwiki\plugin\indexmenu\Search; +use dokuwiki\Ui\Index; + +/** + * Class action_plugin_indexmenu + */ +class action_plugin_indexmenu extends ActionPlugin +{ + /** + * plugin should use this method to register its handlers with the dokuwiki's event controller + * + * @param EventHandler $controller DokuWiki's event controller object. + */ + public function register(EventHandler $controller) + { + if ($this->getConf('only_admins')) { + $controller->register_hook('IO_WIKIPAGE_WRITE', 'BEFORE', $this, 'removeSyntaxIfNotAdmin'); + } + if ($this->getConf('page_index') != '') { + $controller->register_hook('TPL_ACT_RENDER', 'BEFORE', $this, 'loadOwnIndexPage'); + } + $controller->register_hook('DOKUWIKI_STARTED', 'AFTER', $this, 'extendJSINFO'); + $controller->register_hook('PARSER_CACHE_USE', 'BEFORE', $this, 'purgeCache'); + if ($this->getConf('show_sort')) { + $controller->register_hook('TPL_CONTENT_DISPLAY', 'BEFORE', $this, 'showSortNumberAtTopOfPage'); + } + $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'ajaxCalls'); + $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'addStylesForSkins'); + } + + /** + * Check if user has permission to insert indexmenu + * + * @param Event $event + * + * @author Samuele Tognini + */ + public function removeSyntaxIfNotAdmin(Event $event) + { + global $INFO; + if (!$INFO['ismanager']) { + $event->data[0][1] = preg_replace("/{{indexmenu(|_n)>.+?}}/", "", $event->data[0][1]); + } + } + + /** + * Add additional info to $JSINFO + * + * @param Event $event + * + * @author Gerrit Uitslag + * @author Samuele Tognini + */ + public function extendJSINFO(Event $event) + { + global $INFO, $JSINFO; + + $JSINFO['isadmin'] = (int)$INFO['isadmin']; + $JSINFO['isauth'] = isset($INFO['userinfo']) ? (int) $INFO['userinfo'] : 0; + } + + /** + * Check for pages changes and eventually purge cache. + * + * @param Event $event + * + * @author Samuele Tognini + */ + public function purgeCache(Event $event) + { + global $ID; + global $conf; + global $INPUT; + global $INFO; + + /** @var cache_parser $cache */ + $cache = &$event->data; + + if (!isset($cache->page)) return; + //purge only xhtml cache + if ($cache->mode != "xhtml") return; + //Check if it is an indexmenu page + if (!p_get_metadata($ID, 'indexmenu hasindexmenu')) return; + + $aclcache = $this->getConf('aclcache'); + if ($conf['useacl']) { + $newkey = false; + if ($aclcache == 'user') { + //Cache per user + if ($INPUT->server->str('REMOTE_USER')) { + $newkey = $INPUT->server->str('REMOTE_USER'); + } + } elseif ($aclcache == 'groups') { + //Cache per groups + if (isset($INFO['userinfo']['grps'])) { + $newkey = implode('#', $INFO['userinfo']['grps']); + } + } + if ($newkey) { + $cache->key .= "#" . $newkey; + $cache->cache = getCacheName($cache->key, $cache->ext); + } + } + //Check if a page is more recent than purgefile. + if (@filemtime($cache->cache) < @filemtime($conf['cachedir'] . '/purgefile')) { + $event->preventDefault(); + $event->stopPropagation(); + $event->result = false; + } + } + + /** + * Render a defined page as index. + * + * @param Event $event + * + * @author Samuele Tognini + */ + public function loadOwnIndexPage(Event $event) + { + if ('index' != $event->data) return; + if (!file_exists(wikiFN($this->getConf('page_index')))) return; + + global $lang; + + echo '

' . $lang['btn_index'] . "

\n"; + echo p_wiki_xhtml($this->getConf('page_index')); + $event->preventDefault(); + $event->stopPropagation(); + } + + /** + * Display the indexmenu sort number. + * + * @param Event $event + * + * @author Samuele Tognini + */ + public function showSortNumberAtTopOfPage(Event $event) + { + global $ID, $ACT, $INFO; + if ($INFO['isadmin'] && $ACT == 'show') { + if ($n = p_get_metadata($ID, 'indexmenu_n')) { + echo '
'; + echo $this->getLang('showsort') . $n; + echo '
'; + } + } + } + + /** + * Handles ajax requests for indexmenu + * + * @param Event $event + */ + public function ajaxCalls(Event $event) + { + if ($event->data !== 'indexmenu') { + return; + } + //no other ajax call handlers needed + $event->stopPropagation(); + $event->preventDefault(); + + global $INPUT; + switch ($INPUT->str('req')) { + case 'local': + //list themes + $this->getlocalThemes(); + break; + + case 'toc': + //print toc preview + if ($INPUT->has('id')) { + echo $this->printToc($INPUT->str('id')); + } + break; + + case 'index': + //for dTree + //retrieval of data of the extra nodes for the indexmenu (if ajax loading set with max#m(#n) + if ($INPUT->has('idx')) { + echo $this->printIndex($INPUT->str('idx')); + } + break; + + case 'fancytree': + //data for new index build with Fancytree + $this->getDataFancyTree(); + break; + } + } + + /** + * Handles ajax requests for FancyTree + * + * @return void + */ + private function getDataFancyTree() + { + global $INPUT; + + $ns = $INPUT->str('ns', ''); + $ns = rtrim($ns, ':'); + //key of directory has extra : on the end + $level = -1; //opened levels. -1=all levels open + $max = 1; //levels to load by lazyloading. Before the default was 0. CHANGED to 1. + $skipFileCombined = []; + $skipNsCombined = []; + + if ($INPUT->int('max') > 0) { + $max = $INPUT->int('max'); // max#n#m, if init: #n, otherwise #m + $level = $max; + } + if ($INPUT->int('level', -10) >= -1) { + $level = $INPUT->int('level'); + } + $isInit = $INPUT->bool('init'); + + $currentPage = $INPUT->str('currentpage'); + if ($isInit) { + $subnss = $INPUT->arr('subnss'); + // if 'navbar' is enabled add current ns to list + if ($INPUT->bool('navbar')) { + $currentNs = getNS($currentPage); + if ($currentNs !== false) { + $subnss[] = [$currentNs, 1]; + } + } + // alternative, via javascript.. https://wwwendt.de/tech/fancytree/doc/jsdoc/Fancytree.html#loadKeyPath + } else { + //not set via javascript at the moment.. ajax opens per level, so subnss has no use here + $subnss = $INPUT->str('subnss'); + if ($subnss !== '') { + $subnss = [[cleanID($subnss), 1]]; + } + } + + $skipf = $INPUT->str('skipfile'); + $skipFileCombined[] = $this->getConf('skip_file'); + if (!empty($skipf)) { + $index = 0; + //prefix is '=' or '+' + if ($skipf[0] == '+') { + $index = 1; + } + $skipFileCombined[$index] = substr($skipf, 1); + } + $skipn = $INPUT->str('skipns'); + $skipNsCombined[] = $this->getConf('skip_index'); + if (!empty($skipn)) { + $index = 0; + //prefix is '=' or '+' + if ($skipn[0] == '+') { + $index = 1; + } + $skipNsCombined[$index] = substr($skipn, 1); + } + + $opts = [ + //only set for init, lazy requests equal to max + 'level' => $level, + //nons only needed for init as it has no nested nodes + 'nons' => $INPUT->bool('nons'), + 'nopg' => $INPUT->bool('nopg'), + //init with complex array, empty if lazy loading + 'subnss' => $subnss, + 'max' => $max, + 'skipnscombined' => $skipNsCombined, + 'skipfilecombined' => $skipFileCombined, + 'headpage' => $this->getConf('headpage'), + 'hide_headpage' => $this->getConf('hide_headpage'), + ]; + + $sort = [ + 'sort' => $INPUT->str('sort'), + 'msort' => $INPUT->str('msort'), + 'rsort' => $INPUT->bool('rsort'), + 'nsort' => $INPUT->bool('nsort'), + 'hsort' => $INPUT->bool('hsort') + ]; + + $opts['tempNew'] = true; //TODO temporary for recognizing treenew in the search function + + $search = new Search($sort); + $data = $search->search($ns, $opts); + $fancytreeData = $search->buildFancytreeData($data, $isInit, $currentPage, $opts['nopg']); + + //add eventually debug info + if ($isInit) { + //for lazy loading are other items than children not supported. +// $fancytreeData['opts'] = $opts; +// $fancytreeData['sort'] = $sort; +// $fancytreeData['debug'] = $data; + } else { + //returns only children, therefore, add debug info to first child +// $fancytreeData[0]['opts'] = $opts; +// $fancytreeData[0]['sort'] = $sort; +// $fancytreeData[0]['debug'] = $data; + } + + header('Content-Type: application/json'); + echo json_encode($fancytreeData); + } + + /** + * Print a list of local themes + * + * @author Samuele Tognini + * @author Gerrit Uitslag + */ + private function getlocalThemes() + { + header('Content-Type: application/json'); + + $themebase = 'lib/plugins/indexmenu/images'; + + $handle = @opendir(DOKU_INC . $themebase); + $themes = []; + while (false !== ($file = readdir($handle))) { + if ( + is_dir(DOKU_INC . $themebase . '/' . $file) + && $file != "." + && $file != ".." + && $file != "repository" + && $file != "tmp" + && $file != ".svn" + ) { + $themes[] = $file; + } + } + closedir($handle); + sort($themes); + + echo json_encode([ + 'themebase' => $themebase, + 'themes' => $themes + ]); + } + + /** + * Print a toc preview + * + * @param string $id + * @return string + * + * @author Samuele Tognini + * @author Andreas Gohr + */ + private function printToc($id) + { + $id = cleanID($id); + if (auth_quickaclcheck($id) < AUTH_READ) return ''; + + $meta = p_get_metadata($id); + $toc = $meta['description']['tableofcontents'] ?? []; + + if (count($toc) > 1) { + //display ToC of two or more headings + $out = $this->renderToc($toc); + } else { + //display page abstract + $out = $this->renderAbstract($id, $meta); + } + return $out; + } + + /** + * Return the TOC rendered to XHTML + * + * @param $toc + * @return string + * + * @author Andreas Gohr + * @author Gerrit Uitslag + */ + private function renderToc($toc) + { + global $lang; + $out = '
'; + $out .= $lang['toc']; + $out .= '
'; + $out .= '
'; + $out .= html_buildlist($toc, 'toc', [$this, 'formatIndexmenuListTocItem'], null, true); + $out .= '
'; + return $out; + } + + /** + * Return the page abstract rendered to XHTML + * + * @param $id + * @param array $meta by reference + * @return string + */ + private function renderAbstract($id, $meta) + { + $out = ''; + if ($meta['description']['abstract']) { + $out .= '
'; + $out .= p_render('xhtml', p_get_instructions($meta['description']['abstract']), $info); + $out .= '
'; + } + return $out; + } + + /** + * Callback for html_buildlist + * + * @param $item + * @return string + */ + public function formatIndexmenuListTocItem($item) + { + global $INPUT; + + $id = cleanID($INPUT->str('id')); + + if (isset($item['hid'])) { + $link = '#' . $item['hid']; + } else { + $link = $item['link']; + } + + //prefix anchers with page id + if ($link[0] == '#') { + $link = wl($id, $link, false, ''); + } + return '' . hsc($item['title']) . ''; + } + + /** + * Print index nodes + * + * @param $ns + * @return string + * + * @author Rene Hadler + * @author Samuele Tognini + * @author Andreas Gohr + */ + private function printIndex($ns) + { + global $conf, $INPUT; + $idxm = new syntax_plugin_indexmenu_indexmenu(); + $ns = $idxm->parseNs(rawurldecode($ns)); + $level = -1; + $max = 0; + $data = []; + $skipfilecombined = []; + $skipnscombined = []; + + if ($INPUT->int('max') > 0) { + $max = $INPUT->int('max'); + $level = $max; + } + $nss = $INPUT->str('nss', '', true); + $sort['sort'] = $INPUT->str('sort', '', true); + $sort['msort'] = $INPUT->str('msort', '', true); + $sort['rsort'] = $INPUT->bool('rsort', false, true); + $sort['nsort'] = $INPUT->bool('nsort', false, true); + $sort['hsort'] = $INPUT->bool('hsort', false, true); + $search = new Search($sort); + $fsdir = "/" . utf8_encodeFN(str_replace(':', '/', $ns)); + + $skipf = utf8_decodeFN($INPUT->str('skipfile')); + $skipfilecombined[] = $this->getConf('skip_file'); + if (!empty($skipf)) { + $index = 0; + if ($skipf[0] == '+') { + $index = 1; + } + $skipfilecombined[$index] = substr($skipf, 1); + } + $skipn = utf8_decodeFN($INPUT->str('skipns')); + $skipnscombined[] = $this->getConf('skip_index'); + if (!empty($skipn)) { + $index = 0; + if ($skipn[0] == '+') { + $index = 1; + } + $skipnscombined[$index] = substr($skipn, 1); + } + + $opts = [ + 'level' => $level, + 'nons' => $INPUT->bool('nons', false, true), + 'nss' => [[$nss, 1]], + 'max' => $max, + 'js' => false, + 'nopg' => $INPUT->bool('nopg', false, true), + 'skipnscombined' => $skipnscombined, + 'skipfilecombined' => $skipfilecombined, + 'headpage' => $idxm->getConf('headpage'), + 'hide_headpage' => $idxm->getConf('hide_headpage') + ]; + if ($sort['sort'] || $sort['msort'] || $sort['rsort'] || $sort['hsort']) { + $search->customSearch($data, $conf['datadir'], [$search, 'searchIndexmenuItems'], $opts, $fsdir); + } else { + search($data, $conf['datadir'], [$search, 'searchIndexmenuItems'], $opts, $fsdir); + } + + $out = ''; + if ($INPUT->int('nojs') === 1) { + $idx = new Index(); + $out_tmp = html_buildlist($data, 'idx', [$idxm, 'formatIndexmenuItem'], [$idx, 'tagListItem']); + $out .= preg_replace('/
    (.*)<\/ul>/s', "$1", $out_tmp); + } else { + $nodes = $idxm->builddTreeNodes($data, '', false); + $out = "ajxnodes = ["; + $out .= rtrim($nodes[0], ","); + $out .= "];"; + } + return $out; + } + + /** + * Add Js & Css after template is displayed + * + * @param Event $event + */ + public function addStylesForSkins(Event $event) + { + +// $event->data["link"][] = [ +// "type" => "text/css", +// "rel" => "stylesheet", +// "href" => DOKU_BASE . "lib/plugins/indexmenu/scripts/fancytree/... etc etc" +// ]; + +// $event->data["link"][] = [ +// "type" => "text/css", +// "rel" => "stylesheet", +// "href" => "//fonts.googleapis.com/icon?family=Material+Icons" +// ]; + +// $event->data["link"][] = [ +// "type" => "text/css", +// "rel" => "stylesheet", +// "href" => "//code.getmdl.io/1.3.0/material.indigo-pink.min.css" +// ]; + } +} diff --git a/plugins/55/indexmenu/ajax.php b/plugins/55/indexmenu/ajax.php new file mode 100644 index 0000000..1033484 --- /dev/null +++ b/plugins/55/indexmenu/ajax.php @@ -0,0 +1,85 @@ + + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + */ + +//fix for Opera XMLHttpRequests +if ($_POST === [] && @$HTTP_RAW_POST_DATA) { + parse_str($HTTP_RAW_POST_DATA, $_POST); +} + +require_once(DOKU_INC . 'inc/init.php'); +require_once(DOKU_INC . 'inc/auth.php'); + +//close session +session_write_close(); + +$ajax_indexmenu = new ajax_indexmenu_plugin(); +$ajax_indexmenu->render(); + +/** + * Class ajax_indexmenu_plugin + * @deprecated 2023-11 not used anymore + */ +class ajax_indexmenu_plugin +{ + /** + * Output + * + * @author Samuele Tognini + */ + public function render() + { + $req = $_REQUEST['req']; + $succ = false; + //send the zip + if ($req == 'send' && isset($_REQUEST['t'])) { + include(DOKU_PLUGIN . 'indexmenu/inc/repo.class.php'); + $repo = new repo_indexmenu_plugin(); + $succ = $repo->sendTheme($_REQUEST['t']); + } + if ($succ) return; + + header('Content-Type: text/html; charset=utf-8'); + header('Cache-Control: public, max-age=3600'); + header('Pragma: public'); + if ($req === 'local') { + //required for admin.php + //list themes + echo $this->localThemes(); + } + } + + /** + * Print a list of local themes + * TODO: delete this funstion; copy of this function is already in action.php + * @author Samuele Tognini + */ + public function localThemes() + { + $list = 'indexmenu,' . DOKU_URL . ",lib/plugins/indexmenu/images,"; + $data = []; + $handle = @opendir(DOKU_PLUGIN . "indexmenu/images"); + while (false !== ($file = readdir($handle))) { + if ( + is_dir(DOKU_PLUGIN . 'indexmenu/images/' . $file) + && $file != "." + && $file != ".." + && $file != "repository" + && $file != "tmp" + && $file != ".svn" + ) { + $data[] = $file; + } + } + closedir($handle); + sort($data); + $list .= implode(",", $data); + return $list; + } +} diff --git a/plugins/55/indexmenu/all.less b/plugins/55/indexmenu/all.less new file mode 100644 index 0000000..d0cc5e7 --- /dev/null +++ b/plugins/55/indexmenu/all.less @@ -0,0 +1,44 @@ +//The data-uri() links in skin-common.less break. Needs to be replaced by url(), DokuWiki can inline if needed + +//moved from skin-common.less to here to prevent wrong prefixing and renamed from spin to spin-fancytree +@keyframes spin-fancytree { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} + + + +//Mixins +// note: import of skin-common.less in the imported file below works only if skin-common.less is copied to EACH skin +// folder and referred from its ui.fancytree.less respectively. +.importSkin(@skin-foldername) { + &.@{skin-foldername} { + @import "scripts/fancytree/@{skin-foldername}/ui.fancytree.less"; + //overwrite default variable: @fancy-image-prefix: "./skin-win8/"; the current less compressor does not update paths + //relative to lib/exe/(css.php), workaround DOKU_BASE not available in css + @fancy-image-prefix: "../plugins/indexmenu/scripts/fancytree/@{skin-foldername}/"; + } +} + +//wrap everything by plugin class to ensure its dominates default dokuwiki paddings etc. +.indexmenu_js2 { + //workaround needed for LESS processor of DokuWiki + .setBgImageUrl(@url) when not (@fancy-use-sprites) {} + .useSprite(@x, @y) when not(@fancy-use-sprites) {} + + .importSkin(skin-awesome); + .importSkin(skin-bootstrap); + .importSkin(skin-bootstrap-n); + .importSkin(skin-lion); + .importSkin(skin-material); + .importSkin(skin-mdi); + .importSkin(skin-vista); + .importSkin(skin-win7); + .importSkin(skin-win8); + .importSkin(skin-xp); + .importSkin(skin-typicons); +} diff --git a/plugins/55/indexmenu/conf/default.php b/plugins/55/indexmenu/conf/default.php new file mode 100644 index 0000000..864e812 --- /dev/null +++ b/plugins/55/indexmenu/conf/default.php @@ -0,0 +1,21 @@ + + */ + +$conf['defaultoptions'] = ''; +$conf['only_admins'] = 0; +$conf['aclcache'] = 'groups'; +$conf['headpage'] = ':start:,:same:,:inside:'; +$conf['hide_headpage'] = 1; +$conf['page_index'] = ''; +$conf['empty_msg'] = ''; +$conf['skip_index'] = ''; +$conf['skip_file'] = ''; +$conf['show_sort'] = 1; +//$conf['themes_url'] = 'http://samuele.netsons.org/dokuwiki'; +//$conf['be_repo'] = 0; diff --git a/plugins/55/indexmenu/conf/metadata.php b/plugins/55/indexmenu/conf/metadata.php new file mode 100644 index 0000000..ac85920 --- /dev/null +++ b/plugins/55/indexmenu/conf/metadata.php @@ -0,0 +1,21 @@ + + */ + +$meta['defaultoptions'] = array('string'); +$meta['only_admins'] = array('onoff','_caution' => 'warning'); +$meta['aclcache'] = array('multichoice', '_choices' => array('none', 'user', 'groups')); +$meta['headpage'] = array('multicheckbox', '_choices' => array(':start:', ':same:', ':inside:')); +$meta['hide_headpage'] = array('onoff'); +$meta['page_index'] = array('string', '_pattern' => '#^[a-z:]*#'); +$meta['empty_msg'] = array('string'); +$meta['skip_index'] = array('string', '_pattern' => '/^($|\/.*\/.*$)/'); +$meta['skip_file'] = array('string', '_pattern' => '/^($|\/.*\/.*$)/'); +$meta['show_sort'] = array('onoff'); +//$meta['themes_url'] = array('string','_pattern' => '/^($|http:\/\/\S+$)/i'); +//$meta['be_repo'] = array('onoff'); diff --git a/plugins/55/indexmenu/images/bj-tango.png/base.png b/plugins/55/indexmenu/images/bj-tango.png/base.png new file mode 100644 index 0000000000000000000000000000000000000000..a46fb2220648f4640d48fc34273682db5fc53415 GIT binary patch literal 606 zcmV-k0-^nhP)zpi=LK3kbe)ph6$1us|E@0bs(3;j70N?ldxwS=dZZ43B3h07Tynj^2Yc@GQ zog*HPBZLSEeBTewh7gSA^VD1y1GodMPMto({n9-)s&51E$;vZU9zR8k5p<`8FhN|A1evk_=AdpfbrNok-0q9`y@lykUZ{9CDA`)68V_>uX4$tQ( z0GBRKb2S=6>TxbhlkH7H6&U>${F{F7rSIMjqS-ib^#eg962Z1@5{U!?i4YKr#c&*F s0J1DA{1>jzIOV literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj-tango.png/empty.png b/plugins/55/indexmenu/images/bj-tango.png/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..79ac36b999c358595412ffba7bef05f14bb350db GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeOS+@4BLle<643uN=boFyt=akR{0HM7pu>b%7 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj-tango.png/folder.png b/plugins/55/indexmenu/images/bj-tango.png/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..901edc9624a23d92a9fcbc0c9c450bf37409da18 GIT binary patch literal 498 zcmVT` z=fK?B+ueUcgw&mTx8?fP8#5oZ_IS4UlwPlQrCO;yj|7yQi?lwqqD*+(cr$(Vs9LE# z0Eh#m(;1HB@{s`NLMd=l3Z)da7uEYf05Hbjc`mO%_Gxx9%%#H)XKp%DNa@dEf@UYf zg64HNtq;9mzz z0TxYQt&biCWrx3zi1`R0A}FO05k$Zj!CGNxeauK0j4VSdL!1G*==LU59h96xI zMByWh2N4hikuew;S(yNSb=sUhdyWrZ|BROccMMviB*Wb(P{I#8i on>e<%XnEP;xA*VLo2x9V1Hy;2%BQg6_y7O^07*qoM6N<$g5ayrIRF3v literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj-tango.png/folderh.png b/plugins/55/indexmenu/images/bj-tango.png/folderh.png new file mode 100644 index 0000000000000000000000000000000000000000..13d2c00d08a1a278e02348d3a66d11747e015892 GIT binary patch literal 528 zcmV+r0`L8aP)Ty^tSaylA~ zKBEC^ZTT$N2TO~u76?E+dh$@l?%Zp7X^iIO(hKtW{O#0A`gNcnnYh8$*R7x-eAsy3 zSbCmXNlyTT0K(x2U7g*5g2eS?d74rvrAWU`Jq5}FYb{!Pyvy#hnTv2D&Lp^eKOsHs z=36zvW-h|qnN^$Q^YtvvvK?HRUr{?(5ktW#HrmuE%R?a1=f7OggNl*6SO%c z1Q3y93#*$Li{tJY^14X%BWdk%wzI(QzQx_uAPNB(Ie>nsV%D0ZT S3$t$k0000X{~upF@AEBdr!_i-}AlaS`P;MW>cxu z9DkvdD(%12*vj(SYwBQ4KAVt{;nB!s5cn*uEK(>G9=&_BwGk;W{&Y+R`Ug2YIt0LO zijhdfX+$oceL4PQYR1-D<2WwYTaqQknBn2TP(y*ux9iiujIETy_dW7Ia{we;TLAF9 zi@L?G+gv%@VHnmp08>dGm7nz|ot<4Zu?<8zh`Jobr5(iM3DW6ww1Dq>y#I2}LB<7O z{=<5mexGZi-ial#0UXEWAmg&|{62xwT!w2`Voc5NR%Zb4BNuRdcG0j{YeTx-tq##~ zN`U|(f@N8V2qIua&_)QgP}Bw$8bU3!C9c-~!p)>l_FVBj>w{Prgz`cJ1VN-M3ty=dUzxwDk-RR*TX)b=<`?UJv bHvh|SH)hI<8EcVPQ;zF0Y6Y-;<5;ZC2-aEN-Ul%u85)#z*FfcH~`@T9H@$2A2@QE^U{K zOU+5f<~ZY!b4>9sJdaqU|7ecRED(i4_ZM({dP3`~*KF>d7ly8JK literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj-tango.png/info.txt b/plugins/55/indexmenu/images/bj-tango.png/info.txt new file mode 100644 index 0000000..38e6759 --- /dev/null +++ b/plugins/55/indexmenu/images/bj-tango.png/info.txt @@ -0,0 +1,3 @@ +author=Bernard JOUVE +url= +description= diff --git a/plugins/55/indexmenu/images/bj-tango.png/join.png b/plugins/55/indexmenu/images/bj-tango.png/join.png new file mode 100644 index 0000000000000000000000000000000000000000..6d5a1ae54f5370854c2392aed4a07b23f79543a2 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsC&9NhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$82}d%lNHs4#?` W)BE3Y#e)y1g~8L+&t;ucLK6U_uPBQE literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj-tango.png/joinbottom.png b/plugins/55/indexmenu/images/bj-tango.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..cdab118cb29c281f11155e5f296b0d3f35a56c41 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTXn49fhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$ClRhM6IPd<+cY XJgV#y&S_r->S6G7^>bP0l+XkKlHDdR literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj-tango.png/line.png b/plugins/55/indexmenu/images/bj-tango.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..6347746353d696bcfde3b979265a8c8102115be6 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsCc?KhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL5f=C4rMWOgI_*Hmlc1 TGkuy2RL|h)>gTe~DWM4f7kVai literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj-tango.png/minus.png b/plugins/55/indexmenu/images/bj-tango.png/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..1329c6a16ab2efee31d33a6f67af6424338cdeac GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGT_2>S z4={E+nQaGTcze1yhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3MygTe~ HDWM4f9LhAa literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj-tango.png/nolines_minus.png b/plugins/55/indexmenu/images/bj-tango.png/nolines_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8758b19f86afecb3f303d3cdb3d9f6ba6e6479 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7CY~;iAsXkC6C`RH1f5L(xKGbWI1MpUXO@geCwk+9ibm literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj-tango.png/nolines_plus.png b/plugins/55/indexmenu/images/bj-tango.png/nolines_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c9badea1c4f338ab1a25759431b687a9d4492277 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7E}kxqAsXlJ_8sJ6P~dTj{qpd4u{De9Ip^aiPD|K@Jg_}#<7sNdwfe$O z^M&4vn%7i$K8$;{fWhI)!SYhB*5c-+2*wv2(<2J_t+h+ zs5rlI{^p#SO2-|aiODDi-jZP}W|aE1)~BmOR3$EA(Vi@w>U%ZDa$9qM8}c0HKK>=@ z`d4d)YqwsmShMx=n<-}wTJ%-CXPi)?Z+d)E$Kx3$zTq0>%B>G-<`ESK<06 zKLv;!Rde(>`RU=L2g~Ovo%n1M@bQ?*+>S*Vvl$k=|9v$za@qmb9gNTaiaD`NnxMxo zp5*#q&TW}{<`>WDw{ULpSLj^#x@qe3m+d`GEQ*uw+Md|dvtPsTSdE!)vF)Ukp32Aj azp#b`#_#;I)BX+6mkge+elF{r5}E*#afeO- literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj-tango.png/plus.png b/plugins/55/indexmenu/images/bj-tango.png/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c28055154425e18f93a60ea2ad1a2a92a0dbc048 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTM0>h8hG?AMJMke`g8@g2{nGF2Y=3@TELI$;+abd0`u>T_mVFx6X3wrL z>reG8Z=0}8yXB^z^TwO{rRGoHoNK7;PFl4y=$)Xe%ghz|FBwv9UQl%08Tj@2{o3{| ZO!2>S z4={E+nQaGTM0>h8hG?8WJ28;2!GObA{z&y}zc~AnG@mOkrwe!}ERD5tnce+p&(hB4 zA1tPQN$beml{DimOV{atE2@Lnz2j-wuCwgc>L+m*U8c Zh#m;H{QKMe{cE5#44$rjF6*2UngA{bM8p69 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj_ubuntu.png/base.png b/plugins/55/indexmenu/images/bj_ubuntu.png/base.png new file mode 100644 index 0000000000000000000000000000000000000000..4e5742ea29a1632cbbb436ef890c4e093be7647d GIT binary patch literal 525 zcmV+o0`mQdP)WFU8GbZ8({Xk{QrNlj4iWF>9@00D7HL_t(I%dL_9(Lf+qpSiu{ z?zIpvu6n58RJ*e?v->ie*eI^o9mg5w6Ed01?aubzC_fgfxPoDr5&7b_IXFBT z;TK2(_`XN|@c~2-5e5f_09aU@lQ^SoTh;yD!^tFo=P6wG;QaFeOS+@4BLle<643uN=boFyt=akR{0HM7pu>b%7 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj_ubuntu.png/folder.png b/plugins/55/indexmenu/images/bj_ubuntu.png/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..901edc9624a23d92a9fcbc0c9c450bf37409da18 GIT binary patch literal 498 zcmVT` z=fK?B+ueUcgw&mTx8?fP8#5oZ_IS4UlwPlQrCO;yj|7yQi?lwqqD*+(cr$(Vs9LE# z0Eh#m(;1HB@{s`NLMd=l3Z)da7uEYf05Hbjc`mO%_Gxx9%%#H)XKp%DNa@dEf@UYf zg64HNtq;9mzz z0TxYQt&biCWrx3zi1`R0A}FO05k$Zj!CGNxeauK0j4VSdL!1G*==LU59h96xI zMByWh2N4hikuew;S(yNSb=sUhdyWrZ|BROccMMviB*Wb(P{I#8i on>e<%XnEP;xA*VLo2x9V1Hy;2%BQg6_y7O^07*qoM6N<$g5ayrIRF3v literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj_ubuntu.png/folderh.png b/plugins/55/indexmenu/images/bj_ubuntu.png/folderh.png new file mode 100644 index 0000000000000000000000000000000000000000..69dd8d4830a7577a427ef3f9edbfd1601462ae42 GIT binary patch literal 537 zcmV+!0_OdRP)X{~upF@AEBdr!_i-}AlaS`P;MW>cxu z9DkvdD(%12*vj(SYwBQ4KAVt{;nB!s5cn*uEK(>G9=&_BwGk;W{&Y+R`Ug2YIt0LO zijhdfX+$oceL4PQYR1-D<2WwYTaqQknBn2TP(y*ux9iiujIETy_dW7Ia{we;TLAF9 zi@L?G+gv%@VHnmp08>dGm7nz|ot<4Zu?<8zh`Jobr5(iM3DW6ww1Dq>y#I2}LB<7O z{=<5mexGZi-ial#0UXEWAmg&|{62xwT!w2`Voc5NR%Zb4BNuRdcG0j{YeTx-tq##~ zN`U|(f@N8V2qIua&_)QgP}Bw$8bU3!C9c-~!p)>l_FVBj>w{Prgz`cJ1VN-M3ty=dUzxwDk-RR*TX)b=<`?UJv bHvh|SH)hI<8EcVPQ;zF0Y6Y-;<5;ZC2-aEN-Ul%u85)#z*FfcH~`@T9H@$2A2@QE^U{K zOU+5f<~ZY!b4>9sJdaqU|7ecRED(i4_ZM({dP3`~*KF>d7ly8JK literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj_ubuntu.png/folderopen.png b/plugins/55/indexmenu/images/bj_ubuntu.png/folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..1e074cd024aeaa1f774c335ad66fcf8187d5e587 GIT binary patch literal 523 zcmV+m0`&cfP)cVPQ;zF0Y6Y-;<5;ZC2-aEN-Ul%u85)#z*FfcH~`@T9H@$2A2@QE^U{K zOU+5f<~ZY!b4>9sJdaqU|7ecRED(i4_ZM({dP3`~*KF>d7ly8JK literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj_ubuntu.png/info.txt b/plugins/55/indexmenu/images/bj_ubuntu.png/info.txt new file mode 100644 index 0000000..d63a242 --- /dev/null +++ b/plugins/55/indexmenu/images/bj_ubuntu.png/info.txt @@ -0,0 +1,3 @@ +author=Andreas Neuhold +url= +description= diff --git a/plugins/55/indexmenu/images/bj_ubuntu.png/join.png b/plugins/55/indexmenu/images/bj_ubuntu.png/join.png new file mode 100644 index 0000000000000000000000000000000000000000..6d5a1ae54f5370854c2392aed4a07b23f79543a2 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsC&9NhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$82}d%lNHs4#?` W)BE3Y#e)y1g~8L+&t;ucLK6U_uPBQE literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj_ubuntu.png/joinbottom.png b/plugins/55/indexmenu/images/bj_ubuntu.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..cdab118cb29c281f11155e5f296b0d3f35a56c41 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTXn49fhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$ClRhM6IPd<+cY XJgV#y&S_r->S6G7^>bP0l+XkKlHDdR literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj_ubuntu.png/line.png b/plugins/55/indexmenu/images/bj_ubuntu.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..6347746353d696bcfde3b979265a8c8102115be6 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsCc?KhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL5f=C4rMWOgI_*Hmlc1 TGkuy2RL|h)>gTe~DWM4f7kVai literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj_ubuntu.png/minus.png b/plugins/55/indexmenu/images/bj_ubuntu.png/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..1329c6a16ab2efee31d33a6f67af6424338cdeac GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGT_2>S z4={E+nQaGTcze1yhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3MygTe~ HDWM4f9LhAa literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj_ubuntu.png/nolines_minus.png b/plugins/55/indexmenu/images/bj_ubuntu.png/nolines_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8758b19f86afecb3f303d3cdb3d9f6ba6e6479 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7CY~;iAsXkC6C`RH1f5L(xKGbWI1MpUXO@geCwk+9ibm literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj_ubuntu.png/nolines_plus.png b/plugins/55/indexmenu/images/bj_ubuntu.png/nolines_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c9badea1c4f338ab1a25759431b687a9d4492277 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7E}kxqAsXlJ_8sJ6P~dTj{qpd4u{De9Ip^aiPD|K@Jg_}#<7sNdwfe$O z^M&4vn%7i$K8$;{fWhI)!SYhB*5c-+2*wv2(<2J_t+h+ zs5rlI{^p#SO2-|aiODDi-jZP}W|aE1)~BmOR3$EA(Vi@w>U%ZDa$9qM8}c0HKK>=@ z`d4d)YqwsmShMx=n<-}wTJ%-CXPi)?Z+d)E$Kx3$zTq0>%B>G-<`ESK<06 zKLv;!Rde(>`RU=L2g~Ovo%n1M@bQ?*+>S*Vvl$k=|9v$za@qmb9gNTaiaD`NnxMxo zp5*#q&TW}{<`>WDw{ULpSLj^#x@qe3m+d`GEQ*uw+Md|dvtPsTSdE!)vF)Ukp32Aj azp#b`#_#;I)BX+6mkge+elF{r5}E*#afeO- literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bj_ubuntu.png/plus.png b/plugins/55/indexmenu/images/bj_ubuntu.png/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c28055154425e18f93a60ea2ad1a2a92a0dbc048 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTM0>h8hG?AMJMke`g8@g2{nGF2Y=3@TELI$;+abd0`u>T_mVFx6X3wrL z>reG8Z=0}8yXB^z^TwO{rRGoHoNK7;PFl4y=$)Xe%ghz|FBwv9UQl%08Tj@2{o3{| ZO!2>S z4={E+nQaGTM0>h8hG?8WJ28;2!GObA{z&y}zc~AnG@mOkrwe!}ERD5tnce+p&(hB4 zA1tPQN$beml{DimOV{atE2@Lnz2j-wuCwgc>L+m*U8c Zh#m;H{QKMe{cE5#44$rjF6*2UngA{bM8p69 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bw.png/base.png b/plugins/55/indexmenu/images/bw.png/base.png new file mode 100644 index 0000000000000000000000000000000000000000..603f656d6112d83a1176ef660343490b526140d0 GIT binary patch literal 3241 zcmb_eZ){Ul6n`)_%mn5i5|L=UzTqcn-=EQKeYV?5J6IFCEu+Yc2KM^iZTq&@_sV;> zTZf3U4Qu!!$Q($zd{_*d{4v z&M&KG3j2$>JghTJsJob#l`%|E3THGU%+7y&iba|lW_Jb>d?FvkS*>rcg}3kRPbz!I zl%UFXcQuEK5&+~dkx?jitau)FFHWD7Q?vkr=`ra1`VID5ImoY%#z3Ge1Yc6A3A9*hDrI9FK)r0QYN}Ds@Ik2vDrejizQViQ2<{}(PR+t;OU_{g z5}CDx>M^OnI!qQurflp&Y7{Hw1UY?dvz%EVM0xjg*L62t$!k}QKDBhJHXbnh4knsG zu;u7pPvR<4L0g!pbSw-Sf&*< z;i^$c+(?_wO;T&4?XdKnrUf^l=g!Jhi{B4zm*t#&hRWSsis#^*m%%*>RO-H3#7;DX z>bdnp5r^5jVUVkS1uewY^RFcoHS?2BLIx%byy&rBK&jSoDWqxD9*3#}d8H$`x>1 zYHr)9o4Z&|lXK_bfdnrzuKF~CLG^Km4G3nz)9v(|uOEbG-@~MLm~1!GWJ0zuVtJn+0oH+Ff^ARKE|y5 z@!HhP%nWn>;NLxOEjuth$&f=AfBEji?oU?_CX<_((OoUG&9f`~=U-}>&VTe`>1N{= zcp9&KHT_)wY(vk%4dQ2K&fIu=!^|@`Z~WP|tnZD1GXg&P?b>%|$vPYUysZ>)> zku`n?lBU2I|= kY}wV2KihKhUS|0!MqFdO@c90LU#XJu-u~FTn@6Vp0r0#SBLDyZ literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bw.png/empty.png b/plugins/55/indexmenu/images/bw.png/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..98a66420aa217fc32da8ca9abb3a8df37ddbf49a GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvimeZ7|F>s0H3;Qlv`o38a7fTd%58C?$*jze&zM%F3Nm

    I(84JgTd3)&t;ucLK6V$v@^^A literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bw.png/folder.png b/plugins/55/indexmenu/images/bw.png/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..242e235dd13da7e9f082c59349bc39f68db2b3a3 GIT binary patch literal 3116 zcmb_eO>7%Q6y8u#RVfja6Ri-8wkkaodv~3>iC1+uhU+G$L{m&&+$@ z`{sLZ-pu=F=1-1|9vD>=Wvnt+UV#5Eh~GWC;qR+=H?g9O?sjU+e7Sncv;r@U?VwK5 zJ+BSxijqIxYh!DLa8xHv$1kYAeesow9J`<{WvhC%T_P=KZk>{|>+>~heZ|Vz>hY=3 ze9r^`k8q57p6fHSS5PIc3E#!ErXp#=R|;xT1Vqc#GpH0$g0g8nW$DLsbj(N_<3}eZ zCSFGw-Ox2XqZyf$F=38pOkGF)A9ZRJ<*D5;7s@C4!C+KSTb#E|P3v~M>F#(spiRxl z<#GZflSzR^immw^_fkGPC?Gmb`^B( z=V+*athUxB+5%xghgxKI6(l++g95cM0cI7`6#|u5qa89>GOJKsHs-jDIj9DOW2AH= zmC4qOaWk7Wjm#0CWLMSMo` znm8k_(~l)bgJ5}4R{cC}VU@Qn(-Oe~8e@5uoKLcxItik>z|JDb>M$O7hzEgN#}ql1 z;Aa!&H2q;D23UD*ODGW<+y-Yn7Jk6H-w2*0(vm|-gJO>$kSItJ8pdP*E17JKEZDG4 z{cU3P6D0fC3~p`_qQ85w>!F(-n3aMUPDWP20VV^#Q|971yspR85*_5#YS_C(7y>jQ~HF);z=d;WFY|!9cOo_dodiua8EqTzYo|ef-(Yn@6T^ zD%MTy?S^8k_^rhSS q#+&-RTVLPa*tmBcqmk*0Bg)bzQy*S=?~p4tQ<(Hl<$nOy9omTi literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bw.png/folderh.png b/plugins/55/indexmenu/images/bw.png/folderh.png new file mode 100644 index 0000000000000000000000000000000000000000..0ebd58d73828e5d6dfe646bfa8dbf163ca3853b2 GIT binary patch literal 3197 zcmb_eO>7%Q6ka##k5UQ=Tu6h|(MC|DVz1YUn|fs@aqOhARHr3%NN(+9cVaKuA9rS) z*a1Y_L!nYGJt1+RJyQgT3rMu$&>V_DqTB$f0wfNAKvXJF5T)VGuI;W_$ zM5=Zf)+H%9TrFdLfp9cOil&p2fBEnu8JR{(o{8t9`ErJo%!y@6jxJ9Y^yLLTVaUTn zoyn>O05;(mRc*^*S~VqmxEg#H(~68d6TXm=(;^_6%^yJ-ml70@M8kS?e-!OkBWnM^ z;NajhC>B+tN;IaZv9LO*^~bbm6xDy^p-z;f#=JI_9j^z2QA#dxUe*+4X=y34)E{wa zQBf0#gaC=f!e9|*HHYJB*kOGF!pF!Grc<-bP1ivJ6VJI7o|0u)M~$7>-7Zj-Z3DEMGE)b~10xgMWbrW02 zGIioGl2pVQvCMibZ`25u6lGP<(>hj3L)UZ>%%uUAN6Cp+mO}?YR14VY1nCvVT^n)N zwdOEIrY`sygqcOB9f<~3Qdt*Dga)_984rYS@UAz4`-wDTQZi4mO%O=rwi0T`qyg(O zSsz)jVU@Y(iC#~T*T+V2ah(wL-HTnf-EE2G_CQ`-R zm`(BD3^-;B&2+YM@kb3QJoSP~3FZ6_``{`3zw5k}N;24!H7}M+GcH^;I?p-tu6L8P z+L+VSnsF)Ign>J&*ew1Cv|U;8_L;1Ab1i4XIj@5U6lm0avxvQD2(@#Ygd$GKZNng6 z{RUc6Y3JWcDC3rEUP2BpIb_3Qy^d0=<7P;;BKWkR_dsKxFrjPE+J6wpyN@(T5%jv0 z%dePX>$G? zJdogJrZk^sFlavRhy%eWJl(!z18>5!uZNG#@}urNU&53~{tL}3x+#K<+KG=zQoId? zQTkA!fQwS0WHJOFULsz5M)MRJ_T3gPsu<>ozse9JJc7Ph_Mror1ir^v& z2X3NC7i9@G7rmQ{y>R{A3xGE!p0fc3U`pB?!AsqL>;~Tn0eF|7fZIID+0&nF1%PY0 zY`ReWYR-_hWHMK7uB@zVd+5lGwY9ZJMt-V>c09gAdMcH=eCFk~J3Y7m{_C~SnNu%@ z&>Qbuytr@Vsx)rfKi?X8{le%I-*oJ}HcsRHC&SN8PwzrAgHJAZW3+egt@Dp|%-*^E zXXf0_ky8_wSWi#KsUP$q`qsJcPQUMd?R0f_*Q5bs_|vZOP$+Z>-}v^*_VJYu9_uPe zQ@ItXI1H-kw*tPW--Q`}Tv<(`Wl$3H9~%_Ktmi_3G;Cujere cjhqZgXRbf{Qtik6HK9&!Y%=@y=<(D405OF3^Z)<= literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bw.png/folderhopen.png b/plugins/55/indexmenu/images/bw.png/folderhopen.png new file mode 100644 index 0000000000000000000000000000000000000000..328ce16e20caf49b319ac283db4bc27a124bacf2 GIT binary patch literal 399 zcmV;A0dW3_P)A3nYX;t)lVB_p6=7~Zi;FHUgG^E_i46)(P8Ook7t zP16wg&x)cr3jfQJDIFgKL2w`Dj9@9IU=~hn{s9S7ZrG(Hzt6EZ?*x^<{!PN zRE&#z2hn=wZ|psTg~McGr)Pz2+gB{BzX-~*q>kexAo&`QymJE6G`atozN(r@vMg(l zG3K>QTkWshX(^FzfsxOmElK#0RT)~meFiM!=1H8U>+dlXHlzVTt zZkm9gCQ1w@nuswX5WX1WL`;Z?iJF)g)F_F@pawsHQ4<9}kSKic&$;il<#m)Pi%Yll z-h0mP{O<3Zd+vRD%kah}?JL>?fxwc?U}^;ZFXO)p=fmIoul=nC0`2pS+$bB(Zc;SI z3aPr2$DyiKhV?)owxL>9wK2?49v2NeF8p@(eE}JIT-XuGO4)J}myE$Fg11c#=d`IY zEvgF}`r2bv1pq9}R8+N0n<~|~;NmLqollDba!uG+TuAVMXf(S8B^`oMBqRkjX`O`D z$sxJBr?QCui7R#rrDVqzjR z(H(L~QIw<6CZb9o2VYl}C(X ziP1&~o7OY~^~9=L7Uhs664yrbd+J)lrCcGV%SqQnY+?)BjDnloWS=QBtp{Y}sx&-- zoaTB`ri*?HH>xXk6G+*t&|UJbhCh(4P|Rmt6jLvV5W;o#bA>s-i&qo={mn4WW@k6I ztR_~JrN=?nT8>%@NOO~AERJC6REUPt;~-I|8x*K{2~e^s8N*PCIa0y(B_#{hrK?O$ zsSH$u!jXfL91KTta<>wRC~~+6*kfCvYI;KX^ZbhPw6%%KK;-SH%41?;C3SIFbFOX)xroQa+(RX zVp4~7naqsL+0aV<5vo8CWg&0admGc zaRaGh%+99xZw5@IV~un+bMZ!XDO~mZN^#}94twV*{J-nGnM%yxlNC3XLy`_$H5$v< z1;@Qfnr)2j#N6Q!xCwoCR*h+vf^%L2_bE`X`$iGF(GY6oHVj1^ z7g~lvp89pPnApm{nNZRxPr3=&JYnNmkM#^n&5m;+)r{cLg5Cp-eb9ieK_>r$K<<5{ zK#HK(#RaO4W8LlW&|SSHW3G2Z17V_s0ebfPs9~&?pgZ%cP2`Uyex21S;Fi?fvQsa2 zsir39&A|f+US?wBX$FJF;||*pjKI^aeDBHQ@a$X8(xYsfQ(zM+!2$1u<`&%uR`tm} z=WvX_4Y^TbQ!b|#1G$nx5qww)yX_ej2sG@QEu2>|%wcbpB8piET^RfMBfv>$tuGdx8UzRsi)x$3tkM$RrdAT5jUysEaHcxM0|4xCC{c<5z)-oU;^{mFF4kn&uq?Wb?< zT0L~YJi;!mz486W3p!Eu%U*5mu~kE_Evh&HrR~t=>u0Q;r>47BJ^A*bsr1$#UhOz3 zE#COpX7R6M=69#hKfCYv73t6RXYj)dZycQdWr#ff0y%Nd`HnRg?@p8tJbx(CCVcg7 z+t#bQci%Vq;<=^A7cVszt&tZe_kNhL9*BQIKY4R+{;k(Hto-$lYq8!1i64*Jryu-% w!Dp*h9=`I@>d()ddgZC3Ph2}PeW~k%!19CnH>L(IcXEv~>EYCL|L*<&04iDnJ^%m! literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bw.png/info.txt b/plugins/55/indexmenu/images/bw.png/info.txt new file mode 100644 index 0000000..300799b --- /dev/null +++ b/plugins/55/indexmenu/images/bw.png/info.txt @@ -0,0 +1,2 @@ +author=Dric +description=Black and White PNG icons. diff --git a/plugins/55/indexmenu/images/bw.png/join.png b/plugins/55/indexmenu/images/bw.png/join.png new file mode 100644 index 0000000000000000000000000000000000000000..d3ff5a2f5aa86a4931a3738777e282b4cc58fab7 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvfo=E{-7<{>eZ7|F>t>yK~_J!<0k1{W|TJ1(J9hRvym2u%i3GL1UN0 p9Aec!UR*43vDn|+CMbKDgQ1_}U|nhar8uA&44$rjF6*2UngH4|KT-ey literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bw.png/joinbottom.png b/plugins/55/indexmenu/images/bw.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..dd5b3f25ccb70b31c02b03b1be7a4c1ed4afd215 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvmYBE{-7<{>eZ7|F>t>yK~_J!<0k1{W|TJ1(J9hRvym2u%i3GL1UN0 t9Aec!GJY*l4ib90qMKtn!(oda2Cc1!%O)v)i31wL;OXk;vd$@?2>_(VK<@wm literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bw.png/line.png b/plugins/55/indexmenu/images/bw.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..63be9980261fa6cec8af9618651e22fd8dd89ab2 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvkxmE{-7<{>eZ7|F>t>yK~_J!<0k1{W|TJ1(J9hRvym2u%i3GL1QVm m7U8EE61{DLD^vN+zA{MsKl~+L>HTw{0Sun5elF{r5}E)8**;bP literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bw.png/minus.png b/plugins/55/indexmenu/images/bw.png/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..9f592078a5a413fc866b63515523ed1be823f6dc GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvj{RE{-7<{>eZ7|F>t>yK~_J!<0k1{W|TJ1(J9hRvym2a9}sb6DB8# z>C*%ExSi1c@ua=Ok%x!p|3yQMoP@Z;Zv2AlCr(Z^*yA>}#3k#WlGSB1Q`6pO|NiqZ YWQeYI@Z!k%1hj;~)78&qol`;+041_bD*ylh literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bw.png/minusbottom.png b/plugins/55/indexmenu/images/bw.png/minusbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..79b1a6ccc75b473f81797007af68fabd8627ae36 GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvhwmE{-7<{>eZ7|F>t>yK~_J!<0k1{W|TJ1(J9hRvym2a9}sb6DB8# z>C*%ExSi1c@ua=Ok%x!p|3yQMoP@Z;Zv2AlCr(Z^*yA>}#3k$BqWWd3M_a#Wx_J}| ZGAMAYF*~sF^G%>F44$rjF6*2UngEANPICYN literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bw.png/nolines_minus.png b/plugins/55/indexmenu/images/bw.png/nolines_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..68034d7b266aea9b09dd3cce1b6a1604f9f220b1 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvj00E{-7<{>cdvtSYSz&d!JHon~k-JGMOt_VAEfH+_PW(!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvmA3E{-7<{>cdvtSYSz&d!JHon~k-JGMOt_VAEfC*JKO(#(EEVS@Js z!@~``IK=WoxRs}PsGQ6W@pN}l-4^JY($2uJwk_huts9O_K;sxZUHx3vIVCg!0RA&P A<^TWy literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bw.png/page.png b/plugins/55/indexmenu/images/bw.png/page.png new file mode 100644 index 0000000000000000000000000000000000000000..acd7a376c7312ad950093ba1fde3ae4cf8122375 GIT binary patch literal 3212 zcmb_fU2GIp6dp_{wE?Non1Fvb14dMKXJ$)(cHAwtJB2Q?TWq(|2N7py?(UAAomuYO z?e5kn0gVBJ(FY|q+Qbkg`hej{69s>wMg<>@fDO>-gG6I^00rZNo;$O<%$B7}W7BSX z?>*-`-~G8;TG;BM&PZs=;6s<#Uu4WI-sEO2JY` z&?Z?y3WviCBoqpOMZl?8R4oTAXBC6+Fcj=)#3)e1wh+Tq({_cQcx6#Ya{qQb*=7FC=%1oQTLhD8+k+1V3jPJs+EQP26UWJizelJV+5klNEg{*2qbNb zO=F@Ns)v`UbnF@8FBjI7m+L=7t<%n8LpgIn#4`@+|FR~x~#MA~W)oFQr+Bap~$ zB-D&a4c28cH!@@66w^;)t(qXWkM*nBIYLx-&vxB()3v%||0w#y6dJ|op`F30n5&a2=)1!{F)FJd9$n7e*~U=E9k%&9kDaCq!P?|FEqF4hOw$w zc6@^)>}|-5`ZlLhYL-jo3A@)pZfxE6oykz zBRAgxMQ{-Xd^b_jMhYgzgnM&2Pn|yeCg2UQ=d4cwnBo>j@W{=VSAy>#1H3|z!7ZHR z*zV(t0pM(0=}VP=_-^>&wr9om>H9t$x)fB}AKNp#Z1UFV-lKcZymfTf?O#s+-g^44 z_`T`XiP4qk4laMb^6low@0vpGKlWtyTt>%cxi>BxSbIEmXnKFkzMsBcGrQ)XvFX5? zW21{+S-mtCB%`D6oIP@}?FB`C_g8t_ovlkh7r(kqnSO4BJkpvB-?$s?yyfMt56~|k zpWpua!Ks1$r%t{2_D#R-njG3R^>bya_tL8m&AgvIQ524KSsQM+VcUt*_mu8fvTyOl z?myd4&U||2(Pz%j?p*x+PJ5!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvhYeE{-7<{#Pe^b1^7zxY+J8-yY)e?Qe* iTe=`G;K;-3xBh+oi=AZRo}L5R#^CAd=d#Wzp$Pyj_fs(d literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/bw.png/plusbottom.png b/plugins/55/indexmenu/images/bw.png/plusbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..23904578c43d4b1861e32c2a9a1ed9e746f0ba51 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvjvJE{-7<{>eZ7|F>t>yK~_J!<0k1{W|TJ1(J9hRvym2a9}sb6DB8# z>C*%ExSi1c@#Le_kpm2q+>YEjAjwk1X~nja=b2K@7lDsbmXU0SvqL=Hmps$|l^zuo h<1s&}MMRvD!DrbLy8~NKd<9y@;OXk;vd$@?2>{@0QE>nO literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/close.gif b/plugins/55/indexmenu/images/close.gif new file mode 100644 index 0000000000000000000000000000000000000000..8c07da8ad0fc0db47edd6e80cb5347d417b9b0b5 GIT binary patch literal 64 zcmZ?wbh9u|7^6>y_p;(+ULt|wOuly zvOmx9g00eqMfC!X+ZTCX@B7O6O1b21*mA4uN1a?2^2J$|bUXNT_+@#uy?bLNd+cg% z>CqRB4^!{mt^9G;+O25nkS7VRU(lZ`CGdFB& zl`^h;skUND;(LZAGQL8c2fnHrCtl!WcxAfcSJ0HMU4Fj*-yIj8n;kjL&!8hnaN4!6 zMXq%&t8aQ6yx8D9!DWZBL|MfQmx}ZUs@3v$vb76x;+YgnoLBy9teiQc<(In2?5g{< ztr({l-Jz({rH!?MQzSqh0XHC>DE|i&T@SkJblS2_VRiwElKIymM g`{~nF`R_FUv82jQk)5^dz%XX;boFyt=akR{0ExA?ng9R* literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/contis_tango.png/empty.png b/plugins/55/indexmenu/images/contis_tango.png/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..79ac36b999c358595412ffba7bef05f14bb350db GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeOS+@4BLle<643uN=boFyt=akR{0HM7pu>b%7 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/contis_tango.png/folder.png b/plugins/55/indexmenu/images/contis_tango.png/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..84fbf8e21c9b66e5b51d354c32f2d49bace156e4 GIT binary patch literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_Gz7y~NYkmHjTOppYb=qV~&M3=E8Vo-U3d7N?g^viD|o6gXO6{j*qe z3&+c&egbb?Tbu($Ts8#ft(O(T&0!-hi((GG9?zBBU+q-%J<&hTX*!? zBT3sGD*SEcXU^H(JGbUTn1$9fi!=tWsA-e_&d&DpY`Agj*qYpb^%~3?@s8h{??$zD zyEGnEt;n3valGAr>Ex(Z=LVgI*N2XzY&y`CezTB)u{@M-f%*cKA9g157G6~m{iL@h zFX5A(e=Yl3wKs1Xr@VA2vfN>luEu?h@jx~EEzMXF@4e})jim-!GXGy6Kj^`9k>{9@ z#I;5<0j=5Jw?DAhmcYZ2XqjauwS{eI&Ixpj7j9)FR|bt|qZ*|pqLV|n$v^iRY)Za#SKFt7MR z?rUa&#oZsGE^%73b+XuIUa_>YR7Z}-_Zx3?o=>0^h<@D-rH`=`f|(1j=sy9TCCHS?!Di`q}lwe zew#e&Ns$_}tz7jxZqMHMT8cX>bjG~K@7og==c{=g{GlQue^7KzB=_k%?u%1?CbP0l+XkKzkjND literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/contis_tango.png/folderhopen.png b/plugins/55/indexmenu/images/contis_tango.png/folderhopen.png new file mode 100644 index 0000000000000000000000000000000000000000..5d8193cb7d2766ec74b0042c6161a444913b77b5 GIT binary patch literal 438 zcmV;n0ZIOeP)MzirU~6ZmouEyG5Db_i zjfEgs2}%$|Bt#Q&ot=!u?vhPR*hCLp?l5!jx#yk{sYUj!BnPy>k#3ffoy!Z3=m3%4 zLNBkkf0W;lIfq)6?R=J#wgelS=(z=We4rz4Z+=}J=CkYpMC%Gn69xu56U?UEY#4xm z>m0k_5l9KP4b>0+gs5`D75MNKG!Z~U!Tnu#Q{yHqt)XLah^l(Cg4MJ)DFm@NoSk|m z`U*xYPzuU#;RIIFTMJwT_80W^_im!$dtlp;9PO^Du0c5g6HODIOE5JJuP-13Xx%7A zyQ>8wk!bmap<(!}!F#3A+?s=DC#axOhKWfiJvA5l5roz-HV(xCIFe&Azrs}{LaJBu gl%kl+FvEZG0~tnrr|__^ZU6uP07*qoM6N<$f|+TtqyPW_ literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/contis_tango.png/folderopen.png b/plugins/55/indexmenu/images/contis_tango.png/folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..f81742626bd076e73a7df4ee845e6ebf5cc8e060 GIT binary patch literal 438 zcmV;n0ZIOeP)MzirU~6ZmouEyG5Db_i zjfEgs2}%$|Bt#Q&ot=!u?vhPR*hCLp?l5!jx#yk{sYUj!BnPy>k#3ffoy!Z3=m3%4 zLNBkkf0W;lIfq)6?R=J#wgelS=(z=We4rz4Z+=}J=CkYpMC%Gn69xu56U?UEY#4xm z>m0k_5l9KP4b>0+gs5`D75MNKG!Z~U!Tnu#Q{yHqt)XLah^l(Cg4MJ)DFm@NoSk|m z`U*xYPzuU#;RIIFTMJwT_80W^_im!$dtlp;9PO^Du0c5g6HODIOE5JJuP-13Xx%7A zyQ>8wk!bmap<(!}!F#3A+?s=DC#axOhKWfiJvA5l5roz-HV(xCIFe&Azrs}{LaJBu gl%kl+FvEZG0~tnrr|__^ZU6uP07*qoM6N<$g7tf`=>Px# literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/contis_tango.png/info.txt b/plugins/55/indexmenu/images/contis_tango.png/info.txt new file mode 100644 index 0000000..d63a242 --- /dev/null +++ b/plugins/55/indexmenu/images/contis_tango.png/info.txt @@ -0,0 +1,3 @@ +author=Andreas Neuhold +url= +description= diff --git a/plugins/55/indexmenu/images/contis_tango.png/join.png b/plugins/55/indexmenu/images/contis_tango.png/join.png new file mode 100644 index 0000000000000000000000000000000000000000..6d5a1ae54f5370854c2392aed4a07b23f79543a2 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsC&9NhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$82}d%lNHs4#?` W)BE3Y#e)y1g~8L+&t;ucLK6U_uPBQE literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/contis_tango.png/joinbottom.png b/plugins/55/indexmenu/images/contis_tango.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..cdab118cb29c281f11155e5f296b0d3f35a56c41 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTXn49fhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$ClRhM6IPd<+cY XJgV#y&S_r->S6G7^>bP0l+XkKlHDdR literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/contis_tango.png/line.png b/plugins/55/indexmenu/images/contis_tango.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..6347746353d696bcfde3b979265a8c8102115be6 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsCc?KhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL5f=C4rMWOgI_*Hmlc1 TGkuy2RL|h)>gTe~DWM4f7kVai literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/contis_tango.png/minus.png b/plugins/55/indexmenu/images/contis_tango.png/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..1329c6a16ab2efee31d33a6f67af6424338cdeac GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGT_2>S z4={E+nQaGTcze1yhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3MygTe~ HDWM4f9LhAa literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/contis_tango.png/nolines_minus.png b/plugins/55/indexmenu/images/contis_tango.png/nolines_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8758b19f86afecb3f303d3cdb3d9f6ba6e6479 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7CY~;iAsXkC6C`RH1f5L(xKGbWI1MpUXO@geCwk+9ibm literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/contis_tango.png/nolines_plus.png b/plugins/55/indexmenu/images/contis_tango.png/nolines_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c9badea1c4f338ab1a25759431b687a9d4492277 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7E}kxqAsXlJ_8sJ6P~dTj{qpd4u{De9Ip^aiPD|K@Jg_}#<7sNdwfe$O z^M&4vn%7i$K8$;{fWhI)!SYhB*5c-+2*wv2(<2J_t+h+ zs5rlI{^p#SO2-|aiODDi-jZP}W|aE1)~BmOR3$EA(Vi@w>U%ZDa$9qM8}c0HKK>=@ z`d4d)YqwsmShMx=n<-}wTJ%-CXPi)?Z+d)E$Kx3$zTq0>%B>G-<`ESK<06 zKLv;!Rde(>`RU=L2g~Ovo%n1M@bQ?*+>S*Vvl$k=|9v$za@qmb9gNTaiaD`NnxMxo zp5*#q&TW}{<`>WDw{ULpSLj^#x@qe3m+d`GEQ*uw+Md|dvtPsTSdE!)vF)Ukp32Aj azp#b`#_#;I)BX+6mkge+elF{r5}E*#afeO- literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/contis_tango.png/plus.png b/plugins/55/indexmenu/images/contis_tango.png/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c28055154425e18f93a60ea2ad1a2a92a0dbc048 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTM0>h8hG?AMJMke`g8@g2{nGF2Y=3@TELI$;+abd0`u>T_mVFx6X3wrL z>reG8Z=0}8yXB^z^TwO{rRGoHoNK7;PFl4y=$)Xe%ghz|FBwv9UQl%08Tj@2{o3{| ZO!2>S z4={E+nQaGTM0>h8hG?8WJ28;2!GObA{z&y}zc~AnG@mOkrwe!}ERD5tnce+p&(hB4 zA1tPQN$beml{DimOV{atE2@Lnz2j-wuCwgc>L+m*U8c Zh#m;H{QKMe{cE5#44$rjF6*2UngA{bM8p69 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/default/base.gif b/plugins/55/indexmenu/images/default/base.gif new file mode 100644 index 0000000000000000000000000000000000000000..ced7f08797bca40f3383a4f1747aca9b18a67597 GIT binary patch literal 578 zcmZ?wbhEHb6k-r!c*Xz%|NsC0_506%28P#MT-QWI4#~@})zqA6Y<%Rxgcon8|NlSp z|Nl8Jp7%d^(D(oU(u?O>zJKWa|6}rpCsi*WwEutK`Tupxi>q~a&ek2=T6%ql!=r-% z|DV*KT%dSsf6mKuWyfYo9-Ad~c&7BB88YV=sr|oQ`e?KB->U^P(-~)FFwMzgnU}-1 zAdh2F0oUR}?j=P$ON)7zm+~(z=3iJOu%=36L!HFtM(M3hvfEqaceN|+?NU9|uXSRo z!O3Zcr)Lddu(Mzu&)q|N8aoCr_RnJ9g~g!Gp%e#xrNmT()c(&}(2X4qig> zCkrD3gBODi$cdmhVPK!%;MLUJ(%RPE(b?5xZ*OO76f z%}iVD80W2;I@M&Bmo1~v<}F)!3}-3qQczOfy<1vLZzuO$E;i12+;R#II!Abfc$t~m z`Gj}`71XuYD{za7Tw!Jr5apLu)4F$5{0fJJj10e&ispK+`|_-ks{j58J1wwq;$Y#C eG)_2Bak1$rm*{sM#hD%(mG-$x7_%`kSOWllUAp-I literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/default/empty.gif b/plugins/55/indexmenu/images/default/empty.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5cf52378fa5f361ff532bd66a89fb405f23f815 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!n8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/default/folder.gif b/plugins/55/indexmenu/images/default/folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..0d7d6431bff639f010f7737fb5d77c298754cc7a GIT binary patch literal 352 zcmZ?wbhEHb6k-r!xXQrr`}gnn@893v9&~1=$&)8f4jw$XxRCo$zt;Bc+vnx5?P^z= zlf`m!n&I9q)y<94Gt(JwZ!g^1B)cGw zMSgXq@QJAg2YNM*9XqzJMr>9F(~2^IHB}=2ujK##G5PiD*Z=>|`G33g|C9Rv?>lGC zocSLFW-^ck6o0ZXGBD^d=zw&C{KUXk>oC2*Lr1Fr#F9&<53Pf?~{H0{d?YgFT1kiuuxYqpG#L|#mZH>{P}vRq6#ufQfxw;+-u#m_w3!b&imjYJx2y> E0A!ek8~^|S literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/default/folderh.gif b/plugins/55/indexmenu/images/default/folderh.gif new file mode 100644 index 0000000000000000000000000000000000000000..c7c9f7ed67fd145eb1ea2c5a7931be04a0d266b3 GIT binary patch literal 572 zcmZ?wbhEHb6k-r!c*Xz%|NsC0_4|)=W|?bNS!7vRTzySZZ(UJ)#gPjWUc8}p{-N{#kI5gNRK0xA{{MaF|JN-quGZZ-TX%44>Gd5Bj}8X> ze^P&Pf#R+GIWNzZ9h)V2Y?jpFnbL=5$edrK_WyS2qs`8LuNKTqXPlM6G$)H?UJl!W zJdQ;LT#F02mlW|VE#_Tb%D=dne_@fpnktbEbrPE!rMEW8Zf}v_)vmO+OZ8B{)`_VG zC#M;no?(1urpf>7Ex&*Ne*gac>({TJJb7~L*s+5L4{qPSedf%W%a$zzdJXKw!AmIq zWMO1r@M6#bIS~{m4D2%-yqcO@THD$?I=j5=?d@!BJi6@}r}Fb#PwKFjlb$zM&dSol z+|0DaZtAMlt4wBj*>dx2-m;b3aJ>!pZsEPV_jBv5x8@cS5@h2$cA8t~Ft@0vATu*N z??q8=?ej7+!dIAC#P4!zt+(P}p{-N{#kI5gNRK0xA{{MaF|JN-quGZZ-TX%44>Gd5Bj}8X> ze^P&Pf#R+GIWNzZ9h)V2Y?jpFnbL=5$edrK_WyS2qs`8LuNKTqXPlM6G$)H?UJl!W zJdQ;LT#F02mlW|VE#_Tb%D=dne_@fpnktbEbrPE!rMEW8Zf}v_)vmO+OZ8B{)`_VG zC#M;no?(1urpf>7Ex&*Ne*gac>({TJJb7~L*s+5L4{qPSecQHeGiL%_{vYhc!AmIq zWMO1r@M6#bIS~{m4D9n7yqcO@THD$?I=hQt8(OmC!U!GM`_1`~Xrv(Stnc8|J c4HEWb987BMs&1R)F~>vj{-SOPW<~~U05u%Ig#Z8m literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/default/folderopen.gif b/plugins/55/indexmenu/images/default/folderopen.gif new file mode 100644 index 0000000000000000000000000000000000000000..a9c466a5b7d93172b0dbbf4d31168695054c25df GIT binary patch literal 354 zcmZ?wbhEHb6k-r!xXQrr{{8!<#k{|N|2{L*q6oUN3z*c`? zR)L3(RR4)3K^77ULMyHmIjlC45YwEb^|~xmaI#wSLIFXO^}C`%GqX9Ra{ShxR=YK$ z?)>$3EA>j_tSn<0Lsj-BqtX&1c|&Ecd_!a1=`*JDDT#7VY1Ur2NSjYuh%MiAs?M6V hYXtb^RvI#H-Krwa&c(gLO>_T&gDbs{9Cc){1^{u1m23b2 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/default/info.txt b/plugins/55/indexmenu/images/default/info.txt new file mode 100644 index 0000000..1b1d8cd --- /dev/null +++ b/plugins/55/indexmenu/images/default/info.txt @@ -0,0 +1,2 @@ +author=Samuele Tognini +url=http://samuele.netsons.org/dokuwiki diff --git a/plugins/55/indexmenu/images/default/join.gif b/plugins/55/indexmenu/images/default/join.gif new file mode 100644 index 0000000000000000000000000000000000000000..34dd47610a5d7c3580dedc342683559bf77abce2 GIT binary patch literal 69 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=QAOOiQFv;}DH=KUEdfpt3ORshA Wx&LIzk};W<vKC_i literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/default/joinbottom.gif b/plugins/55/indexmenu/images/default/joinbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..48b81c80a9e25f6f29e2614aaa33bdf4a4d2881b GIT binary patch literal 66 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=QAOOiQFiG~vH=KUEdfpt3ORshA Tx&LIzy5lkJS?4l0Mh0sDgH;v` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/default/line.gif b/plugins/55/indexmenu/images/default/line.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a259eea00c330eee85fb18aa64e2e232d5410b1 GIT binary patch literal 66 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=QAOOiQFiG~vH=KUEdfpt3ORshA Txqp6J8?ND(@^elGBZD;ng_;%{ literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/default/minus.gif b/plugins/55/indexmenu/images/default/minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..3d212a97ae0d8f83aa39836c5a85d442f8602553 GIT binary patch literal 86 zcmZ?wbhEHb6k-r!n8?h~)YR0_(7?dJ@c;jR#h)yU3=GT+IzTQ^R)~RtNqvreafzu-gC3m_gnAtsyGG)YXIxA8@>Pl literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/default/nolines_minus.gif b/plugins/55/indexmenu/images/default/nolines_minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..2592ac20f3f4c28e38f789309ec52f08505bdf6e GIT binary patch literal 861 zcmZ?wbhEHb6k-r!_|DAG)YR0_(7-SXMnhmkhJfNv7DfgJW(FOQ??HKjfy0V{okPZB z!-9j&9Ku>LGYlFIxARNO@hDtWaBUIiPTOMfV7_}lvsu=hh(Z;&NfL@qDJM29Jw4q( Jn2m+O8UP#&8=e3F literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/default/nolines_plus.gif b/plugins/55/indexmenu/images/default/nolines_plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..f258ce211a0a19c2ecbcb11170b9a8b35ae2436c GIT binary patch literal 870 zcmZ?wbhEHb6k-r!_|DAG)YR0_(7-SXMnhmkhJfNv7DfgJW(FOQ??HKjfy0@BokPZB z!-9j&9Ku>LGYlFIxARNO@hAj7*xx83m?l#Y_`t1M|Ba{La?4kwX3c6}c&WZ`PygnpJ?rkDyZry# zum9<}^Zxw(U)#BD%KlHsjvf2=@89j`-!lsq*us+EMQ_{wz1I^mD$)V zp|fqfjlDg)$=)VaEw1f$c1O*PPdJL7u{n3dTtWFV-;Nvh<`x$Gm({MHfB2Z&=(4Wl pOY=wE9NL#fJ_EuRPt$uy{)1ycrGJ G4AuY|7Yq^r literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku/empty.gif b/plugins/55/indexmenu/images/doku/empty.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5cf52378fa5f361ff532bd66a89fb405f23f815 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!n8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku/folder.gif b/plugins/55/indexmenu/images/doku/folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..8414d4d69fa9cba7821efd06e5afba8134be2d10 GIT binary patch literal 54 zcmZ?wbhEHbWM$xGXkcVW?wP~Dz@Ye(g^`PakwFK@W&p`BF!A>EujD9r%T%)YRN4nE G25SHn$_y0% literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku/folderh.gif b/plugins/55/indexmenu/images/doku/folderh.gif new file mode 100644 index 0000000000000000000000000000000000000000..8414d4d69fa9cba7821efd06e5afba8134be2d10 GIT binary patch literal 54 zcmZ?wbhEHbWM$xGXkcVW?wP~Dz@Ye(g^`PakwFK@W&p`BF!A>EujD9r%T%)YRN4nE G25SHn$_y0% literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku/folderhopen.gif b/plugins/55/indexmenu/images/doku/folderhopen.gif new file mode 100644 index 0000000000000000000000000000000000000000..f5d5c7e56f01c1933ab59785f73a12e6c004de60 GIT binary patch literal 54 zcmZ?wbhEHbWM|-IXkcVW?wP~Dz@Ye(g^`PakwFK@W&p`BF!A>EuRPt$uy{)1ycrGJ G4AuY|7Yq^r literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku/folderopen.gif b/plugins/55/indexmenu/images/doku/folderopen.gif new file mode 100644 index 0000000000000000000000000000000000000000..f5d5c7e56f01c1933ab59785f73a12e6c004de60 GIT binary patch literal 54 zcmZ?wbhEHbWM|-IXkcVW?wP~Dz@Ye(g^`PakwFK@W&p`BF!A>EuRPt$uy{)1ycrGJ G4AuY|7Yq^r literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku/info.txt b/plugins/55/indexmenu/images/doku/info.txt new file mode 100644 index 0000000..1b1d8cd --- /dev/null +++ b/plugins/55/indexmenu/images/doku/info.txt @@ -0,0 +1,2 @@ +author=Samuele Tognini +url=http://samuele.netsons.org/dokuwiki diff --git a/plugins/55/indexmenu/images/doku/join.gif b/plugins/55/indexmenu/images/doku/join.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5cf52378fa5f361ff532bd66a89fb405f23f815 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!n8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku/joinbottom.gif b/plugins/55/indexmenu/images/doku/joinbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5cf52378fa5f361ff532bd66a89fb405f23f815 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!n8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku/line.gif b/plugins/55/indexmenu/images/doku/line.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5cf52378fa5f361ff532bd66a89fb405f23f815 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!n8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku/minus.gif b/plugins/55/indexmenu/images/doku/minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5cf52378fa5f361ff532bd66a89fb405f23f815 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!n8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku/minusbottom.gif b/plugins/55/indexmenu/images/doku/minusbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5cf52378fa5f361ff532bd66a89fb405f23f815 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!n8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku/nolines_minus.gif b/plugins/55/indexmenu/images/doku/nolines_minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5cf52378fa5f361ff532bd66a89fb405f23f815 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!n8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku/nolines_plus.gif b/plugins/55/indexmenu/images/doku/nolines_plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5cf52378fa5f361ff532bd66a89fb405f23f815 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!n8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku/page.gif b/plugins/55/indexmenu/images/doku/page.gif new file mode 100644 index 0000000000000000000000000000000000000000..b43de48a4701e5123846ee5f0357b65065eca04a GIT binary patch literal 50 zcmZ?wbhEHbWM$xGXkcJS?wRxd|9{1wEQ|~cj0`#qKmd|qVB+lQU%C4M|KgUF4AuZl Cg$<mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku/plusbottom.gif b/plugins/55/indexmenu/images/doku/plusbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5cf52378fa5f361ff532bd66a89fb405f23f815 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!n8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku2/Thumbs.db b/plugins/55/indexmenu/images/doku2/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..98493964ffdeab76e03318160e0f263c23df2427 GIT binary patch literal 7168 zcmeHL4@{J07=MoQ5akX5(EvsMsE9cA{&9b5=?=LmnZy)h+E^TSSZ=0Ev~*fpxJw=B z)=+D14NR?O(G1L0ZlSg!DIrNyW}7;vHPSWRTASwedp^FGuG{zFhcYLP=k|Wj`@Q$x z_j}&weV*U@eAnKVaH0NS>P3o>8KkE>pQRwjfolq#$JxGM^pbQ`n z{0&=&$a`pj=KUUuHViEWZ8%yinh}lnncJZJe>^asR^YRWGRRBIp;yvc?6h_nO@^MF z=Q!$3;`en{wf@nj(_>OI2NuLidE}sHsS+PIIdQd<4_7BypzZk9g{!4|vcff&qI965 z9vc*n4>CSS!wB?Qt4<92f_XC%zXEub zSgVt4WQHefXzUpaY;d5bCXCO|KTz;D?+NF&-~jG({150qvZZ0(8+Q?6?%-^PlFyO_cNd~(X!G@FsG2`JpBhe%{S7xm zp7YG}5FOked)voBWGXE1lq8q>GZM^Z+*(PuH`vLKp+av_K|_A|>)e-OBpiQs!uMOo z)m(~y(D>^mYl!}Iv^%@(>lP{CbC@Se>wo&>wo=^my8dilzw0Ug?NDf@K95G$?oX~s zEeLNh?3l)(`pm9V2d*&ue;mUD8YFW6I+iZ3&z#oyhJyWy`zQF%3I1c&bASa|+rWf= zjJd%{4)CIyF#m8!@E&q#s?7@@=lUX&|17|;1Is0`zYn;4BKX0DfnL~`C`aaBkrv@N zYJIM4BJr7b`K$?G%}b=d58P`<&kC(BjL+fDT&Z>aTu(*fS4d|cuigyLGyhkh&)7D} zCu$am^QSNCH{oG||NA?CAOGR>d)rq}KCd4;DbVI{Byk~;!ogPkn0svrLzQh zocV5ve|)%dC8j1E|C~=;lW4^siMf&Z4q$gzTyCt}2~XI;13oGL*(+)y@{e;$EBVEwYsF6q!x!g=h~Km?%yD~cE0xZVhcbR6 z?bl7*oX~lI@&`)(3Hx`+8+*tW5f_(Q`DZNVHnOo0 zf$sp0TdH`t;&h_#l(>*9AwCb(kf&a0*e%1PGVR!sqJN086#m5-h|GIH! z?4lQzHFUk^yz1TEv}t|GjYA7gU&{Px<$l}TkJ^{dytTDGPCsRpanz?pdv;rb#hGKC zH?FR!zgil5`@>&q*IY|~W%`y9=Y~X6SHsyZMpuky*(}XU#J^wu#jN%-Ravj*>J;K% z@%=}2{e66Y-67*YRvU9H`Dag|0)F4l&zU{^ak={PyY7%D`NYKZW@G(Xb3mVCHI~`V z1$`ZJcKYluCY%dyl*oG{wa`{milK>&M%qy~_0XDgBP74{;%O289OswU;O69 zxo1aI_ILc}z*i#vG;ee-6Z=~K^zx{C`f4EKi~JGsdo69*#naPDJOd?u?`gvZf7IiF Fe*h#Vl9m7f literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku2/base.gif b/plugins/55/indexmenu/images/doku2/base.gif new file mode 100644 index 0000000000000000000000000000000000000000..74715fbca5f4b072c1ca79550c38c3c208c21e34 GIT binary patch literal 810 zcmZ?wbhEHbWMtrC_|7m2Mnhmkhk)Ww7Dfh!{|q{yPypo#1`c+H|C}-&1_}(;0IDPh A1^@s6 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku2/empty.gif b/plugins/55/indexmenu/images/doku2/empty.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5cf52378fa5f361ff532bd66a89fb405f23f815 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!n8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku2/folder.gif b/plugins/55/indexmenu/images/doku2/folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..74715fbca5f4b072c1ca79550c38c3c208c21e34 GIT binary patch literal 810 zcmZ?wbhEHbWMtrC_|7m2Mnhmkhk)Ww7Dfh!{|q{yPypo#1`c+H|C}-&1_}(;0IDPh A1^@s6 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku2/folderh.gif b/plugins/55/indexmenu/images/doku2/folderh.gif new file mode 100644 index 0000000000000000000000000000000000000000..74715fbca5f4b072c1ca79550c38c3c208c21e34 GIT binary patch literal 810 zcmZ?wbhEHbWMtrC_|7m2Mnhmkhk)Ww7Dfh!{|q{yPypo#1`c+H|C}-&1_}(;0IDPh A1^@s6 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku2/folderhopen.gif b/plugins/55/indexmenu/images/doku2/folderhopen.gif new file mode 100644 index 0000000000000000000000000000000000000000..74715fbca5f4b072c1ca79550c38c3c208c21e34 GIT binary patch literal 810 zcmZ?wbhEHbWMtrC_|7m2Mnhmkhk)Ww7Dfh!{|q{yPypo#1`c+H|C}-&1_}(;0IDPh A1^@s6 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku2/folderopen.gif b/plugins/55/indexmenu/images/doku2/folderopen.gif new file mode 100644 index 0000000000000000000000000000000000000000..74715fbca5f4b072c1ca79550c38c3c208c21e34 GIT binary patch literal 810 zcmZ?wbhEHbWMtrC_|7m2Mnhmkhk)Ww7Dfh!{|q{yPypo#1`c+H|C}-&1_}(;0IDPh A1^@s6 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku2/info.txt b/plugins/55/indexmenu/images/doku2/info.txt new file mode 100644 index 0000000..fac67c1 --- /dev/null +++ b/plugins/55/indexmenu/images/doku2/info.txt @@ -0,0 +1,2 @@ +author=Davor Turkalj +url= diff --git a/plugins/55/indexmenu/images/doku2/join.gif b/plugins/55/indexmenu/images/doku2/join.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5cf52378fa5f361ff532bd66a89fb405f23f815 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!n8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku2/joinbottom.gif b/plugins/55/indexmenu/images/doku2/joinbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5cf52378fa5f361ff532bd66a89fb405f23f815 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!n8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku2/line.gif b/plugins/55/indexmenu/images/doku2/line.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5cf52378fa5f361ff532bd66a89fb405f23f815 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!n8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku2/minus.gif b/plugins/55/indexmenu/images/doku2/minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..af6ccefa49ada134fd9b06e3da844869b633d861 GIT binary patch literal 852 zcmZ?wbhEHb6k-r!_|5p4&%6M#8 yaIl#}SS#klhJ}Zl8I`=I%rIbZX%*v4J7Q7r*r{7ivaQBr(~^^uHTcp4&%6M#8 yaIl#}SS#klhJ}Zl8I`=I%rIbZX%*v4J7Q7r*r{7ivaQBr(~^^uHTcLGYlFIxARNO@hDtWaBUIiPTOMfV7_}lvsu=hh(Z;&NfL@qDJM29Jw4q( Jn2m+O8UP#&8=e3F literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/doku2/nolines_plus.gif b/plugins/55/indexmenu/images/doku2/nolines_plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..f258ce211a0a19c2ecbcb11170b9a8b35ae2436c GIT binary patch literal 870 zcmZ?wbhEHb6k-r!_|DAG)YR0_(7-SXMnhmkhJfNv7DfgJW(FOQ??HKjfy0@BokPZB z!-9j&9Ku>LGYlFIxARNO@hAj7*xx83m?l#Y_`t1MN7>;E6U^8fqy z|9j8=Pwx3|T<~8a>c0+12S_gii-W-l&((V^UfWI&JhiCS=aLCqnn9bPz|jU(=HNs8 rZYnkx6?SqzzM^3v$9eH+K!pv9XRlIWM-jsuPBZBnX?v$~FjxZsS{OU2 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/drktheme/empty.gif b/plugins/55/indexmenu/images/drktheme/empty.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5cf52378fa5f361ff532bd66a89fb405f23f815 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!n8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/drktheme/folder.gif b/plugins/55/indexmenu/images/drktheme/folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..6c5ed40d387ee343ccec496779f3a8c2239db681 GIT binary patch literal 190 zcmZ?wbh9u|6k-r!Xkh>WR`>rBQU5iw{~H(lcd7ZG-1EO=&i|?F|Ign1fBF9Zd(Zyg zckchuEC263`~Us>e;@#BB9_nrDFoTY!0N1^(wCAsFJslZoNPP4%QiWC6xtrHIQPh+ y%h@rINurnI=p!|e6?`2p4jL3JldyDdRB%`$!`i6uAk|c$sU`bt-tOCq4AuYwrb4#> literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/drktheme/folderh.gif b/plugins/55/indexmenu/images/drktheme/folderh.gif new file mode 100644 index 0000000000000000000000000000000000000000..6c5ed40d387ee343ccec496779f3a8c2239db681 GIT binary patch literal 190 zcmZ?wbh9u|6k-r!Xkh>WR`>rBQU5iw{~H(lcd7ZG-1EO=&i|?F|Ign1fBF9Zd(Zyg zckchuEC263`~Us>e;@#BB9_nrDFoTY!0N1^(wCAsFJslZoNPP4%QiWC6xtrHIQPh+ y%h@rINurnI=p!|e6?`2p4jL3JldyDdRB%`$!`i6uAk|c$sU`bt-tOCq4AuYwrb4#> literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/drktheme/folderhopen.gif b/plugins/55/indexmenu/images/drktheme/folderhopen.gif new file mode 100644 index 0000000000000000000000000000000000000000..8066b9e8e10e6f8a6df1a2ad1ea88434dd79ef37 GIT binary patch literal 197 zcmZ?wbh9u|6k-r!Xkh>WR`>rBQU5iw{~H(lcd7ZG-1EO=&i|?F|Ign1fBF9Zd(Zyg zckchuEC263`~Us>|6jlU|Ni~|&!7K50M<=_&;iMV>|$W`dZ5ymk~uG9)w&#SyS_^{ zYcA__BwDQ6Y_ZYVv5-kZu#44CBS2Q*LUZB;AH$M1CdY;eU$~eY85k2y1)5xrm@;l~ PeOErmw*0EEB7-#mB-Kmk literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/drktheme/folderopen.gif b/plugins/55/indexmenu/images/drktheme/folderopen.gif new file mode 100644 index 0000000000000000000000000000000000000000..8066b9e8e10e6f8a6df1a2ad1ea88434dd79ef37 GIT binary patch literal 197 zcmZ?wbh9u|6k-r!Xkh>WR`>rBQU5iw{~H(lcd7ZG-1EO=&i|?F|Ign1fBF9Zd(Zyg zckchuEC263`~Us>|6jlU|Ni~|&!7K50M<=_&;iMV>|$W`dZ5ymk~uG9)w&#SyS_^{ zYcA__BwDQ6Y_ZYVv5-kZu#44CBS2Q*LUZB;AH$M1CdY;eU$~eY85k2y1)5xrm@;l~ PeOErmw*0EEB7-#mB-Kmk literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/drktheme/info.txt b/plugins/55/indexmenu/images/drktheme/info.txt new file mode 100644 index 0000000..b448943 --- /dev/null +++ b/plugins/55/indexmenu/images/drktheme/info.txt @@ -0,0 +1,3 @@ +author=Marco Laner +url=http://brk-test.oc-tuning.de/ +description=Marco Laner \ No newline at end of file diff --git a/plugins/55/indexmenu/images/drktheme/join.gif b/plugins/55/indexmenu/images/drktheme/join.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ad68ca626f995211c1dfb5941082bfa1452779b GIT binary patch literal 166 zcmZ?wbh9u|6k-r!Xc1-r0#^6`5>fv(v;P|x{CBDOpWO4mWX}Jo>;KQ*{D1lW|9j8= z-*@i+(JTM&J^TOt`~P3R{{Q~{|IeTQL;@X<4IsN1ShXLh^a(r6TamFW=jNu@)yF=0 iT-VEcZT8^*fh%jxrmR)i^~n2X(xD2ij6P8&25SJT&}v5j literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/drktheme/joinbottom.gif b/plugins/55/indexmenu/images/drktheme/joinbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..c20689a1db026aea6bf860e1e425c051643793f4 GIT binary patch literal 158 zcmZ?wbh9u|6k-r!Xkh>WR`>rBQU5iw{~H(lcd7ZG-1EO=&i|?F|Ign1fBF9Zd(Zyg zckchuEC263`~Us>|6jlU|Ni~|&!7K50M<=_&;iMV>|$V5exTAP>@aUd#WR`>rBQU5iw{~H(lcd7ZG-1EO=&i|?F|Ign1fBF9Zd(Zyg zckchuEC263`~Us>|6jlU|Ni~|&!7K50M<=_&;iMV>|$V5f1uJQ>@aUd#X(Iv7S#uO?_WFj{oi|S1_o;Y^>84T literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/drktheme/nolines_minus.gif b/plugins/55/indexmenu/images/drktheme/nolines_minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..2592ac20f3f4c28e38f789309ec52f08505bdf6e GIT binary patch literal 861 zcmZ?wbhEHb6k-r!_|DAG)YR0_(7-SXMnhmkhJfNv7DfgJW(FOQ??HKjfy0V{okPZB z!-9j&9Ku>LGYlFIxARNO@hDtWaBUIiPTOMfV7_}lvsu=hh(Z;&NfL@qDJM29Jw4q( Jn2m+O8UP#&8=e3F literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/drktheme/nolines_plus.gif b/plugins/55/indexmenu/images/drktheme/nolines_plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..f258ce211a0a19c2ecbcb11170b9a8b35ae2436c GIT binary patch literal 870 zcmZ?wbhEHb6k-r!_|DAG)YR0_(7-SXMnhmkhJfNv7DfgJW(FOQ??HKjfy0@BokPZB z!-9j&9Ku>LGYlFIxARNO@hAj7*xx83m?l#Y_`t1M|Ba{La?4kwX3c6}c&WZ`PygnpJ?rkDyZry# zum9<}^Zxw(U)#BD%KlHsjvf2=@89j`-!lsq*us+EMQ_{wz1I^mD$)V zp|fqfjlDg)$=)VaEw1f$c1O*PPdJL7u{n3dTtWFV-;Nvh<`x$Gm({MHfB2Z&=(4Wl pOY=wE9NL#fJ_D_5c6? literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/drktheme/style.css b/plugins/55/indexmenu/images/drktheme/style.css new file mode 100644 index 0000000..3f65d66 --- /dev/null +++ b/plugins/55/indexmenu/images/drktheme/style.css @@ -0,0 +1,7 @@ +.dtree { + font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; + font-size: 12px; + color: __text__; + white-space: nowrap; + line-height: normal; +} diff --git a/plugins/55/indexmenu/images/dryoo.png/base.png b/plugins/55/indexmenu/images/dryoo.png/base.png new file mode 100644 index 0000000000000000000000000000000000000000..5b136833a26e01f5aebec993f829d3f5b5c7903d GIT binary patch literal 701 zcmV;u0z&WdH}+2L}oS4vkQaO8@`>2XskIMF-gj2MP`WG69<)00009a7bBm000XT z000XT0n*)m`~Uy~J4r-ARCwA=Qp;}BKop%BkCUiL8?5k*fYKt=Ris9!3pTK4fmpMu zV8e&-6G$vrAR(~;A=sfVijY_!!lPA)ctoWnO+y||>@;@9Gh@!!QN@)t9(&HY_uO-b zZvXCW@AW1^22u&7@x*bgW1`|1Td6hHNXGz>SZ`KW>4UfR^Ggc=4Fi#KQUn4VY-Uo0 zQiCw?{MoR_gGe!oe1s;!8RLv(2>~GlSx8hv07JPg{1HEjlp97ko<=fbv5m5GrL^ee zY~TjdS?zGN)$AfYv=Pdf#W^Y(eS`pgWBJsIlmBqw{uuZW1}6UGZR_dopHZNIp_auV z8meqYH_9cTpM2eK^u0pH{D0pXeC)XQudW{W;mbywB*D_QG$CuH#V_6Q&*22n&Gk$7 zsw?RAQ^!TYYZpqWPn3jmmRbpFF=sc26F7s`=gBC+(azs-xsbCM1)6AW2yi2*L5`uv z8;ep#2+quSWE5*PuYd_)4ws#Liby%wL&^Ht6KyX*QlMj{j7y18wALA2Up~3p^XfhC z@#j5c$#Sc5rU=5bdMgl-mJ%EuDKkims(1T+*ng*Tai=>52hH4CD_2ezad+PQ>grjj zBLNP_YbN2U8PkhK`*0Fg&pF777TbRC{96lXe;R05l=Q$sJ+d=tTbLj?ufBKS2|j~l zrcwwb1v=$$!kBRTGMk%bvKT(Dq_Gd7=Up1KHmjUYcz%gKsx=?J-V)x3*_r=61&Ab9 j5Lpc!>K6)kZ{Pd}-4fKAp{QYp00000NkvXXu0mjfOO7%2 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/dryoo.png/empty.png b/plugins/55/indexmenu/images/dryoo.png/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..79ac36b999c358595412ffba7bef05f14bb350db GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeOS+@4BLle<643uN=boFyt=akR{0HM7pu>b%7 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/dryoo.png/folder.png b/plugins/55/indexmenu/images/dryoo.png/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..1b5b1dac019582e0d0110143a591fd55d47edfe2 GIT binary patch literal 724 zcmV;_0xSKAP)WdH}+2L}l|DRRQBMF0Q*2XskIMF-gj2MP@mosx+?00009a7bBm000XT z000XT0n*)m`~Uy~Qb|NXRCwBrQaflAQ52o`=FRNPWS89}OE%e%NFt^&1~ev>XrhfD zh;>L|qc$N}*$aYVX=Nk$MPgwcVq;+u2x62N79xvgmqgU8`RYyQPQ@%%MvQgb+AUp<*GR5)Inx+h0bDg}yFls@M%uN^KE0 zYQWKiLl@_fW#t?@ogywVZQHgS*L2fw%HPh96|*Vpcz@1uocDXbc+loyKtvqIuD3XK zczUqM_{TFpK9u)nZ$5Yitz*ytA&vidlvGL)@K|{1yKhULMO4RD@K+B(%7=3&2Qw}p zUv5?JudXTRn=_(s2!nbZHHf9Fbh5y_bNN({YeVMA$DK#-K8HVcVf+w8L?LhxHgQVn zd!;0q-1W)P)5CcRUn*sSTBDlDubEUO>M90000WdH}+2L}oQ06ek>$^ZZW2XskIMF-gj2MP@=T=SHc00009a7bBm000XT z000XT0n*)m`~Uy~SxH1eRCwBjQaNZ;Q51d4UuPzclVKPnBqNSNEfUehA&sJ=D2fK` zVxdjah`p9th=`@7l}QxTLa-1QT(A)p6a`5PVn`$jMzhTJ=l}m!@0$U^LcDz5d;h+7 z?zzjscc0I{`Mk2c9tR;0V<`kvQfS2yBCtxqm1IgV5jQZ#oJ#ado^*a)l=TOI? zo@=|teA{t}l?*Gxd?IR2c;3LQAEkG^=Bg1H1E=M*EXKl>$g(U_e?S zgm_dXLBuO{Rtw-0aBhSGE{+au8rYT@Jzh+uQmk1KtO+oL2_`n}89Za#gmD!_0;m`h zTo0EX?d}i~O)u)Ox`dR}T1g(#!r&=tS&$6pDq>2BIF1_cKFw|^S%spZR~E2D zEOGW^Z)ry-`iG4i>dB@LUbr%@wI-6AKEMh6&&(UGfFV#Kd3ACs;aT7^%~e_mn3=wD zzSNcT;px2>->=_#4K+iF0Ek80Twf)xF?_`Usf{?4T>kQA~FXzK)A00V&I=uB9kPA4h^5Nkp4<>nSnNl0n@>d^?9OR#Tptkbx*l%nNo)}5aXqW&1 N002ovPDHLkV1iQeK7{}P literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/dryoo.png/folderhopen.png b/plugins/55/indexmenu/images/dryoo.png/folderhopen.png new file mode 100644 index 0000000000000000000000000000000000000000..5d49c70e7a7b017d33256a2981da3a1fb37f9dd7 GIT binary patch literal 735 zcmV<50wDc~P)WdH}+2L}oQI{LoecmMzZ2XskIMF-gj2MP@!RYlmn00009a7bBm000XT z000XT0n*)m`~Uy~T}ebiRCwAwQcXw|Q5c>3`{u`a^G08mX^>!4T8Sbk(V{|%7Oq-G zD+71AZ5y;`DG~$`MPU%M2wj*|xC#oQT^3fP1zBm}&r{!dzI033 z(e_=Z;5XP!L7_RcTgpz!m-9b1coJ2l*NAIgXviysVR++eCn4nS^RL@Am8PlECQb}C ze^(<8cFH8>5?{1|9$cIEcQ#p;b#IbHvDPLv1}BSAvQLmH>j&eaFT|d#??3SgBFU>{N)2j;mKLwBH;)InY(s8ub&NH*>MSrK>%_YTf7D zp7^v|A-Q#Z@N7>r_8Z&k)%)L;MOovaUg4D9&2I-q|M=k|Bp>WMQ1k>q=lc$JwE2?L z>9$eeWL>Uq_)Yzwr;ov6XNRH zw-v69)!k9rlkVa4!oliN^r_^!3jNlXI2j zFR+MM1W#7c7Kad!0u`VSF4mSlj!&$HegO%0p1i45mO+$Z5(0@;v`LPf8OeOWVAiJt zqd}<1DC?26Me1IqnbrXCb3?WdH}+2L}oPC?YES^8f$<2XskIMF-gj2MP@ahe%yO00009a7bBm000XT z000XT0n*)m`~Uy~TS-JgRCwA&QqODDKorjWOeULTH{0EAYw-tm!Md#4vKJLRXc5$t z=)sdWDPH^oyb9t`iU@+JD1v82k)C=Gsi0zur7BCcML}xSvb)_MNhTBDG_8FMVKVRg z-uvc#gRZ>%F#Y^#9CV4u5K|CK5N_%{d`*EU8P zdKfJTcL5#Hjd*h0+g3QPeEs7FpPj8!w{!A7>g*BsGCb<1RByqtvl#(O0y;d zH2gwV6F}9`10$2C$0llfp--f?CBe8a9@>5FL=^@KomDJpD&|yqpjz}`4SC|mt4}E* zilXc1$B*wR!oIbuFtxY>rAfY0<6drNwVQR_O3~}jm?wuzp2+|-K0H{?JDlJb^`AH2 z)S+S6X%oLP2CgX?&Ib%*R2%eDGz3To^uxL32eV7fW;4M=wp+v>8KsVgDG!@#^@xN1 z(Sh9m(cPb2dNjA({P7J_26xqj+`fanE@jOqQ|`wnX0 P00000NkvXXu0mjfsc=Ut literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/dryoo.png/info.txt b/plugins/55/indexmenu/images/dryoo.png/info.txt new file mode 100644 index 0000000..40bf692 --- /dev/null +++ b/plugins/55/indexmenu/images/dryoo.png/info.txt @@ -0,0 +1,2 @@ +author=Kudesnick +url=http://kudesnick.blogspot.com diff --git a/plugins/55/indexmenu/images/dryoo.png/join.png b/plugins/55/indexmenu/images/dryoo.png/join.png new file mode 100644 index 0000000000000000000000000000000000000000..6d5a1ae54f5370854c2392aed4a07b23f79543a2 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsC&9NhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$82}d%lNHs4#?` W)BE3Y#e)y1g~8L+&t;ucLK6U_uPBQE literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/dryoo.png/joinbottom.png b/plugins/55/indexmenu/images/dryoo.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..cdab118cb29c281f11155e5f296b0d3f35a56c41 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTXn49fhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$ClRhM6IPd<+cY XJgV#y&S_r->S6G7^>bP0l+XkKlHDdR literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/dryoo.png/line.png b/plugins/55/indexmenu/images/dryoo.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..6347746353d696bcfde3b979265a8c8102115be6 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsCc?KhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL5f=C4rMWOgI_*Hmlc1 TGkuy2RL|h)>gTe~DWM4f7kVai literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/dryoo.png/minus.png b/plugins/55/indexmenu/images/dryoo.png/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..1329c6a16ab2efee31d33a6f67af6424338cdeac GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGT_2>S z4={E+nQaGTcze1yhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3MygTe~ HDWM4f9LhAa literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/dryoo.png/nolines_minus.png b/plugins/55/indexmenu/images/dryoo.png/nolines_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8758b19f86afecb3f303d3cdb3d9f6ba6e6479 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7CY~;iAsXkC6C`RH1f5L(xKGbWI1MpUXO@geCwk+9ibm literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/dryoo.png/nolines_plus.png b/plugins/55/indexmenu/images/dryoo.png/nolines_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c9badea1c4f338ab1a25759431b687a9d4492277 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7E}kxqAsXlJ_8sJ6P~dTj{qpd4u{De9Ip^aiPD|K@Jg_}#<7sNdwfe$O z^M&4vn%7i$K8$;{fWhI)!SYhB*5WdH}+2L}oV9U{Y@RsaA12XskIMF-gj2MP`nw!hl`00009a7bBm000XT z000XT0n*)m`~Uy~TS-JgRCwB5l1pn7Q5?lHb7wM-%-HmiCb8+mV5(Azv0YdfilER% zajAlvegVP9(uFAQ)Gy#hR8S}`RJsrg1zSaHkzyfH(kN+5(wax(B%R4T?#vzkNuX(S znJ4%BX3jnLP_FBG_6-d?-?z#?i&aI(*T)BCQSclbO!G!ukLeJOp)H3j=gP0=KWW)a zF@5U6wM#yp+YiuiI>deYBQulOv>gIKS-13j&KEhdkjdYBHEUS-06++NI5YcVDOu93 z+^$~3wrbgqWfE*jk?4Fnd;jHI6So)?oV@z%!^hajXrfTvsMHqLi^=VB^>>2t$$U?c zX1$42I$tQ99X*EVx*g_^iXB6*7nm)xDc zj1XeFMGk_}EX*+|B=M5B=U-=s+BX2kTpN2#-9yt{cW`ELnWd>a(^u%j5-$(NN-LkU zl^SWdgbCC*_I$&Cy#Ai&bBj;DrRWRM;CTEbBTC7&^k3DeN4zI=TaOe)h0je<3`;?d z8;bV$>)PtC6eQ#CkHWXXq=9XCb#x7DyS7@D298dS4BeU-uFnCpr5f+k+o{s-N+t`7 zHh1!J^aS#9c1;C9=$`nsSY#2^tOh1^Off77>d}`}a_*fpI4p)Dpa%EnhXSCM zy-cebjfEnC6@Uzg9K?@!0b-T9dnY1YH%`Zz>K4!}329szL^Hla9zuMwJQnhU+RwA? z<=bOmH#&LNe>@Jc#Dg6-Ct_WKcfW>et2gXdM$y)lT2V8nVxgeKx7GVU)2%D|!re&K P00000NkvXXu0mjfO214@ literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/dryoo.png/plus.png b/plugins/55/indexmenu/images/dryoo.png/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c28055154425e18f93a60ea2ad1a2a92a0dbc048 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTM0>h8hG?AMJMke`g8@g2{nGF2Y=3@TELI$;+abd0`u>T_mVFx6X3wrL z>reG8Z=0}8yXB^z^TwO{rRGoHoNK7;PFl4y=$)Xe%ghz|FBwv9UQl%08Tj@2{o3{| ZO!2>S z4={E+nQaGTM0>h8hG?8WJ28;2!GObA{z&y}zc~AnG@mOkrwe!}ERD5tnce+p&(hB4 zA1tPQN$beml{DimOV{atE2@Lnz2j-wuCwgc>L+m*U8c Zh#m;H{QKMe{cE5#44$rjF6*2UngA{bM8p69 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/empty.gif b/plugins/55/indexmenu/images/empty.gif new file mode 100644 index 0000000000000000000000000000000000000000..afbe6429d7c1e5acc8fed23e493b261465047520 GIT binary patch literal 275 zcmZ?wbhEHb6krfw_{_j?(b{fxY~#xXrk`RNE{ierGBErHA~0aU1{D8u`?-b$J39ur z8tEA@GXm8p{$$}~VBlcT0jUQW%fPZ$K(R%@i33P9fe0|m1;}FJ1QH5P9D*$Zg3A)Da*HV$>0lU;&U(Ky4x|3pAlDpi#>d ofMN*(9YEV8fh-4yV355jK!OR(0*VPJhCtlX#D;LyLJkIN0KTd}*#H0l literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/gnome.png/base.png b/plugins/55/indexmenu/images/gnome.png/base.png new file mode 100644 index 0000000000000000000000000000000000000000..4e5742ea29a1632cbbb436ef890c4e093be7647d GIT binary patch literal 525 zcmV+o0`mQdP)WFU8GbZ8({Xk{QrNlj4iWF>9@00D7HL_t(I%dL_9(Lf+qpSiu{ z?zIpvu6n58RJ*e?v->ie*eI^o9mg5w6Ed01?aubzC_fgfxPoDr5&7b_IXFBT z;TK2(_`XN|@c~2-5e5f_09aU@lQ^SoTh;yD!^tFo=P6wG;QaFeOS+@4BLle<643uN=boFyt=akR{0HM7pu>b%7 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/gnome.png/folder.png b/plugins/55/indexmenu/images/gnome.png/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..e45b65b6ec99a0403754c2ffeaf766266cb006b1 GIT binary patch literal 479 zcmV<50U-W~P)WFU8GbZ8({Xk{QrNlj4iWF>9@00BcuL_t(I%dL{VN&`U@ zg}?nNUD!>cV3%57B4VM|QM6Lf!XSAW1@Q-C>m#@pkzkQBg@p)$F&YSDJ7JTZ-RzEq zxM9>_qMm9vbMJTOFjw0vmztjE<@uysE_ZiycrwoqGCj}Bm&;q|x{;bazt36aVvaFn z0)$~e^XUqR-L(Q)kB>2YPj1PB6w@AuwsB)qhrSuHLhLV<=3nx-^| zVT9}66w(*yhJgq|rKoyc$M*$s94o$I7-X|qHNur!r`zo+g*)3D*mefXnj%RO262p( z5}71ix>Y)z&Ja-A-TXGE@4wP&-GA{{mKSL>ZifIVCGGYDzmX0oUpS5igGdGR`#!&w z{t@9%0GJFQWugL-B%TNmMS;2pLI^A?Gh$kLNNV002ovPDHLkV1nMAzOw)T literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/gnome.png/folderh.png b/plugins/55/indexmenu/images/gnome.png/folderh.png new file mode 100644 index 0000000000000000000000000000000000000000..c3bcfcdae15593908d30e77f38bed8ed32c6fbf1 GIT binary patch literal 588 zcmV-S0<-;zP)WFU8GbZ8({Xk{QrNlj4iWF>9@00FQ`L_t(I%cYV_YZFl% z#ea7?f+eK28l~>K3#g0v2n|KF8(pL?x^YpEBGGRnKCseVMfw4{sjU{oRS1CyZqgE6 z^{VN#on{`r_qrGxaytnYJev#u=Q;m-#FNVMu9R|ub0`!FUtc_bb(?>{l~PVrDvxlS zp>FUb= zf3%n>-y@161P%ycHOFzn#>S_~E`we)8hiMD0Mz?#9v{Do=iRX-^uqT8-oINPsCjN- zCVK;=6iE_Whitch_0fF|fFw!m0a|O)S9KG$S}il6RGK2aS;rm_MIoI|Xcc>&$A!Of z=#onuC01f*=Ob@dS5Zo3nl?ATkjv#*Se#oEv-4$>&*za+T15{Z+@)A7GBT3qOy;RN z#TYPJ@nP#T)oMLu@a*Xl#$-KneC*R~HW25005E-jifXkk-PAjVR_j||jgI4FVp?ks z4t#(k7oh$7C!?bUi^bVio0$0<6C57;0KRyauLApSe+{PmS0000WFU8GbZ8({Xk{QrNlj4iWF>9@00DVPL_t(I%dL{TP69y` zhX2`J?T}pr6FVwN^d+#74hl7v7BI#!Z%P0l7%QSnn}E}3%kS2 zSSSm_Ld3+cndHnl|GAQ_{AP_(n#2I{c>MODaJYb9Fes(Te1098rUypXY2mnZI*&0h z0KoU#sMT#iN=PX&lb8hntgbD~QGu3aR*s6LMFRlZZ4Zv)e*Z||p>dCuwD=7-On{5F!ZdbT~NY zfo&L*6D?JMafY|o55>v0pW(V5IOmF8*LB2VFRDQK;u@4v#W9y%LMk6-e3n$BlWz_QFrVgDqJKVn&C1^>Yp XI?$qDwQSl$00000NkvXXu0mjfql?sN literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/gnome.png/folderopen.png b/plugins/55/indexmenu/images/gnome.png/folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..7e5beb6a6cc26b82390f517a061c5a030cfce5af GIT binary patch literal 533 zcmV+w0_y#VP)WFU8GbZ8({Xk{QrNlj4iWF>9@00DVPL_t(I%dL{TP69y` zhX2`J?T}pr6FVwN^d+#74hl7v7BI#!Z%P0l7%QSnn}E}3%kS2 zSSSm_Ld3+cndHnl|GAQ_{AP_(n#2I{c>MODaJYb9Fes(Te1098rUypXY2mnZI*&0h z0KoU#sMT#iN=PX&lb8hntgbD~QGu3aR*s6LMFRlZZ4Zv)e*Z||p>dCuwD=7-On{5F!ZdbT~NY zfo&L*6D?JMafY|o55>v0pW(V5IOmF8*LB2VFRDQK;u@4v#W9y%LMk6-e3n$BlWz_QFrVgDqJKVn&C1^>Yp XI?$qDwQSl$00000NkvXXu0mjfql?sN literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/gnome.png/info.txt b/plugins/55/indexmenu/images/gnome.png/info.txt new file mode 100644 index 0000000..38e6759 --- /dev/null +++ b/plugins/55/indexmenu/images/gnome.png/info.txt @@ -0,0 +1,3 @@ +author=Bernard JOUVE +url= +description= diff --git a/plugins/55/indexmenu/images/gnome.png/join.png b/plugins/55/indexmenu/images/gnome.png/join.png new file mode 100644 index 0000000000000000000000000000000000000000..6d5a1ae54f5370854c2392aed4a07b23f79543a2 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsC&9NhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$82}d%lNHs4#?` W)BE3Y#e)y1g~8L+&t;ucLK6U_uPBQE literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/gnome.png/joinbottom.png b/plugins/55/indexmenu/images/gnome.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..cdab118cb29c281f11155e5f296b0d3f35a56c41 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTXn49fhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$ClRhM6IPd<+cY XJgV#y&S_r->S6G7^>bP0l+XkKlHDdR literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/gnome.png/line.png b/plugins/55/indexmenu/images/gnome.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..6347746353d696bcfde3b979265a8c8102115be6 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsCc?KhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL5f=C4rMWOgI_*Hmlc1 TGkuy2RL|h)>gTe~DWM4f7kVai literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/gnome.png/minus.png b/plugins/55/indexmenu/images/gnome.png/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..1329c6a16ab2efee31d33a6f67af6424338cdeac GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGT_2>S z4={E+nQaGTcze1yhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3MygTe~ HDWM4f9LhAa literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/gnome.png/nolines_minus.png b/plugins/55/indexmenu/images/gnome.png/nolines_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8758b19f86afecb3f303d3cdb3d9f6ba6e6479 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7CY~;iAsXkC6C`RH1f5L(xKGbWI1MpUXO@geCwk+9ibm literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/gnome.png/nolines_plus.png b/plugins/55/indexmenu/images/gnome.png/nolines_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c9badea1c4f338ab1a25759431b687a9d4492277 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7E}kxqAsXlJ_8sJ6P~dTj{qpd4u{De9Ip^aiPD|K@Jg_}#<7sNdwfe$O z^M&4vn%7i$K8$;{fWhI)!SYhB*5c-+2*wv2(<2J_t+h+ zs5rlI{^p#SO2-|aiODDi-jZP}W|aE1)~BmOR3$EA(Vi@w>U%ZDa$9qM8}c0HKK>=@ z`d4d)YqwsmShMx=n<-}wTJ%-CXPi)?Z+d)E$Kx3$zTq0>%B>G-<`ESK<06 zKLv;!Rde(>`RU=L2g~Ovo%n1M@bQ?*+>S*Vvl$k=|9v$za@qmb9gNTaiaD`NnxMxo zp5*#q&TW}{<`>WDw{ULpSLj^#x@qe3m+d`GEQ*uw+Md|dvtPsTSdE!)vF)Ukp32Aj azp#b`#_#;I)BX+6mkge+elF{r5}E*#afeO- literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/gnome.png/plus.png b/plugins/55/indexmenu/images/gnome.png/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c28055154425e18f93a60ea2ad1a2a92a0dbc048 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTM0>h8hG?AMJMke`g8@g2{nGF2Y=3@TELI$;+abd0`u>T_mVFx6X3wrL z>reG8Z=0}8yXB^z^TwO{rRGoHoNK7;PFl4y=$)Xe%ghz|FBwv9UQl%08Tj@2{o3{| ZO!2>S z4={E+nQaGTM0>h8hG?8WJ28;2!GObA{z&y}zc~AnG@mOkrwe!}ERD5tnce+p&(hB4 zA1tPQN$beml{DimOV{atE2@Lnz2j-wuCwgc>L+m*U8c Zh#m;H{QKMe{cE5#44$rjF6*2UngA{bM8p69 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/human.png/base.png b/plugins/55/indexmenu/images/human.png/base.png new file mode 100644 index 0000000000000000000000000000000000000000..77035354e454b8689ca95cd0c54562fd7510e0d9 GIT binary patch literal 776 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKU^?&V;uumfC&|RfNMy={2`8RE zdn)|@|NHy)Y;109Za|c$x6WQaeqY44+TVS`JQYBl4FCTptyr@z>a#rij=I0Eg4x*G zOiIoiIikXHnI9ti^V?hNmaVJhuBL2vW8>x3UHSk2|MMr~~BGpa1{MGXufl+o#bl{dgXp{ripo{Qo+)@!@szw)^sN|5{E$?9n-8$kkvV;CgVofb_-- z!B75}$sJ+lDARP}>eR^icH81BOXB~Mh;%ugFHXA;vPG25fEg8d8gtEQtHeNXer zLv22PfaT)npND7tJi|Zr-`O56SwCMwLQ>+! zBhwkNv(HG1K;8Z8`*;4+SG$)>{QLLo;DJA1S(!iYm*>&(>ET)P<_*u8c)NueY1}!@ zo2UN#|H|0Fzy%sYm4%-V9gkieS7Y$BO7Fu*dF#Xf@B8rd^ziWT^!%5+ac_TX<%CAv z4ZV$L7f)&gf``|CY0a>_2etG`QsS0rj}kxrI)C8A&-si};lRiMq32F@&y0_a*SUvy% literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/human.png/empty.png b/plugins/55/indexmenu/images/human.png/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..79ac36b999c358595412ffba7bef05f14bb350db GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeOS+@4BLle<643uN=boFyt=akR{0HM7pu>b%7 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/human.png/folder.png b/plugins/55/indexmenu/images/human.png/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..74efccb36bcde6d1cad189f9c2dde559a9d3510e GIT binary patch literal 674 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKV9NA#aSW-Lla#OkB*pOm{~`%S zFr8##WF#_W!h{pgpFI`+|Ns4cdp0&VHa8&3(_3e+AHOeRTkY>Y;U7E@ZAmNEtc&_A z&%UGX@2g-owlDW7__odBfAgBT(9NW)08M##x#--M{6gBqZEm zhA3@(xxe_M#No-y^(AIVNJ@gxzrVkaA2@jIOv0j7U74%)h_Evs4lxG0$rkF=pa1{M zGXufl+o#bl{dgXp{ripo{Qo+)@!@szw)^sN|5{E$>@hjBlb1n( zhhby)k$<~4a9Llt^y%qBhN{z=6VzqB(v$_bt{r4gl+C&4B0l5M+IR9YV8_{<+sNBs zAi#2P@BZcgS7jXQG=a7snl3fyP#KfGM7_V|3qeSV8_Jyv>{P7*a>J$ryF zj{j2bCw6&Ah*TDSK6E^KbzF_X(<;3WALXqN|G)1e5H0cF*x=v)^9N2aES)(+;p2z? zi4VW$hw;q-MK{paq$f#MZ^AuQ1NPxmsLQ-K;&wojY8Iu3@ zSAYF_ej&g8|2P(i#snZZIE&!}v)c+gH;7?M&iYyq7A!e2GklnM(V)}LT^c0r>FVdQ I&MBb@0N;Tm$p8QV literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/human.png/folderh.png b/plugins/55/indexmenu/images/human.png/folderh.png new file mode 100644 index 0000000000000000000000000000000000000000..f0135a33d84292166f6bb2e42e8ec30afe45a262 GIT binary patch literal 962 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKVD9vEaSW-Lla%7XylBxPv6ClH zcIM>doZ$h2|NsA|CnO~$)qH-&`}xvR@9>%*9}?L&RRJ|K{QrN*VcWKCNB?hZ(2w8u z=l-_b+uoLzmhvfIA+kwM<`01S!RFNe|CjpX_jmon@9*!Ito!@x=!b7_rP)M9LpR3m zE<5XP#sW4k<%}U?g8>i2h6c8C^FBAb$na?1{n0*Ese$8!zJuel36^JmuF%T4x7Fpy z#rJhvulc=^2Ww++WZ3tg(a6Y9P(nf?pPQFY{Qtjy|2}>EWVmzZ4$JS~zcVl}0-gKs zKgeASU%!20IC*Ed=%$hSt=J4_U`4V>Z|BftJu;7HQwstnixc~oEj&2leP~dU6cz!Og7|(>TUu&K? z@EujTW9ZUw?8u?(dy>zwI%J)%mp|aUR-BWg>BEE4^!Kf+lF~Xjo}T&13^F0<=Xd!> zN9^^cg6*r1U!Rl!1UrhK>#0P!vPi6(Z+Y;;yQjq>*FR*R_!IK{=Tb;;B{jZEuc&xv zaroX_Ye~EM-{&@DJ`8WWzrWtt00?TtrYCGLzXmkuf`ehh=Py0?@7MkP4T^S}zn&Nz-mmU2De>=5%8&oQtq<>yzb|oP-@ad;JRM%&KP~@!9urs} z%Rxu31_c3!i}_xTvI~W`y#5!Saog@AgJZ;m$>+Yr8OUh5{(7yDWBu~unbTgC`5E$y zShJf<4`v<>Sy{(5^W&7f6ZT+pbS?yf%yGSFeg2^Dj{l{sj{j!~1SNmF9C_$tYsPW6 zm)3&3>!;52f490>@`S@9`Bv7CJpMbEgwKLRI551v^PisYo-X+#E$v`;rl$Y+*x&f@?&@-$o-;ZDw`WR9%m5}Pi8^D0KmX4kICJ7a!RxQ{4}s6eV_mE{r&$uIraaI3;wlRNHH#mOGrsc`1SSq|K;WP z|IY!&=?+LJf@Aj}N7bQ*&c?>ZULY0(o5#%XRx~IgTe~DWM4f@IuWC literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/human.png/folderhopen.png b/plugins/55/indexmenu/images/human.png/folderhopen.png new file mode 100644 index 0000000000000000000000000000000000000000..ed7849b4b62eed0910b666d92d0ba6368f64839b GIT binary patch literal 883 zcmYk44MXR6vsYDD z&-{fDy2Mo{q)t_*Ret+nXxvk^$NI!m#DDpV^Ldb_P_f9;usOwcsAM0VS%G3sIqG9> z7%$K1(2efY^Sq19Bg1s#_vXDrjP1g$RK|3PVS}RonP7eD;A`qmY_E9~A3@sIsr8}S zkWe2&N)m_dL%WXIk(`|S1|2Y5>+*X_W14#V8Oi?B?3a#iLrvrOzx7Tba=m!g*!4QI zq7xw%7Z6_v?!gEfYVKq|J@&UICAHYyg~J+~BU)z)29fjBj(?+^0`&?FEU{hRpksra zSi^#wrNzD@LP{_%k2Up$Snz zF+jb2)du327yLuLuv*pwvGD{@QtTE*K!kz-xtst(>Vqj0Cj*(|S4AqLs_J)k@fhR( z57pQ4a_D_spL?FHH}3r~3Gze&mZfBZSJDkWVi5e~Fo47hU*RE0NGxI;Kw=sy$Tv-o ztljo8|36ft(0ci;gZhSmi1LakR&@q8_j_G1M)!a;0zit@QBndc#6$@|5CH@N7!Z(P zC`A836=N&;O+4=<<%$&#pU?GBS`%aOGOTL>!&u50)=ROh#lo^C6U!RJF=yGd&DS*pGX%^~(<-qbpFBP*;K%waf$Vg<$gb62}KYJ?t|Nr~@_H1l!Y;Hi5r?<{tKYm}tw%Xr)!asN*+LBhRSr_&B z{qyJlU;OwF1nXmWf11+RsK_hpeNr>);1_0yp+CR9wLYTBUKQY5mYs0n%9UxqfNIZ# z>(5{0VJiCk%#5qd5axe>Q!2jy;spy#ecUejE@m&s z^h=kocznOGy(_{h`(6mtEsd|zD=HpZ9KQF~+HlW`MQhI|tXzKzh`W@|RaUWmzP^6{ zJtnAo{{NQ;n|J@YxkS=pCj*{@+M*c`?@t!z;i<1P`t$$q+=utq=kw&m$JbVVdGYe~ z?(=qXpy2!eU*(J;SA&6o>p^jj%su~C>gb4YORFYKcXNy^nV$bpCSjAum0f{-Q}6h@ zyj0+&F+Kolg1*HiYHiM&1Sk9@m54h4T;o6W+j~D=H`?I@Oi2 zwYNCk_3--UrjQR>6Ox`JC2o0^o<1oxJ#o^%@ADt(s{|T2HBS&sGM;ks!~Dj^i4z-N zK7U{TKECGX-u}kMhn$e0PXL00994%JIvX1sdx2OGEZ#KJ*9^!&N{P%27uSAauV1R} P2om>n^>bP0l+XkKWduz% literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/human.png/info.txt b/plugins/55/indexmenu/images/human.png/info.txt new file mode 100644 index 0000000..38e6759 --- /dev/null +++ b/plugins/55/indexmenu/images/human.png/info.txt @@ -0,0 +1,3 @@ +author=Bernard JOUVE +url= +description= diff --git a/plugins/55/indexmenu/images/human.png/join.png b/plugins/55/indexmenu/images/human.png/join.png new file mode 100644 index 0000000000000000000000000000000000000000..6d5a1ae54f5370854c2392aed4a07b23f79543a2 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsC&9NhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$82}d%lNHs4#?` W)BE3Y#e)y1g~8L+&t;ucLK6U_uPBQE literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/human.png/joinbottom.png b/plugins/55/indexmenu/images/human.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..cdab118cb29c281f11155e5f296b0d3f35a56c41 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTXn49fhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$ClRhM6IPd<+cY XJgV#y&S_r->S6G7^>bP0l+XkKlHDdR literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/human.png/line.png b/plugins/55/indexmenu/images/human.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..6347746353d696bcfde3b979265a8c8102115be6 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsCc?KhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL5f=C4rMWOgI_*Hmlc1 TGkuy2RL|h)>gTe~DWM4f7kVai literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/human.png/minus.png b/plugins/55/indexmenu/images/human.png/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..1329c6a16ab2efee31d33a6f67af6424338cdeac GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGT_2>S z4={E+nQaGTcze1yhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3MygTe~ HDWM4f9LhAa literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/human.png/nolines_minus.png b/plugins/55/indexmenu/images/human.png/nolines_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8758b19f86afecb3f303d3cdb3d9f6ba6e6479 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7CY~;iAsXkC6C`RH1f5L(xKGbWI1MpUXO@geCwk+9ibm literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/human.png/nolines_plus.png b/plugins/55/indexmenu/images/human.png/nolines_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c9badea1c4f338ab1a25759431b687a9d4492277 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7E}kxqAsXlJ_8sJ6P~dTj{qpd4u{De9Ip^aiPD|K@Jg_}#<7sNdwfe$O z^M&4vn%7i$K8$;{fWhI)!SYhB*5c-+2*wv2(<2J_t+h+ zs5rlI{^p#SO2-|aiODDi-jZP}W|aE1)~BmOR3$EA(Vi@w>U%ZDa$9qM8}c0HKK>=@ z`d4d)YqwsmShMx=n<-}wTJ%-CXPi)?Z+d)E$Kx3$zTq0>%B>G-<`ESK<06 zKLv;!Rde(>`RU=L2g~Ovo%n1M@bQ?*+>S*Vvl$k=|9v$za@qmb9gNTaiaD`NnxMxo zp5*#q&TW}{<`>WDw{ULpSLj^#x@qe3m+d`GEQ*uw+Md|dvtPsTSdE!)vF)Ukp32Aj azp#b`#_#;I)BX+6mkge+elF{r5}E*#afeO- literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/human.png/plus.png b/plugins/55/indexmenu/images/human.png/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c28055154425e18f93a60ea2ad1a2a92a0dbc048 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTM0>h8hG?AMJMke`g8@g2{nGF2Y=3@TELI$;+abd0`u>T_mVFx6X3wrL z>reG8Z=0}8yXB^z^TwO{rRGoHoNK7;PFl4y=$)Xe%ghz|FBwv9UQl%08Tj@2{o3{| ZO!2>S z4={E+nQaGTM0>h8hG?8WJ28;2!GObA{z&y}zc~AnG@mOkrwe!}ERD5tnce+p&(hB4 zA1tPQN$beml{DimOV{atE2@Lnz2j-wuCwgc>L+m*U8c Zh#m;H{QKMe{cE5#44$rjF6*2UngA{bM8p69 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/human.png/style.css b/plugins/55/indexmenu/images/human.png/style.css new file mode 100644 index 0000000..3ff48e8 --- /dev/null +++ b/plugins/55/indexmenu/images/human.png/style.css @@ -0,0 +1,35 @@ +/*--------------------------------------------------| +| dTree 2.05 | www.destroydrop.com/javascript/tree/ | +|---------------------------------------------------| +| Copyright (c) 2002-2003 Geir Landro | +|--------------------------------------------------*/ +/* + a.nodeFdUrl Namespace with url link (headpage) js + a.node Namespace without url link js + a.nodeUrl Page js + a.nodeSel Last visited page js + a.navSel Current page js + a.indexmenu_idx_head link style of a namespace with url (headpage) nojs + a.indexmenu_idx link style of a namespace without url nojs + */ + +.dtree .human\.png a.nodeFdUrl:hover, .dtree a.nodeSel:hover, .dtree .human\.png a.navSel:hover, .dtree .human\.png a.nodeUrl:hover { +background-color: #e5f8cb; +color: #000; +} + +.dtree .human\.png a.navSel { + background-color: #8ae80b; + color: #fff +} + +.human\.png .indexmenu_rmenuhead { + background: #f69d4a url(../../images/close.gif) no-repeat scroll; + border-bottom: 1px solid #000000; + color: #000; +} + +.human\.png ul a:hover { + background-color: #e5f8cb !important; + color: #000 !important; +} diff --git a/plugins/55/indexmenu/images/icons8metrobw.png/base.png b/plugins/55/indexmenu/images/icons8metrobw.png/base.png new file mode 100644 index 0000000000000000000000000000000000000000..6d1bcd465d78711495fdfe4fe4dfb81e2c7444d4 GIT binary patch literal 394 zcmV;50d@X~P)mx7zXg4<0wj)$j9Pik=YOEK8!*ibdT<5y3`#uEJU=Lpf>Is8M8BtTbs1&tm zu0jhs(To8sp$Zo``-40|FB;-`98O~MJEm|N&!e%aI#-#C*XS?6vkr%Xr6)`ZOIWeBRM?YxVG?&jUWJed o_NIlv3x%DL)nLCM$uow&0h(fp7-$fw%m4rY07*qoM6N<$f<7>%$N&HU literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8metrobw.png/empty.png b/plugins/55/indexmenu/images/icons8metrobw.png/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..98a66420aa217fc32da8ca9abb3a8df37ddbf49a GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvimeZ7|F>s0H3;Qlv`o38a7fTd%58C?$*jze&zM%F3Nm

    I(84JgTd3)&t;ucLK6V$v@^^A literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8metrobw.png/folder.png b/plugins/55/indexmenu/images/icons8metrobw.png/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..4f391fa0389e61fdc6706b356904639abd01c3e4 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|mSQK*5Dp-y;YjHK@;M7UB8wRq zSgk>r@y*P~`+$OyC9V-A!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NC6e?@pN$v zvFLp}!H}=XLB!=gyOi_B6QVY(8y^Y?S+7q>U27UPuO&Op08cINW+S8Hs7Ng{}MgwFX%VfTrbs+oYtBe zxi5Cr>sgC5m>%3oT{LA@c<5HsV=Q9Ka{J!D-+ImXLDt3J3+DA6D)C-;^+o~E9}J$Z KelF{r5}E*-xO-v% literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8metrobw.png/folderh.png b/plugins/55/indexmenu/images/icons8metrobw.png/folderh.png new file mode 100644 index 0000000000000000000000000000000000000000..9a17b92282b3ae29c047611d2c1f342002030fb0 GIT binary patch literal 433 zcmV;i0Z#sjP)VGYjO66rZ99pfl)mqzbw`*P3&4AWAj|&_D7eKVo=F{mkh~pT~^8lz; zs~BTEDdk-d1jm!fQ@g(o>qIr@-45 bzF*`6rEHwIV`)x;00000NkvXXu0mjf84k9T literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8metrobw.png/folderhopen.png b/plugins/55/indexmenu/images/icons8metrobw.png/folderhopen.png new file mode 100644 index 0000000000000000000000000000000000000000..7e541bba38bc8b98059baeba6884d0553abad80d GIT binary patch literal 602 zcmV-g0;T`7O+3|Y5hO4LBO`)^&z`Hy=@9%qg zc|V1}rDe0(Gb!bDP1DW+9LG7)H0_CP+iwr#kLq@{TKy<5sa~&3MNwSf;jtzaxCe}Y zue*9Lgt&1zWEcig%8;(>Z-6_;K&QZ6;AB_vP$;A>mrG33#57GBjRvF9h)$>T{n%7G zaO{luD%p@Dz9eya4>2sep3m1tA25Lcy@R% z0S|cWgA_%P)9Ex2sM%~fz&9WYpl33fnd`dQe!ssybeM-Uo6Xc-uNMJc0zdW#`3QIp o-27J%7e{!?#W&do==+cQ1y+r`&+sB`OaK4?07*qoM6N<$f{L38*Z=?k literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8metrobw.png/folderopen.png b/plugins/55/indexmenu/images/icons8metrobw.png/folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..b01e139d66f240cb762d416c429ace1da028fc0c GIT binary patch literal 439 zcmV;o0Z9IdP){7! zyQYIqy#NR2u1-RROr?SZ6rzxdf7P7Np*1w6#hyic;p4yy=Q-csf&Zuj;2L}Zzr`!CGoO(xyk>y+C7xOEK7l*n5$Kjc zwOUOYjmDSn`&p$@Sy63SaU5?&Q8Xz^Q%Z^Jx+YCiu~DnldIoL^P_cDro_$+Aow z$C&^prDhKX11nIk*ApNIb^%0dEzM>#H^x|jJkNUpu73I@j^pH=PR9x|8jWN&$)f_K zl#=0aXax#_K(y9lX5VN-Ykga<*Z2DU{>NJL29hMvVHj>2W4gc_Oc(MHI0g3C1u4q literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8metrobw.png/info.txt b/plugins/55/indexmenu/images/icons8metrobw.png/info.txt new file mode 100644 index 0000000..be2b636 --- /dev/null +++ b/plugins/55/indexmenu/images/icons8metrobw.png/info.txt @@ -0,0 +1,3 @@ +author=Uros +url=https://icons8.com +description=from Icons8 Metro free set (https://icons8.com/icon/set/metro) \ No newline at end of file diff --git a/plugins/55/indexmenu/images/icons8metrobw.png/join.png b/plugins/55/indexmenu/images/icons8metrobw.png/join.png new file mode 100644 index 0000000000000000000000000000000000000000..98a66420aa217fc32da8ca9abb3a8df37ddbf49a GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvimeZ7|F>s0H3;Qlv`o38a7fTd%58C?$*jze&zM%F3Nm

    I(84JgTd3)&t;ucLK6V$v@^^A literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8metrobw.png/joinbottom.png b/plugins/55/indexmenu/images/icons8metrobw.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..98a66420aa217fc32da8ca9abb3a8df37ddbf49a GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvimeZ7|F>s0H3;Qlv`o38a7fTd%58C?$*jze&zM%F3Nm

    I(84JgTd3)&t;ucLK6V$v@^^A literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8metrobw.png/line.png b/plugins/55/indexmenu/images/icons8metrobw.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..98a66420aa217fc32da8ca9abb3a8df37ddbf49a GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvimeZ7|F>s0H3;Qlv`o38a7fTd%58C?$*jze&zM%F3Nm

    I(84JgTd3)&t;ucLK6V$v@^^A literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8metrobw.png/minus.png b/plugins/55/indexmenu/images/icons8metrobw.png/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..84206fe0ed131c48a9fb8bb51c4f3c03c3921a59 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|mSQK*5Dp-y;YjHK@;M7UB8wRq zSgk>r@y*P~`+$OyC9V-A!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NC6ei_jGX# zvFLqz*_!K6fJnuPlc~=wV+_}v+VXnUu~*uww{Gl`h?@QOvCM^M4StuG6f(cjc%b0@)!=(wcl1Nv fWlC{R*uOIQZU{U1VPl{^(5Vcbu6{1-oD!Mr@y*P~`+$OyC9V-A!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NC6ei_jGX# zvFLqz*_!K6fJnuPlc~=wV+_}v+VXnUu~*uww{Gl`h?@QOvCM^M4StuG6f(cjc%b0@)!=(wcl1Nv fWlC{R*uOIQZU{U1VPl{^(5Vcbu6{1-oD!Mr@y*P~`+$OyC9V-A!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NC6ei_jGX# zvFLqz*_!K6fJnuPlc~=wV+_}v+VXnUu~*uww{Gl`h?@QOvCM^M4StuG6f(cjc%b0@)!=(wcl1Nv fWlC{R*uOIQZU{U1VPl{^(5Vcbu6{1-oD!Mr@y*P~`+$OyC9V-A!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NC6cc@pN$v zvFLqzd9N3HgQH$Vq%bL z%Y%O`K`*(3d5k~L>z`@-hucl!F{^aW$3FF#?^Ew2b>1+z=CMm9JVHj^=dwv!WSQ3Q zBfhg={4;S36xpbA`u-%}St`tTN?q+1mA)5GnxtabBH+xian-7b>t7S+J^yJJ*qa!< zsN3-R|2{jQLZ9;*R@u=qkFK)LoBysY=H>fZf8+oF literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8metrobw.png/page.png b/plugins/55/indexmenu/images/icons8metrobw.png/page.png new file mode 100644 index 0000000000000000000000000000000000000000..87818eb24edcaa2f1fc798569731644bad510412 GIT binary patch literal 527 zcmV+q0`UEbP)#fBEdQq zijzxQ3wG!OxLB-j;Ug3T!O3W7(TIjNU0Rwp7waEx_}|_4yYD`ZgP+QprunGrx(ft< zho)&;A;cA+p{Vd=PY7|*ZnrflWn^Qw+hsPJ0o()Uz=sM5@X~6v_CZY5>-Dh12S5*t z!%fbzthhr+rBdPc47iB{9W70ZMAJwnlb7F3@>Ecx(cn9~-EPNtJZ3(hp99yiAkXvI z@AtpvN~IFEZIe!?$!4<@3I#fyPCC|+<2V$HMGl99(wSixEEWrN{dX!6kd%_iWPzTIw}<#K5Z27_`YlX>=iKe8_a+yM@XkL}NJfZHz(0H1PTqVErr RJ)Hmm002ovPDHLkV1k|#<|qIF literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8metrobw.png/plus.png b/plugins/55/indexmenu/images/icons8metrobw.png/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..2d08622fb0bc087734551888c675a7526d59f861 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|mSQK*5Dp-y;YjHK@;M7UB8wRq zSgk>r@y*P~`+$OyC9V-A!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NC6cc@pN$v zvFLqzd9N3HgQH$Vq%bL z%Y%O`K`*(3d5k~L>z`@-hucl!F{^aW$3FF#?^Ew2b>1+z=CMm9JVHj^=dwv!WSQ3Q zBfhg={4;S36xpbA`u-%}St`tTN?q+1mA)5GnxtabBH+xian-7b>t7S+J^yJJ*qa!< zsN3-R|2{jQLZ9;*R@u=qkFK)LoBysY=H>fZf8+oF literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8metrobw.png/plusbottom.png b/plugins/55/indexmenu/images/icons8metrobw.png/plusbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..2d08622fb0bc087734551888c675a7526d59f861 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|mSQK*5Dp-y;YjHK@;M7UB8wRq zSgk>r@y*P~`+$OyC9V-A!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NC6cc@pN$v zvFLqzd9N3HgQH$Vq%bL z%Y%O`K`*(3d5k~L>z`@-hucl!F{^aW$3FF#?^Ew2b>1+z=CMm9JVHj^=dwv!WSQ3Q zBfhg={4;S36xpbA`u-%}St`tTN?q+1mA)5GnxtabBH+xian-7b>t7S+J^yJJ*qa!< zsN3-R|2{jQLZ9;*R@u=qkFK)LoBysY=H>fZf8+oF literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8w10bw.png/base.png b/plugins/55/indexmenu/images/icons8w10bw.png/base.png new file mode 100644 index 0000000000000000000000000000000000000000..49738dc0043739f7dd58ad1a04f33340d10caff4 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=E?4L74G=`!`Xbpk#?_L`iUdT1k0gQ7S`0VrE{6US4X6f{C7i zo}rO5OZFR}qN|=Rjv*HQS1((09SRU=eJG-|gN1wJW&xLto35DNh~n7A<1J{t{Xx*3 zM(+YvA^BGQnm_Dm4nmx9t1BKTe>Xb$r0( z`#@K%tR>Pmv2P4a)lD8+DsK*yc0RK(ShrX1jic#K#myHvwAU=Wn04W$Ntpbqld|#s z%iN52zdE?!qRqV%i{*cxm!6ty+a?v7v)}#rwIau~#htN#n`3Uo$-h2uP3Vi`Kbu+i y7D+$hntSN`s?0gx{~mYy#k@*jQA3PcS6t@I&=!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvimeZ7|F>s0H3;Qlv`o38a7fTd%58C?$*jze&zM%F3Nm

    I(84JgTd3)&t;ucLK6V$v@^^A literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8w10bw.png/folder.png b/plugins/55/indexmenu/images/icons8w10bw.png/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..d81bda5d6b42ccdd405b3928f991f90c5f3bb48c GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|mSQK*5Dp-y;YjHK@|SqJIEGmC zzP)VA#~3Km_AuQgkyT1?>MYTS#&crJHnT2`J(1(G_EM(nA_o;AF#{=9p_zBi@C)^B z->v?nd35 z;T$u27VYwL}_1)npL{zaXLtLJ|^ hNyvJQ*SBfU*%EWaOee<9V*MYTS#&crJHnT2`J(1(G_EM(nA_o;AF#{=9p_zBi@C)^B z->v?nd35 z;T$u27VYwL}_1)npL{zaXLtLJ|^ hNyvJQ*SBfU*%EWaOee<9V*I!}>G@s1&-b|<{t3C5-G-eK`$usM`B<<5jab4k zT2PHMEMqT0vVqEiQN(XcGNi`tgamKkEMn Y-zGCTX^ar@$^ZZW07*qoM6N<$f=@7_*#H0l literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8w10bw.png/folderopen.png b/plugins/55/indexmenu/images/icons8w10bw.png/folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..d0f1533260ea1ef9ef65c7f3d7057af14771c75e GIT binary patch literal 341 zcmV-b0jmCqP)-5-LO9 z-@b*m1RI{d5~)W;=m;KVXk!ou*hH(Spds!=f?3>PC&t53d?Zh*(pnRH!b+5)sz>c4 z?({2^qLwE9GX8H!rx4Mm=62@NdCG?DI919+_aDj8-zfEF0a?d2bb@hr-Ok-a7 nz{{Ay2{wuwtB!GD&r0zL9JDOUE~Bt-00000NkvXXu0mjf68e)b literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8w10bw.png/info.txt b/plugins/55/indexmenu/images/icons8w10bw.png/info.txt new file mode 100644 index 0000000..cbc8fc3 --- /dev/null +++ b/plugins/55/indexmenu/images/icons8w10bw.png/info.txt @@ -0,0 +1,3 @@ +author=Uros +url=https://icons8.com +description=Uros \ No newline at end of file diff --git a/plugins/55/indexmenu/images/icons8w10bw.png/join.png b/plugins/55/indexmenu/images/icons8w10bw.png/join.png new file mode 100644 index 0000000000000000000000000000000000000000..d3ff5a2f5aa86a4931a3738777e282b4cc58fab7 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvfo=E{-7<{>eZ7|F>t>yK~_J!<0k1{W|TJ1(J9hRvym2u%i3GL1UN0 p9Aec!UR*43vDn|+CMbKDgQ1_}U|nhar8uA&44$rjF6*2UngH4|KT-ey literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8w10bw.png/joinbottom.png b/plugins/55/indexmenu/images/icons8w10bw.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..dd5b3f25ccb70b31c02b03b1be7a4c1ed4afd215 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvmYBE{-7<{>eZ7|F>t>yK~_J!<0k1{W|TJ1(J9hRvym2u%i3GL1UN0 t9Aec!GJY*l4ib90qMKtn!(oda2Cc1!%O)v)i31wL;OXk;vd$@?2>_(VK<@wm literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8w10bw.png/line.png b/plugins/55/indexmenu/images/icons8w10bw.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..63be9980261fa6cec8af9618651e22fd8dd89ab2 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvkxmE{-7<{>eZ7|F>t>yK~_J!<0k1{W|TJ1(J9hRvym2u%i3GL1QVm m7U8EE61{DLD^vN+zA{MsKl~+L>HTw{0Sun5elF{r5}E)8**;bP literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8w10bw.png/minus.png b/plugins/55/indexmenu/images/icons8w10bw.png/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..9f592078a5a413fc866b63515523ed1be823f6dc GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvj{RE{-7<{>eZ7|F>t>yK~_J!<0k1{W|TJ1(J9hRvym2a9}sb6DB8# z>C*%ExSi1c@ua=Ok%x!p|3yQMoP@Z;Zv2AlCr(Z^*yA>}#3k#WlGSB1Q`6pO|NiqZ YWQeYI@Z!k%1hj;~)78&qol`;+041_bD*ylh literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8w10bw.png/minusbottom.png b/plugins/55/indexmenu/images/icons8w10bw.png/minusbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..79b1a6ccc75b473f81797007af68fabd8627ae36 GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvhwmE{-7<{>eZ7|F>t>yK~_J!<0k1{W|TJ1(J9hRvym2a9}sb6DB8# z>C*%ExSi1c@ua=Ok%x!p|3yQMoP@Z;Zv2AlCr(Z^*yA>}#3k$BqWWd3M_a#Wx_J}| ZGAMAYF*~sF^G%>F44$rjF6*2UngEANPICYN literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8w10bw.png/nolines_minus.png b/plugins/55/indexmenu/images/icons8w10bw.png/nolines_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..68034d7b266aea9b09dd3cce1b6a1604f9f220b1 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvj00E{-7<{>cdvtSYSz&d!JHon~k-JGMOt_VAEfH+_PW(!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvmA3E{-7<{>cdvtSYSz&d!JHon~k-JGMOt_VAEfC*JKO(#(EEVS@Js z!@~``IK=WoxRs}PsGQ6W@pN}l-4^JY($2uJwk_huts9O_K;sxZUHx3vIVCg!0RA&P A<^TWy literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8w10bw.png/page.png b/plugins/55/indexmenu/images/icons8w10bw.png/page.png new file mode 100644 index 0000000000000000000000000000000000000000..9c8e782e993f230584af39b4adadc3c004612e41 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|mSQK*5Dp-y;YjHK^6z=NIEGmC zuDz`5@9Zej^056pi&T@MMH7R`TE&Q(|BkvAO^^5|ESR{X+a=L3VfCw50un0}RXQGd zG$^dd;QM~>omtPVxt5jXMuB<<)M^<5In8o0K6j56BYTwU_PZe?QQ=dL$} zUk>O_OSZ7?lqqQny|chj?o4{qI)irBIS)&u0;Ibae-^wJBpsVzU2)#x7!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvhYeE{-7<{#Pe^b1^7zxY+J8-yY)e?Qe* iTe=`G;K;-3xBh+oi=AZRo}L5R#^CAd=d#Wzp$Pyj_fs(d literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/icons8w10bw.png/plusbottom.png b/plugins/55/indexmenu/images/icons8w10bw.png/plusbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..23904578c43d4b1861e32c2a9a1ed9e746f0ba51 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvjvJE{-7<{>eZ7|F>t>yK~_J!<0k1{W|TJ1(J9hRvym2a9}sb6DB8# z>C*%ExSi1c@#Le_kpm2q+>YEjAjwk1X~nja=b2K@7lDsbmXU0SvqL=Hmps$|l^zuo h<1s&}MMRvD!DrbLy8~NKd<9y@;OXk;vd$@?2>{@0QE>nO literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/indexmenu_toolbar.png b/plugins/55/indexmenu/images/indexmenu_toolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..460e0f98164f89f81d43db8ebe7a8d300a409c1c GIT binary patch literal 726 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47#jk7LR^8||NsC0`u)c_v&=QC zEV8UDuD+(Ix2~wY;>d*wFWyf7|9|HH|8rhE?|<;1@Bja$7tghP|IqpW$K(%Bs$M>5 z|Np-8|Lc|)SL^Patvk52^!g5mM+XD`KdC>tK=Ic8oR{ayj?I!hHcRU8OzA^2WX>;A z`+vLi(PrnrR|{sQGtSCjnv=ycFNbYG9><~ruEmAiONw}w7V|DI%>%plhX`O&oDkS)8zm4mfydBzkmP!_3PJ9o;*2r z?AXDB2e)tEzHQsKWy_WUy$1B)U8!PM!jse+otDvXRhleu>w{(hr=P& zTV2;rBMofZo=3rrs;YWAJqHeofOC+HNSe*6&}=qN@aeaKWm$(L&gF8enM?+{FRwu9 zoD1NBqmclHW{%@Tw}6Wqg+f989t^&~Me(EkfChX#56VZfjYtFPF_lU|uh;XF8H4TO zj!YM$blUKV1mw(6M2qNP2;H{su`-!X|7n%u=>+~>3AvaIiltqd9#DvgJ&1=10t0D6 z$;|KlP3c1Y-2fh17umvCJQ4=!_2+B&{P5)SL<2$#ZY7EM2$|!%^Ti9`3q;4qtws{i zDI^jJKbdhUAOoMo-`t-B@esjXtJQ*jzYmI{z|3qKZ(vLsG2zn?;Y5OJwYqN@My1o~ zTxy!Ox4y9nOZhb^2wGcN&dWOz9mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/indextheme/folder.gif b/plugins/55/indexmenu/images/indextheme/folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..09aa936df98d7fd05dc264682d6dbb8499294080 GIT binary patch literal 596 zcmV-a0;~OrP)?#(~JQ!1j(is-Q*9@LA}i>OdRNg0$(TIOQ zJrt_d*d)znYD;3jGzYUYv)PZ?>^#10FuO(YEDrN9GdsM$=XnRVqvQV=<+okA>g)ye z?fs>gE~@2s$5+fZiG8HKyOgDKHnFGOJH(5PhKR9`{|bz<4jO-bUdbMO-gmCt63LIikWh){8I z-95N@2lf0ADFsow0bcBbmA{O@*#djjB_qIeQU%U;)Qc0amq#hZy+2^_51~(hX~T^G zQ%BTx&(7LoII9D&*(hXr9MVkD{tE2UImqH^h{7p|#cl+03G8Vy2ADK_-E`n>Wyn1Z zr;^$MHCQif^E_nX3}mSX_7bi6ZZu^MEE5MjGQ3a;*p=th!V^d~LGE`+H=_iFlMr8y zfqy!PKzsyy7zd0eU9IZye@w#L7=v5A6(uO0CD#)Wxuf6<2Vi~JPk?zas%gJLIemCj zSzj%C?#(~JQ!1j(is-Q*9@LA}i>OdRNg0$(TIOQ zJrt_d*d)znYD;3jGzYUYv)PZ?>^#10FuO(YEDrN9GdsM$=XnRVqvQV=<+okA>g)ye z?fs>gE~@2s$5+fZiG8HKyOgDKHnFGOJH(5PhKR9`{|bz<4jO-bUdbMO-gmCt63LIikWh){8I z-95N@2lf0ADFsow0bcBbmA{O@*#djjB_qIeQU%U;)Qc0amq#hZy+2^_51~(hX~T^G zQ%BTx&(7LoII9D&*(hXr9MVkD{tE2UImqH^h{7p|#cl+03G8Vy2ADK_-E`n>Wyn1Z zr;^$MHCQif^E_nX3}mSX_7bi6ZZu^MEE5MjGQ3a;*p=th!V^d~LGE`+H=_iFlMr8y zfqy!PKzsyy7zd0eU9IZye@w#L7=v5A6(uO0CD#)Wxuf6<2Vi~JPk?zas%gJLIemCj zSzj%Cx(K@^6+>g^d@v4;gkbWsEoXE%32*i1tcpTNXd5CcIl)ECgqz|2rE6EW}s7R?kl za1q`0GCkMruC6-2LANtwVlsgzsp4?{@7$`KBv!G66>Vie3h?3OmEEkjwdLG0PgLVi z`!N((f$A@n17Ldj#`};0I3@iHJ5M{#IZz|UIYRm4(!uV7eYIYIwQf&}_2J~}>pQ^n z6o8--^T(=hkBNQ_k{-_GWE;FMW7!p}f{NG3nHZ{D5<3d8&tLh%a4AqqnjMkr3m&fkMdECD3N5}Unig5wy40;>lo4j~k+e}v)` zR6)J8Mk*u=SpB`p6o)7j?S0T@9?bz#m@l>gc*zk__|*!FMcHwP!gwLJvS~9c0px8E zWx(K@^6+>g^d@v4;gkbWsEoXE%32*i1tcpTNXd5CcIl)ECgqz|2rE6EW}s7R?kl za1q`0GCkMruC6-2LANtwVlsgzsp4?{@7$`KBv!G66>Vie3h?3OmEEkjwdLG0PgLVi z`!N((f$A@n17Ldj#`};0I3@iHJ5M{#IZz|UIYRm4(!uV7eYIYIwQf&}_2J~}>pQ^n z6o8--^T(=hkBNQ_k{-_GWE;FMW7!p}f{NG3nHZ{D5<3d8&tLh%a4AqqnjMkr3m&fkMdECD3N5}Unig5wy40;>lo4j~k+e}v)` zR6)J8Mk*u=SpB`p6o)7j?S0T@9?bz#m@l>gc*zk__|*!FMcHwP!gwLJvS~9c0px8E zWCMz{H>f5(UXKFv(2OZ#?~W^}IP6mtO1K WbN|VbC1Wxz$#d?CCF`6R8LR=_f);TA literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/indextheme/joinbottom.gif b/plugins/55/indexmenu/images/indextheme/joinbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..505bfbeedff851fc7d8cdbc3905706be6dfae3b3 GIT binary patch literal 72 zcmZ?wbhEHb6k-r!_{abP(WPgA0LW1M$->CMz{H>f5(UXKFiB3)Z#?~W^}IP6mtO1K TbN|Vbb;o1cv(9C1j11NQqWTsY literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/indextheme/line.gif b/plugins/55/indexmenu/images/indextheme/line.gif new file mode 100644 index 0000000000000000000000000000000000000000..8a761f48fe649519f325e549e6779f55d5cc2148 GIT binary patch literal 72 zcmZ?wbhEHb6k-r!_{abP(WPgA0LW1M$->CMz{H>f5(UXKFiB3)Z#?~W^}IP6mtO1K TbN~FdHeACm<>#CXMh0sDr9T!Z literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/indextheme/minus.gif b/plugins/55/indexmenu/images/indextheme/minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..04f2585f218b88c0f3a4f5fa45eef7213cbfcf8f GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(?lN?apK zg7ec#$`gxH83GbB^GfvmTtgJfjP;DoRz82E3RJV))5S5w!aq6T0P`a6^M8)3`&aLr z_^OGSo$t^6t=ZTApPg;~KYnl3*Z;2FVt?lwCLjC1Z{NQB1p)1?+~+>r+*kWMd;;U| z@9+QbFMjT~!Lj(+nV<3T@%8goWH8^-V%+lebeE|1zx+EpKK?&5)A)aQXlSjrj!uZm zDTWD)PEJ<$E-5Rkn{SkQ>i?!qoAP(=+*#z3-KNO`)>)dCruK4{=QiHyZGw}87{Bd_ V?Wj4!co*no22WQ%mvv4FO#s)Vc2fWV literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/indextheme/minusbottom.gif b/plugins/55/indexmenu/images/indextheme/minusbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..b08b8d92d1b1680c284e603f35cf14c0d6800be3 GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(?lN?apK zg7ec#$`gxH83GbB^GfvmTtgJfjP;DoRz82E3RJVy)5S5w!aq6T0P`a6^M8)3`&aLr z_^OGSo$t^6t=ZTApPg;~KYnl3*Z;2FVt?lwCLjC1Z{NQB1p)1?+~+>r+*kWMd;;U| z@9+QbFMjT~!Lj(+nV<3T@%8goWH8^-V%+lebeE|1zx+EpKK?&5)A)aQXlSjrj!uZm zDTWD)PEJ<$E-5Rkn{SkQ>i?!qoAP(=+*#z3-KNO`)>)dCruK4{=eFFIYzBt;^CN;1 T#rYzE4rcIl^>bP0l+XkK&+T*9 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/indextheme/page.gif b/plugins/55/indexmenu/images/indextheme/page.gif new file mode 100644 index 0000000000000000000000000000000000000000..03ddd799fa0a3aec561c75d4221f195db65d6eb9 GIT binary patch literal 635 zcmV->0)+jEP);68^d)m`eN0o>(5%D`Q(1;j>g@G;xlf`0VBQ`PFY?6)!N&f?*K}$p; zB!U=NBn{eB8${1}&-2_L*HuZp@ZP1@clS@cHp)4iM1ewzw59vko7eMM{e9z|%NNdX z0V;`?KKSzTCvTm5bc{L^CIKLUxc2X{i{ISz$8Sgf{q)1nXTP{`{s?9mQ$4&hPiKC- zY8q7(Y1Xu5iCf33=O4Vy(+|zQ?rW#gkKB0f%}?+6{G*qT22|DQB-73`YzA{N4W^=s zq0kQYcbtFfz zLz)H<&|z(Y4k zzyYF5&-}+FM<4NF;DWxszHjyQ_2&x<3l+%7vI{GT&t&i|^as&BcuxpE{MvS`tw z|C={&{y%f(%>QL&W#2M0Gf6XK_3G9CckbNzf8)lD|EElu@*n7x*RYsDr?I*YWc&X8 z`~R<4vEqMcXXkgIS0qUC#;#qv{(~^kD_; ciNuCD0A{LSBQi#;G5`Po07*qoM6N<$g7} zzyYF5&-}+FM<4NF;DWxszHjyQ_2&x<3l+%7vI{GT&t&i|^as&BcuxpE{MvS`tw z|C={&{y%f(%>QL&W#2M0Gf6XK_3G9CckbNzf8)lD|EElu@*n7x*RYsDr?I*YWc&X8 z`~R<4vEqMcXXkgIS0qUC#;#qv{(~^kD_XhFIEIhT|xkkwFJ`d1Q!MIxkRb zo;f8tMCTgX=|z;GDML_ZT*g-vCFE-gWb{|`w)Z}JKflM1Bc5327vu*3z&gUoNRo#e z{@EAiNhsa>lHqe!>xfe6URqSXX`0W%xbrZx18+@?U0r-8 z)WTh01rK+&O}}sXX$HT)daB^Ze`D{pSJKDQ4m&tIwIukDn(VRqf^pUGaBG!gs0)k( zN?FOZTpGwra8{kymt9@Hx>;6rLvJuRib)H?WM?VaElBzW8dTRqAZhuiX3Xhw_15J4 zal1g>xJDs!*lmj378S89U`JLtEgxaC`MJjsXq^Ay*YKS7RomAT zG}mE-Sy^qH6Ojp_d-`G%vvH&6a5x;n2T8NaKj~`~;^LR${rdtoDqx#RP(;$&d5ONm zpSnJuQ^o}R(8$(wq`>y@#9UAk`M5Jx87{m{4n^%!;f2CH_HBt&a55Av6rfN@BaOc0 z`4*r4)+o{0aP$aUIR%2s0DghJpU{MEQfF>O?0)t& al>q>jdUkv4BUr9yIDmjBM!v*e$o>lv-z}2> literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde.png/empty.png b/plugins/55/indexmenu/images/kde.png/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..79ac36b999c358595412ffba7bef05f14bb350db GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeOS+@4BLle<643uN=boFyt=akR{0HM7pu>b%7 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde.png/folder.png b/plugins/55/indexmenu/images/kde.png/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..e2d8aa0aafdf420ac4611cf321770e59f84f7319 GIT binary patch literal 938 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeOS+@4BLlUGM>f5*-~wdwdb z=iKkTr|&lI{PE=dpWAmI9lr8-$N9&Ljy%=O`kCE+{PLaW7e4**o%&C==HK$YH;^%(dy7x@U=Koezf9`+#yZ6=qy$8=+y!2@5ssEC0 zZ)Ozx?p+z7zjX zy!*Rh*YyK0{w&`3(4w^4t=`k;eU(N4~6SKFT3@B^~H}Lzy3b*@N4_5lZT%D zPU!q}`P%(GH~%eIx%cM%mlM{1p0xYvflJ>v9=l(+_DNXo!HP|v*Wdg;?Z|uWgnM~Q z-)+D6JZ}1*$T|NG9>4JD!+*!P>rDs#_Zl)lUAC4V$aes0-*?*IS)3b)rB07h6t zNswPKkUNlo!GhI09hfduJY5_^DsCmMXlFJK4CAeP_N$6*Mnl(}AfKSEI?}=s9l;Hq znl@IOPPlh()CyqLNKu>lCNWEU?gaVesxh-Qv;)o`&^)?8eZI8*BvrK&DOk?!Y3y&J-74nQN9&RF_zkUN4cMP7celF{r5}E)jV??w7 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde.png/folderh.png b/plugins/55/indexmenu/images/kde.png/folderh.png new file mode 100644 index 0000000000000000000000000000000000000000..b86421d6a1b8e6838def0762865ddbe2579ed47e GIT binary patch literal 938 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeOS+@4BLl0HR(x>!=YRj-y!(9R)z6)`e}4M($#P-Sk#l$2 z&P;mw>h-a+Pfz{Wx%TQ;&y{Ve6-8?v&fN5Dw%LrDy{GR!dH?73-A9M7Jl=Nh@#Q;M&HFEF_jO(U{$ldknbQxx zp0)DO(uV1?M>Xm=XFa2Eq z=)?a9Pv5mH-kQIBLD8;d1sgZ-d%Jh;wdu2O%{cpG*}OF;cfFt2HgUuM|NnK*Zpa2k zSVKvWUoen6kbuF0)jJ)SE>t{S978H@C9P;@cDBqbO+5Fjifu;2tW8|(?X$U+r6W50 zr}UoH*FLU%=zix`7ha8&6%y-G5~iu2m6KSkobp^N>imJ_M;6W1eUPjbt2s$U^T^Rv z0p}OwoX<{q8mg$AdvY5f!>KX3R)gmdou zzc02qDk-n)=+!?Xvto&y&XQ$9N6w#q7XCQrYYv0L5@b zFyNnkygW(rFC=>a%Ru6g0PqGn0VxTJM}AlNnZ}YSy|tPn5suE8EtYG1ibACuc5@;NN{lY| zS0}HbO(rlf!>IYPRdy@CuXUOZDxSTT>L@h+k0skn?t3n;XWHqO4USgTcN3fM+uiPt z8Ahjgq}y0;S~mZ&*$j5qk5$)@i!<<5>vTFJ7=;VQW&QlGdlX(ZU-P_edTUJqo%=~Q zZz+1*Es;;LI|jxb{8!4lTEWCeGfQr2`Mgq}(e{+3rsW9hF143kW1GxdjpAjNVPQ!y$)240*{@U&s}?GiHHAHu zfsgaV@)fXYNMqO2Tc9U$=IoM9IH-|GhvgQ&bU+CW>S$l+vnvkzcgBd5t97`_L?Y#C zSNk0EDxi-lF36IV2{2~~OMiTQ>sZC{G-j*Q5yMlxS z@7ico`}x3=u@!Nh8}QJ+!;=^K!oMp|p12=d5*zd4Bb^{+5iThn47t#czf5Du6g?>?Bp)8&l80)Gx9r(nwReAdwG6RIQ4T|t za+?qlXDCOrbNYTq81-JIIpH-_Sdv#}B$#|LKPU}WjEWP7?`c?*dL3EGwM6-K!pSCZ zERc7Iswg}#P+?K|`I!?#Oq=ichTo)SCx->lO9^H_^DX$U=#Z??9ogx)#k{H%gF%fF z*rKA)7st(%(D@J)Rup_kPrBB1YQaFeOS+@4BLl`2CYTKTZ8;{)%o$*g2^GDl`pNDV0e){>($&ddQ z-}-m|+4tR7UVi=d?b59$CA~IeK;C!PmQwU)p{4!ILM?Pn>=7`px^gCHGEWzMC=qu4U!B+S#X1-hEr&y{Ts7 z+p6t<+7Etv@#W8f+kg8n{JU`L&At1NCM-QOb;Y?^s}9XteWK>bzc(K~r>*&yvEuiW zSKk~v|Gs$t^VzF+hmT)4e&+Jw^Y>@$xV>=8ncBVo9{>5bK{3>A-ZM;OXKRQgJJ3MLVq-Ga7OeQYYoqEOXh$7I5N> z@}a0Zm()VMgY?W!PdwOgaF$_AfKJQw!&i4}7;o`ku!;J3k_?sP#;#x7W7v#F*g zZq284uX=dCPUE~J_D+Xu*Cr;riB?*vkG}GJUHZ^TtW-zoOy;6BTCW5h)-&3MOgs># zeMTwdNM?Xs48LI4qp#)0{HIP_O=w|Z&`?RrS>jbutl+i4>EN7wp*B4q3Ygo)7f-4) fP|{#z;$bKe47oOU(vnxecw_K%^>bP0l+XkKI3P~_ literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde.png/info.txt b/plugins/55/indexmenu/images/kde.png/info.txt new file mode 100644 index 0000000..22ab4e5 --- /dev/null +++ b/plugins/55/indexmenu/images/kde.png/info.txt @@ -0,0 +1,3 @@ +author=Samuele Tognini +url=http://samuele.netsons.org/dokuwiki +description= diff --git a/plugins/55/indexmenu/images/kde.png/join.png b/plugins/55/indexmenu/images/kde.png/join.png new file mode 100644 index 0000000000000000000000000000000000000000..c180d7d3b98d09d21a8648b40dfee71535c2a132 GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh@3?y?HWJG`zTYyi9Yjo)uAoE;%{VyQJR1)MD z{GZ|Jb^|XUk1@&H-G%W#lkPnrhqJ&VvKUBvfU(=jY&#%B+|$J|gyVYhkMI8(4%aIj h^IV^GK%ajh>SyC#e7c literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde.png/joinbottom.png b/plugins/55/indexmenu/images/kde.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..f6310e01a6b239ea64f03899d458657239dac62b GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh@3?y?HWJG`zTYyi9Yjo)uAoE;%{VyQJR1)MD z{GZ|Jb^|XUk1@&H-G%W#lkPnrhqJ&VvKUBvfU(=jY&#%B+|$J|gyVYhkMI8(4%aIj g^IV_BaGAw`;Xc2?Vbz=rai9_gPgg&ebxsLQ0Q5#Ay#N3J literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde.png/line.png b/plugins/55/indexmenu/images/kde.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..b7ea5b2b4400038ece1c5f2e19a4c04477a0c70e GIT binary patch literal 141 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 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde.png/nolines_plus.png b/plugins/55/indexmenu/images/kde.png/nolines_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..55199956dd34f514af46e9a2a036fce1c3bcca6d GIT binary patch literal 3627 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 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde.png/page.png b/plugins/55/indexmenu/images/kde.png/page.png new file mode 100644 index 0000000000000000000000000000000000000000..873626699ad9f0fe554ac4ac3e7dc1a945441f69 GIT binary patch literal 900 zcmc(c>rYYv7{*VUU39M2G^-EI%r&hXW-a^BRyZjsb>6c322LdH;xa93E$N~&%vLE| zbaiH?ref+!^O8EIqKF9CF+{l>4(L%iTn`AILsWl6&-VVFJ@2P?@AEh*@wmV5HeUb$ z{HbxVDIVYWXV!Up7#6W1)nluf~<>EU)7Q7a*n$wcx+k2D(CXf(cQ=tmHw{riwWFjDreiy#PzL?RZ82L=W}5EO|- zIPP9q!G%Jh8C{y0(I^xuixrd0CyT+UsVV6%9f7adThFKwhs&a{ zT1=N;K`w{MsG4N3yIl)!6+fD26-w62ZwRtzwpfNi#OZWm{gw;D?Yec$VipR$lW5YJ9h1b^Qvca6{HupHmEsQ2Wl0(zGf_A!QKNY|3 zz-%_WgM>C;GMP+vyWMOus-gMs1Hy@k2^{7uFY=Y0?_0V-rBa>#WEz5?!NEbTR_p$& z*^i&n*NsmYh~7&!8o23bJnwocwvSvQqdp(L|>;(dcSF zzsN5QlE-;@QFeN1mP)VJ9o%b{l?4X0@5y4+rSm?2u8@!lO3T9I4m{=g_{D{9DXxLJ z^>CZup-)XsK!oH*XXRDAxXQ~{psruDm=h8cvoXS#%{5%RFtU8*`IV@nt1gC9Qg>}w zi`^|cxa0YYb0z1p{hL}#gPB1^`_w0PWLL3R$LNt2d%DV7*tNSp0C6nt&Yh#o?Pra*Z2x;7X{%lAx5TMew#D`^+%V=qvDxgMY9jA>nyk53jr44`rRgF9* l4Q{&cb#}YX>Ab@NyaBJ;BRR=ED97^&fJ#Y>ZH}Qm_zm literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde.png/plus.png b/plugins/55/indexmenu/images/kde.png/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..b35e28e32f941f7ce9a404295e552201169ec552 GIT binary patch literal 3641 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 LNkvXXu0mjfx4ZM( literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde.png/plusbottom.png b/plugins/55/indexmenu/images/kde.png/plusbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..2c0c8ab7e31db7de1f53bbcaee64165b4798600a GIT binary patch literal 3641 zcmV-94#x3`P)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde00d`2O+f$vv5tKEQIh}w03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(` z>RI+y?e7jKeZ#YO-C0{~D=R7IK0|1)O){QUg@000C81O){J1_lNP2L}iU2nh)Z z3JMAf3kwVk3=Itp4h{|v4-XI!5D^g(5)u*<6B85^6crT}78Vv47Z(^97#SHE8X6iK z8yg%P9334U9v&VaA0HqfAR!?kA|fIqBO@dvBqb#!CMG5)CnqQ@~D=RE4 zEG;c9E-o%FFE21KFflPPGBPqVGcz_~R#sM5S65hASXo(FT3T9LTU%UQTwPsVUS3{bUteHg zU}0flVq#)rV`F4wWMyS#W@ct*XJ=?=XlZF_YHDh0Yin$5Y;A3AZfQ za&mHWb8~cbbai!gc6N4mcXxPrczJnwdU|?$dwYC*e0_a=etv#`e}900fPsO5f`WpB zgM);GgoTBLhK7cRhlhxWh>3}bii(Phi;IkmjE#+rj*gCxkB^X$kdcv*l9G~>larK` zl$Dj0mX?;6mzS8Bn3Cf>sHv%`s;a81tE;T6tgWrBuCA`HudlGMu(7eRva+(Xv$M3cw6(Rhwzjsn zx3{>sxVgExy1Kf%ySu!+yuH1>zP`S{zrVo1z`?=6!otGC!^6bH#KpzM#>U3S$H&OX z$jQmc%F4>i%gfBn%+1Zs&d$!y&(F}%(9zM+($dn?)6>+{)YaA1*4Eb7*VowC*xA|H z+S=ON+uPjS+}+*X-rnBd-{0Wi;Njun;^N}tgww2 z>+9_7?CtIC?(XjI@9*&N@bU5S^78WY^Yird^!4@i_V)Jo_xJet`1$$y`uh6&`}_R- z{Qdp?{{H^||Nk5%8dCrO00eYWPE-H?{{TQLsq_E<06IxTK~#9!tdB_w03Zwlv;6uQ=HhibJWPBuSuYnlHg@%w3lsf2c74_;UjS77wXV00000 LNkvXXu0mjfOmXkU literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde/base.gif b/plugins/55/indexmenu/images/kde/base.gif new file mode 100644 index 0000000000000000000000000000000000000000..6ed84eacc1204c66245ceddf930dca90826e606b GIT binary patch literal 1092 zcmZ?wbhEHb6k-r!_+HP@7izR6Mrm?>{E|H1HB~VSDpPK{GTjXlxEmpPEKB2DvDV!b z?c2H5*Gn~@`!l`_VE7To^dVm0cP8Ke0oT|?=Q@<_B|G2pH+seu<{f#?jckNm{ zZP%_{N9Q*mUN-6WqV7xU=U(18>)6I6NA~T$zG=zT9n0?TUUPZ(<_Ghe9xrNtySDw= z=GotNO?|p+)tmh*FCO0eX(Q!Tkr%&K`bo<;>Sxr(Qn1^Zm)qhYue+|z|g>;19Ac=PcU%&V_@Wz;aG7_NUDTG zOT{DIlbc21j7~@fTYI+{J5Pp!aiGFXN$sRHCo&ouMeMnL2W)I`JjyMi!mCqps9j+u zkAO{B-p6oW`6RM=B?) zxim0HAF6q{=;`T@#*7PF5}DgvnphO~q?E{MTf?Ymr<*fBIG%ib%|=b ixK;dku(NxXeSf03jBRK zWYqr3x?`lmF-mhPZvNzh-4kiZ$+TS;9Ewd+dcHvXVy69{h^{{x^1`FI{Ij2N%)tNLEt{>!< zwicB4;7Pqj?*_>=G)f~qkIcz!5R&Rx5t{%k1V6!7foxFTQA&iZ0dfkV7OrCL>gHJ*lzC_A^43eNy4}n3kwR>1D zqI8w{!5A1$(bEqM3HNwNHeH>legMM|Jf#e;yBdxSV-Z*EW!ZW#e1yWTT@10qMt%%1 zce}xaF~;scU1dpxGVD#^y;S%Z>$RcD8Ksnn$su^(=27BnshkKC%ey$MaEyO}`z30? z7yr78hE@qnh4;glLAKe?iC)1MqVOcobXrAF*pi&#dYKZ%NRPW;jlA4@nL mVb_^D&o?zWiz}n?=Tj)}9i5ZKS#wp@wl+~2(*~Ai(D}dCrI{fB literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde/folderh.gif b/plugins/55/indexmenu/images/kde/folderh.gif new file mode 100644 index 0000000000000000000000000000000000000000..be4dd3cac89cdcf65a9ef41dc5d04d07f3731ba1 GIT binary patch literal 1089 zcmeH`X)oJx0DymHacqf*%rbG5IkGK?NeN>~g`i6%mMu#rv*^ge-ncd~%uK9SHtncY zl`2YgDOxR4)~3~>rfsyPMoX)8+t9k__%A-i-t74VPoCt7L&k=Mqn&^gICu+u^K-1r zbKO1_zzBt*bwzO>UWGT8qN*y949o*2Cb^50%&o{KHN7Cvim>b)3ayaDLx07k_E$dV zHoOs3WC`$@bZX8(dls9M$5<txr9lU@oUwbRxP1r zoK2mh()2X$bT@N>)U!m8o%8P)ZT>GWU3Jv0gJ`N_)&kTf8l4!H&Po(IwMIW8 zUlLE66dHq2b)Zxk)w&h!oN-3KHo7Giug{Cka^-<~WMNls+LP}Oz^7CZu~r(w(Afx!DGyFG^9zGmR=L9KO45BBLY;uqqz} ljFmBuN7;oG5k5-iv#3qpUWwH7IZCsK^W%bP+bfPB;xEU0lk@-p literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde/folderhopen.gif b/plugins/55/indexmenu/images/kde/folderhopen.gif new file mode 100644 index 0000000000000000000000000000000000000000..c062b6eff20807afa96c60ec56e2310e18137e49 GIT binary patch literal 1088 zcmeH`=}(ez0DylKZfG9paOOhA(sj(4wPu>lX;vO{YDKHH)o@zrsxP%RbyJyIxbVVT zAO@m^NRAj26>}NLVXva#Z7Rm=jmbbon0z}bI@1UE0CO>jDkyO& zf9qSF=U-nCT9F??D~fC>jH!5!Z>UW9RD$m)eZr(X=998$&BbKF^RC)l5jnrN{I$3x zuT@Y$9WIhq6-t@J>OOLlsD{x;>hEvmeyd|k8aSg=?hk6GqPb`O9amc+vVQDZsS|12 zyOb;;#1%++qG4X&WOu)^dtkg=QD3F0r>N)+>c*xiD)kqQq~Nq^TG;aq%!Q_&MOM4E zg||W#uF?1#^qwtxpMf!8V)A6;!lB8pvU#yw{aFqV$aUfo?SN`mJh35$twXzv!9AwR z*r_~ZjXKz>ebJbcJ#Obt+Xb4#-Wi){&L)<~$K;SkqFPdpO#IX=C`MqJS|^#^f~IxK zg>Cg5JT|9aT>3q8s8Fn$7j)}OtLFIw2Mn*lYn!W^f41~H@aF#Vjzzz1Sl_W|t*a|0 z+w!49XLGFBoqB_5eb=^Sbr?;1d;9xlv)O2I7#z-Bi~Yc2u{xc0yWQz@LJ$Q0^Y01- zTaX94p;pho~asY%YHp!6s0gXKXf-Dj)KJrmq4j~><(d2m+Y4p#MsRF`dpH1Z4 z$vj4KMO{9KPRJ%xg5qB4$Gl5#m7zS)*ct7Rf_m+#^h&1sxcmgo%^eGfrxn!L0=V8) zQkGch=ZnEa#DVW_xO8^fmlTOh8PWxbG+fB`!gt(j)G~v0dLnpnALN>*M(P5ha~={h zZ~)=vhtHceM!MIAUMD0a5eS1Qj3*unzLA(tKbKBl=U8#l8XwO{Izrk`4vb1UPNc{M|)PGKJ+9NFu6%_nWpf#>JqtK%Oid gO-5gOMa<);72z0|kW|jer6R3A=0VrA7YfAu1!{AZxc~qF literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde/folderopen.gif b/plugins/55/indexmenu/images/kde/folderopen.gif new file mode 100644 index 0000000000000000000000000000000000000000..63f11aaff586e53ae08ec46b7f5df2d241ed4a98 GIT binary patch literal 1091 zcmeH`>n~ez06?#`VYM}*krE-(%$CMxVHRQbK{JoqK5Q&RvPZmQA7sRA7}Lh1HdeNI zjm_eb@iqhxR-rrsP75lRD7o42rghzx01jZ8}0%R(HT%I6q ziQv*>T~Lyk{LFkc3kl3Qpr%VGuhaoWXhB&Q%h}CkXkD*s2Is_ zn120bF|B6zP3vkxlOd%OJZI}tS(dbJB#*P7*@e6qu;%tz^M^nlAJCcIWwm{kjs49X zLsiXVm2IMG)=YiJSpCn*I_}E54qXWs{>t9`)Td};3!8dG9bNp+zNyash2BA7@353H zYAhbNyyuz91W1Jhd>GyPJY)T~0D8t3ID(adiMb!sJMDZ$lMHTI25kAs@Pu+etQelv z56E^n8{qdA%H25mqq1i)eF$&r ztm`L0X$6}Is?qAydh4DA9P11QqtRqC9m7BiP(6&8Vc3GA2!fy}DiVpH|NOfGBp7Q0 zK{V*vslw?K&{+W4;M}MVc>K95W~eKX;W6qT8=LySmY&p}2-yDSTRdR1$-6-kInU>=PH};GeIb^z|zt zGl{N5CvtEc4e#-wEh>3KDPY*)xb|AFr2De=#2Wo1hfXF#W$?R4B3!=VVwP(WOao_%*KHD=G!~c^-&BlJg$^Xx2>%4&Q*lqxLC5Sx(LnkgB~?>dSGu6g-~rP#b`4wJmiaXC0HWBS|fW hm-LttS_Z~5)TqN8NwOVVN^;B?sfg9=UJwig{RQ4(q!R!D literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde/info.txt b/plugins/55/indexmenu/images/kde/info.txt new file mode 100644 index 0000000..b830f26 --- /dev/null +++ b/plugins/55/indexmenu/images/kde/info.txt @@ -0,0 +1,2 @@ +author=Anonymous +description=Same kde.png theme, but in gif format. diff --git a/plugins/55/indexmenu/images/kde/join.gif b/plugins/55/indexmenu/images/kde/join.gif new file mode 100644 index 0000000000000000000000000000000000000000..305d48424b1084f3189676ccb793c24edb94d3ee GIT binary patch literal 75 zcmZ?wbhEHb6k-r!_{abP(WPgA0LW1M$->CMz{H>f5(UXKFv(2OZ#?~W^}IP6mtO1K WbN|VbC1Wxz$#d?CCF`6R8LR=_f);TA literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde/joinbottom.gif b/plugins/55/indexmenu/images/kde/joinbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..505bfbeedff851fc7d8cdbc3905706be6dfae3b3 GIT binary patch literal 72 zcmZ?wbhEHb6k-r!_{abP(WPgA0LW1M$->CMz{H>f5(UXKFiB3)Z#?~W^}IP6mtO1K TbN|Vbb;o1cv(9C1j11NQqWTsY literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde/line.gif b/plugins/55/indexmenu/images/kde/line.gif new file mode 100644 index 0000000000000000000000000000000000000000..8a761f48fe649519f325e549e6779f55d5cc2148 GIT binary patch literal 72 zcmZ?wbhEHb6k-r!_{abP(WPgA0LW1M$->CMz{H>f5(UXKFiB3)Z#?~W^}IP6mtO1K TbN~FdHeACm<>#CXMh0sDr9T!Z literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde/minus.gif b/plugins/55/indexmenu/images/kde/minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..73449b7ab0d2652167ecee078279cae808794cd8 GIT binary patch literal 108 zcmZ?wbhEHb6k-r!_{0DL#%cd&p85ah&)+j=&VU6#gyK&YMg|5J1|1Lwq?Uo%&|{a# zAA?iRm+e)|wr&2gAiy>5M{hvpqA3P@*55d@SZY%b@1yRzve{=-H69A~8$U5%WUvMR DWceoj literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde/minusbottom.gif b/plugins/55/indexmenu/images/kde/minusbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..c468eb202cb0ee8c29af7f39496612bd89005780 GIT binary patch literal 106 zcmZ?wbhEHb6k-r!_{0DL#%cd&p85ah&)+j=&VU6#gyK&YMg|5J1|1Lwq?UnM-(#1^ zAA?iRm+e)|wr&2gAiy>5M{hvpqA3P@*55d@SZY%b@1yRzve{=-J#?h{kFhXV0{{}A BCGh|N literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde/nolines_minus.gif b/plugins/55/indexmenu/images/kde/nolines_minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..c5706d1ae33c4884ca09b0f700818d222e5d8ecf GIT binary patch literal 98 zcmZ?wbhEHb6k-r!_{0DL#%cd&p85ah&)+j=&VU6#gyK&YMg|5J1|1Lwq?UnM-DB6C se+H){oA++-I_rAj?l(tAjV$L`RS6b$OMhBzj82qT`o8A9J12uR0PcAq{r~^~ literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde/nolines_plus.gif b/plugins/55/indexmenu/images/kde/nolines_plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..5019b30473e4d274329ded3c9e932fb75882dd20 GIT binary patch literal 102 zcmZ?wbhEHb6k-r!_{0DL#%cd&p85ah&)+j=&VU6#gyK&YMg|5J1|1Lwq?UnM+hfb#ipzKZX`jp)Fc`O${r z%e4F6r~c-K{pFSW>z(-LuK41<{O`HK!otMF#Ky+P$;ryf%FWEo%+Aiv(9h4@&B)Nu z(9zM+($dn@)YRA4*U;11*Volq!FDR>@9O93>gww1?Ck99?d|UF z?(XmJ@8RnB=I;CN^#1hg+oJNe+5od5s; literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde/plus.gif b/plugins/55/indexmenu/images/kde/plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..4c167c12b5dc9fd66923d366559b807c04e33a73 GIT binary patch literal 111 zcmZ?wbhEHb6k-r!_{0DL#%cd&p85ah&)+j=&VU6#gyK&YMg|5J1|1Lwq?Uo%#ABDp zAA?iRm+e)|wr&2gAi(vWd4qBY*YoK?ZxrVH-POs~E?e-=X!QmD?KflkCMgzGCd&yk GSOWmE%_hPC literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kde/plusbottom.gif b/plugins/55/indexmenu/images/kde/plusbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..5b998f844f12879a9b92a76281337943d26b0f19 GIT binary patch literal 110 zcmZ?wbhEHb6k-r!_{0DL#%cd&p85ah&)+j=&VU6#gyK&YMg|5J1|1Lwq?Uo%*khN- zAA?iRm+e)|wr&2gAi(vWd4qBY*YoK?ZxrVH-POs~E?e-=X!QmD?KflkPAn-}>BGQa F4FHj8Ct?5q literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kgs/base.gif b/plugins/55/indexmenu/images/kgs/base.gif new file mode 100644 index 0000000000000000000000000000000000000000..a24d5a88d5605f9ac22cd5674d36b66237926d18 GIT binary patch literal 1031 zcmZ?wbhEHb6krfw_|CxK;o;%w>FML+V7`SO)3SFT#MYW3>XYu2n;yLRom zb?Y{4*syu?<}F*cY}>YN`}XZSckbN1d-vYGdmC3=ZCQP_b@kQm4L2ulxixXi?TK4& zPuhBW%Jw_ccHEh{>+YOgcW3Xpw_yK+ML=}m;mRYARvmr3=J?~a$Dgb}@nplvCmT;b z-E!vH*0ayHoqe|b{PP_k^kUzom-{XQ(W`w|UhTi~>fpfxM~)mhdi3b=0|3u&2HTxgta zmUC^5;H8F#3T!zIKOSsc?A{|`;IuD5p`dY=oORKI4T+17Pf&8pQW2Q(;6yvOMPbkl zPsOJ5yc``N7L(O@XDv>fq^7F;&_RH!V3tYYqbHrAs{@bt7<^!EmeEL9{p4aXtIlKt zQLYyo4BWXyEgD!jxxOqrImu9zmYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kgs/folder.gif b/plugins/55/indexmenu/images/kgs/folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..20412f7c1ba83b82dc3421b211db2f2e93f08bf2 GIT binary patch literal 952 zcmZ?wbhEHb6krfwXlGzB^h$R6?=&-=aaIP?oGg}kIcy8^I2IRjFD>R>Udq3sOkj1T z@R}--bv0re>LfNdN^fnF-QFU)=hNov3pP6ZL zdwbCB?S=oZs*|No!)|Nor- z|92fYaNzXm(`U|{xqSKZwQJXoU3-1w;m7CizrX(c9|#ym!DtB3CIl3JvM@6+Ff!^t&H}B}h=^vxoT%ba6d=Uh9s^wzPJ$M)`ha(QRx%>R>T{hvAW|C~Ah zckTLr;J|^?r%#_bbLR5p%h#@5dwu)Z#}_xgzkmM!`|JPz|1*q&(GZ|b2q^w!VPs%n zWY7T_56Tk^98(#XIb=LGEI8QAZk}^t0wc3iqjZi(%E3iUhj?WzGOpZ6Y--^Ukh2h2 z;kfAJWHren91|Rmc1<@(UghyY=>V&!Me(a6l?PlIxV3^fWW7RK8Rv_JEQmO@Wn~wW zo#qM#$E~YEMOkY60zNKWeSN(a+m9&=4mIE0oDs^gLQ-K#GaI*vf}B}h=^vxoT%ba6d=Uh9s^wzPJ$M)`ha(QRx%>R>T{hvAW|C~Ah zckTLr;J|^?r%#_bbLR5p%h#@5dwu)Z#}_xgzkmM!`|JPz|1*q&(GZ|b2q^w!VPs%n zWY7T_56Tk^98(#XIb=LGEI8QAZk}^t0wc3iqjZi(%E3iUhj?WzGOpZ6Y--^Ukh2h2 z;kfAJWHren91|Rmc1<@(UghyY=>V&!Me(a6l?PlIxV3^fWW7RK8Rv_JEQmO@Wn~wW zo#qM#$E~YEMOkY60zNKWeSN(a+m9&=4mIE0oDs^gLQ-K#GaI*vfP24$!>3v-_@?Pw@dZdEXiZDqz?6KotSEHa+=}k8OCR3nw(sqcz%)E z^&Jkk_UAm>?EL6pz~8F{|8JLmcvAKMN&S?id*>|OyM6oiIctwC-Fj{1-dlT*9ou>8 z$^Yvu|6jNKf8Y82L+Ae=lmGvp`Tzf%|NoaBIdbIa(W7V2p1pYS;<0P5Z#?|?{QdXW zpa1{*{pbJx{|uvGGz2IP0mYvz%nS^S3_2i_KzV|JV1OfBquQXEGvI4}0>6q3BdQLvD`XSzZ1sfd8&rn9pxa_cf0 z8;-R|sQDgyVbIvhINu@p(3Fo!OdU)nOn*uow`yILl(G@%_!WGtV|{}AnFkvZ9YR(b rI<1IZ9mc}SXv*Rj;4nR}iJ6T{KqBGLF$ZZACT_Vm-ya@qV6X-NkKMK> literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kgs/info.txt b/plugins/55/indexmenu/images/kgs/info.txt new file mode 100644 index 0000000..1b1d8cd --- /dev/null +++ b/plugins/55/indexmenu/images/kgs/info.txt @@ -0,0 +1,2 @@ +author=Samuele Tognini +url=http://samuele.netsons.org/dokuwiki diff --git a/plugins/55/indexmenu/images/kgs/join.gif b/plugins/55/indexmenu/images/kgs/join.gif new file mode 100644 index 0000000000000000000000000000000000000000..b8f42083895bb98276f01a5d0e33debddb3ccf1b GIT binary patch literal 850 zcmZ?wbhEHb6krfy_|CxK^xx^&v19*7!DtAK$PiHc$->A01UeuBlqVQC^cfgAWIQ%3 wIM~R@rxjCSpm?~QTh?igM}U%R7pF1PhKh>{$NPBfn?f{-mK<+pWMr@g0DWQ)HUIzs literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kgs/joinbottom.gif b/plugins/55/indexmenu/images/kgs/joinbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..f24ddee799ccebea4dfe60fd65a5703a6a59d44f GIT binary patch literal 844 zcmZ?wbhEHb6krfy_|CxK^xx^&v19*7!DtAK$PiHc$->A01UeuBlqVQCG#MBA01UeuBlqVQCv>6yVWIQ%3 sIM~R@rxjCSpm?~QTh?igM}U%RmzciOnH3WikN0ueH<|n}RA8_M07ViGB>(^b literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kgs/minus.gif b/plugins/55/indexmenu/images/kgs/minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..97dcc7110f13c3cfb72a66a9891e8ab3ccef4a98 GIT binary patch literal 908 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?Z#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$``4~=2xoOmJxRJ?YUCe?7 s4c<*mc6tvw4?K5dZ#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$``4~=2xoOmJxRJ?YUCe?7 p4c<*mc6tvw4?K5dl1^^H;N?iZ| literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kgs/nolines_minus.gif b/plugins/55/indexmenu/images/kgs/nolines_minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..928779e92361aaebfe9446b236d95cb64256e443 GIT binary patch literal 898 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?Z#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$lae%R5x_+pfh=9;jCRWxkA&~=x h2Yp#A(~SZe4mdO}wqloSIC&-M@bZAgN<174)&TX)MQs28 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kgs/nolines_plus.gif b/plugins/55/indexmenu/images/kgs/nolines_plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..9f7f69880f48db8d86785639055fcc198764617b GIT binary patch literal 900 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 ZDNw=VZ5T+*Fd$Jj9oZceuo(cCzX758HJtze literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kgs/plus.gif b/plugins/55/indexmenu/images/kgs/plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..698de4793c59b2729feaeb0c49c05498d65c3b00 GIT binary patch literal 910 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?uiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$y4*XmR1y>vzmpih{E$}o|KC;?;W0q*gYXG$^NPhqT literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/kgs/plusbottom.gif b/plugins/55/indexmenu/images/kgs/plusbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..5943a01bcd390798668a2722b673f6000938a52e GIT binary patch literal 907 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?uiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$y4*XmR1y>vzmpih{E$}o|KC(Juvl9;ogEauy5=OfK literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/larrow.gif b/plugins/55/indexmenu/images/larrow.gif new file mode 100644 index 0000000000000000000000000000000000000000..a0f09e9d19d91ab42e619ad16f747841c2dfaea7 GIT binary patch literal 1829 zcmc(e`9ISS1HfmD54NW%*M`ST=Gd^!93gFUZANmRxvxpDHatQSwlvHW@{&Y^itJm% zJdP9_Ip>O^TctxNmhRH?eE*8){SUlu#8v5AR^si~=%nHd&~#o=%k78aJ4 zmUuj#Kp+r_L@O&R5{YDOZEa&?V{2<`XJ@x>-#&YLdj|&xM@Pr~`}aFJIUP7~fJ`P+ zC=@D{>g??7;^N}!>gwj^=I-uJqtWPex`&4cgTe6h^z`!bI(YD)x3{;CkB^_9pTEC< zKtMoXU|>*CP;hW?NJvO%XlPhiSa^8&;lqa`A|fIqBcr0CqNAf@Vq#)rW8>oD;^X5J z5)u*<6PZkAa&q#KBS%tFQjQ)ydhFOS7K_DZvr|)3)6&w?)6+9DGL9cVo|&1Mm6es9 zoqgiOiJY9AlP6E+=H{L{bt*3}FF!xOprC-u({ThwY3QZf*Ut(+`M^HC=|B0w|8`Obar-% zM53;)uI}#co}QlG-rl~xzFW6$_4oJRzJ2@7ojU^q1A~KuVzF2vkqiwD4G$0By?b|L zWMp)7bZl&Fe0+RjVq$V~QYw{BO-)TtPtVNE%+Aiv&CSiv&o3-2Jb3V6adB~JY3bp^ zhmRgTdi?nDlP6D}K7IP^*|X=*pD!;jzj*QD<;$0^UcFjbS$X~X^_w?u-oAbN?%li9 z)z$a!->tcbSU{A#;u9Afp$A$urD;Mmx!ET-fwZ`W4w@E$@l$phv~3{kt9Qg zlTPcr;dJ6`#RJa-SgbeG3~}({e{dnh`0+-gw5pVl&cp?~jDC!ty0LGqo4H>?)dD6w zTEkwDaTF=EN_@jZ#0eG=q+?Q14JM<8kxT(k=;QT*$nnc;z4QJEp`ewm(4K}+LBc)Tca6g)0ugCUscQ&9pq8xk_~ z%zS%2cFxC*(3MI)By*X4Y_tp1uf;E@NO?-TR@>OIx`!ly zsj6uO8$b_NP1#OawVP~3D$$>SRd=Jy;037ZO#kJ~(%CX9ps!HCN0X93RJHa)vC&kc z?`SuudEOuxdpk!>URgt^rsiy7&+*u0-Y?A8lvH+bRB`-4y0dX0VTy3FA&;tRW*5W% zr!jfe1y8$Cd5CliCl&)1cmsw7oh2+#&2jOAF=W;p6(!9a7Ds2GOhSPeX_ps~u>Y!@ zCDhPRVu(%8Cf%hh4+t~yRYn5ZcnOk=w+f{8gv-vrz%I+fdL_fpUJ z?^cgiGRUX}ks*wAib{nt?A65H{Qi77Frh~c(DznAS?Cl3Sbbu5dg_?IBLI?UX8w{J zRRmIIxjG%SYfyX}9?e6*X)I@C_IA5Mo0&fw$W*4sLd~myiZiMZmT(x6Eue_yG?xb< zc$rTp-=f(>Hma^b78dNu*!1CmRJfb+rm_He82&GRB2QNnAm^(_t+P+>fT2ln1&l1j zd5R#)so?25fP^53m6Yuc>^cN@HehG1cv`mFfq97iC^=X4TzD!(jY`f3qEqQzeGt=GGRrOVm`u^u%U;tF}^=AX>Yl9S&QUIG)NqN`*Hu&@pG)GcG zOhAkgA+Yh?vmZl(3LP$M2U`-Y^<~u#^>^0T7sLs~CtgO?@clPN`LC0*NWAmKktB_e zdfJCdgQOQKGDOo}+n^R-EGkJzZr?GBp7 zxx6@swT4n7GHyDqP2q1nhIlVB1Tf3tU^@)>_vV(4YuKW|)zx#9vkI%#68#wP`euW{ zjhR^xYmfd=#n!sf?UXJaUDE`4`|b_}84Z*=pO~3WK|c11{IgY(+YH z<-OnA;F`U&XF`|Xn3?F&bOTBS`OY6vUJ;&zlhF&^+@Zodx z+dcgDkoT<4YV25`bu~lpLeA<$Myl)wJNW1Y?^Z|rtxivR!s M07*qoM6N<$g0Tm&-T(jq literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/leopard.png/base_1.png b/plugins/55/indexmenu/images/leopard.png/base_1.png new file mode 100644 index 0000000000000000000000000000000000000000..8356e71da9564ed0220fb3f24b5e9202ece539e8 GIT binary patch literal 3400 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[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 NR5PHOfi5`%{{@{@f~Wuh literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/leopard.png/empty.png b/plugins/55/indexmenu/images/leopard.png/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..79ac36b999c358595412ffba7bef05f14bb350db GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeOS+@4BLle<643uN=boFyt=akR{0HM7pu>b%7 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/leopard.png/folder.png b/plugins/55/indexmenu/images/leopard.png/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..59e6c1b2fa3a8c430e1ff7e24917653a9fbb0e14 GIT binary patch literal 3295 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 Rbu$0}002ovPDHLkV1nFuPUHXp literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/leopard.png/folderhopen.png b/plugins/55/indexmenu/images/leopard.png/folderhopen.png new file mode 100644 index 0000000000000000000000000000000000000000..59e6c1b2fa3a8c430e1ff7e24917653a9fbb0e14 GIT binary patch literal 3295 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 +url= +description= diff --git a/plugins/55/indexmenu/images/leopard.png/join.png b/plugins/55/indexmenu/images/leopard.png/join.png new file mode 100644 index 0000000000000000000000000000000000000000..6d5a1ae54f5370854c2392aed4a07b23f79543a2 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsC&9NhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$82}d%lNHs4#?` W)BE3Y#e)y1g~8L+&t;ucLK6U_uPBQE literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/leopard.png/joinbottom.png b/plugins/55/indexmenu/images/leopard.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..cdab118cb29c281f11155e5f296b0d3f35a56c41 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTXn49fhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$ClRhM6IPd<+cY XJgV#y&S_r->S6G7^>bP0l+XkKlHDdR literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/leopard.png/line.png b/plugins/55/indexmenu/images/leopard.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..6347746353d696bcfde3b979265a8c8102115be6 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsCc?KhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL5f=C4rMWOgI_*Hmlc1 TGkuy2RL|h)>gTe~DWM4f7kVai literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/leopard.png/minus.png b/plugins/55/indexmenu/images/leopard.png/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..1329c6a16ab2efee31d33a6f67af6424338cdeac GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGT_2>S z4={E+nQaGTcze1yhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3MygTe~ HDWM4f9LhAa literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/leopard.png/nolines_minus.png b/plugins/55/indexmenu/images/leopard.png/nolines_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8758b19f86afecb3f303d3cdb3d9f6ba6e6479 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7CY~;iAsXkC6C`RH1f5L(xKGbWI1MpUXO@geCwk+9ibm literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/leopard.png/nolines_plus.png b/plugins/55/indexmenu/images/leopard.png/nolines_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c9badea1c4f338ab1a25759431b687a9d4492277 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7E}kxqAsXlJ_8sJ6P~dTj{qpd4u{De9Ip^aiPD|K@Jg_}#<7sNdwfe$O z^M&4vn%7i$K8$;{fWhI)!SYhB*5c-+2*wv2(<2J_t+h+ zs5rlI{^p#SO2-|aiODDi-jZP}W|aE1)~BmOR3$EA(Vi@w>U%ZDa$9qM8}c0HKK>=@ z`d4d)YqwsmShMx=n<-}wTJ%-CXPi)?Z+d)E$Kx3$zTq0>%B>G-<`ESK<06 zKLv;!Rde(>`RU=L2g~Ovo%n1M@bQ?*+>S*Vvl$k=|9v$za@qmb9gNTaiaD`NnxMxo zp5*#q&TW}{<`>WDw{ULpSLj^#x@qe3m+d`GEQ*uw+Md|dvtPsTSdE!)vF)Ukp32Aj azp#b`#_#;I)BX+6mkge+elF{r5}E*#afeO- literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/leopard.png/plus.png b/plugins/55/indexmenu/images/leopard.png/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c28055154425e18f93a60ea2ad1a2a92a0dbc048 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTM0>h8hG?AMJMke`g8@g2{nGF2Y=3@TELI$;+abd0`u>T_mVFx6X3wrL z>reG8Z=0}8yXB^z^TwO{rRGoHoNK7;PFl4y=$)Xe%ghz|FBwv9UQl%08Tj@2{o3{| ZO!2>S z4={E+nQaGTM0>h8hG?8WJ28;2!GObA{z&y}zc~AnG@mOkrwe!}ERD5tnce+p&(hB4 zA1tPQN$beml{DimOV{atE2@Lnz2j-wuCwgc>L+m*U8c Zh#m;H{QKMe{cE5#44$rjF6*2UngA{bM8p69 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/msort.gif b/plugins/55/indexmenu/images/msort.gif new file mode 100644 index 0000000000000000000000000000000000000000..5dae8131d92fd5f4f03c5b7f06bf9aa3f80d3b6a GIT binary patch literal 420 zcmZ?wbhEHblwc5NxXQq=cJuDdI}e5?6|CO4W7UT38@BD;w(r=wt$WsN-nDAuj*UC^ zA3J;b|NsC0{{8#=_wSD%KfZnY_Vw%6_wV1oeEIUlixeVY(u3Wr$@!Yv{XV0EJefsptlP6D{IC1>= zaiGZzlmW$`EQ|~cS`0cMV?cglU_0nAwZKD1s+YUD=wysu-zt@4ueCwE{)-QuS}WBT zot5At7k@C=v0Q3K-PX*~?Pn{*4>#E;&kr|vQRc$N$6Hm*%h%}4CMdwf&oyxp*8~B< zE+;mj*>mR3W}Q7li%nRBU3Bs!QFamGMQoyC3=$HOQrjiBFo=n+7nkIak(HBIke8E{ z;gA$xFDWC>%*n}e^)j=(jO2Q01tnz_Rkg>eD#}U<(u+J5AE>EoXlkgdJyVPb@bvxt UBjDeE24*f9j|~eBDlk|B07;XoU;qFB literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/pcc_dotted/base.gif b/plugins/55/indexmenu/images/pcc_dotted/base.gif new file mode 100644 index 0000000000000000000000000000000000000000..b58d63055045a0a880f9373000d00b98e57c3659 GIT binary patch literal 807 zcmZ?wbhEHbWMp7u_|Cxa{{8!<#k{|N|2{L*+|z+lRt1F{5^ OCm1+b7_wPd7_0#XHD@#c literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/pcc_dotted/empty.gif b/plugins/55/indexmenu/images/pcc_dotted/empty.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5cf52378fa5f361ff532bd66a89fb405f23f815 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!n8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/pcc_dotted/folder.gif b/plugins/55/indexmenu/images/pcc_dotted/folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..b58d63055045a0a880f9373000d00b98e57c3659 GIT binary patch literal 807 zcmZ?wbhEHbWMp7u_|Cxa{{8!<#k{|N|2{L*+|z+lRt1F{5^ OCm1+b7_wPd7_0#XHD@#c literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/pcc_dotted/folderh.gif b/plugins/55/indexmenu/images/pcc_dotted/folderh.gif new file mode 100644 index 0000000000000000000000000000000000000000..b58d63055045a0a880f9373000d00b98e57c3659 GIT binary patch literal 807 zcmZ?wbhEHbWMp7u_|Cxa{{8!<#k{|N|2{L*+|z+lRt1F{5^ OCm1+b7_wPd7_0#XHD@#c literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/pcc_dotted/folderhopen.gif b/plugins/55/indexmenu/images/pcc_dotted/folderhopen.gif new file mode 100644 index 0000000000000000000000000000000000000000..b58d63055045a0a880f9373000d00b98e57c3659 GIT binary patch literal 807 zcmZ?wbhEHbWMp7u_|Cxa{{8!<#k{|N|2{L*+|z+lRt1F{5^ OCm1+b7_wPd7_0#XHD@#c literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/pcc_dotted/folderopen.gif b/plugins/55/indexmenu/images/pcc_dotted/folderopen.gif new file mode 100644 index 0000000000000000000000000000000000000000..b58d63055045a0a880f9373000d00b98e57c3659 GIT binary patch literal 807 zcmZ?wbhEHbWMp7u_|Cxa{{8!<#k{|N|2{L*+|z+lRt1F{5^ OCm1+b7_wPd7_0#XHD@#c literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/pcc_dotted/info.txt b/plugins/55/indexmenu/images/pcc_dotted/info.txt new file mode 100644 index 0000000..0408611 --- /dev/null +++ b/plugins/55/indexmenu/images/pcc_dotted/info.txt @@ -0,0 +1,3 @@ +author=Katharina Kainz +url=http://online.pccaddie.com/ +description=Katharina Kainz \ No newline at end of file diff --git a/plugins/55/indexmenu/images/pcc_dotted/join.gif b/plugins/55/indexmenu/images/pcc_dotted/join.gif new file mode 100644 index 0000000000000000000000000000000000000000..49583f461e1067c7eeb437a90b1500c3ce428380 GIT binary patch literal 69 zcmZ?wbhEHb6k-r!XkcJ)D^mRb|G(l-7DfgJMg|=QAOOiQFv;}DH=KUEdfpt3ORshA Wx&LIzk};W<G4Ds25SJZZ6Fr_ literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/pcc_dotted/minusbottom.gif b/plugins/55/indexmenu/images/pcc_dotted/minusbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..04c5af28d21dc7aa100389191cda229a9a7d6a52 GIT binary patch literal 125 zcmZ?wbhEHb6k-r!*v!D-R;2jz^_ls r_V)h{8eP%Hr_StLDeN8TC=FEZ-Y%C1c0LT^{qyPW_ literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/pcc_dotted/nolines_plus.gif b/plugins/55/indexmenu/images/pcc_dotted/nolines_plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..f7ba69769f71f5bb86e3ee463280874e44ebb5cf GIT binary patch literal 870 zcmZ?wbhEHb6k-r!_|Cx4)YRlwq{uJ|Mnhoag}~3(XB2<3FfuSOGw6VP56Tk^9L@~v z95Nmo794Em5Y~#BVbE~6onKmxM+|z+lRt1F{5^ OCm1+b7_wPd7_0#XHD@#c literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/pcc_dotted/plus.gif b/plugins/55/indexmenu/images/pcc_dotted/plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..e45c10568ecafbaf9e62473fac0c4e1c9f59b8a1 GIT binary patch literal 130 zcmZ?wbhEHb6k-r!*v!D-R;2jz^_l+O8u-D>s w_V)h{8eP%Hrv@9$oUzjDjpUi))aYfq7hTHEHjKzL`6bbKTqP*8hk?Nw0MA$<5dZ)H literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/pcc_dotted/plusbottom.gif b/plugins/55/indexmenu/images/pcc_dotted/plusbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..0f985c2aaed11152a6ec13fae83e46c342e19400 GIT binary patch literal 129 zcmZ?wbhEHb6k-r!*v!D-R;2jz^_ls v_V)h{8eP%Hrv@9$oUzjDjpUi))aYfq7hTHEHjKzL`6bbRVu_I?BZD;nu16rG literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/phoenity.png/base.png b/plugins/55/indexmenu/images/phoenity.png/base.png new file mode 100644 index 0000000000000000000000000000000000000000..b6762e5638aaa795704875360802c6370a6129a3 GIT binary patch literal 791 zcmV+y1L*vTP)pH$w@>(R5*=olS^pabr8ot|3`K=8~+vSg%+jIlU_EPxjA`dKGvE0#FrRUFL`+ZPzR=C&V?Cu05iwc2eRBU>Ty-3Dv)0*M_;wmUAMjGw zVCC$Vv16lRWA6Wc@n*YGJ6$bv<>*oDM!mn;!0+O4Ff@90c;f9!zV}(gwCN}Wd+NWP zpV{_L^)&G1M!mN&x$-Xi`YU4}ZGYy>XkqIVA{nX{zgVWL81zQ1KgW;kZ(Y6kH46_J z{O}%AeIvU+-Z^=Gys&i&RQ~Mhec>{*>ju}(aiBC*nc4B& znSF(!mq9_XpccfSlAt!j@k`|VtZc%2dyhRI|9s&xHSgLv_67qZ?+-uq&VjCNuL2$p zimF8=LnTFRf|v*~5x7NsFDWNseb@09v+I7YRJ_z*Irv1rcLI|v<8}l9Yr`slq6ny< zl3~T7`Ns)*`VO@u{M>uvFk@l!_R8F?Pa_l82D*nPK`dfIvSY5oFOpg?EeljM8G@w5$^RhLy? zJ9L6scf%DkBtx=@uyK>9_7!~tIR-~|5|mupweK+DJYrfXR$W;GY8@os#T7}h=@K@c z!|&{;G<*av*p6GgMYC}U6V-9kMUV^=;XXv7*qAJ;W0D5y6wur*=-7ee+Niap?J7<( zi`W1K8QI$1P_iY4!bc&sn*pMmE=ymE)eAD>{wf=#&d&6~Jhfh@j{O_$gBaQWX)KLDer VZ*LUQ;3fb7002ovPDHLkV1m6Yc3c1e literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/phoenity.png/empty.png b/plugins/55/indexmenu/images/phoenity.png/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..79ac36b999c358595412ffba7bef05f14bb350db GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeOS+@4BLle<643uN=boFyt=akR{0HM7pu>b%7 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/phoenity.png/favicon.ico b/plugins/55/indexmenu/images/phoenity.png/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..52ff553346ee05c0ffa85bdae5b5672713c24967 GIT binary patch literal 2238 zcmeI!J#O1T5QgC~1jz1E1V||vumq%cYcO*T)x1F(b(!Pj7*n`N;Y0WcDN_WQyx*=U z#kRyMrI&a}W#@;>B>~6misSayIN#X!8?#Sl_8Cl>L-TV(Ie|n$MUFtCpae%CQBZ*+ zkSM5uBakRC(~jVrDCh=`K%$@@_$6!d_OK%zh*_ef)=9mQE2;0PoN+7L$|QP2iC0*Qh)%n?WwnB*Q>y}DOBw4shb zqM!|S1QG>pxFe7#=mj_eiNgDM-+}+N1MB%l%k6x8V`{KEI|v-Q@AhZLj<~uj=S+CN zn#z}E4{sAx-p7W^+dDAX?>-CzD}3GH!K?+$#&JB;fTv6Hex_#0Y!?v9-zg&1J!ry~7rg-q*h3pp3 xX4jHt3;AL8@u|D#`t>OI9d`d{S9g!LxU1*uYJPsGl3(kp-}0sEk9@0X`~@+mhUNeO literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/phoenity.png/folder.png b/plugins/55/indexmenu/images/phoenity.png/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..d56c059e9d8522934e672c8ac210339cd8dc8ca6 GIT binary patch literal 629 zcmV-*0*d{KP)pHCrLy>R5*>rleo9h$}Qg-6D)!$P8?cnV%xKiVP_Js zzdG2OJ#9xXKEt)nSLbp-AzNc>{&wEoem~_MyV3AIVBYz;z22GUXKya106{f?3{;l| z@L&b_AqGb8)EfOW_r!M9v=FgGdV7oOt={5&d&N^3rwC>MMd?Sopgpi0h!njIigY!2 z-vEmkg7<#Z)p)p)(Xj`-2#64qB|6KGD7qgptaM|BWorzMP2%fApea~~_P6OwZGK;2 z?AfBZUPu^Pv4zJ+g`C`WPu)FIAlA~Z49F5M-Dm~ErUX9iB*AoQJr z*!wNx2(b;CgQcMRG;6u^gr+l=M9`o`2h%nlgM0(DsKPwpWDv7M0WTQ>8%bmfAebqF zAyPoT`HP0QYH6hdO~Bg3A|)!Hv`zvLL>%?TAm|RnZq?P7I7>938CVzMCRx%ZM&_2A zbO1uLDR{|^Y*VnL>Rt($VZ^F?2TM1Iv5Q5%jE|S>Lz>3dv=^?W-LGJ=5~wmTN~~Id z<`nal&3qBsas6R^$!9lIgcP)51GQo;S`9FRFmzO4RvBrYP P00000NkvXXu0mjfFQFKO literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/phoenity.png/folder_open_file.png b/plugins/55/indexmenu/images/phoenity.png/folder_open_file.png new file mode 100644 index 0000000000000000000000000000000000000000..0033a1e4c895a2668e33088da2051ad1b0d58b9c GIT binary patch literal 817 zcmV-11J3-3P)pH<4Ht8R5*=o)6HvKWfaHp@AKT}-kHpMCT5Zu60MVF5u_UvunQBr zu%LCJ?nP|DO;>`@MI|7DD@DXVK)cX|xG)RrMomRDT1-e3(-cvBX)=*cI>X%FJCnID z&v6m(HNW-Ya~9`!6vyRdw65tFYo*#NStpxKR6-}{Z1ki41upXaKS#~6z<{Zlv6*LI zKmA&^o^8+?wz%@+mARE0D`(*tVC@Y?${C#7z!`(B?lRr1oG8uL7I3UX*2~f?Hw{AJ zzq?H9Qx=U=d;(p_j)5euN|x{O8=oZcXp|;+Kq3jLwV+7<2bj$G`{Q%Vb&96|4ccXK z|0}+{u}U}$5Hmt#BN7{HG_HVBAb$Z~rc{^0lUVOwZiV}_`n!D76}nNMei8!Ei&OkK zb{29x^Xdm$kF@R8!9~6WQWM1rr4&1zEzW=bJUO?BSj%L-!NA50hX-VPU+{3WuBru^ zL&sivp}}(tAMx?o0`D3SutP>OMNSqcn9#ywjU`;|A$K=1gPY|2Ri?8w+_4AQ34ijE z$d_@CQW*1&0T6r0WE$}1gki699e;0)idVsCmso@?^8nu^dA5RWl5jvV=JI`c@>ZxC zr39NC(BFHTq9fF2FLCYX5BaU%;r`MrF`D1QF5A6LMqOB*o{Z| z9g^@SnaVu%T!r&9k26~+vvsh}dV7N(I-5*;@Y2j_P8BLqSJFpP!SBG=S|lRst>Jok z9OJ>^Evg1CoH)Z$b&8T6urxZs<&%rdm#YkuAS1BkXg=Ha>8btIjAU|6O5+dVcvX<- z=)lTBl){e(g?eqv%5ZVAnDMZN-JNQ*eIsgpH-$_J4R5*==l1*qFWf*{;Z|0lX-PvxFn2p{3q=Xi!qCM2mgBEQ_ ztF(tAco1)%yhuT9dl2*x4}xed;-RK^6A`TFp#&q+B=pcw+7b|3^MlQg-R@?y+3n75 z_GiAC`92Q`J(c<#UwEJQJv^c~DZjF1_6&9gg9gB|K!-lDYMk74Joud_AhEOWWuE)i zxS7KO69Ew*pzlPNuQmS!nd8~8Zq$v&z;Y(u-=n#wo;exQi1UNm%>Fs)<51sFeSAQl7 z3RtGi#>3hDQKGX=XcqJ1EJ`p46M}A|{7Hi96zDc!08P}%W0@9-?T661jc_VBo%)>w zsJ7%&2?m2gReqzHzliJgV+jXiA}|`)O_S_8g6(EO*NFWarrBV6Q8M_9$1hR{fl(#e zYnO4oe$v_35h#p_!Dz(RCxm5SgH9aA=bC(YH+El?m1tBN1gd@uf&yOe8wl+KF#=#q zf>uC)i5~LxdR?xh51vR_8T)qW=4p$#MOd50^|Dw(L$pq{Rp5`}41d)YFuDfXC)PEt z6#r%_*uh}#nB5F~MXZ06ky=Bx|6yC^Rfx(!%r{FjjMu?4O-2R=INFP>h`GM7Do}Vfk?Cm|lQfHQ# z!i}q8CHkE6G%a8wVkS1>W5eA;O9-?8x}|N#>WYv2o}pH!AV3xR5*=YlTV0MWf+H_@0{=4bMLt`a~bsp7bQb+7;777i^xSF z7?BA7*Iuu|UWDEB(VC z4Om!aX}v@DmmWm{WdgMW^9bu3oCg8*SkQ_W27c}}g6L`Lxal~X**K^@0AF|Yn*xdn3L@gaM zlaQ8UHj9MY5507g(Re9YeL-6;Xps<`{f5nN(_TD9HWdCI8zz;e7O1?C8OOM8v6e@y zu5Xw(cYSJmdTW>(e$*m0_4p=HG)K3snGYYZmBnO5Nab5pzD;i1q_%@~W8U6-Rh{g8 z{!|>4U);!c0lK?R`2$+hX^uh;Wzt-0AJTROW?02Gdv_6TxWD^_N|{{l2sex8^J1z`XH N002ovPDHLkV1gf6VBY`$ literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/phoenity.png/folderhopen.png b/plugins/55/indexmenu/images/phoenity.png/folderhopen.png new file mode 100644 index 0000000000000000000000000000000000000000..aa196276da23cd6e3cdbd39cf21097d9030c2020 GIT binary patch literal 653 zcmV;80&@L{P)pHKS@MER5*>rl09n_Q51%sbLZ}4H%8PXS_A@75HS%!2omf>NMRu= z>Ms!d3u0wuVIc_iHa2P-L0t)cfFB7K79nULh=F8dk~O>8otd4PdymD8R+83R9q#2k z=RNOz;eQ|5c*#iWm~=|*@2z5h$fdkFe2MMd05%Q!A5@2@E(WzxK^-WF0Lh}J&BY54 z&Fre6`EgA5ot(kcCIAI8z~CD9SpRbKdG7QRf&>OJ25i8Gg?H4?-X>l*P3-g?0o!P@?-@gk#t+jKccvOC$ubWt@G8YDrf@Q1L-Sj*Tq&xv9)V~ zj~0S%^EK)+Fc26yQZZZynu9}x78Fs3W*bC}$Ml-BKn{3NMe`Q5eG^poPeR_ptvc=nB`1AG~q|z+?UD-w>00000NkvXXu0mjf=++w9 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/phoenity.png/folderopen.png b/plugins/55/indexmenu/images/phoenity.png/folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..aa196276da23cd6e3cdbd39cf21097d9030c2020 GIT binary patch literal 653 zcmV;80&@L{P)pHKS@MER5*>rl09n_Q51%sbLZ}4H%8PXS_A@75HS%!2omf>NMRu= z>Ms!d3u0wuVIc_iHa2P-L0t)cfFB7K79nULh=F8dk~O>8otd4PdymD8R+83R9q#2k z=RNOz;eQ|5c*#iWm~=|*@2z5h$fdkFe2MMd05%Q!A5@2@E(WzxK^-WF0Lh}J&BY54 z&Fre6`EgA5ot(kcCIAI8z~CD9SpRbKdG7QRf&>OJ25i8Gg?H4?-X>l*P3-g?0o!P@?-@gk#t+jKccvOC$ubWt@G8YDrf@Q1L-Sj*Tq&xv9)V~ zj~0S%^EK)+Fc26yQZZZynu9}x78Fs3W*bC}$Ml-BKn{3NMe`Q5eG^poPeR_ptvc=nB`1AG~q|z+?UD-w>00000NkvXXu0mjf=++w9 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/phoenity.png/home_house.png b/plugins/55/indexmenu/images/phoenity.png/home_house.png new file mode 100644 index 0000000000000000000000000000000000000000..ae50633a0d17686b0c26657e854c8fea77ff2567 GIT binary patch literal 1130 zcmV-w1eN=VP)pJ97#k$RCt_?Rb6aUMHK#K?%n_HW_Q~HvHUCrONd6JP!$uAx<(&N zB^qsbX?QR|^igB<$p_O!V~o)kl|_vvicnuv`e0Cr)WoPMi99GZ5fhqHpwO~q+x@wF zXT~!#*X<_V!cKZRr{~@|-*>)q?v$a8^~*bmg*!09n7bbe0?I!U&EWMrhTz@mENdru zBKSvR+6rC~dLGJsYObwe0C)C$%SFok% ze8!mbbZ`E+lUTcpSVzFf>>h4dqPrjK?t0l_3d0ix{y|$6oGI{+33qsN{!1s-lMk3T z^HB67$!M6!La}Z*(JofL`umQ9gGd!l;N+?R6CdJTVtyz$@F`Dk8l>bd<>s)npcC8V zW>O{fRr!GQEl4QED)VO_IQRs3VGKX50GK$8H^BKzx!nbx>3xP0hpYvx6_!~mN@{(d z{JNPeH=5NlvTE_%!v_Z89~r~XjUG%C@EUEeZrJr6OXr>nAX(5(*7zGuPg<>b*F8wy zwnsl5AvIn!6%h01X@9%tzBiHGx{ppfO`0pqSS`z;*(+6VFjt~RKAB&k#}#llPO%F7 z>g?mxlUYuhzm;157^3NIs8?o}%O;chp!Q8dzX{CBWo42JUN6t!+T=$~QsM`9$AS8zB-2JxrJIIh zt715&1hJ>mwbsf^kASy0MHOCwex@aHqibvh`d#T+xikTtSYe-(_+#e__}kTiorf?* z+Y|wri_0FUQffP%7sj7MX=Z#yQm}0zSzm-Oq}l)wLXX^%0gxg%6kbo3vj98{1Yub(8|^g_>D_1# zK$j|rk#4e1VBhQnLTiHx2q3g*$xsE%=cMX9eD8Xj73gw_kp>Wc$p$&iwUY@dh>*?M z3W&8HSNgEXuC@mty%I#NXzqXQTY#8NuA8iVCt<>VZO+K(EnRG1BH~zM^kJ|4*1Z{|&MTQDVAlXrDPVqES&_nl|^* wYO5tcY39cju`B0}l6}z>u^*vqF`CWmKRr(<2L|tpg#Z8m07*qoM6N<$f+BYqdH?_b literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/phoenity.png/info.txt b/plugins/55/indexmenu/images/phoenity.png/info.txt new file mode 100644 index 0000000..d63a242 --- /dev/null +++ b/plugins/55/indexmenu/images/phoenity.png/info.txt @@ -0,0 +1,3 @@ +author=Andreas Neuhold +url= +description= diff --git a/plugins/55/indexmenu/images/phoenity.png/join.png b/plugins/55/indexmenu/images/phoenity.png/join.png new file mode 100644 index 0000000000000000000000000000000000000000..6d5a1ae54f5370854c2392aed4a07b23f79543a2 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsC&9NhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$82}d%lNHs4#?` W)BE3Y#e)y1g~8L+&t;ucLK6U_uPBQE literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/phoenity.png/joinbottom.png b/plugins/55/indexmenu/images/phoenity.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..cdab118cb29c281f11155e5f296b0d3f35a56c41 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTXn49fhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$ClRhM6IPd<+cY XJgV#y&S_r->S6G7^>bP0l+XkKlHDdR literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/phoenity.png/line.png b/plugins/55/indexmenu/images/phoenity.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..6347746353d696bcfde3b979265a8c8102115be6 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsCc?KhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL5f=C4rMWOgI_*Hmlc1 TGkuy2RL|h)>gTe~DWM4f7kVai literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/phoenity.png/minus.png b/plugins/55/indexmenu/images/phoenity.png/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..1329c6a16ab2efee31d33a6f67af6424338cdeac GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGT_2>S z4={E+nQaGTcze1yhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3MygTe~ HDWM4f9LhAa literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/phoenity.png/new_page.png b/plugins/55/indexmenu/images/phoenity.png/new_page.png new file mode 100644 index 0000000000000000000000000000000000000000..2d6d47c1df42eeac641867de323e67e142b99d93 GIT binary patch literal 551 zcmV+?0@(eDP)pG*-1n}R5*=olRaw`Q51%snH|l7LRK*Zf`w+AfGA=R30R~R`~j)_ z5teCeLK;yE|Ad9V!A7jKut}p}ia@}S4|iv0cIMnKi*xVHDmietGxy`Y?|I*IGg3SY zOWbE?b%nRrhujPfJV1aD^g9Ib0qOzFCcLq*TL7>fiYpI!@o3EJSKBO)M_@d(7Q{j0 zps`R1%mqH5z{js}{v8zH0UH~)*?sq%<*ilS?0kQ?5~wZA1Zsg%nGQk@A-^`_@zZtg zY_5RykY_;FQx1!%RdtcG$>7!!<0p4vkS24;GKe@`vM{D7SSO=kcy*w+nRtcu;35OR zz$A@5Kn&}kbt)c24ZQx_n9l1y@1sKrz@r-*8v)`?;x13?FJT}K=Fv7#0K4Es%6Vk^ zF9WZWm4I=oatGj{i8fZE+1UR80)3+x-*=vK3NSZN8(p8a%9NmnbQ;ug(FDi>xG1cN zrB$MhG-;p|a30|Xp#Y^?ws2OfbzKRu-ULtzoYru70=4jqHC)G_GH}r-0P*37gT`zB zR|1n3eoo=|f+J`7#$M(NqJ_sZ_z~?(x|pbZs{eNd2WR{#g?)w`s0R0-a`5R8zDVzH pYPPNea}dM1X?e+%54_I=;4fLCR^`=nDEI&X002ovPDHLkV1jTr^!)$; literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/phoenity.png/nolines_minus.png b/plugins/55/indexmenu/images/phoenity.png/nolines_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8758b19f86afecb3f303d3cdb3d9f6ba6e6479 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7CY~;iAsXkC6C`RH1f5L(xKGbWI1MpUXO@geCwk+9ibm literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/phoenity.png/nolines_plus.png b/plugins/55/indexmenu/images/phoenity.png/nolines_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c9badea1c4f338ab1a25759431b687a9d4492277 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7E}kxqAsXlJ_8sJ6P~dTj{qpd4u{De9Ip^aiPD|K@Jg_}#<7sNdwfe$O z^M&4vn%7i$K8$;{fWhI)!SYhB*5pH7D+@wR5*=wlfP>eK^TUgncdsH+(qt0Q8X%I0wRin*ojT7w6LL@b0f>HG^61RD|m06QDOE?{9KK@BE%xn%ElcYa#T-X)jl!m#Y@_dV~- zJMRdF&%Bomm}|Fr(Q4544m{xfuD1v0p@^Wj%^T*$op=N&cyQwqFP~hccB%#1fw52; zC=3h?^h@X)_`C*-pF&#zJoM+z9^>)iO=>gk&}clA777iyflR|z45@<2bR=5=8r;5h zfuqwc$V$gbN1-fX7|1P@Rxnvl5C{Z&0TE{|pA7TM8;VD7S1=A7Vb9KbCeoO>*%KUW zCa@3SNhhMP*VBjUyuLS$cA#yT%XRQTJIO!?=s192nleEZA&?TJ2Pq+n1k!=EVBP-! zm2peI3Z8vf#k!qibIwywWA0v?;y@!oyMF+bg-k)KnQ(vhIL-$(ZJ{(C<0bVZrmsTn zK0sjtKtz)BQw^L4<3e#>{p${(ufq2}KyJeLxv6;nWj!q2gY{snM@A7>W)35wm|X7# zNEj&Sm5>`jn#9;Dy2gQ!;E`kstbkqt2=v$rG6kIh$f(Bki$_MyWp#|1f^H7o0+u^C zJU_+&TM9aPxHu5hwcE)-rh@WnAHM%#1JAoLz*+{)5Go+#!8j2>S z4={E+nQaGTM0>h8hG?AMJMke`g8@g2{nGF2Y=3@TELI$;+abd0`u>T_mVFx6X3wrL z>reG8Z=0}8yXB^z^TwO{rRGoHoNK7;PFl4y=$)Xe%ghz|FBwv9UQl%08Tj@2{o3{| ZO!2>S z4={E+nQaGTM0>h8hG?8WJ28;2!GObA{z&y}zc~AnG@mOkrwe!}ERD5tnce+p&(hB4 zA1tPQN$beml{DimOV{atE2@Lnz2j-wuCwgc>L+m*U8c Zh#m;H{QKMe{cE5#44$rjF6*2UngA{bM8p69 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/phoenity.png/toc_bullet.gif b/plugins/55/indexmenu/images/phoenity.png/toc_bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..ae0692e6b24bfb905a69d74bad21bbaed46379c7 GIT binary patch literal 528 zcmZ?wbhEHbGsRFKqG%VfBpX7zkdri>_2+$`s3$sF5bAmcK7ktnQNZB ze7j)7zU%j%Jbv-!%I!z{PF`BS=j6t{r_Nlxv+u;EhfiP4Tf1k;rh{AdpPs&A$N&HT zPhY-0bLGyRhtKyf-2CLln?)NB+_?Aj%#}MpDTYA<6o0ZXGB5-(=zv@ViW3I*+=jrW z=9U(DCVn?9#TMNFK20$JZ+oLaM^6t4aZVdqbG<-iUO58|9!Yfump~~Ib~b%eRv|mJ zKyE`zUuRJ>21cJiSASM(TNVysEBC+vCKgo_Cq_SufF=iHX>BDh6`dAl89^=u=GK?5 JUN$mV0|4#zZ5jW&a{o`R_&=xl|ALPH%P0O{HTD16ng2J; z`M-7X|GjJeAKLQ&_>TXl_x(S6;Qz&A|F4|-fA{MD`#1hSzVrY2ga5Cd{(t-O|EKr= zzkd4v^ZWmQ{}{*uia%Kx85r~!bU?a6eqvw?cbI;`wZMVPSy3S=X{HU|0fS3fYdw_t zog)+?gO>yxH!83U(zufOj{rP-q021VRYh=l9CV=;!XA978c>> UVs7?iVw>zabJpxRvm6<$0hr!_^Z)<= literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/phoenity.png/web_earth.png b/plugins/55/indexmenu/images/phoenity.png/web_earth.png new file mode 100644 index 0000000000000000000000000000000000000000..20b56d45fd9c67921b0eddbd2ae1ae000b10efbf GIT binary patch literal 1589 zcmV-52Fm$~P)pK=Sf6CRCt_)RtZcLR~Y_gW)IF44-^%UimeTb8jJ|ul{Rf5n%1AJlzP}@_j&j8FGcjo@j)Z zj(%O9jnI;9&|M0S4T7Bs6U~CK$5ci8l;oTT_3=xX5u_3C0+F%!kTHmC%Yh?3q?3_SHjwxE3hB zhPhTZ=CJi_4)TQKFSkV@-@3jEyTRsFW-+79$V?6svp6lx;<7Na)67mapJLh)9n1T3 zC%bK8?CN92E;KQAq>iyEiSCVw^uN%d3*V&Wynohiy$coT1iXV zYM~J{@GuYNoXJFNXgmtW7SRR~e)5fv;PuNm-TINX*|Q&#{@OG)zPbsO+p57=DQ(la zbWQl?PcvfEkux#}k|1#?!hP#~>`eWR#w3X3IEmnAGB)4JM0M*4WG7@p zuYUj-zAU9A8TMR2@cz;eoeOzm*HP5fM-)UTk4Ds>qP_x!RfSlWREVL5VGxK|=uD3b zrXx7_^bpbpPshZliI_cf7KGqEq}`=5)kOuynPSAk1&c>6;0qK&FY}_dtrjMy35OaF zA^T!BmXBJE6{B*wOMHICEh=I{6G)9v{LruqjGpMQXxwbM1rOSXV8V^xG|(Si1i^(F zLuT+S@iRZ_JL-{kEUha%d8GM@QD4F1SADMdo<7x{Fnh>K(zF+L-CfkRM+`d3SgSmX z;@3POL=(pStO!uFSA;07bn^phE+TVS zCZ0H+s2jYAJ`Lq_)4di%Cl7`+IWmj#UxzI<^N`dp2}?#S=^}5oH>04cfGQ*iIj@&> zY40F!c966aPd6c<_Xy}EJ)XIr(K-pt7iARb4EyDh5e_>ov=Nf~WFlvHDXJ`0JQguw zF&ruVQ?N8~DULONi<;J(;Ok`-zgsF`k?SerM!+gtDU-|){4r#s^pjG_N1izme%t(f z!=RwCTx+}6jt)-;3AXWmK=1%{oNG;>wQZ#RNz(=lGrYU zUunw7TIZ4{rAwp+>*=5E(>pilZ zBs*uF!#d%Qzws+*>Tx)8IyuDlf8=*Q5400@8xBZNo3>h+PH-vyR72BBB@d@SokN1 zl^|N_78Vw3V5TmNhpT~n_I|EZ&_fq^5Y}+hZoozT?1gABpf_`#=SS+ z=$_rKVP&JhWX#@Zh%uJmvpKyu=E~?Y`sDixR^lu;Q?vzV@j3zE@cjoKJbDsrS&Pe) z60>ND)s=wNp`9zQe*N}c0E7@>USh&iVe(ZE&Xy$AAN(~pEaQWK@WrbDUkO;}Ftcfe z_7-d*-~(J?QV^mx#2K7(tPj>WxN|Ff+_@mEvr15aDir~Iu~XiXYt5zI9WL%{mv*ES zVAJZRcoccsn1S~mDJ4?E*YOV?K7CHRdkXTb23430d|^TOpll6o)n+oCa&!Mauik#- zMD*wk&Vb3Nw$~RSE;3vkoI$A;pFV%##p`#ld5$=W0S7uS_#V7Kg;0Eruc8jqpTC&R z6MBPnQmBWwVqvMe{WW%nR}liD{%Mrd{OgZxTqMQaFeOS+@4BLle<643uN=boFyt=akR{0HM7pu>b%7 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/prdsuser-de.png/folder.png b/plugins/55/indexmenu/images/prdsuser-de.png/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..76f022d470eac153f946e4048aa481dec6c0bb7a GIT binary patch literal 611 zcmV-p0-XIvNk%w1VGsZi0LFL#*oG|Fhb`EME!mDU+LSfgm^Ip(Hrk&x+Mzbuq&3>6 zH`=N;+N(9%t2WxMG}^B<+OIa+vo_hZG~2d3;lf_x!(ZaVVDQT(>A`d3$7|%rYw^u4 z@y;;i%5?J3IqJ)7?aFHM(L3hNdGpgm^V3K1&uR12N$$^b?$37d&}{F}dhX7M^wv-D z(sK0IRP@(Z@6v$s(|PpRT<_C`^3;Fz*HGKU{rd6#`tSYv^8Wko{`>F#{P6z#@&5es{`~X){PzC*_y7F${{8g-{r3O; z`2YR-{{H>{{{8>{{{R2}|NsC0|NsC0|NsC0|NsC0|NsC0|NsC0A^sIZa%Ew3Wn>_C zX>@2HRA^-&M@dak03rDV0SW+r04x9i000mG5C8xNr+|NggM@{Khlq)U5)>AW6%&aO zba!@jcVikEn<5>94{l9GOHXKUY-(s{a}a_HWJW?ZARjX@Dkvvn4uT9}I4c-dYiw(2 zs&@^73U_jGZ){*tNSX5C-KRGWZAsk!6 zH`=N;+N(9%t2WxMG}^B<+OIa+vo_hZG~2d3;lf_x!(ZaVVDQT(>A`d3$7|%rYw^u4 z@y;;i%5?J3IqJ)7?aFHM(L3hNdGpgm^V3K1&uR12N$$^b?$37d&}{F}dhX7M^wv-D z(sK0IRP@(Z@6v$s(|PpRT<_C`^3;Fz*HGKU{rd6#`tSYv^8Wko{`>F#{P6z#@&5es{`~X){PzC*_y7F${{8g-{r3O; z`2YR-{{H>{{{8>{{{R2}|NsC0|NsC0|NsC0|NsC0|NsC0|NsC0A^sIZa%Ew3Wn>_C zX>@2HRA^-&M@dak03rDV0SW+r04x9i000mG5C8xNr+|NggM@{Khlq)U5)>AW6%&aO zba!@jcVikEn<5>94{l9GOHXKUY-(s{a}a_HWJW?ZARjX@Dkvvn4uT9}I4c-dYiw(2 zs&@^73U_jGZ){*tNSX5C-KRGWZAsk!_3!7SFFtetkIQ^=8XQZ@=`d-2Hl&%j+Y-uh$#>2LlFb1I3>#j0_Aa3_2i#L4IOj>vp)5 z;h{6B@5IIQojfci$|;{7uN32wdl9hei;KY&&u^Y0c6P1aN0~G&HZ685`NAP$^n>T| zTE!EsLX12Wii!&Dva(9Wt-Y?!EZt6uuF~wBGBdd+DJybtaY;{`!OYAyXWqi;GE145 s80ILjELzRHZv93U4h|M>Ha3QX%ZuAPI*%)zEbc#(8g%}GiX($H05G47SO5S3 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/prdsuser-de.png/folderopen.png b/plugins/55/indexmenu/images/prdsuser-de.png/folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..81a7c3b41e732aa95a3f60b7d7f2ed079ab7c72c GIT binary patch literal 366 zcmZ?wbhEHb6krfwxT?bN?aAt@35(ueF8p+>_3!7SFFtetkIQ^=8XQZ@=`d-2Hl&%j+Y-uh$#>2LlFb1I3>#j0_Aa3_2i#L4IOj>vp)5 z;h{6B@5IIQojfci$|;{7uN32wdl9hei;KY&&u^Y0c6P1aN0~G&HZ685`NAP$^n>T| zTE!EsLX12Wii!&Dva(9Wt-Y?!EZt6uuF~wBGBdd+DJybtaY;{`!OYAyXWqi;GE145 s80ILjELzRHZv93U4h|M>Ha3QX%ZuAPI*%)zEbc#(8g%}GiX($H05G47SO5S3 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/prdsuser-de.png/info.txt b/plugins/55/indexmenu/images/prdsuser-de.png/info.txt new file mode 100644 index 0000000..804e1bd --- /dev/null +++ b/plugins/55/indexmenu/images/prdsuser-de.png/info.txt @@ -0,0 +1,3 @@ +author=LinuxFanatic +url=www.pardususer.de/dokuwiki +description=This is a combination of Silk and Tulliana icons for our Wiki. diff --git a/plugins/55/indexmenu/images/prdsuser-de.png/join.png b/plugins/55/indexmenu/images/prdsuser-de.png/join.png new file mode 100644 index 0000000000000000000000000000000000000000..c180d7d3b98d09d21a8648b40dfee71535c2a132 GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh@3?y?HWJG`zTYyi9Yjo)uAoE;%{VyQJR1)MD z{GZ|Jb^|XUk1@&H-G%W#lkPnrhqJ&VvKUBvfU(=jY&#%B+|$J|gyVYhkMI8(4%aIj h^IV^GK%ajh>SyC#e7c literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/prdsuser-de.png/joinbottom.png b/plugins/55/indexmenu/images/prdsuser-de.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..f6310e01a6b239ea64f03899d458657239dac62b GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh@3?y?HWJG`zTYyi9Yjo)uAoE;%{VyQJR1)MD z{GZ|Jb^|XUk1@&H-G%W#lkPnrhqJ&VvKUBvfU(=jY&#%B+|$J|gyVYhkMI8(4%aIj g^IV_BaGAw`;Xc2?Vbz=rai9_gPgg&ebxsLQ0Q5#Ay#N3J literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/prdsuser-de.png/line.png b/plugins/55/indexmenu/images/prdsuser-de.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..b7ea5b2b4400038ece1c5f2e19a4c04477a0c70e GIT binary patch literal 141 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 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/prdsuser-de.png/nolines_plus.png b/plugins/55/indexmenu/images/prdsuser-de.png/nolines_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..55199956dd34f514af46e9a2a036fce1c3bcca6d GIT binary patch literal 3627 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 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/prdsuser-de.png/page.png b/plugins/55/indexmenu/images/prdsuser-de.png/page.png new file mode 100644 index 0000000000000000000000000000000000000000..b079b7f715effdb027a993f0e96f70c3b115b07b GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^d_c_4!3HF+i2N%7QjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf4R#hWRW`8$SGNL%_IbKEhG?9h zJ9#fxvw?`)d37i4FN`%z_476=T-i8Vq2yJwtyd-a?IJPcJ!BSql)_TqRA(s zvTsfhSfJy*>)lSSj>pWdfjkNao>s-N&g*-6oTFgBt-&z`&Ih)A6J6##4-qXEQ1HFX z`ovmePTmZu{l-$_3J#N0_?-KaNHgBrHdi+-lFh|||IOc}yLu)~Q2K7$XL#&S z&Z&UL<*V}+|8es)@qKL4dw0$`%U-=3)%~Th|G%Et`n7xy!<5N7xBhOPoC5R-gQu&X J%Q~loCIH7)crO3| literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/prdsuser-de.png/plus.png b/plugins/55/indexmenu/images/prdsuser-de.png/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..b35e28e32f941f7ce9a404295e552201169ec552 GIT binary patch literal 3641 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 LNkvXXu0mjfx4ZM( literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/prdsuser-de.png/plusbottom.png b/plugins/55/indexmenu/images/prdsuser-de.png/plusbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..2c0c8ab7e31db7de1f53bbcaee64165b4798600a GIT binary patch literal 3641 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 LNkvXXu0mjfOmXkU literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/rarrow.gif b/plugins/55/indexmenu/images/rarrow.gif new file mode 100644 index 0000000000000000000000000000000000000000..58a4158f5a6dd2b272cef25db1fc396ef9780c96 GIT binary patch literal 81 zcmZ?wbhEHb*-)(v&L>j11NQiv1ml literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/repository/.htaccess b/plugins/55/indexmenu/images/repository/.htaccess new file mode 100644 index 0000000..4c37163 --- /dev/null +++ b/plugins/55/indexmenu/images/repository/.htaccess @@ -0,0 +1,3 @@ +Options All Indexes +IndexOptions FancyIndexing +IndexIgnore .htaccess \ No newline at end of file diff --git a/plugins/55/indexmenu/images/repository/bj-tango.png.zip b/plugins/55/indexmenu/images/repository/bj-tango.png.zip new file mode 100644 index 0000000000000000000000000000000000000000..1fe0ec833a0fff0286025a5ad308984bc8437fb0 GIT binary patch literal 6730 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 DYat>K literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/repository/dryoo.png.zip b/plugins/55/indexmenu/images/repository/dryoo.png.zip new file mode 100644 index 0000000000000000000000000000000000000000..fa469b07920cef96e6c55e42b84c57591ee4bd7c GIT binary patch literal 7958 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 NqX9yO9jQI&e*ke~m|*|_ literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/repository/gnome.png.zip b/plugins/55/indexmenu/images/repository/gnome.png.zip new file mode 100644 index 0000000000000000000000000000000000000000..57e2e70dbd753440f6301bb746686e6c52e48b92 GIT binary patch literal 6594 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 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/repository/human.png.zip b/plugins/55/indexmenu/images/repository/human.png.zip new file mode 100644 index 0000000000000000000000000000000000000000..3207551f21c1f5b142a22591ba3effce3f2d1e99 GIT binary patch literal 8216 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 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/repository/kde.png.zip b/plugins/55/indexmenu/images/repository/kde.png.zip new file mode 100644 index 0000000000000000000000000000000000000000..60bcfb7faadcaa555abe7fe18ea8d843bc8bc427 GIT binary patch literal 29511 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 P#8V3$0GLAT2>|>b-o~tB literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/repository/kde.zip b/plugins/55/indexmenu/images/repository/kde.zip new file mode 100644 index 0000000000000000000000000000000000000000..25ced8fb8c3e6fdcf3e1ea1406c30e3c537e4274 GIT binary patch literal 7201 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 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/repository/phoenity.png.zip b/plugins/55/indexmenu/images/repository/phoenity.png.zip new file mode 100644 index 0000000000000000000000000000000000000000..29e55cb6a1566bbcfa70990da362b279ba2b7380 GIT binary patch literal 14961 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 oM*;Xl>V=vm?2G|A$0X>!D%K!iX literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/repository/shiki_brave.png.zip b/plugins/55/indexmenu/images/repository/shiki_brave.png.zip new file mode 100644 index 0000000000000000000000000000000000000000..e37f6d9c2e127adceb269901a52172363e0a2b78 GIT binary patch literal 6938 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 T`oF9o%)n1C(B%B=>#zO+-T=TG literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/repository/simple.zip b/plugins/55/indexmenu/images/repository/simple.zip new file mode 100644 index 0000000000000000000000000000000000000000..537bdfc74bf596d589aa2aafb7d73ff714e994cf GIT binary patch literal 4962 zcmeHKdpMM78=p#}FOph`igegy<=m`uYIoVBhT70X4Pu5cBjcFHd^*{!5OQXG*=)&b zR1V2GDwCO5hmyfq(IicZ#E^NucUI$_d2QeKUHixP*S>Sz|IBs$?&p5)=Xc-t?{=_T zAhQ^SLM=j-S5VF0sXlpZJP(C(gKRnUFU7|{z|TvMK=$+W3iQ?``Vc7NLAMKcD|sk- z+<8>g!c5e(S5UXObLZleL-msnd=77*kbl%UJ@I~EVEXSpy6xR{*HYV%19AuSOT1N)wzWpf=Eqfdj zt7cwu!^Y1E-FnV23gfsQF!}*75R45y1)xblD}N6XC&92e@o}bLtqj5N;zA|bEqz1% zmj*BYX`*3eP}pv^Tkmai{41-Q{Rw%eU1}?wb}lR5~;;<(W+bbYuK(=i=PrJ{+TGVm!zc&sy}^S$cbE9c>oxG5sl%c3Oe$be288Kckx-D#HQ+(|zl!H{74SoAA9)Qv- zvK4Te1N?$19^{}PvcGhuQyc1=o11HDYTg1s)5x1hJQE)k_0ta71_Fv{r0;|MjchU< zGFD+KmlLU-wKv5y!ywLJ*e$p7x^>pbpk@9^&F(E@)4^{d4p}TXg+YW8n2kU81N7P+ zkV%9x^Wx+HFOqa9qDL1_PvzdPsHTB!My>t5wWsXq7HLVfMKdp&*eVabJDcet7@KN> zNB{u-xLMQKRb$rcD99 zl(n1qQFxj1?3P!Y0y@+6UlZd;YZKPf!BdxzVr?DW{%r>BZZBAAzSqAKTIB%|1EwB7 zW#Gx25~Tob<~AP)oxCu3VpmSr59!4#bz5E}Dtj~UO+wRYZTsp0yalnb;0=5H#g9e@79eWsA0dnO z;voMbTMC~eDsSX5|FN+5{4a%F+&M*UI_{4~`y!%H;w>Ba20C425>fd1ki4X$@OJa` z_V%6tpt{dq*#?caL93xPP)vP&+Yb%KnUUqkd)CC*F@oQe(IQ<|-}pUcgn~tHnA1p# zhh^{-=qSPh6lx`WX%bmFu;=7K* zUN@uYLMN8|sk3$bk1c@~i=&o)Fg~~F7p9WTwg6vc0awdIpdoN${2JPk82gRmL+0c; ztd@F4N>-NtI@W`GZc7kp$xT%%v4-LknM7KSl6?@Z?z3rOzL!o5@MI1T4QY2*qatyc(W z&~z3Gz}q^2uR1X;7$rV$t9$mPU6UnPn_{vqNWfv{>pEh{CIP*G9Zhy2WWPFiY?S#B zd=XlaUc{pw>psh<7Se!_datjQm_5x69tSa3xq*$&R|xE*_^`YxvORcl)pF=fcKJuZ zVSvH1QQ^mFJg3b6km zbW_TUMh39cR<`>17JT4%>)SGSXcRayrf5v+hQ)b{Cjm zQR`3%8wji4eMYm$R@G!nuczVG6$xZ#qD#ZZe9ya)*z*tOZ`wpyy?W2yv>5hsGfoMo zgL6CMwg0~MzD^P`w5@C6^v@Hj8IM*eOGfb-Sl))4%Tm{>&u!swft@*OVJr3l@nwV4gF6@mD(U~ zHZv;fe)g6N^71Tsv+cSIcG9D4sj<}OgQfXAHcn;CW$*&y81>uemP>7$3UF#pX3ru> z$&;ibRkwY|sZMhk-beC1YY7El1(`%c@gWh&x@{#E>v;N=;sb4$NwlF0Gg_8Uc|c4N>I2W?=Q zS5@hB_Y=^12ZnSY%^wMb(?d@g*%sk}uRCs@l3hyTR#7=6{zk<4hlJVg0Sjg->#)3; zhQem7N(T=UhQX8;l@x~tgIL|u6LO4cPFOOUFHiI+7H?B6?c5)P>R%P=C;rYK{ zF=+!{jhlI$)a273=g-9?` zyux4>3>HgSBp4}0VX!%R_GGaF`CJ4@od`R54m%O6#yJrnBp(cRl%0(LApns+ka7+7 z(GB~M7H>!wNbv=`*tcjl3~?f6rzX-1QX;`#Mqn>u!Gr`OM>Gs(K-DHGh5w9!$k_^` zx5~|;#gi6!v}6H^#wGmGVK8ENB7GoxJ?!JlC9?sDJHLb7LWmkD)H3L24ONJ&NDiR> E4RN~4Q2`O8N$(w`s~{-7 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 OK^b@;kQ42}um1x&xW)7U literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/repository/thread.zip b/plugins/55/indexmenu/images/repository/thread.zip new file mode 100644 index 0000000000000000000000000000000000000000..2936462613dd8a76b8c97e1678e7a6467487b5aa GIT binary patch literal 3101 zcmWIWW@h1HU|`^2*tMtDI&+VdkS>sC48%e}T#`|gnwX-WmY^0-#t?vFxKZ|_2@ya; zL0A-FctK8SaZ-LsNq#QEe32xO`A05XxNzXWfe-)x*DI|2F}ZbOV`HZy`-wD$lg0*_ zei!pC{+4~+W68a!PJ3?Pbj#U>{f6%omfl+BI``8{+tp3#cXhu0EqzxVYs1`Zislq# zer;?Mko)I5Y!$nq+(`GN?qLd>Vo?DBp2Ayz;$?SNPSVRmY6K}jXTXh;a+jG=#) zf3^MhKaICZKfU(d+3(Lfj3b!Q!icksBQO$ZJ_z$8>;Xj=x;1zs%9ogk+Is7E?fI%) zHnwauSBN|peCh7R=I*px96#@6>N@x?%^(wG?-#1Wp(%LiFl9FOVw zALq_oxN_wRFrgZ7xgG3aLF5FPfO!cI3epmuPxyFa!-E9l_6=cYc$(V|zx{Km$cC$t z|C@Oi$Fh?mEOrIiVn6R|CjC_SnXrCM`HjhaPNBz7{_676l$$+$?%Z6(Gsg}k@S+9F z(itM#T!HQbVWeQm%Fjefx}Y?GGgwZ3K@FDwDJLfx&Ybqdvi#_z(!L&y+`F~@m{AMD+fJh zk9m!rwSBdZUv6Lh{A{Ge*XWl$>kDh0+b>PIqP8|tHq7c~b>6gJdCB`WXMe8^!wCLI zdD(5YKnK_ZF_QN(^V0J5N-9dcb#zaj(BH)CcShIutY;|4N&oYw&zydurF&}QSq)9i z4VSL#w|TsLx^$Yz^XHN`xV> zssh6WXyrUYvos6b1!$!{x*6zYG{TI<2s2PiY;+^gOI(Bz60C4%zybnZ8ljtloDe|; z2LkLsm;x&$(KVwNeF)7$Y;Y&wv>Lt4Lg=23&emw07iDW)o6thx*6yt f4Z@5hgc-1MC%~H(=qd&VK_GMm#?c|55(WkUVu#}) literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/repository/thread2.zip b/plugins/55/indexmenu/images/repository/thread2.zip new file mode 100644 index 0000000000000000000000000000000000000000..989904b91c6c1a296f91093a8f02994a21006523 GIT binary patch literal 3704 zcmb_e3sjP47zQ;&r7|N#r$uFXnvNuMWw}IQsmUAYOA_#&7cJnAwExV}YCAAbS zmzXJPrCqJ;VoB-f;2xA47nio>$3UtTHQP!uy@0lcFgDY*cSk9y3FoVaK7s#e`w|EhHVOtkS`Z^HUIXm&ZuZkx3uI#LKH7kgBkT1w` z&0%a~ykr&L+V3H6fBr+sI{UkhoxL$_vB7SJ>s^3cu$5wS`BRuR16W{+ z{TSdsg0DIy@}B~MPJ?U+20T0}TCxVk{@BERZ|P6hUI(AkPeR-xE-Tv_x}I)wUSbHe z$z&yQK_C(BoI6awgehZ<>WNyP2Hs2_!DdI*(5W|W7>{MV`C#Uu1=<&XEqt355mSbkM$s$!_sWm z-l%xMa!#xWs3)!8c&_#RwH0orvcYdAZ6PXDWTR=(d`i##aqJ#i539U%)s6HN_eB>~ zZ?|}l8=jLTmq(4Pzi^f{5NJ$cHurc4oG? zuBuIoNlEJSimRj-DE?5mMUYuShHyj_Pxv*@xLAKOv@T_$XXd-oZtZm`IXBlnR^71h zzUZX7SP;mHYmc#R5Idt+!1;u=kXna+MDnz4!J*(Kh*l!&2=tqc+Y`z@2adX7B$97 zXVpks8WUyFn<82?ozn9bMVFZj8ii}zp4@>CxR8@zy-=;$W!8-!wb+OHI?pP2wers7 z`I7Mtx@xOU&pwMAl&%+-Vumkw5^h*FyO?|+l=>wAI3JEHyRh(<>SdvEbI~{3D+^O^RJic5?3caYm65uZnLc*z+gaB+LvcR#JI2r}al3 zyHv2xJvuZ3!-HS7ue9xQ^Tp6S2SA2hDW93=>^g+&KCb54e8(gbsh%`tI^EDKPc|nm zCGPR_BPE)KKx${u^Q7|SaWfOIWi*ae2HFNpxfv_Wd@Edb>JYyxE}+lr3NSg#4uUe^ zLxwGoC*+9elGTzi^=C|KXr$>^PxwuqandrkfKIcXSUKNrv)2*Po@U(x4NpF1cu!um z%;yf#19h>dpymQu}fRFzR160 z)_@WJRCUh15x7* z$hiLH925z25aPy&J71NH@s5cSXKuGDx z_USJNP$!@$2QVmzYUq;#u<}uFJ7~!uIRF9x1OeAI3Zle-=r3;&16;l+#^?cPB1khn zQ5OgUu1FN-JO<{|!UWy16AhCTdUhM5Ss< literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/repository/vista.png.zip b/plugins/55/indexmenu/images/repository/vista.png.zip new file mode 100644 index 0000000000000000000000000000000000000000..133d282bcafebcf8aa60dbc139ba535dc155cd45 GIT binary patch literal 7819 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 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/shiki_brave.png/base.png b/plugins/55/indexmenu/images/shiki_brave.png/base.png new file mode 100644 index 0000000000000000000000000000000000000000..806d1031bcc02e8fbfe08461b373d729b5dae30d GIT binary patch literal 604 zcmV-i0;BzjP)L{JHBK@o9KIyn>< zaq$O;i@Hf6Kf$OtN)=qB;8GA27ndS-5J8DcTS!4DMA1|&ZIbtVJA}MRV+AG8cHrFC zxzBy`h!6sUOf--hkO21|lozbEGdswU&_YCyjPm7Dsr3DC01-mq?!7x-Zr-?6h@!3` ztu-qv%lhro(hqCRAHsltF?+joT>{8V{7VQ?Xf_+^g*c8W7K_=5iOE90*n7|1(~ z#OZ5KYk3(C4(}Pt1pX~hfuPZBnZ$~^^v-elVlnI+9wL_!p(y&(at-E^xmP2 z3qn{RAmfPXsWGM}$B=P5)T4(+So~CDu~Nf24+xZT!F$(sptbh`%klC3TsnJ%(UCmL zwC#50+{pqb4j&#v~wQG3gXCFE#qO_+6U?9YF zTKKxr*cFgyleUl;N18#R41})T+Qv2j3va3bT)A)z0HtjY%#mi$514QaFeOS+@4BLle<643uN=boFyt=akR{0HM7pu>b%7 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/shiki_brave.png/folder.png b/plugins/55/indexmenu/images/shiki_brave.png/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..ed0e401ee9c7528f07ead6a70bf87edb643226ea GIT binary patch literal 462 zcmV;<0WtoGP)guNeR^ zN&G@Yt>N%({2-2FWLcKB+w-lTW)Z>B$>AaZ(8B83UESzhbEc6fCM%RccpHv<5$MSX zGgg)|oozNyO9-_jLTX~v(-^hHfT9T2Gkj1u7FaLvK`|JP^z`ByMws#N>Um%ZlWvp< z7!{6%8AgO*Ju6WFCL94ESkEfLWdi3!2-N`2v6KmzQMdqwRPn<)!54rBG)9#z6rM5e zps*fLneh8kg=366_&4BVg#K;crl#6mxgb`U%UhU6?`vn%F)Kh+Gynhq07*qoM6N<$ Eg6;UcjsO4v literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/shiki_brave.png/folderh.png b/plugins/55/indexmenu/images/shiki_brave.png/folderh.png new file mode 100644 index 0000000000000000000000000000000000000000..3564f18bdbd9a530fc14fbfb87ed317af0ccf342 GIT binary patch literal 572 zcmV-C0>k}@P)LJA8F7`b?^x4UoNn|T(S-OENq<))tRH{X22 zPzV9jR5Xr8NraAxG1H0BO$;cCV4cAE02YOH z3g-i|ya;QrHepl*Uq?mUZ&k8PR@m9zu^sb&f5l#{id4TaP5lCDJqDmxM*`~r0000< KMNUMnLSTZfjP`~A literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/shiki_brave.png/folderhopen.png b/plugins/55/indexmenu/images/shiki_brave.png/folderhopen.png new file mode 100644 index 0000000000000000000000000000000000000000..696395cd88f54d19e1eb607801768e5f22cd3a88 GIT binary patch literal 573 zcmV-D0>b@?P)?QP7xu-h!Mls`xryO#?VlX8`Y>Ff{2_epeX?`_CaF|*cb!lxX~2TRNy>lQb4JE z)EJscgtGFal%0Gt$2d~}Q2EHe2!VtBU$wLUcUL~7I)*s8g=O#;2ZHlI9J1;@00000 LNkvXXu0mjfo|Xfj literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/shiki_brave.png/folderopen.png b/plugins/55/indexmenu/images/shiki_brave.png/folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..696395cd88f54d19e1eb607801768e5f22cd3a88 GIT binary patch literal 573 zcmV-D0>b@?P)?QP7xu-h!Mls`xryO#?VlX8`Y>Ff{2_epeX?`_CaF|*cb!lxX~2TRNy>lQb4JE z)EJscgtGFal%0Gt$2d~}Q2EHe2!VtBU$wLUcUL~7I)*s8g=O#;2ZHlI9J1;@00000 LNkvXXu0mjfo|Xfj literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/shiki_brave.png/info.txt b/plugins/55/indexmenu/images/shiki_brave.png/info.txt new file mode 100644 index 0000000..a05ce7d --- /dev/null +++ b/plugins/55/indexmenu/images/shiki_brave.png/info.txt @@ -0,0 +1,3 @@ +author=Andreas Neuhold +url= +description=Andreas Neuhold \ No newline at end of file diff --git a/plugins/55/indexmenu/images/shiki_brave.png/join.png b/plugins/55/indexmenu/images/shiki_brave.png/join.png new file mode 100644 index 0000000000000000000000000000000000000000..6d5a1ae54f5370854c2392aed4a07b23f79543a2 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsC&9NhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$82}d%lNHs4#?` W)BE3Y#e)y1g~8L+&t;ucLK6U_uPBQE literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/shiki_brave.png/joinbottom.png b/plugins/55/indexmenu/images/shiki_brave.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..cdab118cb29c281f11155e5f296b0d3f35a56c41 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTXn49fhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$ClRhM6IPd<+cY XJgV#y&S_r->S6G7^>bP0l+XkKlHDdR literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/shiki_brave.png/line.png b/plugins/55/indexmenu/images/shiki_brave.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..6347746353d696bcfde3b979265a8c8102115be6 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsCc?KhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL5f=C4rMWOgI_*Hmlc1 TGkuy2RL|h)>gTe~DWM4f7kVai literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/shiki_brave.png/minus.png b/plugins/55/indexmenu/images/shiki_brave.png/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..1329c6a16ab2efee31d33a6f67af6424338cdeac GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGT_2>S z4={E+nQaGTcze1yhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3MygTe~ HDWM4f9LhAa literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/shiki_brave.png/nolines_minus.png b/plugins/55/indexmenu/images/shiki_brave.png/nolines_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8758b19f86afecb3f303d3cdb3d9f6ba6e6479 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7CY~;iAsXkC6C`RH1f5L(xKGbWI1MpUXO@geCwk+9ibm literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/shiki_brave.png/nolines_plus.png b/plugins/55/indexmenu/images/shiki_brave.png/nolines_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c9badea1c4f338ab1a25759431b687a9d4492277 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7E}kxqAsXlJ_8sJ6P~dTj{qpd4u{De9Ip^aiPD|K@Jg_}#<7sNdwfe$O z^M&4vn%7i$K8$;{fWhI)!SYhB*5c-+2*wv2(<2J_t+h+ zs5rlI{^p#SO2-|aiODDi-jZP}W|aE1)~BmOR3$EA(Vi@w>U%ZDa$9qM8}c0HKK>=@ z`d4d)YqwsmShMx=n<-}wTJ%-CXPi)?Z+d)E$Kx3$zTq0>%B>G-<`ESK<06 zKLv;!Rde(>`RU=L2g~Ovo%n1M@bQ?*+>S*Vvl$k=|9v$za@qmb9gNTaiaD`NnxMxo zp5*#q&TW}{<`>WDw{ULpSLj^#x@qe3m+d`GEQ*uw+Md|dvtPsTSdE!)vF)Ukp32Aj azp#b`#_#;I)BX+6mkge+elF{r5}E*#afeO- literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/shiki_brave.png/plus.png b/plugins/55/indexmenu/images/shiki_brave.png/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c28055154425e18f93a60ea2ad1a2a92a0dbc048 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTM0>h8hG?AMJMke`g8@g2{nGF2Y=3@TELI$;+abd0`u>T_mVFx6X3wrL z>reG8Z=0}8yXB^z^TwO{rRGoHoNK7;PFl4y=$)Xe%ghz|FBwv9UQl%08Tj@2{o3{| ZO!2>S z4={E+nQaGTM0>h8hG?8WJ28;2!GObA{z&y}zc~AnG@mOkrwe!}ERD5tnce+p&(hB4 zA1tPQN$beml{DimOV{atE2@Lnz2j-wuCwgc>L+m*U8c Zh#m;H{QKMe{cE5#44$rjF6*2UngA{bM8p69 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simple/base.gif b/plugins/55/indexmenu/images/simple/base.gif new file mode 100644 index 0000000000000000000000000000000000000000..20fe6ace17a18776104888d52e264ecfb10f37a4 GIT binary patch literal 577 zcmZ?wbhEHb6k-r!c*Xz%|NsC0_4|)=W|?bNS!7vRTzySZZ(UJ)#gPjWUc8}p{-N{#kI5gNRK0xA{{MaF|JN-quGZZ-TX%44>Gd5Bj}8X> ze^P&Pf#R+GIWNzZ9h)V2Y?jpFnbL=5$edrK_WyS2qs`8LuNKTqXPlM6G$)H?UJl!W zJdQ;LT#F02mlW|VE#_Tb%D=dne_@fpnktbEbrPE!rMEW8Zf}v_)vmO+OZ8B{)`_VG zC#M;no?(1urpf>7Ex&*Ne*gac>({TJJb7~L*s+5L4{qPSecQHeGiL%_{vYhc!AmIq zWMO1r@M6#bIS~{m4D9n7yqcO@THD$?I=hQt8(OmC!U!GM`_1`~Xrv(Stnc8|J c4HEWb987BMs&1R)F~>vj{-SOPW<~~U05u%Ig#Z8m literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simple/empty.gif b/plugins/55/indexmenu/images/simple/empty.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5cf52378fa5f361ff532bd66a89fb405f23f815 GIT binary patch literal 62 zcmZ?wbhEHb6k-r!n8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simple/folder.gif b/plugins/55/indexmenu/images/simple/folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..0d7d6431bff639f010f7737fb5d77c298754cc7a GIT binary patch literal 352 zcmZ?wbhEHb6k-r!xXQrr`}gnn@893v9&~1=$&)8f4jw$XxRCo$zt;Bc+vnx5?P^z= zlf`m!n&I9q)y<94Gt(JwZ!g^1B)cGw zMSgXq@QJAg2YNM*9XqzJMr>9F(~2^IHB}=2ujK##G5PiD*Z=>|`G33g|C9Rv?>lGC zocSLFW-^ck6o0ZXGBD^d=zw&C{KUXk>oC2*Lr1Fr#F9&<53Pf?~{H0{d?YgFT1kiuuxYqpG#L|#mZH>{P}vRq6#ufQfxw;+-u#m_w3!b&imjYJx2y> E0A!ek8~^|S literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simple/folderh.gif b/plugins/55/indexmenu/images/simple/folderh.gif new file mode 100644 index 0000000000000000000000000000000000000000..0d7d6431bff639f010f7737fb5d77c298754cc7a GIT binary patch literal 352 zcmZ?wbhEHb6k-r!xXQrr`}gnn@893v9&~1=$&)8f4jw$XxRCo$zt;Bc+vnx5?P^z= zlf`m!n&I9q)y<94Gt(JwZ!g^1B)cGw zMSgXq@QJAg2YNM*9XqzJMr>9F(~2^IHB}=2ujK##G5PiD*Z=>|`G33g|C9Rv?>lGC zocSLFW-^ck6o0ZXGBD^d=zw&C{KUXk>oC2*Lr1Fr#F9&<53Pf?~{H0{d?YgFT1kiuuxYqpG#L|#mZH>{P}vRq6#ufQfxw;+-u#m_w3!b&imjYJx2y> E0A!ek8~^|S literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simple/folderhopen.gif b/plugins/55/indexmenu/images/simple/folderhopen.gif new file mode 100644 index 0000000000000000000000000000000000000000..a9c466a5b7d93172b0dbbf4d31168695054c25df GIT binary patch literal 354 zcmZ?wbhEHb6k-r!xXQrr{{8!<#k{|N|2{L*q6oUN3z*c`? zR)L3(RR4)3K^77ULMyHmIjlC45YwEb^|~xmaI#wSLIFXO^}C`%GqX9Ra{ShxR=YK$ z?)>$3EA>j_tSn<0Lsj-BqtX&1c|&Ecd_!a1=`*JDDT#7VY1Ur2NSjYuh%MiAs?M6V hYXtb^RvI#H-Krwa&c(gLO>_T&gDbs{9Cc){1^{u1m23b2 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simple/folderopen.gif b/plugins/55/indexmenu/images/simple/folderopen.gif new file mode 100644 index 0000000000000000000000000000000000000000..a9c466a5b7d93172b0dbbf4d31168695054c25df GIT binary patch literal 354 zcmZ?wbhEHb6k-r!xXQrr{{8!<#k{|N|2{L*q6oUN3z*c`? zR)L3(RR4)3K^77ULMyHmIjlC45YwEb^|~xmaI#wSLIFXO^}C`%GqX9Ra{ShxR=YK$ z?)>$3EA>j_tSn<0Lsj-BqtX&1c|&Ecd_!a1=`*JDDT#7VY1Ur2NSjYuh%MiAs?M6V hYXtb^RvI#H-Krwa&c(gLO>_T&gDbs{9Cc){1^{u1m23b2 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simple/info.txt b/plugins/55/indexmenu/images/simple/info.txt new file mode 100644 index 0000000..1b1d8cd --- /dev/null +++ b/plugins/55/indexmenu/images/simple/info.txt @@ -0,0 +1,2 @@ +author=Samuele Tognini +url=http://samuele.netsons.org/dokuwiki diff --git a/plugins/55/indexmenu/images/simple/join.gif b/plugins/55/indexmenu/images/simple/join.gif new file mode 100644 index 0000000000000000000000000000000000000000..34dd47610a5d7c3580dedc342683559bf77abce2 GIT binary patch literal 69 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=QAOOiQFv;}DH=KUEdfpt3ORshA Wx&LIzk};W<vKC_i literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simple/joinbottom.gif b/plugins/55/indexmenu/images/simple/joinbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..48b81c80a9e25f6f29e2614aaa33bdf4a4d2881b GIT binary patch literal 66 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=QAOOiQFiG~vH=KUEdfpt3ORshA Tx&LIzy5lkJS?4l0Mh0sDgH;v` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simple/line.gif b/plugins/55/indexmenu/images/simple/line.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a259eea00c330eee85fb18aa64e2e232d5410b1 GIT binary patch literal 66 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=QAOOiQFiG~vH=KUEdfpt3ORshA Txqp6J8?ND(@^elGBZD;ng_;%{ literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simple/minus.gif b/plugins/55/indexmenu/images/simple/minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..3d212a97ae0d8f83aa39836c5a85d442f8602553 GIT binary patch literal 86 zcmZ?wbhEHb6k-r!n8?h~)YR0_(7?dJ@c;jR#h)yU3=GT+IzTQ^R)~RtNqvreafzu-gC3m_gnAtsyGG)YXIxA8@>Pl literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simple/nolines_minus.gif b/plugins/55/indexmenu/images/simple/nolines_minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..2592ac20f3f4c28e38f789309ec52f08505bdf6e GIT binary patch literal 861 zcmZ?wbhEHb6k-r!_|DAG)YR0_(7-SXMnhmkhJfNv7DfgJW(FOQ??HKjfy0V{okPZB z!-9j&9Ku>LGYlFIxARNO@hDtWaBUIiPTOMfV7_}lvsu=hh(Z;&NfL@qDJM29Jw4q( Jn2m+O8UP#&8=e3F literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simple/nolines_plus.gif b/plugins/55/indexmenu/images/simple/nolines_plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..f258ce211a0a19c2ecbcb11170b9a8b35ae2436c GIT binary patch literal 870 zcmZ?wbhEHb6k-r!_|DAG)YR0_(7-SXMnhmkhJfNv7DfgJW(FOQ??HKjfy0@BokPZB z!-9j&9Ku>LGYlFIxARNO@hAj7*xx83m?l#Y_`t1M|Ba{La?4kwX3c6}c&WZ`PygnpJ?rkDyZry# zum9<}^Zxw(U)#BD%KlHsjvf2=@89j`-!lsq*us+EMQ_{wz1I^mD$)V zp|fqfjlDg)$=)VaEw1f$c1O*PPdJL7u{n3dTtWFV-;Nvh<`x$Gm({MHfB2Z&=(4Wl pOY=wE9NL#fJ_iX(d-MV$BnzmN_(=&zq1ISmR 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 N<;?v1@b5<8zW|(E;{E^t literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simplefact.png/base.png b/plugins/55/indexmenu/images/simplefact.png/base.png new file mode 100644 index 0000000000000000000000000000000000000000..87bdc697205407486adbc820d97d2a8781b2cb90 GIT binary patch literal 337 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCijSl0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP~yC& zi(`m|fAXHv*ViU0yGs->+R3$?IUjGfERE;$v$Nd1ymRepf4T4&WS%@!7k9Ky(pF)X z)>?6;r8fC5g(k2qc=dk=L-VD2$6|p;#_X?VZch{SV7`#C=GFhw^FL3n`s;m!siUDv z?ZhkL3m;lpX=m<-5SOhG%kzq%PcXj$ocu&5?1S zgrAXj#yiLB4f9MaeE)r(=@87K61zZ^_sJ3S%!7OC^eR1?oZUK(u>0IQ@T7(5+8U;1 gk~$eLg%%_+O!Pjt=9q}68_;VEp00i_>zopr0G|1NQaFeOS+@4BLle<643uN=boFyt=akR{0HM7pu>b%7 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simplefact.png/folder.png b/plugins/55/indexmenu/images/simplefact.png/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..784e8fa48234f4f64b6922a6758f254ee0ca08ec GIT binary patch literal 537 zcmV+!0_OdRP)x(K@^6+>g^d@v4;gkbWsEoXE%32*i1tcpTNXd5CcIl)ECgqz|2rE6EW}s7R?kl za1q`0GCkMruC6-2LANtwVlsgzsp4?{@7$`KBv!G66>Vie3h?3OmEEkjwdLG0PgLVi z`!N((f$A@n17Ldj#`};0I3@iHJ5M{#IZz|UIYRm4(!uV7eYIYIwQf&}_2J~}>pQ^n z6o8--^T(=hkBNQ_k{-_GWE;FMW7!p}f{NG3nHZ{D5<3d8&tLh%a4AqqnjMkr3m&fkMdECD3N5}Unig5wy40;>lo4j~k+e}v)` zR6)J8Mk*u=SpB`p6o)7j?S0T@9?bz#m@l>gc*zk__|*!FMcHwP!gwLJvS~9c0px8E zWN@Zw27r|iugjyK_i?%mf=ZN1k*q&Uedp~2B7g_+fS`hk+Nr1A{hI)z0`VHB6Nndl zX$Di6C%-U4JXr@~z-vS-U`e(1B@n-FV+JTmdRsylL39C=TOrljOR~Cct>JYCvg#mK z1ulqf0!%<`#~!NMu5Ba=9u&fmP-Zhc6E?!yaAE01t20W#1|(JmqlC- zu^GHsMqCzbhR}vI*0gbTWQ<2wA~0LlNQ8*Dc(aJuEaI~Cy?zX0(B7i0rEb>&+G>xJ z3k&o-xX8WohAjXsqHu`)jo1ugGgz-V-_eT`kMj#kXL{&TC&D=t zDS)urCatsVt!&16hZE0Sc81**wR}pC@@4w{a?#MB{`E|khgw{yHQH-JtJz=E5u9kb zz}UCVGc zN?Hxg{(SJp>2>GN9JetoZ(aZH;Ije%0FdZ{S!LRVX%}YG;=d8L^N!mJkCd*SBx($jgG)S}+Le)f;q=GIn30YFNh3ZW|nh}2rL)`=3ju9K*d z<&~Gte>sT=5|RjR+}A(|O&3gS5t&*G5h0Um$c5IgEgxJl_8nzY#B+YU^|Fhvzo-^U z6fNn3(lBMcl9{Silx)4RpURdFw}1BZ?>}8S&h8fk5`hjKW@sP$LJL*otPOMf+jp$? zcC^*PiL>vkTOZln=wuc^%A^$j`TU&aa3ETVYE{(r=bgN835`stIePGw{uwD`7K9Y) z=4)VDHnkl3YL%JeLce6>Uubzae&kQ4(CVGc zN?Hxg{(SJp>2>GN9JetoZ(aZH;Ije%0FdZ{S!LRVX%}YG;=d8L^N!mJkCd*SBx($jgG)S}+Le)f;q=GIn30YFNh3ZW|nh}2rL)`=3ju9K*d z<&~Gte>sT=5|RjR+}A(|O&3gS5t&*G5h0Um$c5IgEgxJl_8nzY#B+YU^|Fhvzo-^U z6fNn3(lBMcl9{Silx)4RpURdFw}1BZ?>}8S&h8fk5`hjKW@sP$LJL*otPOMf+jp$? zcC^*PiL>vkTOZln=wuc^%A^$j`TU&aa3ETVYE{(r=bgN835`stIePGw{uwD`7K9Y) z=4)VDHnkl3YL%JeLce6>Uubzae&kQ4(2>S z4={E+nQaGTsC&9NhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$82}d%lNHs4#?` W)BE3Y#e)y1g~8L+&t;ucLK6U_uPBQE literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simplefact.png/joinbottom.png b/plugins/55/indexmenu/images/simplefact.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..cdab118cb29c281f11155e5f296b0d3f35a56c41 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTXn49fhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$ClRhM6IPd<+cY XJgV#y&S_r->S6G7^>bP0l+XkKlHDdR literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simplefact.png/line.png b/plugins/55/indexmenu/images/simplefact.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..6347746353d696bcfde3b979265a8c8102115be6 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsCc?KhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL5f=C4rMWOgI_*Hmlc1 TGkuy2RL|h)>gTe~DWM4f7kVai literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simplefact.png/minus.png b/plugins/55/indexmenu/images/simplefact.png/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..1329c6a16ab2efee31d33a6f67af6424338cdeac GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGT_2>S z4={E+nQaGTcze1yhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3MygTe~ HDWM4f9LhAa literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simplefact.png/nolines_minus.png b/plugins/55/indexmenu/images/simplefact.png/nolines_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8758b19f86afecb3f303d3cdb3d9f6ba6e6479 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7CY~;iAsXkC6C`RH1f5L(xKGbWI1MpUXO@geCwk+9ibm literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/simplefact.png/nolines_plus.png b/plugins/55/indexmenu/images/simplefact.png/nolines_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c9badea1c4f338ab1a25759431b687a9d4492277 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7E}kxqAsXlJ_8sJ6P~dTj{qpd4u{De9Ip^aiPD|K@Jg_}#<7sNdwfe$O z^M&4vn%7i$K8$;{fWhI)!SYhB*50)+jEP);68^d)m`eN0o>(5%D`Q(1;j>g@G;xlf`0VBQ`PFY?6)!N&f?*K}$p; zB!U=NBn{eB8${1}&-2_L*HuZp@ZP1@clS@cHp)4iM1ewzw59vko7eMM{e9z|%NNdX z0V;`?KKSzTCvTm5bc{L^CIKLUxc2X{i{ISz$8Sgf{q)1nXTP{`{s?9mQ$4&hPiKC- zY8q7(Y1Xu5iCf33=O4Vy(+|zQ?rW#gkKB0f%}?+6{G*qT22|DQB-73`YzA{N4W^=s zq0kQYcbtFfz zLz)H<&|z(Y4k2>S z4={E+nQaGTM0>h8hG?AMJMke`g8@g2{nGF2Y=3@TELI$;+abd0`u>T_mVFx6X3wrL z>reG8Z=0}8yXB^z^TwO{rRGoHoNK7;PFl4y=$)Xe%ghz|FBwv9UQl%08Tj@2{o3{| ZO!2>S z4={E+nQaGTM0>h8hG?8WJ28;2!GObA{z&y}zc~AnG@mOkrwe!}ERD5tnce+p&(hB4 zA1tPQN$beml{DimOV{atE2@Lnz2j-wuCwgc>L+m*U8c Zh#m;H{QKMe{cE5#44$rjF6*2UngA{bM8p69 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/tango.png/base.png b/plugins/55/indexmenu/images/tango.png/base.png new file mode 100644 index 0000000000000000000000000000000000000000..13d2c00d08a1a278e02348d3a66d11747e015892 GIT binary patch literal 528 zcmV+r0`L8aP)Ty^tSaylA~ zKBEC^ZTT$N2TO~u76?E+dh$@l?%Zp7X^iIO(hKtW{O#0A`gNcnnYh8$*R7x-eAsy3 zSbCmXNlyTT0K(x2U7g*5g2eS?d74rvrAWU`Jq5}FYb{!Pyvy#hnTv2D&Lp^eKOsHs z=36zvW-h|qnN^$Q^YtvvvK?HRUr{?(5ktW#HrmuE%R?a1=f7OggNl*6SO%c z1Q3y93#*$Li{tJY^14X%BWdk%wzI(QzQx_uAPNB(Ie>nsV%D0ZT S3$t$k0000QaFeOS+@4BLle<643uN=boFyt=akR{0HM7pu>b%7 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/tango.png/favicon.ico b/plugins/55/indexmenu/images/tango.png/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..52ff553346ee05c0ffa85bdae5b5672713c24967 GIT binary patch literal 2238 zcmeI!J#O1T5QgC~1jz1E1V||vumq%cYcO*T)x1F(b(!Pj7*n`N;Y0WcDN_WQyx*=U z#kRyMrI&a}W#@;>B>~6misSayIN#X!8?#Sl_8Cl>L-TV(Ie|n$MUFtCpae%CQBZ*+ zkSM5uBakRC(~jVrDCh=`K%$@@_$6!d_OK%zh*_ef)=9mQE2;0PoN+7L$|QP2iC0*Qh)%n?WwnB*Q>y}DOBw4shb zqM!|S1QG>pxFe7#=mj_eiNgDM-+}+N1MB%l%k6x8V`{KEI|v-Q@AhZLj<~uj=S+CN zn#z}E4{sAx-p7W^+dDAX?>-CzD}3GH!K?+$#&JB;fTv6Hex_#0Y!?v9-zg&1J!ry~7rg-q*h3pp3 xX4jHt3;AL8@u|D#`t>OI9d`d{S9g!LxU1*uYJPsGl3(kp-}0sEk9@0X`~@+mhUNeO literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/tango.png/folder.png b/plugins/55/indexmenu/images/tango.png/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..901edc9624a23d92a9fcbc0c9c450bf37409da18 GIT binary patch literal 498 zcmVT` z=fK?B+ueUcgw&mTx8?fP8#5oZ_IS4UlwPlQrCO;yj|7yQi?lwqqD*+(cr$(Vs9LE# z0Eh#m(;1HB@{s`NLMd=l3Z)da7uEYf05Hbjc`mO%_Gxx9%%#H)XKp%DNa@dEf@UYf zg64HNtq;9mzz z0TxYQt&biCWrx3zi1`R0A}FO05k$Zj!CGNxeauK0j4VSdL!1G*==LU59h96xI zMByWh2N4hikuew;S(yNSb=sUhdyWrZ|BROccMMviB*Wb(P{I#8i on>e<%XnEP;xA*VLo2x9V1Hy;2%BQg6_y7O^07*qoM6N<$g5ayrIRF3v literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/tango.png/folderh.png b/plugins/55/indexmenu/images/tango.png/folderh.png new file mode 100644 index 0000000000000000000000000000000000000000..69dd8d4830a7577a427ef3f9edbfd1601462ae42 GIT binary patch literal 537 zcmV+!0_OdRP)X{~upF@AEBdr!_i-}AlaS`P;MW>cxu z9DkvdD(%12*vj(SYwBQ4KAVt{;nB!s5cn*uEK(>G9=&_BwGk;W{&Y+R`Ug2YIt0LO zijhdfX+$oceL4PQYR1-D<2WwYTaqQknBn2TP(y*ux9iiujIETy_dW7Ia{we;TLAF9 zi@L?G+gv%@VHnmp08>dGm7nz|ot<4Zu?<8zh`Jobr5(iM3DW6ww1Dq>y#I2}LB<7O z{=<5mexGZi-ial#0UXEWAmg&|{62xwT!w2`Voc5NR%Zb4BNuRdcG0j{YeTx-tq##~ zN`U|(f@N8V2qIua&_)QgP}Bw$8bU3!C9c-~!p)>l_FVBj>w{Prgz`cJ1VN-M3ty=dUzxwDk-RR*TX)b=<`?UJv bHvh|SH)hI<8EcVPQ;zF0Y6Y-;<5;ZC2-aEN-Ul%u85)#z*FfcH~`@T9H@$2A2@QE^U{K zOU+5f<~ZY!b4>9sJdaqU|7ecRED(i4_ZM({dP3`~*KF>d7ly8JK literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/tango.png/folderopen.png b/plugins/55/indexmenu/images/tango.png/folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..1e074cd024aeaa1f774c335ad66fcf8187d5e587 GIT binary patch literal 523 zcmV+m0`&cfP)cVPQ;zF0Y6Y-;<5;ZC2-aEN-Ul%u85)#z*FfcH~`@T9H@$2A2@QE^U{K zOU+5f<~ZY!b4>9sJdaqU|7ecRED(i4_ZM({dP3`~*KF>d7ly8JK literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/tango.png/format-justify-left.png b/plugins/55/indexmenu/images/tango.png/format-justify-left.png new file mode 100644 index 0000000000000000000000000000000000000000..d9b40a76f7e446ac44a2558deb850904db0072a0 GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfERCLYL#WBR9ck1N7TulZdN8eA=-theO zX_a`zCOO3o{#C5MofYE^0^h$}-+I>a>w$!v?|;hP9b;jrvRVIrla9EFlh?{W8|?Ks z8IDdDKK81rpRr+&+Exv_X21D<>HBx4=c%1seObbF_q8bQ1nnZvzE#^Y0=TV28JHfh zm26#bc5lP3b=JK>UPga%9cHB+Ide_Kal=c0fwtS%PF5Lgwq|5lwdz!dZRVGI#q4K% zGH3l2U2}ak+k`s|4Eyc2HcB4jwqV$2Z@&JBmf{h62hFMX<(>!LkK~vsELh8Uk?m4* Udf)$pKp!%Ay85}Sb4q9e0K*G_od5s; literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/tango.png/info.txt b/plugins/55/indexmenu/images/tango.png/info.txt new file mode 100644 index 0000000..d63a242 --- /dev/null +++ b/plugins/55/indexmenu/images/tango.png/info.txt @@ -0,0 +1,3 @@ +author=Andreas Neuhold +url= +description= diff --git a/plugins/55/indexmenu/images/tango.png/internet-group-chat.png b/plugins/55/indexmenu/images/tango.png/internet-group-chat.png new file mode 100644 index 0000000000000000000000000000000000000000..f6e83254b638a2b939e71f07b182dae793009080 GIT binary patch literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE9PK^lLGYXua=0dqb|0 z(0Aed#4mEkrXFFQVIkRU)!iwO@P)-K`H`TB-dCnMEei~^#gkV`ducIu)E`>3<^AjG zztK&BfkHBj6^DMzTFe^of29Ve$ooUjD*2X*ObOZ>y?Y%u!-GJf7{-VfofVRNRrl^& zA4u7ByT`KOXwIvCK3V<4ybKHqr#Hn33O05;u<$d!$H2qsdoZIxGtYU;WIu=L8{Rt1 zcMa9-|9(@J`Qv$g`5*Dqb~CuG?wq}|YY~H>BZuJ)ub;a966xg(BCQv{ZcM%SH|N!2 z9dFH+1n23Q)!EOlecrSASW_MIFQcQU1?I~ieR%rw>)mljBv$9#p2l!3b58*Q7;IDui+ui&r$;~AC~$Nu>2&ag&oQ2>S z4={E+nQaGTsC&9NhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$82}d%lNHs4#?` W)BE3Y#e)y1g~8L+&t;ucLK6U_uPBQE literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/tango.png/joinbottom.png b/plugins/55/indexmenu/images/tango.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..cdab118cb29c281f11155e5f296b0d3f35a56c41 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTXn49fhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$ClRhM6IPd<+cY XJgV#y&S_r->S6G7^>bP0l+XkKlHDdR literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/tango.png/line.png b/plugins/55/indexmenu/images/tango.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..6347746353d696bcfde3b979265a8c8102115be6 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsCc?KhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL5f=C4rMWOgI_*Hmlc1 TGkuy2RL|h)>gTe~DWM4f7kVai literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/tango.png/minus.png b/plugins/55/indexmenu/images/tango.png/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..1329c6a16ab2efee31d33a6f67af6424338cdeac GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGT_2>S z4={E+nQaGTcze1yhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3MygTe~ HDWM4f9LhAa literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/tango.png/network-transmit.png b/plugins/55/indexmenu/images/tango.png/network-transmit.png new file mode 100644 index 0000000000000000000000000000000000000000..08aa28b0999a4b2b5df10341acc0473192a015a7 GIT binary patch literal 455 zcmV;&0XY7NP)gEryf*^u|gH)_;PL|g84=4s>1sB1& zn}g!wA{2*)hT5XGwlS2(p$7SA62*7>xV!i6x%(snls(urfE3{>DIvks?93dR7V`~S zmW5H)(_sc^T8#PSL*LlV*){;729hKJkW5YiE--voDh~_>gP}nfYyS9%h2%JnWbxdb zpxgVT{b36^ipLs_Cw!-9)T$U|otM{P_lPnEfa|(H2+??g#kC7mRU~qpK3Byh0Gejq zw}IlZs;WX_dQxD$zkT8xmFttOkt>WWF%prfH#&5C4(*P}S}5lH2FM5ocaL>&CC^S^ zU0qodDrH%wP|Rf&FUfKGsBiBhJMh$MwSsrhs8zYlrvk44pr4-x8kCH(p8n;}XEHl` x`#}cjjrC1z+xD&WSb;zTOw;7QQo{KDqAwjve&th-`0xM#002ovPDHLkV1kYU!uMpUXO@geCwk+9ibm literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/tango.png/nolines_plus.png b/plugins/55/indexmenu/images/tango.png/nolines_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c9badea1c4f338ab1a25759431b687a9d4492277 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7E}kxqAsXlJ_8sJ6P~dTj{qpd4u{De9Ip^aiPD|K@Jg_}#<7sNdwfe$O z^M&4vn%7i$K8$;{fWhI)!SYhB*5c-+2*wv2(<2J_t+h+ zs5rlI{^p#SO2-|aiODDi-jZP}W|aE1)~BmOR3$EA(Vi@w>U%ZDa$9qM8}c0HKK>=@ z`d4d)YqwsmShMx=n<-}wTJ%-CXPi)?Z+d)E$Kx3$zTq0>%B>G-<`ESK<06 zKLv;!Rde(>`RU=L2g~Ovo%n1M@bQ?*+>S*Vvl$k=|9v$za@qmb9gNTaiaD`NnxMxo zp5*#q&TW}{<`>WDw{ULpSLj^#x@qe3m+d`GEQ*uw+Md|dvtPsTSdE!)vF)Ukp32Aj azp#b`#_#;I)BX+6mkge+elF{r5}E*#afeO- literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/tango.png/plus.png b/plugins/55/indexmenu/images/tango.png/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c28055154425e18f93a60ea2ad1a2a92a0dbc048 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTM0>h8hG?AMJMke`g8@g2{nGF2Y=3@TELI$;+abd0`u>T_mVFx6X3wrL z>reG8Z=0}8yXB^z^TwO{rRGoHoNK7;PFl4y=$)Xe%ghz|FBwv9UQl%08Tj@2{o3{| ZO!2>S z4={E+nQaGTM0>h8hG?8WJ28;2!GObA{z&y}zc~AnG@mOkrwe!}ERD5tnce+p&(hB4 zA1tPQN$beml{DimOV{atE2@Lnz2j-wuCwgc>L+m*U8c Zh#m;H{QKMe{cE5#44$rjF6*2UngA{bM8p69 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread/base.gif b/plugins/55/indexmenu/images/thread/base.gif new file mode 100644 index 0000000000000000000000000000000000000000..d307d3f8ad4c186d97e1757a2d988276322b6a6a GIT binary patch literal 52 zcmZ?wbhEHbmYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread/folder.gif b/plugins/55/indexmenu/images/thread/folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ad0310fccf7b69352a311570449bc278d3ea062 GIT binary patch literal 51 ycmZ?wbhEHbWMmLxn8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?KqyIsKKa4Aua9ybTfn literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread/folderh.gif b/plugins/55/indexmenu/images/thread/folderh.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ad0310fccf7b69352a311570449bc278d3ea062 GIT binary patch literal 51 ycmZ?wbhEHbWMmLxn8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?KqyIsKKa4Aua9ybTfn literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread/folderhopen.gif b/plugins/55/indexmenu/images/thread/folderhopen.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ad0310fccf7b69352a311570449bc278d3ea062 GIT binary patch literal 51 ycmZ?wbhEHbWMmLxn8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?KqyIsKKa4Aua9ybTfn literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread/folderopen.gif b/plugins/55/indexmenu/images/thread/folderopen.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ad0310fccf7b69352a311570449bc278d3ea062 GIT binary patch literal 51 ycmZ?wbhEHbWMmLxn8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?KqyIsKKa4Aua9ybTfn literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread/info.txt b/plugins/55/indexmenu/images/thread/info.txt new file mode 100644 index 0000000..1b1d8cd --- /dev/null +++ b/plugins/55/indexmenu/images/thread/info.txt @@ -0,0 +1,2 @@ +author=Samuele Tognini +url=http://samuele.netsons.org/dokuwiki diff --git a/plugins/55/indexmenu/images/thread/join.gif b/plugins/55/indexmenu/images/thread/join.gif new file mode 100644 index 0000000000000000000000000000000000000000..34dd47610a5d7c3580dedc342683559bf77abce2 GIT binary patch literal 69 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=QAOOiQFv;}DH=KUEdfpt3ORshA Wx&LIzk};W<vKC_i literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread/joinbottom.gif b/plugins/55/indexmenu/images/thread/joinbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..48b81c80a9e25f6f29e2614aaa33bdf4a4d2881b GIT binary patch literal 66 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=QAOOiQFiG~vH=KUEdfpt3ORshA Tx&LIzy5lkJS?4l0Mh0sDgH;v` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread/line.gif b/plugins/55/indexmenu/images/thread/line.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a259eea00c330eee85fb18aa64e2e232d5410b1 GIT binary patch literal 66 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=QAOOiQFiG~vH=KUEdfpt3ORshA Txqp6J8?ND(@^elGBZD;ng_;%{ literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread/minus.gif b/plugins/55/indexmenu/images/thread/minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..3d212a97ae0d8f83aa39836c5a85d442f8602553 GIT binary patch literal 86 zcmZ?wbhEHb6k-r!n8?h~)YR0_(7?dJ@c;jR#h)yU3=GT+IzTQ^R)~RtNqvreafzu-gC3m_gnAtsyGG)YXIxA8@>Pl literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread/nolines_minus.gif b/plugins/55/indexmenu/images/thread/nolines_minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..2592ac20f3f4c28e38f789309ec52f08505bdf6e GIT binary patch literal 861 zcmZ?wbhEHb6k-r!_|DAG)YR0_(7-SXMnhmkhJfNv7DfgJW(FOQ??HKjfy0V{okPZB z!-9j&9Ku>LGYlFIxARNO@hDtWaBUIiPTOMfV7_}lvsu=hh(Z;&NfL@qDJM29Jw4q( Jn2m+O8UP#&8=e3F literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread/nolines_plus.gif b/plugins/55/indexmenu/images/thread/nolines_plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..f258ce211a0a19c2ecbcb11170b9a8b35ae2436c GIT binary patch literal 870 zcmZ?wbhEHb6k-r!_|DAG)YR0_(7-SXMnhmkhJfNv7DfgJW(FOQ??HKjfy0@BokPZB z!-9j&9Ku>LGYlFIxARNO@hAj7*xx83m?l#Y_`t1MmYc?KqyIsKKa4Aua9ybTfn literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread/plus.gif b/plugins/55/indexmenu/images/thread/plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2c997233b3f7b0fd56c4637c2c20aaf0d47bae7 GIT binary patch literal 89 zcmZ?wbhEHb6k-r!n8?J?(9poZ!0`Y7e;}#&lZBCifr&u}$Og&^0ohtp^czmUT|IBk qf~en0XVhiRX3S&EJ6NfmYc?Kr_IsGe7zvW*%XUnbb L&G+VrGgt!vQpOa` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread2/folder.gif b/plugins/55/indexmenu/images/thread2/folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ad0310fccf7b69352a311570449bc278d3ea062 GIT binary patch literal 51 ycmZ?wbhEHbWMmLxn8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?KqyIsKKa4Aua9ybTfn literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread2/folderh.gif b/plugins/55/indexmenu/images/thread2/folderh.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ad0310fccf7b69352a311570449bc278d3ea062 GIT binary patch literal 51 ycmZ?wbhEHbWMmLxn8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?KqyIsKKa4Aua9ybTfn literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread2/folderhopen.gif b/plugins/55/indexmenu/images/thread2/folderhopen.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ad0310fccf7b69352a311570449bc278d3ea062 GIT binary patch literal 51 ycmZ?wbhEHbWMmLxn8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?KqyIsKKa4Aua9ybTfn literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread2/folderopen.gif b/plugins/55/indexmenu/images/thread2/folderopen.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ad0310fccf7b69352a311570449bc278d3ea062 GIT binary patch literal 51 ycmZ?wbhEHbWMmLxn8*ME|NsAQXlMYEia%Kx85o!ubU>mYc?KqyIsKKa4Aua9ybTfn literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread2/info.txt b/plugins/55/indexmenu/images/thread2/info.txt new file mode 100644 index 0000000..b1591b6 --- /dev/null +++ b/plugins/55/indexmenu/images/thread2/info.txt @@ -0,0 +1,3 @@ +author=Samuele Tognini +url=http://samuele.netsons.org/dokuwiki +description=Thread style with own css style diff --git a/plugins/55/indexmenu/images/thread2/join.gif b/plugins/55/indexmenu/images/thread2/join.gif new file mode 100644 index 0000000000000000000000000000000000000000..34dd47610a5d7c3580dedc342683559bf77abce2 GIT binary patch literal 69 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=QAOOiQFv;}DH=KUEdfpt3ORshA Wx&LIzk};W<vKC_i literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread2/joinbottom.gif b/plugins/55/indexmenu/images/thread2/joinbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..48b81c80a9e25f6f29e2614aaa33bdf4a4d2881b GIT binary patch literal 66 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=QAOOiQFiG~vH=KUEdfpt3ORshA Tx&LIzy5lkJS?4l0Mh0sDgH;v` literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread2/line.gif b/plugins/55/indexmenu/images/thread2/line.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a259eea00c330eee85fb18aa64e2e232d5410b1 GIT binary patch literal 66 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=QAOOiQFiG~vH=KUEdfpt3ORshA Txqp6J8?ND(@^elGBZD;ng_;%{ literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread2/minus.gif b/plugins/55/indexmenu/images/thread2/minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..3d212a97ae0d8f83aa39836c5a85d442f8602553 GIT binary patch literal 86 zcmZ?wbhEHb6k-r!n8?h~)YR0_(7?dJ@c;jR#h)yU3=GT+IzTQ^R)~RtNqvreafzu-gC3m_gnAtsyGG)YXIxA8@>Pl literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread2/nolines_minus.gif b/plugins/55/indexmenu/images/thread2/nolines_minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..2592ac20f3f4c28e38f789309ec52f08505bdf6e GIT binary patch literal 861 zcmZ?wbhEHb6k-r!_|DAG)YR0_(7-SXMnhmkhJfNv7DfgJW(FOQ??HKjfy0V{okPZB z!-9j&9Ku>LGYlFIxARNO@hDtWaBUIiPTOMfV7_}lvsu=hh(Z;&NfL@qDJM29Jw4q( Jn2m+O8UP#&8=e3F literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread2/nolines_plus.gif b/plugins/55/indexmenu/images/thread2/nolines_plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..f258ce211a0a19c2ecbcb11170b9a8b35ae2436c GIT binary patch literal 870 zcmZ?wbhEHb6k-r!_|DAG)YR0_(7-SXMnhmkhJfNv7DfgJW(FOQ??HKjfy0@BokPZB z!-9j&9Ku>LGYlFIxARNO@hAj7*xx83m?l#Y_`t1MmYc?KqyIsKKa4Aua9ybTfn literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/thread2/plus.gif b/plugins/55/indexmenu/images/thread2/plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2c997233b3f7b0fd56c4637c2c20aaf0d47bae7 GIT binary patch literal 89 zcmZ?wbhEHb6k-r!n8?J?(9poZ!0`Y7e;}#&lZBCifr&u}$Og&^0ohtp^czmUT|IBk qf~en0XVhiRX3S&EJ6Nf4CpzrTNO9jx26Gh<1qNA%R)u~Wi?GA8_eG4at--EXIBS564Kx3Bop61P9M z+Wy?_n6}gR9uVv=`+c+J&)cbw4wn9X*8ly(!(aD$e_U(%`=I+f5FF6?@$1|3;}w4& z_ubxI_~ONj&sV$m9w_^GspIp-{@eSi7S1c!a{Ad^l|L|NsBRLUI#<5!O%=z9FMn76mLU^IL63Wt;wmDL_ja~hVi zg*5oLt)JD}t7{&|t);MdRo0=YF%zDiUKz9g44+6qK){64=N>+PE|UD z!l|6nS#C3~OEqrs=<2xjq3HF_s*p~}<4r6QPoF-m+_`tsoxR2qT#ih?mM#0WP_t9U z^q`(kLiCK8GlQ8AtzFE+G|toKFm13XF*&Rwj+?Xxz|wy=&^5NF2Xv#imhfq|JJy4sT|x;9Z4 P=xYW~S3j3^P6QaFeOS+@4BLle<643uN=boFyt=akR{0HM7pu>b%7 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/vista.png/folder.png b/plugins/55/indexmenu/images/vista.png/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..adca35a48994f90e525510d384fa9ea13ddf263a GIT binary patch literal 865 zcmc&xYfn-E0KF{T%(7^f&eoPXmu}@&&9YW&QkatIOwDSQ0~4(^@`Z_tiXz}+mYVq? zYi(spHFd2lU-?KLB6v{&0hLfe#0Q`$UV(e1+pp+s=bW8y=j>F(#zc6yA9e=-z=IHp zk3${%k8ZnA4GP{LkD5ywE*b{_?Zct2l}l*$p@!e4#;2!Jb4gib0GE=UO!g&ENNMCa zGASi5Q$)T902oH>^@MN;f}B>7>^o&$H)s&h=7tLFE4(dP$;Mdmy0mBwEL;}l!)CsH zt{IY-&i%@n?#;9-%eEDzwn^sZc=6^q<9B~HtgS-S9IK4sP_gyATygs&WQqe%m#>No z3_|*X@*6x;X&Emw&Gv1{S+j%Gp&sr8$g^)q4SX7+`>?9*cOo_?G_Tj|5o7JP@h37< z(bCa}!ft4^SyvopDZEmz>Q2{aG@BDlb#JysR$-CQcm4=q-7{#CCGX5INjdhJ3dcg5 zj!!qJJGT~xmc;DkQI5sO&amANR) zhv%wc6&qG@z>!{9&DLtQ)(M6|#I(vv%o4hJlx`B!Eu)3z@hY2&ZBsCjHNIX@bfAVtQA)v%9JQwSVB?7sj(PuPXwq|rDKnRb)w_PTd{ssCI BFDL*2 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/vista.png/folderh.png b/plugins/55/indexmenu/images/vista.png/folderh.png new file mode 100644 index 0000000000000000000000000000000000000000..718a3d8946bfefc101e50a7c33ee3fafcef9a6d7 GIT binary patch literal 872 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLlP@zFKQ zXYO5``sz~as)^yBu5<;@@r_**_U!7a&}|{hZ_R!8{hifb^CdmO|6WeIckiBRkMg~J z#c8La|K06+f4274?!rH}+P;7P{^)SozlXhl|NY%CE&BVlmKP_gK3!<|_iRGhx#E9M z`hUNiWYur_>*Si>@tNvpZwg-h%!UEmwCGI?S{Bezp1aoo%m9 z)g&(oZk$~D=XRIQH1)sF*B?7}?El}N8)s#FyF2mM(+N2{Q=c5IcHQbcWkT4xhl{6e zZ~pRNQs&k8!@E~#t=7K#;m(e`I}RV;^5y53zaM7)c|7OG)#mPd4M$EjoVwn1ZF~Oi z8`Jjf+c)uM%abQhK0ZJD{Z{*zON|C|G#*{q`ug6!C68t{Zp}J=d+OWMwSV6n2;Jr# zzb}63jMQJZyXURi^y7Zl`AxYB(-qS8$EeLy)}5{WC;CSKI&GpOHS> z6)13E^Og;gP9+ES){H9N6S>WJr7dfF}&kTuZ6aCG_F%8o7 zT=D@5UO|&i227c5?lWb72>TMJJNHj4RGaNM|Fly3adwpj3s%f{nG%0ysoI>^tY#rm zHWOp@_Bl-soUxfhM`6(d1%>6y&m2CHAr_~}D#9^sn%D&4#DX(MsT;LeI19Qvrrh*+ z@u_;rvUaY$*`}_Cr z&yQF9ecbo^R@;|Ljer0Cy}i5e#fukzZnfpV4!igA&X*sb=P!>a*y@$}GT_>-@{iBY zrdureV-pp{`X;8`^B)eXIDnva=Lw}?bhCsD;*Us<% zey#2An*$%tH~f7wdCt*kvyR4mdw=iAo5$yNXaBy}wPa=JpW9s}AEREKY5D*C@sHm> zVvc$}ySbyI-}~vg_SFm8qo&yetv9&7ui(e?-S6-3Id|^d%&pP4_f@?+-+u34?b0b> z>!wD&JYDtY{){EP!Ea7gzdKXAb3xLN$FoBAIsLue{{R1f=O1^E_h7T-mR8W=dF~_OwR^52vtjU-{hLaMDD8Qy_t1&V64Cr+_u(K<_emy85}S Ib4q9e0E9CUg#Z8m literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/vista.png/folderopen.png b/plugins/55/indexmenu/images/vista.png/folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..289e813044ab4422879e7b4745fec21f840bbe88 GIT binary patch literal 872 zcmc&x`A?Do0R6BiXEZHm3+I}->G}azvo>9GEt{_BP*XE&l}Dn^G?!;?W|~LdA_gAe zn3+ynsiBpr<;4fz2O@ol7b1bgC5MTkfTH1F(c9j8d%wN6R~{OC^{9iZ0{{R=@z(;w zZ0@vA`vW#T$ zSSf|7X9n|@z$&me&$L9<$Y-^JW{Hq(+0^O<4XZO0>yAalp?z)5SP@VBoo!f#iE>Vz zWSVX;7!bz$zltftT%&BdODFuq>@QnnRIRCaYkycH!~F)$yk0<-uxcg|J_N&--&6&+ zPQfMV1Z16nV%;`rq#Uh`t43O2`pZoX($`hL3{`*W>yfc*DW%b3X0-xoVSdh6{pM(; z4Dc&aKi8;N&J1;A%NC&>vtfx@$%dI5i_L=XFWTx71Vj1#wDi^e&J9Y@n8~QqB4m?h zQpKy^+uKWha{jsPu!796;BZ^~p8)*OHxg}KmhpiB5zmEjojqLqR^;5xb2z8&!>Cfr zeXkA&@S=M!rr4pevbd=Ng=YA>+Zn)j9{yoFSy_2PClop)al+ss48{jzyq=E3@)MG&RL^|WY0PDp zi<@qj%Gp#B$?G)S>T|i!lGKxem99Lv>$2tHOT-$D*^x1|eMMGBrx+k9Da3ocU$nm# Nzy}2fc3+8k^$$p1De(XR literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/vista.png/info.txt b/plugins/55/indexmenu/images/vista.png/info.txt new file mode 100644 index 0000000..40bf692 --- /dev/null +++ b/plugins/55/indexmenu/images/vista.png/info.txt @@ -0,0 +1,2 @@ +author=Kudesnick +url=http://kudesnick.blogspot.com diff --git a/plugins/55/indexmenu/images/vista.png/join.png b/plugins/55/indexmenu/images/vista.png/join.png new file mode 100644 index 0000000000000000000000000000000000000000..6d5a1ae54f5370854c2392aed4a07b23f79543a2 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsC&9NhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$82}d%lNHs4#?` W)BE3Y#e)y1g~8L+&t;ucLK6U_uPBQE literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/vista.png/joinbottom.png b/plugins/55/indexmenu/images/vista.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..cdab118cb29c281f11155e5f296b0d3f35a56c41 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTXn49fhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3Jw%$ClRhM6IPd<+cY XJgV#y&S_r->S6G7^>bP0l+XkKlHDdR literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/vista.png/line.png b/plugins/55/indexmenu/images/vista.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..6347746353d696bcfde3b979265a8c8102115be6 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGTsCc?KhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL5f=C4rMWOgI_*Hmlc1 TGkuy2RL|h)>gTe~DWM4f7kVai literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/vista.png/minus.png b/plugins/55/indexmenu/images/vista.png/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..1329c6a16ab2efee31d33a6f67af6424338cdeac GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^Rni_n+Ah2>S z4={E+nQaGT_2>S z4={E+nQaGTcze1yhG?8m{&Bv6NBZC5Pl^*h+A}8}XgQU8WL3MygTe~ HDWM4f9LhAa literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/vista.png/nolines_minus.png b/plugins/55/indexmenu/images/vista.png/nolines_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8758b19f86afecb3f303d3cdb3d9f6ba6e6479 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7CY~;iAsXkC6C`RH1f5L(xKGbWI1MpUXO@geCwk+9ibm literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/vista.png/nolines_plus.png b/plugins/55/indexmenu/images/vista.png/nolines_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c9badea1c4f338ab1a25759431b687a9d4492277 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mn3BBRT^JZv^(q?yd7K3vk;OpT z1B~5HX4?T7E}kxqAsXlJ_8sJ6P~dTj{qpd4u{De9Ip^aiPD|K@Jg_}#<7sNdwfe$O z^M&4vn%7i$K8$;{fWhI)!SYhB*5F>}yQMW-+`*99_mFbFTUk@#T9 zZP>v2WT^s^P|TZ08cYrfJ$eewu?@4CeHqfY^K?@2>S z4={E+nQaGTM0>h8hG?AMJMke`g8@g2{nGF2Y=3@TELI$;+abd0`u>T_mVFx6X3wrL z>reG8Z=0}8yXB^z^TwO{rRGoHoNK7;PFl4y=$)Xe%ghz|FBwv9UQl%08Tj@2{o3{| ZO!2>S z4={E+nQaGTM0>h8hG?8WJ28;2!GObA{z&y}zc~AnG@mOkrwe!}ERD5tnce+p&(hB4 zA1tPQN$beml{DimOV{atE2@Lnz2j-wuCwgc>L+m*U8c Zh#m;H{QKMe{cE5#44$rjF6*2UngA{bM8p69 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/was.png/base.png b/plugins/55/indexmenu/images/was.png/base.png new file mode 100644 index 0000000000000000000000000000000000000000..fe382d3210d39b4dcb3a18f3694a7373a93396a9 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB>^xl@Ln02pJ$I6qL4bk5aq8t6 z*IN3y?o7Iw@?W?~<>mWVPhLA3K3&+@00wo8zI9tJ)vGBeC@i?0%V?@UHKjelMK%m* O5`(9!pUXO@geCxAUMQ^q literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/was.png/empty.png b/plugins/55/indexmenu/images/was.png/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..86ecabfa86cf61df9591d575ff1a2ce4c2c6aee5 GIT binary patch literal 87 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>`VBp6OsFEs^HOeH~n!3>OyQ~s_4@&r6x978G? ilmDDQaNtAXkBJP;;;v64d7w@_*lKF-cM#bZIre2n`)1NEZhY9c7^G zOphodK2ZY`=%C7FgD%_C#X-M*{bw1H4jOb-2YTg76sBe6immxU5Yw{xF$zY(C>RB! bV1NJsGB?-kENLRZ00000NkvXXu0mjfGFF4a literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/was.png/folderh.png b/plugins/55/indexmenu/images/was.png/folderh.png new file mode 100644 index 0000000000000000000000000000000000000000..2b174df31e630ccc445aa27ef6ad499a5e48c437 GIT binary patch literal 208 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 B#;gDU literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/was.png/info.txt b/plugins/55/indexmenu/images/was.png/info.txt new file mode 100644 index 0000000..93351ed --- /dev/null +++ b/plugins/55/indexmenu/images/was.png/info.txt @@ -0,0 +1,3 @@ +author=Wizardry and Steamworks +url=http://was.fm/ +description=Wizardry and Steamworks \ No newline at end of file diff --git a/plugins/55/indexmenu/images/was.png/join.png b/plugins/55/indexmenu/images/was.png/join.png new file mode 100644 index 0000000000000000000000000000000000000000..52045a0841957f5c70afd4b43616a50b979215c5 GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBTs&PILn02py>yV1L4k+mpv{~8 z363HMxl|G+Sl;+=qxY!paY&j26!bgX{LB7HaY0DH`^|3~YB)e(1xE(siSVl46QSMf QfaWoHy85}Sb4q9e0HAd!ZvX%Q literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/was.png/joinbottom.png b/plugins/55/indexmenu/images/was.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..1b2b9f3d4c424421ad7094b4f9f20725211c337d GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBtUO&DLn02pJ?F^Apdi9|k1|%Oc%$NbB>^xl@Ln02py=2J6puod&P~_kL zgN+L~_8rig5V@nStNX|Ld$(8+z=Uzi&g-%h_!&XKlu`OBp8llA9n##OeH~n!3_VSCn{|P^2|M5978G? zlmDD=;E|9Ns9|Z)lnTAlp&01DPN_wq#r}Qyzs&|tJWnnNi Vk6;c>@m~!x*wfX|Wt~$(69AA7B9H(8 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/was.png/minusbottom.png b/plugins/55/indexmenu/images/was.png/minusbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..67fa94f1a841b53883fc31021ebcd12e4e64d3ed GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>`OBp8llA9n##OeH~n!3_VSCn{|P@+>@E978G? zlmDD=;E|9Ns9|Z)lnTAlp&01DPN_wq#r}mdKI;Vst01!(i*Z=?k literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/was.png/nolines_minus.png b/plugins/55/indexmenu/images/was.png/nolines_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..5f0f1ec9f24dfcb9a5800d467019cda9c3417d77 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K;m8XkiNCjhZ$^sz?Qw}ya-mD+~ z5zfrYwY-NyI<)LNc%@8V*qcoaG0w1H|F**Mi+;ab&_nyI3o9HM{N|k0wldT1B8K;gQtsQNCjhZ$^sz?Qw}ya-mD+~ z5zfrYwY-NyI<)K`u>Eacbzq9T=?iC^CfC~1;uhCenoQ#QAK2{1%fxWE*-N!q S>DdyXSqz@8elF{r5}E+7gd&9i literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/was.png/page.png b/plugins/55/indexmenu/images/was.png/page.png new file mode 100644 index 0000000000000000000000000000000000000000..97166defac62f9dd7ce1909cee94a19307ab2df5 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|l3?zm1T2})ptpJ}8*Z=?j3-d9%n6tVVv$z5Se=hR>s?h%nLaxRv|E~!BKO*q|fWW^!0w)V9WP!REOM?7@862M7NCR@rJzX3_ zDj1Vf4lp=-dU$v;c>LX8F0UxUCOWHEU>2(=mpe!0mZsLQD?FZxE$s$-d-V(2%5s<) YJ_#78*1XPt3N(Vj)78&qol`;+0KNb>l>h($ literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/was.png/plus.png b/plugins/55/indexmenu/images/was.png/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..36e4d039b21fa6b6fa205f76d2434c498fae2079 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>`OBp8llA9n##OeH~n!3_VSCn{|P^6Wfa978G? zlmDD=;E|9Ns9|Z)lnTAlp&01DPN_wq#lKT&#$ooUN^UzI)GO?7)Ny5gZ$0an?9-Q> d|0EMb1R1O*CNRI?=Q9VH@9FC2vd$@?2>|akCyxLC literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/was.png/plusbottom.png b/plugins/55/indexmenu/images/was.png/plusbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..814900cea3fab2299f81a1c7501fe610f2f9fdb4 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>`OBp8llA9n##OeH~n!3_VSCn{|P^6Wib978G? zlmDD=;E|9Ns9|Z)lnTAlp&01DPN_wq#lKT&#$ooUN^UzI)GO?7)Ny5gZ=H2acI_o$ eJ_l*n#a#>^S;LqM)!sOPEbw&ob6Mw<&;$Vbt0zMM literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/was.png/style.css b/plugins/55/indexmenu/images/was.png/style.css new file mode 100644 index 0000000..5ee83c4 --- /dev/null +++ b/plugins/55/indexmenu/images/was.png/style.css @@ -0,0 +1,7 @@ +.dtree .was\.png { + /* font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; */ + font-size: 20pt; + color: __text__; + white-space: nowrap; + line-height: normal; +} diff --git a/plugins/55/indexmenu/images/wb.png/base.png b/plugins/55/indexmenu/images/wb.png/base.png new file mode 100644 index 0000000000000000000000000000000000000000..d96f59227c802b81b6350fa4eb4e2ef712db554e GIT binary patch literal 615 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpafHr zx4R3&|Mvbf`++>p0*}aIAngIhZYQ(tfQ-eSE{-7@=cfkT=500*_^ilwf}>}G;4NN> zg~|q8(j_8pFE}I>=UYBi{NCK4kkwuFZ^w=Fxut@S%1hH%HS_g0v%iq2`H*#3NMc&3 zb)Wjupp|iRgH|uRZ+3LK&8y1?Oaw0;2~S}b_wDsC+j)fl!%3kN+us=PKkz*8(^2;? zM#;Bs?){b;o+fZqY~2mMdleg71Q@b=JodghU>$R1=|XmfOqZYOho$$(E`9L+rQ%Vb zb8SjoBT5{7LP8SL8A38Lixq&VBqLQJGdVv`A+0DsSHV3suOufmEipM&FB!;9D@ujP z7Aq8|mgp(m$bNAIXpRfW9OwLk%A(Blj1mUtqSVBa%(7Gk=ltB<{JdfX$C8qw%%swi zOrWuT`FXk^@zkQ^%)}fZSHUHQGO{u<)iyA+GBDs#eQu4SAvZrIGp!Q0hT4kwcAy4HkPX54X(i=}MX3yq iDfvmM3ZA)%>8U}fi7AzZCsRQY&fw|l=d#Wzp$PydUee+K literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/wb.png/empty.png b/plugins/55/indexmenu/images/wb.png/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..816188cde762294d21a6c1a9eaca43975c04a670 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^LLkftBpB+pZvF+NSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=Fff4BH@skAC^cYUc$L7wU^Rn*LA+qju0R{01XD?n zUoZnh+2pepAYPKUy9)#3-7euJKptm-M`SSr1K(i~W;~w1A_XYOo=IjdcwTb&U-|3@ogSjI4}IwG9ld3=DWw zpIf77$jwj5OsmALp|&Ev9jHMHWJ7R%T1k0gQ7S_~VrE{6o}X)oLYc9ish**M!Iz?i PKvfK$u6{1-oD!Mp0*}aIAngIhZYQ(tfQ(R27sn8d^T|KXfB5_7`~Um@>;M1%`?tLL zKhKK^58V&<|1YTc*Uqqu>Dc`Dk}MJh&HO$4{~14E-_K<5*7ZOvOX>jSN6pi0WGj8ag8W(^a%+`OlJtm$ShU>qLPeMh0NsqJcYEP z{9Fb1)Vz|M)U?FpRJ~*%H?1fYB3rCboLZu%a3lN05uiCPAak7a3o45;(=$pKoQqNu zOESw+6`b>PbMy0x6&y=SiZYW*OEQ7R`sL^8g2Ypck~0%?fLsNa)S}EXu!iF5yBih& z%~J)Lmy%eLYLyH!DwV;=z|dIN&`{UdAjH7J%E-vd$V}V7(8|ET_UzwfC>nC}Q!>*k zacl6I;3@^wAPKS|I6tkVJh3R1!7(L2DOJHUH!(dmC^a#qvhZXoD2f<7UHx3vIVCg! E07wR|hyVZp literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/wb.png/folderh.png b/plugins/55/indexmenu/images/wb.png/folderh.png new file mode 100644 index 0000000000000000000000000000000000000000..f31a8bbb6d4f6b7db2ea25330bfbd465586ae865 GIT binary patch literal 571 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpafHr zx4R3&|Mvbf`++>p0*}aIAngIhZYQ(tfQ)ia7sn8d^Ghe}=4~+GaXH_?D51KzrT4~! zK&R&dC+)acI`X;xNO{+7DrH-^IB4aSC5=0pY*OC!?A*;|q+U|7-jnNNtm?h@a#J+6 zvaSv7S+zALW3ldK)O3qBo0df^wQj0Rnz#59H?`~KCG*1;|UP@v~s#P+`s8j|c z14Cn7LqlC-gAfA?DPsvQH#I3<+f~yozgCxj?;QX|b o^2DN42FH~Aq*MjZ+{Ep0*}aIAngIhZYQ(tfQ-$aE{-7@=UXS7<~`)V!xCH(rPJQ z@}#`%v*;P8b!R_(Ty;9=#p>U)9!j+t)x7$D3!r6B|j-u!8128JvAsb WF{QHbWGX1289ZJ6T-G@yGywpq{GmYr literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/wb.png/folderopen.png b/plugins/55/indexmenu/images/wb.png/folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..a78c818697d2dd0ba2e39d0bae13267595abcdc0 GIT binary patch literal 591 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpafHr zx4R3&|Mvbf`++>p0*}aIAngIhZYQ(tfQ)WW7sn8d^R;~kc@G%~usql4F8A`_3}Boh zV6|w;lnEgMRtmB+=JN_h*$Fx|etuW{J&%3j@-=JL%=r|TECz%Il5sQNvc&c$f#5XBLhQYT|+}%V}lR_3o9cdDcptHiCrXM(E~P=h4MhT#0PlJdl&R0hYC{G?O`&)mfH)S%SFl*+=Bsi25u@O1Ta JS?83{1OS(U#3%p& literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/wb.png/info.txt b/plugins/55/indexmenu/images/wb.png/info.txt new file mode 100644 index 0000000..f9e243c --- /dev/null +++ b/plugins/55/indexmenu/images/wb.png/info.txt @@ -0,0 +1,2 @@ +author=Dric modified by Bastian +description=White and Black PNG icons. diff --git a/plugins/55/indexmenu/images/wb.png/join.png b/plugins/55/indexmenu/images/wb.png/join.png new file mode 100644 index 0000000000000000000000000000000000000000..abb8775a8892af265e59af936dbde0d15293ac7b GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^LLkfmBp8a9UhD=^Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=cu> z$S;_Ip=|P53lJ~K+ueoXe|!I#{XiaPfk$L90|Vb-5N14{zaj-FDBq9i4;B-JXpC>2OC7#SEE>lzyB8XJTd zSXdbuSs9sW8yH#{7}%cuy9`A`ZhlH;S|x4`J`-G}fEuJgHU#IVm6RtIr7{F0X6BXX f`MHKDlo{)p>KPgsd?{K8RK?)w>gTe~DWM4fFF{>A literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/wb.png/joinbottom.png b/plugins/55/indexmenu/images/wb.png/joinbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..79e9ef75bbee04ea7daec605d48799622ad22c96 GIT binary patch literal 337 zcmeAS@N?(olHy`uVBq!ia0vp^LLkfmBp8a9UhD=^Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=cu> z$S;_Ip=|P53lJ~K+ueoXe|!I#{XiaPfk$L90|Vb-5N14{zaj-FDCX(n7$R{wIiaCJ znCD1CV?b+zGdlyrLI(DWa)J>ZKozPbt`Q|Ei6yC4$wjF^iowXh&{)^dP}kTX#K6MJ z$jHjbOxwWF%D}+(?B8W58glbfGSez?Yw(%iDh1Ra1+pPHKdq!Zu_%=xATcwqM9KLZB)JPgg&ebxsLQ0NPksSpWb4 literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/wb.png/line.png b/plugins/55/indexmenu/images/wb.png/line.png new file mode 100644 index 0000000000000000000000000000000000000000..d27bc568e1c1df277ae92d95044acd00933d7360 GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^LLkfmBp8a9UhD=^Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=cu> z$S;_Ip=|P53lJ~K+ueoXe|!I#{XiaPfk$L90|Vb-5N14{zaj-FDB|hj7$R{wIiaCJ znCD1CVCa#RObm>H?3{DExPsvQH#I3<+f~yozgA~Yy;QX|b^2DN4hJeJ(yb?V>*ARs= aV?9$nLj!{^MGJwd7(8A5T-G@yGywonw^$DV literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/wb.png/minus.png b/plugins/55/indexmenu/images/wb.png/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..fca861d5cbe57711bfda5699efa5aab15f37e626 GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^LLkfmBp8a9UhD=^Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=cu> z$S;_Ip=|P53lJ~K+ueoXe|!I#{XiaPfk$L90|Vb-5N14{zaj-FsOjnA7$R{wIiaCJ znCA$?p;dkd7?!CSwft*ln9%0Xb>>isIA1{zmm(vBvb%DT+H9@8KuxM8t`Q|Ei6yC4 z$wjF^iowXh&{)^dP}kTX#K6MJ$jHjbOxwWF%D}+(?B8W58glbfGSez?Yw(%iDh1Ra w1+pPHKdq!Zu_%=xATcwqM9KLZB)JPgg&ebxsLQ0HSwbmjD0& literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/wb.png/minusbottom.png b/plugins/55/indexmenu/images/wb.png/minusbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..1a428fe0e6b191093cd584663772c64d4a88a831 GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^LLkfmBp8a9UhD=^Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=cu> z$S;_Ip=|P53lJ~K+ueoXe|!I#{XiaPfk$L90|Vb-5N14{zaj-FsOstB7$R{wIiaCJ znCA$?p;dkd7?!CSwft*ln9%0Xb>>isI4>i^bpypGZ{q%ofi#r3MwFx^mZVxG7o`Fz z1|tJQV_ic-U1Ng~0}Cr7BP$~_Z39Cq0|VQ$f0vp0*}aI1_r*vAk26?e?5@?cY ziEBhjN@7W>RdP`(kYX@0Ff`URG}JXV2r;m*GBUCp0*}aI1_r*vAk26?e?_dDnU>X4fySzqxJHzuB$lLFB^RXvDF!10Lt|Y-LtSHo5CaPhJyShH V1A{L`3xTQ_JYD@<);T3K0RV@IZ(;xd literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/wb.png/page.png b/plugins/55/indexmenu/images/wb.png/page.png new file mode 100644 index 0000000000000000000000000000000000000000..3e0eae9aa121e67a865656003bd0a03c0262dfc1 GIT binary patch literal 584 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpafHr zx4R3&|Mvbf`++>p0*}aIAngIhZYQ(tfQ%MT7sn8d^Lu*_3LY}xVYz;Ub%~1CV&SPy zo+rl*}Gm&Q+DdO+M8YM(fI6ay^W7!diHGrJ@e_O*D^2s!Q^yE zSA^$P;(}tqp>7q1 z-rr@3vRAbCFt7)71T3G*m=1K0O^ItniK9h2qo_J%tKpPQSXSFGSzQc{$eR9cb=G}bRaPZuPfT9llbm;>Z0xTF?kmVq@CSKr;R0BD{n z$h?%ql2of?kWr}&Mh1q)x`u|j#s(n<7FI?^Rz_yp28LD!2DWGaE<@3fo1c=IR*74K z&jeQ~paw~h4Z-`C= Bye0qu literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/wb.png/plus.png b/plugins/55/indexmenu/images/wb.png/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..67b2c3c5f22c2274b25c35266dfb98aa2a70f994 GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^LLkfmBp8a9UhD=^Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=cu> z$S;_Ip=|P53lJ~K+ueoXe|!I#{XiaPfk$L90|Vb-5N14{zaj-FsO#zC7$R{wIiaCJ znCA$?p;dkd7?!D-Ed1}n@t2)Zfwxg5-L15RjOeSEA?V8lq5UtY@lcXkhTAXdzG)gQu&X%Q~loCIF^r BWHA5$ literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/images/wb.png/plusbottom.png b/plugins/55/indexmenu/images/wb.png/plusbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..9b8f79cf501abf19d486d05d831fe6e01c0ff19a GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^LLkfmBp8a9UhD=^Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=cu> z$S;_Ip=|P53lJ~K+ueoXe|!I#{XiaPfk$L90|Vb-5N14{zaj-FsO9P67$R{wIiaCJ znCA$?p;dkd7?!D-Ed1}n@t2)Zfwxg5v8-y5GSQ!~v8JTGt7+M(^*q;5n3`Ik3eoAIqC2kEq6I`W$ y8l*rr1m~xflqVLYG6W=M=9TFAxrQi|8S9zq85$UTDOw0r#o+1c=d#Wzp$Pz#S7GD; literal 0 HcmV?d00001 diff --git a/plugins/55/indexmenu/inc/pclzip.lib.php b/plugins/55/indexmenu/inc/pclzip.lib.php new file mode 100644 index 0000000..06aa240 --- /dev/null +++ b/plugins/55/indexmenu/inc/pclzip.lib.php @@ -0,0 +1,5544 @@ +zipname = $p_zipname; + $this->zip_fd = 0; + $this->magic_quotes_status = -1; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // create($p_filelist, $p_add_dir="", $p_remove_dir="") + // create($p_filelist, $p_option, $p_option_value, ...) + // Description : + // This method supports two different synopsis. The first one is historical. + // This method creates a Zip Archive. The Zip file is created in the + // filesystem. The files and directories indicated in $p_filelist + // are added in the archive. See the parameters description for the + // supported format of $p_filelist. + // When a directory is in the list, the directory and its content is added + // in the archive. + // In this synopsis, the function takes an optional variable list of + // options. See bellow the supported options. + // Parameters : + // $p_filelist : An array containing file or directory names, or + // a string containing one filename or one directory name, or + // a string containing a list of filenames and/or directory + // names separated by spaces. + // $p_add_dir : A path to add before the real path of the archived file, + // in order to have it memorized in the archive. + // $p_remove_dir : A path to remove from the real path of the file to archive, + // in order to have a shorter path memorized in the archive. + // When $p_add_dir and $p_remove_dir are set, $p_remove_dir + // is removed first, before $p_add_dir is added. + // Options : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_COMMENT : + // PCLZIP_CB_PRE_ADD : + // PCLZIP_CB_POST_ADD : + // Return Values : + // 0 on failure, + // The list of the added files, with a status of the add action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + public function create($p_filelist) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::create', "filelist='$p_filelist', ..."); + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Set default values + $v_options = []; + $v_options[PCLZIP_OPT_NO_COMPRESSION] = false; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method"); + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove from the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_int($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options detected"); + + // ----- Parse the options + $v_result = $this->privParseOptions( + $v_arg_list, + $v_size, + $v_options, + [PCLZIP_OPT_REMOVE_PATH => 'optional', PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', PCLZIP_OPT_ADD_PATH => 'optional', PCLZIP_CB_PRE_ADD => 'optional', PCLZIP_CB_POST_ADD => 'optional', PCLZIP_OPT_NO_COMPRESSION => 'optional', PCLZIP_OPT_COMMENT => 'optional'] + ); + if ($v_result != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return 0; + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis"); + + // ----- Get the first argument + $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; + } elseif ($v_size > 2) { + PclZip::privErrorLog( + PCLZIP_ERR_INVALID_PARAMETER, + "Invalid number / type of arguments" + ); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return 0; + } + } + } + + // ----- Init + $v_string_list = []; + $v_att_list = []; + $v_filedescr_list = []; + $p_result_list = []; + + // ----- Look if the $p_filelist is really an array + if (is_array($p_filelist)) { + // ----- Look if the first element is also an array + // This will mean that this is a file description entry + if (isset($p_filelist[0]) && is_array($p_filelist[0])) { + $v_att_list = $p_filelist; + } + + // ----- The list is a list of string names + else { + $v_string_list = $p_filelist; + } + } elseif (is_string($p_filelist)) { + // ----- Create a list from the string + $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); + } else { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return 0; + } + + // ----- Reformat the string list + if (count($v_string_list) != 0) { + foreach ($v_string_list as $v_string) { + if ($v_string != '') { + $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; + } else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Ignore an empty filename"); + } + } + } + + // ----- For each file in the list check the attributes + $v_supported_attributes + = [PCLZIP_ATT_FILE_NAME => 'mandatory', PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional', PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional']; + foreach ($v_att_list as $v_entry) { + $v_result = $this->privFileDescrParseAtt( + $v_entry, + $v_filedescr_list[], + $v_options, + $v_supported_attributes + ); + if ($v_result != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return 0; + } + } + + // ----- Expand the filelist (expand directories) + $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); + if ($v_result != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return 0; + } + + // ----- Call the create fct + $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options); + if ($v_result != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return 0; + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_result_list); + return $p_result_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // add($p_filelist, $p_add_dir="", $p_remove_dir="") + // add($p_filelist, $p_option, $p_option_value, ...) + // Description : + // This method supports two synopsis. The first one is historical. + // This methods add the list of files in an existing archive. + // If a file with the same name already exists, it is added at the end of the + // archive, the first one is still present. + // If the archive does not exist, it is created. + // Parameters : + // $p_filelist : An array containing file or directory names, or + // a string containing one filename or one directory name, or + // a string containing a list of filenames and/or directory + // names separated by spaces. + // $p_add_dir : A path to add before the real path of the archived file, + // in order to have it memorized in the archive. + // $p_remove_dir : A path to remove from the real path of the file to archive, + // in order to have a shorter path memorized in the archive. + // When $p_add_dir and $p_remove_dir are set, $p_remove_dir + // is removed first, before $p_add_dir is added. + // Options : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_COMMENT : + // PCLZIP_OPT_ADD_COMMENT : + // PCLZIP_OPT_PREPEND_COMMENT : + // PCLZIP_CB_PRE_ADD : + // PCLZIP_CB_POST_ADD : + // Return Values : + // 0 on failure, + // The list of the added files, with a status of the add action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + public function add($p_filelist) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::add', "filelist='$p_filelist', ..."); + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Set default values + $v_options = []; + $v_options[PCLZIP_OPT_NO_COMPRESSION] = false; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method"); + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove form the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_int($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options detected"); + + // ----- Parse the options + $v_result = $this->privParseOptions( + $v_arg_list, + $v_size, + $v_options, + [PCLZIP_OPT_REMOVE_PATH => 'optional', PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', PCLZIP_OPT_ADD_PATH => 'optional', PCLZIP_CB_PRE_ADD => 'optional', PCLZIP_CB_POST_ADD => 'optional', PCLZIP_OPT_NO_COMPRESSION => 'optional', PCLZIP_OPT_COMMENT => 'optional', PCLZIP_OPT_ADD_COMMENT => 'optional', PCLZIP_OPT_PREPEND_COMMENT => 'optional'] + ); + if ($v_result != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return 0; + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis"); + + // ----- Get the first argument + $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; + } elseif ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return 0; + } + } + } + + // ----- Init + $v_string_list = []; + $v_att_list = []; + $v_filedescr_list = []; + $p_result_list = []; + + // ----- Look if the $p_filelist is really an array + if (is_array($p_filelist)) { + // ----- Look if the first element is also an array + // This will mean that this is a file description entry + if (isset($p_filelist[0]) && is_array($p_filelist[0])) { + $v_att_list = $p_filelist; + } + + // ----- The list is a list of string names + else { + $v_string_list = $p_filelist; + } + } elseif (is_string($p_filelist)) { + // ----- Create a list from the string + $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); + } else { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '" . gettype($p_filelist) . "' for p_filelist"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return 0; + } + + // ----- Reformat the string list + if (count($v_string_list) != 0) { + foreach ($v_string_list as $v_string) { + $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; + } + } + + // ----- For each file in the list check the attributes + $v_supported_attributes + = [PCLZIP_ATT_FILE_NAME => 'mandatory', PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional', PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional']; + foreach ($v_att_list as $v_entry) { + $v_result = $this->privFileDescrParseAtt( + $v_entry, + $v_filedescr_list[], + $v_options, + $v_supported_attributes + ); + if ($v_result != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return 0; + } + } + + // ----- Expand the filelist (expand directories) + $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); + if ($v_result != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return 0; + } + + // ----- Call the create fct + $v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options); + if ($v_result != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return 0; + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_result_list); + return $p_result_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : listContent() + // Description : + // This public method, gives the list of the files and directories, with their + // properties. + // The properties of each entries in the list are (used also in other functions) : + // filename : Name of the file. For a create or add action it is the filename + // given by the user. For an extract function it is the filename + // of the extracted file. + // stored_filename : Name of the file / directory stored in the archive. + // size : Size of the stored file. + // compressed_size : Size of the file's data compressed in the archive + // (without the headers overhead) + // mtime : Last known modification date of the file (UNIX timestamp) + // comment : Comment associated with the file + // folder : true | false + // index : index of the file in the archive + // status : status of the action (depending of the action) : + // Values are : + // ok : OK ! + // filtered : the file / dir is not extracted (filtered by user) + // already_a_directory : the file can not be extracted because a + // directory with the same name already exists + // write_protected : the file can not be extracted because a file + // with the same name already exists and is + // write protected + // newer_exist : the file was not extracted because a newer file exists + // path_creation_fail : the file is not extracted because the folder + // does not exists and can not be created + // write_error : the file was not extracted because there was a + // error while writing the file + // read_error : the file was not extracted because there was a error + // while reading the file + // invalid_header : the file was not extracted because of an archive + // format error (bad file header) + // Note that each time a method can continue operating when there + // is an action error on a file, the error is only logged in the file status. + // Return Values : + // 0 on an unrecoverable failure, + // The list of the files in the archive. + // -------------------------------------------------------------------------------- + public function listContent() + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::listContent', ""); + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return(0); + } + + // ----- Call the extracting fct + $p_list = []; + if (($v_result = $this->privList($p_list)) != 1) { + unset($p_list); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo()); + return(0); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list); + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // extract($p_path="./", $p_remove_path="") + // extract([$p_option, $p_option_value, ...]) + // Description : + // This method supports two synopsis. The first one is historical. + // This method extract all the files / directories from the archive to the + // folder indicated in $p_path. + // If you want to ignore the 'root' part of path of the memorized files + // you can indicate this in the optional $p_remove_path parameter. + // By default, if a newer file with the same name already exists, the + // file is not extracted. + // + // If both PCLZIP_OPT_PATH and PCLZIP_OPT_ADD_PATH aoptions + // are used, the path indicated in PCLZIP_OPT_ADD_PATH is append + // at the end of the path value of PCLZIP_OPT_PATH. + // Parameters : + // $p_path : Path where the files and directories are to be extracted + // $p_remove_path : First part ('root' part) of the memorized path + // (if any similar) to remove while extracting. + // Options : + // PCLZIP_OPT_PATH : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_CB_PRE_EXTRACT : + // PCLZIP_CB_POST_EXTRACT : + // Return Values : + // 0 or a negative value on failure, + // The list of the extracted files, with a status of the action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + public function extract() + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::extract", ""); + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return(0); + } + + // ----- Set default values + $v_options = []; + // $v_path = "./"; + $v_path = ''; + $v_remove_path = ""; + $v_remove_all_path = false; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method"); + + // ----- Default values for option + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = false; + + // ----- Look for arguments + if ($v_size > 0) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Look for first arg + if ((is_int($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options"); + + // ----- Parse the options + $v_result = $this->privParseOptions( + $v_arg_list, + $v_size, + $v_options, + [PCLZIP_OPT_PATH => 'optional', PCLZIP_OPT_REMOVE_PATH => 'optional', PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', PCLZIP_OPT_ADD_PATH => 'optional', PCLZIP_CB_PRE_EXTRACT => 'optional', PCLZIP_CB_POST_EXTRACT => 'optional', PCLZIP_OPT_SET_CHMOD => 'optional', PCLZIP_OPT_BY_NAME => 'optional', PCLZIP_OPT_BY_EREG => 'optional', PCLZIP_OPT_BY_PREG => 'optional', PCLZIP_OPT_BY_INDEX => 'optional', PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional', PCLZIP_OPT_REPLACE_NEWER => 'optional', PCLZIP_OPT_STOP_ON_ERROR => 'optional', PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional'] + ); + if ($v_result != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return 0; + } + + // ----- Set the arguments + if (isset($v_options[PCLZIP_OPT_PATH])) { + $v_path = $v_options[PCLZIP_OPT_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { + $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } + if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { + // ----- Check for '/' in last path char + if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { + $v_path .= '/'; + } + $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis"); + + // ----- Get the first argument + $v_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_remove_path = $v_arg_list[1]; + } elseif ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo()); + return 0; + } + } + } + + // ----- Trace + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "path='$v_path', remove_path='$v_remove_path', remove_all_path='".($v_remove_path?'true':'false')."'"); + + // ----- Call the extracting fct + $p_list = []; + $v_result = $this->privExtractByRule( + $p_list, + $v_path, + $v_remove_path, + $v_remove_all_path, + $v_options + ); + if ($v_result < 1) { + unset($p_list); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo()); + return(0); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list); + return $p_list; + } + // -------------------------------------------------------------------------------- + + + // -------------------------------------------------------------------------------- + // Function : + // extractByIndex($p_index, $p_path="./", $p_remove_path="") + // extractByIndex($p_index, [$p_option, $p_option_value, ...]) + // Description : + // This method supports two synopsis. The first one is historical. + // This method is doing a partial extract of the archive. + // The extracted files or folders are identified by their index in the + // archive (from 0 to n). + // Note that if the index identify a folder, only the folder entry is + // extracted, not all the files included in the archive. + // Parameters : + // $p_index : A single index (integer) or a string of indexes of files to + // extract. The form of the string is "0,4-6,8-12" with only numbers + // and '-' for range or ',' to separate ranges. No spaces or ';' + // are allowed. + // $p_path : Path where the files and directories are to be extracted + // $p_remove_path : First part ('root' part) of the memorized path + // (if any similar) to remove while extracting. + // Options : + // PCLZIP_OPT_PATH : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_EXTRACT_AS_STRING : The files are extracted as strings and + // not as files. + // The resulting content is in a new field 'content' in the file + // structure. + // This option must be used alone (any other options are ignored). + // PCLZIP_CB_PRE_EXTRACT : + // PCLZIP_CB_POST_EXTRACT : + // Return Values : + // 0 on failure, + // The list of the extracted files, with a status of the action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + //function extractByIndex($p_index, options...) + public function extractByIndex($p_index) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::extractByIndex", "index='$p_index', ..."); + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return(0); + } + + // ----- Set default values + $v_options = []; + // $v_path = "./"; + $v_path = ''; + $v_remove_path = ""; + $v_remove_all_path = false; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method"); + + // ----- Default values for option + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = false; + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove form the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_int($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options"); + + // ----- Parse the options + $v_result = $this->privParseOptions( + $v_arg_list, + $v_size, + $v_options, + [PCLZIP_OPT_PATH => 'optional', PCLZIP_OPT_REMOVE_PATH => 'optional', PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', PCLZIP_OPT_ADD_PATH => 'optional', PCLZIP_CB_PRE_EXTRACT => 'optional', PCLZIP_CB_POST_EXTRACT => 'optional', PCLZIP_OPT_SET_CHMOD => 'optional', PCLZIP_OPT_REPLACE_NEWER => 'optional', PCLZIP_OPT_STOP_ON_ERROR => 'optional', PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional'] + ); + if ($v_result != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return 0; + } + + // ----- Set the arguments + if (isset($v_options[PCLZIP_OPT_PATH])) { + $v_path = $v_options[PCLZIP_OPT_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { + $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } + if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { + // ----- Check for '/' in last path char + if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { + $v_path .= '/'; + } + $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; + } + if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) { + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = false; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Option PCLZIP_OPT_EXTRACT_AS_STRING not set."); + } else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Option PCLZIP_OPT_EXTRACT_AS_STRING set."); + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis"); + + // ----- Get the first argument + $v_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_remove_path = $v_arg_list[1]; + } elseif ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return 0; + } + } + } + + // ----- Trace + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "index='$p_index', path='$v_path', remove_path='$v_remove_path', remove_all_path='".($v_remove_path?'true':'false')."'"); + + // ----- Trick + // Here I want to reuse extractByRule(), so I need to parse the $p_index + // with privParseOptions() + $v_arg_trick = [PCLZIP_OPT_BY_INDEX, $p_index]; + $v_options_trick = []; + $v_result = $this->privParseOptions( + $v_arg_trick, + count($v_arg_trick), + $v_options_trick, + [PCLZIP_OPT_BY_INDEX => 'optional'] + ); + if ($v_result != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return 0; + } + $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX]; + + // ----- Call the extracting fct + if (($v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo()); + return(0); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list); + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // delete([$p_option, $p_option_value, ...]) + // Description : + // This method removes files from the archive. + // If no parameters are given, then all the archive is emptied. + // Parameters : + // None or optional arguments. + // Options : + // PCLZIP_OPT_BY_INDEX : + // PCLZIP_OPT_BY_NAME : + // PCLZIP_OPT_BY_EREG : + // PCLZIP_OPT_BY_PREG : + // Return Values : + // 0 on failure, + // The list of the files which are still present in the archive. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + public function delete() + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::delete", ""); + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return(0); + } + + // ----- Set default values + $v_options = []; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method"); + + // ----- Look for arguments + if ($v_size > 0) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Parse the options + $v_result = $this->privParseOptions( + $v_arg_list, + $v_size, + $v_options, + [PCLZIP_OPT_BY_NAME => 'optional', PCLZIP_OPT_BY_EREG => 'optional', PCLZIP_OPT_BY_PREG => 'optional', PCLZIP_OPT_BY_INDEX => 'optional'] + ); + if ($v_result != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return 0; + } + } + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Call the delete fct + $v_list = []; + if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) { + $this->privSwapBackMagicQuotes(); + unset($v_list); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo()); + return(0); + } + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_list); + return $v_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : deleteByIndex() + // Description : + // ***** Deprecated ***** + // delete(PCLZIP_OPT_BY_INDEX, $p_index) should be prefered. + // -------------------------------------------------------------------------------- + public function deleteByIndex($p_index) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::deleteByIndex", "index='$p_index'"); + + $p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list); + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : properties() + // Description : + // This method gives the properties of the archive. + // The properties are : + // nb : Number of files in the archive + // comment : Comment associated with the archive file + // status : not_exist, ok + // Parameters : + // None + // Return Values : + // 0 on failure, + // An array with the archive properties. + // -------------------------------------------------------------------------------- + public function properties() + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::properties", ""); + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return(0); + } + + // ----- Default properties + $v_prop = []; + $v_prop['comment'] = ''; + $v_prop['nb'] = 0; + $v_prop['status'] = 'not_exist'; + + // ----- Look if file exists + if (@is_file($this->zipname)) { + // ----- Open the zip file + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) { + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \'' . $this->zipname . '\' in binary read mode'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), 0); + return 0; + } + + // ----- Read the central directory informations + $v_central_dir = []; + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return 0; + } + + // ----- Close the zip file + $this->privCloseFd(); + + // ----- Set the user attributes + $v_prop['comment'] = $v_central_dir['comment']; + $v_prop['nb'] = $v_central_dir['entries']; + $v_prop['status'] = 'ok'; + } + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_prop); + return $v_prop; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : duplicate() + // Description : + // This method creates an archive by copying the content of an other one. If + // the archive already exist, it is replaced by the new one without any warning. + // Parameters : + // $p_archive : The filename of a valid archive, or + // a valid PclZip object. + // Return Values : + // 1 on success. + // 0 or a negative value on error (error code). + // -------------------------------------------------------------------------------- + public function duplicate($p_archive) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::duplicate", ""); + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Look if the $p_archive is a PclZip object + if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip')) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The parameter is valid PclZip object '".$p_archive->zipname."'"); + // ----- Duplicate the archive + $v_result = $this->privDuplicate($p_archive->zipname); + } elseif (is_string($p_archive)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The parameter is a filename '$p_archive'"); + // ----- Check that $p_archive is a valid zip file + // TBC : Should also check the archive format + if (!is_file($p_archive)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "No file with filename '" . $p_archive . "'"); + $v_result = PCLZIP_ERR_MISSING_FILE; + } else { + // ----- Duplicate the archive + $v_result = $this->privDuplicate($p_archive); + } + } else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); + $v_result = PCLZIP_ERR_INVALID_PARAMETER; + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : merge() + // Description : + // This method merge the $p_archive_to_add archive at the end of the current + // one ($this). + // If the archive ($this) does not exist, the merge becomes a duplicate. + // If the $p_archive_to_add archive does not exist, the merge is a success. + // Parameters : + // $p_archive_to_add : It can be directly the filename of a valid zip archive, + // or a PclZip object archive. + // Return Values : + // 1 on success, + // 0 or negative values on error (see below). + // -------------------------------------------------------------------------------- + public function merge($p_archive_to_add) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::merge", ""); + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0); + return(0); + } + + // ----- Look if the $p_archive_to_add is a PclZip object + if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip')) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The parameter is valid PclZip object"); + // ----- Merge the archive + $v_result = $this->privMerge($p_archive_to_add); + } elseif (is_string($p_archive_to_add)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The parameter is a filename"); + // ----- Create a temporary archive + $v_object_archive = new PclZip($p_archive_to_add); + // ----- Merge the archive + $v_result = $this->privMerge($v_object_archive); + } else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); + $v_result = PCLZIP_ERR_INVALID_PARAMETER; + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + + + // -------------------------------------------------------------------------------- + // Function : errorCode() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + public function errorCode() + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + return(PclErrorCode()); + } else { + return($this->error_code); + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : errorName() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + public function errorName($p_with_code = false) + { + $v_name = [PCLZIP_ERR_NO_ERROR => 'PCLZIP_ERR_NO_ERROR', PCLZIP_ERR_WRITE_OPEN_FAIL => 'PCLZIP_ERR_WRITE_OPEN_FAIL', PCLZIP_ERR_READ_OPEN_FAIL => 'PCLZIP_ERR_READ_OPEN_FAIL', PCLZIP_ERR_INVALID_PARAMETER => 'PCLZIP_ERR_INVALID_PARAMETER', PCLZIP_ERR_MISSING_FILE => 'PCLZIP_ERR_MISSING_FILE', PCLZIP_ERR_FILENAME_TOO_LONG => 'PCLZIP_ERR_FILENAME_TOO_LONG', PCLZIP_ERR_INVALID_ZIP => 'PCLZIP_ERR_INVALID_ZIP', PCLZIP_ERR_BAD_EXTRACTED_FILE => 'PCLZIP_ERR_BAD_EXTRACTED_FILE', PCLZIP_ERR_DIR_CREATE_FAIL => 'PCLZIP_ERR_DIR_CREATE_FAIL', PCLZIP_ERR_BAD_EXTENSION => 'PCLZIP_ERR_BAD_EXTENSION', PCLZIP_ERR_BAD_FORMAT => 'PCLZIP_ERR_BAD_FORMAT', PCLZIP_ERR_DELETE_FILE_FAIL => 'PCLZIP_ERR_DELETE_FILE_FAIL', PCLZIP_ERR_RENAME_FILE_FAIL => 'PCLZIP_ERR_RENAME_FILE_FAIL', PCLZIP_ERR_BAD_CHECKSUM => 'PCLZIP_ERR_BAD_CHECKSUM', PCLZIP_ERR_INVALID_ARCHIVE_ZIP => 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', PCLZIP_ERR_MISSING_OPTION_VALUE => 'PCLZIP_ERR_MISSING_OPTION_VALUE', PCLZIP_ERR_INVALID_OPTION_VALUE => 'PCLZIP_ERR_INVALID_OPTION_VALUE', PCLZIP_ERR_UNSUPPORTED_COMPRESSION => 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', PCLZIP_ERR_UNSUPPORTED_ENCRYPTION => 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION', PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE => 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE', PCLZIP_ERR_DIRECTORY_RESTRICTION => 'PCLZIP_ERR_DIRECTORY_RESTRICTION']; + + if (isset($v_name[$this->error_code])) { + $v_value = $v_name[$this->error_code]; + } else { + $v_value = 'NoName'; + } + + if ($p_with_code) { + return($v_value . ' (' . $this->error_code . ')'); + } else { + return($v_value); + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : errorInfo() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + public function errorInfo($p_full = false) + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + return(PclErrorString()); + } elseif ($p_full) { + return($this->errorName(true) . " : " . $this->error_string); + } else { + return($this->error_string . " [code " . $this->error_code . "]"); + } + } + // -------------------------------------------------------------------------------- + + +// -------------------------------------------------------------------------------- +// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS ***** +// ***** ***** +// ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY ***** +// -------------------------------------------------------------------------------- + + + + // -------------------------------------------------------------------------------- + // Function : privCheckFormat() + // Description : + // This method check that the archive exists and is a valid zip archive. + // Several level of check exists. (futur) + // Parameters : + // $p_level : Level of check. Default 0. + // 0 : Check the first bytes (magic codes) (default value)) + // 1 : 0 + Check the central directory (futur) + // 2 : 1 + Check each file header (futur) + // Return Values : + // true on success, + // false on error, the error code is set. + // -------------------------------------------------------------------------------- + public function privCheckFormat($p_level = 0) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCheckFormat", ""); + $v_result = true; + + // ----- Reset the file system cache + clearstatcache(); + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Look if the file exits + if (!is_file($this->zipname)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '" . $this->zipname . "'"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, false, PclZip::errorInfo()); + return(false); + } + + // ----- Check that the file is readeable + if (!is_readable($this->zipname)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '" . $this->zipname . "'"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, false, PclZip::errorInfo()); + return(false); + } + + // ----- Check the magic code + // TBC + + // ----- Check the central header + // TBC + + // ----- Check each file header + // TBC + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privParseOptions() + // Description : + // This internal methods reads the variable list of arguments ($p_options_list, + // $p_size) and generate an array with the options and values ($v_result_list). + // $v_requested_options contains the options that can be present and those that + // must be present. + // $v_requested_options is an array, with the option value as key, and 'optional', + // or 'mandatory' as value. + // Parameters : + // See above. + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + public function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options = false) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privParseOptions", ""); + $v_result = 1; + + // ----- Read the options + $i = 0; + while ($i < $p_size) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Looking for table index $i, option = '".PclZipUtilOptionText($p_options_list[$i])."(".$p_options_list[$i].")'"); + + // ----- Check if the option is supported + if (!isset($v_requested_options[$p_options_list[$i]])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '" . $p_options_list[$i] . "' for this method"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Look for next option + switch ($p_options_list[$i]) { + // ----- Look for options that request a path value + case PCLZIP_OPT_PATH: + case PCLZIP_OPT_REMOVE_PATH: + case PCLZIP_OPT_ADD_PATH: + // ----- Check the number of parameters + if (($i + 1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Get the value + $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i + 1], false); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'"); + $i++; + break; + + case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION: + // ----- Check the number of parameters + if (($i + 1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Get the value + if ( + is_string($p_options_list[$i + 1]) + && ($p_options_list[$i + 1] != '') + ) { + $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i + 1], false); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'"); + $i++; + } else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." set with an empty value is ignored."); + } + break; + + // ----- Look for options that request an array of string for value + case PCLZIP_OPT_BY_NAME: + // ----- Check the number of parameters + if (($i + 1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i + 1])) { + $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i + 1]; + } elseif (is_array($p_options_list[$i + 1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i + 1]; + } else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'"); + $i++; + break; + + // ----- Look for options that request an EREG or PREG expression + case PCLZIP_OPT_BY_EREG: + case PCLZIP_OPT_BY_PREG: + //case PCLZIP_OPT_CRYPT : + // ----- Check the number of parameters + if (($i + 1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i + 1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i + 1]; + } else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'"); + $i++; + break; + + // ----- Look for options that takes a string + case PCLZIP_OPT_COMMENT: + case PCLZIP_OPT_ADD_COMMENT: + case PCLZIP_OPT_PREPEND_COMMENT: + // ----- Check the number of parameters + if (($i + 1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog( + PCLZIP_ERR_MISSING_OPTION_VALUE, + "Missing parameter value for option '" + . PclZipUtilOptionText($p_options_list[$i]) + . "'" + ); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i + 1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i + 1]; + } else { + // ----- Error log + PclZip::privErrorLog( + PCLZIP_ERR_INVALID_OPTION_VALUE, + "Wrong parameter value for option '" + . PclZipUtilOptionText($p_options_list[$i]) + . "'" + ); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'"); + $i++; + break; + + // ----- Look for options that request an array of index + case PCLZIP_OPT_BY_INDEX: + // ----- Check the number of parameters + if (($i + 1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Get the value + $v_work_list = []; + if (is_string($p_options_list[$i + 1])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is a string '".$p_options_list[$i+1]."'"); + // ----- Remove spaces + $p_options_list[$i + 1] = strtr($p_options_list[$i + 1], ' ', ''); + // ----- Parse items + $v_work_list = explode(",", $p_options_list[$i + 1]); + } elseif (is_int($p_options_list[$i + 1])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is an integer '".$p_options_list[$i+1]."'"); + $v_work_list[0] = $p_options_list[$i + 1] . '-' . $p_options_list[$i + 1]; + } elseif (is_array($p_options_list[$i + 1])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is an array"); + $v_work_list = $p_options_list[$i + 1]; + } else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Reduce the index list + // each index item in the list must be a couple with a start and + // an end value : [0,3], [5-5], [8-10], ... + // ----- Check the format of each item + $v_sort_flag = false; + $v_sort_value = 0; + $counter = count($v_work_list); + for ($j = 0; $j < $counter; $j++) { + // ----- Explode the item + $v_item_list = explode("-", $v_work_list[$j]); + $v_size_item_list = count($v_item_list); + + // ----- TBC : Here we might check that each item is a + // real integer ... + + // ----- Look for single value + if ($v_size_item_list == 1) { + // ----- Set the option value + $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0]; + $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[0]; + } elseif ($v_size_item_list == 2) { + // ----- Set the option value + $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0]; + $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[1]; + } else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Too many values in index range for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extracted index item = [".$v_result_list[$p_options_list[$i]][$j]['start'].",".$v_result_list[$p_options_list[$i]][$j]['end']."]"); + + // ----- Look for list sort + if ($v_result_list[$p_options_list[$i]][$j]['start'] < $v_sort_value) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The list should be sorted ..."); + $v_sort_flag = true; + + // ----- TBC : An automatic sort should be writen ... + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Invalid order of index range for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + $v_sort_value = $v_result_list[$p_options_list[$i]][$j]['start']; + } + + // ----- Sort the items + if ($v_sort_flag) { + // TBC : To Be Completed + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "List sorting is not yet write ..."); + } + + // ----- Next option + $i++; + break; + + // ----- Look for options that request no value + case PCLZIP_OPT_REMOVE_ALL_PATH: + case PCLZIP_OPT_EXTRACT_AS_STRING: + case PCLZIP_OPT_NO_COMPRESSION: + case PCLZIP_OPT_EXTRACT_IN_OUTPUT: + case PCLZIP_OPT_REPLACE_NEWER: + case PCLZIP_OPT_STOP_ON_ERROR: + $v_result_list[$p_options_list[$i]] = true; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'"); + break; + + // ----- Look for options that request an octal value + case PCLZIP_OPT_SET_CHMOD: + // ----- Check the number of parameters + if (($i + 1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Get the value + $v_result_list[$p_options_list[$i]] = $p_options_list[$i + 1]; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'"); + $i++; + break; + + // ----- Look for options that request a call-back + case PCLZIP_CB_PRE_EXTRACT: + case PCLZIP_CB_POST_EXTRACT: + case PCLZIP_CB_PRE_ADD: + case PCLZIP_CB_POST_ADD: + /* for futur use + case PCLZIP_CB_PRE_DELETE : + case PCLZIP_CB_POST_DELETE : + case PCLZIP_CB_PRE_LIST : + case PCLZIP_CB_POST_LIST : + */ + // ----- Check the number of parameters + if (($i + 1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Get the value + $v_function_name = $p_options_list[$i + 1]; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "call-back ".PclZipUtilOptionText($p_options_list[$i])." = '".$v_function_name."'"); + + // ----- Check that the value is a valid existing function + if (!function_exists($v_function_name)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '" . $v_function_name . "()' is not an existing function for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Set the attribute + $v_result_list[$p_options_list[$i]] = $v_function_name; + $i++; + break; + + default: + // ----- Error log + PclZip::privErrorLog( + PCLZIP_ERR_INVALID_PARAMETER, + "Unknown parameter '" + . $p_options_list[$i] . "'" + ); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Next options + $i++; + } + + // ----- Look for mandatory options + if ($v_requested_options !== false) { + for ($key = reset($v_requested_options); $key = key($v_requested_options); $key = next($v_requested_options)) { + // ----- Look for mandatory option + if ($v_requested_options[$key] == 'mandatory') { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Detect a mandatory option : ".PclZipUtilOptionText($key)."(".$key.")"); + // ----- Look if present + if (!isset($v_result_list[$key])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter " . PclZipUtilOptionText($key) . "(" . $key . ")"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } + } + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privFileDescrParseAtt() + // Description : + // Parameters : + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + public function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options = false) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privFileDescrParseAtt", ""); + $v_result = 1; + + // ----- For each file in the list check the attributes + foreach ($p_file_list as $v_key => $v_value) { + // ----- Check if the option is supported + if (!isset($v_requested_options[$v_key])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file attribute '" . $v_key . "' for this file"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Look for attribute + switch ($v_key) { + case PCLZIP_ATT_FILE_NAME: + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type " . gettype($v_value) . ". String expected for attribute '" . PclZipUtilOptionText($v_key) . "'"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + $p_filedescr['filename'] = PclZipUtilPathReduction($v_value); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'"); + + if ($p_filedescr['filename'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '" . PclZipUtilOptionText($v_key) . "'"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + break; + + case PCLZIP_ATT_FILE_NEW_SHORT_NAME: + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type " . gettype($v_value) . ". String expected for attribute '" . PclZipUtilOptionText($v_key) . "'"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'"); + + if ($p_filedescr['new_short_name'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty short filename for attribute '" . PclZipUtilOptionText($v_key) . "'"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + break; + + case PCLZIP_ATT_FILE_NEW_FULL_NAME: + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type " . gettype($v_value) . ". String expected for attribute '" . PclZipUtilOptionText($v_key) . "'"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'"); + + if ($p_filedescr['new_full_name'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty full filename for attribute '" . PclZipUtilOptionText($v_key) . "'"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + break; + + default: + // ----- Error log + PclZip::privErrorLog( + PCLZIP_ERR_INVALID_PARAMETER, + "Unknown parameter '" . $v_key . "'" + ); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Look for mandatory options + if ($v_requested_options !== false) { + for ($key = reset($v_requested_options); $key = key($v_requested_options); $key = next($v_requested_options)) { + // ----- Look for mandatory option + if ($v_requested_options[$key] == 'mandatory') { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Detect a mandatory option : ".PclZipUtilOptionText($key)."(".$key.")"); + // ----- Look if present + if (!isset($p_file_list[$key])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter " . PclZipUtilOptionText($key) . "(" . $key . ")"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } + } + } + + // end foreach + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privFileDescrExpand() + // Description : + // Parameters : + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + public function privFileDescrExpand(&$p_filedescr_list, &$p_options) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privFileDescrExpand", ""); + $v_result = 1; + + // ----- Create a result list + $v_result_list = []; + // ----- Look each entry + $counter = count($p_filedescr_list); + + // ----- Look each entry + for ($i = 0; $i < $counter; $i++) { + // ----- Get filedescr + $v_descr = $p_filedescr_list[$i]; + + // ----- Reduce the filename + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filedescr before reduction :'".$v_descr['filename']."'"); + $v_descr['filename'] = PclZipUtilTranslateWinPath($v_descr['filename']); + $v_descr['filename'] = PclZipUtilPathReduction($v_descr['filename']); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filedescr after reduction :'".$v_descr['filename']."'"); + + // ----- Get type of descr + if (!file_exists($v_descr['filename'])) { + // ----- Error log + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$v_descr['filename']."' does not exists"); + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '" . $v_descr['filename'] . "' does not exists"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + if (@is_file($v_descr['filename'])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "This is a file"); + $v_descr['type'] = 'file'; + } elseif (@is_dir($v_descr['filename'])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "This is a folder"); + $v_descr['type'] = 'folder'; + } elseif (@is_link($v_descr['filename'])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Unsupported file type : link"); + // skip + continue; + } else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Unsupported file type : unknown type"); + // skip + continue; + } + + // ----- Calculate the stored filename + $this->privCalculateStoredFilename($v_descr, $p_options); + + // ----- Add the descriptor in result list + $v_result_list[count($v_result_list)] = $v_descr; + + // ----- Look for folder + if ($v_descr['type'] == 'folder') { + // ----- List of items in folder + $v_dirlist_descr = []; + $v_dirlist_nb = 0; + if ($v_folder_handler = @opendir($v_descr['filename'])) { + while (($v_item_handler = @readdir($v_folder_handler)) !== false) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Looking for '".$v_item_handler."' in the directory"); + + // ----- Skip '.' and '..' + if (($v_item_handler == '.') || ($v_item_handler == '..')) { + continue; + } + + // ----- Compose the full filename + $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'] . '/' . $v_item_handler; + + // ----- Look for different stored filename + // Because the name of the folder was changed, the name of the + // files/sub-folders also change + if ($v_descr['stored_filename'] != $v_descr['filename']) { + $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'] . '/' . $v_item_handler; + } + + $v_dirlist_nb++; + } + } else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to open dir '".$v_descr['filename']."' in read mode. Skipped."); + // TBC : unable to open folder in read mode + } + + // ----- Expand each element of the list + if ($v_dirlist_nb != 0) { + // ----- Expand + if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Concat the resulting list + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Merging result list (size '".sizeof($v_result_list)."') with dirlist (size '".sizeof($v_dirlist_descr)."')"); + $v_result_list = array_merge($v_result_list, $v_dirlist_descr); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "merged result list is size '".sizeof($v_result_list)."'"); + } else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Nothing in this folder to expand."); + } + + // ----- Free local array + unset($v_dirlist_descr); + } + } + + // ----- Get the result list + $p_filedescr_list = $v_result_list; + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCreate() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privCreate($p_filedescr_list, &$p_result_list, &$p_options) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCreate", "list"); + $v_result = 1; + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the file in write mode + if (($v_result = $this->privOpenFd('wb')) != 1) { + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Add the list of files + $v_result = $this->privAddList($p_filedescr_list, $p_result_list, $p_options); + + // ----- Close + $this->privCloseFd(); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAdd() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privAdd($p_filedescr_list, &$p_result_list, &$p_options) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAdd", "list"); + $v_result = 1; + + // ----- Look if the archive exists or is empty + if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive does not exist, or is empty, create it."); + + // ----- Do a create + $v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the zip file + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + if (($v_result = $this->privOpenFd('rb')) != 1) { + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = []; + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Go to beginning of File + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'"); + @rewind($this->zip_fd); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'"); + + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR . uniqid('pclzip-') . '.tmp'; + + // ----- Open the temporary file in write mode + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \'' . $v_zip_temp_name . '\' in binary write mode'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = $v_central_dir['offset']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes"); + $v_buffer = fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Swap the file descriptor + // Here is a trick : I swap the temporary fd with the zip fd, in order to use + // the following methods on the temporary fil and not the real archive + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Add the files + $v_header_list = []; + if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) { + fclose($v_zip_temp_fd); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + $this->privSwapBackMagicQuotes(); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($this->zip_fd); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "New offset of central dir : $v_offset"); + + // ----- Copy the block of file headers from the old archive + $v_size = $v_central_dir['size']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes"); + $v_buffer = @fread($v_zip_temp_fd, $v_read_size); + @fwrite($this->zip_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + // ----- Create the Central Dir files header + $counter = count($v_header_list); + + // ----- Create the Central Dir files header + for ($i = 0, $v_count = 0; $i < $counter; $i++) { + // ----- Create the file header + if ($v_header_list[$i]['status'] == 'ok') { + if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) { + fclose($v_zip_temp_fd); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + $this->privSwapBackMagicQuotes(); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + $v_count++; + } + + // ----- Transform the header to a 'usable' info + $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } + + // ----- Zip file comment + $v_comment = $v_central_dir['comment']; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + } + if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) { + $v_comment .= $p_options[PCLZIP_OPT_ADD_COMMENT]; + } + if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT] . $v_comment; + } + + // ----- Calculate the size of the central header + $v_size = @ftell($this->zip_fd) - $v_offset; + + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_count + $v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1) { + // ----- Reset the file list + unset($v_header_list); + $this->privSwapBackMagicQuotes(); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Swap back the file descriptor + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Close + $this->privCloseFd(); + + // ----- Close the temporary file + @fclose($v_zip_temp_fd); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); + + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privOpenFd() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + public function privOpenFd($p_mode) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privOpenFd", 'mode='.$p_mode); + $v_result = 1; + + // ----- Look if already open + if ($this->zip_fd != 0) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \'' . $this->zipname . '\' already open'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Open the zip file + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Open file in '.$p_mode.' mode'); + if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \'' . $this->zipname . '\' in ' . $p_mode . ' mode'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCloseFd() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + public function privCloseFd() + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCloseFd", ""); + $v_result = 1; + + if ($this->zip_fd != 0) + @fclose($this->zip_fd); + $this->zip_fd = 0; + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddList() + // Description : + // $p_add_dir and $p_remove_dir will give the ability to memorize a path which is + // different from the real path of the file. This is usefull if you want to have PclTar + // running in any directory, and memorize relative path from an other directory. + // Parameters : + // $p_list : An array containing the file or directory names to add in the tar + // $p_result_list : list of added files with their properties (specially the status field) + // $p_add_dir : Path to add in the filename path archived + // $p_remove_dir : Path to remove in the filename path archived + // Return Values : + // -------------------------------------------------------------------------------- +// function privAddList($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options) + public function privAddList($p_filedescr_list, &$p_result_list, &$p_options) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAddList", "list"); + $v_result = 1; + + // ----- Add the files + $v_header_list = []; + if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) { + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($this->zip_fd); + // ----- Create the Central Dir files header + $counter = count($v_header_list); + + // ----- Create the Central Dir files header + for ($i = 0,$v_count = 0; $i < $counter; $i++) { + // ----- Create the file header + if ($v_header_list[$i]['status'] == 'ok') { + if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) { + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + $v_count++; + } + + // ----- Transform the header to a 'usable' info + $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } + + // ----- Zip file comment + $v_comment = ''; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + } + + // ----- Calculate the size of the central header + $v_size = @ftell($this->zip_fd) - $v_offset; + + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1) { + // ----- Reset the file list + unset($v_header_list); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddFileList() + // Description : + // Parameters : + // $p_filedescr_list : An array containing the file description + // or directory names to add in the zip + // $p_result_list : list of added files with their properties (specially the status field) + // Return Values : + // -------------------------------------------------------------------------------- + public function privAddFileList($p_filedescr_list, &$p_result_list, &$p_options) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAddFileList", "filedescr_list"); + $v_result = 1; + $v_header = []; + + // ----- Recuperate the current number of elt in list + $v_nb = count($p_result_list); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Before add, list have ".$v_nb." elements"); + + // ----- Loop on the files + for ($j = 0; ($j < count($p_filedescr_list)) && ($v_result == 1); $j++) { + // ----- Format the filename + $p_filedescr_list[$j]['filename'] + = PclZipUtilTranslateWinPath($p_filedescr_list[$j]['filename'], false); + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Looking for file '".$p_filedescr_list[$j]['filename']."'"); + + // ----- Skip empty file names + // TBC : Can this be possible ? not checked in DescrParseAtt ? + if ($p_filedescr_list[$j]['filename'] == "") { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Skip empty filename"); + continue; + } + + // ----- Check the filename + if (!file_exists($p_filedescr_list[$j]['filename'])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$p_filedescr_list[$j]['filename']."' does not exists"); + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '" . $p_filedescr_list[$j]['filename'] . "' does not exists"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Look if it is a file or a dir with no all path remove option + if ( + (is_file($p_filedescr_list[$j]['filename'])) + || ( is_dir($p_filedescr_list[$j]['filename']) + && ( !isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH]) + || !$p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) + ) { + // ----- Add the file + $v_result = $this->privAddFile( + $p_filedescr_list[$j], + $v_header, + $p_options + ); + if ($v_result != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Store the file infos + $p_result_list[$v_nb++] = $v_header; + } + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "After add, list have ".$v_nb." elements"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privAddFile($p_filedescr, &$p_header, &$p_options) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAddFile", "filename='".$p_filedescr['filename']."'"); + $v_result = 1; + + // ----- Working variable + $p_filename = $p_filedescr['filename']; + + // TBC : Already done in the fileAtt check ... ? + if ($p_filename == "") { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file list parameter (invalid or empty list)"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Look for a stored different filename + if (isset($p_filedescr['stored_filename'])) { + $v_stored_filename = $p_filedescr['stored_filename']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'Stored filename is NOT the same "'.$v_stored_filename.'"'); + } else { + $v_stored_filename = $p_filedescr['stored_filename']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'Stored filename is the same'); + } + + // ----- Set the file properties + clearstatcache(); + $p_header['version'] = 20; + $p_header['version_extracted'] = 10; + $p_header['flag'] = 0; + $p_header['compression'] = 0; + $p_header['mtime'] = filemtime($p_filename); + $p_header['crc'] = 0; + $p_header['compressed_size'] = 0; + $p_header['size'] = filesize($p_filename); + $p_header['filename_len'] = strlen($p_filename); + $p_header['extra_len'] = 0; + $p_header['comment_len'] = 0; + $p_header['disk'] = 0; + $p_header['internal'] = 0; + // $p_header['external'] = (is_file($p_filename)?0xFE49FFE0:0x41FF0010); + $p_header['external'] = (is_file($p_filename) ? 0x00000000 : 0x00000010); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Header external extension '".sprintf("0x%X",$p_header['external'])."'"); + $p_header['offset'] = 0; + $p_header['filename'] = $p_filename; + $p_header['stored_filename'] = $v_stored_filename; + $p_header['extra'] = ''; + $p_header['comment'] = ''; + $p_header['status'] = 'ok'; + $p_header['index'] = -1; + + // ----- Look for pre-add callback + if (isset($p_options[PCLZIP_CB_PRE_ADD])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A pre-callback '".$p_options[PCLZIP_CB_PRE_ADD]."()') is defined for the extraction"); + + // ----- Generate a local information + $v_local_header = []; + $this->privConvertHeader2FileInfo($p_header, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + eval('$v_result = ' . $p_options[PCLZIP_CB_PRE_ADD] . '(PCLZIP_CB_PRE_ADD, $v_local_header);'); + if ($v_result == 0) { + // ----- Change the file status + $p_header['status'] = "skipped"; + $v_result = 1; + } + + // ----- Update the informations + // Only some fields can be modified + if ($p_header['stored_filename'] != $v_local_header['stored_filename']) { + $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "New stored filename is '".$p_header['stored_filename']."'"); + } + } + + // ----- Look for empty stored filename + if ($p_header['stored_filename'] == "") { + $p_header['status'] = "filtered"; + } + + // ----- Check the path length + if (strlen($p_header['stored_filename']) > 0xFF) { + $p_header['status'] = 'filename_too_long'; + } + + // ----- Look if no error, or file not skipped + if ($p_header['status'] == 'ok') { + // ----- Look for a file + if (is_file($p_filename)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "'".$p_filename."' is a file"); + // ----- Open the source file + if (($v_file = @fopen($p_filename, "rb")) == 0) { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File will not be compressed"); + // ----- Read the file content + $v_content_compressed = @fread($v_file, $p_header['size']); + + // ----- Calculate the CRC + $p_header['crc'] = @crc32($v_content_compressed); + + // ----- Set header parameters + $p_header['compressed_size'] = $p_header['size']; + $p_header['compression'] = 0; + } else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File will be compressed"); + // ----- Read the file content + $v_content = @fread($v_file, $p_header['size']); + + // ----- Calculate the CRC + $p_header['crc'] = @crc32($v_content); + + // ----- Compress the file + $v_content_compressed = @gzdeflate($v_content); + + // ----- Set header parameters + $p_header['compressed_size'] = strlen($v_content_compressed); + $p_header['compression'] = 8; + } + + // ----- Look for encryption + /* + if ((isset($p_options[PCLZIP_OPT_CRYPT])) + && ($p_options[PCLZIP_OPT_CRYPT] != "")) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File need to be crypted ...."); + + // Should be a random header + $v_header = 'xxxxxxxxxxxx'; + $v_content_compressed = PclZipUtilZipEncrypt($v_content_compressed, + $p_header['compressed_size'], + $v_header, + $p_header['crc'], + "test"); + + $p_header['compressed_size'] += 12; + $p_header['flag'] = 1; + + // ----- Add the header to the data + $v_content_compressed = $v_header.$v_content_compressed; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Size after header : ".strlen($v_content_compressed).""); + } + */ + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + @fclose($v_file); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Write the compressed (or not) content + @fwrite( + $this->zip_fd, + $v_content_compressed, + $p_header['compressed_size'] + ); + + // ----- Close the file + @fclose($v_file); + } + + // ----- Look for a directory + else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "'".$p_filename."' is a folder"); + // ----- Look for directory last '/' + if (@substr($p_header['stored_filename'], -1) != '/') { + $p_header['stored_filename'] .= '/'; + } + + // ----- Set the file properties + $p_header['size'] = 0; + //$p_header['external'] = 0x41FF0010; // Value for a folder : to be checked + $p_header['external'] = 0x00000010; // Value for a folder : to be checked + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + } + } + + // ----- Look for post-add callback + if (isset($p_options[PCLZIP_CB_POST_ADD])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A post-callback '".$p_options[PCLZIP_CB_POST_ADD]."()') is defined for the extraction"); + + // ----- Generate a local information + $v_local_header = []; + $this->privConvertHeader2FileInfo($p_header, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + eval('$v_result = ' . $p_options[PCLZIP_CB_POST_ADD] . '(PCLZIP_CB_POST_ADD, $v_local_header);'); + if ($v_result == 0) { + // ----- Ignored + $v_result = 1; + } + + // ----- Update the informations + // Nothing can be modified + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCalculateStoredFilename() + // Description : + // Based on file descriptor properties and global options, this method + // calculate the filename that will be stored in the archive. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privCalculateStoredFilename(&$p_filedescr, &$p_options) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCalculateStoredFilename", "filename='".$p_filedescr['filename']."'"); + $v_result = 1; + + // ----- Working variables + $p_filename = $p_filedescr['filename']; + if (isset($p_options[PCLZIP_OPT_ADD_PATH])) { + $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH]; + } else { + $p_add_dir = ''; + } + if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) { + $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH]; + } else { + $p_remove_dir = ''; + } + if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } else { + $p_remove_all_dir = 0; + } + + // ----- Look for full name change + if (isset($p_filedescr['new_full_name'])) { + $v_stored_filename = $p_filedescr['new_full_name']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Changing full name of '".$p_filename."' for '".$v_stored_filename."'"); + } + + // ----- Look for path and/or short name change + else { + // ----- Look for short name change + if (isset($p_filedescr['new_short_name'])) { + $v_path_info = pathinfo($p_filename); + $v_dir = ''; + if ($v_path_info['dirname'] != '') { + $v_dir = $v_path_info['dirname'] . '/'; + } + $v_stored_filename = $v_dir . $p_filedescr['new_short_name']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Changing short name of '".$p_filename."' for '".$v_stored_filename."'"); + } else { + // ----- Calculate the stored filename + $v_stored_filename = $p_filename; + } + + // ----- Look for all path to remove + if ($p_remove_all_dir) { + $v_stored_filename = basename($p_filename); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Remove all path selected change '".$p_filename."' for '".$v_stored_filename."'"); + } elseif ($p_remove_dir != "") { + if (substr($p_remove_dir, -1) != '/') + $p_remove_dir .= "/"; + if ( + (substr($p_filename, 0, 2) == "./") + || (substr($p_remove_dir, 0, 2) == "./") + ) { + if ( + (substr($p_filename, 0, 2) == "./") + && (substr($p_remove_dir, 0, 2) != "./") + ) { + $p_remove_dir = "./" . $p_remove_dir; + } + if ( + (substr($p_filename, 0, 2) != "./") + && (substr($p_remove_dir, 0, 2) == "./") + ) { + $p_remove_dir = substr($p_remove_dir, 2); + } + } + $v_compare = PclZipUtilPathInclusion( + $p_remove_dir, + $v_stored_filename + ); + if ($v_compare > 0) { + if ($v_compare == 2) { + $v_stored_filename = ""; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Path to remove is the current folder"); + } else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Remove path '$p_remove_dir' in file '$v_stored_filename'"); + $v_stored_filename = substr( + $v_stored_filename, + strlen($p_remove_dir) + ); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Result is '$v_stored_filename'"); + } + } + } + // ----- Look for path to add + if ($p_add_dir != "") { + if (substr($p_add_dir, -1) == "/") + $v_stored_filename = $p_add_dir . $v_stored_filename; + else $v_stored_filename = $p_add_dir . "/" . $v_stored_filename; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Add path '$p_add_dir' in file '$p_filename' = '$v_stored_filename'"); + } + } + + // ----- Filename (reduce the path of stored name) + $v_stored_filename = PclZipUtilPathReduction($v_stored_filename); + $p_filedescr['stored_filename'] = $v_stored_filename; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Stored filename will be '".$p_filedescr['stored_filename']."', strlen ".strlen($p_filedescr['stored_filename'])); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privWriteFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privWriteFileHeader(&$p_header) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privWriteFileHeader", 'file="'.$p_header['filename'].'", stored as "'.$p_header['stored_filename'].'"'); + $v_result = 1; + + // ----- Store the offset position of the file + $p_header['offset'] = ftell($this->zip_fd); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'File offset of the header :'.$p_header['offset']); + + // ----- Transform UNIX mtime to DOS format mdate/mtime + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\''); + $v_date = getdate($p_header['mtime']); + $v_mtime = ($v_date['hours'] << 11) + ($v_date['minutes'] << 5) + $v_date['seconds'] / 2; + $v_mdate = (($v_date['year'] - 1980) << 9) + ($v_date['mon'] << 5) + $v_date['mday']; + + // ----- Packed data + $v_binary_data = pack( + "VvvvvvVVVvv", + 0x04034b50, + $p_header['version_extracted'], + $p_header['flag'], + $p_header['compression'], + $v_mtime, + $v_mdate, + $p_header['crc'], + $p_header['compressed_size'], + $p_header['size'], + strlen($p_header['stored_filename']), + $p_header['extra_len'] + ); + + // ----- Write the first 148 bytes of the header in the archive + fwrite($this->zip_fd, $v_binary_data, 30); + + // ----- Write the variable fields + if (strlen($p_header['stored_filename']) != 0) { + fwrite($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); + } + if ($p_header['extra_len'] != 0) { + fwrite($this->zip_fd, $p_header['extra'], $p_header['extra_len']); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privWriteCentralFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privWriteCentralFileHeader(&$p_header) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privWriteCentralFileHeader", 'file="'.$p_header['filename'].'", stored as "'.$p_header['stored_filename'].'"'); + $v_result = 1; + + // TBC + //for(reset($p_header); $key = key($p_header); next($p_header)) { + // //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "header[$key] = ".$p_header[$key]); + //} + + // ----- Transform UNIX mtime to DOS format mdate/mtime + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\''); + $v_date = getdate($p_header['mtime']); + $v_mtime = ($v_date['hours'] << 11) + ($v_date['minutes'] << 5) + $v_date['seconds'] / 2; + $v_mdate = (($v_date['year'] - 1980) << 9) + ($v_date['mon'] << 5) + $v_date['mday']; + + // ----- Packed data + $v_binary_data = pack( + "VvvvvvvVVVvvvvvVV", + 0x02014b50, + $p_header['version'], + $p_header['version_extracted'], + $p_header['flag'], + $p_header['compression'], + $v_mtime, + $v_mdate, + $p_header['crc'], + $p_header['compressed_size'], + $p_header['size'], + strlen($p_header['stored_filename']), + $p_header['extra_len'], + $p_header['comment_len'], + $p_header['disk'], + $p_header['internal'], + $p_header['external'], + $p_header['offset'] + ); + + // ----- Write the 42 bytes of the header in the zip file + fwrite($this->zip_fd, $v_binary_data, 46); + + // ----- Write the variable fields + if (strlen($p_header['stored_filename']) != 0) { + fwrite($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); + } + if ($p_header['extra_len'] != 0) { + fwrite($this->zip_fd, $p_header['extra'], $p_header['extra_len']); + } + if ($p_header['comment_len'] != 0) { + fwrite($this->zip_fd, $p_header['comment'], $p_header['comment_len']); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privWriteCentralHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privWriteCentralHeader", 'nb_entries='.$p_nb_entries.', size='.$p_size.', offset='.$p_offset.', comment="'.$p_comment.'"'); + $v_result = 1; + + // ----- Packed data + $v_binary_data = pack( + "VvvvvVVv", + 0x06054b50, + 0, + 0, + $p_nb_entries, + $p_nb_entries, + $p_size, + $p_offset, + strlen($p_comment) + ); + + // ----- Write the 22 bytes of the header in the zip file + fwrite($this->zip_fd, $v_binary_data, 22); + + // ----- Write the variable fields + if (strlen($p_comment) != 0) { + fwrite($this->zip_fd, $p_comment, strlen($p_comment)); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privList() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privList(&$p_list) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privList", "list"); + $v_result = 1; + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the zip file + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) { + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \'' . $this->zipname . '\' in binary read mode'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Read the central directory informations + $v_central_dir = []; + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Go to beginning of Central Dir + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Offset : ".$v_central_dir['offset']."'"); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position in file : ".ftell($this->zip_fd)."'"); + @rewind($this->zip_fd); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position in file : ".ftell($this->zip_fd)."'"); + if (@fseek($this->zip_fd, $v_central_dir['offset'])) { + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position in file : ".ftell($this->zip_fd)."'"); + + // ----- Read each entry + for ($i = 0; $i < $v_central_dir['entries']; $i++) { + // ----- Read the file header + if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) { + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + $v_header['index'] = $i; + + // ----- Get the only interesting attributes + $this->privConvertHeader2FileInfo($v_header, $p_list[$i]); + unset($v_header); + } + + // ----- Close the zip file + $this->privCloseFd(); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privConvertHeader2FileInfo() + // Description : + // This function takes the file informations from the central directory + // entries and extract the interesting parameters that will be given back. + // The resulting file infos are set in the array $p_info + // $p_info['filename'] : Filename with full path. Given by user (add), + // extracted in the filesystem (extract). + // $p_info['stored_filename'] : Stored filename in the archive. + // $p_info['size'] = Size of the file. + // $p_info['compressed_size'] = Compressed size of the file. + // $p_info['mtime'] = Last modification date of the file. + // $p_info['comment'] = Comment associated with the file. + // $p_info['folder'] = true/false : indicates if the entry is a folder or not. + // $p_info['status'] = status of the action on the file. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privConvertHeader2FileInfo($p_header, &$p_info) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privConvertHeader2FileInfo", "Filename='".$p_header['filename']."'"); + $v_result = 1; + + // ----- Get the interesting attributes + $p_info['filename'] = $p_header['filename']; + $p_info['stored_filename'] = $p_header['stored_filename']; + $p_info['size'] = $p_header['size']; + $p_info['compressed_size'] = $p_header['compressed_size']; + $p_info['mtime'] = $p_header['mtime']; + $p_info['comment'] = $p_header['comment']; + $p_info['folder'] = (($p_header['external'] & 0x00000010) == 0x00000010); + $p_info['index'] = $p_header['index']; + $p_info['status'] = $p_header['status']; + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractByRule() + // Description : + // Extract a file or directory depending of rules (by index, by name, ...) + // Parameters : + // $p_file_list : An array where will be placed the properties of each + // extracted file + // $p_path : Path to add while writing the extracted files + // $p_remove_path : Path to remove (from the file memorized path) while writing the + // extracted files. If the path does not match the file path, + // the file is extracted with its memorized path. + // $p_remove_path does not apply to 'list' mode. + // $p_path and $p_remove_path are commulative. + // Return Values : + // 1 on success,0 or less on error (see error code list) + // -------------------------------------------------------------------------------- + public function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privExtractByRule", "path='$p_path', remove_path='$p_remove_path', remove_all_path='".($p_remove_all_path?'true':'false')."'"); + $v_result = 1; + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Check the path + if ( + ($p_path == "") + || ( (substr($p_path, 0, 1) != "/") + && (substr($p_path, 0, 3) != "../") + && (substr($p_path, 1, 2) != ":/")) + ) + $p_path = "./" . $p_path; + + // ----- Reduce the path last (and duplicated) '/' + if (($p_path != "./") && ($p_path != "/")) { + // ----- Look for the path end '/' + while (substr($p_path, -1) == "/") { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Destination path [$p_path] ends by '/'"); + $p_path = substr($p_path, 0, strlen($p_path) - 1); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Modified to [$p_path]"); + } + } + + // ----- Look for path to remove format (should end by /) + if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/')) { + $p_remove_path .= '/'; + } + + // ----- Open the zip file + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + if (($v_result = $this->privOpenFd('rb')) != 1) { + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = []; + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Start at beginning of Central Dir + $v_pos_entry = $v_central_dir['offset']; + + // ----- Read each entry + $j_start = 0; + for ($i = 0, $v_nb_extracted = 0; $i < $v_central_dir['entries']; $i++) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Read next file header entry : '$i'"); + + // ----- Read next Central dir entry + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Position before rewind : ".ftell($this->zip_fd)."'"); + @rewind($this->zip_fd); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Position after rewind : ".ftell($this->zip_fd)."'"); + if (@fseek($this->zip_fd, $v_pos_entry)) { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position after fseek : ".ftell($this->zip_fd)."'"); + + // ----- Read the file header + $v_header = []; + if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Store the index + $v_header['index'] = $i; + + // ----- Store the file position + $v_pos_entry = ftell($this->zip_fd); + + // ----- Look for the specific extract rules + $v_extract = false; + + // ----- Look for extract by name rule + if ( + (isset($p_options[PCLZIP_OPT_BY_NAME])) + && ($p_options[PCLZIP_OPT_BY_NAME] != 0) + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByName'"); + // ----- Look if the filename is in the list + for ($j = 0; ($j < count($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_extract); $j++) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Compare with file '".$p_options[PCLZIP_OPT_BY_NAME][$j]."'"); + + // ----- Look for a directory + if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The searched item is a directory"); + + // ----- Look if the directory is in the filename path + if ( + (strlen($v_header['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) + && (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j]) + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The directory is in the file path"); + $v_extract = true; + } + } + // ----- Look for a filename + elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The file is the right one."); + $v_extract = true; + } + } + } elseif ( + (isset($p_options[PCLZIP_OPT_BY_EREG])) + && ($p_options[PCLZIP_OPT_BY_EREG] != "") + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract by ereg '".$p_options[PCLZIP_OPT_BY_EREG]."'"); + if (preg_match($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression"); + $v_extract = true; + } + } elseif ( + (isset($p_options[PCLZIP_OPT_BY_PREG])) + && ($p_options[PCLZIP_OPT_BY_PREG] != "") + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByEreg'"); + if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression"); + $v_extract = true; + } + } elseif ( + (isset($p_options[PCLZIP_OPT_BY_INDEX])) + && ($p_options[PCLZIP_OPT_BY_INDEX] != 0) + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByIndex'"); + // ----- Look if the index is in the list + for ($j = $j_start; ($j < count($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_extract); $j++) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Look if index '$i' is in [".$p_options[PCLZIP_OPT_BY_INDEX][$j]['start'].",".$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']."]"); + + if (($i >= $p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i <= $p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Found as part of an index range"); + $v_extract = true; + } + if ($i >= $p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Do not look this index range for next loop"); + $j_start = $j + 1; + } + + if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start'] > $i) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Index range is greater than index, stop loop"); + break; + } + } + } else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with no rule (extract all)"); + $v_extract = true; + } + + // ----- Check compression method + if ( + ($v_extract) + && ( ($v_header['compression'] != 8) + && ($v_header['compression'] != 0)) + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unsupported compression method (".$v_header['compression'].")"); + $v_header['status'] = 'unsupported_compression'; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + if ( + (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR] === true) + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped"); + + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog( + PCLZIP_ERR_UNSUPPORTED_COMPRESSION, + "Filename '" . $v_header['stored_filename'] . "' is " + . "compressed by an unsupported compression " + . "method (" . $v_header['compression'] . ") " + ); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } + + // ----- Check encrypted files + if (($v_extract) && (($v_header['flag'] & 1) == 1)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unsupported file encryption"); + $v_header['status'] = 'unsupported_encryption'; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + if ( + (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR] === true) + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped"); + + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog( + PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, + "Unsupported encryption for " + . " filename '" . $v_header['stored_filename'] + . "'" + ); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } + + // ----- Look for real extraction + if (($v_extract) && ($v_header['status'] != 'ok')) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "No need for extract"); + $v_result = $this->privConvertHeader2FileInfo( + $v_header, + $p_file_list[$v_nb_extracted++] + ); + if ($v_result != 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + $v_extract = false; + } + + // ----- Look for real extraction + if ($v_extract) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file '".$v_header['filename']."', index '$i'"); + + // ----- Go to the file position + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position before rewind : ".ftell($this->zip_fd)."'"); + @rewind($this->zip_fd); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after rewind : ".ftell($this->zip_fd)."'"); + if (@fseek($this->zip_fd, $v_header['offset'])) { + // ----- Close the zip file + $this->privCloseFd(); + + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after fseek : ".ftell($this->zip_fd)."'"); + + // ----- Look for extraction as string + if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) { + // ----- Extracting the file + $v_result1 = $this->privExtractFileAsString($v_header, $v_string); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Set the file content + $p_file_list[$v_nb_extracted]['content'] = $v_string; + + // ----- Next extracted file + $v_nb_extracted++; + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + // ----- Look for extraction in standard output + elseif ( + (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) + && ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT]) + ) { + // ----- Extracting the file in standard output + $v_result1 = $this->privExtractFileInOutput($v_header, $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + // ----- Look for normal extraction + else { + // ----- Extracting the file + $v_result1 = $this->privExtractFile( + $v_header, + $p_path, + $p_remove_path, + $p_remove_all_path, + $p_options + ); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + } + } + + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFile() + // Description : + // Parameters : + // Return Values : + // + // 1 : ... ? + // PCLZIP_ERR_USER_ABORTED(2) : User ask for extraction stop in callback + // -------------------------------------------------------------------------------- + public function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFile', "path='$p_path', remove_path='$p_remove_path', remove_all_path='".($p_remove_all_path?'true':'false')."'"); + $v_result = 1; + + // ----- Read the file header + if (($v_result = $this->privReadFileHeader($v_header)) != 1) { + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found file '".$v_header['filename']."', size '".$v_header['size']."'"); + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + // ----- Look for all path to remove + if ($p_remove_all_path == true) { + // ----- Look for folder entry that not need to be extracted + if (($p_entry['external'] & 0x00000010) == 0x00000010) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The entry is a folder : need to be filtered"); + + $p_entry['status'] = "filtered"; + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "All path is removed"); + // ----- Get the basename of the path + $p_entry['filename'] = basename($p_entry['filename']); + } elseif ($p_remove_path != "") { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Look for some path to remove"); + if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The folder is the same as the removed path '".$p_entry['filename']."'"); + + // ----- Change the file status + $p_entry['status'] = "filtered"; + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + $p_remove_path_size = strlen($p_remove_path); + if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Found path '$p_remove_path' to remove in file '".$p_entry['filename']."'"); + + // ----- Remove the path + $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size); + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Resulting file is '".$p_entry['filename']."'"); + } + } + + // ----- Add the path + if ($p_path != '') { + $p_entry['filename'] = $p_path . "/" . $p_entry['filename']; + } + + // ----- Check a base_dir_restriction + if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Check the extract directory restriction"); + $v_inclusion + = PclZipUtilPathInclusion( + $p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION], + $p_entry['filename'] + ); + if ($v_inclusion == 0) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_EXTRACT_DIR_RESTRICTION is selected, file is outside restriction"); + + PclZip::privErrorLog( + PCLZIP_ERR_DIRECTORY_RESTRICTION, + "Filename '" . $p_entry['filename'] . "' is " + . "outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION" + ); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } + + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A pre-callback '".$p_options[PCLZIP_CB_PRE_EXTRACT]."()') is defined for the extraction"); + + // ----- Generate a local information + $v_local_header = []; + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + eval('$v_result = ' . $p_options[PCLZIP_CB_PRE_EXTRACT] . '(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } + + // ----- Look for abort result + if ($v_result == 2) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction"); + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } + + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "New filename is '".$p_entry['filename']."'"); + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file (with path) '".$p_entry['filename']."', size '$v_header[size]'"); + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + // ----- Look for specific actions while the file exist + if (file_exists($p_entry['filename'])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$p_entry['filename']."' already exists"); + + // ----- Look if file is a directory + if (is_dir($p_entry['filename'])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is a directory"); + // ----- Change the file status + $p_entry['status'] = "already_a_directory"; + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( + (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR] === true) + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped"); + + PclZip::privErrorLog( + PCLZIP_ERR_ALREADY_A_DIRECTORY, + "Filename '" . $p_entry['filename'] . "' is " + . "already used by an existing directory" + ); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } elseif (!is_writable($p_entry['filename'])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is write protected"); + // ----- Change the file status + $p_entry['status'] = "write_protected"; + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( + (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR] === true) + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped"); + + PclZip::privErrorLog( + PCLZIP_ERR_WRITE_OPEN_FAIL, + "Filename '" . $p_entry['filename'] . "' exists " + . "and is write protected" + ); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } elseif (filemtime($p_entry['filename']) > $p_entry['mtime']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is newer (".date("l dS of F Y h:i:s A", filemtime($p_entry['filename'])).") than the extracted file (".date("l dS of F Y h:i:s A", $p_entry['mtime']).")"); + // ----- Change the file status + if ( + (isset($p_options[PCLZIP_OPT_REPLACE_NEWER])) + && ($p_options[PCLZIP_OPT_REPLACE_NEWER] === true) + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_REPLACE_NEWER is selected, file will be replaced"); + } else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File will not be replaced"); + $p_entry['status'] = "newer_exist"; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( + (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR] === true) + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped"); + + PclZip::privErrorLog( + PCLZIP_ERR_WRITE_OPEN_FAIL, + "Newer version of '" . $p_entry['filename'] . "' exists " + . "and option PCLZIP_OPT_REPLACE_NEWER is not selected" + ); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } + } else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is older than the extrated one - will be replaced by the extracted one (".date("l dS of F Y h:i:s A", filemtime($p_entry['filename'])).") than the extracted file (".date("l dS of F Y h:i:s A", $p_entry['mtime']).")"); + } + } + + // ----- Check the directory availability and create it if necessary + else { + if ((($p_entry['external'] & 0x00000010) == 0x00000010) || (substr($p_entry['filename'], -1) == '/')) { + $v_dir_to_check = $p_entry['filename']; + } elseif (!strstr($p_entry['filename'], "/")) { + $v_dir_to_check = ""; + } else $v_dir_to_check = dirname($p_entry['filename']); + + if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external'] & 0x00000010) == 0x00000010))) != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to create path for '".$p_entry['filename']."'"); + + // ----- Change the file status + $p_entry['status'] = "path_creation_fail"; + + // ----- Return + ////--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + //return $v_result; + $v_result = 1; + } + } + } + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external'] & 0x00000010) == 0x00000010)) { + // ----- Look for not compressed file + if ($p_entry['compression'] == 0) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting an un-compressed file"); + + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Error while opening '".$p_entry['filename']."' in write binary mode"); + + // ----- Change the file status + $p_entry['status'] = "write_error"; + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Read '".$p_entry['size']."' bytes"); + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = $p_entry['compressed_size']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Read $v_read_size bytes"); + $v_buffer = @fread($this->zip_fd, $v_read_size); + /* Try to speed up the code + $v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($v_dest_file, $v_binary_data, $v_read_size); + */ + @fwrite($v_dest_file, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Closing the destination file + fclose($v_dest_file); + + // ----- Change the file mtime + touch($p_entry['filename'], $p_entry['mtime']); + } else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting a compressed file (Compression method ".$p_entry['compression'].")"); + // ----- TBC + // Need to be finished + if (($p_entry['flag'] & 1) == 1) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File is encrypted"); + /* + // ----- Read the encryption header + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read 12 encryption header bytes"); + $v_encryption_header = @fread($this->zip_fd, 12); + + // ----- Read the encrypted & compressed file in a buffer + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read '".($p_entry['compressed_size']-12)."' compressed & encrypted bytes"); + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']-12); + + // ----- Decrypt the buffer + $this->privDecrypt($v_encryption_header, $v_buffer, + $p_entry['compressed_size']-12, $p_entry['crc']); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Buffer is '".$v_buffer."'"); + */ + } else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read '".$p_entry['compressed_size']."' compressed bytes"); + // ----- Read the compressed file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + } + + // ----- Decompress the file + $v_file_content = @gzinflate($v_buffer); + unset($v_buffer); + if ($v_file_content === false) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to inflate compressed file"); + + // ----- Change the file status + // TBC + $p_entry['status'] = "error"; + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Error while opening '".$p_entry['filename']."' in write binary mode"); + + // ----- Change the file status + $p_entry['status'] = "write_error"; + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Write the uncompressed data + @fwrite($v_dest_file, $v_file_content, $p_entry['size']); + unset($v_file_content); + + // ----- Closing the destination file + @fclose($v_dest_file); + + // ----- Change the file mtime + @touch($p_entry['filename'], $p_entry['mtime']); + } + + // ----- Look for chmod option + if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "chmod option activated '".$p_options[PCLZIP_OPT_SET_CHMOD]."'"); + + // ----- Change the mode of the file + @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]); + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extraction done"); + } + } + + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; + } + + // ----- Look for post-extract callback + elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A post-callback '".$p_options[PCLZIP_CB_POST_EXTRACT]."()') is defined for the extraction"); + + // ----- Generate a local information + $v_local_header = []; + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + eval('$v_result = ' . $p_options[PCLZIP_CB_POST_EXTRACT] . '(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); + + // ----- Look for abort result + if ($v_result == 2) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction"); + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFileInOutput() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privExtractFileInOutput(&$p_entry, &$p_options) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFileInOutput', ""); + $v_result = 1; + + // ----- Read the file header + if (($v_result = $this->privReadFileHeader($v_header)) != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found file '".$v_header['filename']."', size '".$v_header['size']."'"); + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A pre-callback '".$p_options[PCLZIP_CB_PRE_EXTRACT]."()') is defined for the extraction"); + + // ----- Generate a local information + $v_local_header = []; + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + eval('$v_result = ' . $p_options[PCLZIP_CB_PRE_EXTRACT] . '(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } + + // ----- Look for abort result + if ($v_result == 2) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction"); + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } + + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "New filename is '".$p_entry['filename']."'"); + } + + // ----- Trace + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file (with path) '".$p_entry['filename']."', size '$v_header[size]'"); + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external'] & 0x00000010) == 0x00000010)) { + // ----- Look for not compressed file + if ($p_entry['compressed_size'] == $p_entry['size']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting an un-compressed file"); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Reading '".$p_entry['size']."' bytes"); + + // ----- Read the file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Send the file to the output + echo $v_buffer; + unset($v_buffer); + } else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting a compressed file"); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Reading '".$p_entry['size']."' bytes"); + + // ----- Read the compressed file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Decompress the file + $v_file_content = gzinflate($v_buffer); + unset($v_buffer); + + // ----- Send the file to the output + echo $v_file_content; + unset($v_file_content); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extraction done"); + } + } + + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; + } + + // ----- Look for post-extract callback + elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A post-callback '".$p_options[PCLZIP_CB_POST_EXTRACT]."()') is defined for the extraction"); + + // ----- Generate a local information + $v_local_header = []; + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + eval('$v_result = ' . $p_options[PCLZIP_CB_POST_EXTRACT] . '(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); + + // ----- Look for abort result + if ($v_result == 2) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction"); + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFileAsString() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privExtractFileAsString(&$p_entry, &$p_string) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFileAsString', "p_entry['filename']='".$p_entry['filename']."'"); + $v_result = 1; + + // ----- Read the file header + $v_header = []; + if (($v_result = $this->privReadFileHeader($v_header)) != 1) { + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found file '".$v_header['filename']."', size '".$v_header['size']."'"); + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file in string (with path) '".$p_entry['filename']."', size '$v_header[size]'"); + + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external'] & 0x00000010) == 0x00000010)) { + // ----- Look for not compressed file + // if ($p_entry['compressed_size'] == $p_entry['size']) + if ($p_entry['compression'] == 0) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting an un-compressed file"); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Reading '".$p_entry['size']."' bytes"); + + // ----- Reading the file + $p_string = @fread($this->zip_fd, $p_entry['compressed_size']); + } else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting a compressed file (compression method '".$p_entry['compression']."')"); + + // ----- Reading the file + $v_data = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Decompress the file + if (($p_string = @gzinflate($v_data)) === false) { + // TBC + } + } + + // ----- Trace + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extraction done"); + } else { + // TBC : error : can not extract a folder in a string + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privReadFileHeader(&$p_header) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privReadFileHeader", ""); + $v_result = 1; + + // ----- Read the 4 bytes signature + $v_binary_data = @fread($this->zip_fd, 4); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary data is : '".sprintf("%08x", $v_binary_data)."'"); + $v_data = unpack('Vid', $v_binary_data); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary signature is : '".sprintf("0x%08x", $v_data['id'])."'"); + + // ----- Check signature + if ($v_data['id'] != 0x04034b50) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Invalid File header"); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Read the first 42 bytes of the header + $v_binary_data = fread($this->zip_fd, 26); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 26) { + $p_header['filename'] = ""; + $p_header['status'] = "invalid_header"; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Invalid block size : ".strlen($v_binary_data)); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : " . strlen($v_binary_data)); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Extract the values + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Header : '".$v_binary_data."'"); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Header (Hex) : '".bin2hex($v_binary_data)."'"); + $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data); + + // ----- Get filename + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "File name length : ".$v_data['filename_len']); + $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Filename : \''.$p_header['filename'].'\''); + + // ----- Get extra_fields + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extra field length : ".$v_data['extra_len']); + if ($v_data['extra_len'] != 0) { + $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']); + } else { + $p_header['extra'] = ''; + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Extra field : \''.bin2hex($p_header['extra']).'\''); + + // ----- Extract properties + $p_header['version_extracted'] = $v_data['version']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version need to extract : ('.$p_header['version_extracted'].') \''.($p_header['version_extracted']/10).'.'.($p_header['version_extracted']%10).'\''); + $p_header['compression'] = $v_data['compression']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compression method : \''.$p_header['compression'].'\''); + $p_header['size'] = $v_data['size']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size : \''.$p_header['size'].'\''); + $p_header['compressed_size'] = $v_data['compressed_size']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compressed Size : \''.$p_header['compressed_size'].'\''); + $p_header['crc'] = $v_data['crc']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'CRC : \''.sprintf("0x%X", $p_header['crc']).'\''); + $p_header['flag'] = $v_data['flag']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Flag : \''.$p_header['flag'].'\''); + $p_header['filename_len'] = $v_data['filename_len']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Filename_len : \''.$p_header['filename_len'].'\''); + + // ----- Recuperate date in UNIX format + $p_header['mdate'] = $v_data['mdate']; + $p_header['mtime'] = $v_data['mtime']; + if ($p_header['mdate'] && $p_header['mtime']) { + // ----- Extract time + $v_hour = ($p_header['mtime'] & 0xF800) >> 11; + $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; + $v_seconde = ($p_header['mtime'] & 0x001F) * 2; + + // ----- Extract date + $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; + $v_month = ($p_header['mdate'] & 0x01E0) >> 5; + $v_day = $p_header['mdate'] & 0x001F; + + // ----- Get UNIX date format + $p_header['mtime'] = mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\''); + } else { + $p_header['mtime'] = time(); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date is actual : \''.date("d/m/y H:i:s", $p_header['mtime']).'\''); + } + + // TBC + //for(reset($v_data); $key = key($v_data); next($v_data)) { + // //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Attribut[$key] = ".$v_data[$key]); + //} + + // ----- Set the stored filename + $p_header['stored_filename'] = $p_header['filename']; + + // ----- Set the status field + $p_header['status'] = "ok"; + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadCentralFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privReadCentralFileHeader(&$p_header) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privReadCentralFileHeader", ""); + $v_result = 1; + + // ----- Read the 4 bytes signature + $v_binary_data = @fread($this->zip_fd, 4); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary data is : '".sprintf("%08x", $v_binary_data)."'"); + $v_data = unpack('Vid', $v_binary_data); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary signature is : '".sprintf("0x%08x", $v_data['id'])."'"); + + // ----- Check signature + if ($v_data['id'] != 0x02014b50) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Invalid Central Dir File signature"); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Read the first 42 bytes of the header + $v_binary_data = fread($this->zip_fd, 42); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 42) { + $p_header['filename'] = ""; + $p_header['status'] = "invalid_header"; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Invalid block size : ".strlen($v_binary_data)); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : " . strlen($v_binary_data)); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Extract the values + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Header : '".$v_binary_data."'"); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Header (Hex) : '".bin2hex($v_binary_data)."'"); + $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data); + + // ----- Get filename + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "File name length : ".$p_header['filename_len']); + if ($p_header['filename_len'] != 0) + $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']); + else $p_header['filename'] = ''; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Filename : \''.$p_header['filename'].'\''); + + // ----- Get extra + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Extra length : ".$p_header['extra_len']); + if ($p_header['extra_len'] != 0) + $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']); + else $p_header['extra'] = ''; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Extra : \''.$p_header['extra'].'\''); + + // ----- Get comment + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Comment length : ".$p_header['comment_len']); + if ($p_header['comment_len'] != 0) + $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']); + else $p_header['comment'] = ''; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Comment : \''.$p_header['comment'].'\''); + + // ----- Extract properties + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version : \''.($p_header['version']/10).'.'.($p_header['version']%10).'\''); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version need to extract : \''.($p_header['version_extracted']/10).'.'.($p_header['version_extracted']%10).'\''); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Size : \''.$p_header['size'].'\''); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Compressed Size : \''.$p_header['compressed_size'].'\''); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'CRC : \''.sprintf("0x%X", $p_header['crc']).'\''); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Flag : \''.$p_header['flag'].'\''); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Offset : \''.$p_header['offset'].'\''); + + // ----- Recuperate date in UNIX format + if ($p_header['mdate'] && $p_header['mtime']) { + // ----- Extract time + $v_hour = ($p_header['mtime'] & 0xF800) >> 11; + $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; + $v_seconde = ($p_header['mtime'] & 0x001F) * 2; + + // ----- Extract date + $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; + $v_month = ($p_header['mdate'] & 0x01E0) >> 5; + $v_day = $p_header['mdate'] & 0x001F; + + // ----- Get UNIX date format + $p_header['mtime'] = mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\''); + } else { + $p_header['mtime'] = time(); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Date is actual : \''.date("d/m/y H:i:s", $p_header['mtime']).'\''); + } + + // ----- Set the stored filename + $p_header['stored_filename'] = $p_header['filename']; + + // ----- Set default status to ok + $p_header['status'] = 'ok'; + + // ----- Look if it is a directory + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Internal (Hex) : '".sprintf("Ox%04X", $p_header['internal'])."'"); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "External (Hex) : '".sprintf("Ox%04X", $p_header['external'])."' (".(($p_header['external']&0x00000010)==0x00000010?'is a folder':'is a file').')'); + if (substr($p_header['filename'], -1) == '/') { + //$p_header['external'] = 0x41FF0010; + $p_header['external'] = 0x00000010; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Force folder external : \''.sprintf("Ox%04X", $p_header['external']).'\''); + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Header of filename : \''.$p_header['filename'].'\''); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCheckFileHeaders() + // Description : + // Parameters : + // Return Values : + // 1 on success, + // 0 on error; + // -------------------------------------------------------------------------------- + public function privCheckFileHeaders(&$p_local_header, &$p_central_header) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCheckFileHeaders", ""); + $v_result = 1; + + // ----- Check the static values + // TBC + if ($p_local_header['filename'] != $p_central_header['filename']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "filename" : TBC To Be Completed'); + } + if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "version_extracted" : TBC To Be Completed'); + } + if ($p_local_header['flag'] != $p_central_header['flag']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "flag" : TBC To Be Completed'); + } + if ($p_local_header['compression'] != $p_central_header['compression']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "compression" : TBC To Be Completed'); + } + if ($p_local_header['mtime'] != $p_central_header['mtime']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "mtime" : TBC To Be Completed'); + } + if ($p_local_header['filename_len'] != $p_central_header['filename_len']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "filename_len" : TBC To Be Completed'); + } + + // ----- Look for flag bit 3 + if (($p_local_header['flag'] & 8) == 8) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Purpose bit flag bit 3 set !'); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'File size, compression size and crc found in central header'); + $p_local_header['size'] = $p_central_header['size']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size : \''.$p_local_header['size'].'\''); + $p_local_header['compressed_size'] = $p_central_header['compressed_size']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compressed Size : \''.$p_local_header['compressed_size'].'\''); + $p_local_header['crc'] = $p_central_header['crc']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'CRC : \''.sprintf("0x%X", $p_local_header['crc']).'\''); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadEndCentralDir() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privReadEndCentralDir(&$p_central_dir) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privReadEndCentralDir", ""); + $v_result = 1; + + // ----- Go to the end of the zip file + $v_size = filesize($this->zipname); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Size of the file :$v_size"); + @fseek($this->zip_fd, $v_size); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position at end of zip file : \''.ftell($this->zip_fd).'\''); + if (@ftell($this->zip_fd) != $v_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \'' . $this->zipname . '\''); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- First try : look if this is an archive with no commentaries (most of the time) + // in this case the end of central dir is at 22 bytes of the file end + $v_found = 0; + if ($v_size > 26) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Look for central dir with no comment'); + @fseek($this->zip_fd, $v_size - 22); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position after min central position : \''.ftell($this->zip_fd).'\''); + if (($v_pos = @ftell($this->zip_fd)) != $v_size - 22) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \'' . $this->zipname . '\''); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Read for bytes + $v_binary_data = @fread($this->zip_fd, 4); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Binary data is : '".sprintf("%08x", $v_binary_data)."'"); + $v_data = @unpack('Vid', $v_binary_data); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary signature is : '".sprintf("0x%08x", $v_data['id'])."'"); + + // ----- Check signature + if ($v_data['id'] == 0x06054b50) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found central dir at the default position."); + $v_found = 1; + } + + $v_pos = ftell($this->zip_fd); + } + + // ----- Go back to the maximum possible size of the Central Dir End Record + if (!$v_found) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Start extended search of end central dir'); + $v_maximum_size = 65557; // 0xFFFF + 22; + if ($v_maximum_size > $v_size) + $v_maximum_size = $v_size; + @fseek($this->zip_fd, $v_size - $v_maximum_size); + if (@ftell($this->zip_fd) != $v_size - $v_maximum_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \'' . $this->zipname . '\''); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position after max central position : \''.ftell($this->zip_fd).'\''); + + // ----- Read byte per byte in order to find the signature + $v_pos = ftell($this->zip_fd); + $v_bytes = 0x00000000; + while ($v_pos < $v_size) { + // ----- Read a byte + $v_byte = @fread($this->zip_fd, 1); + + // ----- Add the byte + $v_bytes = ($v_bytes << 8) | Ord($v_byte); + + // ----- Compare the bytes + if ($v_bytes == 0x504b0506) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Found End Central Dir signature at position : \''.ftell($this->zip_fd).'\''); + $v_pos++; + break; + } + + $v_pos++; + } + + // ----- Look if not found end of central dir + if ($v_pos == $v_size) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to find End of Central Dir Record signature"); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } + + // ----- Read the first 18 bytes of the header + $v_binary_data = fread($this->zip_fd, 18); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 18) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Invalid End of Central Dir Record size : ".strlen($v_binary_data)); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : " . strlen($v_binary_data)); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Extract the values + ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Central Dir Record : '".$v_binary_data."'"); + ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Central Dir Record (Hex) : '".bin2hex($v_binary_data)."'"); + $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data); + + // ----- Check the global size + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Comment length : ".$v_data['comment_size']); + if ($v_pos + $v_data['comment_size'] + 18 != $v_size) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The central dir is not at the end of the archive. Some trailing bytes exists after the archive."); + + // ----- Removed in release 2.2 see readme file + // The check of the file size is a little too strict. + // Some bugs where found when a zip is encrypted/decrypted with 'crypt'. + // While decrypted, zip has training 0 bytes + if (0) { + // ----- Error log + PclZip::privErrorLog( + PCLZIP_ERR_BAD_FORMAT, + 'The central dir is not at the end of the archive.' + . ' Some trailing bytes exists after the archive.' + ); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + } + + // ----- Get comment + if ($v_data['comment_size'] != 0) + $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']); + else $p_central_dir['comment'] = ''; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Comment : \''.$p_central_dir['comment'].'\''); + + $p_central_dir['entries'] = $v_data['entries']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Nb of entries : \''.$p_central_dir['entries'].'\''); + $p_central_dir['disk_entries'] = $v_data['disk_entries']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Nb of entries for this disk : \''.$p_central_dir['disk_entries'].'\''); + $p_central_dir['offset'] = $v_data['offset']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Offset of Central Dir : \''.$p_central_dir['offset'].'\''); + $p_central_dir['size'] = $v_data['size']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size of Central Dir : \''.$p_central_dir['size'].'\''); + $p_central_dir['disk'] = $v_data['disk']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Disk number : \''.$p_central_dir['disk'].'\''); + $p_central_dir['disk_start'] = $v_data['disk_start']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Start disk number : \''.$p_central_dir['disk_start'].'\''); + + // TBC + //for(reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) { + // //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "central_dir[$key] = ".$p_central_dir[$key]); + //} + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDeleteByRule() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privDeleteByRule(&$p_result_list, &$p_options) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privDeleteByRule", ""); + $v_result = 1; + + // ----- Open the zip file + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + if (($v_result = $this->privOpenFd('rb')) != 1) { + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = []; + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { + $this->privCloseFd(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Go to beginning of File + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'"); + @rewind($this->zip_fd); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'"); + + // ----- Scan all the files + // ----- Start at beginning of Central Dir + $v_pos_entry = $v_central_dir['offset']; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position before rewind : ".ftell($this->zip_fd)."'"); + @rewind($this->zip_fd); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after rewind : ".ftell($this->zip_fd)."'"); + if (@fseek($this->zip_fd, $v_pos_entry)) { + // ----- Close the zip file + $this->privCloseFd(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after fseek : ".ftell($this->zip_fd)."'"); + + // ----- Read each entry + $v_header_list = []; + $j_start = 0; + for ($i = 0, $v_nb_extracted = 0; $i < $v_central_dir['entries']; $i++) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Read next file header entry (index '$i')"); + + // ----- Read the file header + $v_header_list[$v_nb_extracted] = []; + if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename (index '$i') : '".$v_header_list[$v_nb_extracted]['stored_filename']."'"); + + // ----- Store the index + $v_header_list[$v_nb_extracted]['index'] = $i; + + // ----- Look for the specific extract rules + $v_found = false; + + // ----- Look for extract by name rule + if ( + (isset($p_options[PCLZIP_OPT_BY_NAME])) + && ($p_options[PCLZIP_OPT_BY_NAME] != 0) + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByName'"); + // ----- Look if the filename is in the list + for ($j = 0; ($j < count($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_found); $j++) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Compare with file '".$p_options[PCLZIP_OPT_BY_NAME][$j]."'"); + + // ----- Look for a directory + if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The searched item is a directory"); + + // ----- Look if the directory is in the filename path + if ( + (strlen($v_header_list[$v_nb_extracted]['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) + && (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j]) + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The directory is in the file path"); + $v_found = true; + } elseif ( + (($v_header_list[$v_nb_extracted]['external'] & 0x00000010) == 0x00000010) /* Indicates a folder */ + && ($v_header_list[$v_nb_extracted]['stored_filename'] . '/' == $p_options[PCLZIP_OPT_BY_NAME][$j]) + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The entry is the searched directory"); + $v_found = true; + } + } + // ----- Look for a filename + elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The file is the right one."); + $v_found = true; + } + } + } elseif ( + (isset($p_options[PCLZIP_OPT_BY_EREG])) + && ($p_options[PCLZIP_OPT_BY_EREG] != "") + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract by ereg '".$p_options[PCLZIP_OPT_BY_EREG]."'"); + if (preg_match($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression"); + $v_found = true; + } + } elseif ( + (isset($p_options[PCLZIP_OPT_BY_PREG])) + && ($p_options[PCLZIP_OPT_BY_PREG] != "") + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByEreg'"); + if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression"); + $v_found = true; + } + } elseif ( + (isset($p_options[PCLZIP_OPT_BY_INDEX])) + && ($p_options[PCLZIP_OPT_BY_INDEX] != 0) + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByIndex'"); + // ----- Look if the index is in the list + for ($j = $j_start; ($j < count($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_found); $j++) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Look if index '$i' is in [".$p_options[PCLZIP_OPT_BY_INDEX][$j]['start'].",".$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']."]"); + + if (($i >= $p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i <= $p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Found as part of an index range"); + $v_found = true; + } + if ($i >= $p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Do not look this index range for next loop"); + $j_start = $j + 1; + } + + if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start'] > $i) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Index range is greater than index, stop loop"); + break; + } + } + } else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "No argument mean remove all file"); + $v_found = true; + } + + // ----- Look for deletion + if ($v_found) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$v_header_list[$v_nb_extracted]['stored_filename']."', index '$i' need to be deleted"); + unset($v_header_list[$v_nb_extracted]); + } else { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$v_header_list[$v_nb_extracted]['stored_filename']."', index '$i' will not be deleted"); + $v_nb_extracted++; + } + } + + // ----- Look if something need to be deleted + if ($v_nb_extracted > 0) { + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR . uniqid('pclzip-') . '.tmp'; + // ----- Creates a temporary zip archive + $v_temp_zip = new PclZip($v_zip_temp_name); + // ----- Open the temporary zip file in write mode + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary write mode"); + if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) { + $this->privCloseFd(); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // ----- Look which file need to be kept + $counter = count($v_header_list); + // ----- Look which file need to be kept + for ($i = 0; $i < $counter; $i++) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Keep entry index '$i' : '".$v_header_list[$i]['filename']."'"); + + // ----- Calculate the position of the header + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Offset='". $v_header_list[$i]['offset']."'"); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position before rewind : ".ftell($this->zip_fd)."'"); + @rewind($this->zip_fd); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after rewind : ".ftell($this->zip_fd)."'"); + if (@fseek($this->zip_fd, $v_header_list[$i]['offset'])) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after fseek : ".ftell($this->zip_fd)."'"); + + // ----- Read the file header + $v_local_header = []; + if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Check that local file header is same as central file header + if ( + $this->privCheckFileHeaders( + $v_local_header, + $v_header_list[$i] + ) != 1 + ) { + // TBC + } + unset($v_local_header); + + // ----- Write the file header + if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Offset for this file is '".$v_header_list[$i]['offset']."'"); + + // ----- Read/write the data block + if (($v_result = PclZipUtilCopyBlock($this->zip_fd, $v_temp_zip->zip_fd, $v_header_list[$i]['compressed_size'])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + } + // ----- Store the offset of the central dir + $v_offset = @ftell($v_temp_zip->zip_fd); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "New offset of central dir : $v_offset"); + // ----- Re-Create the Central Dir files header + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Creates the new central directory"); + $counter = count($v_header_list); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "New offset of central dir : $v_offset"); + // ----- Re-Create the Central Dir files header + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Creates the new central directory"); + for ($i = 0; $i < $counter; $i++) { + // ----- Create the file header + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Offset of file : ".$v_header_list[$i]['offset']); + if (($v_result = $v_temp_zip->privWriteCentralFileHeader($v_header_list[$i])) != 1) { + $v_temp_zip->privCloseFd(); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Transform the header to a 'usable' info + $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Creates the central directory footer"); + // ----- Zip file comment + $v_comment = ''; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + } + // ----- Calculate the size of the central header + $v_size = @ftell($v_temp_zip->zip_fd) - $v_offset; + // ----- Create the central dir footer + if (($v_result = $v_temp_zip->privWriteCentralHeader(count($v_header_list), $v_size, $v_offset, $v_comment)) != 1) { + // ----- Reset the file list + unset($v_header_list); + $v_temp_zip->privCloseFd(); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // ----- Close + $v_temp_zip->privCloseFd(); + $this->privCloseFd(); + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); + // ----- Destroy the temporary archive + unset($v_temp_zip); + } elseif ($v_central_dir['entries'] != 0) { + $this->privCloseFd(); + if (($v_result = $this->privOpenFd('wb')) != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + $this->privCloseFd(); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDirCheck() + // Description : + // Check if a directory exists, if not it creates it and all the parents directory + // which may be useful. + // Parameters : + // $p_dir : Directory path to check. + // Return Values : + // 1 : OK + // -1 : Unable to create directory + // -------------------------------------------------------------------------------- + public function privDirCheck($p_dir, $p_is_dir = false) + { + $v_result = 1; + + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privDirCheck", "entry='$p_dir', is_dir='".($p_is_dir?"true":"false")."'"); + + // ----- Remove the final '/' + if (($p_is_dir) && (substr($p_dir, -1) == '/')) { + $p_dir = substr($p_dir, 0, strlen($p_dir) - 1); + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Looking for entry '$p_dir'"); + + // ----- Check the directory availability + if ((is_dir($p_dir)) || ($p_dir == "")) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, "'$p_dir' is a directory"); + return 1; + } + + // ----- Extract parent directory + $p_parent_dir = dirname($p_dir); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Parent directory is '$p_parent_dir'"); + + // ----- Just a check + if ($p_parent_dir != $p_dir) { + // ----- Look for parent directory + if ($p_parent_dir != "") { + if (($v_result = $this->privDirCheck($p_parent_dir)) != 1) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + } + } + + // ----- Create the directory + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Create directory '$p_dir'"); + if (!@mkdir($p_dir, 0777)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, "Unable to create directory '$p_dir'"); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result, "Directory '$p_dir' created"); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privMerge() + // Description : + // If $p_archive_to_add does not exist, the function exit with a success result. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privMerge(&$p_archive_to_add) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privMerge", "archive='".$p_archive_to_add->zipname."'"); + $v_result = 1; + + // ----- Look if the archive_to_add exists + if (!is_file($p_archive_to_add->zipname)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive to add does not exist. End of merge."); + + // ----- Nothing to merge, so merge is a success + $v_result = 1; + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Look if the archive exists + if (!is_file($this->zipname)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive does not exist, duplicate the archive_to_add."); + + // ----- Do a duplicate + $v_result = $this->privDuplicate($p_archive_to_add->zipname); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Open the zip file + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + if (($v_result = $this->privOpenFd('rb')) != 1) { + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = []; + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { + $this->privCloseFd(); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Go to beginning of File + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in zip : ".ftell($this->zip_fd)."'"); + @rewind($this->zip_fd); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in zip : ".ftell($this->zip_fd)."'"); + + // ----- Open the archive_to_add file + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open archive_to_add in binary read mode"); + if (($v_result = $p_archive_to_add->privOpenFd('rb')) != 1) { + $this->privCloseFd(); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir_to_add = []; + if (($v_result = $p_archive_to_add->privReadEndCentralDir($v_central_dir_to_add)) != 1) { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Go to beginning of File + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in archive_to_add : ".ftell($p_archive_to_add->zip_fd)."'"); + @rewind($p_archive_to_add->zip_fd); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in archive_to_add : ".ftell($p_archive_to_add->zip_fd)."'"); + + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR . uniqid('pclzip-') . '.tmp'; + + // ----- Open the temporary file in write mode + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \'' . $v_zip_temp_name . '\' in binary write mode'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = $v_central_dir['offset']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes"); + $v_buffer = fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Copy the files from the archive_to_add into the temporary file + $v_size = $v_central_dir_to_add['offset']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes"); + $v_buffer = fread($p_archive_to_add->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($v_zip_temp_fd); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "New offset of central dir : $v_offset"); + + // ----- Copy the block of file headers from the old archive + $v_size = $v_central_dir['size']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes"); + $v_buffer = @fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Copy the block of file headers from the archive_to_add + $v_size = $v_central_dir_to_add['size']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes"); + $v_buffer = @fread($p_archive_to_add->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Merge the file comments + $v_comment = $v_central_dir['comment'] . ' ' . $v_central_dir_to_add['comment']; + + // ----- Calculate the size of the (new) central header + $v_size = @ftell($v_zip_temp_fd) - $v_offset; + + // ----- Swap the file descriptor + // Here is a trick : I swap the temporary fd with the zip fd, in order to use + // the following methods on the temporary fil and not the real archive fd + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_central_dir['entries'] + $v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1) { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + @fclose($v_zip_temp_fd); + $this->zip_fd = null; + + // ----- Reset the file list + unset($v_header_list); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Swap back the file descriptor + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Close + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + + // ----- Close the temporary file + @fclose($v_zip_temp_fd); + + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); + + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDuplicate() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privDuplicate($p_archive_filename) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privDuplicate", "archive_filename='$p_archive_filename'"); + $v_result = 1; + + // ----- Look if the $p_archive_filename exists + if (!is_file($p_archive_filename)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive to duplicate does not exist. End of duplicate."); + + // ----- Nothing to duplicate, so duplicate is a success. + $v_result = 1; + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Open the zip file + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + if (($v_result = $this->privOpenFd('wb')) != 1) { + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Open the temporary file in write mode + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); + if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0) { + $this->privCloseFd(); + + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \'' . $p_archive_filename . '\' in binary write mode'); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); + return PclZip::errorCode(); + } + + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = filesize($p_archive_filename); + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read $v_read_size bytes"); + $v_buffer = fread($v_zip_temp_fd, $v_read_size); + @fwrite($this->zip_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Close + $this->privCloseFd(); + + // ----- Close the temporary file + @fclose($v_zip_temp_fd); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privErrorLog() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + public function privErrorLog($p_error_code = 0, $p_error_string = '') + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + PclError($p_error_code, $p_error_string); + } else { + $this->error_code = $p_error_code; + $this->error_string = $p_error_string; + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privErrorReset() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + public function privErrorReset() + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + PclErrorReset(); + } else { + $this->error_code = 0; + $this->error_string = ''; + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDecrypt() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privDecrypt($p_encryption_header, &$p_buffer, $p_size, $p_crc) + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privDecrypt', "size=".$p_size.""); + $v_result = 1; + + // ----- To Be Modified ;-) + $v_pwd = "test"; + + $p_buffer = PclZipUtilZipDecrypt( + $p_buffer, + $p_size, + $p_encryption_header, + $p_crc, + $v_pwd + ); + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDisableMagicQuotes() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privDisableMagicQuotes() + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privDisableMagicQuotes', ""); + $v_result = 1; + + // ----- Look if function exists + if ( + (!function_exists("get_magic_quotes_runtime")) + || (!function_exists("set_magic_quotes_runtime")) + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Functions *et_magic_quotes_runtime are not supported"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Look if already done + if ($this->magic_quotes_status != -1) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "magic_quote already disabled"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Get and memorize the magic_quote value + $this->magic_quotes_status = @get_magic_quotes_runtime(); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Current magic_quotes_runtime status is '".($this->magic_quotes_status==0?'disable':'enable')."'"); + + // ----- Disable magic_quotes + if ($this->magic_quotes_status == 1) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Disable magic_quotes"); + @set_magic_quotes_runtime(0); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privSwapBackMagicQuotes() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privSwapBackMagicQuotes() + { + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privSwapBackMagicQuotes', ""); + $v_result = 1; + + // ----- Look if function exists + if ( + (!function_exists("get_magic_quotes_runtime")) + || (!function_exists("set_magic_quotes_runtime")) + ) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Functions *et_magic_quotes_runtime are not supported"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Look if something to do + if ($this->magic_quotes_status != -1) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "magic_quote not modified"); + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + + // ----- Swap back magic_quotes + if ($this->magic_quotes_status == 1) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Enable back magic_quotes"); + @set_magic_quotes_runtime($this->magic_quotes_status); + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; + } + // -------------------------------------------------------------------------------- +} + // End of class + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilPathReduction() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- +function PclZipUtilPathReduction($p_dir) +{ + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilPathReduction", "dir='$p_dir'"); + $v_result = ""; + + // ----- Look for not empty path + if ($p_dir != "") { + // ----- Explode path by directory names + $v_list = explode("/", $p_dir); + + // ----- Study directories from last to first + $v_skip = 0; + for ($i = count($v_list) - 1; $i >= 0; $i--) { + // ----- Look for current path + if ($v_list[$i] == ".") { + // ----- Ignore this directory + // Should be the first $i=0, but no check is done + } elseif ($v_list[$i] == "..") { + $v_skip++; + } elseif ($v_list[$i] == "") { + // ----- First '/' i.e. root slash + if ($i == 0) { + $v_result = "/" . $v_result; + if ($v_skip > 0) { + // ----- It is an invalid path, so the path is not modified + // TBC + $v_result = $p_dir; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Invalid path is unchanged"); + $v_skip = 0; + } + } elseif ($i == (count($v_list) - 1)) { + $v_result = $v_list[$i]; + } else { + // ----- Ignore only the double '//' in path, + // but not the first and last '/' + } + } elseif ($v_skip > 0) { + // ----- Look for item to skip + $v_skip--; + } else { + $v_result = $v_list[$i] . ($i != count($v_list) - 1 ? "/" . $v_result : ""); + } + } + + // ----- Look for skip + if ($v_skip > 0) { + while ($v_skip > 0) { + $v_result = '../' . $v_result; + $v_skip--; + } + } + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; +} + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilPathInclusion() + // Description : + // This function indicates if the path $p_path is under the $p_dir tree. Or, + // said in an other way, if the file or sub-dir $p_path is inside the dir + // $p_dir. + // The function indicates also if the path is exactly the same as the dir. + // This function supports path with duplicated '/' like '//', but does not + // support '.' or '..' statements. + // Parameters : + // Return Values : + // 0 if $p_path is not inside directory $p_dir + // 1 if $p_path is inside directory $p_dir + // 2 if $p_path is exactly the same as $p_dir + // -------------------------------------------------------------------------------- +function PclZipUtilPathInclusion($p_dir, $p_path) +{ + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilPathInclusion", "dir='$p_dir', path='$p_path'"); + $v_result = 1; + + // ----- Look for path beginning by ./ + if ( + ($p_dir == '.') + || ((strlen($p_dir) >= 2) && (substr($p_dir, 0, 2) == './')) + ) { + $p_dir = PclZipUtilTranslateWinPath(getcwd(), false) . '/' . substr($p_dir, 1); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Replacing ./ by full path in p_dir '".$p_dir."'"); + } + if ( + ($p_path == '.') + || ((strlen($p_path) >= 2) && (substr($p_path, 0, 2) == './')) + ) { + $p_path = PclZipUtilTranslateWinPath(getcwd(), false) . '/' . substr($p_path, 1); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Replacing ./ by full path in p_path '".$p_path."'"); + } + + // ----- Explode dir and path by directory separator + $v_list_dir = explode("/", $p_dir); + $v_list_dir_size = count($v_list_dir); + $v_list_path = explode("/", $p_path); + $v_list_path_size = count($v_list_path); + + // ----- Study directories paths + $i = 0; + $j = 0; + while (($i < $v_list_dir_size) && ($j < $v_list_path_size) && ($v_result)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Working on dir($i)='".$v_list_dir[$i]."' and path($j)='".$v_list_path[$j]."'"); + + // ----- Look for empty dir (path reduction) + if ($v_list_dir[$i] == '') { + $i++; + continue; + } + if ($v_list_path[$j] == '') { + $j++; + continue; + } + + // ----- Compare the items + if (($v_list_dir[$i] !== $v_list_path[$j]) && ($v_list_dir[$i] != '') && ( $v_list_path[$j] != '')) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Items ($i,$j) are different"); + $v_result = 0; + } + + // ----- Next items + $i++; + $j++; + } + + // ----- Look if everything seems to be the same + if ($v_result) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Look for tie break"); + // ----- Skip all the empty items + while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) $j++; + while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) $i++; + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Looking on dir($i)='".($i < $v_list_dir_size?$v_list_dir[$i]:'')."' and path($j)='".($j < $v_list_path_size?$v_list_path[$j]:'')."'"); + + if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) { + // ----- There are exactly the same + $v_result = 2; + } elseif ($i < $v_list_dir_size) { + // ----- The path is shorter than the dir + $v_result = 0; + } + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; +} + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilCopyBlock() + // Description : + // Parameters : + // $p_mode : read/write compression mode + // 0 : src & dest normal + // 1 : src gzip, dest normal + // 2 : src normal, dest gzip + // 3 : src & dest gzip + // Return Values : + // -------------------------------------------------------------------------------- +function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode = 0) +{ + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilCopyBlock", "size=$p_size, mode=$p_mode"); + $v_result = 1; + + if ($p_mode == 0) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Src offset before read :".(@ftell($p_src))); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Dest offset before write :".(@ftell($p_dest))); + while ($p_size != 0) { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes"); + $v_buffer = @fread($p_src, $v_read_size); + @fwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Src offset after read :".(@ftell($p_src))); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Dest offset after write :".(@ftell($p_dest))); + } elseif ($p_mode == 1) { + while ($p_size != 0) { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes"); + $v_buffer = @gzread($p_src, $v_read_size); + @fwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } elseif ($p_mode == 2) { + while ($p_size != 0) { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes"); + $v_buffer = @fread($p_src, $v_read_size); + @gzwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } elseif ($p_mode == 3) { + while ($p_size != 0) { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes"); + $v_buffer = @gzread($p_src, $v_read_size); + @gzwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; +} + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilRename() + // Description : + // This function tries to do a simple rename() function. If it fails, it + // tries to copy the $p_src file in a new $p_dest file and then unlink the + // first one. + // Parameters : + // $p_src : Old filename + // $p_dest : New filename + // Return Values : + // 1 on success, 0 on failure. + // -------------------------------------------------------------------------------- +function PclZipUtilRename($p_src, $p_dest) +{ + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilRename", "source=$p_src, destination=$p_dest"); + $v_result = 1; + + // ----- Try to rename the files + if (!@rename($p_src, $p_dest)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Fail to rename file, try copy+unlink"); + + // ----- Try to copy & unlink the src + if (!@copy($p_src, $p_dest)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Fail to copy file"); + $v_result = 0; + } elseif (!@unlink($p_src)) { + //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Fail to unlink old filename"); + $v_result = 0; + } + } + + // ----- Return + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; +} + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilOptionText() + // Description : + // Translate option value in text. Mainly for debug purpose. + // Parameters : + // $p_option : the option value. + // Return Values : + // The option text value. + // -------------------------------------------------------------------------------- +function PclZipUtilOptionText($p_option) +{ + //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilOptionText", "option='".$p_option."'"); + + $v_list = get_defined_constants(); + for (reset($v_list); $v_key = key($v_list); next($v_list)) { + $v_prefix = substr($v_key, 0, 10); + if ( + ( ($v_prefix == 'PCLZIP_OPT') + || ($v_prefix == 'PCLZIP_CB_') + || ($v_prefix == 'PCLZIP_ATT')) + && ($v_list[$v_key] == $p_option) + ) { + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_key); + return $v_key; + } + } + + $v_result = 'Unknown'; + + //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); + return $v_result; +} + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilTranslateWinPath() + // Description : + // Translate windows path by replacing '\' by '/' and optionally removing + // drive letter. + // Parameters : + // $p_path : path to translate. + // $p_remove_disk_letter : true | false + // Return Values : + // The path translated. + // -------------------------------------------------------------------------------- +function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter = true) +{ + if (stristr(php_uname(), 'windows')) { + // ----- Look for potential disk letter + if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) { + $p_path = substr($p_path, $v_position + 1); + } + // ----- Change potential windows directory separator + if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0, 1) == '\\')) { + $p_path = strtr($p_path, '\\', '/'); + } + } + return $p_path; +} + // -------------------------------------------------------------------------------- diff --git a/plugins/55/indexmenu/inc/repo.class.php b/plugins/55/indexmenu/inc/repo.class.php new file mode 100644 index 0000000..bc6fd09 --- /dev/null +++ b/plugins/55/indexmenu/inc/repo.class.php @@ -0,0 +1,56 @@ + + */ + + public function sendTheme($file) + { + require_once(DOKU_PLUGIN . 'indexmenu/syntax/indexmenu.php'); + $idxm = new syntax_plugin_indexmenu_indexmenu(); + //clean the file name + $file = cleanID($file); + //check config + if (!$idxm->getConf('be_repo') || empty($file)) return false; + $repodir = DOKU_PLUGIN . "indexmenu/images/repository"; + $zipfile = $repodir . "/$file.zip"; + $localtheme = DOKU_PLUGIN . "indexmenu/images/$file/"; + //theme does not exists + if (!file_exists($localtheme)) return false; + if (!io_mkdir_p($repodir)) return false; + $lm = @filemtime($zipfile); + //no cached zip or older than 1 day + if ($lm < time() - (60 * 60 * 24)) { + //create the zip + require_once(DOKU_PLUGIN . "indexmenu/inc/pclzip.lib.php"); + @unlink($zipfile); + $zip = new PclZip($zipfile); + $status = $zip->add($localtheme, PCLZIP_OPT_REMOVE_ALL_PATH); + //error + if ($status == 0) return false; + } + $len = (int) filesize($zipfile); + //don't send large zips + if ($len > 2 * 1024 * 1024) return false; + //headers + header('Cache-Control: must-revalidate, no-transform, post-check=0, pre-check=0'); + header('Pragma: public'); + header('Content-Type: application/zip'); + header('Content-Disposition: attachment; filename="' . basename($zipfile) . '";'); + header("Content-Transfer-Encoding: binary"); + //send zip + $fp = @fopen($zipfile, 'rb'); + if ($fp) { + $ct = @fread($fp, $len); + echo $ct; + } + @fclose($fp); + return true; + } +} diff --git a/plugins/55/indexmenu/lang/ckb/lang.php b/plugins/55/indexmenu/lang/ckb/lang.php new file mode 100644 index 0000000..fffd71e --- /dev/null +++ b/plugins/55/indexmenu/lang/ckb/lang.php @@ -0,0 +1,88 @@ + + */ +$lang['menu'] = 'پێڕستی خزمەتگوزاری'; +$lang['fetch'] = 'نیشاندان'; +$lang['install'] = 'دامەزراندن'; +$lang['delete'] = 'سڕینەوە'; +$lang['check'] = 'پشکنین'; +$lang['no_repos'] = 'هیچ بەستەری بارکراو شێوەبەند نەکراوە.'; +$lang['disabled'] = 'ناچالاککراوە'; +$lang['conn_err'] = 'هەڵەی پەیوەندی'; +$lang['dir_err'] = 'ناتوانێت فۆڵدەری کاتی دروست بکات بۆ وەرگرتنی ڕووکار'; +$lang['down_err'] = 'ناتوانێت ڕووکار وەربگرێت'; +$lang['zip_err'] = 'هەڵەی دروست کردن یان دەرهێنانی زیپ'; +$lang['install_ok'] = 'ڕووکار بە سەرکەوتوویی دامەزرا. ڕووکارە نوێیەکە لە شریتی ئامڕازی لاپەڕەی بژارکردن یان لەگەڵ js#theme_name.'; +$lang['install_no'] = 'هەڵەی پەیوەندی. هەرچۆنێک بێت دەتوانیت ڕووکارەکەت بە دەستی باربکەیت لە لێرە.'; +$lang['delete_ok'] = 'ڕووکار بە سەرکەوتوویی سڕاوەتەوە.'; +$lang['delete_no'] = 'هەڵەیەک ڕوویدا لەکاتی سڕینەوەی ڕووکار'; +$lang['upload'] = 'هاوبەش کردن'; +$lang['checkupdates'] = 'نوێکردنەوەکانی پێوەکراو'; +$lang['noupdates'] = 'پێڕستی پێڕست پێویستی بە نوێکردنەوە نییە. تۆ پێشتر دوا وەشانت هەیە:'; +$lang['infos'] = 'دەتوانیت ڕووکارەکەت دروست بکەیت دوای ڕێنماییەکان لە Theme Tutorial page.
    دواتر دەتوانیت زیاتر خەڵک دڵخۆش بکەیت :-) ناردنی بۆ کۆگای پێرستی گشتی، لەگەڵ دوگمەی "هاوبەشکردن" لەژێر ئەو ڕووکارە.'; +$lang['showsort'] = 'ژمارەی ڕیزکردنی پێڕستی پێڕست: '; +$lang['donation_text'] = 'پێوەکراوەی پێرستمی هیچ کەسێک سپۆنسەری ناکات بەڵام من بە خۆڕایی لە کاتی یەدەگی خۆمدا پەرەی پێ دەدەم و پشتگیری دەکەم . ئەگەر شتێکی سوپاسگوزارت بۆ بەدەست بهێنی یان دەتەوێت پشتگیری لە گەشەی بکەیت، دەتوانیت بیر لە بەخشینێک بکەیت.'; +$lang['js']['indexmenuwizard'] = 'ویزاردی پێرست'; +$lang['js']['index'] = 'پێڕست'; +$lang['js']['options'] = 'هەڵبژاردنەکان'; +$lang['js']['navigation'] = 'ڕێنیشاندەر'; +$lang['js']['sort'] = 'پۆلێنکردن'; +$lang['js']['filter'] = 'فلتەر'; +$lang['js']['performance'] = 'ئەدا'; +$lang['js']['namespace'] = 'بۆشایی ناو'; +$lang['js']['nsdepth'] = 'قوڵایی'; +$lang['js']['js'] = 'درەخت لەلایەن Javasript ەوە بە چاپ درا، دەتوانیت ڕووکاری خۆت پێناسە کەیت'; +$lang['js']['theme'] = 'ڕووکار'; +$lang['js']['navbar'] = 'درەختەکە لە بۆشایی ناوی ئێستا دەکرێتەوە'; +$lang['js']['context'] = 'درەختی چوارچێوەی بۆشایی ناوی ویکی ئێستا پیشان بدە'; +$lang['js']['nocookie'] = 'بیرت نایەت کە گرێی کراوە/داخراو لە کاتی ڕێدۆزی بەکارهێنەردا'; +$lang['js']['noscroll'] = 'ڕێبگرە لە خشاندنی درەختەکە کاتێک لەگەڵ پانتایی دەفرەکە ناجێت'; +$lang['js']['notoc'] = 'تایبەتمەندی پێشبینینی toc لە کاربخە'; +$lang['js']['tsort'] = 'بە ناونیشان'; +$lang['js']['dsort'] = 'بەپێی بەروار'; +$lang['js']['msort'] = 'بە تاگی مێتا'; +$lang['js']['nsort'] = 'ڕیزکردن هەروەها بۆشایی ناوەکان'; +$lang['js']['hsort'] = 'ڕیزکردنی پەڕەی سەرەوە'; +$lang['js']['rsort'] = 'پێچەوانەکردنی ڕیزکردنی لاپەڕەکان'; +$lang['js']['nons'] = 'تەنها لاپەڕەکان نیشان بدە'; +$lang['js']['nopg'] = 'تەنها بۆشایی ناوەکان نیشان بدە'; +$lang['js']['max'] = 'چەند ئاست بۆ ئەوەی بە ئەیجاکس بنووسێ کاتێک گرێیەک دەکرێتەوە. زیادە چەند ئاست لە خوارەوەی ئەو ئاستە لەگەڵ ئەیجاکس دەهێنەوە لە جیاتی ئەوەی لە یەک ڕۆیشتندا.'; +$lang['js']['maxjs'] = 'چەند ئاست بۆ تێکردن لە خوێنەری کڕیار کاتێک گرێیەک دەکرێتەوە'; +$lang['js']['id'] = 'پێناسی کووکی پێناسەکراوی خۆکار بۆ ئەم پێڕستی'; +$lang['js']['insert'] = 'مێنوی ئیندێکس دابخە'; +$lang['js']['metanum'] = 'ژمارەی مێتا بۆ پۆلێنکردن'; +$lang['js']['insertmetanum'] = 'ژمارە دابنێ'; +$lang['js']['page'] = 'پەڕە'; +$lang['js']['revs'] = 'پێداچوونەوەکان'; +$lang['js']['tocpreview'] = 'پێشبینینی Toc'; +$lang['js']['editmode'] = 'دەستکاری مۆد'; +$lang['js']['insertdwlink'] = 'داخڵکردن وەک DWlink'; +$lang['js']['insertdwlinktooltip'] = 'لینکی ئەم لاپەڕەیە لە خانەی بژارکردن دا بنێرە لە شوێنی نیشاندەر'; +$lang['js']['ns'] = 'بۆشایی ناو'; +$lang['js']['search'] = 'گەڕان ...'; +$lang['js']['searchtooltip'] = 'گەڕان بۆ پەڕەکان لەناو ئەم بۆشایی ناوەدا'; +$lang['js']['create'] = 'دروستکردن'; +$lang['js']['more'] = 'زیاتر'; +$lang['js']['headpage'] = 'پەڕەی سەر'; +$lang['js']['headpagetooltip'] = 'پەڕەیەکی سەرەکی نوێ دروست بکە لەژێر ئەم لاپەڕەیە'; +$lang['js']['startpage'] = 'پەڕەی سەرەتا'; +$lang['js']['startpagetooltip'] = 'دروستکردنی لاپەرەیەکی نوێی دەستپێک لەژێر ئەم لاپەڕەیە'; +$lang['js']['custompage'] = 'پەڕەی ئاسایی...'; +$lang['js']['custompagetooltip'] = 'دروستکردنی لاپەڕەیەکی نوێ (تێکردنی ناو لەڕێی دەرکەوتە) لەژێر ئەم لاپەڕەیە'; +$lang['js']['acls'] = 'Acls'; +$lang['js']['purgecache'] = 'پاککردنەوە حەشارگە'; +$lang['js']['exporthtml'] = 'ناردن وەک HTML'; +$lang['js']['exporttext'] = 'ناردن وەک دەق'; +$lang['js']['headpagehere'] = 'پەڕەی سەرەکی لێرە'; +$lang['js']['headpageheretooltip'] = 'دروستکردنی پەڕەیەکی سەرەکی نوێ لەناو ئەم بۆشایی ناوەدا'; +$lang['js']['newpage'] = 'پەڕەی نوێ...'; +$lang['js']['newpagetooltip'] = 'لاپەڕەیەکی نوێ دروست بکە (ناوی تێکردن لەڕێی دەرکەوتە) لەناو ئەم بۆشایی ناوەدا'; +$lang['js']['newpagehere'] = 'لاپەڕەیەکی نوێ لێرە'; +$lang['js']['insertkeywords'] = 'دانانی وشە(ەکان) بۆ گەڕان بۆ ناو ئەم بۆشایی ناوە'; +$lang['js']['insertpagename'] = 'ناوی لاپەڕە بکەنێو بۆ دروستکردنی'; +$lang['js']['edit'] = 'دەستکاری'; +$lang['js']['loading'] = 'بارکردن...'; diff --git a/plugins/55/indexmenu/lang/ckb/settings.php b/plugins/55/indexmenu/lang/ckb/settings.php new file mode 100644 index 0000000..6061208 --- /dev/null +++ b/plugins/55/indexmenu/lang/ckb/settings.php @@ -0,0 +1,20 @@ + + */ +$lang['checkupdate'] = 'پشکنینی خولی بۆ نوێکردنەوەکان.'; +$lang['only_admins'] = 'ڕێپێدانی رێپێدانی رێزمانکردنی پێرستی رێپێدراو تەنها بۆ بەڕێوەبەرەکان.
    تێبینی ئەو پەڕەیە کە لەلایەن بەکارهێنەرێکی بێ سەرپەرشتیارەوە بژارکراوە، هەموو دارێکی پێرستی تێدا دەفەوتێت.'; +$lang['aclcache'] = 'چاککردنی شوێنی خەزنکردنی شوێنی خەزنکردنی پێرستی acl (تەنها کاردەکات بۆ بۆشایی ناوی داواکراوی ڕەگ).
    هەڵبژاردنی شێوازەکە کاریگەری تەنها لەسەر وێناکردنی گرێکان لەسەر درەختی پێڕستی پێڕست دەکات، نەک مۆڵەتەکانی لاپەڕە.

    • : پێوانەیی. ئەمە شێوازی خێراترە و فایلی زیاتری خەزنکردنی کاتی دروست ناکات، بەڵام ئەو گرێانەی مۆڵەتی ڕەتکراوەیان هەیە، دەکرێت پیشان درا بێت بۆ بەکارهێنەرانی مۆڵەتپێدراو یان بەپێچەوانەوە. پێشنیارکراوە کاتێک تۆ چوونە ژورەوەی پەڕەکان ڕەت ناکەیت بە acl یان گوێ ت بە چۆنیەتی پیشاندانی درەختەکە نادرێت.
    • User: Per-User login. شێوازی هێواشتر و فایلی حەشارگە زۆر دروست دەکات، بەڵام هەمیشە لاپەڕە حاشالێنەکراوەکانی بە دروستی دەشارێتەوە. پێشنیارکراوە کاتێک acls لاپەڕەت هەیە کە پشت دەبەستێت بە چوونەژوورەوەی بەکارهێنەران.
    • گرووپەکان: ئەندامێتی هەر گرووپێک. سازانی باش لەنێوان شێوازەکانی پێشوو، بەڵام ئەگەر تۆ نکۆڵی لە acl خوێندنەوە کە سەر بە گروپێکە بە acl ی خوێندنەوە، ئینکاری بکەیت، ئەوا بە هەر شێوەیەک بێت ئەو گرێیە لە دارەکە پیشان دەدات. پێشنیارکراوە کاتێک هەموو سایتەکەت پشت بە ئەندامێتی گرووپەکان دەبەستێت.
    '; +$lang['headpage'] = 'شێوازی پەڕەی سەرەکی: لاپەڕەکە کە دووبارە ناونیشانی و لینکی بۆشایی ناوی لێ دەکاتەوە.
    دەکرێت هەر یەکێک لەم بەهایە بێت:
    • The global start page.
    • لاپەڕەیەک بە ناوی بۆشایی ناو و ئەوەی لەناودایە.
    • لاپەڕەلەگەڵ ناوی ناوی ناوی ناو و ئەوەش لە هەمان ئاستدایە.
    • پەڕەی ناوی تایبەت.
    • ئەی لیستی جیاکراوەی ناوی لاپەڕەکان.
    '; +$lang['hide_headpage'] = 'شاردنەوەی پەڕەی سەر.'; +$lang['page_index'] = 'ئەو لاپەڕەیەی کە شوێنی پێڕستسەرەکی دۆکوویکی دەگۆڕدریت. دروست کردنی و داخڵکردنی ڕستەی پێرست. بەکارهێنانی #randomid ئەگەر پێشتر شریتی لاوەکی پێڕستی ت هەیە لەگەڵ بەربژاری ناڤباڕ. پێشنیاری من {{پێرستمێنو>..| js navbar nocookie id#random}}}.'; +$lang['empty_msg'] = 'نامە بۆ نیشاندان کاتێک درەخت بەتاڵ. بەکارهێنانی ڕستەسازی Dokuwiki، نەک کۆدی html. گۆڕاوی {{ns}} کورتکراوەی بۆشایی ناوی داواکراوە.'; +$lang['skip_index'] = 'ناسنامەی بۆشایی ناوەکان بۆ بازدان. بەکارهێنانی فۆرماتی دەربڕینی ئاسایی. نموونە: /(شریتەکانی لا|تایبەت:myns)/'; +$lang['skip_file'] = 'پەڕەی ناسنامە بۆ بازدان. بەکارهێنانی فۆرماتی دەربڕینی ئاسایی. نموونە/(:start$|^public:newstart$)/'; +$lang['show_sort'] = 'پیشاندانی بۆ بەڕێوەبەرەکانی لیستی ژمارە ڕیزکردنی پێڕست وەک سەرەوەی تێبینی لاپەڕە'; +$lang['themes_url'] = 'داگرتنی ڕووکاری js لەم url http.'; +$lang['be_repo'] = 'ڕێگە بدە بە کەسانی تر ڕووکارەکان لە ماڵپەڕەکەتەوە دابەزێنن.'; +$lang['defaultoptions'] = 'لیستی هەڵبژاردنەکانی پێرستی جیاکراوە بە بۆشاییەکان. ئەم بەربژارانە بە گریمانە بۆ هەموو پێرستمێنوێک جێبەجێ دەکرێت و دەکرێت بە فرمانێکی پێچەوانە لە ڕستەی پێوەکراودا پاشگەز بکرێتەوە'; diff --git a/plugins/55/indexmenu/lang/cs/lang.php b/plugins/55/indexmenu/lang/cs/lang.php new file mode 100644 index 0000000..4dce7a0 --- /dev/null +++ b/plugins/55/indexmenu/lang/cs/lang.php @@ -0,0 +1,48 @@ + + * @author Vojta Olsan + */ +$lang['menu'] = 'Indexmenu nástroje'; +$lang['fetch'] = 'Zobrazit'; +$lang['install'] = 'Nainstalovat'; +$lang['delete'] = 'Smazat'; +$lang['check'] = 'Zkontrolovat'; +$lang['no_repos'] = 'Nebyla nastavena adresa úložiště šablon.'; +$lang['disabled'] = 'Zakázané'; +$lang['conn_err'] = 'Chyba spojení'; +$lang['dir_err'] = 'Nezdařilo se vytvoření dočasné složky pro stažení šablony'; +$lang['down_err'] = 'Nezdařilo se stažení šablony'; +$lang['zip_err'] = 'Nastala chyba při vytváření nebo rozbalování ZIPu'; +$lang['delete_ok'] = 'Šablona byla úspěšně smazána'; +$lang['delete_no'] = 'Při mazání šablony nastala chyba'; +$lang['upload'] = 'Sdílet'; +$lang['checkupdates'] = 'Aktualizace pluginů'; +$lang['js']['options'] = 'Možnosti'; +$lang['js']['navigation'] = 'Navigace'; +$lang['js']['sort'] = 'Srovnat'; +$lang['js']['filter'] = 'Filtrovat'; +$lang['js']['performance'] = 'Výkon'; +$lang['js']['nsdepth'] = 'Hloubka'; +$lang['js']['theme'] = 'Téma'; +$lang['js']['tsort'] = 'Podle názvu'; +$lang['js']['dsort'] = 'Podle data'; +$lang['js']['msort'] = 'Podle meta tagu'; +$lang['js']['nons'] = 'Zobrazit pouze stránky'; +$lang['js']['insertmetanum'] = 'Vložit metačíslo'; +$lang['js']['page'] = 'Stránka'; +$lang['js']['revs'] = 'Revize'; +$lang['js']['editmode'] = 'Editační mód'; +$lang['js']['insertdwlink'] = 'Vložit jako DWlink'; +$lang['js']['search'] = 'Vyhledat ...'; +$lang['js']['create'] = 'Vytvořit'; +$lang['js']['more'] = 'Více'; +$lang['js']['purgecache'] = 'Vyčistit cache'; +$lang['js']['exporthtml'] = 'Exportovat jako HTML'; +$lang['js']['exporttext'] = 'Exportovat jako text'; +$lang['js']['newpage'] = 'Nová stránka...'; +$lang['js']['edit'] = 'Upravit'; +$lang['js']['loading'] = 'Nahrávání...'; diff --git a/plugins/55/indexmenu/lang/cs/settings.php b/plugins/55/indexmenu/lang/cs/settings.php new file mode 100644 index 0000000..2b6e9e0 --- /dev/null +++ b/plugins/55/indexmenu/lang/cs/settings.php @@ -0,0 +1,8 @@ + + */ +$lang['checkupdate'] = 'Pravidelně kontrolovat aktualizace'; diff --git a/plugins/55/indexmenu/lang/da/lang.php b/plugins/55/indexmenu/lang/da/lang.php new file mode 100644 index 0000000..02d40e3 --- /dev/null +++ b/plugins/55/indexmenu/lang/da/lang.php @@ -0,0 +1,42 @@ + + */ +$lang['menu'] = 'Indexmenu værktøjer'; +$lang['fetch'] = 'Vis'; +$lang['install'] = 'Installer'; +$lang['delete'] = 'Slet'; +$lang['check'] = 'Marker'; +$lang['disabled'] = 'Deaktiveret'; +$lang['conn_err'] = 'Forbindelsesfejl'; +$lang['dir_err'] = 'Kunne ikke oprette midlertidig mappe til at indeholde tema'; +$lang['down_err'] = 'Kunne ikke modtage tema'; +$lang['zip_err'] = 'ZIP oprettelses eller udpakningsfejl'; +$lang['install_ok'] = 'tema installeret korrekt. Det nye tema er til rådighed i værktøjslinjen for redigeringssiden eller med js#theme_name option.'; +$lang['install_no'] = 'Forbindelsesfejl. Du kan dog prøve at downloade dit tema manuelt fra dette sted.'; +$lang['delete_ok'] = 'Tema blev slettet korrekt.'; +$lang['delete_no'] = 'Der opstod en fejl ved sletning af tema'; +$lang['upload'] = 'Del'; +$lang['checkupdates'] = 'Udvidelsesopdateringer'; +$lang['noupdates'] = 'Indexmenu skal ikke opdateres. Du har allerede den nyeste udgave:'; +$lang['js']['indexmenuwizard'] = 'Indexmenu guide'; +$lang['js']['index'] = 'Index'; +$lang['js']['options'] = 'Indstillinger'; +$lang['js']['navigation'] = 'Navigation'; +$lang['js']['sort'] = 'Sorter'; +$lang['js']['filter'] = 'Filtrer'; +$lang['js']['performance'] = 'Ydelse'; +$lang['js']['namespace'] = 'Navnerum'; +$lang['js']['nsdepth'] = 'Dybde'; +$lang['js']['tsort'] = 'Efter titel'; +$lang['js']['dsort'] = 'Efter dato'; +$lang['js']['msort'] = 'Efter metatag'; +$lang['js']['nsort'] = 'Sorter også navnerum'; +$lang['js']['nons'] = 'Vis kun sider'; +$lang['js']['nopg'] = 'Vis kun navnerum'; +$lang['js']['insert'] = 'Indsæt indexmenu'; +$lang['js']['metanum'] = 'Metanummer for sortering'; +$lang['js']['insertmetanum'] = 'Indsæt metanummer'; diff --git a/plugins/55/indexmenu/lang/da/settings.php b/plugins/55/indexmenu/lang/da/settings.php new file mode 100644 index 0000000..9458112 --- /dev/null +++ b/plugins/55/indexmenu/lang/da/settings.php @@ -0,0 +1,8 @@ + + */ +$lang['checkupdate'] = 'Søg periodisk efter opdateringer.'; diff --git a/plugins/55/indexmenu/lang/de-informal/lang.php b/plugins/55/indexmenu/lang/de-informal/lang.php new file mode 100644 index 0000000..8f88593 --- /dev/null +++ b/plugins/55/indexmenu/lang/de-informal/lang.php @@ -0,0 +1,81 @@ + + * @author Dana + */ +$lang['menu'] = 'Indexmenu Werkzeuge'; +$lang['fetch'] = 'Anzeigen'; +$lang['install'] = 'Installieren'; +$lang['delete'] = 'Löschen'; +$lang['check'] = 'Überprüfen'; +$lang['no_repos'] = 'Keine URL für ein Template Repository vorhanden.'; +$lang['disabled'] = 'Deaktiviert'; +$lang['conn_err'] = 'Verbindung fehlgeschlagen'; +$lang['dir_err'] = 'Fehler bei der Erzeugung eines Verzeichnises. Designvorlage konnte nicht gespeichert werden'; +$lang['down_err'] = 'Fehler beim Herunterladen der Designvorlage'; +$lang['zip_err'] = 'Fehler beim Erstellen oder Entpacken der Zip-Datei'; +$lang['install_ok'] = 'Designvorlage wurde erfolgreich erstellt. Die neue Designvorlage ist in der Werkzeugleiste der Konfigurationsseite oder über die js#theme_name Option verfügbar.'; +$lang['install_no'] = 'Verbindungsfehler. Du kannst aber versuchen, die Designvorlage hier hochzuladen.'; +$lang['delete_ok'] = 'Designvorlage wurde erfolgreich gelöscht.'; +$lang['delete_no'] = 'Beim Löschen ist ein Fehler aufgetreten'; +$lang['upload'] = 'Hochladen'; +$lang['checkupdates'] = 'updaten'; +$lang['noupdates'] = 'Indexmenu muss nicht upgedated werden. Du hast bereits die aktuellste Version:'; +$lang['infos'] = 'Du kannst eine neue Designvorlage erstellen. Beachte die Anleitung im Designvorlagen-TutorialWenn Du den "Hochladen" Button unter der Desingvorlage drückst, kannst Du viele Leute glücklich machen :-) dadurch, dass Du sie im öffentlichen Indexmenu-Repository bereitstellst.'; +$lang['showsort'] = 'Indexmenu Sortierungsnummer: '; +$lang['donation_text'] = 'Das indexmenu-Plugin wurde vom niemandem unterstützt, aber ich entwickle und unterstütze es in meiner Freizeit. Wenn Du dich bedanken oder die Entwicklung unterstützen willst, denke doch bitte über eine Spende nach.'; +$lang['js']['indexmenuwizard'] = 'Indexmenu-Wizard'; +$lang['js']['index'] = 'Index'; +$lang['js']['options'] = 'Optionen'; +$lang['js']['navigation'] = 'Navigation'; +$lang['js']['sort'] = 'Sortierung'; +$lang['js']['filter'] = 'Filter'; +$lang['js']['performance'] = 'Performance'; +$lang['js']['namespace'] = 'Namensraum'; +$lang['js']['nsdepth'] = 'Tiefe'; +$lang['js']['js'] = 'Der Baum wird in Javascript gerendert, Sie können Ihr eigenes Theme festlegen'; +$lang['js']['theme'] = 'Theme'; +$lang['js']['navbar'] = 'Der Baum öffnet am aktuellen Namensraum'; +$lang['js']['context'] = 'Den Baum auf Basis des aktuellen Namensraums anzeigen'; +$lang['js']['nocookie'] = 'Den Geöffnet/Geschlossen-Status einzelner Knoten nicht speichern während der Navigation'; +$lang['js']['noscroll'] = 'Das Scrollen des Baums ausschalten, wenn er nicht auf die Seite passt'; +$lang['js']['notoc'] = 'Vorschau des Inhaltsverzeichnisses deaktivieren'; +$lang['js']['tsort'] = 'Nach Titel'; +$lang['js']['dsort'] = 'Nach Datum'; +$lang['js']['msort'] = 'Nach Meta-Tag'; +$lang['js']['nsort'] = 'Auch die Namensräume sortieren'; +$lang['js']['hsort'] = 'Startseite oben sortieren'; +$lang['js']['rsort'] = 'Sortierung der Seiten umdrehen'; +$lang['js']['nons'] = 'Nur Seiten zeigen'; +$lang['js']['nopg'] = 'Nur Namensräume zeigen'; +$lang['js']['max'] = 'Wieviele Ebenen sollen mit Ajax geholt werden, wenn ein Knoten geöffnet wird? Außerdem: wieviele Unterebenen unterhalb dieser Ebene sollen mit Ajax geholt werden anstatt während des Seitenaufbaus?'; +$lang['js']['maxjs'] = 'Wieviele Ebenen sollen im Browser statt auf dem Server gerendert werden, wenn ein Knoten geöffnet wird?'; +$lang['js']['id'] = 'Benutzerspezifische Cookie-ID f¨r dieses indexmenu'; +$lang['js']['insert'] = 'Indexmenu einf¨gen'; +$lang['js']['metanum'] = 'Meta-Nummer zur Sortierung'; +$lang['js']['insertmetanum'] = 'Metanummer einfügen'; +$lang['js']['page'] = 'Seite'; +$lang['js']['revs'] = 'Berechtigungen'; +$lang['js']['editmode'] = 'Editiermodus'; +$lang['js']['insertdwlink'] = 'Einfügen als DWlink'; +$lang['js']['ns'] = 'Namensraum'; +$lang['js']['search'] = 'Suchen ...'; +$lang['js']['searchtooltip'] = 'Suchen von Seiten innerhalb dieses Namensraums'; +$lang['js']['create'] = 'Erstellen'; +$lang['js']['more'] = 'Mehr'; +$lang['js']['startpage'] = 'Startseite'; +$lang['js']['startpagetooltip'] = 'Erstellen einer neuen Startseite unter dieser Seite'; +$lang['js']['custompage'] = 'Benutzerdefinierte Seite'; +$lang['js']['custompagetooltip'] = 'Erstellen einer neuen Seite unter dieser Seite'; +$lang['js']['acls'] = 'ACLs'; +$lang['js']['purgecache'] = 'Cache löschen'; +$lang['js']['exporthtml'] = 'Exportieren als HTML'; +$lang['js']['exporttext'] = 'Exportieren als Text'; +$lang['js']['newpage'] = 'Neue Seite'; +$lang['js']['newpagehere'] = 'Neue Seite hier'; +$lang['js']['insertpagename'] = 'Einfügen des Seitennamens zum Erstellen'; +$lang['js']['edit'] = 'Bearbeiten'; +$lang['js']['loading'] = 'Laden...'; diff --git a/plugins/55/indexmenu/lang/de-informal/settings.php b/plugins/55/indexmenu/lang/de-informal/settings.php new file mode 100644 index 0000000..96f658e --- /dev/null +++ b/plugins/55/indexmenu/lang/de-informal/settings.php @@ -0,0 +1,22 @@ + + * @author Dana + */ +$lang['checkupdate'] = 'Regelmäßig auf Updates überprüfen.'; +$lang['only_admins'] = 'Indexmenu Syntax für Nicht-Admins verbieten.
    Beachte, dass durch das Editieren einer Seite durch einen Nicht-Admin jedes enthaltende Indexmenu verloren geht.'; +$lang['aclcache'] = 'Optimiert den Indexmenu Cache für ACL (nur für den Root Namespace).
    Die Auswahl einer Methode beinflusst nur die Anzeige der Knoten im Menu, nicht aber die Zugriffsrechte.
    • None: Standard. Die schnellste Methode. Es werden keine weiteren Cache Dateien erzeugt, aber Knoten mit mangelnden Zugriffsrechten können nicht authorisierten Benutzer gezeigt werden oder umgekehrt. Empfohlen, wenn Sie kein ACL verwenden oder es keine Rolle spielt wer die Menustruktur sieht.
    • User: Für jeden User. Langsamere Methode. Es werden viele Cache Dateien erzeugt, aber gesperrte Seiten werden nicht angezeigt. Empfohlen wenn Du ACL für einzelne Benutzer verwendest.
    • Groups: Für die Mitliedschaft in einer Gruppe. Guter Kompromiss zwischen den beiden vorhergenden Methoden, aber falls Du die Seite vor einem User versteckst, der in einer Gruppe ist, die mit Schreibrechten für die Seite ausgestatte ist, kann er den Knoten im Menu dennoch sehen. Empfohlen, wenn die Seite mit ACL und Gruppenrichtlinien verwaltet wird.
    '; +$lang['headpage'] = 'Startseiten Methode: die Seite von der der Titel und der Link für den Namespace genommen wird.
    Kann einer dieser Werte sein:
    • Die Wiki Startseite.
    • Eine Seite mit dem Namen des Namespaces die auch in diesem liegt.
    • Eine Seite mit dem Namen des Namespaces die auf der gleichen Ebene wie dieser liegt.
    • Ein ganz normale Seite.
    • Eine kommagetrennte Liste mit Seitennamen.
    '; +$lang['hide_headpage'] = 'Startseiten verstecken.'; +$lang['page_index'] = 'Die Seite die den DokuWiki Index ersetzen soll. Erstelle diese Seite und füge folgende Indexmenu Syntax ein. Nimm id#random falls Du bereits eine Indexmenu Sidebar mit der Navigations-Option verwedest. Mein Vorschlag ist {{indexmenu>..|js navbar nocookie id#random}}.'; +$lang['empty_msg'] = 'Nachricht die angezeigt wird, falls der Baum leer ist. Verwende Dokuwiki syntax, kein HTML Code. Die {{ns}} Variable ist eine Abkürzung für den verwendeten Namespace.'; +$lang['skip_index'] = 'Namespaces die nicht aufgenommen werden sollen. Du musst Reguläre Ausdrücke verweden. Beispiel: /(sidebars|private:myns)/'; +$lang['skip_file'] = 'Dateien die nicht aufgenommen werden sollen. Du musst ebenfalls Reguläre Ausdrücke verweden. Beispiel: /(:start$|^public:newstart)/'; +$lang['show_sort'] = 'Zeigt den Admins die Indexmenu Sortierungsnummer als top of page note'; +$lang['themes_url'] = 'JS Designvorlage von folgender http URL herunterladen.'; +$lang['be_repo'] = 'Andere Personen von Ihrer Seite Designvorlagen herunterladen lassen.'; +$lang['defaultoptions'] = 'Eine durch Leerzeichen getrennte Liste von Indexmenu-Optionen. +Diese Optionen werden standardmäßig auf alle Indexmenus angewandt und können durch einen umgekehrten Befehl in der Plugin-Syntax rückgängig gemacht werden.'; diff --git a/plugins/55/indexmenu/lang/de/lang.php b/plugins/55/indexmenu/lang/de/lang.php new file mode 100644 index 0000000..0c4842d --- /dev/null +++ b/plugins/55/indexmenu/lang/de/lang.php @@ -0,0 +1,91 @@ + + * @author Dennis Plöger + * @author Kilian Maier + * @author e-dschungel + * @author liz + */ +$lang['menu'] = 'Indexmenü Werkzeuge'; +$lang['fetch'] = 'Anzeigen'; +$lang['install'] = 'Installieren'; +$lang['delete'] = 'Löschen'; +$lang['check'] = 'Überprüfen'; +$lang['no_repos'] = 'Keine URL für ein Template-Repository vorhanden.'; +$lang['disabled'] = 'Deaktiviert'; +$lang['conn_err'] = 'Verbindung fehlgeschlagen'; +$lang['dir_err'] = 'Fehler bei der Erzeugung eines Verzeichnisses. Designvorlage konnte nicht gespeichert werden'; +$lang['down_err'] = 'Fehler beim Herunterladen der Designvorlage'; +$lang['zip_err'] = 'Fehler beim Erstellen oder Entpacken der Zip-Datei'; +$lang['install_ok'] = 'Designvorlage wurde erfolgreich erstellt. Die neue Designvorlage ist in der Werkzeugleiste der Konfigurationsseite oder über die js#theme_name Option verfügbar.'; +$lang['install_no'] = 'Verbindungsfehler. Sie können aber versuchen die Designvorlage
    hier hochzuladen.'; +$lang['delete_ok'] = 'Designvorlage wurde erfolgreich gelöscht.'; +$lang['delete_no'] = 'Beim Löschen ist ein Fehler aufgetreten'; +$lang['upload'] = 'Teilen'; +$lang['checkupdates'] = 'Plugin updaten'; +$lang['noupdates'] = 'Indexmenu muss nicht upgedated werden. Sie haben bereits die aktuellste Version:'; +$lang['infos'] = 'Sie können eine neue Designvorlage erstellen. Beachten Sie die Anleitung im Designvorlagen TutorialWenn Sie den "Hochladen" Button unter der Designvorlage drücken können Sie viele Leute glücklich machen :-) dadurch, dass Sie sie im öffentlichen Indexmenu Repository bereitstellen.'; +$lang['showsort'] = 'Indexmenu Sortierungsnummer: '; +$lang['donation_text'] = 'Das indexmenu-Plugin wurde vom niemandem unterstützt, aber ich entwickle und unterstütze es in meiner Freizeit. Wenn Sie sich bedanken oder die Entwicklung unterstützen wollen, denken Sie über eine Spende nach.'; +$lang['js']['indexmenuwizard'] = 'Indexmenu-Wizard'; +$lang['js']['index'] = 'Index'; +$lang['js']['options'] = 'Optionen'; +$lang['js']['navigation'] = 'Navigation'; +$lang['js']['sort'] = 'Sortierung'; +$lang['js']['filter'] = 'Filter'; +$lang['js']['performance'] = 'Performance'; +$lang['js']['namespace'] = 'Namensraum'; +$lang['js']['nsdepth'] = 'Tiefe'; +$lang['js']['js'] = 'Der Baum wird in Javascript gerendert, Sie können Ihr eigenes Theme festlegen'; +$lang['js']['theme'] = 'Theme'; +$lang['js']['navbar'] = 'Der Baum öffnet am aktuellen Namensraum'; +$lang['js']['context'] = 'Den Baum auf Basis des aktuellen Namensraums anzeigen'; +$lang['js']['nocookie'] = 'Den Geöffnet/Geschlossen-Status einzelner Knoten nicht speichern während der Navigation'; +$lang['js']['noscroll'] = 'Das Scrollen des Baums ausschalten, wenn er nicht auf die Seite passt'; +$lang['js']['notoc'] = 'Vorschau des Inhaltsverzeichnisses deaktivieren'; +$lang['js']['tsort'] = 'Nach Titel'; +$lang['js']['dsort'] = 'Nach Datum'; +$lang['js']['msort'] = 'Nach Meta-Tag'; +$lang['js']['nsort'] = 'Auch die Namensräume sortieren'; +$lang['js']['hsort'] = 'Startseite oben sortieren'; +$lang['js']['rsort'] = 'Sortierung der Seiten umdrehen'; +$lang['js']['nons'] = 'Nur Seiten zeigen'; +$lang['js']['nopg'] = 'Nur Namensräume zeigen'; +$lang['js']['max'] = 'Wieviele Ebenen sollen mit AJAX geholt werden, wenn ein Knoten geöffnet wird? Außerdem: wieviele Unterebenen unterhalb dieser Ebene sollen mit AJAX geholt werden anstatt während des Seitenaufbaus?'; +$lang['js']['maxjs'] = 'Wieviele Ebenen sollen im Browser statt auf dem Server gerendert werden, wenn ein Knoten geöffnet wird?'; +$lang['js']['id'] = 'Benutzerspezifische Cookie-ID für dieses Indexmenu'; +$lang['js']['insert'] = 'Indexmenu einfügen'; +$lang['js']['metanum'] = 'Meta-Nummer zur Sortierung'; +$lang['js']['insertmetanum'] = 'Metanummer einfügen'; +$lang['js']['page'] = 'Seite'; +$lang['js']['revs'] = 'Revision'; +$lang['js']['tocpreview'] = 'Toc Vorschau'; +$lang['js']['editmode'] = 'Bearbeitungsmodus'; +$lang['js']['insertdwlink'] = 'Einfügen als DWlink'; +$lang['js']['insertdwlinktooltip'] = 'Link dieser Seite in Eingabefeld an der entsprechenden Cursor-Position eingeben'; +$lang['js']['ns'] = 'Namensraum'; +$lang['js']['search'] = 'Suchen ...'; +$lang['js']['searchtooltip'] = 'Nach Seiten innerhalb dieses Namensraumes suchen'; +$lang['js']['create'] = 'Erstellen'; +$lang['js']['more'] = 'Mehr'; +$lang['js']['headpagetooltip'] = 'Eine neue headpage unter dieser Seite anlegen'; +$lang['js']['startpage'] = 'Startseite'; +$lang['js']['startpagetooltip'] = 'Erstelle eine neue Startseite unter dieser Seite'; +$lang['js']['custompage'] = 'Benutzerdefinierte Seite'; +$lang['js']['custompagetooltip'] = 'Erstelle eine neue Seite unter dieser Seite'; +$lang['js']['acls'] = 'ACLs'; +$lang['js']['purgecache'] = 'Cache löschen'; +$lang['js']['exporthtml'] = 'Exportieren als HTML'; +$lang['js']['exporttext'] = 'Exportieren als Text'; +$lang['js']['headpagehere'] = 'Headpage hier'; +$lang['js']['headpageheretooltip'] = 'Eine neue headpage innerhalb dieses Namensraums anlegen'; +$lang['js']['newpage'] = 'Neue Seite'; +$lang['js']['newpagetooltip'] = 'Eine neue Seite innerhalb dieses Namensraums erzeugen'; +$lang['js']['newpagehere'] = 'Neue Seite hier'; +$lang['js']['insertkeywords'] = 'Suchbegriff(e) für die Suche innerhalb dieses Namensraums eingeben'; +$lang['js']['insertpagename'] = 'Seitenname zum Erstellen eingeben'; +$lang['js']['edit'] = 'Bearbeiten'; +$lang['js']['loading'] = 'Lädt ...'; diff --git a/plugins/55/indexmenu/lang/de/settings.php b/plugins/55/indexmenu/lang/de/settings.php new file mode 100644 index 0000000..7f70ce7 --- /dev/null +++ b/plugins/55/indexmenu/lang/de/settings.php @@ -0,0 +1,22 @@ + + * @author e-dschungel + * @author liz + */ +$lang['checkupdate'] = 'Regelmäßig auf Updates überprüfen.'; +$lang['only_admins'] = 'Indexmenu Syntax für Nicht-Admins verbieten.
    Beachten Sie, dass durch das Editieren einer Seite durch einen Nicht-Admin jedes enthaltende Indexmenu verloren geht.'; +$lang['aclcache'] = 'Optimiert den Indexmenu Cache für ACL (nur für den Root Namespace).
    Die Auswahl einer Methode beinflußt nur die Anzeige der Knoten im Menü, nicht aber die Zugriffsrechte.
    • None: Standard. Die schnellste Methode. Es werden keine weiteren Cache Dateien erzeugt, aber Knoten mit mangelnden Zugriffsrechten können nicht autorisierten Benutzer gezeigt werden oder umgekehrt. Empfohlen, wenn Sie kein ACL verwenden oder es keine Rolle spielt wer die Menüstruktur sieht.
    • User: Für jeden User. Langsamere Methode. Es werden viele Cache Dateien erzeugt, aber gesperrte Seiten werden nicht angezeigt. Empfohlen wenn Sie ACL für einzelne Benutzer verwenden.
    • Groups: Für die Mitgliedschaft in einer Gruppe. Guter Kompromiss zwischen den beiden vorherigen Methoden, aber falls Sie die Seite vor einem User verstecken, der in einer Gruppe ist, die mit Schreibrechten für die Seite ausgestattet ist, kann er den Knoten im Menü dennoch sehen. Empfohlen, wenn die Seite mit ACL und Gruppenrichtlinien verwaltet wird.
    '; +$lang['headpage'] = 'Startseiten Methode: die Seite von der der Titel und der Link für den Namespace genommen wird.
    Kann einer dieser Werte sein:
    • Die Wiki Startseite.
    • Eine Seite mit dem Namen des Namespaces die auch in diesem liegt.
    • Eine Seite mit dem Namen des Namespaces die auf der gleichen Ebene wie dieser liegt.
    • Ein ganz normale Seite.
    • Eine kommagetrennte Liste mit Seitennamen.
    '; +$lang['hide_headpage'] = 'Startseiten verstecken.'; +$lang['page_index'] = 'Die Seite die den DokuWiki Index ersetzen soll. Erstellen Sie diese und fügen Sie folgende Indexmenu Syntax ein. Nehmen Sie id#random falls Sie bereits eine Indexmenu Sidebar mit der Navigations-Option verwenden. Mein Vorschlag ist {{indexmenu>..|js navbar nocookie id#random}}.'; +$lang['empty_msg'] = 'Nachricht die angezeigt wird, falls der Baum leer ist. Verwenden Sie Dokuwikisyntax, keinen HTML Code. Die {{ns}} Variable ist eine Abkürzung für den verwendeten Namespace.'; +$lang['skip_index'] = 'Namespaces die nicht aufgenommen werden sollen. Sie müssen Regular Ausdrücke verweden. Beispiel: /(sidebars|private:myns)/'; +$lang['skip_file'] = 'Dateien, die nicht aufgenommen werden sollen. Sie müssen auch reguläre Ausdrücke verwenden. Beispiel: /(:start$|^public:newstart)/'; +$lang['show_sort'] = 'Zeigt den Admins die Indexmenu Sortierungsnummer als top of page note'; +$lang['themes_url'] = 'JS Designvorlage von folgender http URL herunterladen.'; +$lang['be_repo'] = 'Andere Personen von Ihrer Seite Designvorlagen herunterladen lassen.'; +$lang['defaultoptions'] = 'Liste der Menüverzeichnis-Optionen durch Leerzeichen getrennt. Diese Optionen werden standardmäßig auf jedes Menüverzeichnis angewendet und können durch den reverse-Befehl in der Plugin-Syntax rückgängig gemacht werden.'; diff --git a/plugins/55/indexmenu/lang/el/lang.php b/plugins/55/indexmenu/lang/el/lang.php new file mode 100644 index 0000000..63de628 --- /dev/null +++ b/plugins/55/indexmenu/lang/el/lang.php @@ -0,0 +1,68 @@ + + * @author Katerina Katapodi + */ +$lang['menu'] = 'Χρησιμότητες του Μενού περιεχομένων'; +$lang['fetch'] = 'Προβολή'; +$lang['install'] = 'Εγκατάσταση'; +$lang['delete'] = 'Απαλοιφή'; +$lang['check'] = 'Έλεγχος '; +$lang['no_repos'] = 'Δεν υπάρχει στοκ ιστοσελίδων'; +$lang['disabled'] = 'Απενεργοποιήθηκε'; +$lang['conn_err'] = 'Σφάλμα σύνδεσης '; +$lang['dir_err'] = 'Δεν μπόρεσε να δημιουργήσει προσωρινό φάκελλο για τη λήψη θέματος '; +$lang['down_err'] = 'Δεν δέχεται θέμα '; +$lang['zip_err'] = 'Δημιουργία φακέλλου Zip και σφάλμα στο άνοιγμα'; +$lang['install_ok'] = 'το θέμα εγκαταστάθηκε με επιτυχία Το καινούργιο θέμα είναι διαθέσιμο στην μπάρα εργαλείων της σελίδας έκδοσης ή με τον κωδικό js#theme_name option. '; +$lang['install_no'] = 'Σφάλμα σύνδεσης Ωστόσο μπορείς να προσπαθήσεις να ανεβάσεις με το χέρι το θέμα σου
    here. '; +$lang['delete_ok'] = 'Το θέμα αφαιρέθηκε με επιτυχία'; +$lang['delete_no'] = 'Συνέβη σφάλμα κατά την διάρκεια απαλοιφής του θέματος '; +$lang['upload'] = 'Αποστολή'; +$lang['checkupdates'] = 'Ενημερώσεις περιεχομένου'; +$lang['noupdates'] = 'Το μενού Index δεν χρειάζεται να ενημερωθεί. Έχεις ήδη την τελευταία εκδοχή. '; +$lang['infos'] = 'Μπορείτε να δημιουργήσετε το θέμα σας ακολουθώντας τις οδηγίες στο Theme Tutorial σελίδα.
    Έτσι μπορείτε να δώσετε χαρά σε περισσότερους ανθρώπους happy :-) στέλνοντας το στη θέση αποθήκευσης του μενού περιεχομένων,με το κουμπί "αποστολής" κάτω από το θέμα.. '; +$lang['showsort'] = 'Αριθμός κατάταξης του μενού Index : '; +$lang['donation_text'] = 'To plugin μενού περιεχομένων δεν σπονσοράρεται από κανέναν αλλά το δημιουργώ και το υποστηρίζω δωρεάν στον ελεύθερο χρόνο μου. Αν λάβετε κάτι χάρις σε αυτό ή θελήσετε να συμμετάσχετε στην δημιουργία του, μπορείτε να κάνετε μια δωρεά. '; +$lang['js']['indexmenuwizard'] = 'Μάγος του Μενού Περιεχομένων'; +$lang['js']['index'] = 'Περιεχόμενα '; +$lang['js']['options'] = 'Επιλογές '; +$lang['js']['navigation'] = 'Πλοήγηση '; +$lang['js']['sort'] = 'Κατάταξη '; +$lang['js']['filter'] = 'Φίλτρο'; +$lang['js']['performance'] = 'Απόδοση'; +$lang['js']['namespace'] = 'Χώρος για τίτλο στο αρχείο'; +$lang['js']['nsdepth'] = 'Βάθος '; +$lang['js']['js'] = 'Το δένδρο σχεδιάστηκε με Javasript, μπορείτε να ορίσετε το δικό σας θέμα '; +$lang['js']['theme'] = 'Θέμα'; +$lang['js']['navbar'] = 'Το δένδρο ανοίγει στο παρόν αρχείο που χρειάζεται τίτλο'; +$lang['js']['context'] = 'Προβάλετε το δένδρο του περιεχομένου αρχείου που χρειάζεται τίτλο'; +$lang['js']['nocookie'] = 'Μην θυμάστε τους ανοικτούς/κλειστούς κόμβους της περιήγησης χρήστη'; +$lang['js']['noscroll'] = 'Αποφύγετε την κύλιση δένδρου όταν δεν ταιριάζει στο πλάτος του πλαισίου περιεχομένου'; +$lang['js']['notoc'] = 'Απενεργοποιήστε την επισκόπηση'; +$lang['js']['tsort'] = 'Ανά τίτλο'; +$lang['js']['dsort'] = 'Ανά ημερομηνία'; +$lang['js']['msort'] = 'Ανά τίτλο meta'; +$lang['js']['nsort'] = 'Επιλογή κενά αρχεία για τίτλο'; +$lang['js']['hsort'] = 'Επιλέξετε την αρχική σελίδα'; +$lang['js']['rsort'] = 'Γυρίζετε σελίδες'; +$lang['js']['nons'] = 'Προβολή μόνο σελίδων'; +$lang['js']['nopg'] = 'Προβάλετε μόνο αρχεία που δεν έχουν τίτλο'; +$lang['js']['max'] = 'Καθορισμός αριθμού επιπέδων με ajax όταν είναι ανοικτός ένας κόμβος.Επιπλέον επιλέξετε πόσες υποκατηγορίες επιπέδων έχουν ανακτηθεί με την χρήση του AJAX μία φορά. '; +$lang['js']['maxjs'] = 'Επιλογή αριθμού επιπέδων στον περιηγητή του πελάτη όταν ένας κόμβος είναι ανοικτός'; +$lang['js']['id'] = 'Id cookie που προορίζεται για αυτό το μενού περιεχομένων'; +$lang['js']['insert'] = 'Εισάγετε μενού περιεχομένου'; +$lang['js']['metanum'] = 'Αριθμός Meta που πρέπει να επιλέξετε'; +$lang['js']['insertmetanum'] = 'Εισαγωγή αριθμού meta'; +$lang['js']['page'] = 'Σελίδα'; +$lang['js']['revs'] = 'Επαναλήψεις'; +$lang['js']['tocpreview'] = 'Επισκόπηση toc'; +$lang['js']['editmode'] = 'Προς έκδοση'; +$lang['js']['insertdwlink'] = 'Εισαγωγή ως DWlink'; +$lang['js']['insertdwlinktooltip'] = 'Εισάγετε τον σύνδεσμο αυτής της σελίδας στο κουτί έκδοσης στη θέση του κέρσορα'; +$lang['js']['ns'] = 'Κενό αρχείο για εισαγωγή τίτλου'; +$lang['js']['search'] = 'Αναζήτηση'; +$lang['js']['searchtooltip'] = 'Αναζητήστε σελίδες στα πλαίσια αυτής της σειράς ονομάτων'; diff --git a/plugins/55/indexmenu/lang/en/lang.php b/plugins/55/indexmenu/lang/en/lang.php new file mode 100644 index 0000000..ace5d81 --- /dev/null +++ b/plugins/55/indexmenu/lang/en/lang.php @@ -0,0 +1,92 @@ + + * @author Gerrit Uitslag + */ +$lang['menu'] = 'Indexmenu Utilities'; +$lang['fetch'] = 'Show'; +$lang['install'] = 'Install'; +$lang['delete'] = 'Delete'; +$lang['check'] = 'Check'; +$lang['no_repos'] = 'No theme repository url configured.'; +$lang['disabled'] = 'Disabled'; +$lang['conn_err'] = 'Connection error'; +$lang['dir_err'] = 'Unable to create temporary folder to receive theme'; +$lang['down_err'] = 'Unable to receive theme'; +$lang['zip_err'] = 'Zip creation or extraction error'; +$lang['install_ok'] = 'theme installed successfully. The new theme is avaiable in the toolbar of the edit page or with the js#theme_name option.'; +$lang['install_no'] = 'Connection error. However you can try to upload manually your theme from here.'; +$lang['delete_ok'] = 'Theme is successfully deleted.'; +$lang['delete_no'] = 'An error occurred during theme deleting'; +$lang['upload'] = 'Share'; +$lang['checkupdates'] = 'Plugin updates'; +$lang['noupdates'] = 'Indexmenu does not need to be update. You have already the last release:'; +$lang['infos'] = 'You can create your theme following the instructions at the Theme Tutorial page.
    Then you could make more people happy :-) sending it to the public indexmenu repository, with the "share" button under that theme.'; +$lang['showsort'] = 'Indexmenu sort number: '; +$lang['donation_text'] = 'The indexmenu plugin is not sponsored by anyone but i develop and support it for free during my spare time. If you gain something thanks to it or you want to support its development, you can consider to make a donation.'; +$lang['js']['indexmenuwizard'] = 'Indexmenu Wizard'; +$lang['js']['index'] = 'Index'; +$lang['js']['options'] = 'Options'; +$lang['js']['navigation'] = 'Navigation'; +$lang['js']['sort'] = 'Sort'; +$lang['js']['filter'] = 'Filter'; +$lang['js']['performance'] = 'Performance'; + +$lang['js']['namespace'] = 'Namespace'; +$lang['js']['nsdepth'] = 'Depth'; +$lang['js']['js'] = 'Tree rendered by Javasript, you can define your own theme'; +$lang['js']['theme'] = 'Theme'; +$lang['js']['navbar'] = 'The tree opens at the current namespace'; +$lang['js']['context'] = 'Display the tree of the current wiki namespace context'; +$lang['js']['nocookie'] = 'Don\'t remember open/closed nodes during user navigation'; +$lang['js']['noscroll'] = 'Prevent to scrolling the tree when it does not fit its container width'; +$lang['js']['notoc'] = 'Disable the toc preview feature'; +$lang['js']['tsort'] = 'By title'; +$lang['js']['dsort'] = 'By date'; +$lang['js']['msort'] = 'By meta tag'; +$lang['js']['nsort'] = 'Sort also namespaces'; +$lang['js']['hsort'] = 'Sort headpage up'; +$lang['js']['rsort'] = 'Reverse the sorting of pages'; +$lang['js']['nons'] = 'Show only pages'; +$lang['js']['nopg'] = 'Show only namespaces'; +$lang['js']['max'] = 'How many levels to render with ajax when a node is opened. Additional are how many sublevels below that level are retrieved with AJAX instead of in one go. '; +$lang['js']['maxjs'] = 'How many levels to render in the client browser when a node is opened'; +$lang['js']['id'] = 'Self defined cookie id for this indexmenu'; +$lang['js']['insert'] = 'Insert indexmenu'; +$lang['js']['metanum'] = 'Meta number for sorting'; +$lang['js']['insertmetanum'] = 'Insert metanumber'; + +/* contextmenu.js */ +$lang['js']['page'] = 'Page'; +$lang['js']['revs'] = 'Revisions'; +$lang['js']['tocpreview'] = 'Toc preview'; +$lang['js']['editmode'] = 'Edit mode'; +$lang['js']['insertdwlink'] = 'Insert as DWlink'; +$lang['js']['insertdwlinktooltip'] = 'Insert the link of this page in the edit box at cursor position'; +$lang['js']['ns'] = 'Namespace'; +$lang['js']['search'] = 'Search ...'; +$lang['js']['searchtooltip'] = 'Search for pages within this namespace'; +$lang['js']['create'] = 'Create'; +$lang['js']['more'] = 'More'; +$lang['js']['headpage'] = 'Headpage'; +$lang['js']['headpagetooltip'] = 'Create a new headpage under this page'; +$lang['js']['startpage'] = 'Start page'; +$lang['js']['startpagetooltip'] = 'Create a new start page under this page'; +$lang['js']['custompage'] = 'Custom page...'; +$lang['js']['custompagetooltip'] = 'Create a new page (input the name via popup) under this page'; +$lang['js']['acls'] = 'Acls'; +$lang['js']['purgecache'] = 'Purge cache'; +$lang['js']['exporthtml'] = 'Export as HTML'; +$lang['js']['exporttext'] = 'Export as text'; +$lang['js']['headpagehere'] = 'Headpage here'; +$lang['js']['headpageheretooltip'] = 'Create a new headpage inside this namespace'; +$lang['js']['newpage'] = 'New page...'; +$lang['js']['newpagetooltip'] = 'Create a new page (input the name via popup) inside this namespace'; +$lang['js']['newpagehere'] = 'New page here'; +$lang['js']['insertkeywords'] = 'Insert keyword(s) to search for within this namespace'; +$lang['js']['insertpagename'] = 'Insert the pagename to create'; +$lang['js']['edit'] = 'Edit'; +$lang['js']['loading'] = 'Loading...'; diff --git a/plugins/55/indexmenu/lang/en/settings.php b/plugins/55/indexmenu/lang/en/settings.php new file mode 100644 index 0000000..44535db --- /dev/null +++ b/plugins/55/indexmenu/lang/en/settings.php @@ -0,0 +1,21 @@ + + * @author Gerrit Uitslag + */ +$lang['checkupdate'] = 'Check periodically for updates.'; +$lang['only_admins'] = 'Allow indexmenu syntax only to admins.
    Note that a page edited by a no-admin user will lost every contained indexmenu tree.'; +$lang['aclcache'] = 'Optimize the indexmenu cache for acl (works only for root requested namespaces).
    The choice of the method affects only the visualization of nodes on the indexmenu tree, not the page authorizations.
    • None: Standard. It is the faster method and it does not create further cache files, but the nodes with denied permission could be showed to no-authorized users or viceversa. Recommended when you don\'t deny pages access by acl or you don\'t care how the tree is displayed.
    • User: Per-User login. Slower method and it creates a lot of cache files, but it always hides correctly denied pages. Recommended when you have page acls that depend on users login.
    • Groups: Per-groups membership. Good compromise between the previous methods, but in case that you deny the read acl to a user which belongs to a group with a read acl auth, then he could anyway displays that nodes in the tree. Recommended when your whole site acls depend on groups membership.
    '; +$lang['headpage'] = 'Headpage method: the page from which retrive the title and link of a namespace.
    Can be any of this value:
    • The global start page.
    • A page with the namespace name and that is inside it.
    • A page with the namespace name and that is at its same level.
    • A custom name page.
    • A comma separated list of page names.
    '; +$lang['hide_headpage'] = 'Hide headpages.'; +$lang['page_index'] = 'The page that will replace the main dokuwiki index. Create it and insert the indexmenu syntax. Use id#random if you already have an indexmenu sidebar with navbar option. My suggestion is {{indexmenu>..|js navbar nocookie id#random}}.'; +$lang['empty_msg'] = 'Message to show when tree is empty. Use the Dokuwiki syntax, not the html code. The {{ns}} variable is a shortcut for the requested namespace.'; +$lang['skip_index'] = 'Namespaces id to skip. Use the Regular Expression format. Example: /(sidebars|private:myns)/'; +$lang['skip_file'] = 'Pages id to skip. Use the Regular Expression format. Example /(:start$|^public:newstart$)/'; +$lang['show_sort'] = 'Show to admins the indexmenu sort number as top of page note'; +$lang['themes_url'] = 'Download js themes from this http url.'; +$lang['be_repo'] = 'Let others download themes from you site.'; +$lang['defaultoptions'] = 'List of indexmenu options separated by spaces. These options will be applied by default to every indexmenu and can be undone with a reverse command in the plugin syntax'; diff --git a/plugins/55/indexmenu/lang/eo/lang.php b/plugins/55/indexmenu/lang/eo/lang.php new file mode 100644 index 0000000..d42ef5c --- /dev/null +++ b/plugins/55/indexmenu/lang/eo/lang.php @@ -0,0 +1,89 @@ + + * @author Robert Bogenschneider + */ +$lang['menu'] = 'Indeksmenu-ilaro'; +$lang['fetch'] = 'Montri'; +$lang['install'] = 'Instali'; +$lang['delete'] = 'Forigi'; +$lang['check'] = 'Kontroli'; +$lang['no_repos'] = 'Neniu tem-URL konfigurita.'; +$lang['disabled'] = 'Blokita'; +$lang['conn_err'] = 'Eraro dum konektado'; +$lang['dir_err'] = 'Ne eblis krei ricevantan portempan temo-dosierujon'; +$lang['down_err'] = 'Ne eblis ricevi la temon'; +$lang['zip_err'] = 'Eraro dum pakado aŭ malpakado'; +$lang['install_ok'] = 'La temo sukcese instaliĝis. La nova temo haveblas en la ilaro de la modifa paĝo aŭ pere de opcio js#tem_nomo.'; +$lang['install_no'] = 'Eraro dum konektado. Vi povus provi alŝuti vian temon permane de tie.'; +$lang['delete_ok'] = 'La temo sukcese foriĝis.'; +$lang['delete_no'] = 'Eraro okazis dum la forigo de temoj'; +$lang['upload'] = 'Distribui'; +$lang['checkupdates'] = 'Kromaĵ-aktualigoj'; +$lang['noupdates'] = 'La indeksmenuo ne bezonas aktualigon. Vi jam havas la lastan version:'; +$lang['infos'] = 'Vi povas krei vian propran temon, kiam vi sekvas la instrukciojn ĉe la Tem-Lernilo.
    Eblus feliĉigi pliajn homojn :-) sendante ĝin al la publika indeksmenu-arkivo, kun la butono "distribui" sub tiu temo.'; +$lang['showsort'] = 'Ordiga numero en la indeksmenuo:'; +$lang['donation_text'] = 'La indeksmenu-kromaĵo estas sponsorata de neniu, sed mi evoluigas ĝin senpage dum mia libera tempo. Se vi enspezas ion danke al ĝi aŭ se vi volas subteni ĝian evoluadon, konsideru fari donacon.'; +$lang['js']['indexmenuwizard'] = 'Indeksmenu-Asistanto'; +$lang['js']['index'] = 'Indekso'; +$lang['js']['options'] = 'Agordoj'; +$lang['js']['navigation'] = 'Navigado'; +$lang['js']['sort'] = 'Ordigi'; +$lang['js']['filter'] = 'Filtro'; +$lang['js']['performance'] = 'Efikeco'; +$lang['js']['namespace'] = 'Nomspaco'; +$lang['js']['nsdepth'] = 'Profundeco'; +$lang['js']['js'] = 'Arbo kompostita de Javaskripto, vi povas difini vian propran temon'; +$lang['js']['theme'] = 'Temo'; +$lang['js']['navbar'] = 'La arbo malfermiĝas en la momenta nomspaco'; +$lang['js']['context'] = 'Montri la arbon de la momenta nomspaca kunteksto'; +$lang['js']['nocookie'] = 'Ne memori (mal)fermajn nodojn dum uzanto-navigado'; +$lang['js']['noscroll'] = 'Malebligi trairadon de la arbo kiam ĝi ne kongruas al la larĝeco de ĝia kontenero'; +$lang['js']['notoc'] = 'Malebligi la antaŭrigardon de la enhavtabelo'; +$lang['js']['tsort'] = 'Per titolo'; +$lang['js']['dsort'] = 'Per dato'; +$lang['js']['msort'] = 'Per meta-etikedo'; +$lang['js']['nsort'] = 'Ordigi ankaŭ nomspacojn'; +$lang['js']['hsort'] = 'Ordigi kun ĉefpaĝo ĉekape'; +$lang['js']['rsort'] = 'Inversigi la ordigadon de paĝoj'; +$lang['js']['nons'] = 'Montri nur paĝojn'; +$lang['js']['nopg'] = 'Montri nur nomspacojn'; +$lang['js']['max'] = 'Kiom da montrendaj ajax-ebenoj, kiam nodo malfermiĝas. Aldone kiom da subebenoj sub tiu ebeno atingeblas per AJAX en unu fojo'; +$lang['js']['maxjs'] = 'Kiom da montrendaj ebenoj en la klienta foliumilo, kiam nodo malfermiĝas'; +$lang['js']['id'] = 'Identigilo de memdifinita kekseto por tiu indeksmenuo'; +$lang['js']['insert'] = 'Enmeti indeksmenuon'; +$lang['js']['metanum'] = 'Meta-numero por ordigado'; +$lang['js']['insertmetanum'] = 'Enmeti meta-numeron'; +$lang['js']['page'] = 'Paĝo'; +$lang['js']['revs'] = 'Revizioj'; +$lang['js']['tocpreview'] = 'Antaŭmontro de enhavotabelo'; +$lang['js']['editmode'] = 'Redakta reĝimo'; +$lang['js']['insertdwlink'] = 'Enmeti kiel DW-ligilon'; +$lang['js']['insertdwlinktooltip'] = 'Enmetu la ligilon de ĉi tiu paĝo en la redaktejon ĉe la kursorejo'; +$lang['js']['ns'] = 'Nomspaco'; +$lang['js']['search'] = 'Serĉi...'; +$lang['js']['searchtooltip'] = 'Serĉi paĝojn en tiu ĉi nomspaco'; +$lang['js']['create'] = 'Krei'; +$lang['js']['more'] = 'Pli'; +$lang['js']['headpage'] = 'Paĝokapo'; +$lang['js']['headpagetooltip'] = 'Krei novan paĝokapon sub tiu ĉi paĝo'; +$lang['js']['startpage'] = 'Komenca paĝo'; +$lang['js']['startpagetooltip'] = 'Krei novan komencopaĝon sub tiu ĉi paĝo'; +$lang['js']['custompage'] = 'Propra paĝo...'; +$lang['js']['custompagetooltip'] = 'Krei novan paĝon (enigi la nomon per ŝprucfenestro) sub tiu ĉi paĝo'; +$lang['js']['acls'] = 'Alirkontrollistoj'; +$lang['js']['purgecache'] = 'Forigi la kaŝmemoron'; +$lang['js']['exporthtml'] = 'Eksporti kiel HTML'; +$lang['js']['exporttext'] = 'Eksporti kiel teksto'; +$lang['js']['headpagehere'] = 'Paĝokapo estos tie ĉi'; +$lang['js']['headpageheretooltip'] = 'Krei novan paĝokapon en tiu ĉi nomspaco'; +$lang['js']['newpage'] = 'Nova paĝo...'; +$lang['js']['newpagetooltip'] = 'Krei novan paĝon (enigi la nomon per ŝprucfenestro) en tiu ĉi nomspaco'; +$lang['js']['newpagehere'] = 'Nova paĝo estos tie ĉi'; +$lang['js']['insertkeywords'] = 'Enmeti la ŝlosilvorto(j)n serĉota(j)n en tiu ĉi nomspaco'; +$lang['js']['insertpagename'] = 'Enmeti la paĝnomon kreotan'; +$lang['js']['edit'] = 'Redakti'; +$lang['js']['loading'] = 'Ŝarganta...'; \ No newline at end of file diff --git a/plugins/55/indexmenu/lang/eo/settings.php b/plugins/55/indexmenu/lang/eo/settings.php new file mode 100644 index 0000000..8b13ceb --- /dev/null +++ b/plugins/55/indexmenu/lang/eo/settings.php @@ -0,0 +1,19 @@ + + */ +$lang['checkupdate'] = 'Kontroli ripete por aktualigoj.'; +$lang['only_admins'] = 'Permesi indeksmenu-sintakson nur al administrantoj.
    Notu, ke paĝo modifata de ne-administranto perdas ĉiujn enajn indeksmenu-arbojn.'; +$lang['aclcache'] = 'Optimumigu la indexmenu-kaŝmemoron por alirkontrolo (funkcias nur por nomspacoj demandataj de root).
    La elekto de la metodo influas nur la montron de nodoj en la indexmenu-arbo, ne la paĝ-rajtigojn.
    • Neniu: standardo. Tio estas pli rapida metodo kaj ne kreas aldonajn kaŝmemor-dosierojn, sed nodoj sen alirrajtoj povus esti montrataj al nerajtigitoj kaj inverse. Rekomendita se vi ne malpermesas aliron aŭ ne gravas, kiel la arbo estas montrata.
    • Uzanto: po-uzanta ensalutado. Malpli rapida metodo, kiu kreas multajn kaŝmemor-dosierojn, sed ĉiam ĝuste kaŝas malpermesitajn paĝojn. Rekomendita se vi uzas paĝalirkontrolon, kiu dependas je ensalutado de uzantoj.
    • Grupoj: Per grupa membreco. Bona kompromiso inter la intaŭaj metodoj, sed kaze ke uzanto apartenas al grupo kun lego-permeso, li tamen povas legi ĉion en la nodo. Rekomendita se la alirkontrolo de via retejo dependas de grupmembreco.
    '; +$lang['headpage'] = 'Metodo por la kapopaĝo: la paĝo, de kiu preni la titolon kaj ligilon al nomspaco.
    Povas esti iu el tiuj:
    • La ĉefa startpaĝo.
    • Paĝo ene de nomspaco kaj ties enhavo.
    • Samnivela nomspaco kaj ties enhavo.
    • Mem kreita paĝnomo.
    • Komodisigita listo de paĝnomoj.
    '; +$lang['hide_headpage'] = 'Kaŝi ĉefpaĝojn.'; +$lang['page_index'] = 'La paĝo, kiu anstataŭos la ĉefan dokuwiki-indekson. Kreu ĝin kaj enmetu la indexmenu-kodon. Uzu id#random, se vi jam havas flankan indexmenu-strion kun navbar-opcio. Mi proponas {{indexmenu>..|js navbar nocookie id#random}}.'; +$lang['empty_msg'] = 'Mesaĝo, kiam arbo estas malplena. Uzi DokuWiki-sintakson, ne HTML-kodon. La {{ns}}>-variablo estas mallongigo por la koncerna nomspaco.'; +$lang['skip_index'] = 'Nomspacoj por pretersalti. Uzu regulan esprimon. Ekzemplo: /(sidebars|private:myns)/'; +$lang['skip_file'] = 'Paĝoj por pretersalti. Uzu regulan esprimon. Ekzemplo: /(:start$|^public:newstart$)/'; +$lang['show_sort'] = 'Montri la indexmenu-numeron al administrantoj kiel noto ĉe la paĝokomenco'; +$lang['themes_url'] = 'HTTP-URL, de kiu elŝuti js-temojn.'; +$lang['be_repo'] = 'Permesi al aliaj elŝuti temojn de via paĝaro.'; diff --git a/plugins/55/indexmenu/lang/es/lang.php b/plugins/55/indexmenu/lang/es/lang.php new file mode 100644 index 0000000..3caf7dd --- /dev/null +++ b/plugins/55/indexmenu/lang/es/lang.php @@ -0,0 +1,92 @@ + + * @author Yllelder + * @author Zigor Astarbe + * @author Digna González Otero + * @author Eloy + */ +$lang['menu'] = 'Utilidades de Indexmenu'; +$lang['fetch'] = 'Mostrar'; +$lang['install'] = 'Instalar'; +$lang['delete'] = 'Eliminar'; +$lang['check'] = 'Seleccionar'; +$lang['no_repos'] = 'Url de repositorio de temas no configurado.'; +$lang['disabled'] = 'Desactivado'; +$lang['conn_err'] = 'Error de conexión'; +$lang['dir_err'] = 'Imposible crear directorio temporar para almacenar el tema'; +$lang['down_err'] = 'Imposible recibir el tema'; +$lang['zip_err'] = 'Error de creación o extracción de Zip'; +$lang['install_ok'] = 'Tema instalado satisfactoriamente. El nuevo tema está disponible en la barra de herramientas de la página a editar o con la opción js#nombre_del_tema.'; +$lang['install_no'] = 'Error de conexión. Puedes intentar subir tu tema manualmente desde here.'; +$lang['delete_ok'] = 'Tema eliminado correctamente.'; +$lang['delete_no'] = 'Ocurrió un error durante la eliminación del tema'; +$lang['upload'] = 'Compartir'; +$lang['checkupdates'] = 'Actualizaciones de plugin'; +$lang['noupdates'] = 'No es necesario actualizar Indexmenu. Ya tienes la última versión:'; +$lang['infos'] = 'Puedes crear tu tema siguiendo las instrucciones de la página Theme Tutorial.
    Después puedes hacer feliz a más gente:-) enviándolo al repositorio público de indexmenu, con el botón de "compartir" bajo ese tema.'; +$lang['showsort'] = 'Número de posición de Indexmenu: '; +$lang['donation_text'] = 'El plugin indexmenu no está patrocinado por nadie, pero lo desarrollo y mantengo de forma gratuita durante mi tiempo libre. Si ganas algo gracias a él o quieres apoyar su desarrollo, puedes considerar hacer una donación.'; +$lang['js']['indexmenuwizard'] = 'Asistente de Indexmenu'; +$lang['js']['index'] = 'Indice'; +$lang['js']['options'] = 'Opciones'; +$lang['js']['navigation'] = 'Navegación'; +$lang['js']['sort'] = 'Ordenar'; +$lang['js']['filter'] = 'Filtrar'; +$lang['js']['performance'] = 'Rendimiento'; +$lang['js']['namespace'] = 'Espacio de nombres'; +$lang['js']['nsdepth'] = 'Profundidad'; +$lang['js']['js'] = 'Árbol renderizado con Javascript, puedes definir tu propio tema'; +$lang['js']['theme'] = 'Tema'; +$lang['js']['navbar'] = 'El árbol se abre en el espacio de nombres actual'; +$lang['js']['context'] = 'Muestra el árbol del contexto del espacio de nombres de la wiki actual'; +$lang['js']['nocookie'] = 'No recordar los nodos abiertos/cerrados durante la navegación del usuario'; +$lang['js']['noscroll'] = 'Evitar el desplazamiento del árbol cuando no se ajusta a la anchura del contenedor'; +$lang['js']['notoc'] = 'Desactivar la función de vista previa del toc'; +$lang['js']['tsort'] = 'Por título'; +$lang['js']['dsort'] = 'Por fecha'; +$lang['js']['msort'] = 'Por meta etiqueta'; +$lang['js']['nsort'] = 'Ordenar también espacios de nombres'; +$lang['js']['hsort'] = 'Ordenar página principal arriba'; +$lang['js']['rsort'] = 'Invertir el orden de las páginas'; +$lang['js']['nons'] = 'Mostrar solo páginas'; +$lang['js']['nopg'] = 'Mostrar solo espacios de nombres'; +$lang['js']['max'] = 'Cuántos niveles representar con ajax cuando se abre un nodo. Adicional son cuántos subniveles por debajo de este nivel se recuperan con AJAX en lugar de una única vez.'; +$lang['js']['maxjs'] = 'Cuántos niveles se renderizan en el navegador del cliente cuando se abre un nodo'; +$lang['js']['id'] = 'Cookie ID autodefinida para este indexmenu'; +$lang['js']['insert'] = 'Insertar indexmenu'; +$lang['js']['metanum'] = 'Meta número para ordenar'; +$lang['js']['insertmetanum'] = 'Insertar metanúmero'; +$lang['js']['page'] = 'Página'; +$lang['js']['revs'] = 'Revisiones'; +$lang['js']['tocpreview'] = 'Vista previa del toc'; +$lang['js']['editmode'] = 'Modo de edición'; +$lang['js']['insertdwlink'] = 'Insertar como DWlink'; +$lang['js']['insertdwlinktooltip'] = 'Insertar el enlace de esta página en el cuadro de edición en la posición del cursor'; +$lang['js']['ns'] = 'Espacio de nombres'; +$lang['js']['search'] = 'Buscar ...'; +$lang['js']['searchtooltip'] = 'Buscar páginas dentro de este espacio de nombres'; +$lang['js']['create'] = 'Crear'; +$lang['js']['more'] = 'Más'; +$lang['js']['headpage'] = 'Página principal'; +$lang['js']['headpagetooltip'] = 'Crear una nueva página principal debajo de esta página'; +$lang['js']['startpage'] = 'Página de Inicio'; +$lang['js']['startpagetooltip'] = 'Crea una nueva página de inicio bajo esta página'; +$lang['js']['custompage'] = 'Página personalizada...'; +$lang['js']['custompagetooltip'] = 'Crear una nueva página (introduce el nombre a través de una ventana emergente) bajo esta página'; +$lang['js']['acls'] = 'Reglas Acls'; +$lang['js']['purgecache'] = 'Purgar caché'; +$lang['js']['exporthtml'] = 'Exportar como HTML'; +$lang['js']['exporttext'] = 'Exportar como texto'; +$lang['js']['headpagehere'] = 'Página principal aquí'; +$lang['js']['headpageheretooltip'] = 'Crea una nueva página principal dentro de este espacio de nombres'; +$lang['js']['newpage'] = 'Nueva página....'; +$lang['js']['newpagetooltip'] = 'Cree una nueva página (ingrese el nombre mediante una ventana emergente) dentro de este espacio de nombres'; +$lang['js']['newpagehere'] = 'Nueva página aquí'; +$lang['js']['insertkeywords'] = 'Inserte las palabras clave para buscar dentro de este espacio de nombres'; +$lang['js']['insertpagename'] = 'Inserte el nombre de la página a crear'; +$lang['js']['edit'] = 'Editar'; +$lang['js']['loading'] = 'Cargando...'; diff --git a/plugins/55/indexmenu/lang/es/settings.php b/plugins/55/indexmenu/lang/es/settings.php new file mode 100644 index 0000000..00ed7a1 --- /dev/null +++ b/plugins/55/indexmenu/lang/es/settings.php @@ -0,0 +1,21 @@ + + * @author Digna González Otero + */ +$lang['checkupdate'] = 'Comprobar actualizaciones periódicamente.'; +$lang['only_admins'] = 'Denegar sintaxis indexmenu a los no-administradores.
    Tener en cuenta que una página editada por un usuario no administrador perderá cualquier árbol de indexmenu que contenga.'; +$lang['aclcache'] = 'Optimizar la chache de indexmenu para acl (funciona sólo para espacios de nombres pedidos por root).
    La elección del método afecta sólo a la visualización de los nodos en el árbol de indexmenu, no a las autorizaciones de las páginas.
    • None: Estándar. Es el método más rápido y no crea más ficheros caché, pero los nodos con permiso denegado pueden ser mostrados a usuarios no autorizados o viceversa. Recomendado cuando no se restringe el acceso a páginas mediante acl o no importa cómo se muestre el árbol.
    • User: Por login de usuario. Método más lento y crea muchos ficheros cache, pero siempre oculta correctamente las páginas restringidas. Recomendado cuando se tienen accesos a páginas que dependen del login del usuario.
    • Groups: Por pertenencia a un grupo. Es un buen compromiso entre los métodos anteriores, pero en caso de que se deniegue permiso para ver una página a un usuario que pertenece a un grupo con permiso de lectura, se mostrarán los nodos en el árbol de todos modos. Recomendado cuando los permisos dependen de la pertenencia a grupos.
    '; +$lang['headpage'] = 'Método de encabezado: página de la cual obtener el título y el link de un espacio de nombres.
    Puede tener los siguientes valores:
    • La página de inicio global.
    • Una página con el nombre del espacio de nombres y que está dentro del mismo.
    • Una página con el nombre del espacio de nombres y que está al mismo nivel.
    • Una página con un nombre personalizado
    • Una lista de nombres de página separada por una coma.
    '; +$lang['hide_headpage'] = 'Ocultar encabezados.'; +$lang['page_index'] = 'La página que sustituirá el índice principal de dokuwiki. Créalo e insértalo en la sintaxis de indexmenu. Usa id#random si ya tienes una barra lateral de indexmenu con la opción navbar. Mi sugerencia es {{indexmenu>..|js navbar nocookie id#random}}.'; +$lang['empty_msg'] = 'Mensaje para mostrar cuando el árbol está vacío. Usa sintaxis de DokuWiki,no código html. La variable {{ns}} es un enlace al espacio de nombres solicitado.'; +$lang['skip_index'] = 'Espacios de nombres a ignorar. Usa el formato de las expresiones regulares. Ejemplo: /(sidebars|private:myns)/'; +$lang['skip_file'] = 'Archivos a ignorar. Usa el formato de las expresiones regulares. Ejemplo: /(:start$|^public:newstart)/'; +$lang['show_sort'] = 'Mostrar a los administradores el número de posición de indexmenu junto a la nota al pie'; +$lang['themes_url'] = 'Descargar temas js de esta url http.'; +$lang['be_repo'] = 'Permitir a otros descargar temas de tu sitio.'; +$lang['defaultoptions'] = 'Lista de opciones de indexmenu separadas por espacios. Estas opciones se aplicarán de forma predeterminada a cada indexmenu y se pueden deshacer con un comando inverso en la sintaxis del complemento'; diff --git a/plugins/55/indexmenu/lang/fr/lang.php b/plugins/55/indexmenu/lang/fr/lang.php new file mode 100644 index 0000000..a934dc5 --- /dev/null +++ b/plugins/55/indexmenu/lang/fr/lang.php @@ -0,0 +1,93 @@ + + * @author Johan Binard + * @author Schplurtz le Déboulonné + */ +$lang['menu'] = 'Utilitaires Indexmenu'; +$lang['fetch'] = 'Montrer'; +$lang['install'] = 'Installer'; +$lang['delete'] = 'Supprimer'; +$lang['check'] = 'Vérifier'; +$lang['no_repos'] = 'Aucune Url de répertoire de thèmes configurée.'; +$lang['disabled'] = 'Désactivé'; +$lang['conn_err'] = 'Erreur de connexion'; +$lang['dir_err'] = 'Impossible de créer un répertoire temporaire pour recevoir le thème'; +$lang['down_err'] = 'Impossible de recevoir le thème'; +$lang['zip_err'] = 'Erreur de création ou d\'extraction de Zip'; +$lang['install_ok'] = 'Thème installé avec succès. Le nouveau thème est disponible dans la barre d\'outils de l\'éditeur de page ou avec l\'option js#nom_du_theme.'; +$lang['install_no'] = 'Erreur de connexion. Cependant, vous pouvez essayer d\'envoyer manuellement votre thème depuis ici.'; +$lang['delete_ok'] = 'Thème supprimé avec sucès.'; +$lang['delete_no'] = 'Une erreur s\'est produite lors de la suppression du thème'; +$lang['upload'] = 'Partager'; +$lang['checkupdates'] = 'Mises à jour de l\'extension'; +$lang['noupdates'] = 'Indexmenu n\'a pas besoin d\'être mis à jour. Vous avez déjà la dernière version:'; +$lang['infos'] = 'Vous pouvez créer votre thème en suivant les instructions de la page Tutoriel de thème.
    Vous pouvez ensuite rendre plus de gens heureux :-) en l\'envoyant au répertoire public d\'indexmenu avec le bouton "Partager" sous ce thème.'; +$lang['showsort'] = 'Numéro de tri d\'indexmenu: '; +$lang['donation_text'] = 'Le greffon indexmenu n\'est pas sponsorisé mais je le développe et le maintiens gratuitement durant mon temps libre. Si vous gagnez quelque chose grâce à lui ou si vous voulez soutenir son développement, vous pouvez envisager de faire un don.'; +$lang['js']['indexmenuwizard'] = 'Assistant d\'Indexmenu'; +$lang['js']['index'] = 'Index'; +$lang['js']['options'] = 'Options'; +$lang['js']['navigation'] = 'Navigation'; +$lang['js']['sort'] = 'Tri'; +$lang['js']['filter'] = 'Filtre'; +$lang['js']['performance'] = 'Performances'; + +$lang['js']['namespace'] = 'Catégorie'; +$lang['js']['nsdepth'] = 'Profondeur'; +$lang['js']['js'] = 'Arbre généré par Javascript, vous pouvez définir votre propre thème'; +$lang['js']['theme'] = 'Thème'; +$lang['js']['navbar'] = 'L\'arbre s\'ouvre dans la catégorie actuelle'; +$lang['js']['context'] = 'Affiche l\'arborescence du contexte de la catégorie actuelle'; +$lang['js']['nocookie'] = 'Ne pas se souvenir des noeuds ouverts/fermés pendant la navigation de l\'utilisateur'; +$lang['js']['noscroll'] = 'Empêche de faire défiler l\'arbre quand il ne tient pas dans la largeur de son conteneur'; +$lang['js']['notoc'] = 'Désactive la fonction de prévisualisation de la table des matières'; +$lang['js']['tsort'] = 'Par titre'; +$lang['js']['dsort'] = 'Par date'; +$lang['js']['msort'] = 'Par meta-tag'; +$lang['js']['nsort'] = 'Trier aussi les catégories'; +$lang['js']['hsort'] = 'Trier par page d\'accueil'; +$lang['js']['rsort'] = 'Inverser le tri des pages'; +$lang['js']['nons'] = 'Montrer seulement les pages'; +$lang['js']['nopg'] = 'Montrer seulement les catégories'; +$lang['js']['max'] = 'Nombre de niveaux à afficher avec AJAX quand on ouvre un noeud. La seconde valeur correspond au nombre de sous-niveaux récupérés avec AJAX plutôt que d\'un seul coup.'; +$lang['js']['maxjs'] = 'Nombre de niveaux à afficher dans le navigateur client quand un noeud est ouvert'; +$lang['js']['id'] = 'Id de cookie auto-défini pour ce menu'; +$lang['js']['insert'] = 'Insérer le menu'; +$lang['js']['metanum'] = 'Meta-nombre pour le tri'; +$lang['js']['insertmetanum'] = 'Insérer le méta-nombre'; + +/* contextmenu.js */ +$lang['js']['page'] = 'Page'; +$lang['js']['revs'] = 'Révisions'; +$lang['js']['tocpreview'] = 'Prévisualisation de la TDM'; +$lang['js']['editmode'] = 'Mode d\'édition'; +$lang['js']['insertdwlink'] = 'Insérer en lien DW'; +$lang['js']['insertdwlinktooltip'] = 'Insérer le lien de cette page à la position du curseur dans la boîte d\'édition'; +$lang['js']['ns'] = 'Catégorie'; +$lang['js']['search'] = 'Recherche...'; +$lang['js']['searchtooltip'] = 'Chercher les pages de cette catégorie'; +$lang['js']['create'] = 'Créer'; +$lang['js']['more'] = 'Plus'; +$lang['js']['headpage'] = 'Page d\'accueil'; +$lang['js']['headpagetooltip'] = 'Nouvelle page d\'accueil sous cette page'; +$lang['js']['startpage'] = 'Page de démarrage'; +$lang['js']['startpagetooltip'] = 'Nouvelle page de démarrage sous cette page'; +$lang['js']['custompage'] = 'Page personnalisée'; +$lang['js']['custompagetooltip'] = 'Nouvelle page personnalisée sous cette page'; +$lang['js']['acls'] = 'ACL'; +$lang['js']['purgecache'] = 'vider le cache'; +$lang['js']['exporthtml'] = 'Exporter en HTML'; +$lang['js']['exporttext'] = 'Exporter en texte'; +$lang['js']['headpagehere'] = 'Nouvelle page d\'accueil ici'; +$lang['js']['headpageheretooltip'] = 'Nouvelle page personnalisée dans cette catégorie'; +$lang['js']['newpage'] = 'Nouvelle page'; +$lang['js']['newpagetooltip'] = 'Nouvelle page dans cette catégorie'; +$lang['js']['newpagehere'] = 'Nouvelle page ici'; +$lang['js']['insertkeywords'] = 'Mots-clefs à chercher dans cette catégorie'; +$lang['js']['insertpagename'] = 'Nom de la page à créer'; +$lang['js']['edit'] = 'Modifier'; +$lang['js']['loading'] = 'Chargement...'; diff --git a/plugins/55/indexmenu/lang/fr/settings.php b/plugins/55/indexmenu/lang/fr/settings.php new file mode 100644 index 0000000..a9930c9 --- /dev/null +++ b/plugins/55/indexmenu/lang/fr/settings.php @@ -0,0 +1,22 @@ + + * @author Johan Binard + * @author Schplurtz le Déboulonné + */ +$lang['checkupdate'] = 'Vérifier périodiquement les mises à jour.'; +$lang['only_admins'] = 'N\'autoriser la syntaxe d\'indexmenu qu\'aux admins.
    Notez qu\'une page éditée par un utilisateur non-admin perdra tout arborescence contenue à l\'intérieur.'; +$lang['aclcache'] = 'Optimiser le cache d\'indexmenu pour les ACL (fonctionne uniquement pour la racine des catégories demandées).
    Le choix de la méthode affecte seulement la visualisation des noeuds dans l\'arborescence, pas les autorisations de page.
    • None: Standard. C\'est la méthode la plus rapide et elle ne crée pas d\'autre fichier de cache, mais les noeuds avec une permission refusée peuvent être montrés aux utilisateurs non-autorisés et vice-versa. Recommandée lorsque vous ne refusez l\'accès à aucune page par ACL ou si vous ne vous souciez pas de la façon dont l\'arbre est affiché.
    • User: Connexion par utilisateur. Méthode plus lente et qui crée un grand nombre de fichiers de cache, mais elle cache toujours correctement les page refusées. Recommandée quand vous avez des ACL de page qui dépendent du login de l\'utilisateur.
    • Groups: Par groupes de membres. Bon compromis entre les précédentes méthodes, mais si vous interdisez l\'accès ACL en lecture à un utilisateur appartenant à un groupe ayant les droits ACL en lecture, il pourra alors toujours voir ce noeud dans l\'arbre. Recommandée quand l\'ensemble des ACLs de votre site dépendent de groupes.
    '; +$lang['headpage'] = 'Méthode d\'en-tête : la page à partir de laquelle récupérer le titre et le lien d\'une catégorie.
    Il peut s\'agir de n\'importe laquelle de ces valeurs:
    • La page d\'accueil globale.
    • Une page avec le nom de la catégorie et qui se trouve à l\'intérieur.
    • Une page avec le nom de la catégorie et qui est au même niveau.
    • Une page de nom personnalisée.
    • Une liste de noms de pages séparées par des virgules.
    '; +$lang['hide_headpage'] = 'Cacher les en-têtes.'; +$lang['page_index'] = 'La page qui remplacera l\'index principal de Dokuwiki. Créez-la et insérez la syntaxe d\'indexmenu. Utilisez id#random si vous avez déjà une barre latérale indexmenu avec l\'option navbar. Je vous suggère "{{indexmenu>..|js navbar nocookie id#random}}".'; +$lang['empty_msg'] = 'Message à afficher lorsqu\'un arbre est vide. Utilisez la syntaxe Dokuwiki, pas le code html. La variable {{ns}} est un raccourci pour la catégorie demandée.'; +$lang['skip_index'] = 'Id des catégories à ignorer. Utilisez le format d\'expression régulière. Exemple: /(sidebars|private:myns)/'; +$lang['skip_file'] = 'Id des pages à ignorer. Utilisez le format d\'expression régulière. Exemple /(:start$|^public:newstart$)/'; +$lang['show_sort'] = 'Montrer aux admins le numéro de tri d\'indexmenu en haut des notes de page'; +$lang['themes_url'] = 'Télécharger des thèmes js à partir de cette url.'; +$lang['be_repo'] = 'Laisser les autres télécharger des thèmes à partir de votre site.'; +$lang['defaultoptions'] = 'Liste séparée par des espaces d\'options indexmenu. Ce seront les options par défaut de chaque indexmenu. Elles peuvent être individuellement inversées par une commande dans la syntaxe de l\'extension. '; diff --git a/plugins/55/indexmenu/lang/hr/lang.php b/plugins/55/indexmenu/lang/hr/lang.php new file mode 100644 index 0000000..84e620d --- /dev/null +++ b/plugins/55/indexmenu/lang/hr/lang.php @@ -0,0 +1,88 @@ + + */ +$lang['menu'] = 'Indeks-meni alati'; +$lang['fetch'] = 'Prikaži'; +$lang['install'] = 'Postavi'; +$lang['delete'] = 'Obriši'; +$lang['check'] = 'Provjeri'; +$lang['no_repos'] = 'Nije podešena URL adresa repozitorija teme.'; +$lang['disabled'] = 'Onemogućen'; +$lang['conn_err'] = 'Greška povezivanja'; +$lang['dir_err'] = 'Ne mogu stvoriti privremenu mapu za prihvat teme'; +$lang['down_err'] = 'Ne mogu dohvatiti temu'; +$lang['zip_err'] = 'Greška pri pakiranju ili otpakiravanju zip-a'; +$lang['install_ok'] = 'tema uspješno postavljena. Nova tema je dostupna u alatnoj traci kod uređivanja ili js#naziv_teme kodom.'; +$lang['install_no'] = 'Greška pri povezivanju. Međutim možete pokušati ručno učitati vašu temu ovdje.'; +$lang['delete_ok'] = 'Tema uspješno obrisana.'; +$lang['delete_no'] = 'Dogodila se greška pri brisanju teme'; +$lang['upload'] = 'Dijeli'; +$lang['checkupdates'] = 'Dopune dodatka'; +$lang['noupdates'] = 'Indexmenu ne treba osvježivati. Zadnja inačica je već postavljena:'; +$lang['infos'] = 'Možete napraviti vlastitu temu slijedeći upute na Theme Tutorial stranici.
    Vlastitu temu možete poslati na javni indexmenu repozitorij, korištenjem "Dijeli" gumba pored te teme i time ju podijeliti s ostalim korisnicima.'; +$lang['showsort'] = 'Indexmenu broj sortiranja:'; +$lang['donation_text'] = 'Dodatak Indexmenu nije sponzoriran, već ga razvijam i podržavam u svoje slobodno vrijeme. Ako želite zahvaliti ili podržati razvoj, razmotrite davanje donacije.'; +$lang['js']['indexmenuwizard'] = 'Indexmenu čarobnjak'; +$lang['js']['index'] = 'Kazalo'; +$lang['js']['options'] = 'Opcije'; +$lang['js']['navigation'] = 'Navigacija'; +$lang['js']['sort'] = 'Poredak'; +$lang['js']['filter'] = 'Filtar'; +$lang['js']['performance'] = 'Performanse'; +$lang['js']['namespace'] = 'Imenski prostor'; +$lang['js']['nsdepth'] = 'Dubina'; +$lang['js']['js'] = 'Stablo generirano Javascript-om, možete definirati vlastite teme'; +$lang['js']['theme'] = 'Tema'; +$lang['js']['navbar'] = 'Stablo se otvara na tekućem imenskom prostoru'; +$lang['js']['context'] = 'Prikaži stablo trenutnog wiki konteksta imenskog prostora'; +$lang['js']['nocookie'] = 'Ne pamti otvorene/zatvorene čvorove tijekom kretanja'; +$lang['js']['noscroll'] = 'Spriječi pomicanje stabla kada ono ne stane u širinu okvira'; +$lang['js']['notoc'] = 'Onemogući pregled sadržaja stranice'; +$lang['js']['tsort'] = 'Po naslovu'; +$lang['js']['dsort'] = 'Po datumu'; +$lang['js']['msort'] = 'Po meta tagovima'; +$lang['js']['nsort'] = 'Također sortiraj imenske prostore'; +$lang['js']['hsort'] = 'Sortiraj primarne stranice na vrh'; +$lang['js']['rsort'] = 'Obrni poredak stranica'; +$lang['js']['nons'] = 'Prikaži samo stranice'; +$lang['js']['nopg'] = 'Prikaži samo imenske prostore'; +$lang['js']['max'] = 'Koliko nivoa da se prikaže kod otvaranja čvora, kada se koristi AJAX. Dodatno koliko podnivoa da se dohvati s AJAX-om, umjesto jedan za jedan.'; +$lang['js']['maxjs'] = 'Koliko nivoa da se prikaže u pregledniku kada je čvor otvoren'; +$lang['js']['id'] = 'Pred-definirani id kolačića za ovaj indexmenu.'; +$lang['js']['insert'] = 'Ubaci indexmenu'; +$lang['js']['metanum'] = 'Meta-broj za sortiranje'; +$lang['js']['insertmetanum'] = 'Umetni meta-broj'; +$lang['js']['page'] = 'Stranica'; +$lang['js']['revs'] = 'Revizije'; +$lang['js']['tocpreview'] = 'Pregled sadržaja'; +$lang['js']['editmode'] = 'Mod izmjene'; +$lang['js']['insertdwlink'] = 'Ubaci kao DW vezu'; +$lang['js']['insertdwlinktooltip'] = 'Ubaci link ove stranice u okviru uređivača na poziciji pokazivača'; +$lang['js']['ns'] = 'Imenski prostor'; +$lang['js']['search'] = 'Pretraži ...'; +$lang['js']['searchtooltip'] = 'Pretraga stranica unutar ovog imenskog prostora'; +$lang['js']['create'] = 'Kreiraj'; +$lang['js']['more'] = 'Više'; +$lang['js']['headpage'] = 'Zaglavlje'; +$lang['js']['headpagetooltip'] = 'Kreiraj novo zaglavlje unutar ove stranice'; +$lang['js']['startpage'] = 'Početna stranica'; +$lang['js']['startpagetooltip'] = 'Kreiraj novu početnu stranicu unutar ove stranice'; +$lang['js']['custompage'] = 'Korisnička stranica'; +$lang['js']['custompagetooltip'] = 'Kreiraj novu korisničku stranicu unutar ove stranice'; +$lang['js']['acls'] = 'Acls'; +$lang['js']['purgecache'] = 'Očisti međuspremnik'; +$lang['js']['exporthtml'] = 'Izvezi kao HTML'; +$lang['js']['exporttext'] = 'Izvezi kao tekst'; +$lang['js']['headpagehere'] = 'Zaglavlje ovdje'; +$lang['js']['headpageheretooltip'] = 'Kreiraj novo zaglavlje unutar ovog imenskog prostora'; +$lang['js']['newpage'] = 'Nova stranica'; +$lang['js']['newpagetooltip'] = 'Kreiraj novu stranicu unutar ovog imenskog prostora'; +$lang['js']['newpagehere'] = 'Novu stranicu ovdje'; +$lang['js']['insertkeywords'] = 'Unesi ključne riječi za pretragu unutar ovog imenskog prostora'; +$lang['js']['insertpagename'] = 'Unesi ime stranice za kreiranje'; +$lang['js']['edit'] = 'Izmjeni'; +$lang['js']['loading'] = 'Učitavanje...'; diff --git a/plugins/55/indexmenu/lang/hr/settings.php b/plugins/55/indexmenu/lang/hr/settings.php new file mode 100644 index 0000000..9403f37 --- /dev/null +++ b/plugins/55/indexmenu/lang/hr/settings.php @@ -0,0 +1,20 @@ + + */ +$lang['checkupdate'] = 'Periodička provjera za nadogradnje.'; +$lang['only_admins'] = 'Dopusti indexmenu sintaksu samo administratorima.
    Zapamtite da stranice uređivane od strane ostalih korisnika će izgubiti sva indexmenu stabla.'; +$lang['aclcache'] = 'Optimiraj indexmenu priručnu pohranu za ACL ( radi samo s korijenskim imenskim prostorima).
    Odabir utječe samo na prikaz čvorova, ne i na autorizacije.
    • None: standardno. Ovo je brža metoda i ne kreira nove priručne datoteke za pohranu, ali čvorovi s zabranom pristupa će biti vidljivi neovlaštenim korisnicima. Preporučeno ako ne koristite ACL ili Vam nije bitno kako će stablo biti prikazano.
    • User: po korisniku. Sporija metoda i kreira dosta priručnih datoteka, ali uvijek ispravno ne prikazuje nedozvoljene stranice. Preporuča se kada u ACL listi se koriste korisnici.
    • Groups: članstvo po grupama. Dobar kompromis prethodnih dviju metoda, ali može dovesti do krivog prikaza ako korisnik je izravno blokiran, a ima dopuštenje preko grupe. Preporuča se kada se za autoriziranje u ACL koriste samo grupe.
    '; +$lang['headpage'] = 'Glavna strana: stranica iz koje se dohvaća naziv i veza prema imenskom prostoru.
    Može biti jedna od slijedećih vrijednosti:
    • Globalno definirana početna stranica.
    • Stranica s istim imenom imenskog prostora i nalazi se unutar njega.
    • Stranica s istim imenom imenskog prostora i nalazi se pored njega u istom novou.
    • Posebno definiran naziv stranice.
    • Zarezom odvojena lista naziva stranica.
    '; +$lang['hide_headpage'] = 'Sakrij glavne stranice.'; +$lang['page_index'] = 'Stranica koja zamjenjuje glavno kazalo DokuWiki-a. Napravite ju i ubacite indexmenu kod u nju. Korisite id#random ako već imate indexmenu traku sa strane s navbar opcijom. Moj prijedlog je {{indexmenu>..|js navbar nocookie id#random}}.'; +$lang['empty_msg'] = 'Poruka koja se prikazuje kada je stablo prazno. Koristi Dokuwiki sintaksu, a ne HTML kod. {{ns}} varijabla je kratica za tekući imenski prostor.'; +$lang['skip_index'] = 'Oznake imenskih prostora koje ne treba prikazati. Korisite format regularnih izraza. Primjer: /(sidebars|private:myns)/'; +$lang['skip_file'] = 'Oznake stranica koje ne treba prikazati. Korisite format regularnih izraza. Primjer: /(:start$|^public:newstart$)/'; +$lang['show_sort'] = 'Prikaži administratorima indexmenu sort broj kao poruku na vrhu stranice'; +$lang['themes_url'] = 'Dohvati js teme s ove http url adrese.'; +$lang['be_repo'] = 'Neka drugi mogu preuzeti teme s vašeg site-a.'; +$lang['defaultoptions'] = 'Lista Indeks-meni opcija odvojena razmacima. Ove opcije biti će primijenjene na svaki indeksni izbornik i mogu biti uklonjene sa reverse komandom u sintaksi dodatka'; diff --git a/plugins/55/indexmenu/lang/hu/lang.php b/plugins/55/indexmenu/lang/hu/lang.php new file mode 100644 index 0000000..7ad7169 --- /dev/null +++ b/plugins/55/indexmenu/lang/hu/lang.php @@ -0,0 +1,89 @@ + + * @author DelD + */ +$lang['menu'] = 'Indexmenü segédprogamok'; +$lang['fetch'] = 'Megjelenítés'; +$lang['install'] = 'Telepítés'; +$lang['delete'] = 'Törlés'; +$lang['check'] = 'Ellenőrzés'; +$lang['no_repos'] = 'Témagyűjtemény URL-címe nincs megadva'; +$lang['disabled'] = 'Letiltva'; +$lang['conn_err'] = 'Kapcsolódási hiba'; +$lang['dir_err'] = 'Nem tudok létrehozni átmeneti könyvtárat a téma letöltéséhez.'; +$lang['down_err'] = 'Nem tudom a témát letölteni.'; +$lang['zip_err'] = 'ZIP-létrehozás vagy -kicsomagolási hiba'; +$lang['install_ok'] = 'A téma telepítése sikerült. Az új téma elérhető az oldalmódosítás eszközsorában vagy a js#theme_name option kóddal.'; +$lang['install_no'] = 'Kapcsolódási hiba. A témánkat megpróbálhatjuk manuálisan is feltölteni innen.'; +$lang['delete_ok'] = 'A téma sikeresen törölve.'; +$lang['delete_no'] = 'Hiba lépett fel a téma törlése közben.'; +$lang['upload'] = 'Megosztás'; +$lang['checkupdates'] = 'Bővítmény frissítései'; +$lang['noupdates'] = 'Az Indexmenüt nem szükséges frissítenünk. Már a legújabb verzió van telepítve: '; +$lang['infos'] = 'Készíthetünk saját témát a Tématankönyv (Theme Tutorial) oldalon található utasításokat követve.
    Majd sok embernek örömet is okozhatunk :-), ha beküldjük az Indexmenü gyűjteményébe a téma alatt található "Megosztás" gombbal.'; +$lang['showsort'] = 'Indexmenü rendező szám'; +$lang['donation_text'] = 'Az Indexmenü-bővítményt nem támogatja senki sem, szabad időmben fejlesztem, és nyújtok támogatást hozzá. Ha ennek köszönhetően Ön ezzel haszonra tesz szert, vagy támogatni szeretné a fejlesztést, kérem, viszonozza ezt adomány formájában.'; +$lang['js']['indexmenuwizard'] = 'Indexmenü-varázsló'; +$lang['js']['index'] = 'Index'; +$lang['js']['options'] = 'Beállítások'; +$lang['js']['navigation'] = 'Navigálás'; +$lang['js']['sort'] = 'Rendezés'; +$lang['js']['filter'] = 'Szűrő'; +$lang['js']['performance'] = 'Teljesítmény'; +$lang['js']['namespace'] = 'Névtér'; +$lang['js']['nsdepth'] = 'Mélység'; +$lang['js']['js'] = 'Menü készítése JavaScript-tel; saját témát is definiálhatunk'; +$lang['js']['theme'] = 'Téma'; +$lang['js']['navbar'] = 'Menü megnyitása az aktuális névtérrel'; +$lang['js']['context'] = 'Aktuális wiki-névtérrel összefüggő menü megjelenítése'; +$lang['js']['nocookie'] = 'Menüpontok nyitott/zárt állapota nem kerül megjegyzésre'; +$lang['js']['noscroll'] = 'Menü görgetésének tiltása, ha nem fér el (szélességben) a konténerelemben'; +$lang['js']['notoc'] = 'Tartalom előnézetének tiltása'; +$lang['js']['tsort'] = 'Cím szerint'; +$lang['js']['dsort'] = 'Dátum szerint'; +$lang['js']['msort'] = 'Metacímke szerint'; +$lang['js']['nsort'] = 'Rendezés névterek szerint is'; +$lang['js']['hsort'] = 'Bevezető oldal rendezéskor fent'; +$lang['js']['rsort'] = 'Oldalsorrend megfordítása'; +$lang['js']['nons'] = 'Csak az oldalak megjelenítése'; +$lang['js']['nopg'] = 'Csak a névterek megjelenítése'; +$lang['js']['max'] = 'Hány menüszint kerüljön megjelenítésre AJAX használatával egy almenü megnyitásakor. Másképp: az aktuális menü szintje alatt további hány alszint kerüljön AJAX segítségével letöltésre, ahelyett, hogy az összes egyetlen lépésben töltődjön le.'; +$lang['js']['maxjs'] = 'Hány menüszint kerüljön megjelenítésre a kliensböngészőben egy almenü megnyitásakor.'; +$lang['js']['id'] = 'Ennek az indexmenünek a saját süti azonosítója (ID-je)'; +$lang['js']['insert'] = 'Indexmenü beillesztése'; +$lang['js']['metanum'] = 'Metaszám rendezéshez'; +$lang['js']['insertmetanum'] = 'Metaszám beillesztése'; +$lang['js']['page'] = 'Oldal'; +$lang['js']['revs'] = 'Revíziók'; +$lang['js']['tocpreview'] = 'Tartalomjegyzék előnézete'; +$lang['js']['editmode'] = 'Szerkesztési mód'; +$lang['js']['insertdwlink'] = 'Beillesztés DokuWiki-hivatkozásként'; +$lang['js']['insertdwlinktooltip'] = 'Oldal hivatkozásának beillesztése a szerkesztő ablakba, a kurzor pozíciójánál'; +$lang['js']['ns'] = 'Névtér'; +$lang['js']['search'] = 'Keresés...'; +$lang['js']['searchtooltip'] = 'Oldalak keresése a névtéren belül'; +$lang['js']['create'] = 'Készítés'; +$lang['js']['more'] = 'Több'; +$lang['js']['headpage'] = 'Főoldal'; +$lang['js']['headpagetooltip'] = 'Új főoldal készítése ez alá az oldal alá'; +$lang['js']['startpage'] = 'Kezdőlap'; +$lang['js']['startpagetooltip'] = 'Új kezdőlap készítése ez alá az oldal alá'; +$lang['js']['custompage'] = 'Tetszőleges oldal'; +$lang['js']['custompagetooltip'] = 'Új oldal készítése ez alá az oldal alá'; +$lang['js']['acls'] = 'ACL (jogosultságok)'; +$lang['js']['purgecache'] = 'Átmeneti tár (cache) takarítása'; +$lang['js']['exporthtml'] = 'Exportálás HTML-fájlba'; +$lang['js']['exporttext'] = 'Exportálás szöveges fájlba'; +$lang['js']['headpagehere'] = 'Főoldal ide'; +$lang['js']['headpageheretooltip'] = 'Új főoldal készítése a névtérben'; +$lang['js']['newpage'] = 'Új oldal'; +$lang['js']['newpagetooltip'] = 'Új oldal készítése a névtérben'; +$lang['js']['newpagehere'] = 'Új oldal ide'; +$lang['js']['insertkeywords'] = 'Kulcsszavak ezen a névtéren belüli kereséshez'; +$lang['js']['insertpagename'] = 'Készítendő oldal neve'; +$lang['js']['edit'] = 'Szerkesztés'; +$lang['js']['loading'] = 'Betöltés...'; diff --git a/plugins/55/indexmenu/lang/hu/settings.php b/plugins/55/indexmenu/lang/hu/settings.php new file mode 100644 index 0000000..e4af491 --- /dev/null +++ b/plugins/55/indexmenu/lang/hu/settings.php @@ -0,0 +1,21 @@ + + * @author DelD + */ +$lang['checkupdate'] = 'Frissítések keresése szabályos időközönként'; +$lang['only_admins'] = 'Az Indexmenü szintaxisa csak adminisztrátorok számára legyen elérhető.
    Megj.: ha egy indexmenüt tartalmazó oldalt nem adminisztrátor módosít, akkor a menü az oldalról törlődik.'; +$lang['aclcache'] = 'Indexmenü-gyorsítótár optimalizálása ACL-hez (csak root-igényű névterekhez működik).
    A kiválasztott módszer csak az indexmenü menüpontjainak megjelenítésére van hatással, nem pedig az oldalak engedélyezésére.
    • Nincs (none): Alapértelmezett. Ez a leggyorsabb módszer, nem hoz létre további gyorsító fájlokat, de tiltott menüpontok jelenhetnek meg arra jogosulatlan felhasználóknak, vagy fordítva. Akkor javasolt használni, ha az oldalak hozzáférését nem tiltjuk ACL-lel, vagy érdektelen számunkra, hogy a menü miként jelenik meg.
    • Felhasználói (user): Felhasználói bejelentkezés alapján. Lassabb módszer, és sok gyorsítófájlt hoz létre, de mindig helyesen rejti el a tiltott oldalakat. Akkor javasolt használni, ha az oldalaink hozzáférése felhasználói bejelentkezésen alapul.
    • Csoport (groups): Csoporttagságonként. Jó kompromisszum a két, előző módszer között, de abban az esetben, ha egy olyan felhasználótól tagadjuk meg az olvasási jogot, aki egy olvasási joggal rendelkező tagcsoporthoz tartozik, akkor a mégis látni fogja a menüelemet. Akkor javasolt használni, ha a teljes wikink ACL-beállítása csoporttagságon alapul.
    '; +$lang['headpage'] = 'Bevezetőlap metódus: az oldal, amelyről egy névtér címét és hivatkozását nyerjük.
    Bármely következő érték lehet:
    • az általános kezdőoldal
    • oldal névtér nevével és ami benne van
    • oldal névtér nevével, és ami azonos szinten van
    • tetszőleges oldalnév
    • vesszővel elválasztott oldalnevek listája
    '; +$lang['hide_headpage'] = 'Bevezetőoldalak elrejtése'; +$lang['page_index'] = 'Az oldal, amely felváltja a DőkuWiki főindexét. Hozzuk létre, és írjuk bele az indexmenü kódját. Használjuk a id#véletlenszám kódot, ha már rendelkezünk olyan oldalmenüvel, amelyhez a navbar opciót használjuk. Javaslat: {{indexmenu>..|js navbar nocookie id#véletlenszám}}.'; +$lang['empty_msg'] = 'Megjelenítendő üzenet, ha a menüfa üres. Használjunk DokuWiki-szintaxist, ne pedig HTML-kódot. A {{ns}} változó a kívánt névtér rövidítése.'; +$lang['skip_index'] = 'Kihagyni kívánt névterek ID-je (azonosítója). Használjuk a reguláris kifejezések formátumát. Példa: /(oldalmenu|privat:nevterem)/.'; +$lang['skip_file'] = 'Kihagyni kívánt oldalak ID-je (azonosítója). Használjuk a reguláris kifejezések formátumát. Példa: /(start$|^nyilvanos:ujstart$)/.'; +$lang['show_sort'] = 'Indexmenü rendező számának megjelenítése adminisztrátoroknak oldal tetején megjegyzésként'; +$lang['themes_url'] = 'JavaScript-témák letöltése erről az URL-címről.'; +$lang['be_repo'] = 'Témák letöltésének engedélyezése másoknak az oldalunkról.'; +$lang['defaultoptions'] = 'Az \'indexmenu\' beállításainak listája, szóközzel elválasztva. Ezek a beállítások alapértelmezés szerint minden indexmenu-elemre végrehajtódnak, és nem visszavonhatók a bővítmény parancsaival.'; diff --git a/plugins/55/indexmenu/lang/it/lang.php b/plugins/55/indexmenu/lang/it/lang.php new file mode 100644 index 0000000..95661fb --- /dev/null +++ b/plugins/55/indexmenu/lang/it/lang.php @@ -0,0 +1,70 @@ + + * @author Edmondo Di Tucci + * @author lerdt + */ +$lang['menu'] = 'Utility di Indexmenu'; +$lang['fetch'] = 'Mostra'; +$lang['install'] = 'Installa'; +$lang['delete'] = 'Elimina'; +$lang['check'] = 'Controlla'; +$lang['no_repos'] = 'Non è stato configurato nessun indirizzo web per il repository dei temi.'; +$lang['disabled'] = 'Disabilitato'; +$lang['conn_err'] = 'Errore di connessione'; +$lang['dir_err'] = 'Impossibile creare la directory temporanea per scaricare il tema'; +$lang['down_err'] = 'Impossibile scaricare il tema'; +$lang['zip_err'] = 'Errore durante la creazione o scompattazione dell\' archivio'; +$lang['install_ok'] = 'tema installato correttamente. Il nuovo tema è accessibile dalla toolbar degli strumenti quando crei una pagina oppure tramite l\' opzione js#nome_tema di indexmenu.'; +$lang['install_no'] = 'Errore durante l\' upload. Puoi comunque provare ad inviarmi manualmente il tema da qui.'; +$lang['delete_ok'] = 'Rimozione del tema avvenuta con successo'; +$lang['delete_no'] = 'Errore durante la rimozione del tema'; +$lang['upload'] = 'Condividi'; +$lang['checkupdates'] = 'Aggiornamenti plugin'; +$lang['noupdates'] = 'Indexmenu non ha bisogno di essere aggiornato. Hai già l\'ultima release:'; +$lang['infos'] = 'Puoi creare il tuo tema seguendo le istruzioni nella pagina del Tutorial dei temi.
    Poi potreste rendere felice più gente :-) inviandolo nel repository pubblico di indexemnu tramite il pulsante "condividi" sotto il tema della lista.'; +$lang['showsort'] = 'Ordinamento in indexmenu: '; +$lang['donation_text'] = 'Il plugin indexmenu non è sponsorizzato da nessuno, ma lo sviluppo e supporto gratuitamente nel mio tempo libero. Se guadagni qualcosa grazie a questo plugin o vuoi supportarne lo sviluppo, puoi farlo con una donazione.'; +$lang['js']['index'] = 'Indice'; +$lang['js']['options'] = 'Opzioni'; +$lang['js']['navigation'] = 'Navigazione'; +$lang['js']['sort'] = 'Ordine'; +$lang['js']['filter'] = 'Filtro'; +$lang['js']['performance'] = 'Performance'; +$lang['js']['namespace'] = 'Namespace'; +$lang['js']['nsdepth'] = 'Profondità'; +$lang['js']['js'] = 'Albero renderizzato da Javascript. Puoi definire il tuo tema personalizzato.'; +$lang['js']['theme'] = 'Tema'; +$lang['js']['navbar'] = 'L\'albero apre il namespace corrente'; +$lang['js']['context'] = 'Visualizza l\'albero del contesto del namespace corrente'; +$lang['js']['nocookie'] = 'Non ricordare di aprire/chiudere i nodi durante la navigazione utente'; +$lang['js']['noscroll'] = 'Previene lo scorrimento dell\'albero quando non rientra nella larghezza del contenitore'; +$lang['js']['notoc'] = 'Disabilita l\'anteprima della TOC (Tabella dei contenuti)'; +$lang['js']['tsort'] = 'Per titolo'; +$lang['js']['dsort'] = 'Per data'; +$lang['js']['msort'] = 'Per meta tag'; +$lang['js']['nsort'] = 'Ordina anche i namespaces'; +$lang['js']['rsort'] = 'Inverti l\'ordine delle pagine'; +$lang['js']['nons'] = 'Mostra solo le pagine'; +$lang['js']['nopg'] = 'Mostra solo in namespaces'; +$lang['js']['maxjs'] = 'Quanti livelli visualizzare nel browser quando un nodo è aperto'; +$lang['js']['id'] = 'Cookie ID per questo indexmenu'; +$lang['js']['insert'] = 'Inserisci indexmenu'; +$lang['js']['metanum'] = 'Meta numero per ordinare'; +$lang['js']['insertmetanum'] = 'Inserisci un metanumero'; +$lang['js']['page'] = 'Pagina'; +$lang['js']['revs'] = 'Modifiche'; +$lang['js']['tocpreview'] = 'Indice'; +$lang['js']['ns'] = 'Categoria'; +$lang['js']['search'] = 'Cerca...'; +$lang['js']['searchtooltip'] = 'Cerca in tutte le pagine della categoria'; +$lang['js']['create'] = 'Crea'; +$lang['js']['acls'] = 'Access Control Lists (ACLs)'; +$lang['js']['exporthtml'] = 'Esporta come HTML'; +$lang['js']['exporttext'] = 'Esporta come testo'; +$lang['js']['newpage'] = 'Nuova pagina...'; +$lang['js']['newpagehere'] = 'Crea nuova pagina qui'; +$lang['js']['insertkeywords'] = 'Inserisci una o più parole chiavi per cercare in questa categoria'; diff --git a/plugins/55/indexmenu/lang/it/settings.php b/plugins/55/indexmenu/lang/it/settings.php new file mode 100644 index 0000000..8f6596b --- /dev/null +++ b/plugins/55/indexmenu/lang/it/settings.php @@ -0,0 +1,19 @@ + + */ +$lang['checkupdate'] = 'Controlla periodicamente la presenza di nuovi aggiornamenti.'; +$lang['only_admins'] = 'Permette l\'uso di indexmenu solo agli amministratori.
    Nota che una pagina modificata da un utente non amministratore perdera\' qualsiasi indexmenu contenuto in essa.'; +$lang['aclcache'] = 'Ottimizza la cache di indexmenu per le acl (solo per i root namespaces) .
    La scelta del metodo influisce solo sulla visualizzazione dei nodi nell\'albero di indexmenu, non sulle autorizzazioni delle pagine.
    • None: Standard. È il metodo più veloce e non crea ulteriori files di cache, ma i nodi con permesso negato potrebbero essere visualizzati da utenti non autorizzati o viceversa. Consigliato se non si nega l\'accesso alle pagine tramite acl o non interessa come vengano visualizzate.
    • User: Per singola login. Metodo più lento e crea molti files di cache, ma nasconde sempre correttamente i nodi a cui l\'utente non ha accesso. Consigliato se si nega l\'accesso alle pagine a degli utenti in base alla loro login.
    • Groups: Usa una cache differente in base ai gruppi di appartenenza dell\'utente. Buon compromesso fra i precedenti metodi, ma nel caso si neghi l\'accesso ad un utente che appartiene ad un guppo con autorizzazione, questo potrebbe comunque visualizzare i nodi a lui negati. Consigliato se si impostano le acl unicamente in base ai gruppi di appartenenza.
    '; +$lang['headpage'] = 'Headpage: La pagina da cui ottenere il titolo e il link del namespace.
    Puo\' essere uno qualsiasi di questi valori:
    • La pagina globale start.
    • La pagina con il nome del namespace e che si trova al suo interno.
    • La pagina con il nome del namespace e che si trova allo stesso livello.
    • Il nome personalizzato di una pagina.
    • Una lista di nomi di pagine separati da virgola.
    '; +$lang['hide_headpage'] = 'Nascondi le pagine di tipo headpage.'; +$lang['page_index'] = 'La pagina che sostituirà l\'indice di dokuwiki. Creala and inserisci la sintassi di indexmenu. Usa id#random se hai già una sidebar con indexmenu e l\'opzione navbar. Il mio suggerimento {{indexmenu>..|js navbar nocookie id#random}}.'; +$lang['empty_msg'] = 'Messaggio da visualizzare in caso di menu vuoto. Utilizzare la sinstassi Dokuwiki, non codice html.La variabile {{ns}} mostra il namespace richiesto.'; +$lang['skip_index'] = 'Id dei namespaces Namespaces da nascondere. Utilizzare il formato delle Espressioni Regolari. Esempio: /(sidebars|private:myns)/'; +$lang['skip_file'] = 'Id delle pagine da nascondere. Utilizzare il formato delle Espressioni Regolari. Esempio: /(:start$|^public:newstart)/'; +$lang['show_sort'] = 'Mostra agli amministratori il numero di ordinamento di indexmenu come nota ad inizio pagina.'; +$lang['themes_url'] = 'Http url da cui scaricare i temi.'; +$lang['be_repo'] = 'Permetti a tutti di scaricare i temi dal tuo sito'; diff --git a/plugins/55/indexmenu/lang/ja/lang.php b/plugins/55/indexmenu/lang/ja/lang.php new file mode 100644 index 0000000..323050c --- /dev/null +++ b/plugins/55/indexmenu/lang/ja/lang.php @@ -0,0 +1,75 @@ + + * @author Nobuyuki Fukuyori + * @author Hideaki SAWADA + */ +$lang['menu'] = 'ツール'; +$lang['fetch'] = '表示'; +$lang['install'] = 'インストール'; +$lang['delete'] = '削除'; +$lang['check'] = '確認'; +$lang['no_repos'] = 'テーマ情報のurlが設定されていません。'; +$lang['disabled'] = '無効'; +$lang['conn_err'] = '接続エラー'; +$lang['dir_err'] = 'テーマを受取るための一時フォルダが作成できません'; +$lang['down_err'] = 'テーマを受取ることができません'; +$lang['zip_err'] = '圧縮または解凍エラー'; +$lang['install_ok'] = 'テーマのインストールが完了しました。新しいテーマは、編集ページのツールバーからか、js#theme_name optionと記述することで使用できます。'; +$lang['install_no'] = '接続エラー。しかしここから自分のテーマを手動でアップロードできます。'; +$lang['delete_ok'] = 'テーマの削除が完了しました。'; +$lang['delete_no'] = 'テーマの削除でエラーが発生しました。'; +$lang['upload'] = '共有'; +$lang['checkupdates'] = 'プラグインの更新'; +$lang['noupdates'] = 'Indexmenuをアップデートする必要はありません。既に最新の状態です。'; +$lang['infos'] = 'テーマ学習ページの指示に従って自分のテーマを作成できます。
    その後、テーマの下の「共有」ボタンで、公共 indexmenu リポジトリに送ってより多くの人を幸せにできます。'; +$lang['showsort'] = 'Indexmenuソート番号'; +$lang['donation_text'] = 'indexmenuプラグインは誰の後援も受けていませんが、機能を継続するために多くの時間が無料で費やされています。これにより、あなたが何かを得られていたり、純粋に開発を支援したい場合は、開発者に寄付をすることも可能です。'; +$lang['js']['indexmenuwizard'] = 'Indexmenuウィザード'; +$lang['js']['index'] = 'インデックス'; +$lang['js']['options'] = 'オプション'; +$lang['js']['navigation'] = 'ナビゲーション'; +$lang['js']['sort'] = 'ソート'; +$lang['js']['filter'] = 'フィルター'; +$lang['js']['performance'] = 'パフォーマンス'; +$lang['js']['namespace'] = '名前空間'; +$lang['js']['nsdepth'] = '深度'; +$lang['js']['js'] = 'レンダリングツリーは、Javasriptによって独自のテーマを定義することができます'; +$lang['js']['theme'] = 'テーマ'; +$lang['js']['navbar'] = '現在の名前空間でツリーを開きます。'; +$lang['js']['context'] = '名前空間からツリーを開始させます'; +$lang['js']['nocookie'] = 'ユーザー操作結果のノードの開閉を記憶しません。'; +$lang['js']['noscroll'] = 'コンテナの幅に合わない場合、ツリーをスクロールしないようにします。'; +$lang['js']['notoc'] = '目次プレビュー機能を無効化します。'; +$lang['js']['tsort'] = 'タイトル順'; +$lang['js']['dsort'] = '日付順'; +$lang['js']['msort'] = 'メタ・タグ順'; +$lang['js']['nsort'] = '名前空間もソートする'; +$lang['js']['rsort'] = 'ページソートを逆順にする'; +$lang['js']['nons'] = 'ページのみ表示'; +$lang['js']['nopg'] = '名前空間のみ表示'; +$lang['js']['insert'] = 'Indexmenuの挿入'; +$lang['js']['metanum'] = 'ソート用の Meta number'; +$lang['js']['insertmetanum'] = 'Meta number の追加'; +$lang['js']['page'] = 'ページ'; +$lang['js']['revs'] = '履歴'; +$lang['js']['tocpreview'] = '目次プレビュー'; +$lang['js']['editmode'] = '編集モード'; +$lang['js']['ns'] = '名前空間'; +$lang['js']['search'] = '検索中…'; +$lang['js']['searchtooltip'] = 'この名前空間内のページを検索する。'; +$lang['js']['create'] = '作成'; +$lang['js']['headpage'] = 'ヘッドページ'; +$lang['js']['startpage'] = 'スタートページ'; +$lang['js']['startpagetooltip'] = 'このページの下に新規スタートページを作成する'; +$lang['js']['custompagetooltip'] = 'このページの下に新規ページを作成する'; +$lang['js']['purgecache'] = 'キャッシュをクリア'; +$lang['js']['exporthtml'] = 'HTML で出力する'; +$lang['js']['exporttext'] = 'テキストで出力する'; +$lang['js']['headpageheretooltip'] = 'この名前空間内に新規ヘッドページを作成する'; +$lang['js']['newpage'] = '新規ページ'; +$lang['js']['newpagetooltip'] = 'この名前空間内に新規ページを作成する'; +$lang['js']['edit'] = '編集'; diff --git a/plugins/55/indexmenu/lang/ja/settings.php b/plugins/55/indexmenu/lang/ja/settings.php new file mode 100644 index 0000000..135a7ce --- /dev/null +++ b/plugins/55/indexmenu/lang/ja/settings.php @@ -0,0 +1,20 @@ + + * @author Hideaki SAWADA + */ +$lang['checkupdate'] = '更新を定期的に確認する。'; +$lang['only_admins'] = 'indexmenu 構文を管理者のみに許可します。
    管理者でないユーザーが編集すると、ページ内の indexmenu ツリーはすべてなくなります。'; +$lang['aclcache'] = 'ACL のための indexmenu キャッシュを最適化します(要求された名前空間の root 専用として動作します)。
    選択した方法は、indexmenu ツリー上のノード表示だけに影響し、ページに対する権限には影響しません。
    • None: 標準。速い方法で、キャッシュファイルを作成しませんが、権限に制限があるノードを無許可のユーザーに表示したり、その逆の可能性もあります。 +ACL によってページへのアクセスを管理していないか、管理していてもにツリーに表示されることを気にしない場合に推奨。
    • User: ユーザーログイン毎。遅い方法で、多くのキャッシュファイルを作成しますが、常に正しく制限されたページを非表示にします。ログインユーザーに依存したページ ACL がある場合に推奨。
    • Groups: グループ毎。前の方法との程よい妥協。しかし、ACL 認証を持つグループに属しているユーザーに対して読み取り ACL を拒否した場合、そのユーザーはツリー内のノードを表示してしまします。サイト全体の ACL がグループに依存する場合に推奨。
    '; +$lang['headpage'] = 'ヘッドページの方法: 名前空間の見出しとリンクの回収元のページ
    この値のいずれかになります:
    • グローバルスタートページ
    • 名前空間の中にある名前空間と同名のページ
    • 名前空間と同じ階層にある名前空間と同名のページ
    • カスタムページ名
    • ページ名のカンマ区切り一覧
    '; +$lang['hide_headpage'] = 'ヘッドページを非表示にする'; +$lang['empty_msg'] = 'ツリーが空の場合、表示するメッセージ。HTML コードではなく DokuWiki 構文を使用して下さい。{{ns}} 変数は要求された名前空間のショートカットです。'; +$lang['skip_index'] = '対象外とする名前空間 ID。正規表現の形式を使用します。例: /(sidebars|private:myns)/'; +$lang['skip_file'] = '対象外とするページ ID。正規表現の形式を使用します。例: /(:start$|^public:newstart$)/'; +$lang['show_sort'] = '管理者にはページの注釈の先頭に indexmenu ソート番号を表示する。'; +$lang['themes_url'] = 'この http URL から js テーマをダウンロードする。'; +$lang['defaultoptions'] = 'indexmenu オプションのスペース区切り一覧。全ての indexmenu にデフォルト適用します。プラグイン構文の逆コマンドで元に戻すことができます。'; diff --git a/plugins/55/indexmenu/lang/ko/lang.php b/plugins/55/indexmenu/lang/ko/lang.php new file mode 100644 index 0000000..6fc2a70 --- /dev/null +++ b/plugins/55/indexmenu/lang/ko/lang.php @@ -0,0 +1,89 @@ + + * @author Erial + */ +$lang['menu'] = 'Indexmenu 유틸리티'; +$lang['fetch'] = '보이기'; +$lang['install'] = '설치'; +$lang['delete'] = '삭제'; +$lang['check'] = '확인'; +$lang['no_repos'] = '설정된 테마 저장소 url이 없습니다.'; +$lang['disabled'] = '비활성화'; +$lang['conn_err'] = '연결 오류'; +$lang['dir_err'] = '테마를 받을 임시 폴더를 만들 수 없습니다'; +$lang['down_err'] = '테마를 받을 수 없습니다'; +$lang['zip_err'] = 'Zip 만들기나 압축 풀기 오류'; +$lang['install_ok'] = '테마가 성공적으로 설치되었습니다. 새 테마는 편집 페이지의 도구 모음이나 js#theme_name option으로 사용할 수 있습니다.'; +$lang['install_no'] = '연결 오류입니다. 그러나 여기에서 수동으로 테마를 올려볼 수 있습니다.'; +$lang['delete_ok'] = '테마가 성공적으로 삭제되었습니다.'; +$lang['delete_no'] = '테마를 삭제하는 도중 오류가 발생했습니다'; +$lang['upload'] = '공유'; +$lang['checkupdates'] = '플러그인 업데이트'; +$lang['noupdates'] = 'Indexmenu를 업데이트할 필요가 없습니다. 이미 최신 배포판이 있습니다:'; +$lang['infos'] = '테마 자습서 문서에서 지시에 따라 테마를 만들 수 있습니다.
    다음으로 해당 테마를 "공유" 버튼으로, 공개 Indexmenu 저장소에 보내서 더 많은 사람을 행복하게 :-) 할 수 있습니다.'; +$lang['showsort'] = 'Indexmenu 정렬 숫자:'; +$lang['donation_text'] = 'Indexmenu 플러그인은 누군가의 후원을 받지 않지만 플러그인을 개발하고 틈틈이 무료로 지원합니다. 무언가 감사를 얻었거나 그 개발을 지원하려면, 기부를 고려할 수 있습니다.'; +$lang['js']['indexmenuwizard'] = 'Indexmenu 마법사'; +$lang['js']['index'] = '색인'; +$lang['js']['options'] = '설정'; +$lang['js']['navigation'] = '둘러보기'; +$lang['js']['sort'] = '정렬'; +$lang['js']['filter'] = '필터'; +$lang['js']['performance'] = '성능'; +$lang['js']['namespace'] = '이름공간'; +$lang['js']['nsdepth'] = '깊이'; +$lang['js']['js'] = '자바스크립트에 의해 렌더되는 트리로, 자신의 테마를 정의할 수 있습니다'; +$lang['js']['theme'] = '테마'; +$lang['js']['navbar'] = '트리는 현재 이름공간에서 엽니다'; +$lang['js']['context'] = '현재 위키 이름공간 문맥의 트리를 표시합니다'; +$lang['js']['nocookie'] = '사용자가 둘러보는 동안 열린/닫힌 노드를 기억하지 않습니다'; +$lang['js']['noscroll'] = '트리의 컨테이너 너비에 맞추지 않으면 트리의 스크롤을 막습니다'; +$lang['js']['notoc'] = '목차 미리 보기 기능을 비활성화합니다'; +$lang['js']['tsort'] = '제목별'; +$lang['js']['dsort'] = '날자별'; +$lang['js']['msort'] = '메타 태그별'; +$lang['js']['nsort'] = '이름공간도 정렬'; +$lang['js']['hsort'] = '머릿문서 위에 정렬'; +$lang['js']['rsort'] = '문서 정렬을 반대로'; +$lang['js']['nons'] = '문서만 보기'; +$lang['js']['nopg'] = '이름공간만 보기'; +$lang['js']['max'] = '노드가 열릴 때 얼마나 많은 수준을 ajax로 렌더합니까. 추가로 해당 수준 아래에 얼마나 많은 하위 수준이 해당 문서를 보여주는 대신 AJAX로 검색됩니까.'; +$lang['js']['maxjs'] = '노드가 열릴 때 얼마나 많은 수준이 클라이언트 브라우저에서 렌더합니까'; +$lang['js']['id'] = 'Indexmenu에 대한 자기 정의된 쿠키 ID'; +$lang['js']['insert'] = 'Indexmenu 넣기'; +$lang['js']['metanum'] = '정렬에 대한 메타 숫자'; +$lang['js']['insertmetanum'] = '메타숫자 넣기'; +$lang['js']['page'] = '문서'; +$lang['js']['revs'] = '판'; +$lang['js']['tocpreview'] = '목차 미리 보기'; +$lang['js']['editmode'] = '편집 모드'; +$lang['js']['insertdwlink'] = 'DW링크 넣기'; +$lang['js']['insertdwlinktooltip'] = '커서 위치에서 편집 상자에 이 문서의 링크를 넣기'; +$lang['js']['ns'] = '이름공간'; +$lang['js']['search'] = '검색 ...'; +$lang['js']['searchtooltip'] = '이 이름공간 안의 문서를 검색'; +$lang['js']['create'] = '만들기'; +$lang['js']['more'] = '더 보기'; +$lang['js']['headpage'] = '머릿문서'; +$lang['js']['headpagetooltip'] = '이 문서 아래에 새 머릿문서 만들기'; +$lang['js']['startpage'] = '시작 문서'; +$lang['js']['startpagetooltip'] = '이 문서 아래에 새 시작 문서 만들기'; +$lang['js']['custompage'] = '사용자 지정 문서'; +$lang['js']['custompagetooltip'] = '이 문서 아래에 새 문서 만들기'; +$lang['js']['acls'] = '접근 제어 목록'; +$lang['js']['purgecache'] = '캐시 지우기'; +$lang['js']['exporthtml'] = 'HTML로 내보내기'; +$lang['js']['exporttext'] = '텍스트로 내보내기'; +$lang['js']['headpagehere'] = '여기를 머릿문서로'; +$lang['js']['headpageheretooltip'] = '이 이름공간 안에 새 머릿문서 만들기'; +$lang['js']['newpage'] = '새 문서'; +$lang['js']['newpagetooltip'] = '이 이름공간 안에 새 문서 만들기'; +$lang['js']['newpagehere'] = '여기에 새 문서'; +$lang['js']['insertkeywords'] = '이 이름공간 안에서 검색할 단어를 넣어주세요'; +$lang['js']['insertpagename'] = '새로 만들 문서 이름을 넣어주세요'; +$lang['js']['edit'] = '편집'; +$lang['js']['loading'] = '불러오는 중...'; diff --git a/plugins/55/indexmenu/lang/ko/settings.php b/plugins/55/indexmenu/lang/ko/settings.php new file mode 100644 index 0000000..2b6651d --- /dev/null +++ b/plugins/55/indexmenu/lang/ko/settings.php @@ -0,0 +1,21 @@ + + * @author Erial + */ +$lang['checkupdate'] = '업데이트를 정기적으로 확인합니다.'; +$lang['only_admins'] = 'Indexmenu 문법을 관리자에게만 허용합니다.
    관리자가 아닌 사용자가 편집한 문서는 매번 포함된 Indexmenu 트리가 사라짐에 주의하세요.'; +$lang['aclcache'] = 'ACL에 대한 Indexmenu 캐시를 최적화합니다. (루트 요청된 이름공간에 대해서만 작동)
    방법을 선택하는 것은 문서 권한이 아니라, Indexmenu 트리의 노드만 시각화에 영향을 줍니다.
    • 없음: 표준. 빠른 방법이고 추가적인 캐시 파일을 만들지 않지만, 거부된 권한이 있는 노드가 권한이 없는 사용자나 그 반대에게 보일 수 있습니다. ACL에 의한 문서 접근을 거부하지 않거나 트리를 표시하는 방법을 상관하지 않을 때 권장합니다.
    • 사용자: 사용자마다 로그인. 느린 방법이고 캐시 파일을 많이 만들지만, 항상 올바르게 거부된 문서를 숨깁니다. 사용자 로그인에 의존하는 문서 ACL이 있을 때 권장합니다.
    • 그룹: 그룹마다 구성원 자격. 이전의 두 방법 사이에 타협이 좋지만, 읽기 ACL 인증이 있는 그룹에 속하는 사용자에게 읽기 ACL을 거부하는 경우에, 어쨌든 트리에 있는 노드를 표시할 수 있습니다. 그룹 구성원에 의존하는 전체 사이트 ACL일 때 권장합니다.
    '; +$lang['headpage'] = '머릿문서 메서드: 이름공간의 제목과 링크를 얻는 문서입니다.
    다음 값 중 하나일 수 있습니다:
    • 전역 시작 문서입니다.
    • 거기 안에 있는 이름공간 이름이 있는 문서입니다.
    • 이름공간 이름과 같은 수준이 있는 문서입니다.
    • 사용자 지정 이름 문서입니다.
    • 문서 이름의 쉼표로 구분된 목록입니다.
    '; +$lang['hide_headpage'] = '머릿문서를 숨깁니다.'; +$lang['page_index'] = '주 도쿠위키 색인을 바꿀 문서. 문서를 만들고 Indexmenu 문법을 넣으세요. navbar 옵션으로 Indexmenu 사이드바가 이미 있으면 id#random을 사용하세요. 내 제안은 {{indexmenu>..|js navbar nocookie id#random}}입니다.'; +$lang['empty_msg'] = '트리가 비어있을 때 보여줄 메시지. 도쿠위키 문법을 사용하고 html 코드를 사용하지 마세요. {{ns}} 변수는 요청한 이름공간에 대한 단축입니다.'; +$lang['skip_index'] = '건너뛰는 이름공간 ID. 정규 표현식 형식을 사용하세요. 예: /(사이트바|비공개:내이름공간)/'; +$lang['skip_file'] = '건너뛰는 문서 ID. 정규 표현식 형식을 사용하세요. 예: /(:start$|^public:newstart$)/'; +$lang['show_sort'] = '문서 노드의 위로 Indexmenu 정렬 숫자를 관리자에게 보이기'; +$lang['themes_url'] = '이 http url에서 js 테마를 다운로드합니다.'; +$lang['be_repo'] = '다른 사용자가 사이트에서 테마를 다운로드할 수 있습니다.'; +$lang['defaultoptions'] = 'indexmenu의 설정은 공간으로 나뉩니다. 설정된 내용은 플러그인 문법에 따라 명령이 지정된 경우를 제외한 모든 indexmenu에 기본으로 적용됩니다'; diff --git a/plugins/55/indexmenu/lang/nl/lang.php b/plugins/55/indexmenu/lang/nl/lang.php new file mode 100644 index 0000000..38f6e20 --- /dev/null +++ b/plugins/55/indexmenu/lang/nl/lang.php @@ -0,0 +1,89 @@ + + * @author Joachim David + */ +$lang['menu'] = 'Indexmenu Themabeheerder'; +$lang['fetch'] = 'Weergeven'; +$lang['install'] = 'Installeren'; +$lang['delete'] = 'Verwijderen'; +$lang['check'] = 'Controleer'; +$lang['no_repos'] = 'Geen thema-repositorie url ingesteld'; +$lang['disabled'] = 'Uitgeschakeld'; +$lang['conn_err'] = 'Verbindingsfout'; +$lang['dir_err'] = 'Niet in staat een tijdelijke map te maken om thema te downloaden'; +$lang['down_err'] = 'Niet in staat thema te ontvangen'; +$lang['zip_err'] = 'Zip inpak- of uitpakfout'; +$lang['install_ok'] = 'thema succesvol geïnstalleerd. Het nieuwe thema is beschikbaar in de werkbalk van het bewerkvenster of met js#theme_name syntax'; +$lang['install_no'] = 'Verbindingsfout. Je kunt ook proberen om handmatig je thema te downloaden van de site van de ontwikkelaar.'; +$lang['delete_ok'] = 'Thema is succesvol verwijderd.'; +$lang['delete_no'] = 'Er is een fout gebeurd bij verwijderen thema'; +$lang['upload'] = 'Delen'; +$lang['checkupdates'] = 'Plugin updates'; +$lang['noupdates'] = 'Indexmenu heeft geen update nodig. Je hebt al de laatste versie:'; +$lang['infos'] = 'Je kunt je eigen thema maken met de instructies op de Thema handleiding op de plugin wikipagina.
    Je kunt dan meer mensen blij maken :-) Stuur het naar de publieke indexmenu repositorie met de "Delen" knop onder dat thema.'; +$lang['showsort'] = 'Indexmenu sorteernummer:'; +$lang['donation_text'] = 'De indexmenu plugin wordt door niemand gesponsord, maar ik ontwikkel en ondersteun het in mijn vrije tijd. Je kunt mij bedanken of ondersteunen via een donatie.'; +$lang['js']['indexmenuwizard'] = 'Indexmenu Wizard'; +$lang['js']['index'] = 'Index'; +$lang['js']['options'] = 'Opties'; +$lang['js']['navigation'] = 'Navigatie'; +$lang['js']['sort'] = 'Sorteren'; +$lang['js']['filter'] = 'Filteren'; +$lang['js']['performance'] = 'Prestaties'; +$lang['js']['namespace'] = 'Namespace'; +$lang['js']['nsdepth'] = 'Diepte'; +$lang['js']['js'] = 'Boom gerenderd door Javascript, je kunt zelf een thema kiezen'; +$lang['js']['theme'] = 'Thema'; +$lang['js']['navbar'] = 'De boom opent op de huidige namespace'; +$lang['js']['context'] = 'Geeft de boom weer van de huidige wiki namespace context'; +$lang['js']['nocookie'] = 'Onthoud niet de open/gesloten knooppunten tijdens het gebruik'; +$lang['js']['noscroll'] = 'Voorkom scrollen van de boom als deze niet in de kolombreedte past'; +$lang['js']['notoc'] = 'Schakel de inhoudsopgave-voorbeeldfunctie uit'; +$lang['js']['tsort'] = 'Op titel'; +$lang['js']['dsort'] = 'Op datum'; +$lang['js']['msort'] = 'Op metatag'; +$lang['js']['nsort'] = 'Sorteer ook de namespaces'; +$lang['js']['hsort'] = 'Sorteer startpagina\'s bovenaan'; +$lang['js']['rsort'] = 'Keer de sorteervolgorde van pagina\'s om'; +$lang['js']['nons'] = 'Geef alleen pagina\'s weer'; +$lang['js']['nopg'] = 'Geef alleen namespaces weer'; +$lang['js']['max'] = 'Hoeveel niveau\'s er weergegeven worden met AJAX als een knooppunt is geopend. Daarnaast is het aantal subniveau\'s onder dat niveau dat later met AJAX wordt ingeladen, in plaats van meteen bij weergeven van de pagina.'; +$lang['js']['maxjs'] = 'Hoeveel niveau\'s worden er weergegeven in de browser als een knooppunt wordt geopend'; +$lang['js']['id'] = 'Zelf een cookie-id opgeven voor deze indexmenu'; +$lang['js']['insert'] = 'Indexmenu Invoegen'; +$lang['js']['metanum'] = 'Metadata: sorteernummer'; +$lang['js']['insertmetanum'] = 'Sorteernummer Invoegen'; +$lang['js']['page'] = 'Pagina'; +$lang['js']['revs'] = 'Revisies'; +$lang['js']['tocpreview'] = 'TOC voorbeeld'; +$lang['js']['editmode'] = 'Bewerkingsmodus'; +$lang['js']['insertdwlink'] = 'Invoegen als DWlink'; +$lang['js']['insertdwlinktooltip'] = 'Voeg de link naar deze pagina in in het bewerkingsveld op de positie van de cursor'; +$lang['js']['ns'] = 'Namespace'; +$lang['js']['search'] = 'Zoeken ...'; +$lang['js']['searchtooltip'] = 'Zoeken naar pagina\'s binnen deze namespace'; +$lang['js']['create'] = 'Aanmaken'; +$lang['js']['more'] = 'Meer'; +$lang['js']['headpage'] = 'Hoofdpagina'; +$lang['js']['headpagetooltip'] = 'Maak een nieuwe hoofdpagina onder deze pagina'; +$lang['js']['startpage'] = 'Startpagina'; +$lang['js']['startpagetooltip'] = 'Maak een nieuwe startpagina onder deze pagina'; +$lang['js']['custompage'] = 'Gewone pagina'; +$lang['js']['custompagetooltip'] = 'Maak een nieuwe pagina onder deze pagina'; +$lang['js']['acls'] = 'ACL\'s'; +$lang['js']['purgecache'] = 'Wis cache'; +$lang['js']['exporthtml'] = 'Exporteer als HTML'; +$lang['js']['exporttext'] = 'Exporteer als tekst'; +$lang['js']['headpagehere'] = 'Hoofdpagina hier'; +$lang['js']['headpageheretooltip'] = 'Maak een nieuwe hoofdpagina binnen deze namespace'; +$lang['js']['newpage'] = 'Nieuwe pagina'; +$lang['js']['newpagetooltip'] = 'Maak een nieuwe pagina (naam invoeren via popup) in deze namespace'; +$lang['js']['newpagehere'] = 'Nieuwe pagina hier'; +$lang['js']['insertkeywords'] = 'Voer hier uw zoektermen in voor zoeken binnen deze namespace'; +$lang['js']['insertpagename'] = 'Vul de naam in voor de nieuwe pagina'; +$lang['js']['edit'] = 'Bewerken'; +$lang['js']['loading'] = 'Laden...'; diff --git a/plugins/55/indexmenu/lang/nl/settings.php b/plugins/55/indexmenu/lang/nl/settings.php new file mode 100644 index 0000000..89d97f5 --- /dev/null +++ b/plugins/55/indexmenu/lang/nl/settings.php @@ -0,0 +1,21 @@ + + * @author Joachim David + */ +$lang['checkupdate'] = 'Controleer regelmatig op updates'; +$lang['only_admins'] = 'Sta indexmenu alleen toe voor beheerders.
    Merk op dat een pagina bewerkt door een niet-beheerder de indexmenu\'s de indexmenu\'s kwijtraakt.'; +$lang['aclcache'] = 'Optimaliseer de indexmenu cache voor ACL (werkt alleen voor namespaces opgevraagd uit de root).
    De van de methode heeft alleen gevolgen voor de weergave van de knooppunten van de indexmenu, niet voor de paginatoegangscontrole.
    • None: Standaard. Het is de snellere methode en het creëert geen extra bufferbestanden, maar de knooppunten met geen toegang kunnen worden weergegeven aan niet-geautoriseerde gebruikers of je maakt je niet druk om hoe de boom wordt weergegeven.
    • User: per-gebruiker login. Langzame methode en creëert veel bufferbestanden, maar het verbergt altijd de juiste pagina\'s. Aanbevolen voor wanneer je pagina\'s hebt met toegangsrechten per gebruiker.
    • Groups: Per-groep lidmaatschap. Goed compromis tussen de vorige methodes, maar in geval je een gebruiker geen leesrechten geeft, maar een groep waar die bij hoort wel, dan zal hij de knooppunten toch kunnen zien. Aanbevolen wanneer je hele site toegangsrechten gebruikt die afhangen van de groepslidmaatschappen.
    '; +$lang['headpage'] = 'Startpagina methode: de pagina waarvan de titel en de link moet worden gebruikt voor de namespace-knooppunt.
    Kan een van deze waardes zijn:
    • De globale startpagina.
    • Een pagina met de namespace naam en die zich daarbinnen bevindt.
    • Een pagina met de namespace naam en op het zelfde niveau.
    • Een zelf opgegeven paginanaam.
    • Een komma gescheiden lijst van paginanamen.
    '; +$lang['hide_headpage'] = 'Verberg startpagina\'s'; +$lang['page_index'] = 'De pagina die de hoofdindex van DokuWiki vervangt. Maak het en plaats er indexmenu syntax. Gebruik id#random als je al een indexmenu in de zijbalk hebt staan met de navbar optie. Mijn suggestie is {{indexmenu>..|js navbar nocookie id#random}}.'; +$lang['empty_msg'] = 'Bericht dat wordt weergegeven als de indexmenu leeg is. Gebruik de DokuWiki-syntax, geen html code. De {{ns}} variabele geeft de gevraagde namespace naam weer.'; +$lang['skip_index'] = 'Namespace-id\'s om over te slaan. Gebruik het Regular Expression formaat. Voorbeeld /(sidebars|private:myns)/'; +$lang['skip_file'] = 'Pagina-id\'s om over te slaan. Gebruik het Regular Expression formaat. Voorbeeld /(:start$|^public:newstart$)/'; +$lang['show_sort'] = 'Laat beheerders het indexmenu sorteernummer zien als melding bovenaan de pagina.'; +$lang['themes_url'] = 'Download de javascript-thema\'s van deze http url.'; +$lang['be_repo'] = 'Laat anderen thema\'s downloaden van jouw site.'; +$lang['defaultoptions'] = 'Lijst van indexmenu-opties gescheiden door spaties. De opties zullen automatisch worden toegekend aan elk indexmenu en kunnen ongedaan gemaakt worden met een tegengesteld commando in de plugin syntax.'; diff --git a/plugins/55/indexmenu/lang/pl/lang.php b/plugins/55/indexmenu/lang/pl/lang.php new file mode 100644 index 0000000..e54ccc0 --- /dev/null +++ b/plugins/55/indexmenu/lang/pl/lang.php @@ -0,0 +1,36 @@ + + */ +$lang['menu'] = 'Narzędzia indexmenu'; +$lang['fetch'] = 'Pokaż'; +$lang['install'] = 'Instaluj'; +$lang['delete'] = 'Usuń'; +$lang['check'] = 'Sprawdź'; +$lang['disabled'] = 'Zablokowany'; +$lang['conn_err'] = 'Błąd połączenia'; +$lang['checkupdates'] = 'Aktualizacja pluginu'; +$lang['no_repos'] = 'Nie skonfigurowano adresu URL repozytorium motywów.'; +$lang['dir_err'] = 'Nie można utworzyć folderu tymczasowego do odebrania motywu'; +$lang['down_err'] = 'Nie można odebrać motywu'; +$lang['zip_err'] = 'Błąd tworzenia lub rozpakowywania zip'; +$lang['install_ok'] = 'motyw zainstalowano pomyślnie. Nowy motyw jest dostępny na pasku narzędzi strony edycji lub z opcją js#theme_name.'; +$lang['delete_ok'] = 'Motyw został skasowany pomyślnie.'; +$lang['delete_no'] = 'Wystąpił błąd podczas usuwania motywu'; +$lang['upload'] = 'Udostępnij'; +$lang['js']['index'] = 'Indeks'; +$lang['js']['options'] = 'Opcje'; +$lang['js']['navigation'] = 'Nawigacja'; +$lang['js']['sort'] = 'Sortuj'; +$lang['js']['filter'] = 'Filtruj'; +$lang['js']['tsort'] = 'Po tytule'; +$lang['js']['dsort'] = 'Po dacie'; +$lang['js']['msort'] = 'Po meta tag'; +$lang['js']['nons'] = 'Pokaż tylko strony'; +$lang['js']['page'] = 'Strona'; +$lang['js']['search'] = 'Szukaj ...'; +$lang['js']['performance'] = 'Wydajność'; +$lang['js']['namespace'] = 'Przestrzeń'; \ No newline at end of file diff --git a/plugins/55/indexmenu/lang/pt-br/lang.php b/plugins/55/indexmenu/lang/pt-br/lang.php new file mode 100644 index 0000000..ce7eca3 --- /dev/null +++ b/plugins/55/indexmenu/lang/pt-br/lang.php @@ -0,0 +1,88 @@ + + */ +$lang['menu'] = 'Utilitários Indexmenu'; +$lang['fetch'] = 'Show'; +$lang['install'] = 'Instalar'; +$lang['delete'] = 'Delete'; +$lang['check'] = 'Checar'; +$lang['no_repos'] = 'Nenhuma URL de repositório de tema configurado.'; +$lang['disabled'] = 'Desabilitado'; +$lang['conn_err'] = 'Erro de conexão'; +$lang['dir_err'] = 'Não é possível criar pasta temporária para receber o tema'; +$lang['down_err'] = 'Não é possível receber o tema'; +$lang['zip_err'] = 'Erro de criação ou extração de zip'; +$lang['install_ok'] = 'tema instalado com sucesso. O novo tema está disponível na barra de ferramentas da pagina de edição ou com o js#theme_name option.'; +$lang['install_no'] = 'Erro de conexão. No entanto, você pode tentar enviar manualmente seu tema de Aqui.'; +$lang['delete_ok'] = 'Tema deletado com sucesso.'; +$lang['delete_no'] = 'Ocorreu um erro durante a exclusão do tema'; +$lang['upload'] = 'Compartilhar'; +$lang['checkupdates'] = 'Atualização de plugins'; +$lang['noupdates'] = 'Indexmenu não precisa de atualização. Você já possui a última versão.'; +$lang['infos'] = 'Você pode criar seu tema seguindo as instruções em Theme Tutorial page.
    Então você poderia deixar mais pessoas felizes :-) enviando para o repositório público do indexmenu, com o botão "share" sob esse tema.'; +$lang['showsort'] = 'Número de ordem do Indexmenu'; +$lang['donation_text'] = 'O plug-in indexmenu não é patrocinado por ninguém, mas eu desenvolvo e dou suporte de graça durante meu tempo livre. Se você ganhar algo graças a isso ou quiser apoiar o seu desenvolvimento, você pode considerar fazer uma doação.'; +$lang['js']['indexmenuwizard'] = 'Assistente do Indexmenu'; +$lang['js']['index'] = 'Índice'; +$lang['js']['options'] = 'Opções'; +$lang['js']['navigation'] = 'Navegação'; +$lang['js']['sort'] = 'Ordenar'; +$lang['js']['filter'] = 'Filtro'; +$lang['js']['performance'] = 'Performance'; +$lang['js']['namespace'] = 'Namespace'; +$lang['js']['nsdepth'] = 'Profundidade'; +$lang['js']['js'] = 'Árvore renderizada por Javascript, você pode definir seu próprio tema'; +$lang['js']['theme'] = 'Tema'; +$lang['js']['navbar'] = 'A árvore é aberta no namespace atual'; +$lang['js']['context'] = 'Exibe a árvore do contexto de namespace do wiki atual'; +$lang['js']['nocookie'] = 'Não se lembre de nós abertos / fechados durante a navegação do usuário'; +$lang['js']['noscroll'] = 'Evitar a rolagem da árvore quando ela não se encaixa na largura do contêiner'; +$lang['js']['notoc'] = 'Desativar o recurso de visualização do toc'; +$lang['js']['tsort'] = 'Por título'; +$lang['js']['dsort'] = 'Por data'; +$lang['js']['msort'] = 'Por meta tag'; +$lang['js']['nsort'] = 'Ordenar também namespaces'; +$lang['js']['hsort'] = 'Ordenar headpage up'; +$lang['js']['rsort'] = 'Inverta a classificação de páginas'; +$lang['js']['nons'] = 'Mostrar apenas páginas'; +$lang['js']['nopg'] = 'Mostrar apenas namespaces'; +$lang['js']['max'] = 'Quantos níveis renderizar com ajax quando um nó é aberto. Além disso, quantos subníveis abaixo desse nível são recuperados com AJAX, e não de uma só vez.'; +$lang['js']['maxjs'] = 'Quantos níveis para renderizar no navegador do cliente quando um nó é aberto'; +$lang['js']['id'] = 'ID de cookie definido automaticamente para este indexmenu'; +$lang['js']['insert'] = 'Inserir indexmenu'; +$lang['js']['metanum'] = 'Número Meta para classificação'; +$lang['js']['insertmetanum'] = 'Inserir metanumber'; +$lang['js']['page'] = 'Página'; +$lang['js']['revs'] = 'Revisões'; +$lang['js']['tocpreview'] = 'Pré-visualização Toc'; +$lang['js']['editmode'] = 'Modo de edição'; +$lang['js']['insertdwlink'] = 'Inserir como DWlink'; +$lang['js']['insertdwlinktooltip'] = 'Insira o link desta página na caixa de edição na posição do cursor'; +$lang['js']['ns'] = 'Namespace'; +$lang['js']['search'] = 'Procurar...'; +$lang['js']['searchtooltip'] = 'Procurar por páginas dentro deste namespace'; +$lang['js']['create'] = 'Criar'; +$lang['js']['more'] = 'Mais'; +$lang['js']['headpage'] = 'Cabeçalho'; +$lang['js']['headpagetooltip'] = 'Crie um novo cabeçalho nesta página'; +$lang['js']['startpage'] = 'Página de início'; +$lang['js']['startpagetooltip'] = 'Crie uma nova página inicial nesta página'; +$lang['js']['custompage'] = 'Página personalizada ...'; +$lang['js']['custompagetooltip'] = 'Crie uma nova página (insira o nome via popup) nesta página'; +$lang['js']['acls'] = 'Acls'; +$lang['js']['purgecache'] = 'Limpar cache'; +$lang['js']['exporthtml'] = 'Exportar como HTML'; +$lang['js']['exporttext'] = 'Exportar como texto'; +$lang['js']['headpagehere'] = 'Cabeçalho aqui'; +$lang['js']['headpageheretooltip'] = 'Crie um novo cabeçalho dentro deste namespace'; +$lang['js']['newpage'] = 'Nova página...'; +$lang['js']['newpagetooltip'] = 'Crie uma nova página (insira o nome via popup) dentro deste namespace'; +$lang['js']['newpagehere'] = 'Nova página aqui'; +$lang['js']['insertkeywords'] = 'Inserir palavras-chave para procurar dentro deste namespace'; +$lang['js']['insertpagename'] = 'Insira o nome da página para criar'; +$lang['js']['edit'] = 'Editar'; +$lang['js']['loading'] = 'Carregando...'; diff --git a/plugins/55/indexmenu/lang/pt-br/settings.php b/plugins/55/indexmenu/lang/pt-br/settings.php new file mode 100644 index 0000000..7f3d609 --- /dev/null +++ b/plugins/55/indexmenu/lang/pt-br/settings.php @@ -0,0 +1,20 @@ + + */ +$lang['checkupdate'] = 'Verifique periodicamente por atualizações.'; +$lang['only_admins'] = 'Permitir a sintaxe de indexmenu apenas para administradores.
    Note que uma página editada por um usuário não administrador perderá todas as árvores de indexmenu contidas.'; +$lang['aclcache'] = 'Otimize o cache do indexmenu para acl (funciona somente para namespaces solicitados por raiz).
    A escolha do método afeta apenas a visualização de nós na árvore de indexmenu, não as autorizações de página.
    • Nenhum: Padrão. É o método mais rápido e não cria mais arquivos de cache, mas os nós com permissão negada podem ser mostrados para usuários não autorizados ou vice-versa. Recomendado quando você não nega o acesso às páginas por acl ou não se importa como a árvore é exibida.
    • Usuário: Login por usuário. Método mais lento e cria muitos arquivos de cache, mas sempre oculta as páginas corretamente negadas. Recomendado quando você tem acls de página que dependem do login de usuários.
    • Grupos: associação por grupo. Bom compromisso entre os métodos anteriores, mas no caso de você negar a acl de leitura a um usuário que pertença a um grupo com uma autenticação acl de leitura, ele poderá exibir esses nós na árvore. Recomendado quando o acls do seu site inteiro depende da associação de grupos. '; +$lang['headpage'] = 'Método de cabeçalho: a página a partir da qual retrata o título e o link de um namespace.
      Pode ser qualquer um desses valores:
      • A página inicial global.
      • Uma página com o nome do namespace e que está dentro it.
      • Uma página com o nome do namespace e que está no mesmo nível.
      • Uma página de nome personalizada.
      • Uma lista separada por vírgulas de nomes de páginas. '; +$lang['hide_headpage'] = 'Esconder cabeçalhos.'; +$lang['page_index'] = 'A página que irá substituir o índice dokuwiki principal. Crie-o e insira a sintaxe indexmenu. Use id # random se você já tem uma barra lateral indexmenu com a opção navbar. Minha sugestão é {{indexmenu> .. | js navbar nocookie id # random}} .'; +$lang['empty_msg'] = 'Mensagem para mostrar quando a árvore está vazia. Use a sintaxe do Dokuwiki, não o código html. A variável {{ns}} é um atalho para o namespace solicitado.'; +$lang['skip_index'] = 'Id de namespaces para pular. Use o formato Expressão Regular. Exemplo: / (sidebars | private: myns) / '; +$lang['skip_file'] = 'Ide de páginas para pular. Use o formato Expressão Regular. Exemplo: / (sidebars | private: myns) / '; +$lang['show_sort'] = 'Mostrar aos administradores o número de classificação do indexmenu como parte superior da nota da página'; +$lang['themes_url'] = 'Baixe temas js desta url http.'; +$lang['be_repo'] = 'Permitir que outras pessoas baixem temas do seu site.'; +$lang['defaultoptions'] = 'Lista de opções indexmenu separadas por espaços. Estas opções serão aplicadas por padrão a cada indexmenu e podem ser desfeitas com um comando reverso na sintaxe do plugin'; diff --git a/plugins/55/indexmenu/lang/ru/lang.php b/plugins/55/indexmenu/lang/ru/lang.php new file mode 100644 index 0000000..f0f69a0 --- /dev/null +++ b/plugins/55/indexmenu/lang/ru/lang.php @@ -0,0 +1,95 @@ + + * @author JSBmanD + * @author Вячеслав + * @author Takumo <9206984@mail.ru> + * @author Andrey Shpak + * @author Chang Zhao + */ +$lang['menu'] = 'Утилиты Indexmenu'; +$lang['fetch'] = 'Показать'; +$lang['install'] = 'Установить'; +$lang['delete'] = 'Удалить'; +$lang['check'] = 'Проверить'; +$lang['no_repos'] = 'Неверный адрес репозитория тем.'; +$lang['disabled'] = 'Отключено'; +$lang['conn_err'] = 'Ошибка соединения'; +$lang['dir_err'] = 'Ошибка в создании временной папки для принятия темы'; +$lang['down_err'] = 'Ошибка принятия темы'; +$lang['zip_err'] = 'Ошибка архивации или извлечения'; +$lang['install_ok'] = 'Тема успешно установлена. Новые темы доступны в панели инструментов страницы редактирования или с помощью js#theme_name option.'; +$lang['install_no'] = 'Ошибка соединения. Тем не менее, вы можете загрузить тему отсюда.'; +$lang['delete_ok'] = 'Тема успешно удалена.'; +$lang['delete_no'] = 'Ошибка при удалении темы'; +$lang['upload'] = 'Поделиться'; +$lang['checkupdates'] = 'Обновления плагина'; +$lang['noupdates'] = 'Indexmenu не нуждается в обновлении. У вас актуальная версия.'; +$lang['infos'] = 'Можно создать свою тему, следуя инструкциям по адресу Theme Tutorial.
        Также вы сделаете людей счастливее :-), если разместите её в публичном репозитории и создадите кнопку «Поделиться» под темой.'; +$lang['showsort'] = 'Номер сортировки: '; +$lang['donation_text'] = 'Разработка плагина не спонсируется сторонними организациями, плагин разрабатывается в моё свободное время. Если вам нравится плагин и/или вы хотите поддержать его разработку, пожалуйста, сделайте пожертвование.'; +$lang['js']['indexmenuwizard'] = 'Мастер настройки Indexmenu'; +$lang['js']['index'] = 'Индекс'; +$lang['js']['options'] = 'Опции'; +$lang['js']['navigation'] = 'Навигация'; +$lang['js']['sort'] = 'Сортировать'; +$lang['js']['filter'] = 'Фильтр'; +$lang['js']['performance'] = 'Производительность'; +$lang['js']['namespace'] = 'Пространство имён'; +$lang['js']['nsdepth'] = 'Вложенность'; +$lang['js']['js'] = 'Отображение дерева с использованием Javasript, доступен выбор тем'; +$lang['js']['theme'] = 'Тема'; +$lang['js']['navbar'] = 'Разворачивать дерево на текущем пространстве имён'; +$lang['js']['context'] = 'Показывать дерево текущего пространства имён'; +$lang['js']['nocookie'] = 'Не запоминать открытые или закрытые узлы при навигации пользователя'; +$lang['js']['noscroll'] = 'Не допускать прокрутку дерева, если оно не помещается в отведённое место'; +$lang['js']['notoc'] = 'Заблокировать функцию предпросмотра содержания'; +$lang['js']['tsort'] = 'По имени'; +$lang['js']['dsort'] = 'По дате'; +$lang['js']['msort'] = 'По мета-тегам'; +$lang['js']['nsort'] = 'Также сортировать пространства имён'; +$lang['js']['hsort'] = 'Сортировать заглавные страницы вверху'; +$lang['js']['rsort'] = 'Обратная сортировка страниц'; +$lang['js']['nons'] = 'Показывать только страницы'; +$lang['js']['nopg'] = 'Показывать только пространства имён'; +$lang['js']['max'] = 'Сколько уровней обрабатывать с использованием AJAX, когда узел открыт. Дополнительно указывается, сколько уровней предзагружать вместо 1. '; +$lang['js']['maxjs'] = 'Сколько уровней обрабатывать в браузере клиента, когда узел открыт.'; +$lang['js']['id'] = 'Установить cookie id для этого меню'; +$lang['js']['insert'] = 'Вставить Indexmenu'; +$lang['js']['metanum'] = 'Мета-номер для сортировки'; +$lang['js']['insertmetanum'] = 'Вставить мета-номер'; +$lang['js']['page'] = 'Страница'; +$lang['js']['revs'] = 'История страницы'; +$lang['js']['tocpreview'] = 'Предпросмотр'; +$lang['js']['editmode'] = 'Режим редактирования'; +$lang['js']['insertdwlink'] = 'Вставить как ссылку'; +$lang['js']['insertdwlinktooltip'] = 'Вставляет ссылку на страницу на месте курсора в поле редактирования.'; +$lang['js']['ns'] = 'Пространство имён'; +$lang['js']['search'] = 'Поиск...'; +$lang['js']['searchtooltip'] = 'Найти страницы в этом пространстве имён'; +$lang['js']['create'] = 'Создать'; +$lang['js']['more'] = 'Ещё'; +$lang['js']['headpage'] = 'Заглавная страница'; +$lang['js']['headpagetooltip'] = 'Создаёт новую заглавную страницу'; +$lang['js']['startpage'] = 'Стартовая страница'; +$lang['js']['startpagetooltip'] = 'Создаёт новую стартовую страницу'; +$lang['js']['custompage'] = 'Новая страница >'; +$lang['js']['custompagetooltip'] = 'Создание страницы с произвольным именем'; +$lang['js']['acls'] = 'Права доступа'; +$lang['js']['purgecache'] = 'Очистить кэш'; +$lang['js']['exporthtml'] = 'Сохранить как HTML'; +$lang['js']['exporttext'] = 'Сохранить как текст'; +$lang['js']['headpagehere'] = 'Заглавная страница'; +$lang['js']['headpageheretooltip'] = 'Создать новую заглавную страницу в этом пространстве имён'; +$lang['js']['newpage'] = 'Новая страница'; +$lang['js']['newpagetooltip'] = 'Создать новую страницу в этом пространстве имён'; +$lang['js']['newpagehere'] = 'Создать новую страницу'; +$lang['js']['insertkeywords'] = 'Вставьте фразу для поиска в этом контексте имён'; +$lang['js']['insertpagename'] = 'Вставьте имя новой страницы'; +$lang['js']['edit'] = 'Редактировать'; +$lang['js']['loading'] = 'Загрузка...'; diff --git a/plugins/55/indexmenu/lang/ru/settings.php b/plugins/55/indexmenu/lang/ru/settings.php new file mode 100644 index 0000000..a1487e5 --- /dev/null +++ b/plugins/55/indexmenu/lang/ru/settings.php @@ -0,0 +1,23 @@ + + * @author Igor Banatov + * @author Aleksandr Selivanov + * @author Takumo <9206984@mail.ru> + */ +$lang['checkupdate'] = 'Проверять обновления.'; +$lang['only_admins'] = 'Разрешить использование синтаксиса Indexmenu только администраторам.
        Заметка: при редактировании страницы НЕ администратором, страница потеряет Indexmenu.'; +$lang['aclcache'] = 'Оптимизация кэша indexmenu по правам доступа(работает только для запрошенного корневого пространства имен).
        Выбор метода влияет только на визуализацию узлов в дереве indexmenu, а не на авторизацию страниц.
        • None: Стандарт. Это более быстрый метод, и он не создает дополнительных файлов кэша, но узлы с запрещенным разрешением могут быть показаны неавторизованным пользователям или наоборот. Рекомендуется, если вы не отказываете в доступе к страницам acl или вам все равно, как отображается дерево.
        • User: Вход для каждого пользователя. Более медленный метод, и он создает много файлов кэша, но он всегда скрывает правильно запрещенные страницы. Рекомендуется, если у вас есть списки ACL страниц, которые зависят от входа пользователей.
        • Groups: Членство в каждой группе. Хороший компромисс между предыдущими методами, но в случае, если вы отказываете в чтении прав доступа пользователю, который принадлежит к группе с авторизацией read acl, то он все равно может отобразить эти узлы в дереве. Рекомендуется, когда права доступа всего вашего сайта зависят от членства в группах.
        '; +$lang['headpage'] = 'Метод Headpage: указывает страницу, которая содержит название и ссылку на именованную область.
        Модет принимать любое из значений:
        • Начальная страница.
        • Страница с именем именованной области, которая включает ее в свой состав.
        • Страница с именем именованной области, расположенная на таком же уровне.
        • Пользовательский список имен страниц.
        • Список имен страниц, разделенный запятыми.
        '; +$lang['hide_headpage'] = 'Скрывать заглавные страницы.'; +$lang['page_index'] = 'Страница, которая заменит основное содержание dokuwiki. Создайте её и используйте синтаксис indexmenu. Используйте id#random, если у вас уже есть сайдбар с включённой опцией navbar. Рекомендуется {{indexmenu>..|js navbar nocookie id#random}}.'; +$lang['empty_msg'] = 'Сообщение в случае, если дерево пусто. Используйте синтаксис «Докувики», не используйте html. Переменная {{ns}} является ярлыком для запрошенного пространства имён.'; +$lang['skip_index'] = 'Список пространств имён для пропуска. Используйте регулярные выражения. Пример: /(sidebars|private:myns)/'; +$lang['skip_file'] = 'Список страниц для пропуска. Используйте регулярные выражения. Пример: /(:start$|^public:newstart$)/'; +$lang['show_sort'] = 'Показывать администраторам порядок сортировки наверху страницы'; +$lang['themes_url'] = 'Скачивать темы с этого адреса.'; +$lang['be_repo'] = 'Разрешить остальным скачивать темы с вашего сайта.'; +$lang['defaultoptions'] = 'Список настроек плагина, разделённый запятыми. Эти настойки будут применяться по умолчанию к каждому Indexmenu и могут быть отменены с помощью команды reverse в синтаксисе плагина.'; diff --git a/plugins/55/indexmenu/lang/sv/lang.php b/plugins/55/indexmenu/lang/sv/lang.php new file mode 100644 index 0000000..078f9c8 --- /dev/null +++ b/plugins/55/indexmenu/lang/sv/lang.php @@ -0,0 +1,83 @@ + + */ +$lang['menu'] = 'Verktyg för Indexmeny'; +$lang['fetch'] = 'Visa'; +$lang['install'] = 'Installera'; +$lang['delete'] = 'Ta bort'; +$lang['check'] = 'Kontrollera'; +$lang['no_repos'] = 'Ingen sökväg konfigurerad för templatsamling.'; +$lang['disabled'] = 'Avaktiverad'; +$lang['conn_err'] = 'Uppkopplingsfel'; +$lang['dir_err'] = 'Kunde inte skapa temporär katalog för att hämta templat'; +$lang['down_err'] = 'Kunde inte hämta templat'; +$lang['zip_err'] = 'Fel vis skapande eller extraktion av Zip'; +$lang['install_ok'] = 'templat installerades framgångsrikt. Det nya templatet är tillgängligt i verktygen på redigera sida eller med js#theme_name option.'; +$lang['install_no'] = 'Uppkopplingsfel. Du kan emellertid försöka ladda upp dit templat manuellt.'; +$lang['delete_ok'] = 'Templatet togs bort framgångsrikt.'; +$lang['delete_no'] = 'Ett fel inträffade när templatet togs bort'; +$lang['upload'] = 'Dela'; +$lang['checkupdates'] = 'Pluginuppdateringar'; +$lang['noupdates'] = 'Indexmeny behöver ej uppdateras. Du har redan den senaste utgåvan:'; +$lang['showsort'] = 'Indexmeny sorteringsnummer:'; +$lang['donation_text'] = 'Indexmeny-pluginet är inte sponsrad av någon utan jag utvecklar och stödjer det på min fritid. Överväg att ge ett bidrag om du har nytta av pluginet eller om du vill stödja dess utveckling.'; +$lang['js']['indexmenuwizard'] = 'Indexmeny-guiden'; +$lang['js']['index'] = 'Index'; +$lang['js']['options'] = 'Alternativ'; +$lang['js']['navigation'] = 'Navigering'; +$lang['js']['sort'] = 'Sortera'; +$lang['js']['filter'] = 'Filter'; +$lang['js']['performance'] = 'Prestanda'; +$lang['js']['namespace'] = 'Namnrymd'; +$lang['js']['nsdepth'] = 'Djup'; +$lang['js']['js'] = 'Träd renderat av Javascript, du kan definiera ditt eget templat'; +$lang['js']['theme'] = 'Templat'; +$lang['js']['nocookie'] = 'Kom inte ihåg öppna/stängda noder vid användarnavigation'; +$lang['js']['noscroll'] = 'Förhindra rullning i trädet när detta inte får plats inom dess container-bredd'; +$lang['js']['notoc'] = 'Avaktivera förhandlsgranskningsfunktions av innehållsförteckning'; +$lang['js']['tsort'] = 'Efter rubrik'; +$lang['js']['dsort'] = 'Efter datum'; +$lang['js']['msort'] = 'Efter metatag'; +$lang['js']['nsort'] = 'Sortera också namnrymder'; +$lang['js']['rsort'] = 'Reversera sorteringsordning'; +$lang['js']['nons'] = 'Visa bara sidor'; +$lang['js']['nopg'] = 'Visa bara namnrymder'; +$lang['js']['maxjs'] = 'Antalet nivåer att rendera i klientens webbläsare när en nod är öppen'; +$lang['js']['id'] = 'Självdefinierad kak-id för denna indexmeny'; +$lang['js']['insert'] = 'Infoga indexmeny'; +$lang['js']['metanum'] = 'Metanummer för sortering'; +$lang['js']['insertmetanum'] = 'Infoga metanummer'; +$lang['js']['page'] = 'Sida'; +$lang['js']['revs'] = 'Revisioner'; +$lang['js']['tocpreview'] = 'Förhandsvisning av innehållsförteckning'; +$lang['js']['editmode'] = 'Redigeringsläge'; +$lang['js']['insertdwlink'] = 'Infoga som DWlink'; +$lang['js']['insertdwlinktooltip'] = 'Infoga sökvägen för denna sida i textföltet vid muspekarens position'; +$lang['js']['ns'] = 'Namnrymd'; +$lang['js']['search'] = 'Sök...'; +$lang['js']['searchtooltip'] = 'Sök efter sidor inom denna namnrymd'; +$lang['js']['create'] = 'Skapa'; +$lang['js']['more'] = 'Mer'; +$lang['js']['headpage'] = 'Huvudsida'; +$lang['js']['headpagetooltip'] = 'Skapa en ny huvudsida under denna sida'; +$lang['js']['startpage'] = 'Startsida'; +$lang['js']['startpagetooltip'] = 'Skapa en ny startsida under denna sida'; +$lang['js']['custompage'] = 'Valfri sida...'; +$lang['js']['custompagetooltip'] = 'Skapa en ny sida (fyll i titel via popup) under denna sida'; +$lang['js']['acls'] = 'Acls'; +$lang['js']['purgecache'] = 'Rensa cache'; +$lang['js']['exporthtml'] = 'Exportera som HTML'; +$lang['js']['exporttext'] = 'Exportera som text'; +$lang['js']['headpagehere'] = 'Huvudsida återfinns här'; +$lang['js']['headpageheretooltip'] = 'Skapa en ny huvudsida i denna namnrymd'; +$lang['js']['newpage'] = 'Ny sida...'; +$lang['js']['newpagetooltip'] = 'Skapa en ny sida (fyll i titel via popup) i denna namnrymd'; +$lang['js']['newpagehere'] = 'Ny sida här'; +$lang['js']['insertkeywords'] = 'Fyll i nyckelord att söka efter in denna namnrymd'; +$lang['js']['insertpagename'] = 'Fyll i sidnamn att skapa'; +$lang['js']['edit'] = 'Redigera'; +$lang['js']['loading'] = 'Laddar...'; diff --git a/plugins/55/indexmenu/lang/sv/settings.php b/plugins/55/indexmenu/lang/sv/settings.php new file mode 100644 index 0000000..b2ef9ef --- /dev/null +++ b/plugins/55/indexmenu/lang/sv/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['checkupdate'] = 'Sök återkommande efter uppdateringar.'; +$lang['only_admins'] = 'Tillåt indexmeny-syntax endast för administratörer.
        Notera att en sida som redigeras av en icke-administratör kommer att förlora alla inkluderade indexmeny-träd.'; +$lang['hide_headpage'] = 'Göm huvudsidor.'; +$lang['page_index'] = 'Sidan kommer att ersätta ordinarie DokuWiki-index. Skapa den och lägg till indexmeny-syntax. Använd code>id#random
        om du redan har en sidofält för indexmeny med navbar-alternativ. Jag föreslår att du använder {{indexmenu>..|js navbar nocookie id#random}}.'; +$lang['empty_msg'] = 'Meddelande att visa när trädet är tomt. Använd DokuWiki-syntax, inte html-kod. {{ns}}-variabeln är en förkortning för den begärda namnrymden.'; +$lang['skip_index'] = 'Namnsrymd-ID att hoppa över. Använd formatet för reguljära uttryck. Exempel /(:start$|^public:newstart$)/'; +$lang['skip_file'] = 'Sid-ID att hoppa över. Använd formatet för reguljära uttryck. Exempel /(:start$|^public:newstart$)/'; +$lang['show_sort'] = 'Visa för administratörer indexmenyns sorteringsnummer som en anteckning överst på sidan'; +$lang['themes_url'] = 'Ladda ner js-templat från denna http-url'; +$lang['be_repo'] = 'Låt andra ladda ner templat från din webbplats.'; +$lang['defaultoptions'] = 'Lista på indexmeny-alternativ separerade med blanksteg. Dessa alternativ kommer att appliceras som standard till alla indexmenyer och kan inaktiveras med reverseringskommande i pluginets syntax.'; diff --git a/plugins/55/indexmenu/lang/tr/lang.php b/plugins/55/indexmenu/lang/tr/lang.php new file mode 100644 index 0000000..dba4ca1 --- /dev/null +++ b/plugins/55/indexmenu/lang/tr/lang.php @@ -0,0 +1,25 @@ + + */ +$lang['menu'] = 'Indexmenu Hizmetleri'; +$lang['fetch'] = 'Göster'; +$lang['install'] = 'Kur'; +$lang['delete'] = 'Sil'; +$lang['check'] = 'Kontrol et'; +$lang['no_repos'] = 'Hiç bir tema deposunun adresi değiştirilmedi.'; +$lang['disabled'] = 'Devre dışı'; +$lang['conn_err'] = 'Bağlantı hatası'; +$lang['dir_err'] = 'Temayı almak için geçici klasör oluşturulamadı'; +$lang['down_err'] = 'Tema alınamadı'; +$lang['zip_err'] = 'Zip oluşturulurken veya açılırken hata ile karşılaşıldı'; +$lang['install_ok'] = 'tema başarıyla kuruldu. Yeni tema sayfa düzenleme ekranındaki araç çubuğunda veya js#theme_name option ile kullanılabilir.'; +$lang['install_no'] = 'Bağlantı hatası. Yine de temanızı bu adresi kullanarak, elle yüklemeyi deneyebilirsiniz.'; +$lang['delete_ok'] = 'Tema başarıyla silindi.'; +$lang['delete_no'] = 'Tema silinirken bir hatayla karşılaşıldı'; +$lang['upload'] = 'Paylaş'; +$lang['checkupdates'] = 'Eklenti güncellemeleri'; +$lang['noupdates'] = 'Indexmenu eklentisinin güncellenmesine gerek yok. Zaten son sürümü kullanıyorsunuz.'; diff --git a/plugins/55/indexmenu/lang/vi/lang.php b/plugins/55/indexmenu/lang/vi/lang.php new file mode 100644 index 0000000..d4810f8 --- /dev/null +++ b/plugins/55/indexmenu/lang/vi/lang.php @@ -0,0 +1,37 @@ + + */ +$lang['menu'] = 'Menu mục lục tiện ích'; +$lang['fetch'] = 'Hiện'; +$lang['install'] = 'Cài đặt'; +$lang['delete'] = 'Xoá'; +$lang['check'] = 'Kiểm tra'; +$lang['no_repos'] = 'Không có url kho lưu trữ theme chủ đề nào được định cấu hình.'; +$lang['disabled'] = 'Đã tắt'; +$lang['conn_err'] = 'Lỗi kết nối'; +$lang['dir_err'] = 'Không thể tạo thư mục tạm để nhận theme chủ đề'; +$lang['down_err'] = 'Không thể nhận theme chủ đề'; +$lang['zip_err'] = 'Lỗi tạo hoặc giải nén zip'; +$lang['install_ok'] = 'Theme chủ đề được cài đặt thành công. Theme chủ đề mới sẵn sàng trong thanh công cụ của Chỉnh sửa trang hoặc với dòng lệnh js#theme_name option.'; +$lang['install_no'] = 'Lỗi kết nối. Mặc dù vậy, bạn có thể thử tải lên bằng cách thủ công theme chủ đề từ here.'; +$lang['delete_ok'] = 'Theme chủ đề đã được xoá thành công.'; +$lang['delete_no'] = 'Đã có lỗi xảy ra trong khi xoá theme chủ đề'; +$lang['upload'] = 'Chia sẻ'; +$lang['checkupdates'] = 'Nâng cấp plugin'; +$lang['noupdates'] = 'Menu mục lục không cần phải nâng cấp. Bạn đã có phiên bản mới nhất:'; +$lang['infos'] = 'Bạn có thể tạo theme chủ đề của bạn bằng cách thực hiện theo hướng dẫn tại trang Hướng dẫn Theme chủ đề.
        Sau đó bạn có thể khiến nhiều người vui vẻ hơn :-) bằng cách gửi chúng tới thư viện menu mục lục công cộng, với nút "chia sẻ" ngay bên dưới theme chủ đề.'; +$lang['showsort'] = 'Sắp xếp số thứ tự Menu mục lục:'; +$lang['donation_text'] = 'Plugin menu mục lục không được tài trợ bởi bất kỳ ai nhưng tôi phát triển và hỗ trợ nó không công trong thời gian rảnh của tôi. Nếu bạn đạt được điều gì nhờ vào nó hoặc bạn muốn hỗ trợ sự phát triển của nó, bạn có thể xem xét quyên góp.'; +$lang['js']['indexmenuwizard'] = 'Trình hướng dẫn menu mục lục'; +$lang['js']['index'] = 'Mục lục'; +$lang['js']['options'] = 'Tuỳ chọn'; +$lang['js']['navigation'] = 'Định hướng'; +$lang['js']['sort'] = 'Sắp xếp'; +$lang['js']['filter'] = 'Lọc'; +$lang['js']['performance'] = 'Hiệu quả'; +$lang['js']['namespace'] = 'Khoảng tên'; +$lang['js']['nsdepth'] = 'Độ sâu'; diff --git a/plugins/55/indexmenu/lang/zh-tw/lang.php b/plugins/55/indexmenu/lang/zh-tw/lang.php new file mode 100644 index 0000000..6324210 --- /dev/null +++ b/plugins/55/indexmenu/lang/zh-tw/lang.php @@ -0,0 +1,40 @@ + + */ +$lang['fetch'] = '顯示'; +$lang['install'] = '安裝'; +$lang['delete'] = '刪除'; +$lang['check'] = '檢查'; +$lang['disabled'] = '關閉'; +$lang['conn_err'] = '連接錯誤'; +$lang['dir_err'] = '無法建立暫時資料夾來接受主題佈景'; +$lang['down_err'] = '無法接受主題佈景'; +$lang['zip_err'] = '壓縮檔在建立或解壓縮時發生錯誤'; +$lang['delete_ok'] = '主題佈景已經順利刪除'; +$lang['delete_no'] = '在刪除主題佈景時發生錯誤'; +$lang['upload'] = '分享'; +$lang['checkupdates'] = '插件更新'; +$lang['noupdates'] = '索引選單不需要更新。你已經有最新版本:'; +$lang['js']['indexmenuwizard'] = '索引選單精靈'; +$lang['js']['index'] = '索引'; +$lang['js']['options'] = '選項'; +$lang['js']['navigation'] = '導覽'; +$lang['js']['sort'] = '排序'; +$lang['js']['filter'] = '過濾器'; +$lang['js']['performance'] = '效率'; +$lang['js']['namespace'] = '名字空間'; +$lang['js']['nsdepth'] = '深度'; +$lang['js']['theme'] = '主題佈景'; +$lang['js']['notoc'] = '關閉內容目錄的預覽功能'; +$lang['js']['tsort'] = '依照標題'; +$lang['js']['dsort'] = '依照日期'; +$lang['js']['msort'] = '依照後設標籤'; +$lang['js']['nsort'] = '名字空間也排序'; +$lang['js']['rsort'] = '將頁面排序反轉過來'; +$lang['js']['nons'] = '只顯示頁面'; +$lang['js']['nopg'] = '只顯示名字空間'; +$lang['js']['insert'] = '插入索引選單'; diff --git a/plugins/55/indexmenu/lang/zh/lang.php b/plugins/55/indexmenu/lang/zh/lang.php new file mode 100644 index 0000000..6f4d827 --- /dev/null +++ b/plugins/55/indexmenu/lang/zh/lang.php @@ -0,0 +1,94 @@ + + * @author FENG.JIE + * @author lempel + * @author oott123 + * @author super_ZED + * @author kuma + */ +$lang['menu'] = '索引菜单实用功能'; +$lang['fetch'] = '显示'; +$lang['install'] = '安装'; +$lang['delete'] = '删除'; +$lang['check'] = '检查'; +$lang['no_repos'] = '没有配置主题库 URL。'; +$lang['disabled'] = '禁用'; +$lang['conn_err'] = '连接错误'; +$lang['dir_err'] = '无法创建用于下载主题的临时文件夹'; +$lang['down_err'] = '无法下载主题'; +$lang['zip_err'] = 'zip 文件创建或解压错误'; +$lang['install_ok'] = '主题安装成功。新的主题可以在工具栏或编辑页面中找到,或者使用js#theme_name option代码。'; +$lang['install_no'] = '链接错误,但您可以在这里手动上传你的主题。'; +$lang['delete_ok'] = '主题成功删除。'; +$lang['delete_no'] = '删除主题时出错'; +$lang['upload'] = '分享'; +$lang['checkupdates'] = '插件更新'; +$lang['noupdates'] = 'Indexmenu 现在是最新版本,无需更新。'; +$lang['infos'] = '你可以自己创建自己的主题,参见主题教程页面。
        +如果你将你的主题分享给其他人,会让更多人高兴的~请点击主题下面的“分享”将你的主题分享到公共主题库。'; +$lang['showsort'] = '索引菜单排序编号:'; +$lang['donation_text'] = 'Indexmenu 插件并未被任何人赞助,但是我在空闲时间一直在免费的开发和提供支持。如果你想感谢或者支持它的开发,你可以捐助我。'; +$lang['js']['indexmenuwizard'] = 'Indexmenu 向导'; +$lang['js']['index'] = '索引'; +$lang['js']['options'] = '选项'; +$lang['js']['navigation'] = '导航'; +$lang['js']['sort'] = '分类'; +$lang['js']['filter'] = '过滤'; +$lang['js']['performance'] = '性能表现'; +$lang['js']['namespace'] = '命名空间'; +$lang['js']['nsdepth'] = '深度'; +$lang['js']['js'] = '导航树由JS渲染,你可以定义你自己的主题'; +$lang['js']['theme'] = '主题'; +$lang['js']['navbar'] = '这导航树形图打开在当前的名称空间'; +$lang['js']['context'] = '显示当前wiki名称空间环境的树形图'; +$lang['js']['nocookie'] = '不记得 打开/关闭 节点在用户导航'; +$lang['js']['noscroll'] = '防止滚动树在不适合它的容器宽度时'; +$lang['js']['notoc'] = '禁用toc预览功能'; +$lang['js']['tsort'] = '按标题'; +$lang['js']['dsort'] = '按日期'; +$lang['js']['msort'] = '按meta标签'; +$lang['js']['nsort'] = '排序名称空间'; +$lang['js']['hsort'] = '首页排序'; +$lang['js']['rsort'] = '反向排序页面'; +$lang['js']['nons'] = '只显示页面'; +$lang['js']['nopg'] = '只显示名称空间'; +$lang['js']['max'] = '打开节点时要用ajax渲染多少层级。此外还有使用AJAX而不是一次性获取低于该级别的子层级的数量。'; +$lang['js']['maxjs'] = '打开节点时要在客户端浏览器中呈现多少层'; +$lang['js']['id'] = '此索引菜单的自定义cookie ID'; +$lang['js']['insert'] = '插入索引菜单'; +$lang['js']['metanum'] = 'Meta数进行排序'; +$lang['js']['insertmetanum'] = '插入元数mate'; +$lang['js']['page'] = '页面'; +$lang['js']['revs'] = '修订版'; +$lang['js']['tocpreview'] = 'TOC预览'; +$lang['js']['editmode'] = '编辑模式'; +$lang['js']['insertdwlink'] = '插入为 DWlink'; +$lang['js']['insertdwlinktooltip'] = '将此页面的链接插入到光标位置的编辑框中'; +$lang['js']['ns'] = '命名空间'; +$lang['js']['search'] = '搜索...'; +$lang['js']['searchtooltip'] = '在此命名空间中搜索页面'; +$lang['js']['create'] = '创建'; +$lang['js']['more'] = '更多'; +$lang['js']['headpage'] = '首页'; +$lang['js']['headpagetooltip'] = '在此页面下创建一个新的首页'; +$lang['js']['startpage'] = '起始页'; +$lang['js']['startpagetooltip'] = '在此页面下创建一个新的开始页'; +$lang['js']['custompage'] = '自定义页面…'; +$lang['js']['custompagetooltip'] = '在此页面下创建一个新页面(通过弹出窗口输入名称)'; +$lang['js']['acls'] = '访问控制列表ACL'; +$lang['js']['purgecache'] = '清除缓存'; +$lang['js']['exporthtml'] = '导出为HTML'; +$lang['js']['exporttext'] = '导出为文本'; +$lang['js']['headpagehere'] = '头版请输入这里'; +$lang['js']['headpageheretooltip'] = '在该命名空间内创建一个新的首页'; +$lang['js']['newpage'] = '新页面…'; +$lang['js']['newpagetooltip'] = '在此名称空间内创建一个新页面(通过弹出窗口输入名称)'; +$lang['js']['newpagehere'] = '新页面在这里'; +$lang['js']['insertkeywords'] = '插入关键字以在此名称空间中搜索'; +$lang['js']['insertpagename'] = '插入页面名称以创建新的'; +$lang['js']['edit'] = '编辑'; +$lang['js']['loading'] = '加载'; diff --git a/plugins/55/indexmenu/lang/zh/settings.php b/plugins/55/indexmenu/lang/zh/settings.php new file mode 100644 index 0000000..4731298 --- /dev/null +++ b/plugins/55/indexmenu/lang/zh/settings.php @@ -0,0 +1,22 @@ + + * @author FENG.JIE + * @author lempel + * @author super_ZED + */ +$lang['checkupdate'] = '定期检查更新'; +$lang['only_admins'] = '仅允许管理员使用indexmenu语法。 +请注意,由非管理员用户编辑的页面将丢失所有包含的indexmenu导航树。'; +$lang['hide_headpage'] = '隐藏标题'; +$lang['page_index'] = '此页面将代替 dokuwiki 的主页索引。创建它并插入 indexmenu 语法。如果已经存在带有导航的侧边栏,使用id#random。我的建议是{{indexmenu>..|js navbar nocookie id#random}}。'; +$lang['empty_msg'] = '当树为空时显示的消息。请使用 Dokuwiki 语法,而不是 html 代码。{{ns}} 是导向指定名称空间的快捷方式。'; +$lang['skip_index'] = '要跳过的命名空间ID。使用正则表达式格式。例如: /(sidebars | private:myns)/ '; +$lang['skip_file'] = '要跳过的页面ID。使用正则表达式格式。示例 /(:: start $ | ^ public:newstart $)/ '; +$lang['show_sort'] = '显示给管理员索引菜单的排序号作为页面顶部的注释'; +$lang['themes_url'] = '通过url地址下载js主题'; +$lang['be_repo'] = '让其他人通过你的网站下载主题'; +$lang['defaultoptions'] = '索引菜单选项列表,以空格分隔。这些选项默认情况下将应用于每个索引菜单,并且可以通过插件语法中的反向命令撤消'; diff --git a/plugins/55/indexmenu/plugin.info.txt b/plugins/55/indexmenu/plugin.info.txt new file mode 100644 index 0000000..5734962 --- /dev/null +++ b/plugins/55/indexmenu/plugin.info.txt @@ -0,0 +1,7 @@ +base indexmenu +author Samuele Tognini, Gerrit Uitslag +email samuele@samuele.netsons.org +date 2024-01-05 +name Indexmenu Plugin +desc Show a customizable and sortable index for a namespace +url https://www.dokuwiki.org/plugin:indexmenu diff --git a/plugins/55/indexmenu/script.js b/plugins/55/indexmenu/script.js new file mode 100644 index 0000000..93d48d3 --- /dev/null +++ b/plugins/55/indexmenu/script.js @@ -0,0 +1,504 @@ + +// Context menu +var indexmenu_contextmenu = {'all': []}; + +/* DOKUWIKI:include scripts/nojsindex.js */ +/* DOKUWIKI:include scripts/toolbarindexwizard.js */ +/* DOKUWIKI:include scripts/contextmenu.js */ +/* DOKUWIKI:include scripts/indexmenu.js */ +/* DOKUWIKI:include scripts/contextmenu.local.js */ + + +/* DOKUWIKI:include scripts/fancytree/jquery.fancytree-all.min.js */ + +// - page id without URL rewriting http://example.doku/doku.php?id=test:start +// - page id without URL rewriting http://example.doku/doku.php?id=test:plugins#interwikipaste +// - page id with .htaccess URL rewriting http://example.doku/test:plugins +// - page id with .htaccess URL rewriting and 'useslash' config http://example.doku/test/plugins +// - page id with internal URL rewriting http://example.doku/doku.php/test:plugins +// - http://example.doku/lib/exe/detail.php?id=test%3Aplugins&media=ns:image.jpg +// - http://example.doku/lib/exe/fetch.php?w=400&tok=097122&media=ns:image.jpg +// - http://example.doku/lib/exe/fetch.php?media=test:file.pdf +// - http://example.doku/_detail/ns:image.jpg?id=test%3Aplugins +// - http://example.doku/_media/test:file.pdf +// - http://example.doku/_detail/ns/image.jpg?id=test%3Aplugins +// - http://example.doku/_media/test/file.pdf + + +jQuery(function(){ // on page load + // Create the tree inside the
        element. + const predefinedPresets = { + 'bootstrap': { //works with template bootstrap3 or by manually adding resources to icon plugin assets + 'preset': 'bootstrap3', + 'map': {} + }, + 'bootstrap-n': { //works with template bootstrap3 or ..etc + 'preset': 'bootstrap3', + 'map': {} + }, + 'awesome': { //works with icons-plugin, settings: enable plugin»icons»loadFontAwesome + 'preset': 'awesome4', //plugin icons does include only awesome4, not awesome5. + 'map': {} + }, + 'material': { // add Material Icons font stylesheet to header with TPL_METAHEADER_OUTPUT in action component + 'preset': 'material', + 'map': {} + }, + 'mdi': { //works with icons-plugin, settings: enable plugin»icons»loadMaterialDesignIcons + 'preset': '', + 'map': { + _addClass: "mdi", + checkbox: "mdi-checkbox-blank-outline", + checkboxSelected: "mdi-check-box-outline", + checkboxUnknown: "mdi-checkbox-intermediate fancytree-helper-indeterminate-cb", + dragHelper: "mdi-play", + dropMarker: "mdi-skip-forward", + error: "mdi-warning", + expanderClosed: "mdi-chevron-right", + expanderLazy: "mdi-chevron-right", + expanderOpen: "mdi-chevron-down", + // We may prevent wobbling rotations on FF by creating a separate sub element: + loading: "mdi-refresh", + nodata: "mdi-information-outline", + noExpander: "", + radio: "mdi-radiobox-blank", // "fa-circle-o" + radioSelected: "mdi-radiobox-marked", + // Default node icons. + // (Use tree.options.icon callback to define custom icons based on node data) + doc: "mdi-file-outline", + docOpen: "mdi-file-outline", + folder: "mdi-folder", + folderOpen: "mdi-folder-open", + } + }, + 'typicons': { //works with icons-plugin, settings: enable plugin»icons»loadTypicons + 'preset': '', + 'map': { + _addClass: "typcn", + checkbox: "typcn-media-stop-outline", + checkboxSelected: "typcn-input-checked", + checkboxUnknown: "typcn-media-stop-outline fancytree-helper-indeterminate-cb", + dragHelper: "typcn-media-play-outline", + dropMarker: "typcn-media-fast-forward-outline", + error: "typcn-warning", + expanderClosed: "typcn-media-play", + expanderLazy: "typcn-media-play", + expanderOpen: "typcn-arrow-sorted-down", + // We may prevent wobbling rotations on FF by creating a separate sub element: + loading: "typcn-arrow-sync", + nodata: "typcn-info-large", + noExpander: "", + radio: "typcn-media-record-outline", // "fa-circle-o" + radioSelected: "typcn-media-record", + // Default node icons. + // (Use tree.options.icon callback to define custom icons based on node data) + doc: "typcn-document", + docOpen: "typcn-document", + folder: "typcn-folder", + folderOpen: "typcn-folder-open", + } + } + + }; + // userDefinedPresets can be defined in conf/userscript.js + const presets = {...predefinedPresets, ...(typeof userDefinedPresets === 'undefined' ? [] : userDefinedPresets)}; + //let targettype; + // function logEvent(event, data, msg){ + // // var args = Array.isArray(args) ? args.join(", ") : + // msg = msg ? ": " + msg : ""; + // jQuery.ui.fancytree.info("Event('" + event.type + "', node=" + data.node + ")" + msg); + // } + jQuery(".indexmenu_js2").each(function(){ + let $tree = jQuery(this), + id = $tree.attr('id'); + const options = $tree.data('options'); + // console.log("options"); + // console.log(options); + let themePreset = presets[options.opts.theme]; + let targettype; //to share type between handlers + let extensions = []; + if(themePreset) { + extensions.push("glyph"); + } + if(options.opts.persist) { + extensions.push("persist"); + } + + $tree.fancytree({ + //enabled extensions + extensions: extensions, + //settings for glyph extension + glyph: { + preset: themePreset ? themePreset.preset : '', + map: themePreset ? themePreset.map : {} + }, + // 0=quite, 1=only errors, upto 4=also debug + //debugLevel: 4, + //settings for persist extension + persist: { + expandLazy: true, + // fireActivate: false, // false: suppress `activate` event after active node was restored + // overrideSource: false, // true: cookie takes precedence over `source` data attributes. + store: "auto" // 'cookie', 'local': use localStore, 'session': sessionStore + // Sample for a custom store: + // store: { + // get: function(key){ this.info("get(" + key + ")"); return window.sessionStorage.getItem(key); }, + // set: function(key, value){ this.info("set(" + key + ", " + value + ")"); window.sessionStorage.setItem(key, value); }, + // remove: function(key){ this.info("remove(" + key + ")"); window.sessionStorage.removeItem(key); } + }, + // number of levels already expanded, and not unexpandable. + //minExpandLevel: 2, + // expand with single click instead of dblclick + clickFolderMode: 3, + // closes other opened nodes, so only one node is opened + //autoCollapse: true, + // for keyboard.. --opening folders becomes jumpy + //autoScroll: true, + // Looping in combination with clicking + autoActivate: false, + // disabled because it causes also autoscrolling, such that select node is out-of-view + activeVisible: false, + + escapeTitles: false, + tooltip: true, + //use same setting as wiki page + rtl: jQuery('html[dir=rtl]').length, + + //for keyboard control + keydown: function (event, data) { + switch (event.which) { + case 32: // [space] + // logEvent(event,data); + break; + case 13: // [enter] + // logEvent(event,data); + if(data.node.data.url){ + // console.log('redirect'); + window.location.href = data.node.data.url; + } + break; + } + }, + + //store in click some event data for the activate handler + click: function(event, data) { + // return false to prevent default behavior (i.e. activation, ...) + targettype = data.targetType; //store target type, only available in click handler + }, + + //go to wiki page if node is activated + activate: function(event, data){ + const node = data.node; + + //prevent looping (hns is false or a page id) + if(node.key === JSINFO.id || node.data.hns === JSINFO.id) { + //node is equal to current page, prevent to follow the url + return; + } + if(options.opts.nopg && node.key === JSINFO.namespace + ':') { + //nopg marks parent ns node active, prevent to follow the url + return; + } + + // expander should not follow link + if(targettype === 'expander') { + targettype = false; //reset + return false; + } + + if(node.data.url === false) { + return false; + } + + if(node.data.url){ + window.location.href = node.data.url; + } + }, + + // active marked node (=current page) + init: function(event, data) { + //activate current node + data.tree.reactivate(); + }, + //add url + enhanceTitle: function(event, data) { + let node = data.node; + + if(node.data.url === false) { + return; + } + if(node.data.url) { // pagename 0 has url /0 + //nopg has potentially not existing pages + let cls = ''; + if(node.data.hnsNotExisting) { + cls = ' class="wikilink2"'; + } + data.$title.html("" + node.title + ""); + } + }, + //retrieve initial data + source: { + url: DOKU_BASE + 'lib/exe/ajax.php', + data: { + ns: options.ns, + call: 'indexmenu', + req: 'fancytree', + + level: options.opts.level, //only init + nons: options.opts.nons ? 1 : 0, //only init; without ns, no lower levels possible + nopg: options.opts.nopg ? 1 : 0, + subnss: options.opts.subnss, //subns to open. Only on init array, later just current ns string + navbar: options.opts.navbar ? 1 : 0, //only init: open tree at current page + currentpage: JSINFO.id, + max: options.opts.max, //#n of max#n#m + skipns: options.opts.skipns, + skipfile: options.opts.skipfile, + sort: options.sort.sort ? options.sort.sort : 0, //'t', 'd', false TODO is false handled correctly? + msort: options.sort.msort ? options.sort.msort : 0, //'indexmenu_n', or metadata 'key subkey' TODO is empty handled correctly? + rsort: options.sort.rsort ? 1 : 0, + nsort: options.sort.nsort ? 1 : 0, + hsort: options.sort.hsort ? 1 : 0, + + init: 1 + } + }, + //retrieve data of expanded nodes + lazyLoad: function(event, data) { + const node = data.node; + // Issue an Ajax request to load child nodes + data.result = { + url: DOKU_BASE + 'lib/exe/ajax.php', + data: { + ns: node.key, // ns with trailing : + call: 'indexmenu', + req: 'fancytree', + + level: 1, //level opened nodes, for follow up ajax requests only next level, so:1 + nons: options.opts.nons ? 1 : 0, + nopg: options.opts.nopg ? 1 : 0, + subnss: '', //options.opts.subnss is used on init + currentpage: JSINFO.id, + max: options.opts.maxajax, //#m of max#n#m + skipns: options.opts.skipns, + skipfile: options.opts.skipfile, + sort: options.sort.sort ? options.sort.sort : 0, + msort: options.sort.msort ? options.sort.msort : 0, + rsort: options.sort.rsort ? 1 : 0, + nsort: options.sort.nsort ? 1 : 0, + hsort: options.sort.hsort ? 1 : 0, + + init: 0 + } + } + } + }); + + //hide the fallback nojs indexmenu + jQuery('#nojs_' + id.substring(6)).css("display", "none"); + + + // Note: Loading and initialization may be asynchronous, so the nodes may not be accessible yet. + + // On page load, activate node if node.data.href matches the url#href +// let tree = jQuery.ui.fancytree.getTree("#" + id), +// path = window.parent && window.parent.location.pathname; +// // console.log(path); +// // console.log('test'); +// if(path) { +// let arr = path.split('/'); // not reliable with config:useslash? +// let last = arr[arr.length-1] || arr[arr.length-2]; +// // console.log(arr); +// // console.log(last); +// +// // tree.activateKey(last); +// // var node1=tree.getNodeByKey(last); +// // console.log(node1); +// // node1.setActive(); +// // also possible: +// // $.ui.fancytree.getTree("#tree").getNodeByKey("id4.3.2").setActive(); +// +// // tree.visit(function(n) { +// // console.log(n.key); +// // console.log(n); +// // if( n.key && n.key === last ) { +// // n.setActive(); //if not using iframes, this creates a loops in combination with activate above +// // return false; // done: break traversal +// // } +// // }); +// } +// console.log(tree); +// console.log("test"); +// jQuery.contextMenu({ +// selector: "span.fancytree-title", +// items: { +// // "cut": {name: "Cut", icon: "cut", +// // callback: function(key, opt){ +// // var node = jQuery.ui.fancytree.getNode(opt.$trigger); +// // alert("Clicked on " + key + " on " + node); +// // } +// // }, +// "page": {name: "Page", icon: "", disabled: true }, +// "sep1": "----", +// "revs": {name: "Revisions", icon: "ui-icon-arrowreturn-1-w", disabled: false }, +// "toc": {name: "ToC preview", icon: "ui-icon-bookmark", disabled: false }, +// "edit": {name: "Edit", icon: "edit", disabled: false }, +// "hpage": {name: "Headpage", icon: "add", disabled: false}, +// "spage": {name: "Start page", icon: "add", disabled: false}, +// "cpage": {name: "Custom page...", icon: "add", disabled: false}, +// "acls": {name: "Acls", icon: "ui-icon-locked", disabled: false}, +// "purge": {name: "Purge cache", icon: "loading", disabled: false}, +// "html": {name: "Export as HTML", icon: "ui-icon-document", disabled: false}, +// "text": {name: "Export as text", icon: "ui-icon-note", disabled: false}, +// "sep2": "----", +// "ns": {name: "Namespace", icon: "", disabled: true}, +// "sep3": "----", +// "search": {name: "Search...", icon: "ui-icon-search", disabled: false}, +// "npage": {name: "New page...", icon: "add", disabled: false}, +// "nshpage": {name: "Headpage here", icon: "add", disabled: false}, +// "nsacls": {name: "Acls", icon: "ui-icon-locked", disabled: false} +// }, +// callback: function(itemKey, opt) { +// var node = jQuery.ui.fancytree.getNode(opt.$trigger); +// alert("select " + itemKey + " on " + node); +// } +// }); + + // $tree.contextmenu({ + // delegate: "span.fancytree-title", + // autoFocus: true, + // // menu: "#options", + // menu: [ + // {title: "Page", cmd: 'pg'}, + // {title: "----", cmd: 'pg'}, + // {title: "Revisions", cmd: "revs", uiIcon: "ui-icon-arrowreturn-1-w"}, + // {title: "ToC preview", cmd: "toc", uiIcon: "ui-icon-bookmark"}, + // {title: "Edit", cmd: "edit", uiIcon: "ui-icon-pencil", disabled: false }, + // {title: "Headpage", cmd: "hpage", uiIcon: "ui-icon-plus"}, + // {title: "Start page", cmd: "spage", uiIcon: "ui-icon-plus"}, + // {title: "Custom page...", cmd: "cpage", uiIcon: "ui-icon-plus"}, + // {title: "Acls", cmd: "acls", uiIcon: "ui-icon-locked", disabled: true }, + // {title: "Purge cache", cmd: "purge", uiIcon: "ui-icon-arrowrefresh-1-e"}, + // {title: "Export as HTML", cmd: "html", uiIcon: "ui-icon-document"}, + // {title: "Export as text", cmd: "text", uiIcon: "ui-icon-note"}, + // {title: "Namespace", cmd:'ns'}, + // {title: "----", cmd:'ns'}, + // {title: "Search...", cmd: "search", uiIcon: "ui-icon-search"}, + // {title: "New page...", cmd: "npage", uiIcon: "ui-icon-plus"},// children:[] + // {title: "Headpage here", cmd: "nshpage", uiIcon: "ui-icon-plus"}, + // {title: "Acls", cmd: "nsacls", uiIcon: "ui-icon-locked"} + // ], + // beforeOpen: function(event, ui) { + // var node = jQuery.ui.fancytree.getNode(ui.target); + // // Modify menu entries depending on node status + // $tree.contextmenu("enableEntry", "toc", node.isFolder()); + // // Show/hide single entries + // $tree.contextmenu("showEntry", "pg", !node.isFolder()); + // $tree.contextmenu("showEntry", "revs", !node.isFolder()); + // $tree.contextmenu("showEntry", "toc", !node.isFolder()); + // $tree.contextmenu("showEntry", "edit", !node.isFolder()); + // $tree.contextmenu("showEntry", "hpage", !node.isFolder()); + // $tree.contextmenu("showEntry", "spage", !node.isFolder()); + // $tree.contextmenu("showEntry", "cpage", !node.isFolder()); + // $tree.contextmenu("showEntry", "acls", !node.isFolder()); + // $tree.contextmenu("showEntry", "purge", !node.isFolder()); + // $tree.contextmenu("showEntry", "html", !node.isFolder()); + // $tree.contextmenu("showEntry", "text", !node.isFolder()); + // + // $tree.contextmenu("showEntry", "ns", node.isFolder()); + // $tree.contextmenu("showEntry", "search", node.isFolder()); + // $tree.contextmenu("showEntry", "npage", node.isFolder()); + // $tree.contextmenu("showEntry", "nshpage", node.isFolder()); + // $tree.contextmenu("showEntry", "nsacls", node.isFolder()); + // + // // Activate node on right-click + // node.setActive(); + // // Disable tree keyboard handling + // ui.menu.prevKeyboard = node.tree.options.keyboard; + // node.tree.options.keyboard = false; + // }, + // close: function(event, ui) { + // // Restore tree keyboard handling + // // console.log("close", event, ui, this) + // // Note: ui is passed since v1.15.0 + // var node = jQuery.ui.fancytree.getNode(ui.target); + // node.tree.options.keyboard = ui.menu.prevKeyboard; + // node.setFocus(); + // }, + // select: function(event, ui) { + // var node = jQuery.ui.fancytree.getNode(ui.target); + // alert("select " + ui.cmd + " on " + node); + // } + // }); + }); +}); + + +/** + * Add button action for the indexmenu wizard button + * + * @param {jQuery} $btn Button element to add the action to + * @param {Array} props Associative array of button properties + * @param {string} edid ID of the editor textarea + * @return {boolean} If button should be appended + */ +function addBtnActionIndexmenu($btn, props, edid) { + indexmenu_wiz.init(jQuery('#' + edid)); + $btn.on('click', function () { + indexmenu_wiz.toggle(); + return false; + }); + return true; +} + + +// try to add button to toolbar +if (window.toolbar !== undefined) { + window.toolbar[window.toolbar.length] = { + "type": "Indexmenu", + "title": "Insert the Indexmenu tree", + "icon": "../../plugins/indexmenu/images/indexmenu_toolbar.png" + } +} + + +/** + * functions for js index renderer and contextmenu + */ +var IndexmenuUtils = { + + /** + * Determine extension from given theme dir name + * + * @param {string} themedir name of theme dir + * @returns {string} extension gif, png or jpg + */ + determineExtension: function (themedir) { + let extension = "gif"; + let posext = themedir.lastIndexOf("."); + if (posext > -1) { + posext++; + let ext = themedir.substring(posext, themedir.length).toLowerCase(); + if ((ext === "png") || (ext === "jpg")) { + extension = ext; + } + } + return extension; + }, + + /** + * Create div with given id and class on body and return it + * + * @param {string} id picker id + * @param {string} cl class(es) + * @return {jQuery} jQuery div + */ + createPicker: function (id, cl) { + return jQuery('
        ') + .addClass(cl || 'picker') + .attr('id', id) + .css({position: 'absolute'}) + .hide() + .appendTo('body'); + } + +}; diff --git a/plugins/55/indexmenu/scripts/contextmenu.js b/plugins/55/indexmenu/scripts/contextmenu.js new file mode 100644 index 0000000..051401e --- /dev/null +++ b/plugins/55/indexmenu/scripts/contextmenu.js @@ -0,0 +1,429 @@ +/** + * Right Context Menu configuration + * + * Some usefull variables: + * node.hns = headpage id; + * node.isdir = node is namespace; + * node.dokuid = the DW id (namespace parent in case of headpage); + * id = the DW id of the selected node (headpage id in case of headpage); + * index.config.urlbase = Url Base; + * index.config.sepchar = Url separator; + * + * HOWTO EDIT: + * + * To override menu entries or add a menu entry: + * - PLEASE EDIT ONLY the scripts/contextmenu.local.js file + * - DON'T EDIT this file, it is overwritten at plugin update + * + * Base structure of the context menu is displayed below. + * The entries with 'pg' are shown for page noded, these with 'ns' only for namespaces. + * + * Current available for everybody: + * indexmenu_contextmenu['all']['pg']['view'] = [...array with menu description here... ]; + * indexmenu_contextmenu['all']['pg']['edit'] = [ ... ]; + * indexmenu_contextmenu['all']['ns']['view'] = [ ... ]; + * + * Current available for admins: + * indexmenu_contextmenu['pg']['view'] = [ ... ]; + * indexmenu_contextmenu['ns']['view'] = [ ... ]; + * + * Current available for authenticated users: + * indexmenu_contextmenu['pg']['view'] = [ ... ]; + * indexmenu_contextmenu['ns']['view'] = [ ... ]; + * + * A menu description may contain four kind of entries: + * - section title: array with one entry e.g.: + * ['Section title (html allowed)'] + * - menu action: array with two entries e.g.: + * ['Title of action 1 (html allowed)', 'javascript here ... see for examples scripts/contextmenu.js'] + * - menu action with custom tooltip: array with three entries e.g.: + * ['Title of action 1 (html allowed)', 'javascript here ... see for examples scripts/contextmenu.js', 'Customized title'] + * - submenu: array with two entries where second entry is an array that describes again a menu e.g.: + * ['title of submenu (html allowed)', [ ...array with menu actions... ]] + * + * + * Examples: + * A menu description array: + * ... = [ + * ['section title'], + * ['title of action 1', 'javascript here'], + * ['title of submenu', [['title of subaction 1', 'javascript here'], ['title of subaction 1', 'javascript here', 'Click here for action']] ] + * ]; + * + * To Override the common menu title: + * indexmenu_contextmenu['all']['pg']['view'][0] = ['customtitle']; + * + * To override a menu entry, for example the menu title: + * indexmenu_contextmenu['all']['pg']['view'][0] = ['Custom Title']; + * + * To add option to page menu: + * Array.splice(index, howManyToRemove, description1) + * index = position to start (start counting at zero) + * howManyToRemove = number of elements that are removed (set to 1 to replace a element) + * description1 = array with menu entry description + * -> optional: description2 = optional you can add more elements at once by splice(index, howManyToRemove, description1, description2, etc) + * + * indexmenu_contextmenu['all']['pg']['view'].splice(1, 0, ['Input new page', '"javascript: IndexmenuContextmenu.reqpage(\'"+index.config.urlbase+"\',\'"+index.config.sepchar+"\',\'"+node.dokuid+"\');"']); + */ + +/* global LANG */ +/* global DOKU_BASE */ +/* global JSINFO */ + + +// IMPORTANT: DON'T MODIFY THIS FILE, BUT EDIT contextmenu.local.js PLEASE! +// THIS FILE IS OVERWRITTEN WHEN PLUGIN IS UPDATED + +/** + * Right Context Menu configuration for all users: + */ +indexmenu_contextmenu['all']['pg'] = { + 'view': [ + [''+LANG.plugins.indexmenu.page+''], + [LANG.plugins.indexmenu.revs, 'IndexmenuContextmenu.getid(index.config.urlbase,id)+"do=revisions"'], + [LANG.plugins.indexmenu.tocpreview, '"javascript: IndexmenuContextmenu.createTocMenu(\'call=indexmenu&req=toc&id="+id+"\',\'picker_"+index.treeName+"\',\'s"+index.treeName+node.id+"\');"'] + ], + //Menu items in edit mode, when previewing + 'edit': [ + [''+LANG.plugins.indexmenu.editmode+''], + [LANG.plugins.indexmenu.insertdwlink, '"javascript: IndexmenuContextmenu.insertTags(\'"+id+"\',\'"+index.config.sepchar+"\');"+index.treeName+".divdisplay(\'r\',0);"', LANG.plugins.indexmenu.insertdwlinktooltip] + ] +}; + +indexmenu_contextmenu['all']['ns'] = { + 'view': [ + [''+LANG.plugins.indexmenu.ns+''], + [LANG.plugins.indexmenu.search, '"javascript: IndexmenuContextmenu.srchpage(\'"+index.config.urlbase+"\',\'"+index.config.sepchar+"\',\'"+node.isdir+"\',\'"+node.dokuid+"\');"', LANG.plugins.indexmenu.searchtooltip] + ] +}; + + +if (JSINFO && JSINFO.isadmin) { + /** + * Right Context Menu configuration for admin users: + */ + indexmenu_contextmenu['pg'] = { + 'view': [ + [LANG.plugins.indexmenu.edit, 'IndexmenuContextmenu.getid(index.config.urlbase,id)+"do=edit"'], + [''+LANG.plugins.indexmenu.create+'-->', [ + [LANG.plugins.indexmenu.headpage, '"javascript: IndexmenuContextmenu.reqpage(\'"+index.config.urlbase+"\',\'"+index.config.sepchar+"\',\'"+node.dokuid+"\',\'"+node.name+"\');"', LANG.plugins.indexmenu.headpagetooltip], + [LANG.plugins.indexmenu.startpage, 'IndexmenuContextmenu.getid(index.config.urlbase,id+index.config.sepchar+"start")+"do=edit"', LANG.plugins.indexmenu.startpagetooltip], + [LANG.plugins.indexmenu.custompage, '"javascript: IndexmenuContextmenu.reqpage(\'"+index.config.urlbase+"\',\'"+index.config.sepchar+"\',\'"+node.dokuid+"\');"', LANG.plugins.indexmenu.custompagetooltip] + ]], + [''+LANG.plugins.indexmenu.more+'-->', [ + [LANG.plugins.indexmenu.acls, 'IndexmenuContextmenu.getid(index.config.urlbase,id)+"do=admin&page=acl"'], + [LANG.plugins.indexmenu.purgecache, 'IndexmenuContextmenu.getid(index.config.urlbase,id)+"purge=true"'], + [LANG.plugins.indexmenu.exporthtml, 'IndexmenuContextmenu.getid(index.config.urlbase,id)+"do=export_xhtml"'], + [LANG.plugins.indexmenu.exporttext, 'IndexmenuContextmenu.getid(index.config.urlbase,id)+"do=export_raw"'] + ]] + ] + }; + + indexmenu_contextmenu['ns'] = { + 'view': [ + [LANG.plugins.indexmenu.newpage, '"javascript: IndexmenuContextmenu.reqpage(\'"+index.config.urlbase+"\',\'"+index.config.sepchar+"\',\'"+node.dokuid+"\');"', LANG.plugins.indexmenu.newpagetooltip], + [''+LANG.plugins.indexmenu.more+'-->', [ + [LANG.plugins.indexmenu.headpagehere, '"javascript: IndexmenuContextmenu.reqpage(\'"+index.config.urlbase+"\',\'"+index.config.sepchar+"\',\'"+node.dokuid+"\',\'"+node.name+"\');"', LANG.plugins.indexmenu.headpageheretooltip], + [LANG.plugins.indexmenu.acls, 'IndexmenuContextmenu.getid(index.config.urlbase,node.dokuid)+"do=admin&page=acl"'] + ]] + ] + }; + +} else if (JSINFO && JSINFO.isauth) { + /** + * Right Context Menu configuration for authenticated users: + */ + indexmenu_contextmenu['pg'] = { + 'view': [ + [LANG.plugins.indexmenu.newpagehere, '"javascript: IndexmenuContextmenu.reqpage(\'"+index.config.urlbase+"\',\'"+index.config.sepchar+"\',\'"+node.dokuid+"\');"'], + ['Edit', 'IndexmenuContextmenu.getid(index.config.urlbase,id)+"do=edit"', 1, 0 ], + [''+LANG.plugins.indexmenu.more+'-->', [ + [LANG.plugins.indexmenu.headpagehere, '"javascript: IndexmenuContextmenu.reqpage(\'"+index.config.urlbase+"\',\'"+index.config.sepchar+"\',\'"+node.dokuid+"\',\'"+node.name+"\');"'], + [LANG.plugins.indexmenu.purgecache, 'IndexmenuContextmenu.getid(index.config.urlbase,id)+"purge=true"'], + [LANG.plugins.indexmenu.exporthtml, 'IndexmenuContextmenu.getid(index.config.urlbase,id)+"do=export_xhtml"'] + ]] + ] + }; + +} + +var IndexmenuContextmenu = { + + /** + * Common functions + * Insert your custom functions (available for all users) here. + */ + + /** + * Navigate to the search page + * + * @param {string} urlbase index.config.urlbase + * @param {string} sepchar index.config.sepchar + * @param {boolean} isdir whether a directory (probably boolean, might be string) + * @param {string} nid page id of node (dokuid mentioned in indexmenu.js) + */ + + srchpage: function (urlbase, sepchar, isdir, nid) { + const enteredText = prompt(LANG.plugins.indexmenu.insertkeywords, ""); + if (enteredText) { + let fnid = nid; + if (isdir == "0") { + fnid = fnid.substring(0, nid.lastIndexOf(sepchar)); + } + let b = urlbase, re = new RegExp(sepchar, 'g'); + fnid = fnid.replace(re, ":"); + b += (urlbase.indexOf("?id=") < 0) ? '?id=' : ''; + window.location.href = IndexmenuContextmenu.getid(b, enteredText + " @" + fnid) + "do=search"; + } + }, + + /** + * Build a url to a wiki page + * + * @param {string} urlbase + * @param {string} id + * @returns {string} + */ + getid: function (urlbase, id) { + let url = (urlbase || '') + encodeURIComponent(id || ''); + url += (urlbase.indexOf("?") < 0) ? '?' : '&'; + return url; + }, + + /** + * Navigate to the editor window + * + * @param {string} urlbase + * @param {string} sepchar + * @param {string} id + * @param {string} pagename + */ + reqpage: function (urlbase, sepchar, id, pagename) { + let newpageid; + if (pagename) { + newpageid = id + sepchar + pagename; + } else { + newpageid = prompt(LANG.plugins.indexmenu.insertpagename, ""); + if (!newpageid) { + return; + } + newpageid = id + sepchar + newpageid; + } + if (newpageid) { + window.location.href = IndexmenuContextmenu.getid(urlbase, newpageid) + "do=edit"; + } + }, + + /** + * Insert link syntax with given id in current editor window + * + * @param {string} lnk page id + * @param {string} sepchar + */ + insertTags: function (lnk, sepchar) { + let r, l = lnk; + if (sepchar) { + r = new RegExp(sepchar, "g"); + l = lnk.replace(r, ':'); + } + insertTags('wiki__text', '[[', ']]', l); + }, + + /** + * Create or catch the picker and hide it, next call the ajax content loading to get the ToC + * + * @param {string} get query string + * @param {string} picker id of picker + * @param {string} btn id of button + */ + createTocMenu: function (get, picker, btn) { + var $toc_picker = jQuery('#' + picker); + if (!$toc_picker.length) { + $toc_picker = IndexmenuUtils.createPicker(picker, 'indexmenu_toc'); + $toc_picker + .html('
        ') + .children().first().click(function (event) { + event.stopPropagation(); + return IndexmenuContextmenu.togglePicker($toc_picker, jQuery('#' + btn)); + }); + } else { + $toc_picker.hide(); + } + IndexmenuContextmenu.ajaxmenu(get, $toc_picker, jQuery('#' + btn), $toc_picker.children().last(), null); + }, + + /** + * Shows the picker and adds to it or to an internal containter the ajax content + * + * @param {string} get query string + * @param {jQuery} $picker + * @param {jQuery} $btn + * @param {jQuery} $container if defined ajax result is added to it, otherwise to $picker + * @param {function} oncomplete called when defined to handle ajax result + */ + ajaxmenu: function (get, $picker, $btn, $container, oncomplete) { + var $indx_list; + $indx_list = $container || $picker; + + if (!IndexmenuContextmenu.togglePicker($picker, $btn)) return; + + var onComplete = function (data) { + $indx_list.html(''); + if (typeof oncomplete == 'function') { + oncomplete(data, $indx_list); + } else { + $indx_list.html(data); + } + }; + + //get content for picker/container + jQuery.ajax({ + type: "POST", + url: DOKU_BASE + 'lib/exe/ajax.php', + data: get, + beforeSend: function () { + $indx_list.html('
        '+LANG.plugins.indexmenu.loading+'
        '); + }, + success: onComplete, + dataType: 'html' + }); + }, + + + /** + * Hide/show picker, will be shown beside btn + * + * @param {string|jQuery} $picker + * @param {jQuery} $btn + * @return {Boolean} true if open, false closed + */ + togglePicker: function ($picker, $btn) { + var x = 8, y = 0; + + if (!$picker.is(':visible')) { + var pos = $btn.offset(); + //position + width of button + x += pos.left + $btn[0].offsetWidth; + y += pos.top; + + $picker + .show() + .offset({ + left: x, + top: y + }); + + return true; + } else { + $picker.hide(); + return false; + } + }, + + /** + * Fills the contextmenu by creating entries from the given configuration arrays and concatenating these + * to the #r picker + * + * @param {any[]} amenu (part of) the configuration array + * @param {dTree} index the indexmenu object + * @param {int} n node id + */ + arrconcat: function (amenu, index, n) { + var html, id, item, a, li; + if (typeof amenu == 'undefined' || typeof amenu['view'] == 'undefined') { + return; + } + var cmenu = amenu['view']; + if (jQuery('#tool__bar')[0] && amenu['edit'] instanceof Array) { + cmenu = amenu['edit'].concat(cmenu); + } + var node = index.aNodes[n]; + id = node.hns || node.dokuid; + + var createCMenuEntry = function (entry) { + return '' + entry[0] + ''; + }; + + jQuery.each(cmenu, function (i, cmenuentry) { + if (cmenuentry == '') { + return true; + } + item = document.createElement('li'); + var $cmenu = jQuery('#r' + index.treeName); + if (cmenuentry[1]) { + if (cmenuentry[1] instanceof Array) { + html = document.createElement('ul'); + jQuery.each(cmenuentry[1], function (a, subcmenuentry) { + li = document.createElement('li'); + li.innerHTML = createCMenuEntry(subcmenuentry); + html.appendChild(li); + }); + + //} + item.innerHTML = '' + cmenuentry[0] + ''; + html.left = $cmenu[0].width; + item.appendChild(html); + } else { + item.innerHTML = createCMenuEntry(cmenuentry); + } + } else { + item.innerHTML = cmenuentry; + } + $cmenu.children().last().append(item); + }); + }, + + /** + * Absolute positioning of the div at place of mouseclick + * + * @param obj div element + * @param e + */ + mouseposition: function (obj, e) { + //http://www.quirksmode.org/js/events_properties.html + var X = 0, Y = 0; + if (!e) e = window.event; + if (e.pageX || e.pageY) { + X = e.pageX; + Y = e.pageY; + } + else if (e.clientX || e.clientY) { + X = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; + Y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop; + } + obj.style.left = X - 5 + 'px'; + obj.style.top = Y - 5 + 'px'; + }, + + /** + * Check mouse button onmousedown event, only for middle and right mouse button contextmenu is shown + * + * @param {int} n node id + * @param {string|dTree} obj the unique name of a dTree object + * @param {event} e + */ + checkcontextm: function (n, obj, e) { + e = e || event; + // mouse clicks: which 3 === right, button 2 === right button + if ((e.which === 3 || e.button === 2) || (window.opera && e.which === 1 && e.ctrlKey)) { + obj.contextmenu(n, e); + IndexmenuContextmenu.stopevt(e); + } + }, + + /** + * Prevent default oncontextmenu event + * + * @param {event} e + * @returns {boolean} + */ + stopevt: function (e) { + if (!window.indexmenu_contextmenu) { + return true; + } + e = e || event; + e.preventDefault ? e.preventDefault() : e.returnValue = false; + return false; + } +}; + diff --git a/plugins/55/indexmenu/scripts/contextmenu.local.js.example b/plugins/55/indexmenu/scripts/contextmenu.local.js.example new file mode 100644 index 0000000..73ab81b --- /dev/null +++ b/plugins/55/indexmenu/scripts/contextmenu.local.js.example @@ -0,0 +1,70 @@ +/** + * Right Context Menu local configuration -- RENAME THIS FILE TO contextmenu.local.js -- + * How to change: + * - Rename this file to contextmenu.local.js + * - Make in this file your modifications + * - and go to the Configuration Manager and save the config again (this clears the cached javascript) + * + * See for information about available variables, menu structure, override and adding menu entries in the scripts/contextmenu.js + */ + +/** + * Right Context Menu configuration for all users: + */ +if (!indexmenu_contextmenu['all']['pg']) indexmenu_contextmenu['all']['pg'] = {'view': [] }; +if (!indexmenu_contextmenu['all']['ns']) indexmenu_contextmenu['all']['ns'] = {'view': [] }; + + +// Override title of page menu +//indexmenu_contextmenu['all']['pg']['view'][0] = ['Custom Title']; + +// add option to page menu +//indexmenu_contextmenu['all']['pg']['view'].splice(1, 0, ['Input new page', '"javascript: IndexmenuContextmenu.reqpage(\'"+index.config.urlbase+"\',\'"+index.config.sepchar+"\',\'"+node.dokuid+"\');"']); + + +if (JSINFO && JSINFO.isadmin) { + if (!indexmenu_contextmenu['pg']) indexmenu_contextmenu['pg'] = {'view': []}; + if (!indexmenu_contextmenu['ns']) indexmenu_contextmenu['ns'] = {'view': []}; + /** + * Right Context Menu configuration for admin users: + */ + + //override or add here the menu entries for admin, see for examples above + + +} else if (JSINFO && JSINFO.isauth) { + if (!indexmenu_contextmenu['pg']) indexmenu_contextmenu['pg'] = {'view': []}; + if (!indexmenu_contextmenu['ns']) indexmenu_contextmenu['ns'] = {'view': []}; + /** + * Right Context Menu configuration for authenticated users: + */ + + //override or add here the menu entries for authenticated users, see for examples above + +} + +/** + * Common available functions: + * + * Some common functions are added by [indexmenu plugin folder]/scripts/contextmenu.js + * - IndexmenuContextmenu.srchpage(urlbase, sepchar, isdir, dokuid) + * - IndexmenuContextmenu.getid(urlbase, dokuid) + * - IndexmenuContextmenu.reqpage(urlbase, sepchar, dokuid, pagename) + * - IndexmenuContextmenu.insertTags(dokuid, sepchar) + * + * Insert your custom functions (available for all users) at the bottom of this file. + */ + +/** + * Random Example function do something + * + * @param {string} id + * @param {Boolean} isdir + * @return {*} ... + */ +/* +function indexmenu_custom_dosomething(a, isdir) { + //do something + return false; +} +*/ diff --git a/plugins/55/indexmenu/scripts/contextmenu/jquery.ui-contextmenu.js b/plugins/55/indexmenu/scripts/contextmenu/jquery.ui-contextmenu.js new file mode 100644 index 0000000..a8fcf73 --- /dev/null +++ b/plugins/55/indexmenu/scripts/contextmenu/jquery.ui-contextmenu.js @@ -0,0 +1,634 @@ +/******************************************************************************* + * jquery.ui-contextmenu.js plugin. + * + * jQuery plugin that provides a context menu (based on the jQueryUI menu widget). + * + * @see https://github.com/mar10/jquery-ui-contextmenu + * + * Copyright (c) 2013-2018, Martin Wendt (http://wwWendt.de). Licensed MIT. + */ + +(function( factory ) { + "use strict"; + if ( typeof define === "function" && define.amd ) { + // AMD. Register as an anonymous module. + define([ "jquery", "jquery-ui/ui/widgets/menu" ], factory ); + } else { + // Browser globals + factory( jQuery ); + } +}(function( $ ) { + +"use strict"; + +var supportSelectstart = "onselectstart" in document.createElement("div"), + match = $.ui.menu.version.match(/^(\d)\.(\d+)/), + uiVersion = { + major: parseInt(match[1], 10), + minor: parseInt(match[2], 10) + }, + isLTE110 = ( uiVersion.major < 2 && uiVersion.minor <= 10 ), + isLTE111 = ( uiVersion.major < 2 && uiVersion.minor <= 11 ); + +$.widget("moogle.contextmenu", { + version: "@VERSION", + options: { + addClass: "ui-contextmenu", // Add this class to the outer
          + closeOnWindowBlur: true, // Close menu when window loses focus + appendTo: "body", // Set keyboard focus to first entry on open + autoFocus: false, // Set keyboard focus to first entry on open + autoTrigger: true, // open menu on browser's `contextmenu` event + delegate: null, // selector + hide: { effect: "fadeOut", duration: "fast" }, + ignoreParentSelect: true, // Don't trigger 'select' for sub-menu parents + menu: null, // selector or jQuery pointing to
            , or a definition hash + position: null, // popup positon + preventContextMenuForPopup: false, // prevent opening the browser's system + // context menu on menu entries + preventSelect: false, // disable text selection of target + show: { effect: "slideDown", duration: "fast" }, + taphold: false, // open menu on taphold events (requires external plugins) + uiMenuOptions: {}, // Additional options, used when UI Menu is created + // Events: + beforeOpen: $.noop, // menu about to open; return `false` to prevent opening + blur: $.noop, // menu option lost focus + close: $.noop, // menu was closed + create: $.noop, // menu was initialized + createMenu: $.noop, // menu was initialized (original UI Menu) + focus: $.noop, // menu option got focus + open: $.noop, // menu was opened + select: $.noop // menu option was selected; return `false` to prevent closing + }, + /** Constructor */ + _create: function() { + var cssText, eventNames, targetId, + opts = this.options; + + this.$headStyle = null; + this.$menu = null; + this.menuIsTemp = false; + this.currentTarget = null; + this.extraData = {}; + this.previousFocus = null; + + if (opts.delegate == null) { + $.error("ui-contextmenu: Missing required option `delegate`."); + } + if (opts.preventSelect) { + // Create a global style for all potential menu targets + // If the contextmenu was bound to `document`, we apply the + // selector relative to the tag instead + targetId = ($(this.element).is(document) ? $("body") + : this.element).uniqueId().attr("id"); + cssText = "#" + targetId + " " + opts.delegate + " { " + + "-webkit-user-select: none; " + + "-khtml-user-select: none; " + + "-moz-user-select: none; " + + "-ms-user-select: none; " + + "user-select: none; " + + "}"; + this.$headStyle = $("