├── LICENSE
├── README.md
├── luci
├── luci.mk
└── themes
│ └── luci-theme-darkmatter
│ ├── Makefile
│ ├── htdocs
│ └── luci-static
│ │ └── darkmatter
│ │ ├── css
│ │ └── style.css
│ │ ├── fonts
│ │ ├── DIN.woff
│ │ └── icon.woff
│ │ ├── img
│ │ ├── favicon.ico
│ │ ├── logo.png
│ │ ├── noise.png
│ │ └── stripes.svg
│ │ └── js
│ │ ├── jquery.min.js
│ │ └── script.js
│ ├── luasrc
│ └── view
│ │ └── themes
│ │ └── darkmatter
│ │ ├── footer.htm
│ │ └── header.htm
│ └── root
│ └── etc
│ └── uci-defaults
│ └── 30_luci-theme-darkmatter
├── screenshots
├── desktop-interfaces.jpg
├── desktop-load.jpg
├── desktop-status.jpg
├── desktop-wifi-edit.jpg
├── desktop-wifi.jpg
├── phone-load.jpg
├── phone-status.jpg
└── tablet-startup.jpg
└── src
├── script.js
└── style.css
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 2, June 1991
3 |
4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6 | Everyone is permitted to copy and distribute verbatim copies
7 | of this license document, but changing it is not allowed.
8 |
9 | Preamble
10 |
11 | The licenses for most software are designed to take away your
12 | freedom to share and change it. By contrast, the GNU General Public
13 | License is intended to guarantee your freedom to share and change free
14 | software--to make sure the software is free for all its users. This
15 | General Public License applies to most of the Free Software
16 | Foundation's software and to any other program whose authors commit to
17 | using it. (Some other Free Software Foundation software is covered by
18 | the GNU Lesser General Public License instead.) You can apply it to
19 | your programs, too.
20 |
21 | When we speak of free software, we are referring to freedom, not
22 | price. Our General Public Licenses are designed to make sure that you
23 | have the freedom to distribute copies of free software (and charge for
24 | this service if you wish), that you receive source code or can get it
25 | if you want it, that you can change the software or use pieces of it
26 | in new free programs; and that you know you can do these things.
27 |
28 | To protect your rights, we need to make restrictions that forbid
29 | anyone to deny you these rights or to ask you to surrender the rights.
30 | These restrictions translate to certain responsibilities for you if you
31 | distribute copies of the software, or if you modify it.
32 |
33 | For example, if you distribute copies of such a program, whether
34 | gratis or for a fee, you must give the recipients all the rights that
35 | you have. You must make sure that they, too, receive or can get the
36 | source code. And you must show them these terms so they know their
37 | rights.
38 |
39 | We protect your rights with two steps: (1) copyright the software, and
40 | (2) offer you this license which gives you legal permission to copy,
41 | distribute and/or modify the software.
42 |
43 | Also, for each author's protection and ours, we want to make certain
44 | that everyone understands that there is no warranty for this free
45 | software. If the software is modified by someone else and passed on, we
46 | want its recipients to know that what they have is not the original, so
47 | that any problems introduced by others will not reflect on the original
48 | authors' reputations.
49 |
50 | Finally, any free program is threatened constantly by software
51 | patents. We wish to avoid the danger that redistributors of a free
52 | program will individually obtain patent licenses, in effect making the
53 | program proprietary. To prevent this, we have made it clear that any
54 | patent must be licensed for everyone's free use or not licensed at all.
55 |
56 | The precise terms and conditions for copying, distribution and
57 | modification follow.
58 |
59 | GNU GENERAL PUBLIC LICENSE
60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61 |
62 | 0. This License applies to any program or other work which contains
63 | a notice placed by the copyright holder saying it may be distributed
64 | under the terms of this General Public License. The "Program", below,
65 | refers to any such program or work, and a "work based on the Program"
66 | means either the Program or any derivative work under copyright law:
67 | that is to say, a work containing the Program or a portion of it,
68 | either verbatim or with modifications and/or translated into another
69 | language. (Hereinafter, translation is included without limitation in
70 | the term "modification".) Each licensee is addressed as "you".
71 |
72 | Activities other than copying, distribution and modification are not
73 | covered by this License; they are outside its scope. The act of
74 | running the Program is not restricted, and the output from the Program
75 | is covered only if its contents constitute a work based on the
76 | Program (independent of having been made by running the Program).
77 | Whether that is true depends on what the Program does.
78 |
79 | 1. You may copy and distribute verbatim copies of the Program's
80 | source code as you receive it, in any medium, provided that you
81 | conspicuously and appropriately publish on each copy an appropriate
82 | copyright notice and disclaimer of warranty; keep intact all the
83 | notices that refer to this License and to the absence of any warranty;
84 | and give any other recipients of the Program a copy of this License
85 | along with the Program.
86 |
87 | You may charge a fee for the physical act of transferring a copy, and
88 | you may at your option offer warranty protection in exchange for a fee.
89 |
90 | 2. You may modify your copy or copies of the Program or any portion
91 | of it, thus forming a work based on the Program, and copy and
92 | distribute such modifications or work under the terms of Section 1
93 | above, provided that you also meet all of these conditions:
94 |
95 | a) You must cause the modified files to carry prominent notices
96 | stating that you changed the files and the date of any change.
97 |
98 | b) You must cause any work that you distribute or publish, that in
99 | whole or in part contains or is derived from the Program or any
100 | part thereof, to be licensed as a whole at no charge to all third
101 | parties under the terms of this License.
102 |
103 | c) If the modified program normally reads commands interactively
104 | when run, you must cause it, when started running for such
105 | interactive use in the most ordinary way, to print or display an
106 | announcement including an appropriate copyright notice and a
107 | notice that there is no warranty (or else, saying that you provide
108 | a warranty) and that users may redistribute the program under
109 | these conditions, and telling the user how to view a copy of this
110 | License. (Exception: if the Program itself is interactive but
111 | does not normally print such an announcement, your work based on
112 | the Program is not required to print an announcement.)
113 |
114 | These requirements apply to the modified work as a whole. If
115 | identifiable sections of that work are not derived from the Program,
116 | and can be reasonably considered independent and separate works in
117 | themselves, then this License, and its terms, do not apply to those
118 | sections when you distribute them as separate works. But when you
119 | distribute the same sections as part of a whole which is a work based
120 | on the Program, the distribution of the whole must be on the terms of
121 | this License, whose permissions for other licensees extend to the
122 | entire whole, and thus to each and every part regardless of who wrote it.
123 |
124 | Thus, it is not the intent of this section to claim rights or contest
125 | your rights to work written entirely by you; rather, the intent is to
126 | exercise the right to control the distribution of derivative or
127 | collective works based on the Program.
128 |
129 | In addition, mere aggregation of another work not based on the Program
130 | with the Program (or with a work based on the Program) on a volume of
131 | a storage or distribution medium does not bring the other work under
132 | the scope of this License.
133 |
134 | 3. You may copy and distribute the Program (or a work based on it,
135 | under Section 2) in object code or executable form under the terms of
136 | Sections 1 and 2 above provided that you also do one of the following:
137 |
138 | a) Accompany it with the complete corresponding machine-readable
139 | source code, which must be distributed under the terms of Sections
140 | 1 and 2 above on a medium customarily used for software interchange; or,
141 |
142 | b) Accompany it with a written offer, valid for at least three
143 | years, to give any third party, for a charge no more than your
144 | cost of physically performing source distribution, a complete
145 | machine-readable copy of the corresponding source code, to be
146 | distributed under the terms of Sections 1 and 2 above on a medium
147 | customarily used for software interchange; or,
148 |
149 | c) Accompany it with the information you received as to the offer
150 | to distribute corresponding source code. (This alternative is
151 | allowed only for noncommercial distribution and only if you
152 | received the program in object code or executable form with such
153 | an offer, in accord with Subsection b above.)
154 |
155 | The source code for a work means the preferred form of the work for
156 | making modifications to it. For an executable work, complete source
157 | code means all the source code for all modules it contains, plus any
158 | associated interface definition files, plus the scripts used to
159 | control compilation and installation of the executable. However, as a
160 | special exception, the source code distributed need not include
161 | anything that is normally distributed (in either source or binary
162 | form) with the major components (compiler, kernel, and so on) of the
163 | operating system on which the executable runs, unless that component
164 | itself accompanies the executable.
165 |
166 | If distribution of executable or object code is made by offering
167 | access to copy from a designated place, then offering equivalent
168 | access to copy the source code from the same place counts as
169 | distribution of the source code, even though third parties are not
170 | compelled to copy the source along with the object code.
171 |
172 | 4. You may not copy, modify, sublicense, or distribute the Program
173 | except as expressly provided under this License. Any attempt
174 | otherwise to copy, modify, sublicense or distribute the Program is
175 | void, and will automatically terminate your rights under this License.
176 | However, parties who have received copies, or rights, from you under
177 | this License will not have their licenses terminated so long as such
178 | parties remain in full compliance.
179 |
180 | 5. You are not required to accept this License, since you have not
181 | signed it. However, nothing else grants you permission to modify or
182 | distribute the Program or its derivative works. These actions are
183 | prohibited by law if you do not accept this License. Therefore, by
184 | modifying or distributing the Program (or any work based on the
185 | Program), you indicate your acceptance of this License to do so, and
186 | all its terms and conditions for copying, distributing or modifying
187 | the Program or works based on it.
188 |
189 | 6. Each time you redistribute the Program (or any work based on the
190 | Program), the recipient automatically receives a license from the
191 | original licensor to copy, distribute or modify the Program subject to
192 | these terms and conditions. You may not impose any further
193 | restrictions on the recipients' exercise of the rights granted herein.
194 | You are not responsible for enforcing compliance by third parties to
195 | this License.
196 |
197 | 7. If, as a consequence of a court judgment or allegation of patent
198 | infringement or for any other reason (not limited to patent issues),
199 | conditions are imposed on you (whether by court order, agreement or
200 | otherwise) that contradict the conditions of this License, they do not
201 | excuse you from the conditions of this License. If you cannot
202 | distribute so as to satisfy simultaneously your obligations under this
203 | License and any other pertinent obligations, then as a consequence you
204 | may not distribute the Program at all. For example, if a patent
205 | license would not permit royalty-free redistribution of the Program by
206 | all those who receive copies directly or indirectly through you, then
207 | the only way you could satisfy both it and this License would be to
208 | refrain entirely from distribution of the Program.
209 |
210 | If any portion of this section is held invalid or unenforceable under
211 | any particular circumstance, the balance of the section is intended to
212 | apply and the section as a whole is intended to apply in other
213 | circumstances.
214 |
215 | It is not the purpose of this section to induce you to infringe any
216 | patents or other property right claims or to contest validity of any
217 | such claims; this section has the sole purpose of protecting the
218 | integrity of the free software distribution system, which is
219 | implemented by public license practices. Many people have made
220 | generous contributions to the wide range of software distributed
221 | through that system in reliance on consistent application of that
222 | system; it is up to the author/donor to decide if he or she is willing
223 | to distribute software through any other system and a licensee cannot
224 | impose that choice.
225 |
226 | This section is intended to make thoroughly clear what is believed to
227 | be a consequence of the rest of this License.
228 |
229 | 8. If the distribution and/or use of the Program is restricted in
230 | certain countries either by patents or by copyrighted interfaces, the
231 | original copyright holder who places the Program under this License
232 | may add an explicit geographical distribution limitation excluding
233 | those countries, so that distribution is permitted only in or among
234 | countries not thus excluded. In such case, this License incorporates
235 | the limitation as if written in the body of this License.
236 |
237 | 9. The Free Software Foundation may publish revised and/or new versions
238 | of the General Public License from time to time. Such new versions will
239 | be similar in spirit to the present version, but may differ in detail to
240 | address new problems or concerns.
241 |
242 | Each version is given a distinguishing version number. If the Program
243 | specifies a version number of this License which applies to it and "any
244 | later version", you have the option of following the terms and conditions
245 | either of that version or of any later version published by the Free
246 | Software Foundation. If the Program does not specify a version number of
247 | this License, you may choose any version ever published by the Free Software
248 | Foundation.
249 |
250 | 10. If you wish to incorporate parts of the Program into other free
251 | programs whose distribution conditions are different, write to the author
252 | to ask for permission. For software which is copyrighted by the Free
253 | Software Foundation, write to the Free Software Foundation; we sometimes
254 | make exceptions for this. Our decision will be guided by the two goals
255 | of preserving the free status of all derivatives of our free software and
256 | of promoting the sharing and reuse of software generally.
257 |
258 | NO WARRANTY
259 |
260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268 | REPAIR OR CORRECTION.
269 |
270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278 | POSSIBILITY OF SUCH DAMAGES.
279 |
280 | END OF TERMS AND CONDITIONS
281 |
282 | How to Apply These Terms to Your New Programs
283 |
284 | If you develop a new program, and you want it to be of the greatest
285 | possible use to the public, the best way to achieve this is to make it
286 | free software which everyone can redistribute and change under these terms.
287 |
288 | To do so, attach the following notices to the program. It is safest
289 | to attach them to the start of each source file to most effectively
290 | convey the exclusion of warranty; and each file should have at least
291 | the "copyright" line and a pointer to where the full notice is found.
292 |
293 | {description}
294 | Copyright (C) {year} {fullname}
295 |
296 | This program is free software; you can redistribute it and/or modify
297 | it under the terms of the GNU General Public License as published by
298 | the Free Software Foundation; either version 2 of the License, or
299 | (at your option) any later version.
300 |
301 | This program is distributed in the hope that it will be useful,
302 | but WITHOUT ANY WARRANTY; without even the implied warranty of
303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304 | GNU General Public License for more details.
305 |
306 | You should have received a copy of the GNU General Public License along
307 | with this program; if not, write to the Free Software Foundation, Inc.,
308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309 |
310 | Also add information on how to contact you by electronic and paper mail.
311 |
312 | If the program is interactive, make it output a short notice like this
313 | when it starts in an interactive mode:
314 |
315 | Gnomovision version 69, Copyright (C) year name of author
316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317 | This is free software, and you are welcome to redistribute it
318 | under certain conditions; type `show c' for details.
319 |
320 | The hypothetical commands `show w' and `show c' should show the appropriate
321 | parts of the General Public License. Of course, the commands you use may
322 | be called something other than `show w' and `show c'; they could even be
323 | mouse-clicks or menu items--whatever suits your program.
324 |
325 | You should also get your employer (if you work as a programmer) or your
326 | school, if any, to sign a "copyright disclaimer" for the program, if
327 | necessary. Here is a sample; alter the names:
328 |
329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330 | `Gnomovision' (which makes passes at compilers) written by James Hacker.
331 |
332 | {signature of Ty Coon}, 1 April 1989
333 | Ty Coon, President of Vice
334 |
335 | This General Public License does not permit incorporating your program into
336 | proprietary programs. If your program is a subroutine library, you may
337 | consider it more useful to permit linking proprietary applications with the
338 | library. If this is what you want to do, use the GNU Lesser General
339 | Public License instead of this License.
340 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Darkmatter theme for LuCI (LEDE/OpenWRT)
2 | ========================================
3 |
4 | Darkmatter is an alternative HTML5 theme for LuCI that has evolved from
5 | luci-theme-bootstrap & luci-theme-material, in an attempt to bring a more
6 | concise, clean and visually pleasing UX to LEDE/OpenWRT.
7 |
8 | Issues & Updates
9 | ----------------
10 |
11 | Found a bug? Please create an issue on GitHub:
12 | https://github.com/apollo-ng/luci-theme-darkmatter/issues
13 |
14 | Further tests and PR's are welcome and appreciated.
15 |
16 | Installation
17 | ------------
18 |
19 | In time, darkmatter may be included upstream by the LEDE/OpenWRT crowd,
20 | to have it always available, for now, please select an installation method
21 | most suited for your case to get it:
22 |
23 | ### Adding Darkmatter to your running LEDE/OpenWRT as ipk package
24 |
25 | #### via LuCI
26 |
27 | * Go to System -> Software
28 | * Paste the following URL into the **Download and install package** field:
29 | - https://apollo.open-resource.org/downloads/luci-theme-darkmatter_0.2-beta-2_all.ipk
30 | * Press Enter or click "OK"
31 |
32 | #### via shell
33 |
34 | $ cd /tmp
35 | $ wget https://apollo.open-resource.org/downloads/luci-theme-darkmatter_0.2-beta-2_all.ipk
36 | $ opkg install luci-theme-darkmatter_0.2-beta-2_all.ipk
37 |
38 | ### Adding Darkmatter to your own LEDE/OpenWRT Build
39 |
40 | Edit your feeds.conf and add the following to it:
41 |
42 | # luci-theme-darkmatter
43 | src-git darkmatter git://github.com/apollo-ng/luci-theme-darkmatter.git
44 |
45 | Update your build environment and install the package:
46 |
47 | $ scripts/feeds update darkmatter
48 | $ scripts/feeds install luci-theme-darkmatter
49 | $ make menuconfig
50 |
51 | Go to LuCI -> Themes, select luci-theme-darkmatter, exit, save and build as usual.
52 |
53 | Enable the Theme
54 | ----------------
55 |
56 | * Go to System -> System -> Language and Style
57 | * Choose Darkmatter in the Design selectbox
58 |
59 | Screenshots
60 | ----------
61 |
62 | ### Desktop
63 |
64 | 
65 | 
66 | 
67 | 
68 | 
69 |
70 | ### Tablet
71 |
72 | 
73 |
74 | ### Phone
75 |
76 | 
77 | 
78 |
79 | License
80 | -------
81 |
82 | This program is free software; you can redistribute it and/or
83 | modify it under the terms of the GNU General Public License
84 | as published by the Free Software Foundation; either version 2
85 | of the License, or (at your option) any later version.
86 |
--------------------------------------------------------------------------------
/luci/luci.mk:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright (C) 2008-2015 The LuCI Team
3 | #
4 | # This is free software, licensed under the Apache License, Version 2.0 .
5 | #
6 |
7 | LUCI_NAME?=$(notdir ${CURDIR})
8 | LUCI_TYPE?=$(word 2,$(subst -, ,$(LUCI_NAME)))
9 | LUCI_BASENAME?=$(patsubst luci-$(LUCI_TYPE)-%,%,$(LUCI_NAME))
10 | LUCI_LANGUAGES:=$(filter-out templates,$(notdir $(wildcard ${CURDIR}/po/*)))
11 | LUCI_DEFAULTS:=$(notdir $(wildcard ${CURDIR}/root/etc/uci-defaults/*))
12 | LUCI_PKGARCH?=$(if $(realpath src/Makefile),,all)
13 |
14 | # Language code titles
15 | LUCI_LANG.ca=Català (Catalan)
16 | LUCI_LANG.cs=Čeština (Czech)
17 | LUCI_LANG.de=Deutsch (German)
18 | LUCI_LANG.el=Ελληνικά (Greek)
19 | LUCI_LANG.en=English
20 | LUCI_LANG.es=Español (Spanish)
21 | LUCI_LANG.fr=Français (French)
22 | LUCI_LANG.he=עִבְרִית (Hebrew)
23 | LUCI_LANG.hu=Magyar (Hungarian)
24 | LUCI_LANG.it=Italiano (Italian)
25 | LUCI_LANG.ja=日本語 (Japanese)
26 | LUCI_LANG.ko=한국어 (Korean)
27 | LUCI_LANG.ms=Bahasa Melayu (Malay)
28 | LUCI_LANG.no=Norsk (Norwegian)
29 | LUCI_LANG.pl=Polski (Polish)
30 | LUCI_LANG.pt-br=Português do Brasil (Brazialian Portuguese)
31 | LUCI_LANG.pt=Português (Portuguese)
32 | LUCI_LANG.ro=Română (Romanian)
33 | LUCI_LANG.ru=Русский (Russian)
34 | LUCI_LANG.sk=Slovenčina (Slovak)
35 | LUCI_LANG.sv=Svenska (Swedish)
36 | LUCI_LANG.tr=Türkçe (Turkish)
37 | LUCI_LANG.uk=украї́нська (Ukrainian)
38 | LUCI_LANG.vi=Tiếng Việt (Vietnamese)
39 | LUCI_LANG.zh-cn=普通话 (Chinese)
40 | LUCI_LANG.zh-tw=臺灣華語 (Taiwanese)
41 |
42 | # Submenu titles
43 | LUCI_MENU.col=1. Collections
44 | LUCI_MENU.mod=2. Modules
45 | LUCI_MENU.app=3. Applications
46 | LUCI_MENU.theme=4. Themes
47 | LUCI_MENU.proto=5. Protocols
48 | LUCI_MENU.lib=6. Libraries
49 |
50 |
51 | PKG_NAME?=$(LUCI_NAME)
52 |
53 | PKG_VERSION?=$(if $(DUMP),x,$(strip $(shell \
54 | if svn info >/dev/null 2>/dev/null; then \
55 | revision="svn-r$$(LC_ALL=C svn info | sed -ne 's/^Revision: //p')"; \
56 | elif git log -1 >/dev/null 2>/dev/null; then \
57 | revision="svn-r$$(LC_ALL=C git log -1 | sed -ne 's/.*git-svn-id: .*@\([0-9]\+\) .*/\1/p')"; \
58 | if [ "$$revision" = "svn-r" ]; then \
59 | set -- $$(git log -1 --format="%ct %h"); \
60 | secs="$$(($$1 % 86400))"; \
61 | yday="$$(date --utc --date="@$$1" "+%y.%j")"; \
62 | revision="$$(printf 'git-%s.%05d-%s' "$$yday" "$$secs" "$$2")"; \
63 | fi; \
64 | else \
65 | revision="unknown"; \
66 | fi; \
67 | echo "$$revision" \
68 | )))
69 |
70 | PKG_GITBRANCH?=$(if $(DUMP),x,$(strip $(shell \
71 | variant="LuCI"; \
72 | if git log -1 >/dev/null 2>/dev/null; then \
73 | branch="$$(git symbolic-ref --short -q HEAD 2>/dev/null)"; \
74 | if [ "$$branch" != "master" ]; then \
75 | variant="LuCI $$branch branch"; \
76 | else \
77 | variant="LuCI Master"; \
78 | fi; \
79 | fi; \
80 | echo "$$variant" \
81 | )))
82 |
83 | PKG_RELEASE?=1
84 | PKG_INSTALL:=$(if $(realpath src/Makefile),1)
85 | PKG_BUILD_DEPENDS += lua/host luci-base/host $(LUCI_BUILD_DEPENDS)
86 | PKG_CONFIG_DEPENDS += CONFIG_LUCI_SRCDIET
87 |
88 | PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
89 |
90 | include $(INCLUDE_DIR)/package.mk
91 |
92 | define Package/$(PKG_NAME)
93 | SECTION:=luci
94 | CATEGORY:=LuCI
95 | SUBMENU:=$(if $(LUCI_MENU.$(LUCI_TYPE)),$(LUCI_MENU.$(LUCI_TYPE)),$(LUCI_MENU.app))
96 | TITLE:=$(if $(LUCI_TITLE),$(LUCI_TITLE),LuCI $(LUCI_NAME) $(LUCI_TYPE))
97 | DEPENDS:=$(LUCI_DEPENDS)
98 | $(if $(LUCI_PKGARCH),PKGARCH:=$(LUCI_PKGARCH))
99 | endef
100 |
101 | ifneq ($(LUCI_DESCRIPTION),)
102 | define Package/$(PKG_NAME)/description
103 | $(strip $(LUCI_DESCRIPTION))
104 | endef
105 | endif
106 |
107 | # Language selection for luci-base
108 | ifeq ($(PKG_NAME),luci-base)
109 | define Package/luci-base/config
110 | config LUCI_SRCDIET
111 | bool "Minify Lua sources"
112 | default n
113 |
114 | menu "Translations"$(foreach lang,$(LUCI_LANGUAGES),
115 |
116 | config LUCI_LANG_$(lang)
117 | tristate "$(shell echo '$(LUCI_LANG.$(lang))' | sed -e 's/^.* (\(.*\))$$/\1/') ($(lang))")
118 |
119 | endmenu
120 | endef
121 | endif
122 |
123 | define Build/Prepare
124 | for d in luasrc htdocs root src; do \
125 | if [ -d ./$$$$d ]; then \
126 | mkdir -p $(PKG_BUILD_DIR)/$$$$d; \
127 | $(CP) ./$$$$d/* $(PKG_BUILD_DIR)/$$$$d/; \
128 | fi; \
129 | done
130 | $(call Build/Prepare/Default)
131 | endef
132 |
133 | define Build/Configure
134 | endef
135 |
136 | ifneq ($(wildcard ${CURDIR}/src/Makefile),)
137 | MAKE_PATH := src/
138 | MAKE_VARS += FPIC="$(FPIC)" LUCI_VERSION="$(PKG_VERSION)" LUCI_GITBRANCH="$(PKG_GITBRANCH)"
139 |
140 | define Build/Compile
141 | $(call Build/Compile/Default,clean compile)
142 | endef
143 | else
144 | define Build/Compile
145 | endef
146 | endif
147 |
148 | HTDOCS = /www
149 | LUA_LIBRARYDIR = /usr/lib/lua
150 | LUCI_LIBRARYDIR = $(LUA_LIBRARYDIR)/luci
151 |
152 | define SrcDiet
153 | $(FIND) $(1) -type f -name '*.lua' | while read src; do \
154 | if LuaSrcDiet --noopt-binequiv -o "$$$$src.o" "$$$$src"; \
155 | then mv "$$$$src.o" "$$$$src"; fi; \
156 | done
157 | endef
158 |
159 | define SubstituteVersion
160 | $(FIND) $(1) -type f -name '*.htm' | while read src; do \
161 | $(SED) 's/<%# *\([^ ]*\)PKG_VERSION *%>/\1$(PKG_VERSION)/g' \
162 | -e 's/"\(<%= *\(media\|resource\) *%>[^"]*\.\(js\|css\)\)"/"\1?v=$(PKG_VERSION)"/g' \
163 | "$$$$src"; \
164 | done
165 | endef
166 |
167 | define Package/$(PKG_NAME)/install
168 | if [ -d $(PKG_BUILD_DIR)/luasrc ]; then \
169 | $(INSTALL_DIR) $(1)$(LUCI_LIBRARYDIR); \
170 | cp -pR $(PKG_BUILD_DIR)/luasrc/* $(1)$(LUCI_LIBRARYDIR)/; \
171 | $(FIND) $(1)$(LUCI_LIBRARYDIR)/ -type f -name '*.luadoc' | $(XARGS) rm; \
172 | $(if $(CONFIG_LUCI_SRCDIET),$(call SrcDiet,$(1)$(LUCI_LIBRARYDIR)/),true); \
173 | $(call SubstituteVersion,$(1)$(LUCI_LIBRARYDIR)/); \
174 | else true; fi
175 | if [ -d $(PKG_BUILD_DIR)/htdocs ]; then \
176 | $(INSTALL_DIR) $(1)$(HTDOCS); \
177 | cp -pR $(PKG_BUILD_DIR)/htdocs/* $(1)$(HTDOCS)/; \
178 | else true; fi
179 | if [ -d $(PKG_BUILD_DIR)/root ]; then \
180 | $(INSTALL_DIR) $(1)/; \
181 | cp -pR $(PKG_BUILD_DIR)/root/* $(1)/; \
182 | else true; fi
183 | if [ -d $(PKG_BUILD_DIR)/src ]; then \
184 | $(call Build/Install/Default) \
185 | $(CP) $(PKG_INSTALL_DIR)/* $(1)/; \
186 | else true; fi
187 | endef
188 |
189 | ifneq ($(LUCI_DEFAULTS),)
190 | define Package/$(PKG_NAME)/postinst
191 | [ -n "$${IPKG_INSTROOT}" ] || {$(foreach script,$(LUCI_DEFAULTS),
192 | (. /etc/uci-defaults/$(script)) && rm -f /etc/uci-defaults/$(script))
193 | exit 0
194 | }
195 | endef
196 | endif
197 |
198 |
199 | LUCI_BUILD_PACKAGES := $(PKG_NAME)
200 |
201 | define LuciTranslation
202 | define Package/luci-i18n-$(LUCI_BASENAME)-$(1)
203 | SECTION:=luci
204 | CATEGORY:=LuCI
205 | TITLE:=$(PKG_NAME) - $(1) translation
206 | HIDDEN:=1
207 | DEFAULT:=LUCI_LANG_$(1)||(ALL&&m)
208 | DEPENDS:=$(PKG_NAME)
209 | PKGARCH:=all
210 | endef
211 |
212 | define Package/luci-i18n-$(LUCI_BASENAME)-$(1)/description
213 | Translation for $(PKG_NAME) - $(LUCI_LANG.$(1))
214 | endef
215 |
216 | define Package/luci-i18n-$(LUCI_BASENAME)-$(1)/install
217 | $$(INSTALL_DIR) $$(1)/etc/uci-defaults
218 | echo "uci set luci.languages.$(subst -,_,$(1))='$(LUCI_LANG.$(1))'; uci commit luci" \
219 | > $$(1)/etc/uci-defaults/luci-i18n-$(LUCI_BASENAME)-$(1)
220 | $$(INSTALL_DIR) $$(1)$(LUCI_LIBRARYDIR)/i18n
221 | $(foreach po,$(wildcard ${CURDIR}/po/$(1)/*.po), \
222 | po2lmo $(po) \
223 | $$(1)$(LUCI_LIBRARYDIR)/i18n/$(basename $(notdir $(po))).$(1).lmo;)
224 | endef
225 |
226 | define Package/luci-i18n-$(LUCI_BASENAME)-$(1)/postinst
227 | [ -n "$$$${IPKG_INSTROOT}" ] || {
228 | (. /etc/uci-defaults/luci-i18n-$(LUCI_BASENAME)-$(1)) && rm -f /etc/uci-defaults/luci-i18n-$(LUCI_BASENAME)-$(1)
229 | exit 0
230 | }
231 | endef
232 |
233 | LUCI_BUILD_PACKAGES += luci-i18n-$(LUCI_BASENAME)-$(1)
234 |
235 | endef
236 |
237 | $(foreach lang,$(LUCI_LANGUAGES),$(eval $(call LuciTranslation,$(lang))))
238 | $(foreach pkg,$(LUCI_BUILD_PACKAGES),$(eval $(call BuildPackage,$(pkg))))
239 |
--------------------------------------------------------------------------------
/luci/themes/luci-theme-darkmatter/Makefile:
--------------------------------------------------------------------------------
1 | # luci-theme-darkmatter
2 | # Copyright 2017 chrono
3 | #
4 | # Darkmatter is an alternative HTML5 theme for LuCI that has evolved from
5 | # luci-theme-bootstrap & luci-theme-material, in an attempt to bring a more
6 | # concise, clean and visually pleasing UX to LEDE/OpenWRT.
7 | #
8 | # Have a bug? Please create an issue here on GitHub!
9 | # https://github.com/apollo-ng/luci-theme-darkmatter/issues
10 | #
11 | # luci-theme-material
12 | # Copyright 2015 Lutty Yang
13 | # luci-theme-bootstrap:
14 | # Copyright 2008 Steven Barth
15 | # Copyright 2008 Jo-Philipp Wich
16 | # Copyright 2012 David Menting
17 | #
18 | # This program is free software; you can redistribute it and/or
19 | # modify it under the terms of the GNU General Public License
20 | # as published by the Free Software Foundation; either version 2
21 | # of the License, or (at your option) any later version.
22 |
23 | include $(TOPDIR)/rules.mk
24 |
25 | LUCI_TITLE:=Darkmatter Theme
26 | LUCI_DEPENDS:=
27 |
28 | include ../../luci.mk
29 |
30 | # call BuildPackage - OpenWrt buildroot signature
31 |
--------------------------------------------------------------------------------
/luci/themes/luci-theme-darkmatter/htdocs/luci-static/darkmatter/css/style.css:
--------------------------------------------------------------------------------
1 | *,
2 | body,
3 | html {
4 | margin: 0;
5 | padding: 0
6 | }
7 |
8 | abbr,
9 | footer>a,
10 | header>.container>.brand {
11 | text-decoration: none
12 | }
13 |
14 | .main,
15 | .panel-title,
16 | header,
17 | table {
18 | width: 100%
19 | }
20 |
21 | @font-face {
22 | font-family: icomoon;
23 | src: url(../fonts/icon.woff) format("woff");
24 | font-weight: 400;
25 | font-style: normal
26 | }
27 |
28 | @font-face {
29 | font-family: DIN;
30 | src: url(../fonts/DIN.woff) format("woff");
31 | font-weight: 400;
32 | font-style: normal;
33 | font-stretch: normal;
34 | unicode-range: U+0020-F000
35 | }
36 |
37 | .cbi-button-down,
38 | .cbi-button-up,
39 | .cbi-value-helpicon,
40 | .main>.loading>span,
41 | .showSide {
42 | speak: none;
43 | font-style: normal !important;
44 | font-weight: 400 !important;
45 | font-variant: normal !important;
46 | text-transform: none !important;
47 | line-height: 1;
48 | -webkit-font-smoothing: antialiased;
49 | -moz-osx-font-smoothing: grayscale
50 | }
51 |
52 | * {
53 | box-sizing: border-box
54 | }
55 |
56 | .h1,
57 | .h2,
58 | .h3,
59 | .h4,
60 | .h5,
61 | .h6,
62 | h1,
63 | h2,
64 | h3,
65 | h4,
66 | h5,
67 | h6 {
68 | font-family: inherit;
69 | font-weight: 400;
70 | line-height: 1;
71 | color: inherit
72 | }
73 |
74 | html {
75 | -webkit-text-size-adjust: 100%;
76 | -ms-text-size-adjust: 100%
77 | }
78 |
79 | body,
80 | html {
81 | height: 100%;
82 | font-family: DIN, Helvetica, Arial, sans-serif
83 | }
84 |
85 | a,
86 | a:active,
87 | a:hover,
88 | a:link,
89 | a:visited {
90 | color: rgba(117, 137, 12, .75);
91 | text-decoration: none
92 | }
93 |
94 | input,
95 | select {
96 | background-color: #1f1e1a;
97 | color: #fff;
98 | text-shadow: -1px 0 #000, 0 1px #000, 1px 0 #000, 0 -1px #000, 0 0 3px #000;
99 | border: 1px solid #4f4e4a;
100 | outline: 0;
101 | padding: 0;
102 | box-shadow: inset 0 0 12px #000;
103 | border-radius: 0;
104 | background-image: none;
105 | height: 1.9rem;
106 | font-size: 1rem
107 | }
108 |
109 | input {
110 | padding-left: 4px
111 | }
112 |
113 | input[type=checkbox],
114 | input[type=radio] {
115 | background: 0 0;
116 | box-shadow: none
117 | }
118 |
119 | input[type=file] {
120 | padding: 0 !important;
121 | height: inherit
122 | }
123 |
124 | input:focus,
125 | select:not([multiple=multiple]):focus {
126 | border-color: rgba(117, 136, 12, .94)
127 | }
128 |
129 | select[multiple=multiple] {
130 | height: auto
131 | }
132 |
133 | code {
134 | color: #0f0e0a;
135 | text-shadow: none
136 | }
137 |
138 | abbr {
139 | color: rgba(117, 137, 12, .85);
140 | text-shadow: 0 0 2px rgba(0, 0, 0, 1), 0 0 2px rgba(0, 0, 0, 1);
141 | cursor: help
142 | }
143 |
144 | hr {
145 | margin: 1rem 0;
146 | border-color: #1f1e1a;
147 | opacity: .1
148 | }
149 |
150 | header {
151 | height: 56px;
152 | background: url(../img/stripes.svg) #1f1e1a;
153 | color: #d8d3c5;
154 | box-shadow: 0 2px 5px rgba(0, 0, 0, .26), inset 0 0 42px 0 #000;
155 | transition: box-shadow .2s;
156 | float: left;
157 | position: fixed;
158 | z-index: 101
159 | }
160 |
161 | header>.container {
162 | padding: 0 1rem;
163 | height: 56px;
164 | line-height: 56px
165 | }
166 |
167 | header>.container>.brand {
168 | font-size: 1.5rem;
169 | color: #d8d3c5;
170 | cursor: default;
171 | vertical-align: text-bottom
172 | }
173 |
174 | footer {
175 | text-align: right;
176 | padding: 1rem;
177 | color: #aaa;
178 | font-size: .8rem;
179 | text-shadow: 0 0 2px #BBB
180 | }
181 |
182 | .cbi-button,
183 | .cbi-section-table-cell,
184 | .cbi-section-table-row,
185 | .main>.loading>span {
186 | text-align: center
187 | }
188 |
189 | .main-right,
190 | .main>.main-left>.nav>li a {
191 | text-shadow: -1px 0 #1f1e1a, 0 1px #1f1e1a, 1px 0 #1f1e1a, 0 -1px #1f1e1a, 0 0 3px #1f1e1a
192 | }
193 |
194 | footer>a {
195 | color: #aaa
196 | }
197 |
198 | .main {
199 | top: 56px;
200 | bottom: 0;
201 | position: relative;
202 | height: 100%;
203 | height: calc(100% - 56px)
204 | }
205 |
206 | .main-left,
207 | .main>.loading {
208 | height: 100%;
209 | position: fixed
210 | }
211 |
212 | .main>.loading {
213 | width: 100%;
214 | z-index: 1000;
215 | display: block;
216 | background-color: #4f4e4a;
217 | top: 0
218 | }
219 |
220 | .main>.loading>span {
221 | display: block;
222 | margin-top: 20%;
223 | color: #d8d3c5;
224 | font-size: 2rem
225 | }
226 |
227 | .main>.loading>span>.loading-img:before {
228 | font-family: icomoon;
229 | content: "\e603"
230 | }
231 |
232 | .main>.loading>span>.loading-img {
233 | animation: anim-rotate 2s infinite linear;
234 | margin-right: 1rem;
235 | display: inline-block;
236 | color: rgba(117, 137, 12, 1)
237 | }
238 |
239 | @keyframes anim-rotate {
240 | 0% {
241 | -webkit-transform: rotate(0);
242 | -ms-transform: rotate(0);
243 | transform: rotate(0)
244 | }
245 |
246 | 100% {
247 | -webkit-transform: rotate(360deg);
248 | -ms-transform: rotate(360deg);
249 | transform: rotate(360deg)
250 | }
251 | }
252 |
253 | .main-left {
254 | float: left;
255 | top: 56px;
256 | width: 15%;
257 | width: calc(0% + 15rem);
258 | height: calc(100% - 56px);
259 | color: #d8d3c5;
260 | background: #2f2e2a;
261 | background: linear-gradient(to bottom, #2f2e2a 0, #1f1e1a 100%);
262 | background: -webkit-linear-gradient(top, #2f2e2a 0, #1f1e1a 100%);
263 | overflow-x: auto
264 | }
265 |
266 | .main-right,
267 | .pull-right {
268 | float: right
269 | }
270 |
271 | .main-right {
272 | width: 85%;
273 | width: calc(100% - 15rem);
274 | height: 100%;
275 | font-size: .85rem;
276 | background-color: #4f4e4a
277 | }
278 |
279 | .main-right>#maincontent {
280 | background-color: #4f4e4a;
281 | color: #fafafa
282 | }
283 |
284 | .pull-left {
285 | float: left
286 | }
287 |
288 | .warning {
289 | background-color: #FF7D60 !important;
290 | color: #FFF
291 | }
292 |
293 | .alert-message,
294 | .errorbox {
295 | margin: 2rem 0 0;
296 | padding: 2rem;
297 | border: 0;
298 | font-weight: 400;
299 | font-style: normal;
300 | line-height: 1;
301 | font-family: inherit;
302 | min-width: inherit;
303 | overflow: auto;
304 | border-radius: 0;
305 | background-color: #FFF;
306 | box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12)
307 | }
308 |
309 | .errorbox {
310 | color: #fff;
311 | background-color: #f0ad4e;
312 | border-color: #eea236
313 | }
314 |
315 | .error {
316 | color: red
317 | }
318 |
319 | #maincontent>.container>div:nth-child(1).alert-message.warning>a {
320 | font: inherit;
321 | overflow: visible;
322 | text-transform: none;
323 | display: inline-block;
324 | margin-bottom: 0;
325 | font-weight: 400;
326 | text-align: center;
327 | white-space: nowrap;
328 | vertical-align: middle;
329 | touch-action: manipulation;
330 | cursor: pointer;
331 | -webkit-user-select: none;
332 | -moz-user-select: none;
333 | -ms-user-select: none;
334 | user-select: none;
335 | background-image: none;
336 | min-width: 6rem;
337 | padding: .5rem 1rem;
338 | font-size: .9rem;
339 | line-height: 1.42857143;
340 | color: #fff;
341 | background-color: #5bc0de;
342 | border-color: #46b8da;
343 | margin-top: 2rem;
344 | text-decoration: inherit
345 | }
346 |
347 | .main>.main-left>.nav>.slide>a.menu.active,
348 | .main>.main-left>.nav>li {
349 | border-bottom: 1px solid #0f0e0a
350 | }
351 |
352 | .main>.main-left>.nav>li a {
353 | color: #d8d3c5;
354 | display: block
355 | }
356 |
357 | .main>.main-left>.nav>.slide>.menu.active,
358 | .main>.main-left>.nav>.slide>.slide-menu>.active>a,
359 | h2>a,
360 | h2>a:hover {
361 | color: #fafafa
362 | }
363 |
364 | .main>.main-left>.nav>li:nth-last-child(1) {
365 | background: rgba(175, 46, 17, .3);
366 | margin: 0
367 | }
368 |
369 | .main>.main-left>.nav>li:nth-last-child(1) a {
370 | text-decoration: none
371 | }
372 |
373 | .main>.main-left>.nav>li {
374 | background: url(../img/noise.png) #2f2e2a;
375 | padding: .5rem 1rem;
376 | cursor: pointer
377 | }
378 |
379 | .main>.main-left>.nav>.slide {
380 | padding: 0
381 | }
382 |
383 | h1,
384 | h3 {
385 | padding-bottom: 10px
386 | }
387 |
388 | .main>.main-left>.nav>.slide>ul {
389 | display: none
390 | }
391 |
392 | .main>.main-left>.nav>.slide>.menu {
393 | display: block;
394 | padding-left: 1rem;
395 | text-decoration: none;
396 | cursor: pointer;
397 | font-size: 1.1rem;
398 | line-height: 42px;
399 | height: 42px
400 | }
401 |
402 | .main>.main-left>.nav>.slide>.menu:hover {
403 | background: url(../img/noise.png) #4f4e4a
404 | }
405 |
406 | .main>.main-left>.nav>.slide>.menu.active:hover {
407 | background: 0 0
408 | }
409 |
410 | .main>.main-left>.nav>.slide>.slide-menu>.active {
411 | background: #4f4e4a !important;
412 | border-top: 1px solid #63615e !important
413 | }
414 |
415 | .main>.main-left>.nav>.slide>.slide-menu.active>li {
416 | padding-left: 2rem;
417 | border-top: 1px solid #4c4b48;
418 | border-bottom: 1px solid #0f0e0a;
419 | background: url(../img/noise.png) #3f3e3a
420 | }
421 |
422 | .main>.main-left>.nav>.slide>.slide-menu.active>li:nth-last-child(1) {
423 | border-bottom: none
424 | }
425 |
426 | .main>.main-left>.nav>.slide>.slide-menu.active>li:hover {
427 | background: rgba(117, 137, 12, .45) !important;
428 | border-top: 1px solid rgba(129, 140, 72, .45)
429 | }
430 |
431 | .main>.main-left>.nav>.slide>.slide-menu>li>a {
432 | text-decoration: none;
433 | white-space: nowrap;
434 | font-size: .95rem;
435 | line-height: 41px
436 | }
437 |
438 | .main>.main-left>.nav>.slide>.slide-menu>li:hover {
439 | background: url(../img/noise.png) #3f3e3a
440 | }
441 |
442 | .main>.main-left>.nav>.slide>.slide-menu>.active:hover {
443 | cursor: hand
444 | }
445 |
446 | li {
447 | list-style-type: none
448 | }
449 |
450 | #maincontent>.container {
451 | margin: 0 2rem 1rem
452 | }
453 |
454 | h1 {
455 | font-size: 2rem;
456 | border-bottom: 1px solid #eee
457 | }
458 |
459 | h2 {
460 | margin: 12px 0 0;
461 | font-size: 1.6rem;
462 | line-height: 2.5rem;
463 | padding-bottom: 12px
464 | }
465 |
466 | .panel-title,
467 | h3 {
468 | font-size: 1.4rem
469 | }
470 |
471 | h3 {
472 | margin: 2rem 0 0
473 | }
474 |
475 | fieldset {
476 | margin-bottom: 1rem;
477 | border: 1px solid rgba(37, 35, 35, .25);
478 | font-weight: 400;
479 | font-style: normal;
480 | line-height: 1;
481 | font-family: inherit;
482 | min-width: inherit;
483 | overflow-x: auto;
484 | overflow-y: hidden;
485 | border-radius: 0;
486 | -webkit-overflow-scrolling: touch;
487 | background: #2f2e2a
488 | }
489 |
490 | .cbi-map-descr+fieldset {
491 | margin-top: 1rem
492 | }
493 |
494 | legend {
495 | display: none !important
496 | }
497 |
498 | fieldset>fieldset {
499 | margin: 0;
500 | padding: 0;
501 | border: none;
502 | box-shadow: none
503 | }
504 |
505 | fieldset>button {
506 | margin: 8px
507 | }
508 |
509 | .panel-title {
510 | display: block;
511 | line-height: 2.2rem;
512 | padding-bottom: 0;
513 | background: #2f2e2a;
514 | padding-left: 8px;
515 | border-bottom: 1px solid #1f1e1a;
516 | border-top: 1px solid #1f1e1a
517 | }
518 |
519 | fieldset>.panel-title:nth-of-type(1) {
520 | border-top: none
521 | }
522 |
523 | /*
524 | * Tables.less
525 | * Tables for, you guessed it, tabular data
526 | * ---------------------------------------- */
527 |
528 | .tr { display: table-row; }
529 | .table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; }
530 | .table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; }
531 |
532 | .table {
533 | display: table;
534 | width: 100%;
535 | margin-bottom: 18px;
536 | padding: 0;
537 | font-size: 13px;
538 | border-collapse: collapse;
539 | position: relative;
540 | }
541 |
542 | .table .th, .table .td {
543 | display: table-cell;
544 | vertical-align: middle;
545 | padding: 10px 10px 9px;
546 | line-height: 18px;
547 | text-align: left;
548 | }
549 |
550 | .table .tr:first-child .th {
551 | padding-top: 9px;
552 | font-weight: bold;
553 | vertical-align: top;
554 | }
555 |
556 | .tr.placeholder {
557 | height: calc(3em + 20px);
558 | }
559 |
560 | .tr.placeholder > .td {
561 | position: absolute;
562 | left: 0;
563 | right: 0;
564 | bottom: 0;
565 | text-align: center;
566 | line-height: 3em;
567 | }
568 |
569 | .table {
570 | border-spacing: 0;
571 | border-collapse: collapse;
572 | border: none;
573 | margin: 0 !important
574 | }
575 |
576 | .cbi-rowstyle-1,
577 | .cbi-rowstyle-2 {
578 | border-bottom: 1px solid #1f1e1a
579 | }
580 |
581 | .table .tr .td,
582 | .table .tr .th {
583 | padding: .5rem;
584 | white-space: nowrap
585 | }
586 |
587 | .table .tr {
588 | border-top: 1px solid #3f3e3a
589 | }
590 |
591 | .cbi-rowstyle-1 {
592 | background-color: #3f3e3a;
593 | border-top: 1px solid #4f4e4a
594 | }
595 |
596 | .cbi-rowstyle-2 {
597 | background-color: #2f2e2a;
598 | border-top: 1px solid #3f3e3a
599 | }
600 |
601 | .table .tr:nth-last-child(1) {
602 | border-bottom: none
603 | }
604 |
605 | #conns>div,
606 | #membuff>div,
607 | #memfree>div,
608 | #memtotal>div,
609 | #swapfree>div,
610 | #swaptotal>div {
611 | width: 100% !important;
612 | height: 1.2rem !important;
613 | background: #1f1e1a;
614 | border: 1px solid #000 !important
615 | }
616 |
617 | #conns>div>div,
618 | #membuff>div>div,
619 | #memfree>div>div,
620 | #memtotal>div>div,
621 | #swapfree>div>div,
622 | #swaptotal>div>div {
623 | height: 100% !important;
624 | background-color: rgba(117, 137, 12, .75) !important
625 | }
626 |
627 | #conns>div>div>div,
628 | #membuff>div>div>div,
629 | #memfree>div>div>div,
630 | #memtotal>div>div>div,
631 | #swapfree>div>div>div,
632 | #swaptotal>div>div>div {
633 | color: #fafafa !important;
634 | line-height: 17px
635 | }
636 |
637 | .cbi-value-field table,
638 | .cbi-value-field>table>tbody>tr>td,
639 | table table,
640 | td>table>tbody>tr>td {
641 | border: none
642 | }
643 |
644 | .cbi-button {
645 | height: 1.65rem;
646 | margin-top: -0.35rem;
647 | -webkit-appearance: none;
648 | display: inline-block;
649 | cursor: pointer;
650 | -ms-touch-action: manipulation;
651 | touch-action: manipulation;
652 | vertical-align: middle;
653 | white-space: nowrap;
654 | -webkit-user-select: none;
655 | -moz-user-select: none;
656 | -ms-user-select: none;
657 | user-select: none;
658 | width: auto !important;
659 | color: #d8d3c5;
660 | font-size: .8rem;
661 | font-family: DIN;
662 | font-weight: 700;
663 | text-shadow: 0 1px 1px #000;
664 | text-decoration: none;
665 | border-width: 1px;
666 | border-radius: 0;
667 | border-style: solid;
668 | border-color: #44433f #44433f #3a3935;
669 | box-shadow: inset 0 0 24px 0 #2f2e2c, 0 0 3px 0 #000;
670 | background: -webkit-linear-gradient(top, #494744 0, #2f2e2c 100%);
671 | background: linear-gradient(to bottom, #494744 0, #2f2e2c 100%);
672 | padding: 5px
673 | }
674 |
675 | .cbi-button:active,
676 | .cbi-button:focus,
677 | .cbi-button:hover {
678 | outline: 0;
679 | text-decoration: none;
680 | color: rgba(0, 0, 0, .87)
681 | }
682 |
683 | .cbi-button-apply,
684 | .cbi-button-edit,
685 | .cbi-button-remove,
686 | .cbi-button-reset,
687 | .cbi-input-apply,
688 | .cbi-input-remove,
689 | .cbi-input-reset,
690 | .cbi-section-remove>.cbi-button {
691 | color: #2f2e2a !important;
692 | text-shadow: 0 1px 1px rgba(255, 255, 255, .62);
693 | text-transform: uppercase
694 | }
695 |
696 | .cbi-button:focus,
697 | .cbi-button:hover {
698 | box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2)
699 | }
700 |
701 | .cbi-button:active {
702 | box-shadow: 0 10px 20px rgba(0, 0, 0, .19), 0 6px 6px rgba(0, 0, 0, .23)
703 | }
704 |
705 | .cbi-button:disabled {
706 | cursor: not-allowed;
707 | pointer-events: none;
708 | opacity: .6;
709 | box-shadow: none
710 | }
711 |
712 | .zonebadge,
713 | header>.container>.pull-right>* {
714 | cursor: pointer
715 | }
716 |
717 | .cbi-button+.cbi-button,
718 | form.inline+form.inline {
719 | margin-left: .6rem
720 | }
721 |
722 | .cbi-button-reset,
723 | .cbi-input-remove {
724 | box-shadow: inset 0 0 14px 0 #db4213, 0 0 3px 0 #db6113 !important;
725 | border: 1px solid rgba(255, 129, 92, .65) !important;
726 | background: #dbb013 !important;
727 | background: -moz-radial-gradient(center, ellipse cover, #dbb013 0, #c69611 100%) !important;
728 | background: -webkit-radial-gradient(center, ellipse cover, #dbb013 0, #c69611 100%) !important;
729 | background: radial-gradient(ellipse at center, #dbb013 0, #c69611 100%) !important
730 | }
731 |
732 | .cbi-button-add,
733 | .cbi-button-find,
734 | .cbi-button-reload,
735 | .cbi-button-save,
736 | .cbi-input-find,
737 | .cbi-input-reload,
738 | .cbi-input-save {
739 | color: #2f2e2a !important;
740 | text-shadow: 0 1px 1px rgba(255, 255, 255, .62);
741 | text-transform: uppercase;
742 | box-shadow: inset 0 0 24px 0 #606f11, 0 0 3px 0 #9db134 !important;
743 | border: 1px solid #799037 !important;
744 | background: #7eaa0f !important;
745 | background: -webkit-radial-gradient(center ellipse, #7eaa0f 0, #6d8006 100%) !important;
746 | background: radial-gradient(ellipse at center, #7eaa0f 0, #6d8006 100%) !important
747 | }
748 |
749 | .cbi-button-apply,
750 | .cbi-button-edit,
751 | .cbi-input-apply {
752 | box-shadow: inset 0 0 24px 0 rgba(62, 62, 62, .77), 0 0 4px 0 rgba(236, 232, 219, .75);
753 | border: 1px solid #969696 !important;
754 | background: #dbb013 !important;
755 | background: -webkit-radial-gradient(center ellipse, #e0dbcf 0, rgba(224, 219, 204, .7) 100%) !important;
756 | background: radial-gradient(ellipse at center, #e0dbcf 0, rgba(224, 219, 204, .7) 100%) !important
757 | }
758 |
759 | .cbi-button-remove,
760 | .cbi-input-reset,
761 | .cbi-section-remove>.cbi-button {
762 | box-shadow: inset 0 0 14px 0 #82290e, 0 0 3px 0 #db4213 !important;
763 | border: 1px solid #b73813 !important;
764 | background: #db4213 !important;
765 | background: -moz-radial-gradient(center, ellipse cover, #db4213 0, #c93612 100%) !important;
766 | background: -webkit-radial-gradient(center, ellipse cover, #db4213 0, #c93612 100%) !important;
767 | background: radial-gradient(ellipse at center, #db4213 0, #c93612 100%) !important
768 | }
769 |
770 | .a-to-btn {
771 | text-decoration: none
772 | }
773 |
774 | .tabs {
775 | margin: 0 -2rem;
776 | padding-left: .5rem;
777 | background-color: #3f3e3a;
778 | border-bottom: 1px solid #2f2e2a
779 | }
780 |
781 | .cbi-tabmenu>li,
782 | .tabs>li {
783 | display: inline-block;
784 | height: 42px;
785 | line-height: 42px
786 | }
787 |
788 | .cbi-tabmenu>li>a,
789 | .tabs>li>a {
790 | text-decoration: none;
791 | color: #d8d3c5;
792 | padding: .5rem .8rem
793 | }
794 |
795 | .tabs>li:hover,
796 | .tabs>li[class~=active] {
797 | cursor: pointer;
798 | border-bottom: .2rem solid rgba(117, 137, 12, .75);
799 | color: rgba(117, 137, 12, .9)
800 | }
801 |
802 | .cbi-tabmenu>li[class~=cbi-tab]>a,
803 | .tabs>li[class~=active]>a {
804 | color: #fafafa
805 | }
806 |
807 | .tabs>li:hover {
808 | border-bottom: .18751rem solid rgba(117, 137, 12, .5)
809 | }
810 |
811 | .cbi-tabmenu>li:hover {
812 | border-bottom: 2px solid #d8d3c5
813 | }
814 |
815 | .cbi-tabmenu>li[class~=cbi-tab] {
816 | border-bottom: 2px solid rgba(117, 137, 12, .85)
817 | }
818 |
819 | .cbi-tabmenu {
820 | background: url(../img/noise.png) #171612
821 | }
822 |
823 | .cbi-section-node:nth-of-type(2n),
824 | .cbi-section-remove:nth-of-type(2n) {
825 | background-color: #3f3e3a
826 | }
827 |
828 | .cbi-section-node-tabbed {
829 | padding: 0;
830 | margin-top: 0;
831 | background: #3f3e3a
832 | }
833 |
834 | .cbi-tabcontainer>.cbi-value:nth-of-type(2n) {
835 | background-color: #2f2e2a
836 | }
837 |
838 | .cbi-value-description,
839 | .cbi-value-field {
840 | display: table-cell;
841 | line-height: 1.25;
842 | }
843 | .table .td.cbi-value-field {
844 | padding-left: 1px;
845 | padding-right: 1px;
846 | }
847 |
848 | .cbi-value-helpicon>img {
849 | display: none
850 | }
851 |
852 | .cbi-value-helpicon:before {
853 | font-family: icomoon;
854 | color: rgba(117, 137, 12, .5);
855 | content: "\f059"
856 | }
857 |
858 | .cbi-value-description {
859 | color: #d8d3c5 font-size: small;
860 | padding: .5rem 0 0
861 | }
862 |
863 | .cbi-value-title {
864 | word-wrap: break-word;
865 | padding-top: .6rem;
866 | width: 23rem;
867 | float: left;
868 | text-align: right;
869 | padding-right: 2rem;
870 | display: table-cell
871 | }
872 |
873 | .cbi-value {
874 | padding: .3rem 0;
875 | display: inline-block;
876 | width: 100%
877 | }
878 |
879 | .cbi-section-table-descr>.cbi-section-table-cell,
880 | .cbi-section-table-titles>.cbi-section-table-cell {
881 | border: none
882 | }
883 |
884 | .cbi-rowstyle-2 .cbi-button-down,
885 | .cbi-rowstyle-2 .cbi-button-up {
886 | background-color: #FFF !important
887 | }
888 |
889 | .cbi-section-table .cbi-section-table-titles .cbi-section-table-cell {
890 | width: auto !important
891 | }
892 |
893 | .cbi-section-table-titles {
894 | background: url(../img/noise.png) #292823
895 | }
896 |
897 | .cbi-map-descr,
898 | .cbi-section-descr {
899 | padding: .5rem;
900 | color: #1f1e1a;
901 | font-size: small;
902 | background: #6f6e6a;
903 | text-shadow: none
904 | }
905 |
906 | .hidden {
907 | display: none
908 | }
909 |
910 | .left {
911 | text-align: left !important
912 | }
913 |
914 | .right {
915 | text-align: right !important
916 | }
917 |
918 | .inline {
919 | display: inline
920 | }
921 |
922 | .cbi-page-actions {
923 | padding: 10px;
924 | border: 1px solid #3f3e3a;
925 | text-align: right;
926 | background: url(../img/stripes.svg) #2f2e2a;
927 | box-shadow: inset 0 0 15px rgba(0, 0, 0, .6)
928 | }
929 |
930 | .cbi-value input[type=password],
931 | .cbi-value input[type=text],
932 | .cbi-value-field .cbi-input-select {
933 | min-width: 15rem
934 | }
935 |
936 | .ifacebadge {
937 | display: inline-flex;
938 | padding: .5rem 1rem;
939 | background: rgba(15, 14, 10, .8);
940 | box-shadow: inset 0 0 42px 0 #000
941 | }
942 |
943 | td>.ifacebadge {
944 | font-size: .9rem
945 | }
946 |
947 | .ifacebadge>img {
948 | float: right;
949 | margin: 0 .3rem;
950 | width: 16px;
951 | height: 16px;
952 | vertical-align: middle;
953 | }
954 |
955 | .cbi-input-textarea {
956 | width: 100%;
957 | min-height: 16rem;
958 | min-width: 54rem;
959 | padding: .8rem;
960 | font-size: .8rem;
961 | margin-top: 10px
962 | }
963 |
964 | #syslog {
965 | width: 100%;
966 | min-height: 15rem;
967 | padding: 1rem;
968 | font-size: small;
969 | color: #d8d3c5;
970 | margin-bottom: 20px;
971 | border-radius: 0
972 | }
973 |
974 | #cbi-apply-uci-apply img {
975 | display: none
976 | }
977 |
978 | #cbi-apply-uci-apply #cbi-apply-uci-apply-status {
979 | display: block;
980 | color: #d8d3c5;
981 | padding: 10px
982 | }
983 |
984 | #cbi-apply-uci-apply #cbi-apply-uci-apply-status:before {
985 | font-family: icomoon;
986 | content: "\e603";
987 | animation: anim-rotate 2s infinite linear;
988 | margin-right: 1rem;
989 | display: inline-block;
990 | color: rgba(117, 137, 12, 1)
991 | }
992 |
993 | .uci-change-list {
994 | font-family: monospace;
995 | padding: 10px;
996 | color: #fafafa;
997 | font-size: 14px
998 | }
999 |
1000 | .uci-change-legend-label ins,
1001 | .uci-change-list ins {
1002 | text-decoration: none;
1003 | border: 1px solid rgba(117, 137, 12, .75);
1004 | background-color: #505a18;
1005 | display: block;
1006 | padding: 2px
1007 | }
1008 |
1009 | .uci-change-legend-label del,
1010 | .uci-change-list del {
1011 | text-decoration: none;
1012 | border: 1px solid #c93612;
1013 | background-color: rgba(175, 46, 17, .53);
1014 | display: block;
1015 | font-style: normal;
1016 | padding: 2px
1017 | }
1018 |
1019 | .uci-change-legend-label var,
1020 | .uci-change-list var {
1021 | text-decoration: none;
1022 | border: 1px solid #3f3e3a;
1023 | display: block;
1024 | font-style: normal;
1025 | padding: 2px;
1026 | box-shadow: inset 0 0 24px 0 #000;
1027 | background: #1f1e1a
1028 | }
1029 |
1030 | .uci-change-list var del,
1031 | .uci-change-list var ins {
1032 | border: none;
1033 | white-space: pre;
1034 | font-style: normal;
1035 | padding: 0
1036 | }
1037 |
1038 | .uci-change-legend {
1039 | padding: 10px
1040 | }
1041 |
1042 | .uci-change-legend-label {
1043 | width: 150px;
1044 | float: left
1045 | }
1046 |
1047 | .uci-change-legend-label>del,
1048 | .uci-change-legend-label>ins,
1049 | .uci-change-legend-label>var {
1050 | float: left;
1051 | margin-right: 4px;
1052 | width: 10px;
1053 | height: 10px;
1054 | display: block
1055 | }
1056 |
1057 | .uci-change-legend-label var del,
1058 | .uci-change-legend-label var ins {
1059 | line-height: 6px;
1060 | border: none
1061 | }
1062 |
1063 | .uci-change-list del,
1064 | .uci-change-list ins,
1065 | .uci-change-list var {
1066 | padding: .5rem
1067 | }
1068 |
1069 | #bwsvg,
1070 | #iwsvg,
1071 | #iwsvg2 {
1072 | border: 1px solid #1f1e1a !important;
1073 | border-top: none !important;
1074 | box-shadow: inset 0 0 42px 0 #000;
1075 | background: url(../img/stripes.svg) #1f1e1a !important
1076 | }
1077 |
1078 | svg {
1079 | background: rgba(15, 14, 10, .8) !important
1080 | }
1081 |
1082 | .ifacebox {
1083 | border: 1px solid #0f0e0a;
1084 | margin: 5px;
1085 | background-color: #fff;
1086 | text-align: center;
1087 | white-space: nowrap;
1088 | background-image: linear-gradient(#fff, #fff 25%, #f9f9f9);
1089 | text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
1090 | border-radius: 4px;
1091 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
1092 | display: inline-flex;
1093 | flex-direction: column;
1094 | line-height: 1.2em;
1095 | min-width: 100px;
1096 | }
1097 |
1098 | .ifacebox-head {
1099 | line-height: 20px;
1100 | color: #1f1e1a;
1101 | text-shadow: none
1102 | }
1103 |
1104 | .ifacebox-body {
1105 | box-shadow: inset 0 0 15px 0 #000;
1106 | background: #1f1e1a;
1107 | min-height: 40px;
1108 | line-height: 18px;
1109 | }
1110 |
1111 | /* --- network-status --- */
1112 | .network-status-table {
1113 | }
1114 |
1115 | .network-status-table .ifacebox {
1116 | }
1117 |
1118 | .network-status-table .ifacebox-body {
1119 | height: 100%;
1120 | text-align: left;
1121 | }
1122 |
1123 | .network-status-table .ifacebox-body > span {
1124 | display: block;
1125 | margin: .5em 1.5em
1126 | }
1127 |
1128 | #dsl_status_table .ifacebox-body > span > strong {
1129 | display: inline-block;
1130 | min-width: 35%;
1131 | }
1132 |
1133 | .ifacebadge.large,
1134 | .network-status-table .ifacebox-body .ifacebadge {
1135 | display: inline-flex;
1136 | flex: 1;
1137 | padding: .25em;
1138 | min-width: 220px;
1139 | width: 100%;
1140 | }
1141 |
1142 | .cbi-tooltip-container {
1143 | cursor: help;
1144 | display: inline-block;
1145 | vertical-align: text-top;
1146 | }
1147 |
1148 | .cbi-tooltip {
1149 | display: block;
1150 | position: absolute;
1151 | z-index: 1000;
1152 | left: -1000px;
1153 | opacity: 0;
1154 | transition: opacity .25s ease-out;
1155 | width: auto !important;
1156 | padding: .75em;
1157 | text-align: left;
1158 | margin-left: 1.25em;
1159 | }
1160 |
1161 | .cbi-tooltip-container:hover .cbi-tooltip:not(:empty) {
1162 | left: auto;
1163 | opacity: 1;
1164 | transition: opacity .25s ease-in;
1165 | }
1166 |
1167 | .zonebadge .cbi-tooltip {
1168 | padding: 1px;
1169 | background: inherit;
1170 | margin: -1.6em 0 0 -5px;
1171 | border-radius: 3px;
1172 | pointer-events: none;
1173 | box-shadow: 0 0 3px #444;
1174 | }
1175 |
1176 | .cbi-image-button {
1177 | margin-left: .5rem
1178 | }
1179 |
1180 | .zonebadge {
1181 | padding: .2rem .5rem;
1182 | display: inline-block
1183 | }
1184 |
1185 | .zonebadge>.ifacebadge {
1186 | padding: .2rem 1rem;
1187 | margin: .3rem
1188 | }
1189 |
1190 | .zonebadge>input[type=text] {
1191 | padding: .16rem 1rem;
1192 | min-width: 10rem;
1193 | margin-top: .3rem
1194 | }
1195 |
1196 | .zone-forwards {
1197 | display: flex;
1198 | flex-wrap: wrap;
1199 | }
1200 |
1201 | .zone-forwards > * {
1202 | flex: 1 1 40%;
1203 | padding: 1px;
1204 | }
1205 |
1206 | .zone-forwards > span {
1207 | flex-basis: 10%;
1208 | text-align: center;
1209 | }
1210 |
1211 | .zone-forwards .zone-src,
1212 | .zone-forwards .zone-dest {
1213 | display: flex;
1214 | }
1215 |
1216 |
1217 | .cbi-value-field .cbi-input-checkbox,
1218 | .cbi-value-field .cbi-input-radio {
1219 | margin-top: .5rem;
1220 | height: 1rem
1221 | }
1222 |
1223 | .cbi-value-field>input+.cbi-value-description {
1224 | padding: 0
1225 | }
1226 |
1227 | .cbi-value-field>ul>li {
1228 | display: flex
1229 | }
1230 |
1231 | .cbi-value-field>ul>li>label {
1232 | margin-top: .5rem
1233 | }
1234 |
1235 | .cbi-value-field>ul>li .ifacebadge {
1236 | margin-left: .4rem;
1237 | margin-top: -.5rem
1238 | }
1239 |
1240 | .cbi-section-table-row>.cbi-value-field .cbi-input-select {
1241 | min-width: 7rem
1242 | }
1243 |
1244 | .cbi-section-create>.cbi-button-add {
1245 | margin: .5rem
1246 | }
1247 |
1248 | .cbi-section-remove {
1249 | padding: .5rem
1250 | }
1251 |
1252 | div.cbi-value var,
1253 | td.cbi-value-field var {
1254 | font-style: italic;
1255 | color: #0069D6
1256 | }
1257 |
1258 | small {
1259 | font-size: 90%;
1260 | white-space: normal;
1261 | line-height: 1.42857143
1262 | }
1263 |
1264 | .cbi-button-down,
1265 | .cbi-button-up {
1266 | display: inline-block;
1267 | min-width: 0;
1268 | padding: .2rem .3rem;
1269 | font-size: 1.2rem
1270 | }
1271 |
1272 | .cbi-optionals {
1273 | padding: 1rem 1rem 0;
1274 | border-top: 1px solid #CCC
1275 | }
1276 |
1277 | #diag-rc-output>pre {
1278 | display: block;
1279 | padding: 8.5px;
1280 | margin: 0 0 18px;
1281 | line-height: 1.5rem;
1282 | white-space: pre-wrap;
1283 | word-wrap: break-word;
1284 | font-size: 1.4rem
1285 | }
1286 |
1287 | .darkMask,
1288 | .node-main-login>.main>.main-left,
1289 | .showSide {
1290 | display: none
1291 | }
1292 |
1293 | .node-main-login>.main fieldset:nth-child(4) td:nth-child(2),
1294 | .node-status-overview>.main fieldset:nth-child(4) td:nth-child(2),
1295 | .node-status-processes>.main table tr td:nth-child(3) {
1296 | white-space: normal
1297 | }
1298 |
1299 | input[name=ping],
1300 | input[name=traceroute],
1301 | input[name=nslookup] {
1302 | width: 80%
1303 | }
1304 |
1305 | .darkMask,
1306 | .node-main-login>.main>.main-right {
1307 | width: 100%
1308 | }
1309 |
1310 | #xhr_poll_status>.label.success {
1311 | color: #fafafa !important;
1312 | text-shadow: 0 1px 1px rgba(65, 65, 65, .4) !important;
1313 | box-shadow: inset 0 0 24px 0 #606f11, 0 0 3px 0 #9db134 !important;
1314 | border: 1px solid #799037 !important;
1315 | background: #7eaa0f !important;
1316 | background: -webkit-radial-gradient(center ellipse, #7eaa0f 0, #6d8006 100%) !important;
1317 | background: radial-gradient(ellipse at center, #7eaa0f 0, #6d8006 100%) !important;
1318 | margin-right: 4px;
1319 | padding: 5px
1320 | }
1321 |
1322 | .label {
1323 | color: #d8d3c5 !important;
1324 | font-size: .8rem;
1325 | text-shadow: 0 1px 1px #000;
1326 | text-decoration: none;
1327 | border-width: 1px;
1328 | border-radius: 0;
1329 | border-style: solid;
1330 | border-color: #44433f #44433f #3a3935;
1331 | box-shadow: inset 0 0 24px 0 #2f2e2c, 0 0 3px 0 #000;
1332 | background: -webkit-linear-gradient(top, #494744 0, #2f2e2c 100%);
1333 | background: linear-gradient(to bottom, #494744 0, #2f2e2c 100%);
1334 | padding: 5px
1335 | }
1336 |
1337 | #modemenu>li .active>.label {
1338 | box-shadow: inset 0 0 24px 0 rgba(62, 62, 62, .77), 0 0 4px 0 rgba(236, 232, 219, .75);
1339 | border: 1px solid #969696 !important;
1340 | background: #dbb013 !important;
1341 | background: -webkit-radial-gradient(center ellipse, #e0dbcf 0, rgba(224, 219, 204, .7) 100%) !important;
1342 | background: radial-gradient(ellipse at center, #e0dbcf 0, rgba(224, 219, 204, .7) 100%) !important
1343 | }
1344 |
1345 | #modemenu>li .active>.label>a {
1346 | color: #d8d3c5 !important;
1347 | text-shadow: 0 1px 1px rgba(10, 9, 4, .4) !important
1348 | }
1349 |
1350 | .notice {
1351 | background-color: #5BC0DE
1352 | }
1353 |
1354 | .darkMask {
1355 | height: 100%;
1356 | position: fixed;
1357 | background-color: rgba(0, 0, 0, .56);
1358 | content: "";
1359 | z-index: 99
1360 | }
1361 |
1362 | .node-main-login>.main fieldset {
1363 | padding: .5rem;
1364 | margin-bottom: 1rem;
1365 | display: inline;
1366 | background: 0 0;
1367 | border: none;
1368 | box-shadow: none;
1369 | overflow: hidden;
1370 | width: 100%
1371 | }
1372 |
1373 | .node-main-login>.main .cbi-value-title {
1374 | width: 7rem
1375 | }
1376 |
1377 | .node-main-login>.main #maincontent {
1378 | text-align: center
1379 | }
1380 |
1381 | .node-main-login>.main .container {
1382 | display: inline-block;
1383 | padding: 2rem 4rem;
1384 | margin-top: 3rem !important;
1385 | background-color: #1f1e1a;
1386 | text-align: left;
1387 | border: 1px solid #3f3e3a;
1388 | box-shadow: 0 0 42px 0 rgba(0, 0, 0, .66)
1389 | }
1390 |
1391 | .node-main-login fieldset:nth-child(3n) table table tr td,
1392 | .node-status-overview fieldset:nth-child(3n) table table tr td {
1393 | padding: 7px !important
1394 | }
1395 |
1396 | .node-main-login>.main form>div:nth-last-child(1) {
1397 | float: right
1398 | }
1399 |
1400 | .node-main-login>.main .cbi-value {
1401 | display: block
1402 | }
1403 |
1404 | .node-main-login>.main .cbi-value>* {
1405 | display: inline-block !important
1406 | }
1407 |
1408 | .node-main-login>.main .cbi-input-password,
1409 | .node-main-login>.main .cbi-input-user {
1410 | min-width: 15rem
1411 | }
1412 |
1413 | .node-main-login footer {
1414 | bottom: 0;
1415 | position: absolute;
1416 | width: 100%
1417 | }
1418 |
1419 | .node-main-login table>tbody>tr {
1420 | background-color: #2f2e2a;
1421 | border-top: 1px solid #3f3e3a;
1422 | border-bottom: 1px solid #1f1e1a
1423 | }
1424 |
1425 | .node-main-login table>tbody>tr:nth-of-type(2n) {
1426 | background-color: #3f3e3a;
1427 | border-top: 1px solid #4f4e4a;
1428 | border-bottom: 1px solid #1f1e1a
1429 | }
1430 |
1431 | .node-main-login fieldset:nth-child(3n) table table {
1432 | box-shadow: inset 0 0 15px 0 #000;
1433 | background: #1f1e1a;
1434 | border: 1px solid #000
1435 | }
1436 |
1437 | .node-main-login fieldset:nth-child(3n) table table tr {
1438 | background: 0 0;
1439 | border: none
1440 | }
1441 |
1442 | .node-status-overview table>tbody>tr {
1443 | background-color: #2f2e2a;
1444 | border-top: 1px solid #3f3e3a;
1445 | border-bottom: 1px solid #1f1e1a
1446 | }
1447 |
1448 | .node-status-overview table>tbody>tr:nth-of-type(2n) {
1449 | background-color: #3f3e3a;
1450 | border-top: 1px solid #4f4e4a;
1451 | border-bottom: 1px solid #1f1e1a
1452 | }
1453 |
1454 | .node-status-overview table>tbody>tr:last-child {
1455 | border: none
1456 | }
1457 |
1458 | .node-status-overview fieldset:nth-child(3n) table table {
1459 | box-shadow: inset 0 0 15px 0 #000;
1460 | background: #1f1e1a;
1461 | border: 1px solid #000
1462 | }
1463 |
1464 | .node-status-overview fieldset:nth-child(3n) table table tr {
1465 | background: 0 0;
1466 | border: none
1467 | }
1468 |
1469 | .node-status-iptables>.main div>.cbi-map>form {
1470 | margin: 2rem 2rem 0 0
1471 | }
1472 |
1473 | .cbi-tabmenu+.cbi-section,
1474 | .node-status-iptables fieldset,
1475 | .node-system-flashops fieldset,
1476 | .node-system-packages fieldset {
1477 | margin-top: 0
1478 | }
1479 |
1480 | .node-system-reboot>.main>.main-right h3,
1481 | .node-system-reboot>.main>.main-right p {
1482 | padding-left: 2rem;
1483 | margin-bottom: 8px
1484 | }
1485 |
1486 | .node-system-reboot>.main>.main-right p.warning {
1487 | padding: 2rem
1488 | }
1489 |
1490 | .node-system-reboot>.main>.main-right p:nth-last-child(1) {
1491 | background: url(../img/stripes.svg) #1f1e1a;
1492 | padding: 2rem
1493 | }
1494 |
1495 | .node-services-samba>.main .cbi-tabcontainer:nth-child(3) .cbi-value-title {
1496 | margin-bottom: 1rem;
1497 | width: auto
1498 | }
1499 |
1500 | .node-services-samba>.main .cbi-tabcontainer:nth-child(3) .cbi-value-field {
1501 | display: list-item
1502 | }
1503 |
1504 | #cbi-processes .cbi-section-descr,
1505 | #cbi-processes .cbi-section-table-descr,
1506 | #cbi-system-led .cbi-section-descr,
1507 | #cbi-system-led br,
1508 | .node-status-processes .cbi-page-actions,
1509 | .node-system-flashops br {
1510 | display: none
1511 | }
1512 |
1513 | .node-services-samba>.main .cbi-tabcontainer:nth-child(3) .cbi-value-description {
1514 | padding-top: 1rem
1515 | }
1516 |
1517 | .node-system-packages>.main table tr td:nth-child(1) {
1518 | width: auto !important
1519 | }
1520 |
1521 | .node-system-packages>.main table tr td:nth-last-child(1) {
1522 | white-space: normal;
1523 | font-size: small
1524 | }
1525 |
1526 | .node-system-packages>.main .cbi-tabmenu>li>a,
1527 | .tabs>li>a {
1528 | padding: .5rem .8rem
1529 | }
1530 |
1531 | .node-system-packages>.main .cbi-value>pre {
1532 | overflow: auto
1533 | }
1534 |
1535 | .node-network-firewall>.main .cbi-section-table-row>.cbi-value-field .cbi-input-select {
1536 | min-width: 4rem
1537 | }
1538 |
1539 | .node-status-iptables .cbi-tabmenu,
1540 | .node-system-flashops .cbi-tabmenu,
1541 | .node-system-packages .cbi-tabmenu {
1542 | border: none;
1543 | box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12)
1544 | }
1545 |
1546 | .node-system-flashops form.inline+form.inline {
1547 | margin-left: 0
1548 | }
1549 |
1550 | .node-system-flashops .cbi-section-node {
1551 | padding-top: 10px;
1552 | padding-bottom: 10px
1553 | }
1554 |
1555 | .node-system-flashops .cbi-input-apply {
1556 | height: 25px;
1557 | margin-top: -5px;
1558 | font-size: .8rem
1559 | }
1560 |
1561 | #cbi-firewall-redirect table *,
1562 | #cbi-firewall-zone table *,
1563 | #cbi-network-switch_vlan table * {
1564 | font-size: small
1565 | }
1566 |
1567 | #cbi-firewall-redirect table input[type=text],
1568 | #cbi-firewall-zone table input[type=text],
1569 | #cbi-network-switch_vlan table input[type=text] {
1570 | width: 5rem
1571 | }
1572 |
1573 | #cbi-firewall-redirect table select,
1574 | #cbi-firewall-zone table select,
1575 | #cbi-network-switch_vlan table select {
1576 | min-width: 3.5rem
1577 | }
1578 |
1579 | #cbi-system-led .cbi-section-create,
1580 | #cbi-system-led .cbi-section-remove {
1581 | background: #1f1e1a;
1582 | border-bottom: 1px solid #0f0e0a;
1583 | border-top: 1px solid #0f0e0a
1584 | }
1585 |
1586 | #cbi-processes .cbi-section-table-titles {
1587 | background-color: #1f1e1a;
1588 | border-top: none
1589 | }
1590 |
1591 | .node-status-realtime table {
1592 | border: 1px solid #1f1e1a
1593 | }
1594 |
1595 | .node-status-realtime table>tbody>tr {
1596 | background-color: #2f2e2a;
1597 | border-top: 1px solid #3f3e3a;
1598 | border-bottom: 1px solid #1f1e1a
1599 | }
1600 |
1601 | .node-status-realtime table>tbody>tr:nth-of-type(2n) {
1602 | background-color: #3f3e3a;
1603 | border-top: 1px solid #4f4e4a;
1604 | border-bottom: 1px solid #1f1e1a
1605 | }
1606 |
1607 | .node-status-realtime fieldset table {
1608 | border: none
1609 | }
1610 |
1611 | .node-status-realtime small {
1612 | display: inline-block;
1613 | width: 100%;
1614 | line-height: 25px;
1615 | background: #1f1e1a;
1616 | border: 1px solid #1f1e1a;
1617 | padding-right: 5px
1618 | }
1619 |
1620 | .node-status-realtime #cbi-table-table small {
1621 | border: none
1622 | }
1623 |
1624 | .node-status-realtime br,
1625 | .node-system-admin .cbi-section-table-descr,
1626 | .node-system-admin .cbi-section-table-titles,
1627 | .node-system-admin br,
1628 | .node-system-admin fieldset:nth-of-type(1) .cbi-section-descr,
1629 | .node-system-startup .cbi-map br,
1630 | .node-system-startup .cbi-section-descr,
1631 | .node-system-startup .cbi-section-table-descr,
1632 | .node-system-startup form:nth-of-type(1) .cbi-page-actions,
1633 | .node-system-system .cbi-section-descr,
1634 | .node-system-system fieldset br {
1635 | display: none
1636 | }
1637 |
1638 | .node-system-startup .cbi-map-descr br {
1639 | display: block
1640 | }
1641 |
1642 | .node-network-bmx7 .cbi-map-descr,
1643 | .node-network-bmx7 center img,
1644 | .node-network-dhcp #cbi-dhcp-dnsmasq br,
1645 | .node-network-dhcp .cbi-section-descr,
1646 | .node-network-dhcp .cbi-section-table-descr,
1647 | .node-network-network .cbi-section-descr,
1648 | .node-network-network fieldset br,
1649 | .node-system-fstab .cbi-section-descr:nth-of-type(1),
1650 | .node-system-fstab .cbi-section-table-descr {
1651 | display: none
1652 | }
1653 |
1654 | .node-system-flashops fieldset {
1655 | margin-top: 10px;
1656 | padding: 10px
1657 | }
1658 |
1659 | .node-network-bmx7 div#extra-info {
1660 | margin-bottom: 15px
1661 | }
1662 |
1663 | .node-network-network fieldset .cbi-section-node table {
1664 | box-shadow: inset 0 0 15px 0 #000;
1665 | background: #1f1e1a;
1666 | border: 1px solid #000
1667 | }
1668 |
1669 | .node-network-network fieldset .cbi-section-node table tr {
1670 | background: 0 0
1671 | }
1672 |
1673 | .node-network-network fieldset .cbi-section-node table td:nth-of-type(1) {
1674 | padding: 5px !important
1675 | }
1676 |
1677 | .node-network-network fieldset .cbi-section-node table td,
1678 | .node-network-wireless fieldset .cbi-section-node table td {
1679 | padding: 10px !important
1680 | }
1681 |
1682 | .node-network-network fieldset .cbi-section-table br {
1683 | display: initial
1684 | }
1685 |
1686 | .node-network-wireless fieldset br {
1687 | display: none
1688 | }
1689 |
1690 | .node-network-wireless fieldset .cbi-section-node table br,
1691 | .node-network-wireless fieldset .cbi-section-table:nth-of-type(1) br {
1692 | display: initial
1693 | }
1694 |
1695 | .node-network-wireless fieldset .cbi-section-node table {
1696 | box-shadow: inset 0 0 15px 0 #000;
1697 | background: #1f1e1a;
1698 | border: 1px solid #000
1699 | }
1700 |
1701 | .node-network-wireless fieldset .cbi-section-table tr:nth-of-type(1) {
1702 | background: url(../img/noise.png) #292823
1703 | }
1704 |
1705 | .node-network-hosts .cbi-section-descr,
1706 | .node-network-hosts .cbi-section-table-descr,
1707 | .node-network-routes .cbi-section-descr {
1708 | display: none
1709 | }
1710 |
1711 | .node-network-routes .cbi-input-select {
1712 | width: 100px;
1713 | min-width: 100px
1714 | }
1715 |
1716 | .node-network-routes input {
1717 | width: 130px;
1718 | max-width: 150px
1719 | }
1720 |
1721 | .node-network-routes td:nth-of-type(5) input,
1722 | .node-network-routes td:nth-of-type(6) input {
1723 | width: 50px !important;
1724 | max-width: 50px !important
1725 | }
1726 |
1727 | body.lang_pl.node-main-login .cbi-value-title {
1728 | width: 12rem
1729 | }
1730 |
1731 | .breadcrumb li {
1732 | display: inline-block
1733 | }
1734 |
1735 | .info {
1736 | background: 0 0 !important
1737 | }
1738 |
1739 | pre,
1740 | textarea {
1741 | border: 1px solid #0f0e0a;
1742 | padding: 15px;
1743 | color: #d8d3c5;
1744 | background: rgba(15, 14, 10, 1);
1745 | box-shadow: inset 0 0 36px 0 rgba(0, 0, 0, .8);
1746 | margin-top: 10px
1747 | }
1748 |
1749 | #content_syslog textarea {
1750 | margin-top: 0
1751 | }
1752 |
1753 | @media screen and (max-width:1600px) {
1754 | .main-left {
1755 | width: calc(0% + 13rem)
1756 | }
1757 |
1758 | .main-right {
1759 | width: calc(100% - 13rem)
1760 | }
1761 |
1762 | .cbi-button {
1763 | padding: .3rem .6rem
1764 | }
1765 |
1766 | .cbi-value-title {
1767 | width: 15rem;
1768 | padding-right: .6rem
1769 | }
1770 |
1771 | .cbi-input-textarea {
1772 | font-size: small
1773 | }
1774 |
1775 | .node-status-iptables>.main fieldset li>a {
1776 | padding: .3rem .6rem
1777 | }
1778 | }
1779 |
1780 | @media screen and (max-width:1280px) {
1781 | .main-left {
1782 | width: calc(0% + 13rem);
1783 | top: 3.5rem;
1784 | height: calc(100% - 3.5rem)
1785 | }
1786 |
1787 | .main-right {
1788 | width: calc(100% - 13rem)
1789 | }
1790 |
1791 | .cbi-tabmenu>li>a,
1792 | .tabs>li>a {
1793 | padding: .2rem .5rem
1794 | }
1795 |
1796 | .panel-title {
1797 | font-size: 1.1rem
1798 | }
1799 |
1800 | table {
1801 | font-size: .7rem !important;
1802 | width: 100% !important
1803 | }
1804 | }
1805 |
1806 | @media screen and (max-width:992px) {
1807 | .main-left {
1808 | width: 0;
1809 | position: fixed;
1810 | z-index: 100
1811 | }
1812 |
1813 | .main-right {
1814 | width: 100%
1815 | }
1816 |
1817 | .showSide {
1818 | padding: .1rem;
1819 | margin-right: .5rem;
1820 | display: inline-block;
1821 | line-height: 51px;
1822 | vertical-align: top
1823 | }
1824 |
1825 | .showSide:before {
1826 | font-family: icomoon;
1827 | content: "\e20e";
1828 | font-size: 1.7rem
1829 | }
1830 |
1831 | .node-main-login .showSide {
1832 | display: none !important
1833 | }
1834 |
1835 | .cbi-value-title {
1836 | width: 9rem;
1837 | padding-right: 1rem
1838 | }
1839 |
1840 | .node-network-diagnostics>.main .cbi-map fieldset>div,
1841 | .node-network-diagnostics>.main .cbi-map fieldset>div * {
1842 | width: 100% !important
1843 | }
1844 |
1845 | .node-network-diagnostics>.main .cbi-map fieldset>div input[type=text] {
1846 | margin: 3rem 0 0 !important
1847 | }
1848 |
1849 | .node-network-diagnostics>.main .cbi-map fieldset>div:nth-child(4) input[type=text] {
1850 | margin: 0 !important
1851 | }
1852 |
1853 | .node-network-diagnostics>.main .cbi-map fieldset>div input[type=button],
1854 | .node-network-diagnostics>.main .cbi-map fieldset>div select {
1855 | margin: 1rem 0 0
1856 | }
1857 |
1858 | #diag-rc-output>pre {
1859 | font-size: 1rem
1860 | }
1861 |
1862 | .node-main-login>.main .cbi-value-title {
1863 | text-align: left
1864 | }
1865 | }
1866 |
1867 | @media screen and (max-width:480px) {
1868 | body {
1869 | font-size: 1rem
1870 | }
1871 |
1872 | .tabs {
1873 | margin: 0 -1rem
1874 | }
1875 |
1876 | #maincontent>.container {
1877 | margin: 0 1rem 1.5rem
1878 | }
1879 |
1880 | .cbi-value-title {
1881 | width: 100%;
1882 | min-width: 0 !important;
1883 | display: block;
1884 | margin-top: 1rem;
1885 | margin-bottom: .5rem;
1886 | text-align: left
1887 | }
1888 |
1889 | .cbi-value-description,
1890 | .cbi-value-field {
1891 | width: 100%
1892 | }
1893 |
1894 | .cbi-value>.cbi-value-field {
1895 | display: inline-block
1896 | }
1897 |
1898 | .cbi-page-actions>div>input,
1899 | .mobile-hide {
1900 | display: none
1901 | }
1902 |
1903 | .cbi-tabmenu>li,
1904 | .tabs>li {
1905 | padding: .6rem 0
1906 | }
1907 |
1908 | .cbi-tabmenu>li>a,
1909 | .tabs>li>a {
1910 | padding: .2rem .3rem;
1911 | font-size: .9rem
1912 | }
1913 |
1914 | .node-main-login>.main .container {
1915 | padding: .5rem 1rem 2rem
1916 | }
1917 |
1918 | .node-main-login>.main .cbi-value {
1919 | padding: 0
1920 | }
1921 |
1922 | .node-main-login>.main form>div:nth-last-child(1) {
1923 | margin-top: 2rem
1924 | }
1925 |
1926 | .node-main-login>.main .cbi-value-title {
1927 | width: 100% !important;
1928 | font-size: 1.2rem
1929 | }
1930 |
1931 | .node-main-login>.main fieldset {
1932 | margin: 0;
1933 | padding: .5rem
1934 | }
1935 |
1936 | h2 {
1937 | font-size: 2rem
1938 | }
1939 |
1940 | .tabs>li>a,
1941 | input,
1942 | select {
1943 | font-size: .9rem
1944 | }
1945 |
1946 | .panel-title {
1947 | font-size: 1.4rem
1948 | }
1949 |
1950 | .node-system-packages>.main .cbi-value.cbi-value-last>div {
1951 | width: 100% !important
1952 | }
1953 |
1954 | .node-system-packages>.main .cbi-value .cbi-value-field input {
1955 | width: 100%
1956 | }
1957 |
1958 | .node-status-iptables>.main div>.cbi-map>form {
1959 | position: static !important;
1960 | margin: 0 0 2rem;
1961 | padding: 2rem;
1962 | border: 0;
1963 | font-weight: 400;
1964 | font-style: normal;
1965 | line-height: 1;
1966 | font-family: inherit;
1967 | min-width: inherit;
1968 | overflow-x: auto;
1969 | overflow-y: hidden;
1970 | border-radius: 0;
1971 | background-color: #FFF;
1972 | box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12);
1973 | -webkit-overflow-scrolling: touch
1974 | }
1975 |
1976 | .node-status-iptables>.main div>.cbi-map>form input[type=submit] {
1977 | width: 100% !important;
1978 | margin: 0
1979 | }
1980 |
1981 | .node-status-iptables>.main div>.cbi-map>form input[type=submit]+input[type=submit] {
1982 | margin-top: 1rem
1983 | }
1984 | }
1985 |
1986 | @media screen and (min-width:992px) {
1987 |
1988 | .cbi-value input[type=password],
1989 | .cbi-value input[type=text],
1990 | .cbi-value-field .cbi-input-select {
1991 | min-width: 20rem
1992 | }
1993 | }
1994 |
1995 | @media screen and (min-width:1280px) {
1996 |
1997 | .cbi-value input[type=password],
1998 | .cbi-value input[type=text],
1999 | .cbi-value-field .cbi-input-select {
2000 | min-width: 22rem
2001 | }
2002 | }
2003 |
2004 | @media screen and (min-width:1600px) {
2005 |
2006 | .cbi-value input[type=password],
2007 | .cbi-value input[type=text],
2008 | .cbi-value-field .cbi-input-select {
2009 | min-width: 25rem
2010 | }
2011 | }
--------------------------------------------------------------------------------
/luci/themes/luci-theme-darkmatter/htdocs/luci-static/darkmatter/fonts/DIN.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apollo-ng/luci-theme-darkmatter/017fe1f448465c7b141036bb62ef7a3517c312b7/luci/themes/luci-theme-darkmatter/htdocs/luci-static/darkmatter/fonts/DIN.woff
--------------------------------------------------------------------------------
/luci/themes/luci-theme-darkmatter/htdocs/luci-static/darkmatter/fonts/icon.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apollo-ng/luci-theme-darkmatter/017fe1f448465c7b141036bb62ef7a3517c312b7/luci/themes/luci-theme-darkmatter/htdocs/luci-static/darkmatter/fonts/icon.woff
--------------------------------------------------------------------------------
/luci/themes/luci-theme-darkmatter/htdocs/luci-static/darkmatter/img/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apollo-ng/luci-theme-darkmatter/017fe1f448465c7b141036bb62ef7a3517c312b7/luci/themes/luci-theme-darkmatter/htdocs/luci-static/darkmatter/img/favicon.ico
--------------------------------------------------------------------------------
/luci/themes/luci-theme-darkmatter/htdocs/luci-static/darkmatter/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apollo-ng/luci-theme-darkmatter/017fe1f448465c7b141036bb62ef7a3517c312b7/luci/themes/luci-theme-darkmatter/htdocs/luci-static/darkmatter/img/logo.png
--------------------------------------------------------------------------------
/luci/themes/luci-theme-darkmatter/htdocs/luci-static/darkmatter/img/noise.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apollo-ng/luci-theme-darkmatter/017fe1f448465c7b141036bb62ef7a3517c312b7/luci/themes/luci-theme-darkmatter/htdocs/luci-static/darkmatter/img/noise.png
--------------------------------------------------------------------------------
/luci/themes/luci-theme-darkmatter/htdocs/luci-static/darkmatter/img/stripes.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/luci/themes/luci-theme-darkmatter/htdocs/luci-static/darkmatter/js/script.js:
--------------------------------------------------------------------------------
1 | !function(a){function i(){var i=!1;return a("body").hasClass("logged-in")?(a(".main > .main-left > .nav > .slide > .menu").each(function(){var n=a(this);n.next().find("a").each(function(){var s=a(this),o=s.attr("href");return-1!=o.indexOf(e)?(n.click(),n.next(".slide-menu").stop(!0,!0),t=s.parent(),t.addClass("active"),i=!0,!0):void 0})}),i):(luciLocation=["Main","Login"],!0)}a(".main > .loading").fadeOut();var t=void 0,n=void 0,e="";!function(a){"admin"==a[0]?luciLocation=[a[1],a[2]]:luciLocation=a;for(var i in luciLocation)e+=luciLocation[i],i!=luciLocation.length-1&&(e+="/")}(luciLocation),a(".main > .main-left > .nav > .slide > .menu").click(function(){var i=a(this).next(".slide-menu"),t=a(this);i.is(":visible")?i.stop(!0).slideUp("fast",function(){t.removeClass("active"),i.removeClass("active")}):(t.addClass("active"),i.addClass("active"),i.stop(!0).slideDown("fast"))}),a(".main > .main-left > .nav > .slide > .slide-menu > li > a").click(function(){return void 0!=t&&t.removeClass("active"),a(this).parent().addClass("active"),a(".main > .loading").fadeIn("fast"),!0}),a(".main > .main-left > .nav > .slide > .slide-menu > li").click(function(){void 0!=t&&t.removeClass("active"),a(this).addClass("active"),a(".main > .loading").fadeIn("fast"),window.location=a(a(this).find("a")[0]).attr("href")}),i()&&(n="node-"+luciLocation[0]+"-"+luciLocation[1],n=n.replace(/[ \t\n\r\/]+/g,"_").toLowerCase(),a("body").addClass(n)),a(".cbi-button-up").val(""),a(".cbi-button-down").val(""),a("#maincontent > .container").find("a").each(function(){var i=a(this),t=i.attr("onclick");(void 0==t||""==t)&&i.click(function(){var t=i.attr("href");return-1==t.indexOf("#")?(a(".main > .loading").fadeIn("fast"),!0):void 0})});var s=!1;if(a(".showSide").click(function(){s?(a(".darkMask").stop(!0).fadeOut("fast"),a(".main-left").stop(!0).animate({width:"0"},"fast"),a(".main-right").css("overflow-y","auto"),s=!1):(a(".darkMask").stop(!0).fadeIn("fast"),a(".main-left").stop(!0).animate({width:"15rem"},"fast"),a(".main-right").css("overflow-y","hidden"),s=!0)}),a(".darkMask").click(function(){s&&(s=!1,a(".darkMask").stop(!0).fadeOut("fast"),a(".main-left").stop(!0).animate({width:"0"},"fast"),a(".main-right").css("overflow-y","auto"))}),a(window).resize(function(){a(window).width()>921&&(a(".main-left").css("width",""),a(".darkMask").stop(!0),a(".darkMask").css("display","none"),s=!1)}),a("legend").each(function(){var i=a(this);i.after(""+i.text()+"")}),a(".main-right").focus(),a(".main-right").blur(),a("input").attr("size","0"),void 0!=n)switch(console.log("mainNodeName",n),n){case"node-status-system_log":case"node-status-kernel_log":a("#syslog").focus(function(){a("#syslog").blur(),a(".main-right").focus(),a(".main-right").blur()});break;case"node-status-firewall":var o=a(".node-status-firewall > .main fieldset li > a");o.addClass("cbi-button cbi-button-reset a-to-btn");break;case"node-system-reboot":var o=a(".node-system-reboot > .main > .main-right p > a");o.addClass("cbi-button cbi-input-reset a-to-btn")}}(jQuery);
2 |
--------------------------------------------------------------------------------
/luci/themes/luci-theme-darkmatter/luasrc/view/themes/darkmatter/footer.htm:
--------------------------------------------------------------------------------
1 | <%#
2 |
3 | luci-theme-darkmatter
4 | Copyright 2017 chrono
5 |
6 | Darkmatter is an alternative HTML5 theme for LuCI that has evolved from
7 | luci-theme-bootstrap & luci-theme-material, in an attempt to bring a more
8 | concise, clean and visually pleasing UX to LEDE/OpenWRT.
9 |
10 | Have a bug? Please create an issue here on GitHub!
11 | https://github.com/apollo-ng/luci-theme-darkmatter/issues
12 |
13 | luci-theme-material
14 | Copyright 2015 Lutty Yang
15 | luci-theme-bootstrap:
16 | Copyright 2012 David Menting
17 | Copyright 2008 Steven Barth
18 | Copyright 2008 Jo-Philipp Wich
19 |
20 | This program is free software; you can redistribute it and/or
21 | modify it under the terms of the GNU General Public License
22 | as published by the Free Software Foundation; either version 2
23 | of the License, or (at your option) any later version.
24 | -%>
25 |
26 | <%
27 | local disp = require "luci.dispatcher"
28 | local request = disp.context.path
29 | local category = request[1]
30 | local tree = disp.node()
31 | %>
32 |
33 |
35 |
36 |
37 |
38 |
42 |
43 |
44 |