Compare commits
46 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9ca6a3a995 | |||
| 7303dbae41 | |||
| 511f5a0c45 | |||
| 9ea5c1b59b | |||
| ade56062e3 | |||
| 481a2d2606 | |||
| 3a809bb92e | |||
| cc2ab04035 | |||
| 17a57f3685 | |||
| d41ecbbd9a | |||
| b6c6fc2486 | |||
| 918c55da3e | |||
| 385c27c691 | |||
| 54d702ba9f | |||
| c816c40c19 | |||
| aad27cd8b4 | |||
| 96fb33b80b | |||
| e10a5f1f62 | |||
| f133932884 | |||
| e287e27375 | |||
| 9ae4d7ee48 | |||
| 624bb52ec4 | |||
| ba34a3738a | |||
| 18c1cce715 | |||
| 7a906fb033 | |||
| c8536ae264 | |||
| 3703791a28 | |||
| 6dff33f9d7 | |||
| 05bd7c29e9 | |||
| 8380a4bf17 | |||
| ad7b5b7c52 | |||
| 871cf1f5b4 | |||
| a2b615752b | |||
| aec89ce9fa | |||
| 02e526d717 | |||
| ebb485ffba | |||
| 80221c3ea2 | |||
| f8aebf94d2 | |||
| 97da542bd8 | |||
| 612a94fd06 | |||
| a7bcc7da0f | |||
| 3da1830f58 | |||
| 8a9c68c702 | |||
| e55419eb8b | |||
| 2f0e47dcec | |||
| 361ad9211c |
@@ -13,7 +13,7 @@ release: npm-build translations
|
|||||||
|
|
||||||
test -d releases/$$VERSION && rm -fr releases/$$VERSION
|
test -d releases/$$VERSION && rm -fr releases/$$VERSION
|
||||||
mkdir -p releases/$$VERSION/side_menu
|
mkdir -p releases/$$VERSION/side_menu
|
||||||
cp -r README.md appinfo css lib img l10n js src templates releases/$$VERSION/side_menu
|
cp -r README.md appinfo css lib img l10n js src templates screenshots releases/$$VERSION/side_menu
|
||||||
cd releases/$$VERSION
|
cd releases/$$VERSION
|
||||||
zip -r side_menu_v$$VERSION.zip side_menu
|
zip -r side_menu_v$$VERSION.zip side_menu
|
||||||
tar cvzf side_menu_v$$VERSION.tar.gz side_menu
|
tar cvzf side_menu_v$$VERSION.tar.gz side_menu
|
||||||
|
|||||||
@@ -10,7 +10,9 @@ Comptatible with AppOrder.
|
|||||||
|
|
||||||
* [Installation and upgrade](#installation-and-upgrade)
|
* [Installation and upgrade](#installation-and-upgrade)
|
||||||
* [How to contribute?](#how-to-contribute)
|
* [How to contribute?](#how-to-contribute)
|
||||||
* [Preview](#preview)
|
* [Screenshots](https://gitnet.fr/deblan/side_menu/src/branch/master/screenshots/)
|
||||||
|
|
||||||
|
You like this app and you want to support me? [Buy me a coffee](https://www.buymeacoffee.com/deblan) ☕
|
||||||
|
|
||||||
Installation and upgrade
|
Installation and upgrade
|
||||||
------------------------
|
------------------------
|
||||||
@@ -43,18 +45,3 @@ If you are a developer:
|
|||||||
Build javascripts using `make npm-build` (or `make npm-watch` to build them in real time).
|
Build javascripts using `make npm-build` (or `make npm-watch` to build them in real time).
|
||||||
|
|
||||||
Then commit and create a pull request.
|
Then commit and create a pull request.
|
||||||
|
|
||||||
Previews
|
|
||||||
--------
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||

|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<info>
|
<info>
|
||||||
<id>side_menu</id>
|
<id>side_menu</id>
|
||||||
<name>Side menu</name>
|
<name>Side menu</name>
|
||||||
<summary>Move the top menu to the left side.</summary>
|
<summary>Modify the display of the menu.</summary>
|
||||||
<description><![CDATA[Side menu allows you to modify the position of the main menu by creating a panel on the left of the interface or with a big menu on the top.
|
<description><![CDATA[Side menu allows you to modify the position of the main menu by creating a panel on the left of the interface or with a big menu on the top.
|
||||||
You can also define apps that must be displayed in the top menu. Fully customisable.
|
You can also define apps that must be displayed in the top menu. Fully customisable.
|
||||||
|
|
||||||
@@ -17,25 +17,30 @@ You can report a bug or request a feature by opening an issue.
|
|||||||
]]></description>
|
]]></description>
|
||||||
<licence>agpl</licence>
|
<licence>agpl</licence>
|
||||||
<author mail="contact@deblan.fr" homepage="https://www.deblan.io/">Simon Vieille</author>
|
<author mail="contact@deblan.fr" homepage="https://www.deblan.io/">Simon Vieille</author>
|
||||||
<version>1.8.6</version>
|
<version>1.12.2</version>
|
||||||
<namespace>SideMenu</namespace>
|
<namespace>SideMenu</namespace>
|
||||||
<category>customization</category>
|
<category>customization</category>
|
||||||
<website>https://gitnet.fr/deblan/side_menu</website>
|
<website>https://gitnet.fr/deblan/side_menu</website>
|
||||||
|
<discussion>https://deblan.cloud/index.php/call/fffxkc7h</discussion>
|
||||||
<bugs>https://gitnet.fr/deblan/side_menu/issues</bugs>
|
<bugs>https://gitnet.fr/deblan/side_menu/issues</bugs>
|
||||||
<repository type="git">https://gitnet.fr/deblan/side_menu</repository>
|
<repository type="git">https://gitnet.fr/deblan/side_menu</repository>
|
||||||
<screenshot>https://upload.deblan.org/u/2020-03/5e81b219.jpg</screenshot>
|
<screenshot>https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/nc19_default_menu.png</screenshot>
|
||||||
<screenshot>https://upload.deblan.org/u/2020-03/5e7fab2b.jpg</screenshot>
|
<screenshot>https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/admin_settings.png</screenshot>
|
||||||
<screenshot>https://upload.deblan.org/u/2020-08/5f3551d1.png</screenshot>
|
<screenshot>https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/n19_big_menu.png</screenshot>
|
||||||
<screenshot>https://upload.deblan.org/u/2020-08/5f3551f0.png</screenshot>
|
<screenshot>https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/nc18_menu_always_displayed.png</screenshot>
|
||||||
<screenshot>https://upload.deblan.org/u/2020-08/5f35aae1.png</screenshot>
|
<screenshot>https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/nc20_big_menu_responsive.png</screenshot>
|
||||||
<screenshot>https://upload.deblan.org/u/2020-08/5f35ab0f.png</screenshot>
|
<screenshot>https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/personal_settings.png</screenshot>
|
||||||
|
<documentation>
|
||||||
|
<admin>https://gitnet.fr/deblan/side_menu/src/branch/master/README.md</admin>
|
||||||
|
<developer>https://gitnet.fr/deblan/side_menu/src/branch/master/README.md</developer>
|
||||||
|
</documentation>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<nextcloud min-version="18" max-version="20"/>
|
<nextcloud min-version="18" max-version="20"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<settings>
|
<settings>
|
||||||
<admin>OCA\SideMenu\Settings\Admin</admin>
|
<admin>OCA\SideMenu\Settings\Admin</admin>
|
||||||
<admin-section>OCA\SideMenu\Settings\AdminSection</admin-section>
|
<admin-section>OCA\SideMenu\Settings\AdminSection</admin-section>
|
||||||
<personal>OCA\SideMenu\Settings\Personal</personal>
|
<personal>OCA\SideMenu\Settings\Personal</personal>
|
||||||
<personal-section>OCA\SideMenu\Settings\PersonalSection</personal-section>
|
<personal-section>OCA\SideMenu\Settings\PersonalSection</personal-section>
|
||||||
</settings>
|
</settings>
|
||||||
</info>
|
</info>
|
||||||
|
|||||||
@@ -41,4 +41,30 @@
|
|||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.side-menu-display {
|
||||||
|
padding: 10px;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
max-width: 100%;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.side-menu-display.is-active {
|
||||||
|
border: 2px solid #91cb7f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info {
|
||||||
|
margin-top: 8px;
|
||||||
|
padding: 5px;
|
||||||
|
background: #91cb7f;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
#side-menu-section h2 small {
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.side-menu-toggler {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|||||||
@@ -50,8 +50,8 @@
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#side-menu.hide-opener .side-menu-opener, .side-menu-opener.hide {
|
#side-menu.hide-opener .side-menu-opener, .side-menu-opener.hide, #side-menu.hide {
|
||||||
display: none;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.side-menu-apps-list {
|
.side-menu-apps-list {
|
||||||
@@ -180,6 +180,55 @@
|
|||||||
margin-top: -2px;
|
margin-top: -2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.side-menu-always-displayed #header,
|
||||||
|
.side-menu-always-displayed body {
|
||||||
|
width: calc(100% - 50px) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.side-menu-always-displayed body {
|
||||||
|
position: absolute;
|
||||||
|
left: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.side-menu-always-displayed #side-menu {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.side-menu-always-displayed .side-menu-apps-list {
|
||||||
|
height: calc(100vh - 49px);
|
||||||
|
top: 49px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.side-menu-always-displayed #side-menu,
|
||||||
|
.side-menu-always-displayed .side-menu-header,
|
||||||
|
.side-menu-always-displayed .side-menu-apps-list {
|
||||||
|
width: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.side-menu-always-displayed #side-menu .side-menu-app-text,
|
||||||
|
.side-menu-always-displayed #header .side-menu-opener,
|
||||||
|
.side-menu-always-displayed .side-menu-logo {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.side-menu-always-displayed #side-menu .side-menu-header {
|
||||||
|
height: 49px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.side-menu-always-displayed #side-menu.open,
|
||||||
|
.side-menu-always-displayed #side-menu.open .side-menu-apps-list,
|
||||||
|
.side-menu-always-displayed #side-menu.open .side-menu-header {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.side-menu-always-displayed #side-menu.open .side-menu-app-text {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.side-menu-always-displayed .app-navigation--close {
|
||||||
|
transform: translateX(calc(-100% + 50px)) !important;
|
||||||
|
}
|
||||||
|
|
||||||
@media screen and (max-width: 1024px) {
|
@media screen and (max-width: 1024px) {
|
||||||
#side-menu.side-menu-big {
|
#side-menu.side-menu-big {
|
||||||
max-width: 290px;
|
max-width: 290px;
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="571.907" height="156.921" viewBox="0 0 151.317 41.519">
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#fff" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M.18.18H58.71v41.16H.18z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#f9f9f9" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M.18.18H58.71v5.062H.18z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#4d4d4d" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M.18.18h6.128v41.16H.18z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#666" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M1.496 1.034h3.496V4.39H1.496z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#e6e6e6" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M2.297 7.455H4.19v1.81H2.297zM2.297 10.997H4.19v1.81H2.297zM2.297 14.404H4.19v1.81H2.297zM2.297 17.946H4.19v1.81H2.297zM2.297 21.353H4.19v1.81H2.297zM2.297 24.895H4.19v1.81H2.297zM2.297 28.302H4.19v1.81H2.297zM2.297 31.844H4.19v1.81H2.297zM7.136 1.034h6.102V4.39H7.136z"/>
|
||||||
|
<g fill="#b3b3b3" stroke="#ccc" fill-rule="evenodd" stroke-width="1.465" stroke-linecap="round">
|
||||||
|
<path d="M24.44 21.35l5.056-5.056M23.3 29.835l18.15-18.151M36.267 25.225l3.585-3.586"/>
|
||||||
|
</g>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#fff" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M62.865.18h58.532v41.16H62.865z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#f9f9f9" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M62.865.18h58.532v5.062H62.865z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="none" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M62.865.18h58.532v41.16H62.865z"/>
|
||||||
|
<g fill="#b3b3b3" stroke="#ccc" fill-rule="evenodd" stroke-width="1.465" stroke-linecap="round">
|
||||||
|
<path d="M84.197 21.35l5.055-5.056M83.056 29.835l18.152-18.151M96.024 25.225l3.585-3.586"/>
|
||||||
|
</g>
|
||||||
|
<g color="#000" stroke-width=".359" stroke-linecap="square">
|
||||||
|
<path style="marker:none" overflow="visible" fill="#4d4d4d" stroke="#b3b3b3" paint-order="fill markers stroke" d="M62.866.18h20.829v41.16h-20.83z"/>
|
||||||
|
<path style="marker:none" overflow="visible" fill="#666" stroke="#ccc" paint-order="fill markers stroke" d="M64.044 1.034h3.496V4.39h-3.496z"/>
|
||||||
|
<path style="marker:none" overflow="visible" fill="#e6e6e6" stroke="#ccc" paint-order="fill markers stroke" d="M64.578 8.076h1.893v1.81h-1.893zM67.507 8.407H79.97v1.148H67.507zM64.578 11.617h1.893v1.81h-1.893zM67.507 11.948h10.592v1.148H67.507zM64.578 15.025h1.893v1.81h-1.893zM67.507 15.356h12.997v1.148H67.507zM64.578 18.566h1.893v1.81h-1.893zM67.507 18.897h7.585v1.148h-7.585zM64.578 21.974h1.893v1.81h-1.893zM67.507 22.305h11.46v1.148h-11.46zM64.578 25.515h1.893v1.81h-1.893zM67.507 25.846h9.322v1.148h-9.322zM64.578 28.923h1.893v1.81h-1.893zM67.507 29.254h11.126v1.148H67.507zM64.578 32.464h1.893v1.81h-1.893zM67.507 32.795H80.37v1.148H67.507z"/>
|
||||||
|
</g>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#fff" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M125.856.18h25.281v41.16h-25.28z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#f9f9f9" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M125.856.18h25.257v5.062h-25.257z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="none" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M125.856.18h25.257v41.16h-25.257z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#4d4d4d" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M125.856.18h20.83v41.16h-20.83z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#666" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M127.034 1.034h3.496V4.39h-3.496z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#e6e6e6" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M127.568 8.076h1.893v1.81h-1.893zM130.497 8.407h12.463v1.148h-12.463zM127.568 11.617h1.893v1.81h-1.893zM130.497 11.948h10.592v1.148h-10.592zM127.568 15.025h1.893v1.81h-1.893zM130.497 15.356h12.997v1.148h-12.997zM127.568 18.566h1.893v1.81h-1.893zM130.497 18.897h7.585v1.148h-7.585zM127.568 21.974h1.893v1.81h-1.893zM130.497 22.305h11.46v1.148h-11.46zM127.568 25.515h1.893v1.81h-1.893zM130.497 25.846h9.322v1.148h-9.322zM127.568 28.923h1.893v1.81h-1.893zM130.497 29.254h11.126v1.148h-11.126zM127.568 32.464h1.893v1.81h-1.893zM130.497 32.795h12.863v1.148h-12.863z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.0 KiB |
@@ -0,0 +1,30 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="571.907" height="156.921" viewBox="0 0 151.317 41.519">
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#fff" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M.18.18h58.532v41.16H.18zM62.735.18h58.532v41.16H62.735z"/>
|
||||||
|
<g fill="#b3b3b3" stroke="#ccc" fill-rule="evenodd" stroke-width="1.465" stroke-linecap="round">
|
||||||
|
<path d="M84.066 21.35l5.055-5.056M82.925 29.835l18.152-18.151M95.893 25.225l3.585-3.586"/>
|
||||||
|
</g>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#4d4d4d" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M62.735.18h58.532v25.123H62.735z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="none" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M62.735.18h58.532v41.16H62.735z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#666" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M63.738 1.034h3.496V4.39h-3.496z"/>
|
||||||
|
<g stroke-width=".401" color="#000" fill="#e6e6e6" stroke="#ccc" stroke-linecap="square">
|
||||||
|
<path style="marker:none" overflow="visible" paint-order="fill markers stroke" d="M38.862 110.138h1.893v1.81h-1.893zM41.792 110.469h12.463v1.148H41.792zM38.862 113.679h1.893v1.81h-1.893zM41.792 114.01h10.592v1.148H41.792zM38.862 117.087h1.893v1.81h-1.893zM41.792 117.418h12.997v1.148H41.792zM38.862 120.628h1.893v1.81h-1.893zM41.792 120.959h7.585v1.148h-7.585z" transform="matrix(.89632 0 0 .8943 38.412 -87.8)"/>
|
||||||
|
</g>
|
||||||
|
<g stroke-width=".401" color="#000" fill="#e6e6e6" stroke="#ccc" stroke-linecap="square">
|
||||||
|
<path style="marker:none" overflow="visible" paint-order="fill markers stroke" d="M65.723 110.272h1.893v1.81h-1.893zM68.652 110.602h11.46v1.148h-11.46zM65.723 113.813h1.893v1.81h-1.893zM68.652 114.144h9.322v1.148h-9.322zM65.723 117.221h1.893v1.81h-1.893zM68.652 117.551h11.126v1.148H68.652zM65.723 120.762h1.893v1.81h-1.893zM68.652 121.093h12.863v1.148H68.652z" transform="matrix(.89632 0 0 .8943 34.262 -87.919)"/>
|
||||||
|
</g>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#666" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M116.257 1.034h3.496V4.39h-3.496z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#e6e6e6" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M72.715 6.186h11.518v1.148H72.715zM92.452 6.186h9.344v1.148h-9.344z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#f9f9f9" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M.18.18h58.532v5.063H.18z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="none" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M.18.18h58.532v41.16H.18z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#666" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M1.357 1.034h3.496V4.39H1.357z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#e6e6e6" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M6.068 1.034h6.102V4.39H6.068z"/>
|
||||||
|
<g fill="#b3b3b3" stroke="#ccc" fill-rule="evenodd" stroke-width="1.465" stroke-linecap="round">
|
||||||
|
<path d="M21.51 21.35l5.056-5.056M20.37 29.835L38.52 11.684M33.337 25.225l3.586-3.586"/>
|
||||||
|
</g>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#fff" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M125.857.18h25.28v41.16h-25.28z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#f9f9f9" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M125.857.18h25.257v5.063h-25.257z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="none" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M125.857.18h25.257v41.16h-25.257z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#4d4d4d" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M125.857.18h20.829v41.16h-20.83z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#666" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M127.034 1.034h3.496V4.39h-3.496z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#e6e6e6" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M127.569 10.155h1.893v1.81h-1.893zM130.498 10.486h12.463v1.148h-12.463zM127.569 13.696h1.893v1.81h-1.893zM130.498 14.027h10.592v1.148h-10.592zM127.569 17.104h1.893v1.81h-1.893zM130.498 17.435h12.997v1.148h-12.997zM127.569 24.708h1.893v1.81h-1.893zM130.498 25.04h7.585v1.147h-7.585zM127.569 28.116h1.893v1.81h-1.893zM130.498 28.447h11.46v1.148h-11.46zM127.569 31.657h1.893v1.81h-1.893zM130.498 31.988h9.322v1.148h-9.322zM127.569 35.065h1.893v1.81h-1.893zM130.498 35.396h11.126v1.148h-11.126zM127.616 6.848h11.518v1.148h-11.518zM127.569 21.311h9.344v1.148h-9.344z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.3 KiB |
@@ -0,0 +1,24 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="571.907" height="156.921" viewBox="0 0 151.317 41.519">
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#fff" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M62.735.18h58.532v41.16H62.735zM.18.18h58.532v41.16H.18z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#f9f9f9" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M.18.18h58.532v5.063H.18z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="none" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M.18.18h58.532v41.16H.18z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#666" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M1.357 1.034h3.496V4.39H1.357z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#e6e6e6" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M6.068 1.034h6.102V4.39H6.068z"/>
|
||||||
|
<g fill="#b3b3b3" stroke="#ccc" fill-rule="evenodd" stroke-width="1.465" stroke-linecap="round">
|
||||||
|
<path d="M21.51 21.35l5.056-5.056M20.37 29.835L38.52 11.684M33.337 25.225l3.586-3.586"/>
|
||||||
|
</g>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#f9f9f9" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M62.735.18h58.532v5.063H62.735z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="none" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M62.735.18h58.532v41.16H62.735z"/>
|
||||||
|
<g fill="#b3b3b3" stroke="#ccc" fill-rule="evenodd" stroke-width="1.465" stroke-linecap="round">
|
||||||
|
<path d="M84.066 21.35l5.055-5.056M82.925 29.835l18.152-18.151M95.893 25.225l3.585-3.586"/>
|
||||||
|
</g>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#4d4d4d" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M62.735.18h20.829v41.16h-20.83z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#666" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M63.912 1.034h3.496V4.39h-3.496z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#e6e6e6" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M64.447 8.076h1.893v1.81h-1.893zM67.376 8.407h12.463v1.148H67.376zM64.447 11.617h1.893v1.81h-1.893zM67.376 11.948h10.592v1.148H67.376zM64.447 15.025h1.893v1.81h-1.893zM67.376 15.356h12.997v1.148H67.376zM64.447 18.566h1.893v1.81h-1.893zM67.376 18.897h7.585v1.148h-7.585zM64.447 21.974h1.893v1.81h-1.893zM67.376 22.305h11.46v1.148h-11.46zM64.447 25.515h1.893v1.81h-1.893zM67.376 25.846h9.322v1.148h-9.322zM64.447 28.923h1.893v1.81h-1.893zM67.376 29.254h11.126v1.148H67.376zM64.447 32.464h1.893v1.81h-1.893zM67.376 32.795h12.863v1.148H67.376z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#fff" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M125.857.18h25.28v41.16h-25.28z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#f9f9f9" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M125.857.18h25.257v5.063h-25.257z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="none" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M125.857.18h25.257v41.16h-25.257z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#4d4d4d" stroke="#b3b3b3" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M125.857.18h20.829v41.16h-20.83z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#666" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M127.034 1.034h3.496V4.39h-3.496z"/>
|
||||||
|
<path style="marker:none" color="#000" overflow="visible" fill="#e6e6e6" stroke="#ccc" stroke-width=".359" stroke-linecap="square" paint-order="fill markers stroke" d="M127.569 8.076h1.893v1.81h-1.893zM130.498 8.407h12.463v1.148h-12.463zM127.569 11.617h1.893v1.81h-1.893zM130.498 11.948h10.592v1.148h-10.592zM127.569 15.025h1.893v1.81h-1.893zM130.498 15.356h12.997v1.148h-12.997zM127.569 18.566h1.893v1.81h-1.893zM130.498 18.897h7.585v1.148h-7.585zM127.569 21.974h1.893v1.81h-1.893zM130.498 22.305h11.46v1.148h-11.46zM127.569 25.515h1.893v1.81h-1.893zM130.498 25.846h9.322v1.148h-9.322zM127.569 28.923h1.893v1.81h-1.893zM130.498 29.254h11.126v1.148h-11.126zM127.569 32.464h1.893v1.81h-1.893zM130.498 32.795h12.863v1.148h-12.863z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.7 KiB |
@@ -82,6 +82,7 @@ class CssController extends Controller
|
|||||||
'external-sites-in-top-menu' => (bool) $this->config->getAppValue('side_menu', 'external-sites-in-top-menu', 0),
|
'external-sites-in-top-menu' => (bool) $this->config->getAppValue('side_menu', 'external-sites-in-top-menu', 0),
|
||||||
'size-icon' => $this->config->getAppValue('side_menu', 'size-icon', 'normal'),
|
'size-icon' => $this->config->getAppValue('side_menu', 'size-icon', 'normal'),
|
||||||
'size-text' => $this->config->getAppValue('side_menu', 'size-text', 'normal'),
|
'size-text' => $this->config->getAppValue('side_menu', 'size-text', 'normal'),
|
||||||
|
'always-displayed' => (bool) $this->config->getAppValue('side_menu', 'always-displayed', '0'),
|
||||||
'big-menu' => (bool) $this->config->getAppValue('side_menu', 'big-menu', '0'),
|
'big-menu' => (bool) $this->config->getAppValue('side_menu', 'big-menu', '0'),
|
||||||
'top-menu-apps' => $topMenuApps,
|
'top-menu-apps' => $topMenuApps,
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ class JsController extends Controller
|
|||||||
{
|
{
|
||||||
$user = OC::$server[IUserSession::class]->getUser();
|
$user = OC::$server[IUserSession::class]->getUser();
|
||||||
$topMenuApps = (array) json_decode($this->config->getAppValue('side_menu', 'top-menu-apps', '[]'), true);
|
$topMenuApps = (array) json_decode($this->config->getAppValue('side_menu', 'top-menu-apps', '[]'), true);
|
||||||
|
$targetBlankApps = (array) json_decode($this->config->getAppValue('side_menu', 'target-blank-apps', '[]'), true);
|
||||||
|
|
||||||
if ($user) {
|
if ($user) {
|
||||||
$userTopMenuApps = (array) json_decode($this->config->getUserValue($user->getUid(), 'side_menu', 'top-menu-apps', '[]'), true);
|
$userTopMenuApps = (array) json_decode($this->config->getUserValue($user->getUid(), 'side_menu', 'top-menu-apps', '[]'), true);
|
||||||
@@ -61,8 +62,16 @@ class JsController extends Controller
|
|||||||
if (!empty($userTopMenuApps)) {
|
if (!empty($userTopMenuApps)) {
|
||||||
$topMenuApps = $userTopMenuApps;
|
$topMenuApps = $userTopMenuApps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$userTargetBlankMode = (int) $this->config->getUserValue($user->getUid(), 'side_menu', 'target-blank-mode', '1');
|
||||||
|
$userTargetBlankApps = (array) json_decode($this->config->getUserValue($user->getUid(), 'side_menu', 'target-blank-apps', '[]'), true);
|
||||||
|
|
||||||
|
if ($userTargetBlankMode === 2) {
|
||||||
|
$targetBlankApps = $userTargetBlankApps;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$parameters = [
|
$parameters = [
|
||||||
'opener-position' => $this->config->getAppValue('side_menu', 'opener-position', 'before'),
|
'opener-position' => $this->config->getAppValue('side_menu', 'opener-position', 'before'),
|
||||||
'opener-hover' => (bool) $this->config->getAppValue('side_menu', 'opener-hover', '0'),
|
'opener-hover' => (bool) $this->config->getAppValue('side_menu', 'opener-hover', '0'),
|
||||||
@@ -70,8 +79,10 @@ class JsController extends Controller
|
|||||||
'force-light-icon' => (bool) $this->config->getAppValue('side_menu', 'force-light-icon', '0'),
|
'force-light-icon' => (bool) $this->config->getAppValue('side_menu', 'force-light-icon', '0'),
|
||||||
'hide-when-no-apps' => (bool) $this->config->getAppValue('side_menu', 'hide-when-no-apps', '0'),
|
'hide-when-no-apps' => (bool) $this->config->getAppValue('side_menu', 'hide-when-no-apps', '0'),
|
||||||
'loader-enabled' => (bool) $this->config->getAppValue('side_menu', 'loader-enabled', '1'),
|
'loader-enabled' => (bool) $this->config->getAppValue('side_menu', 'loader-enabled', '1'),
|
||||||
|
'always-displayed' => (bool) $this->config->getAppValue('side_menu', 'always-displayed', '0'),
|
||||||
'big-menu' => (bool) $this->config->getAppValue('side_menu', 'big-menu', '0'),
|
'big-menu' => (bool) $this->config->getAppValue('side_menu', 'big-menu', '0'),
|
||||||
'top-menu-apps' => $topMenuApps,
|
'top-menu-apps' => $topMenuApps,
|
||||||
|
'target-blank-apps' => $targetBlankApps,
|
||||||
];
|
];
|
||||||
|
|
||||||
$response = new TemplateResponse('side_menu', 'js/script', $parameters, 'blank');
|
$response = new TemplateResponse('side_menu', 'js/script', $parameters, 'blank');
|
||||||
|
|||||||
@@ -65,6 +65,29 @@ class PersonalSettingController extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ('target-blank-mode' === $name) {
|
||||||
|
$doSave = true;
|
||||||
|
|
||||||
|
if (!in_array($value, ['1', '2'])) {
|
||||||
|
$value = '1';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ('target-blank-apps' === $name) {
|
||||||
|
$doSave = true;
|
||||||
|
$data = json_decode($value, true);
|
||||||
|
|
||||||
|
if (!is_array($data)) {
|
||||||
|
$doSave = false;
|
||||||
|
} else {
|
||||||
|
foreach ($data as $v) {
|
||||||
|
if (!is_string($v)) {
|
||||||
|
$doSave = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ('top-menu-apps' === $name) {
|
if ('top-menu-apps' === $name) {
|
||||||
$doSave = true;
|
$doSave = true;
|
||||||
$data = json_decode($value, true);
|
$data = json_decode($value, true);
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ class Admin implements ISettings
|
|||||||
'text-color' => $this->config->getAppValue('side_menu', 'text-color', '#FFFFFF'),
|
'text-color' => $this->config->getAppValue('side_menu', 'text-color', '#FFFFFF'),
|
||||||
'cache' => $this->config->getAppValue('side_menu', 'cache', '0'),
|
'cache' => $this->config->getAppValue('side_menu', 'cache', '0'),
|
||||||
'opener' => $this->config->getAppValue('side_menu', 'opener', 'side-menu-opener'),
|
'opener' => $this->config->getAppValue('side_menu', 'opener', 'side-menu-opener'),
|
||||||
|
'always-displayed' => $this->config->getAppValue('side_menu', 'always-displayed', '0'),
|
||||||
'big-menu' => $this->config->getAppValue('side_menu', 'big-menu', '0'),
|
'big-menu' => $this->config->getAppValue('side_menu', 'big-menu', '0'),
|
||||||
'display-logo' => $this->config->getAppValue('side_menu', 'display-logo', '1'),
|
'display-logo' => $this->config->getAppValue('side_menu', 'display-logo', '1'),
|
||||||
'opener-position' => $this->config->getAppValue('side_menu', 'opener-position', 'before'),
|
'opener-position' => $this->config->getAppValue('side_menu', 'opener-position', 'before'),
|
||||||
@@ -82,6 +83,7 @@ class Admin implements ISettings
|
|||||||
'hide-when-no-apps' => $this->config->getAppValue('side_menu', 'hide-when-no-apps', '0'),
|
'hide-when-no-apps' => $this->config->getAppValue('side_menu', 'hide-when-no-apps', '0'),
|
||||||
'size-icon' => $this->config->getAppValue('side_menu', 'size-icon', 'normal'),
|
'size-icon' => $this->config->getAppValue('side_menu', 'size-icon', 'normal'),
|
||||||
'size-text' => $this->config->getAppValue('side_menu', 'size-text', 'normal'),
|
'size-text' => $this->config->getAppValue('side_menu', 'size-text', 'normal'),
|
||||||
|
'target-blank-apps' => (array) json_decode($this->config->getAppValue('side_menu', 'target-blank-apps', '[]'), true),
|
||||||
'top-menu-apps' => (array) json_decode($this->config->getAppValue('side_menu', 'top-menu-apps', '[]'), true),
|
'top-menu-apps' => (array) json_decode($this->config->getAppValue('side_menu', 'top-menu-apps', '[]'), true),
|
||||||
'apps' => $this->appRepository->getVisibleApps(),
|
'apps' => $this->appRepository->getVisibleApps(),
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -72,6 +72,8 @@ class Personal implements ISettings
|
|||||||
$parameters = [
|
$parameters = [
|
||||||
'enabled' => $this->config->getUserValue($user->getUid(), 'side_menu', 'enabled', '1'),
|
'enabled' => $this->config->getUserValue($user->getUid(), 'side_menu', 'enabled', '1'),
|
||||||
'top-menu-apps' => (array) json_decode($this->config->getUserValue($user->getUid(), 'side_menu', 'top-menu-apps', '[]'), true),
|
'top-menu-apps' => (array) json_decode($this->config->getUserValue($user->getUid(), 'side_menu', 'top-menu-apps', '[]'), true),
|
||||||
|
'target-blank-mode' => $this->config->getUserValue($user->getUid(), 'side_menu', 'target-blank-mode', '1'),
|
||||||
|
'target-blank-apps' => (array) json_decode($this->config->getUserValue($user->getUid(), 'side_menu', 'target-blank-apps', '[]'), true),
|
||||||
'apps' => $this->appRepository->getVisibleApps(),
|
'apps' => $this->appRepository->getVisibleApps(),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
|
After Width: | Height: | Size: 137 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 485 KiB |
|
After Width: | Height: | Size: 58 KiB |
@@ -26,7 +26,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
<ul class="side-menu-apps-list">
|
<ul class="side-menu-apps-list">
|
||||||
<li v-for="app in apps" v-bind:class="{'side-menu-app': true, 'active': app.active}">
|
<li v-for="app in apps" v-bind:class="{'side-menu-app': true, 'active': app.active}">
|
||||||
<a v-bind:href="app.href" v-bind:title="app.name">
|
<a v-bind:href="app.href" :target="targetBlankApps.indexOf(app.id) !== -1 ? '_blank' : undefined" v-bind:title="app.name">
|
||||||
<span class="side-menu-app-icon" v-html="app.icon"></span>
|
<span class="side-menu-app-icon" v-html="app.icon"></span>
|
||||||
<span class="side-menu-app-text" v-html="app.name"></span>
|
<span class="side-menu-app-text" v-html="app.name"></span>
|
||||||
</a>
|
</a>
|
||||||
@@ -45,6 +45,7 @@ export default {
|
|||||||
apps: [],
|
apps: [],
|
||||||
logo: null,
|
logo: null,
|
||||||
forceLightIcon: false,
|
forceLightIcon: false,
|
||||||
|
targetBlank: false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -86,6 +87,7 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.apps.push({
|
this.apps.push({
|
||||||
|
id: dataId,
|
||||||
href: href,
|
href: href,
|
||||||
name: trim(element.querySelector('span').innerHTML),
|
name: trim(element.querySelector('span').innerHTML),
|
||||||
icon: svg,
|
icon: svg,
|
||||||
@@ -119,6 +121,7 @@ export default {
|
|||||||
this.retrieveApps()
|
this.retrieveApps()
|
||||||
this.retrieveLogo()
|
this.retrieveLogo()
|
||||||
this.forceLightIcon = document.querySelector('#side-menu-container').getAttribute('data-forcelighticon') == 1;
|
this.forceLightIcon = document.querySelector('#side-menu-container').getAttribute('data-forcelighticon') == 1;
|
||||||
|
this.targetBlankApps = document.querySelector('#side-menu-container').getAttribute('data-targetblankapps').split(',');
|
||||||
|
|
||||||
const menu = document.querySelector('#appmenu')
|
const menu = document.querySelector('#appmenu')
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
<ul class="side-menu-apps-list">
|
<ul class="side-menu-apps-list">
|
||||||
<li v-bind:class="{'side-menu-app': true, 'active': activeApp === appId}" v-for="(app, appId) in category.apps">
|
<li v-bind:class="{'side-menu-app': true, 'active': activeApp === appId}" v-for="(app, appId) in category.apps">
|
||||||
<a v-bind:href="app.href" v-bind:title="app.name">
|
<a v-bind:href="app.href" :target="targetBlankApps.indexOf(appId) !== -1 ? '_blank' : undefined" v-bind:title="app.name">
|
||||||
<img class="side-menu-app-icon" v-bind:src="app.icon"></span>
|
<img class="side-menu-app-icon" v-bind:src="app.icon"></span>
|
||||||
<span class="side-menu-app-text" v-html="app.name"></span>
|
<span class="side-menu-app-text" v-html="app.name"></span>
|
||||||
</a>
|
</a>
|
||||||
@@ -50,6 +50,7 @@ export default {
|
|||||||
return {
|
return {
|
||||||
items: [],
|
items: [],
|
||||||
activeApp: null,
|
activeApp: null,
|
||||||
|
targetBlank: false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -79,6 +80,8 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
this.targetBlankApps = document.querySelector('#side-menu-container').getAttribute('data-targetblankapps').split(',');
|
||||||
|
|
||||||
this.retrieveApps()
|
this.retrieveApps()
|
||||||
this.retrieveActiveApp()
|
this.retrieveActiveApp()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,9 +35,9 @@ const saveSettings = (key) => {
|
|||||||
let value
|
let value
|
||||||
let name
|
let name
|
||||||
|
|
||||||
if ($(element).is('[data-checkbox]')) {
|
if (jQuery(element).is('[data-checkbox]')) {
|
||||||
name = $(element).attr('data-name')
|
name = jQuery(element).attr('data-name')
|
||||||
const inputs = $('input[name="' + name + '[]"]:checked')
|
const inputs = jQuery('input[name="' + name + '[]"]:checked')
|
||||||
value = []
|
value = []
|
||||||
|
|
||||||
inputs.each((i, v) => {
|
inputs.each((i, v) => {
|
||||||
@@ -46,8 +46,8 @@ const saveSettings = (key) => {
|
|||||||
|
|
||||||
value = JSON.stringify(value)
|
value = JSON.stringify(value)
|
||||||
} else {
|
} else {
|
||||||
name = $(element).attr('name')
|
name = jQuery(element).attr('name')
|
||||||
value = $(element).val()
|
value = jQuery(element).val()
|
||||||
}
|
}
|
||||||
|
|
||||||
const size = elements.length
|
const size = elements.length
|
||||||
@@ -74,20 +74,59 @@ const saveSettings = (key) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($(element).is('[data-personal]')) {
|
if (jQuery(element).is('[data-personal]')) {
|
||||||
userConfig(name, value, callbacks)
|
userConfig(name, value, callbacks)
|
||||||
} else {
|
} else {
|
||||||
appConfig(name, value, callbacks)
|
appConfig(name, value, callbacks)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$(document).ready(() => {
|
const elementToggler = (element) => {
|
||||||
elements = $('.side-menu-setting')
|
jQuery(element).toggle()
|
||||||
|
}
|
||||||
|
|
||||||
$('#side-menu-save').on('click', (event) => {
|
jQuery(document).ready(() => {
|
||||||
|
elements = jQuery('.side-menu-setting')
|
||||||
|
|
||||||
|
jQuery('#side-menu-save').on('click', (event) => {
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
OC.msg.startSaving(selector)
|
OC.msg.startSaving(selector)
|
||||||
|
|
||||||
saveSettings(0)
|
saveSettings(0)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
jQuery('.side-menu-display').on('click', (event) => {
|
||||||
|
var target = jQuery(event.target)
|
||||||
|
|
||||||
|
jQuery('.side-menu-display').removeClass('is-active')
|
||||||
|
target.addClass('is-active')
|
||||||
|
|
||||||
|
jQuery('#side-menu-always-displayed').val(target.attr('data-alwaysdiplayed'))
|
||||||
|
jQuery('#side-menu-big-menu').val(target.attr('data-bigmenu'))
|
||||||
|
})
|
||||||
|
|
||||||
|
jQuery('.side-menu-setting-live').on('change', (event) => {
|
||||||
|
var target = jQuery(event.target)
|
||||||
|
var name = target.attr('name')
|
||||||
|
var value = target.val()
|
||||||
|
|
||||||
|
if (name === 'opener') {
|
||||||
|
var url = OC.generateUrl(`/apps/side_menu/img/${value}.svg`).replace('/index.php', '')
|
||||||
|
|
||||||
|
value = `url(${url})`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name === 'icon-invert-filter' || name === 'icon-opacity') {
|
||||||
|
value/=100;
|
||||||
|
}
|
||||||
|
|
||||||
|
document.documentElement.style.setProperty('--side-menu-' + name, value)
|
||||||
|
})
|
||||||
|
|
||||||
|
jQuery('.side-menu-toggler').on('click', (event) => {
|
||||||
|
var target = jQuery(event.target)
|
||||||
|
var element = target.attr('data-target')
|
||||||
|
|
||||||
|
elementToggler(element)
|
||||||
|
})
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
"Side menu": "Seitenmenü"
|
"Side menu": "Seitenmenü"
|
||||||
"Enable the side menu": "Aktivieren Sie das Seitenmenü"
|
"Enable the side menu": "Aktiviere das Seitenmenü"
|
||||||
"No": "Nein"
|
"No": "Nein"
|
||||||
"Yes": "Ja"
|
"Yes": "Ja"
|
||||||
"Menu": "Speisekarte"
|
"Menu": "Menü"
|
||||||
'Use the shortcut <span class="keyboard-key">Ctrl</span>+<span class="keyboard-key">o</span> to open and to hide the side menu. Use <span class="keyboard-key">tab</span> to navigate.': 'Verwenden Sie die Tastenkombination <span class="keyboard-key">Strg</span>+<span class="keyboard-key">o</span>, um das Seitenmenü zu öffnen und auszublenden. Verwenden Sie zum Navigieren die Registerkarte <span class="keyboard-key">tab</span>.'
|
'Use the shortcut <span class="keyboard-key">Ctrl</span>+<span class="keyboard-key">o</span> to open and to hide the side menu. Use <span class="keyboard-key">tab</span> to navigate.': 'Verwende die Tastenkombination <span class="keyboard-key">Strg</span>+<span class="keyboard-key">o</span>, um das Seitenmenü ein- und auszublenden. Verwende <span class="keyboard-key">tab</span> zum Navigieren.'
|
||||||
"Top menu": "Hauptmenü"
|
"Top menu": "Hauptmenü"
|
||||||
"Apps that not must be moved in the side menu": "Apps, die nicht im Seitenmenü verschoben werden müssen"
|
"Apps that not must be moved in the side menu": "Apps, die nicht ins Seitenmenü verschoben werden müssen"
|
||||||
"If there is no selection then the global configuration is applied.": "Wenn keine Auswahl vorhanden ist, wird die globale Konfiguration angewendet."
|
"If there is no selection then the global configuration is applied.": "Wenn keine Auswahl vorhanden ist, wird die globale Konfiguration angewendet."
|
||||||
"Experimental": "Experimental"
|
"Experimental": "Experimentell"
|
||||||
"Save": "Sparen"
|
"Save": "Speichern"
|
||||||
"You like this app and you want to support me?": "Du magst diese App und möchtest mich unterstützen?"
|
"You like this app and you want to support me?": "Du magst diese App und möchtest mich unterstützen?"
|
||||||
"Buy me a coffe ☕": "Gib mir einen Kaffee ☕"
|
"Buy me a coffee ☕": "Gib mir einen Kaffee ☕"
|
||||||
"Hidden": "Versteckt"
|
"Hidden": "Versteckt"
|
||||||
"Small": "Klein"
|
"Small": "Klein"
|
||||||
"Normal": "Normal"
|
"Normal": "Normal"
|
||||||
@@ -36,13 +36,23 @@
|
|||||||
"After the logo": "Nach dem Logo"
|
"After the logo": "Nach dem Logo"
|
||||||
"Position": "Position"
|
"Position": "Position"
|
||||||
"Show only the opener (hidden logo)": "Nur den Öffner anzeigen (verstecktes Logo)"
|
"Show only the opener (hidden logo)": "Nur den Öffner anzeigen (verstecktes Logo)"
|
||||||
"Do not display the side menu and the opener if there is no application (eg: public pages).": "Zeigen Sie das Seitenmenü und den Öffner nicht an, wenn keine Anwendung vorhanden ist (z. B. öffentliche Seiten)."
|
"Do not display the side menu and the opener if there is no application (eg: public pages).": "Zeige das Seitenmenü und den Öffner nicht an, wenn keine Anwendung vorhanden ist (z.B. bei öffentlichen Seiten)."
|
||||||
"Panel": "Panel"
|
"Panel": "Panel"
|
||||||
"Open the menu when the mouse is hover the opener (automatically disabled on touch screens)": "Öffnen Sie das Menü, wenn Sie die Maus über den Öffner bewegen (auf Touchscreens automatisch deaktiviert)."
|
"Open the menu when the mouse is hover the opener (automatically disabled on touch screens)": "Öffne das Menü, wenn die Maus über den Öffner bewegt wird (auf Touchscreens automatisch deaktiviert)."
|
||||||
"Display the big menu": "Großes Menü anzeigen"
|
"Display the big menu": "Großes Menü anzeigen"
|
||||||
"The big menu is not compatible with AppOrder.": "Le menu large n'est pas compatible avec l'application AppOrder"
|
"The big menu is not compatible with AppOrder.": "Das große Menü ist nicht mit AppOrder kompatibel."
|
||||||
"Display the logo": "Logo anzeigen"
|
"Display the logo": "Logo anzeigen"
|
||||||
"This feature is not compatible with the <code>big menu</code> display.": "Diese Funktion ist nicht mit der großen Menüanzeige kompatibel."
|
"This feature is not compatible with the <code>big menu</code> display.": "Diese Funktion ist nicht mit <code>großes Menü</code> kompatibel."
|
||||||
"Icons and texts": "Symbole und Texte"
|
"Icons and texts": "Symbole und Texte"
|
||||||
"Loader enabled": "Loader aktiviert"
|
"Loader enabled": "Loader aktiviert"
|
||||||
"Tips": "Tipps"
|
"Tips": "Tipps"
|
||||||
|
"Always displayed": "Wird immer angezeigt"
|
||||||
|
"The logo will be hidden when the menu is always displayed.": "Das Logo wird ausgeblendet, wenn das Menü immer angezeigt wird."
|
||||||
|
"This is the automatic behavior when the menu is always displayed.": "Dies ist das automatische Verhalten, wenn das Menü immer angezeigt wird."
|
||||||
|
"Not compatible with touch screens.": "Nicht kompatibel mit Touchscreens."
|
||||||
|
"Big menu": "Großes Menü"
|
||||||
|
"Live preview": "Live Vorschau"
|
||||||
|
"Open apps in new tab": "Öffne Apps in einem neuen Tab"
|
||||||
|
"Use the global setting": "Verwende die globale Einstellung"
|
||||||
|
"Use my selection": "Verwende meine Auswahl"
|
||||||
|
"Show and hide the list of applications": "Ein- und Ausblenden der Anwendungsliste"
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
"Experimental": "Expérimental"
|
"Experimental": "Expérimental"
|
||||||
"Save": "Sauvegarder"
|
"Save": "Sauvegarder"
|
||||||
"You like this app and you want to support me?": "Vous aimer cette application et vous souhaitez m'aider ?"
|
"You like this app and you want to support me?": "Vous aimer cette application et vous souhaitez m'aider ?"
|
||||||
"Buy me a coffe ☕": "Offrez moi un café ☕"
|
"Buy me a coffee ☕": "Offrez moi un café ☕"
|
||||||
"Hidden": "Caché"
|
"Hidden": "Caché"
|
||||||
"Small": "Petit"
|
"Small": "Petit"
|
||||||
"Normal": "Normal"
|
"Normal": "Normal"
|
||||||
@@ -46,3 +46,13 @@
|
|||||||
"Icons and texts": "Icônes et textes"
|
"Icons and texts": "Icônes et textes"
|
||||||
"Loader enabled": "Activation de l'indicateur de chargement"
|
"Loader enabled": "Activation de l'indicateur de chargement"
|
||||||
"Tips": "Astuces"
|
"Tips": "Astuces"
|
||||||
|
"Always displayed": "Toujours affiché"
|
||||||
|
"The logo will be hidden when the menu is always displayed.": "Le logo sera masque si le menu est toujours affiché."
|
||||||
|
"This is the automatic behavior when the menu is always displayed.": "C'est le comportement automatique lorsque le menu est toujours affiché."
|
||||||
|
"Not compatible with touch screens.": "Incompatible avec les écrans tactiles."
|
||||||
|
"Big menu": "Menu large"
|
||||||
|
"Live preview": "Aperçu en direct"
|
||||||
|
"Open apps in new tab": "Ouvrir les applications dans un nouvel onglet"
|
||||||
|
"Use the global setting": "Utiliser la configuration globale"
|
||||||
|
"Use my selection": "Utiliser ma sélection"
|
||||||
|
"Show and hide the list of applications": "Afficher et masquer la liste des applications"
|
||||||
|
|||||||
@@ -22,13 +22,13 @@
|
|||||||
}
|
}
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<?php if ($_['opener-only'] === true): ?>
|
<?php if ($_['opener-only']): ?>
|
||||||
#nextcloud {
|
#nextcloud {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<?php if ($_['display-logo'] === false): ?>
|
<?php if (!$_['display-logo']): ?>
|
||||||
.side-menu-logo {
|
.side-menu-logo {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
var alwaysDisplayed = function() {
|
||||||
|
var elements = document.querySelectorAll('*');
|
||||||
|
var fixedElements = []
|
||||||
|
|
||||||
|
for (var i in elements) {
|
||||||
|
var element = elements[i]
|
||||||
|
|
||||||
|
if (typeof element !== 'object') {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var position = window.getComputedStyle(element, null).getPropertyValue('position');
|
||||||
|
|
||||||
|
if (position !== 'fixed') {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var id = element.getAttribute('id')
|
||||||
|
|
||||||
|
if (id === 'header' || id === 'side-menu' || id === 'side-menu-loader') {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if (element.classList.contains('oc-dialog')) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jQuery(element).parents('#side-menu').length) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
fixedElements.push(element)
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i in fixedElements) {
|
||||||
|
var element = fixedElements[i]
|
||||||
|
var value = window.getComputedStyle(element, null).getPropertyValue('left')
|
||||||
|
var intValue = parseInt(value.replace('px', ''))
|
||||||
|
|
||||||
|
element.style.setProperty('transform', 'translateX(' + (intValue + 50) + 'px)')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
alwaysDisplayed()
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
var pageLoader = $('<div id="side-menu-loader">')
|
var pageLoader = jQuery('<div id="side-menu-loader">')
|
||||||
var pageLoaderBar = $('<div id="side-menu-loader-bar">')
|
var pageLoaderBar = jQuery('<div id="side-menu-loader-bar">')
|
||||||
|
|
||||||
body.append(pageLoader)
|
body.append(pageLoader)
|
||||||
pageLoader.append(pageLoaderBar)
|
pageLoader.append(pageLoaderBar)
|
||||||
|
|||||||
@@ -2,16 +2,16 @@ var menuCache = null
|
|||||||
|
|
||||||
var updateTopMenu = function() {
|
var updateTopMenu = function() {
|
||||||
var breakpointMobileWidth = 1024
|
var breakpointMobileWidth = 1024
|
||||||
var menu = $('#appmenu')
|
var menu = jQuery('#appmenu')
|
||||||
var apps = menu.find('li')
|
var apps = menu.find('li')
|
||||||
var minAppsDesktop = 8
|
var minAppsDesktop = 8
|
||||||
var usePercentualAppMenuLimit = 0.8
|
var usePercentualAppMenuLimit = 0.8
|
||||||
var isMobile = $(window).width() < breakpointMobileWidth
|
var isMobile = jQuery(window).width() < breakpointMobileWidth
|
||||||
var lastShownApp = null
|
var lastShownApp = null
|
||||||
var appShown = []
|
var appShown = []
|
||||||
var moreApps = $('#more-apps')
|
var moreApps = jQuery('#more-apps')
|
||||||
var navigation = $('#navigation')
|
var navigation = jQuery('#navigation')
|
||||||
var navigationApps = $('#apps ul')
|
var navigationApps = jQuery('#apps ul')
|
||||||
var appCount = null
|
var appCount = null
|
||||||
|
|
||||||
var currentMenuCache = menu.html() + menu.next().html()
|
var currentMenuCache = menu.html() + menu.next().html()
|
||||||
@@ -38,19 +38,23 @@ var updateTopMenu = function() {
|
|||||||
appShown.push(app)
|
appShown.push(app)
|
||||||
navigationApps.append(app.outerHTML)
|
navigationApps.append(app.outerHTML)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (targetBlankApps.indexOf(dataId) !== -1) {
|
||||||
|
jQuery(app).children('a').attr('target', '_blank');
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
var rightHeaderWidth = $('.header-right').outerWidth()
|
var rightHeaderWidth = jQuery('.header-right').outerWidth()
|
||||||
var headerWidth = $('header').outerWidth()
|
var headerWidth = jQuery('header').outerWidth()
|
||||||
var availableWidth = headerWidth - $('#nextcloud').outerWidth()
|
var availableWidth = headerWidth - jQuery('#nextcloud').outerWidth()
|
||||||
- $('#header .side-menu-opener').outerWidth()
|
- jQuery('#header .side-menu-opener').outerWidth()
|
||||||
- (rightHeaderWidth > 230 ? rightHeaderWidth : 230)
|
- (rightHeaderWidth > 230 ? rightHeaderWidth : 230)
|
||||||
|
|
||||||
if (!isMobile) {
|
if (!isMobile) {
|
||||||
availableWidth = availableWidth * usePercentualAppMenuLimit
|
availableWidth = availableWidth * usePercentualAppMenuLimit
|
||||||
}
|
}
|
||||||
|
|
||||||
appCount = Math.floor(availableWidth / $('#appmenu li').width())
|
appCount = Math.floor(availableWidth / jQuery('#appmenu li').width())
|
||||||
|
|
||||||
if (isMobile && appCount > minAppsDesktop) {
|
if (isMobile && appCount > minAppsDesktop) {
|
||||||
appCount = minAppsDesktop
|
appCount = minAppsDesktop
|
||||||
@@ -75,27 +79,27 @@ var updateTopMenu = function() {
|
|||||||
var notInHeader = 0
|
var notInHeader = 0
|
||||||
var name
|
var name
|
||||||
|
|
||||||
$(appShown).each(function(i, app) {
|
jQuery(appShown).each(function(i, app) {
|
||||||
app = $(app)
|
app = jQuery(app)
|
||||||
name = app.data('id')
|
name = app.data('id')
|
||||||
|
|
||||||
if (k < appCount && appCount > 0) {
|
if (k < appCount && appCount > 0) {
|
||||||
app.removeClass('hidden')
|
app.removeClass('hidden')
|
||||||
lastShownApp = app
|
lastShownApp = app
|
||||||
|
|
||||||
$('#apps li[data-id=' + name + '].app-external-site').addClass('in-header')
|
jQuery('#apps li[data-id=' + name + '].app-external-site').addClass('in-header')
|
||||||
} else {
|
} else {
|
||||||
app.addClass('hidden')
|
app.addClass('hidden')
|
||||||
notInHeader++
|
notInHeader++
|
||||||
|
|
||||||
$('#apps li[data-id=' + name + '].app-external-site').removeClass('in-header')
|
jQuery('#apps li[data-id=' + name + '].app-external-site').removeClass('in-header')
|
||||||
|
|
||||||
if (appCount > 0 && app.children('a').hasClass('active')) {
|
if (appCount > 0 && app.children('a').hasClass('active')) {
|
||||||
lastShownApp.addClass('hidden')
|
lastShownApp.addClass('hidden')
|
||||||
app.removeClass('hidden')
|
app.removeClass('hidden')
|
||||||
notInHeader++
|
notInHeader++
|
||||||
|
|
||||||
$('#apps li[data-id=' + name + '].app-external-site')
|
jQuery('#apps li[data-id=' + name + '].app-external-site')
|
||||||
.removeClass('in-header')
|
.removeClass('in-header')
|
||||||
.addClass('in-header')
|
.addClass('in-header')
|
||||||
}
|
}
|
||||||
@@ -104,8 +108,8 @@ var updateTopMenu = function() {
|
|||||||
k++
|
k++
|
||||||
})
|
})
|
||||||
|
|
||||||
$('#apps li.app-external-site').each(function(i, app) {
|
jQuery('#apps li.app-external-site').each(function(i, app) {
|
||||||
app = $(app)
|
app = jQuery(app)
|
||||||
var appId = app.attr('data-id')
|
var appId = app.attr('data-id')
|
||||||
|
|
||||||
if (app.hasClass('in-header')) {
|
if (app.hasClass('in-header')) {
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
(function() {
|
(function() {
|
||||||
var sideMenuContainer = $('<div id="side-menu-container">')
|
var sideMenuContainer = jQuery('<div id="side-menu-container">')
|
||||||
var sideMenuOpener = $('<button class="side-menu-opener"></button>')
|
var sideMenuOpener = jQuery('<button class="side-menu-opener"></button>')
|
||||||
var sideMenu = $('<div id="side-menu">')
|
var sideMenu = jQuery('<div id="side-menu">')
|
||||||
var body = $('body')
|
var body = jQuery('body')
|
||||||
|
var html = jQuery('html')
|
||||||
var isTouchDevice = window.matchMedia("(pointer: coarse)").matches
|
var isTouchDevice = window.matchMedia("(pointer: coarse)").matches
|
||||||
|
|
||||||
<?php if ($_['big-menu']): ?>
|
<?php if ($_['big-menu']): ?>
|
||||||
@@ -13,24 +14,46 @@
|
|||||||
sideMenuContainer.attr('data-forcelighticon', '1')
|
sideMenuContainer.attr('data-forcelighticon', '1')
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
|
sideMenuContainer.attr('data-targetblankapps', '<?php p(implode(',', $_['target-blank-apps'])) ?>')
|
||||||
|
|
||||||
|
var targetBlankApps = <?php echo json_encode($_['target-blank-apps']) ?>;
|
||||||
|
|
||||||
body.on('side-menu.apps', function(e, apps) {
|
body.on('side-menu.apps', function(e, apps) {
|
||||||
<?php if ($_['hide-when-no-apps']): ?>
|
<?php if ($_['hide-when-no-apps']): ?>
|
||||||
sideMenu = $('#side-menu')
|
sideMenu = jQuery('#side-menu')
|
||||||
|
|
||||||
if (apps.length === 0) {
|
if (apps.length === 0) {
|
||||||
sideMenu.removeClass('open')
|
sideMenu.removeClass('open')
|
||||||
|
sideMenu.addClass('hide')
|
||||||
sideMenuOpener.addClass('hide')
|
sideMenuOpener.addClass('hide')
|
||||||
} else {
|
} else {
|
||||||
|
sideMenu.removeClass('hide')
|
||||||
sideMenuOpener.removeClass('hide')
|
sideMenuOpener.removeClass('hide')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<?php if ($_['always-displayed'] && !$_['big-menu']): ?>
|
||||||
|
if (apps.length === 0) {
|
||||||
|
html.removeClass('side-menu-always-displayed');
|
||||||
|
} else {
|
||||||
|
html.addClass('side-menu-always-displayed');
|
||||||
|
}
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php else: ?>
|
||||||
|
<?php if ($_['always-displayed'] && !$_['big-menu']): ?>
|
||||||
|
if (apps.length === 0) {
|
||||||
|
html.removeClass('side-menu-always-displayed');
|
||||||
|
} else {
|
||||||
|
html.addClass('side-menu-always-displayed');
|
||||||
|
}
|
||||||
|
<?php endif; ?>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
})
|
})
|
||||||
|
|
||||||
body.on('side-menu.ready', function() {
|
body.on('side-menu.ready', function() {
|
||||||
sideMenu = $('#side-menu')
|
sideMenu = jQuery('#side-menu')
|
||||||
|
|
||||||
var headerMenuOpener = $('#header .side-menu-opener')
|
var headerMenuOpener = jQuery('#header .side-menu-opener')
|
||||||
var sideMenuOpener = $('#side-menu .side-menu-opener')
|
var sideMenuOpener = jQuery('#side-menu .side-menu-opener')
|
||||||
|
|
||||||
sideMenuFocus = function() {
|
sideMenuFocus = function() {
|
||||||
var a = sideMenu.find('.side-menu-app.active a')
|
var a = sideMenu.find('.side-menu-app.active a')
|
||||||
@@ -44,7 +67,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<?php if ($_['opener-hover']): ?>
|
<?php if ($_['opener-hover'] || ($_['always-displayed'] && !$_['big-menu'])): ?>
|
||||||
var sideMenuMouseLeave = function() {
|
var sideMenuMouseLeave = function() {
|
||||||
sideMenu
|
sideMenu
|
||||||
.removeClass('open')
|
.removeClass('open')
|
||||||
@@ -64,9 +87,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!isTouchDevice) {
|
if (!isTouchDevice) {
|
||||||
headerMenuOpener.on('mouseenter', sideMenuOpenerMouseEnter)
|
<?php if ($_['opener-hover']): ?>
|
||||||
|
headerMenuOpener.on('mouseenter', sideMenuOpenerMouseEnter)
|
||||||
|
|
||||||
sideMenu.addClass('hide-opener')
|
sideMenu.addClass('hide-opener')
|
||||||
|
<?php else: ?>
|
||||||
|
sideMenu.on('mouseleave', sideMenuMouseLeave)
|
||||||
|
sideMenu.on('mouseenter', sideMenuOpenerMouseEnter)
|
||||||
|
<?php endif ?>
|
||||||
}
|
}
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
@@ -75,11 +103,17 @@
|
|||||||
sideMenu.find('.side-menu-app.active a').focus()
|
sideMenu.find('.side-menu-app.active a').focus()
|
||||||
})
|
})
|
||||||
|
|
||||||
sideMenuOpener.on('click', function() {
|
<?php if ($_['always-displayed'] && !$_['big-menu']): ?>
|
||||||
sideMenu.removeClass('open')
|
sideMenuOpener.on('click', function() {
|
||||||
})
|
sideMenu.toggleClass('open')
|
||||||
|
})
|
||||||
|
<?php else: ?>
|
||||||
|
sideMenuOpener.on('click', function() {
|
||||||
|
sideMenu.removeClass('open')
|
||||||
|
})
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
$(document).keydown(function(e) {
|
jQuery(document).keydown(function(e) {
|
||||||
var key = e.key || e.keyCode
|
var key = e.key || e.keyCode
|
||||||
|
|
||||||
if ((key === 'o' || key === 79) && e.ctrlKey === true) {
|
if ((key === 'o' || key === 79) && e.ctrlKey === true) {
|
||||||
@@ -109,4 +143,8 @@
|
|||||||
|
|
||||||
<?php require_once __DIR__.'/_topMenuApps.js'; ?>
|
<?php require_once __DIR__.'/_topMenuApps.js'; ?>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<?php if ($_['always-displayed'] && !$_['big-menu']): ?>
|
||||||
|
<?php require_once __DIR__.'/_alwaysDisplayed.js'; ?>
|
||||||
|
<?php endif; ?>
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ $choicesSizes = [
|
|||||||
<div class="section">
|
<div class="section">
|
||||||
<h2>
|
<h2>
|
||||||
<?php p($l->t('Colors')); ?>
|
<?php p($l->t('Colors')); ?>
|
||||||
|
|
||||||
|
<small><span class="info"><?php p($l->t('Live preview')); ?></span></small>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
@@ -49,13 +51,13 @@ $choicesSizes = [
|
|||||||
id="side-menu-background-color"
|
id="side-menu-background-color"
|
||||||
name="background-color"
|
name="background-color"
|
||||||
type="color"
|
type="color"
|
||||||
class="side-menu-setting"
|
class="side-menu-setting side-menu-setting-live"
|
||||||
value="<?php print_unescaped($_['background-color']); ?>">
|
value="<?php print_unescaped($_['background-color']); ?>">
|
||||||
<input
|
<input
|
||||||
id="side-menu-background-color-to"
|
id="side-menu-background-color-to"
|
||||||
name="background-color-to"
|
name="background-color-to"
|
||||||
type="color"
|
type="color"
|
||||||
class="side-menu-setting"
|
class="side-menu-setting side-menu-setting-live"
|
||||||
value="<?php print_unescaped($_['background-color-to']); ?>">
|
value="<?php print_unescaped($_['background-color-to']); ?>">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -69,7 +71,7 @@ $choicesSizes = [
|
|||||||
id="side-menu-current-app-background-color"
|
id="side-menu-current-app-background-color"
|
||||||
name="current-app-background-color"
|
name="current-app-background-color"
|
||||||
type="color"
|
type="color"
|
||||||
class="side-menu-setting"
|
class="side-menu-setting side-menu-setting-live"
|
||||||
value="<?php print_unescaped($_['current-app-background-color']); ?>">
|
value="<?php print_unescaped($_['current-app-background-color']); ?>">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -83,7 +85,7 @@ $choicesSizes = [
|
|||||||
id="side-menu-text-color"
|
id="side-menu-text-color"
|
||||||
name="text-color"
|
name="text-color"
|
||||||
type="color"
|
type="color"
|
||||||
class="side-menu-setting"
|
class="side-menu-setting side-menu-setting-live"
|
||||||
value="<?php print_unescaped($_['text-color']); ?>">
|
value="<?php print_unescaped($_['text-color']); ?>">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -117,7 +119,7 @@ $choicesSizes = [
|
|||||||
min="0" max="100"
|
min="0" max="100"
|
||||||
id="side-menu-icon-invert-filter"
|
id="side-menu-icon-invert-filter"
|
||||||
name="icon-invert-filter"
|
name="icon-invert-filter"
|
||||||
class="side-menu-setting"
|
class="side-menu-setting side-menu-setting-live"
|
||||||
value="<?php echo $_['icon-invert-filter'] ?>"
|
value="<?php echo $_['icon-invert-filter'] ?>"
|
||||||
>
|
>
|
||||||
|
|
||||||
@@ -136,7 +138,7 @@ $choicesSizes = [
|
|||||||
min="0" max="100"
|
min="0" max="100"
|
||||||
id="side-menu-icon-opacity"
|
id="side-menu-icon-opacity"
|
||||||
name="icon-opacity"
|
name="icon-opacity"
|
||||||
class="side-menu-setting"
|
class="side-menu-setting side-menu-setting-live"
|
||||||
value="<?php echo $_['icon-opacity'] ?>"
|
value="<?php echo $_['icon-opacity'] ?>"
|
||||||
>
|
>
|
||||||
|
|
||||||
@@ -165,11 +167,13 @@ $choicesSizes = [
|
|||||||
<div>
|
<div>
|
||||||
<label for="side-menu-opener">
|
<label for="side-menu-opener">
|
||||||
<?php p($l->t('Icon')); ?>
|
<?php p($l->t('Icon')); ?>
|
||||||
|
|
||||||
|
<small><span class="info"><?php p($l->t('Live preview')); ?></span></small>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<select id="side-menu-opener" name="opener" class="side-menu-setting">
|
<select id="side-menu-opener" name="opener" class="side-menu-setting side-menu-setting-live">
|
||||||
<?php foreach ($choices as $label => $value): ?>
|
<?php foreach ($choices as $label => $value): ?>
|
||||||
<option value="<?php echo $value ?>" <?php if ($value === $_['opener']): ?>selected<?php endif; ?>>
|
<option value="<?php echo $value ?>" <?php if ($value === $_['opener']): ?>selected<?php endif; ?>>
|
||||||
<?php echo $l->t($label); ?>
|
<?php echo $l->t($label); ?>
|
||||||
@@ -239,15 +243,75 @@ $choicesSizes = [
|
|||||||
<?php p($l->t('Panel')); ?>
|
<?php p($l->t('Panel')); ?>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label>
|
||||||
|
<?php p($l->t('Default')); ?>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$displays = [
|
||||||
|
'default' => !$_['always-displayed'] && !$_['big-menu'],
|
||||||
|
'always-displayed' => $_['always-displayed'] && !$_['big-menu'],
|
||||||
|
'big-menu' => $_['big-menu'],
|
||||||
|
];
|
||||||
|
?>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<img
|
||||||
|
class="side-menu-display <?php echo $displays['default'] ? 'is-active' : '' ?>"
|
||||||
|
data-alwaysdiplayed="0"
|
||||||
|
data-bigmenu="0"
|
||||||
|
src="<?php print_unescaped(image_path('side_menu', 'admin/layout-default.svg')); ?>" alt="<?php p($l->t('Default')); ?>">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label for="side-menu-opener">
|
||||||
|
<?php p($l->t('Big menu')); ?>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p><em><?php p($l->t('The big menu is not compatible with AppOrder.')); ?></em></p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<img
|
||||||
|
class="side-menu-display <?php echo $displays['big-menu'] ? 'is-active' : '' ?>"
|
||||||
|
data-alwaysdiplayed="0"
|
||||||
|
data-bigmenu="1"
|
||||||
|
src="<?php print_unescaped(image_path('side_menu', 'admin/layout-big-menu.svg')); ?>" alt="<?php p($l->t('Big menu')); ?>">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label for="side-menu-opener">
|
||||||
|
<?php p($l->t('Always displayed')); ?>
|
||||||
|
<small><span class="warning"><?php p($l->t('Experimental')); ?></span></small>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p><em><?php p($l->t('Not compatible with touch screens.')); ?></em></p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<img
|
||||||
|
class="side-menu-display <?php echo $displays['always-displayed'] ? 'is-active' : '' ?>"
|
||||||
|
data-alwaysdiplayed="1"
|
||||||
|
data-bigmenu="0"
|
||||||
|
src="<?php print_unescaped(image_path('side_menu', 'admin/layout-always-displayed.svg')); ?>" alt="<?php p($l->t('Always displayed')); ?>">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<input type="hidden" class="side-menu-setting" name="always-displayed" id="side-menu-always-displayed" value="<?php echo (int) $_['always-displayed'] ?>">
|
||||||
|
<input type="hidden" class="side-menu-setting" name="big-menu" id="side-menu-big-menu" value="<?php echo (int) $_['big-menu'] ?>">
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<label for="side-menu-opener">
|
<label for="side-menu-opener">
|
||||||
<?php p($l->t('Open the menu when the mouse is hover the opener (automatically disabled on touch screens)')); ?>
|
<?php p($l->t('Open the menu when the mouse is hover the opener (automatically disabled on touch screens)')); ?>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>
|
<p><em><?php p($l->t('This is the automatic behavior when the menu is always displayed.')); ?></em></p>
|
||||||
<em><?php echo $l->t('Use the shortcut <span class="keyboard-key">Ctrl</span>+<span class="keyboard-key">o</span> to open and to hide the side menu. Use <span class="keyboard-key">tab</span> to navigate.'); ?></em>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<select id="side-menu-opener-hover" name="opener-hover" class="side-menu-setting">
|
<select id="side-menu-opener-hover" name="opener-hover" class="side-menu-setting">
|
||||||
@@ -259,33 +323,14 @@ $choicesSizes = [
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
|
||||||
<label for="side-menu-big-menu">
|
|
||||||
<?php p($l->t('Display the big menu')); ?>
|
|
||||||
|
|
||||||
<small><span class="warning"><?php p($l->t('Experimental')); ?></span></small>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p><em><?php p($l->t('The big menu is not compatible with AppOrder.')); ?></em></p>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<select id="side-menu-big-menu" name="big-menu" class="side-menu-setting">
|
|
||||||
<?php foreach ($choicesYesNo as $label => $value): ?>
|
|
||||||
<option value="<?php echo $value ?>" <?php if ($value === $_['big-menu']): ?>selected<?php endif; ?>>
|
|
||||||
<?php echo $l->t($label); ?>
|
|
||||||
</option>
|
|
||||||
<?php endforeach; ?>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<label for="side-menu-opener">
|
<label for="side-menu-opener">
|
||||||
<?php p($l->t('Display the logo')); ?>
|
<?php p($l->t('Display the logo')); ?>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p><em><?php p($l->t('This feature is not compatible with the <code>big menu</code> display.')); ?></em></p>
|
<p><em><?php echo $l->t('This feature is not compatible with the <code>big menu</code> display.'); ?></em></p>
|
||||||
|
<p><em><?php p($l->t('The logo will be hidden when the menu is always displayed.')); ?></em></p>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<select id="side-menu-display-logo" name="display-logo" class="side-menu-setting">
|
<select id="side-menu-display-logo" name="display-logo" class="side-menu-setting">
|
||||||
@@ -321,6 +366,38 @@ $choicesSizes = [
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label for="side-menu-target-blank">
|
||||||
|
<?php p($l->t('Open apps in new tab')); ?>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a class="side-menu-toggler" data-target="#target-blank-apps" href="#_">
|
||||||
|
🖱️ <?php p($l->t('Show and hide the list of applications')); ?>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="side-menu-setting" data-name="target-blank-apps" id="target-blank-apps" data-checkbox style="display: none">
|
||||||
|
<?php foreach ($_['apps'] as $app): ?>
|
||||||
|
<div>
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
name="target-blank-apps[]"
|
||||||
|
value="<?php echo $app['id'] ?>"
|
||||||
|
id="target-blank-app-<?php echo $app['id'] ?>"
|
||||||
|
<?php if (in_array($app['id'], $_['target-blank-apps'])): ?>checked<?php endif; ?>
|
||||||
|
/>
|
||||||
|
|
||||||
|
<label for="target-blank-app-<?php echo $app['id'] ?>">
|
||||||
|
<?php echo p($l->t($app['name'])); ?>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<label for="side-menu-loader-enabled">
|
<label for="side-menu-loader-enabled">
|
||||||
<?php p($l->t('Loader enabled')); ?>
|
<?php p($l->t('Loader enabled')); ?>
|
||||||
@@ -345,11 +422,16 @@ $choicesSizes = [
|
|||||||
<div>
|
<div>
|
||||||
<label for="side-menu-top-menu-apps">
|
<label for="side-menu-top-menu-apps">
|
||||||
<?php p($l->t('Apps that not must be moved in the side menu')); ?>
|
<?php p($l->t('Apps that not must be moved in the side menu')); ?>
|
||||||
<small><span class="warning">Experimental</span></small>
|
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="side-menu-setting" data-name="top-menu-apps" data-checkbox>
|
<p>
|
||||||
|
<a class="side-menu-toggler" data-target="#top-menu-apps" href="#_">
|
||||||
|
🖱️ <?php p($l->t('Show and hide the list of applications')); ?>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="side-menu-setting" data-name="top-menu-apps" id="top-menu-apps" data-checkbox style="display: none">
|
||||||
<?php foreach ($_['apps'] as $app): ?>
|
<?php foreach ($_['apps'] as $app): ?>
|
||||||
<div>
|
<div>
|
||||||
<input
|
<input
|
||||||
@@ -393,7 +475,7 @@ $choicesSizes = [
|
|||||||
|
|
||||||
<a style="margin-left: 10px" target="_blank" href="https://www.buymeacoffee.com/deblan">
|
<a style="margin-left: 10px" target="_blank" href="https://www.buymeacoffee.com/deblan">
|
||||||
<button>
|
<button>
|
||||||
<?php p($l->t('Buy me a coffe ☕')); ?>
|
<?php p($l->t('Buy me a coffee ☕')); ?>
|
||||||
</button>
|
</button>
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -52,6 +52,51 @@ $choicesYesNo = [
|
|||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label for="side-menu-target-blank">
|
||||||
|
<?php p($l->t('Open apps in new tab')); ?>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<?php $choices = [
|
||||||
|
'Use the global setting' => '1',
|
||||||
|
'Use my selection' => '2',
|
||||||
|
]; ?>
|
||||||
|
|
||||||
|
<select id="side-menu-loader-enabled" name="target-blank-mode" class="side-menu-setting" data-personal>
|
||||||
|
<?php foreach ($choices as $label => $value): ?>
|
||||||
|
<option value="<?php echo $value ?>" <?php if ($value === $_['target-blank-mode']): ?>selected<?php endif; ?>>
|
||||||
|
<?php echo $l->t($label); ?>
|
||||||
|
</option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a class="side-menu-toggler" data-target="#target-blank-apps" href="#_">
|
||||||
|
🖱️ <?php p($l->t('Show and hide the list of applications')); ?>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="side-menu-setting" data-name="target-blank-apps" id="target-blank-apps" data-personal data-checkbox style="display: none">
|
||||||
|
<?php foreach ($_['apps'] as $app): ?>
|
||||||
|
<div>
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
name="target-blank-apps[]"
|
||||||
|
value="<?php echo $app['id'] ?>"
|
||||||
|
id="target-blank-app-<?php echo $app['id'] ?>"
|
||||||
|
<?php if (in_array($app['id'], $_['target-blank-apps'])): ?>checked<?php endif; ?>
|
||||||
|
/>
|
||||||
|
|
||||||
|
<label for="target-blank-app-<?php echo $app['id'] ?>">
|
||||||
|
<?php echo p($l->t($app['name'])); ?>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="section">
|
<div class="section">
|
||||||
@@ -61,7 +106,6 @@ $choicesYesNo = [
|
|||||||
<div>
|
<div>
|
||||||
<label for="side-menu-top-menu-apps">
|
<label for="side-menu-top-menu-apps">
|
||||||
<?php p($l->t('Apps that not must be moved in the side menu')); ?>
|
<?php p($l->t('Apps that not must be moved in the side menu')); ?>
|
||||||
<small><span class="warning"><?php p($l->t('Experimental')); ?></span></small>
|
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -71,7 +115,13 @@ $choicesYesNo = [
|
|||||||
</em>
|
</em>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="side-menu-setting" data-name="top-menu-apps" data-checkbox data-personal>
|
<p>
|
||||||
|
<a class="side-menu-toggler" data-target="#top-menu-apps" href="#_">
|
||||||
|
🖱️ <?php p($l->t('Show and hide the list of applications')); ?>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="side-menu-setting" data-name="top-menu-apps" data-checkbox data-personal id="top-menu-apps" style="display: none">
|
||||||
<?php foreach ($_['apps'] as $app): ?>
|
<?php foreach ($_['apps'] as $app): ?>
|
||||||
<div>
|
<div>
|
||||||
<input
|
<input
|
||||||
@@ -103,7 +153,7 @@ $choicesYesNo = [
|
|||||||
|
|
||||||
<a style="margin-left: 10px" target="_blank" href="https://www.buymeacoffee.com/deblan">
|
<a style="margin-left: 10px" target="_blank" href="https://www.buymeacoffee.com/deblan">
|
||||||
<button>
|
<button>
|
||||||
<?php p($l->t('Buy me a coffe ☕')); ?>
|
<?php p($l->t('Buy me a coffee ☕')); ?>
|
||||||
</button>
|
</button>
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
|
|||||||