luci-theme-btmod: add package
@ -52,7 +52,8 @@ luci-app-scutclient source: [scutclient/luci-app-scutclient](https://github.com/
|
||||
luci-theme-Butterfly-dark source: [Leo-Jo-My/luci-theme-Butterfly-dark](https://github.com/Leo-Jo-My/luci-theme-Butterfly-dark).<br/>
|
||||
luci-theme-argon-mod source: [Leo-Jo-My/luci-theme-argon-mod](https://github.com/Leo-Jo-My/luci-theme-argon-mod).<br/>
|
||||
node-request source: [jerrykuku/node-request](https://github.com/jerrykuku/node-request).<br/>
|
||||
luci-app-jd-dailybonus source: [jerrykuku/luci-app-jd-dailybonus](https://github.com/jerrykuku/luci-app-jd-dailybonus).
|
||||
luci-app-jd-dailybonus source: [jerrykuku/luci-app-jd-dailybonus](https://github.com/jerrykuku/luci-app-jd-dailybonus).<br/>
|
||||
luci-theme-btmod source: [siropboy/luci-theme-btmod](https://github.com/siropboy/luci-theme-btmod).
|
||||
|
||||
## License
|
||||
### Depending on their own License.
|
||||
|
||||
14
package/ctcgfw/luci-theme-btmod/Makefile
Normal file
@ -0,0 +1,14 @@
|
||||
#
|
||||
# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=btmod Theme
|
||||
LUCI_DEPENDS:=
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
@ -0,0 +1,177 @@
|
||||
.main-nav {
|
||||
background: #3092c0;
|
||||
|
||||
background-image: -webkit-gradient(linear, to bottom, to top, color-stop(0%, #3298c8), color-stop(100%, #2e8cb8));
|
||||
background-image: -webkit-linear-gradient(to bottom, #3298c8, #2e8cb8);
|
||||
background-image: -moz-linear-gradient(to bottom, #3298c8, #2e8cb8);
|
||||
background-image: -o-linear-gradient(to bottom, #3298c8, #2e8cb8);
|
||||
background-image: linear-gradient(to bottom, #3298c8, #2e8cb8);
|
||||
|
||||
/*-webkit-border-radius: 8px;
|
||||
-moz-border-radius: 8px;
|
||||
-ms-border-radius: 8px;
|
||||
-o-border-radius: 8px;
|
||||
border-radius: 8px;*/
|
||||
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.main-nav:after {
|
||||
clear: both;
|
||||
content: "\00a0";
|
||||
display: block;
|
||||
height: 0;
|
||||
font: 0px/0 serif;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.nav-brand {
|
||||
float: left;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.nav-brand a {
|
||||
display: block;
|
||||
padding: 10px 10px 10px 20px;
|
||||
color: #fff;
|
||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||
font-size: 22px;
|
||||
font-weight: normal;
|
||||
line-height: 29px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#main-menu {
|
||||
clear: both;
|
||||
-webkit-box-shadow: none;
|
||||
-moz-box-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
#main-menu {
|
||||
float: right;
|
||||
clear: none;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Mobile menu top separator */
|
||||
|
||||
#main-menu:before {
|
||||
content: '';
|
||||
display: block;
|
||||
height: 1px;
|
||||
font: 1px/1px sans-serif;
|
||||
overflow: hidden;
|
||||
background: #2e8cb8;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
#main-menu:before {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Mobile menu toggle button */
|
||||
|
||||
.main-menu-btn {
|
||||
float: right;
|
||||
margin: 10px;
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: 29px;
|
||||
height: 29px;
|
||||
text-indent: 29px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
cursor: pointer;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
/* hamburger icon */
|
||||
|
||||
.main-menu-btn-icon,
|
||||
.main-menu-btn-icon:before,
|
||||
.main-menu-btn-icon:after {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 2px;
|
||||
height: 2px;
|
||||
width: 24px;
|
||||
background: #fff;
|
||||
-webkit-transition: all 0.25s;
|
||||
transition: all 0.25s;
|
||||
}
|
||||
|
||||
.main-menu-btn-icon:before {
|
||||
content: '';
|
||||
top: -7px;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.main-menu-btn-icon:after {
|
||||
content: '';
|
||||
top: 7px;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
|
||||
/* x icon */
|
||||
|
||||
#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon {
|
||||
height: 0;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before {
|
||||
top: 0;
|
||||
-webkit-transform: rotate(-45deg);
|
||||
transform: rotate(-45deg);
|
||||
}
|
||||
|
||||
#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after {
|
||||
top: 0;
|
||||
-webkit-transform: rotate(45deg);
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
|
||||
/* hide menu state checkbox (keep it visible to screen readers) */
|
||||
|
||||
#main-menu-state {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
border: 0;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
clip: rect(1px, 1px, 1px, 1px);
|
||||
}
|
||||
|
||||
|
||||
/* hide the menu in mobile view */
|
||||
|
||||
#main-menu-state:not(:checked) ~ #main-menu {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#main-menu-state:checked ~ #main-menu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
/* hide the button in desktop view */
|
||||
.main-menu-btn {
|
||||
position: absolute;
|
||||
top: -99999px;
|
||||
}
|
||||
/* always show the menu in desktop view */
|
||||
#main-menu-state:not(:checked) ~ #main-menu {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,333 @@
|
||||
@import url(https://fonts.googleapis.com/css?family=PT+Sans+Narrow:400,700);
|
||||
.sm-blue {
|
||||
background: transparent;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.sm-blue a, .sm-blue a:hover, .sm-blue a:focus, .sm-blue a:active {
|
||||
padding: 10px 20px;
|
||||
/* make room for the toggle button (sub indicator) */
|
||||
padding-right: 58px;
|
||||
background: #5e72e4;
|
||||
background-image: linear-gradient(to bottom, #4059e4, #1d35bf);
|
||||
color: #fff;
|
||||
font-family: "PT Sans Narrow", "Arial Narrow", Arial, Helvetica, sans-serif;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
line-height: 23px;
|
||||
text-decoration: none;
|
||||
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.sm-blue a.current {
|
||||
background: #041b9e;
|
||||
background-image: linear-gradient(to bottom, #0d25ab, #7e91fe);
|
||||
color: #fff;
|
||||
}
|
||||
.sm-blue a.disabled {
|
||||
color: #6579e5;
|
||||
}
|
||||
.sm-blue a .sub-arrow {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
margin-top: -17px;
|
||||
left: auto;
|
||||
right: 4px;
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
overflow: hidden;
|
||||
font: bold 16px/34px monospace !important;
|
||||
text-align: center;
|
||||
text-shadow: none;
|
||||
background: rgba(0, 0, 0, 0.1);
|
||||
border-radius: 4px;
|
||||
}
|
||||
.sm-blue a .sub-arrow::before {
|
||||
content: '+';
|
||||
}
|
||||
.sm-blue a.highlighted .sub-arrow::before {
|
||||
content: '-';
|
||||
}
|
||||
.sm-blue > li:first-child > a, .sm-blue > li:first-child > :not(ul) a {
|
||||
border-radius: 8px 8px 0 0;
|
||||
}
|
||||
.sm-blue > li:last-child > a, .sm-blue > li:last-child > *:not(ul) a, .sm-blue > li:last-child > ul, .sm-blue > li:last-child > ul > li:last-child > a, .sm-blue > li:last-child > ul > li:last-child > *:not(ul) a, .sm-blue > li:last-child > ul > li:last-child > ul, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul {
|
||||
border-radius: 0 0 8px 8px;
|
||||
}
|
||||
.sm-blue > li:last-child > a.highlighted, .sm-blue > li:last-child > *:not(ul) a.highlighted, .sm-blue > li:last-child > ul > li:last-child > a.highlighted, .sm-blue > li:last-child > ul > li:last-child > *:not(ul) a.highlighted, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > a.highlighted, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a.highlighted, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > a.highlighted, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a.highlighted, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > a.highlighted, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a.highlighted {
|
||||
border-radius: 0;
|
||||
}
|
||||
.sm-blue ul {
|
||||
background: #fff;
|
||||
}
|
||||
.sm-blue ul ul {
|
||||
background: rgba(102, 102, 102, 0.1);
|
||||
}
|
||||
.sm-blue ul a, .sm-blue ul a:hover, .sm-blue ul a:focus, .sm-blue ul a:active {
|
||||
background: transparent;
|
||||
color: #3149d0;
|
||||
font-size: 16px;
|
||||
text-shadow: none;
|
||||
border-left: 8px solid transparent;
|
||||
}
|
||||
.sm-blue ul a.current {
|
||||
background: #041b9e;
|
||||
background-image: linear-gradient(to bottom, #0d25ab, #7e91fe);
|
||||
color: #fff;
|
||||
}
|
||||
.sm-blue ul a.disabled {
|
||||
color: #b3b3b3;
|
||||
}
|
||||
.sm-blue ul ul a,
|
||||
.sm-blue ul ul a:hover,
|
||||
.sm-blue ul ul a:focus,
|
||||
.sm-blue ul ul a:active {
|
||||
border-left: 16px solid transparent;
|
||||
}
|
||||
.sm-blue ul ul ul a,
|
||||
.sm-blue ul ul ul a:hover,
|
||||
.sm-blue ul ul ul a:focus,
|
||||
.sm-blue ul ul ul a:active {
|
||||
border-left: 24px solid transparent;
|
||||
}
|
||||
.sm-blue ul ul ul ul a,
|
||||
.sm-blue ul ul ul ul a:hover,
|
||||
.sm-blue ul ul ul ul a:focus,
|
||||
.sm-blue ul ul ul ul a:active {
|
||||
border-left: 32px solid transparent;
|
||||
}
|
||||
.sm-blue ul ul ul ul ul a,
|
||||
.sm-blue ul ul ul ul ul a:hover,
|
||||
.sm-blue ul ul ul ul ul a:focus,
|
||||
.sm-blue ul ul ul ul ul a:active {
|
||||
border-left: 40px solid transparent;
|
||||
}
|
||||
.sm-blue ul li {
|
||||
border-top: 1px solid rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.sm-blue ul li:first-child {
|
||||
border-top: 0;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
/* Switch to desktop layout
|
||||
-----------------------------------------------
|
||||
These transform the menu tree from
|
||||
collapsible to desktop (navbar + dropdowns)
|
||||
-----------------------------------------------*/
|
||||
/* start... (it's not recommended editing these rules) */
|
||||
.sm-blue ul {
|
||||
position: absolute;
|
||||
width: 12em;
|
||||
}
|
||||
|
||||
.sm-blue li {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.sm-blue.sm-rtl li {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.sm-blue ul li, .sm-blue.sm-rtl ul li, .sm-blue.sm-vertical li {
|
||||
float: none;
|
||||
}
|
||||
|
||||
.sm-blue a {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.sm-blue ul a, .sm-blue.sm-vertical a {
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.sm-blue .sm-nowrap > li > a, .sm-blue .sm-nowrap > li > :not(ul) a {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* ...end */
|
||||
.sm-blue {
|
||||
background: #5e72e4;
|
||||
background-image: linear-gradient(to bottom, #4059e4, #1d35bf);
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.sm-blue a, .sm-blue a:hover, .sm-blue a:focus, .sm-blue a:active, .sm-blue a.highlighted {
|
||||
padding: 13px 24px;
|
||||
background: #5e72e4;
|
||||
background-image: linear-gradient(to bottom, #4059e4, #1d35bf);
|
||||
color: #fff;
|
||||
}
|
||||
.sm-blue a:hover, .sm-blue a:focus, .sm-blue a:active, .sm-blue a.highlighted {
|
||||
background: #3149d0;
|
||||
background-image: linear-gradient(to bottom, #2d89b4, #297ca3);
|
||||
}
|
||||
.sm-blue a.current {
|
||||
background: #041b9e;
|
||||
background-image: linear-gradient(to bottom, #0d25ab, #7e91fe);
|
||||
color: #fff;
|
||||
}
|
||||
.sm-blue a.disabled {
|
||||
background: #5e72e4;
|
||||
background-image: linear-gradient(to bottom, #4059e4, #1d35bf);
|
||||
color: #6579e5;
|
||||
}
|
||||
.sm-blue a .sub-arrow {
|
||||
top: auto;
|
||||
margin-top: 0;
|
||||
bottom: 2px;
|
||||
left: 50%;
|
||||
margin-left: -5px;
|
||||
right: auto;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-width: 5px;
|
||||
border-style: solid dashed dashed dashed;
|
||||
border-color: #6579e5 transparent transparent transparent;
|
||||
background: transparent;
|
||||
border-radius: 0;
|
||||
}
|
||||
.sm-blue a .sub-arrow::before {
|
||||
display: none;
|
||||
}
|
||||
.sm-blue > li:first-child > a, .sm-blue > li:first-child > :not(ul) a {
|
||||
border-radius: 8px 0 0 8px;
|
||||
}
|
||||
.sm-blue > li:last-child > a, .sm-blue > li:last-child > :not(ul) a {
|
||||
border-radius: 0 8px 8px 0 !important;
|
||||
}
|
||||
.sm-blue > li {
|
||||
border-left: 1px solid #3149d0;
|
||||
}
|
||||
.sm-blue > li:first-child {
|
||||
border-left: 0;
|
||||
}
|
||||
.sm-blue ul {
|
||||
border: 1px solid #a8a8a8;
|
||||
padding: 7px 0;
|
||||
background: #fff;
|
||||
border-radius: 0 0 4px 4px !important;
|
||||
box-shadow: 0 5px 12px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.sm-blue ul ul {
|
||||
border-radius: 4px !important;
|
||||
background: #fff;
|
||||
}
|
||||
.sm-blue ul a, .sm-blue ul a:hover, .sm-blue ul a:focus, .sm-blue ul a:active, .sm-blue ul a.highlighted {
|
||||
border: 0 !important;
|
||||
padding: 9px 23px;
|
||||
background: transparent;
|
||||
color: #3149d0;
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
.sm-blue ul a:hover, .sm-blue ul a:focus, .sm-blue ul a:active, .sm-blue ul a.highlighted {
|
||||
background: #5e72e4;
|
||||
background-image: linear-gradient(to bottom, #4059e4, #1d35bf);
|
||||
color: #fff;
|
||||
}
|
||||
.sm-blue ul a.current {
|
||||
background: #041b9e;
|
||||
background-image: linear-gradient(to bottom, #0d25ab, #7e91fe);
|
||||
color: #fff;
|
||||
}
|
||||
.sm-blue ul a.disabled {
|
||||
background: #fff;
|
||||
color: #b3b3b3;
|
||||
}
|
||||
.sm-blue ul a .sub-arrow {
|
||||
top: 50%;
|
||||
margin-top: -5px;
|
||||
bottom: auto;
|
||||
left: auto;
|
||||
margin-left: 0;
|
||||
right: 10px;
|
||||
border-style: dashed dashed dashed solid;
|
||||
border-color: transparent transparent transparent #6579e5;
|
||||
}
|
||||
.sm-blue ul li {
|
||||
border: 0;
|
||||
}
|
||||
.sm-blue .scroll-up,
|
||||
.sm-blue .scroll-down {
|
||||
position: absolute;
|
||||
display: none;
|
||||
visibility: hidden;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
height: 20px;
|
||||
}
|
||||
.sm-blue .scroll-up-arrow,
|
||||
.sm-blue .scroll-down-arrow {
|
||||
position: absolute;
|
||||
top: -2px;
|
||||
left: 50%;
|
||||
margin-left: -8px;
|
||||
width: 0;
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
border-width: 8px;
|
||||
border-style: dashed dashed solid dashed;
|
||||
border-color: transparent transparent #3149d0 transparent;
|
||||
}
|
||||
.sm-blue .scroll-down-arrow {
|
||||
top: 6px;
|
||||
border-style: solid dashed dashed dashed;
|
||||
border-color: #3149d0 transparent transparent transparent;
|
||||
}
|
||||
.sm-blue.sm-rtl.sm-vertical a .sub-arrow {
|
||||
right: auto;
|
||||
left: 10px;
|
||||
border-style: dashed solid dashed dashed;
|
||||
border-color: transparent #6579e5 transparent transparent;
|
||||
}
|
||||
.sm-blue.sm-rtl > li:first-child > a, .sm-blue.sm-rtl > li:first-child > :not(ul) a {
|
||||
border-radius: 0 8px 8px 0;
|
||||
}
|
||||
.sm-blue.sm-rtl > li:last-child > a, .sm-blue.sm-rtl > li:last-child > :not(ul) a {
|
||||
border-radius: 8px 0 0 8px !important;
|
||||
}
|
||||
.sm-blue.sm-rtl > li:first-child {
|
||||
border-left: 1px solid #3149d0;
|
||||
}
|
||||
.sm-blue.sm-rtl > li:last-child {
|
||||
border-left: 0;
|
||||
}
|
||||
.sm-blue.sm-rtl ul a .sub-arrow {
|
||||
right: auto;
|
||||
left: 10px;
|
||||
border-style: dashed solid dashed dashed;
|
||||
border-color: transparent #6579e5 transparent transparent;
|
||||
}
|
||||
.sm-blue.sm-vertical {
|
||||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.sm-blue.sm-vertical a {
|
||||
padding: 9px 23px;
|
||||
}
|
||||
.sm-blue.sm-vertical a .sub-arrow {
|
||||
top: 50%;
|
||||
margin-top: -5px;
|
||||
bottom: auto;
|
||||
left: auto;
|
||||
margin-left: 0;
|
||||
right: 10px;
|
||||
border-style: dashed dashed dashed solid;
|
||||
border-color: transparent transparent transparent #6579e5;
|
||||
}
|
||||
.sm-blue.sm-vertical > li:first-child > a, .sm-blue.sm-vertical > li:first-child > :not(ul) a {
|
||||
border-radius: 8px 8px 0 0;
|
||||
}
|
||||
.sm-blue.sm-vertical > li:last-child > a, .sm-blue.sm-vertical > li:last-child > :not(ul) a {
|
||||
border-radius: 0 0 8px 8px !important;
|
||||
}
|
||||
.sm-blue.sm-vertical > li {
|
||||
border-left: 0 !important;
|
||||
}
|
||||
.sm-blue.sm-vertical ul {
|
||||
border-radius: 4px !important;
|
||||
}
|
||||
.sm-blue.sm-vertical ul a {
|
||||
padding: 9px 23px;
|
||||
}
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=sm-blue.css.map */
|
||||
@ -0,0 +1,14 @@
|
||||
/* Mobile first layout SmartMenus Core CSS (it's not recommended editing these rules)
|
||||
You need this once per page no matter how many menu trees or different themes you use.
|
||||
-------------------------------------------------------------------------------------------*/
|
||||
|
||||
.sm{box-sizing:border-box;position:relative;z-index:9999;-webkit-tap-highlight-color:rgba(0,0,0,0);}
|
||||
.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;}
|
||||
.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right;}
|
||||
.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0;}
|
||||
.sm ul{display:none;}
|
||||
.sm li,.sm a{position:relative;}
|
||||
.sm a{display:block;}
|
||||
.sm a.disabled{cursor:default;}
|
||||
.sm::after{content:"";display:block;height:0;font:0px/0 serif;clear:both;overflow:hidden;}
|
||||
.sm *,.sm *::before,.sm *::after{box-sizing:inherit;}
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 434 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 931 B |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 32 KiB |
5
package/ctcgfw/luci-theme-btmod/htdocs/luci-static/btmod/js/jquery.min.js
vendored
Normal file
3
package/ctcgfw/luci-theme-btmod/htdocs/luci-static/btmod/js/jquery.smartmenus.min.js
vendored
Normal file
18
package/ctcgfw/luci-theme-btmod/htdocs/luci-static/btmod/js/prefixfree.min.js
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
/**
|
||||
* StyleFix 1.0.3 & PrefixFree 1.0.7
|
||||
* @author Lea Verou
|
||||
* MIT license
|
||||
*/
|
||||
(function(){function k(a,b){return[].slice.call((b||document).querySelectorAll(a))}if(window.addEventListener){var e=window.StyleFix={link:function(a){try{if("stylesheet"!==a.rel||a.hasAttribute("data-noprefix"))return}catch(b){return}var c=a.href||a.getAttribute("data-href"),d=c.replace(/[^\/]+$/,""),h=(/^[a-z]{3,10}:/.exec(d)||[""])[0],l=(/^[a-z]{3,10}:\/\/[^\/]+/.exec(d)||[""])[0],g=/^([^?]*)\??/.exec(c)[1],m=a.parentNode,f=new XMLHttpRequest,n;f.onreadystatechange=function(){4===f.readyState&&
|
||||
n()};n=function(){var b=f.responseText;if(b&&a.parentNode&&(!f.status||400>f.status||600<f.status)){b=e.fix(b,!0,a);if(d)var b=b.replace(/url\(\s*?((?:"|')?)(.+?)\1\s*?\)/gi,function(b,a,c){return/^([a-z]{3,10}:|#)/i.test(c)?b:/^\/\//.test(c)?'url("'+h+c+'")':/^\//.test(c)?'url("'+l+c+'")':/^\?/.test(c)?'url("'+g+c+'")':'url("'+d+c+'")'}),c=d.replace(/([\\\^\$*+[\]?{}.=!:(|)])/g,"\\$1"),b=b.replace(RegExp("\\b(behavior:\\s*?url\\('?\"?)"+c,"gi"),"$1");c=document.createElement("style");c.textContent=
|
||||
b;c.media=a.media;c.disabled=a.disabled;c.setAttribute("data-href",a.getAttribute("href"));m.insertBefore(c,a);m.removeChild(a);c.media=a.media}};try{f.open("GET",c),f.send(null)}catch(p){"undefined"!=typeof XDomainRequest&&(f=new XDomainRequest,f.onerror=f.onprogress=function(){},f.onload=n,f.open("GET",c),f.send(null))}a.setAttribute("data-inprogress","")},styleElement:function(a){if(!a.hasAttribute("data-noprefix")){var b=a.disabled;a.textContent=e.fix(a.textContent,!0,a);a.disabled=b}},styleAttribute:function(a){var b=
|
||||
a.getAttribute("style"),b=e.fix(b,!1,a);a.setAttribute("style",b)},process:function(){k('link[rel="stylesheet"]:not([data-inprogress])').forEach(StyleFix.link);k("style").forEach(StyleFix.styleElement);k("[style]").forEach(StyleFix.styleAttribute)},register:function(a,b){(e.fixers=e.fixers||[]).splice(void 0===b?e.fixers.length:b,0,a)},fix:function(a,b,c){for(var d=0;d<e.fixers.length;d++)a=e.fixers[d](a,b,c)||a;return a},camelCase:function(a){return a.replace(/-([a-z])/g,function(b,a){return a.toUpperCase()}).replace("-",
|
||||
"")},deCamelCase:function(a){return a.replace(/[A-Z]/g,function(b){return"-"+b.toLowerCase()})}};(function(){setTimeout(function(){k('link[rel="stylesheet"]').forEach(StyleFix.link)},10);document.addEventListener("DOMContentLoaded",StyleFix.process,!1)})()}})();
|
||||
(function(k){function e(b,c,d,h,l){b=a[b];b.length&&(b=RegExp(c+"("+b.join("|")+")"+d,"gi"),l=l.replace(b,h));return l}if(window.StyleFix&&window.getComputedStyle){var a=window.PrefixFree={prefixCSS:function(b,c,d){var h=a.prefix;-1<a.functions.indexOf("linear-gradient")&&(b=b.replace(/(\s|:|,)(repeating-)?linear-gradient\(\s*(-?\d*\.?\d*)deg/ig,function(b,a,c,d){return a+(c||"")+"linear-gradient("+(90-d)+"deg"}));b=e("functions","(\\s|:|,)","\\s*\\(","$1"+h+"$2(",b);b=e("keywords","(\\s|:)","(\\s|;|\\}|$)",
|
||||
"$1"+h+"$2$3",b);b=e("properties","(^|\\{|\\s|;)","\\s*:","$1"+h+"$2:",b);if(a.properties.length){var l=RegExp("\\b("+a.properties.join("|")+")(?!:)","gi");b=e("valueProperties","\\b",":(.+?);",function(a){return a.replace(l,h+"$1")},b)}c&&(b=e("selectors","","\\b",a.prefixSelector,b),b=e("atrules","@","\\b","@"+h+"$1",b));b=b.replace(RegExp("-"+h,"g"),"-");return b=b.replace(/-\*-(?=[a-z]+)/gi,a.prefix)},property:function(b){return(0<=a.properties.indexOf(b)?a.prefix:"")+b},value:function(b,c){b=
|
||||
e("functions","(^|\\s|,)","\\s*\\(","$1"+a.prefix+"$2(",b);b=e("keywords","(^|\\s)","(\\s|$)","$1"+a.prefix+"$2$3",b);0<=a.valueProperties.indexOf(c)&&(b=e("properties","(^|\\s|,)","($|\\s|,)","$1"+a.prefix+"$2$3",b));return b},prefixSelector:function(b){return b.replace(/^:{1,2}/,function(b){return b+a.prefix})},prefixProperty:function(b,c){var d=a.prefix+b;return c?StyleFix.camelCase(d):d}};(function(){var b={},c=[],d=getComputedStyle(document.documentElement,null),h=document.createElement("div").style,
|
||||
l=function(a){if("-"===a.charAt(0)){c.push(a);a=a.split("-");var d=a[1];for(b[d]=++b[d]||1;3<a.length;)a.pop(),d=a.join("-"),StyleFix.camelCase(d)in h&&-1===c.indexOf(d)&&c.push(d)}};if(0<d.length)for(var g=0;g<d.length;g++)l(d[g]);else for(var e in d)l(StyleFix.deCamelCase(e));var g=0,f,k;for(k in b)d=b[k],g<d&&(f=k,g=d);a.prefix="-"+f+"-";a.Prefix=StyleFix.camelCase(a.prefix);a.properties=[];for(g=0;g<c.length;g++)e=c[g],0===e.indexOf(a.prefix)&&(f=e.slice(a.prefix.length),StyleFix.camelCase(f)in
|
||||
h||a.properties.push(f));!("Ms"!=a.Prefix||"transform"in h||"MsTransform"in h)&&"msTransform"in h&&a.properties.push("transform","transform-origin");a.properties.sort()})();(function(){function b(a,b){h[b]="";h[b]=a;return!!h[b]}var c={"linear-gradient":{property:"backgroundImage",params:"red, teal"},calc:{property:"width",params:"1px + 5%"},element:{property:"backgroundImage",params:"#foo"},"cross-fade":{property:"backgroundImage",params:"url(a.png), url(b.png), 50%"}};c["repeating-linear-gradient"]=
|
||||
c["repeating-radial-gradient"]=c["radial-gradient"]=c["linear-gradient"];var d={initial:"color","zoom-in":"cursor","zoom-out":"cursor",box:"display",flexbox:"display","inline-flexbox":"display",flex:"display","inline-flex":"display",grid:"display","inline-grid":"display","max-content":"width","min-content":"width","fit-content":"width","fill-available":"width"};a.functions=[];a.keywords=[];var h=document.createElement("div").style,e;for(e in c){var g=c[e],k=g.property,g=e+"("+g.params+")";!b(g,k)&&
|
||||
b(a.prefix+g,k)&&a.functions.push(e)}for(var f in d)k=d[f],!b(f,k)&&b(a.prefix+f,k)&&a.keywords.push(f)})();(function(){function b(a){e.textContent=a+"{}";return!!e.sheet.cssRules.length}var c={":read-only":null,":read-write":null,":any-link":null,"::selection":null},d={keyframes:"name",viewport:null,document:'regexp(".")'};a.selectors=[];a.atrules=[];var e=k.appendChild(document.createElement("style")),l;for(l in c){var g=l+(c[l]?"("+c[l]+")":"");!b(g)&&b(a.prefixSelector(g))&&a.selectors.push(l)}for(var m in d)g=
|
||||
m+" "+(d[m]||""),!b("@"+g)&&b("@"+a.prefix+g)&&a.atrules.push(m);k.removeChild(e)})();a.valueProperties=["transition","transition-property"];k.className+=" "+a.prefix;StyleFix.register(a.prefixCSS)}})(document.documentElement);
|
||||
@ -0,0 +1,236 @@
|
||||
/**
|
||||
* Material is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI
|
||||
*
|
||||
* luci-theme-material
|
||||
* Copyright 2015 Lutty Yang <lutty@wcan.in>
|
||||
*
|
||||
* Have a bug? Please create an issue here on GitHub!
|
||||
* https://github.com/LuttyYang/luci-theme-material/issues
|
||||
*
|
||||
* luci-theme-bootstrap:
|
||||
* Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
* Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
* Copyright 2012 David Menting <david@nut-bolt.nl>
|
||||
*
|
||||
* MUI:
|
||||
* https://github.com/muicss/mui
|
||||
*
|
||||
* Licensed to the public under the Apache License 2.0
|
||||
*/
|
||||
(function ($) {
|
||||
$(".main > .loading").fadeOut();
|
||||
|
||||
/**
|
||||
* trim text, Remove spaces, wrap
|
||||
* @param text
|
||||
* @returns {string}
|
||||
*/
|
||||
function trimText(text) {
|
||||
return text.replace(/[ \t\n\r]+/g, " ");
|
||||
}
|
||||
|
||||
|
||||
var lastNode = undefined;
|
||||
var mainNodeName = undefined;
|
||||
|
||||
var nodeUrl = "";
|
||||
(function(node){
|
||||
if (node[0] == "admin"){
|
||||
luciLocation = [node[1], node[2]];
|
||||
}else{
|
||||
luciLocation = node;
|
||||
}
|
||||
|
||||
for(var i in luciLocation){
|
||||
nodeUrl += luciLocation[i];
|
||||
if (i != luciLocation.length - 1){
|
||||
nodeUrl += "/";
|
||||
}
|
||||
}
|
||||
})(luciLocation);
|
||||
|
||||
/**
|
||||
* get the current node by Burl (primary)
|
||||
* @returns {boolean} success?
|
||||
*/
|
||||
function getCurrentNodeByUrl() {
|
||||
var ret = false;
|
||||
if (!$('body').hasClass('logged-in')) {
|
||||
luciLocation = ["Main", "Login"];
|
||||
return true;
|
||||
}
|
||||
|
||||
$(".main > .main-left > .nav > .slide > .menu").each(function () {
|
||||
var ulNode = $(this);
|
||||
ulNode.next().find("a").each(function () {
|
||||
var that = $(this);
|
||||
var href = that.attr("href");
|
||||
|
||||
if (href.indexOf(nodeUrl) != -1) {
|
||||
ulNode.click();
|
||||
ulNode.next(".slide-menu").stop(true, true);
|
||||
lastNode = that.parent();
|
||||
lastNode.addClass("active");
|
||||
ret = true;
|
||||
return true;
|
||||
}
|
||||
});
|
||||
});
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* menu click
|
||||
*/
|
||||
$(".main > .main-left > .nav > .slide > .menu").click(function () {
|
||||
var ul = $(this).next(".slide-menu");
|
||||
var menu = $(this);
|
||||
if (!ul.is(":visible")) {
|
||||
menu.addClass("active");
|
||||
ul.addClass("active");
|
||||
ul.stop(true).slideDown("fast");
|
||||
} else {
|
||||
ul.stop(true).slideUp("fast", function () {
|
||||
menu.removeClass("active");
|
||||
ul.removeClass("active");
|
||||
});
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
/**
|
||||
* hook menu click and add the hash
|
||||
*/
|
||||
$(".main > .main-left > .nav > .slide > .slide-menu > li > a").click(function () {
|
||||
if (lastNode != undefined) lastNode.removeClass("active");
|
||||
$(this).parent().addClass("active");
|
||||
$(".main > .loading").fadeIn("fast");
|
||||
return true;
|
||||
});
|
||||
|
||||
/**
|
||||
* fix menu click
|
||||
*/
|
||||
$(".main > .main-left > .nav > .slide > .slide-menu > li").click(function () {
|
||||
if (lastNode != undefined) lastNode.removeClass("active");
|
||||
$(this).addClass("active");
|
||||
$(".main > .loading").fadeIn("fast");
|
||||
window.location = $($(this).find("a")[0]).attr("href");
|
||||
return false;
|
||||
});
|
||||
|
||||
/**
|
||||
* get current node and open it
|
||||
*/
|
||||
if (getCurrentNodeByUrl()) {
|
||||
mainNodeName = "node-" + luciLocation[0] + "-" + luciLocation[1];
|
||||
mainNodeName = mainNodeName.replace(/[ \t\n\r\/]+/g, "_").toLowerCase();
|
||||
$("body").addClass(mainNodeName);
|
||||
}
|
||||
$(".cbi-button-up").val("⇧");
|
||||
$(".cbi-button-down").val("⇩");
|
||||
|
||||
|
||||
/**
|
||||
* hook other "A Label" and add hash to it.
|
||||
*/
|
||||
$("#maincontent > .container").find("a").each(function () {
|
||||
var that = $(this);
|
||||
var onclick = that.attr("onclick");
|
||||
if (onclick == undefined || onclick == "") {
|
||||
that.click(function () {
|
||||
var href = that.attr("href");
|
||||
if (href.indexOf("#") == -1) {
|
||||
$(".main > .loading").fadeIn("fast");
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Sidebar expand
|
||||
*/
|
||||
var showSide = false;
|
||||
$(".showSide").click(function () {
|
||||
if (showSide) {
|
||||
$(".darkMask").stop(true).fadeOut("fast");
|
||||
$(".main-left").stop(true).animate({
|
||||
width: "0"
|
||||
}, "fast");
|
||||
$(".main-right").css("overflow-y", "auto");
|
||||
showSide = false;
|
||||
} else {
|
||||
$(".darkMask").stop(true).fadeIn("fast");
|
||||
$(".main-left").stop(true).animate({
|
||||
width: "15rem"
|
||||
}, "fast");
|
||||
$(".main-right").css("overflow-y", "hidden");
|
||||
showSide = true;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
$(".darkMask").click(function () {
|
||||
if (showSide) {
|
||||
showSide = false;
|
||||
$(".darkMask").stop(true).fadeOut("fast");
|
||||
$(".main-left").stop(true).animate({
|
||||
width: "0"
|
||||
}, "fast");
|
||||
$(".main-right").css("overflow-y", "auto");
|
||||
}
|
||||
});
|
||||
|
||||
$(window).resize(function () {
|
||||
if ($(window).width() > 921) {
|
||||
$(".main-left").css("width", "");
|
||||
$(".darkMask").stop(true);
|
||||
$(".darkMask").css("display", "none");
|
||||
showSide = false;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* fix legend position
|
||||
*/
|
||||
$("legend").each(function () {
|
||||
var that = $(this);
|
||||
that.after("<span class='panel-title'>" + that.text() + "</span>");
|
||||
});
|
||||
|
||||
$(".cbi-section-table-titles, .cbi-section-table-descr, .cbi-section-descr").each(function () {
|
||||
var that = $(this);
|
||||
if (that.text().trim() == ""){
|
||||
that.css("display", "none");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
$(".main-right").focus();
|
||||
$(".main-right").blur();
|
||||
$("input").attr("size", "0");
|
||||
|
||||
if (mainNodeName != undefined) {
|
||||
console.log(mainNodeName);
|
||||
switch (mainNodeName) {
|
||||
case "node-status-system_log":
|
||||
case "node-status-kernel_log":
|
||||
$("#syslog").focus(function () {
|
||||
$("#syslog").blur();
|
||||
$(".main-right").focus();
|
||||
$(".main-right").blur();
|
||||
});
|
||||
break;
|
||||
case "node-status-firewall":
|
||||
var button = $(".node-status-firewall > .main fieldset li > a");
|
||||
button.addClass("cbi-button cbi-button-reset a-to-btn");
|
||||
break;
|
||||
case "node-system-reboot":
|
||||
var button = $(".node-system-reboot > .main > .main-right p > a");
|
||||
button.addClass("cbi-button cbi-input-reset a-to-btn");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
})(jQuery);
|
||||
@ -0,0 +1,142 @@
|
||||
<%#
|
||||
|
||||
luci-theme-butongwifi
|
||||
Copyright 2017 Tracemouse <tracemouse@wcan.in>
|
||||
|
||||
Smart Menu:
|
||||
https://www.smartmenus.org/
|
||||
|
||||
Font Awesome:
|
||||
http://fontawesome.io/
|
||||
|
||||
|
||||
luci-theme-material
|
||||
Copyright 2015 Lutty Yang <lutty@wcan.in>
|
||||
|
||||
luci-theme-bootstrap:
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
Copyright 2012 David Menting <david@nut-bolt.nl>
|
||||
|
||||
MUI:
|
||||
https://github.com/muicss/mui
|
||||
|
||||
Licensed to the public under the Apache License 2.0
|
||||
-%>
|
||||
|
||||
<%
|
||||
local ver = require "luci.version"
|
||||
local disp = require "luci.dispatcher"
|
||||
local request = disp.context.path
|
||||
local category = request[1]
|
||||
local tree = disp.node()
|
||||
local categories = disp.node_childs(tree)
|
||||
%>
|
||||
</div>
|
||||
<footer class="mobile-hide" style="text-align:center">
|
||||
<a href="https://github.com/openwrt/luci">Powered by <%= ver.luciname %> (<%= ver.luciversion %>)</a> /
|
||||
<a href="http://butong.me/"><%= ver.distversion %></a> /
|
||||
<% if #categories > 1 then %>
|
||||
<ul class="breadcrumb pull-right" id="modemenu">
|
||||
<% for i, r in ipairs(categories) do %>
|
||||
<li<% if request[1] == r then %> class="active"<%end%>><a href="<%=controller%>/<%=r%>/"><%=striptags(translate(tree.nodes[r].title))%></a> <span class="divider">|</span></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% end %>
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// thanks for Jo-Philipp Wich <jow@openwrt.org>
|
||||
var luciLocation = <%= luci.http.write_json(luci.dispatcher.context.path) %>;
|
||||
</script>
|
||||
<script src="<%=media%>/js/jquery.min.js?v=git-17.016.25656-a85807d"></script>
|
||||
<script src="<%=media%>/js/script.js?v=git-17.016.25656-a85807d"></script>
|
||||
<script src="<%=media%>/js/jquery.smartmenus.min.js"></script>
|
||||
|
||||
<script>
|
||||
|
||||
// SmartMenus init
|
||||
$(function() {
|
||||
$('#main-menu').smartmenus({
|
||||
subMenusSubOffsetX: 1,
|
||||
subMenusSubOffsetY: -8
|
||||
});
|
||||
});
|
||||
|
||||
// SmartMenus mobile menu toggle button
|
||||
$(function() {
|
||||
var $mainMenuState = $('#main-menu-state');
|
||||
if ($mainMenuState.length) {
|
||||
// animate mobile menu
|
||||
$mainMenuState.change(function(e) {
|
||||
var $menu = $('#main-menu');
|
||||
if (this.checked) {
|
||||
$menu.hide().slideDown(250, function() { $menu.css('display', ''); });
|
||||
} else {
|
||||
$menu.show().slideUp(250, function() { $menu.css('display', ''); });
|
||||
}
|
||||
});
|
||||
// hide mobile menu beforeunload
|
||||
$(window).bind('beforeunload unload', function() {
|
||||
if ($mainMenuState[0].checked) {
|
||||
$mainMenuState[0].click();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//onload
|
||||
$(document).ready(function(){
|
||||
//add icon for login title
|
||||
str=$(".node-main-login > .main form > div > h2").html();
|
||||
str="<i class='fa fa-lock'></i> " + str;
|
||||
$(".node-main-login > .main form > div > h2").html(str);
|
||||
|
||||
//add icons for navbar
|
||||
status = ".main-nav > #main-menu > .slide > a[data-title='Status'] > i";
|
||||
$(status).attr("class","fa fa-bar-chart");
|
||||
|
||||
status = ".main-nav > #main-menu > .slide > a[data-title='System'] > i";
|
||||
$(status).attr("class","fa fa-cogs");
|
||||
|
||||
status = ".main-nav > #main-menu > .slide > a[data-title='Services'] > i";
|
||||
$(status).attr("class","fa fa-server");
|
||||
|
||||
status = ".main-nav > #main-menu > .slide > a[data-title='Network'] > i";
|
||||
$(status).attr("class","fa fa-globe");
|
||||
|
||||
status = ".main-nav > #main-menu > .slide > a[data-title='NAS'] > i";
|
||||
$(status).attr("class","fa fa-wifi");
|
||||
|
||||
status = ".main-nav > #main-menu > .slide > a[data-title='VPN'] > i";
|
||||
$(status).attr("class","fa fa-paper-plane");
|
||||
|
||||
status = ".main-nav > #main-menu > .slide > a[data-title='Bandwidth Monitor'] > i";
|
||||
$(status).attr("class","fa fa-bar-chart");
|
||||
|
||||
//icons
|
||||
/*
|
||||
status = ".main-nav > #main-menu > .slide > a[data-title='Control'] > i";
|
||||
$(status).attr("class","fa fa-cogs");
|
||||
|
||||
$('img').each(function(){
|
||||
img = $(this).attr('src');
|
||||
//alert(img);
|
||||
if (img.indexOf("images/wifi.png"))
|
||||
{
|
||||
$(this).after("<i class='fa fa-wifi'></i>");
|
||||
$(this).remove();
|
||||
}
|
||||
|
||||
});
|
||||
*/
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,237 @@
|
||||
<%#
|
||||
|
||||
luci-theme-butongwifi
|
||||
Copyright 2017 Tracemouse <tracemouse@wcan.in>
|
||||
|
||||
Smart Menu:
|
||||
https://www.smartmenus.org/
|
||||
|
||||
Font Awesome:
|
||||
http://fontawesome.io/
|
||||
|
||||
|
||||
luci-theme-material
|
||||
Copyright 2015 Lutty Yang <lutty@wcan.in>
|
||||
|
||||
luci-theme-bootstrap:
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
Copyright 2012 David Menting <david@nut-bolt.nl>
|
||||
|
||||
MUI:
|
||||
https://github.com/muicss/mui
|
||||
|
||||
Licensed to the public under the Apache License 2.0
|
||||
-%>
|
||||
|
||||
<%
|
||||
local ver = require "luci.version"
|
||||
local sys = require "luci.sys"
|
||||
local util = require "luci.util"
|
||||
local http = require "luci.http"
|
||||
local disp = require "luci.dispatcher"
|
||||
|
||||
local boardinfo = util.ubus("system", "board")
|
||||
|
||||
local request = disp.context.path
|
||||
local request2 = disp.context.request
|
||||
|
||||
local category = request[1]
|
||||
local cattree = category and disp.node(category)
|
||||
|
||||
local leaf = request2[#request2]
|
||||
|
||||
local tree = disp.node()
|
||||
local node = disp.context.dispatched
|
||||
|
||||
local categories = disp.node_childs(tree)
|
||||
|
||||
local c = tree
|
||||
local i, r
|
||||
|
||||
-- tag all nodes leading to this page
|
||||
for i, r in ipairs(request) do
|
||||
if c.nodes and c.nodes[r] then
|
||||
c = c.nodes[r]
|
||||
c._menu_selected = true
|
||||
end
|
||||
end
|
||||
|
||||
-- send as HTML5
|
||||
http.prepare_content("text/html")
|
||||
|
||||
local function nodeurl(prefix, name, query)
|
||||
local url = controller .. prefix .. name .. "/"
|
||||
if query then
|
||||
url = url .. http.build_querystring(query)
|
||||
end
|
||||
return pcdata(url)
|
||||
end
|
||||
|
||||
local function subtree(prefix, node, level)
|
||||
if not level then
|
||||
level = 1
|
||||
end
|
||||
|
||||
local childs = disp.node_childs(node)
|
||||
if #childs > 0 then
|
||||
|
||||
if level > 2 then
|
||||
%>
|
||||
<ul class="tabs">
|
||||
<%
|
||||
end
|
||||
|
||||
local selected_node
|
||||
local selected_name
|
||||
local i, v
|
||||
|
||||
for i, v in ipairs(childs) do
|
||||
local nnode = node.nodes[v]
|
||||
if nnode._menu_selected then
|
||||
selected_node = nnode
|
||||
selected_name = v
|
||||
end
|
||||
if level > 2 then
|
||||
%>
|
||||
<li class="tabmenu-item-<%=v%><%- if nnode._menu_selected or (node.leaf and v == leaf) then %> active<% end %>">
|
||||
<a href="<%=nodeurl(prefix, v, nnode.query)%>"><%=striptags(translate(nnode.title))%></a>
|
||||
</li>
|
||||
<% end
|
||||
end
|
||||
|
||||
if level > 2 then
|
||||
%>
|
||||
</ul>
|
||||
<% end
|
||||
|
||||
if selected_node then
|
||||
subtree(prefix .. selected_name .. "/", selected_node, level + 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
-%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="<%=luci.i18n.context.lang%>">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title><%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI</title>
|
||||
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"/>
|
||||
<meta name="format-detection" content="telephone=no, email=no"/>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="x5-fullscreen" content="true">
|
||||
<meta name="full-screen" content="yes">
|
||||
<meta name="x5-page-mode" content="app">
|
||||
<meta name="browsermode" content="application">
|
||||
<meta name="theme-color" content="#0099CC">
|
||||
<meta name="msapplication-tap-highlight" content="no">
|
||||
<meta name="msapplication-TileColor" content="#0099CC">
|
||||
|
||||
<meta name="application-name" content="<%=striptags( (boardinfo.hostname or "?") ) %> - LuCI">
|
||||
<meta name="apple-mobile-web-app-title" content="<%=striptags( (boardinfo.hostname or "?") ) %> - LuCI">
|
||||
<meta name="msapplication-TileImage" content="<%=media%>/images/favicon.png"/>
|
||||
<link rel="icon" href="<%=media%>/images/favicon.png" sizes="144x144">
|
||||
<link rel="apple-touch-icon-precomposed" href="<%=media%>/images/favicon.png" sizes="144x144">
|
||||
|
||||
<link href='<%=media%>/css/sm-core-css.css' rel='stylesheet' type='text/css' />
|
||||
<link href='<%=media%>/css/sm-blue/sm-blue.css' rel='stylesheet' type='text/css' />
|
||||
<link href='<%=media%>/css/mainmenu.css' rel='stylesheet' type='text/css' />
|
||||
|
||||
<link href='<%=media%>/font-awesome/css/font-awesome.min.css' rel='stylesheet' type='text/css' />
|
||||
|
||||
<link rel="stylesheet" href="<%=media%>/css/style.css?v=git-17.016.25656-a85807d">
|
||||
<link rel="shortcut icon" href="<%=media%>/favicon.ico">
|
||||
<% if node and node.css then %>
|
||||
<link rel="stylesheet" href="<%=resource%>/<%=node.css%>">
|
||||
<% end -%>
|
||||
<% if css then %>
|
||||
<style title="text/css">
|
||||
<%-= css %>
|
||||
</style>
|
||||
<% end -%>
|
||||
<script src="<%=resource%>/xhr.js?v=git-17.016.25656-a85807d"></script>
|
||||
</head>
|
||||
|
||||
<body class="lang_<%=luci.i18n.context.lang%> <%- if node then %><%= striptags( node.title ) %><%- end %> <% if luci.dispatcher.context.authsession then %>logged-in<% end %>">
|
||||
|
||||
<nav class="main-nav" role="navigation">
|
||||
|
||||
<!-- Mobile menu toggle button (hamburger/x icon) -->
|
||||
<input id="main-menu-state" type="checkbox" />
|
||||
<label class="main-menu-btn" for="main-menu-state">
|
||||
<span class="main-menu-btn-icon"></span> Toggle main menu visibility
|
||||
</label>
|
||||
<p class="nav-brand"><a href="/cgi-bin/luci/"><%=striptags( (boardinfo.hostname or "?") ) %></a></p>
|
||||
<!-- <a class="nav-brand" href="/cgi-bin/luci/"><img width="120" alt="Openwrt" src="<%=media%>/images/logo.svg"></a> -->
|
||||
<ul id="main-menu" class="sm sm-blue">
|
||||
<%-
|
||||
local function submenu(prefix, node)
|
||||
local childs = disp.node_childs(node)
|
||||
if #childs > 0 then
|
||||
%>
|
||||
<ul class="slide-menu">
|
||||
<%-
|
||||
for i, r in ipairs(childs) do
|
||||
local nnode = node.nodes[r]
|
||||
local href = controller .. prefix .. r ..
|
||||
(nnode.query and http.build_querystring(nnode.query) or "")
|
||||
%>
|
||||
<li><a data-title="<%=pcdata(striptags(nnode.title))%>" href="<%=pcdata(href)%>"><%=pcdata(striptags(translate(nnode.title)))%></a></li>
|
||||
<%-
|
||||
end
|
||||
%>
|
||||
</ul>
|
||||
<%-
|
||||
end
|
||||
end
|
||||
|
||||
childs = disp.node_childs(cattree)
|
||||
|
||||
if #childs > 0 then
|
||||
for i, r in ipairs(childs) do
|
||||
local nnode = cattree.nodes[r]
|
||||
local href = controller .. "/" .. category .. "/" .. r ..
|
||||
(nnode.query and http.build_querystring(k.query) or "")
|
||||
local grandchildren = disp.node_childs(nnode)
|
||||
|
||||
if #grandchildren > 0 then
|
||||
%>
|
||||
<li class="slide">
|
||||
<a class="menu" data-title="<%=pcdata(striptags(nnode.title))%>" href="#">
|
||||
<i class="fa fa-gear"></i>
|
||||
<%=pcdata(striptags(translate(nnode.title)))%>
|
||||
</a>
|
||||
<%- submenu("/" .. category .. "/" .. r .. "/", nnode) %>
|
||||
</li>
|
||||
<% else %>
|
||||
<li class="slide">
|
||||
<a class="menu" data-title="<%=pcdata(striptags(nnode.title))%>" href="<%=href%>">
|
||||
<i class="fa fa-window-close-o"></i>
|
||||
<%=pcdata(striptags(translate(nnode.title)))%></a>
|
||||
</li>
|
||||
|
||||
<%
|
||||
end
|
||||
end
|
||||
end
|
||||
%>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="main">
|
||||
<div style="" class="loading"><span><div class="loading-img"></div>Loading...</span></div>
|
||||
<div class="main-right">
|
||||
<div class="darkMask"></div>
|
||||
<div id="maincontent">
|
||||
<div class="container">
|
||||
<%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%>
|
||||
<div class="alert-message warning">
|
||||
<h4><%:No password set!%></h4>
|
||||
<%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%><br>
|
||||
<a href="<%=pcdata(luci.dispatcher.build_url("admin/system/admin"))%>"><%:Go to password configuration...%></a>
|
||||
</div>
|
||||
<%- end -%>
|
||||
<% if category then subtree("/" .. category .. "/", cattree) end %>
|
||||
|
||||
7
package/ctcgfw/luci-theme-btmod/root/etc/uci-defaults/luci-theme-btmod
Executable file
@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
uci batch <<-EOF
|
||||
set luci.themes.Btmod=/luci-static/btmod
|
||||
set luci.main.mediaurlbase=/luci-static/btmod
|
||||
commit luci
|
||||
EOF
|
||||
exit 0
|
||||