luci-theme-material: add some new features and fix some bugs 482/head
authorLutty Yang <lutty@wcan.in>
Sat, 19 Sep 2015 09:22:54 +0000 (17:22 +0800)
committerLutty Yang <lutty@wcan.in>
Sat, 19 Sep 2015 09:22:54 +0000 (17:22 +0800)
add footer and loading animation and auto focus switches
compact Fonts

Signed-off-by: Lutty Yang <lutty@wcan.in>
themes/luci-theme-material/htdocs/luci-static/material/css/style.css
themes/luci-theme-material/htdocs/luci-static/material/fonts/font.eot [changed mode: 0755->0644]
themes/luci-theme-material/htdocs/luci-static/material/fonts/font.svg [changed mode: 0755->0644]
themes/luci-theme-material/htdocs/luci-static/material/fonts/font.ttf [changed mode: 0755->0644]
themes/luci-theme-material/htdocs/luci-static/material/fonts/font.woff [changed mode: 0755->0644]
themes/luci-theme-material/htdocs/luci-static/material/js/script.js
themes/luci-theme-material/luasrc/view/themes/material/footer.htm
themes/luci-theme-material/luasrc/view/themes/material/header.htm

index 3f80ccd3153aea837d594555a0368edc518947ca..058d3edcfa254788da1ed7db1a4190b51b400605 100755 (executable)
@@ -36,7 +36,7 @@
 .cbi-button-down,
 .cbi-value-helpicon,
 .showSide,
-[class^="icon-"], [class*=" icon-"] {
+.main > .loading > span {
     font-family: 'icomoon' !important;
     speak: none;
     font-style: normal !important;
@@ -52,8 +52,6 @@
 * {
     margin: 0;
     padding: 0;
-    font-size: 1rem;
-    font-size: 100%;
     box-sizing: border-box;
 }
 
@@ -93,7 +91,7 @@ abbr {
     cursor: help;
 }
 
-header, footer, .main {
+header, .main {
     width: 100%;
     position: absolute;
 }
@@ -107,11 +105,72 @@ header {
     z-index: 101;
 }
 
+footer{
+    text-align: right;
+    padding: 1rem;
+    color: #aaa;
+    font-size: 0.8rem;
+    text-shadow: 0px 0px 2px #BBB;
+}
+
+footer > a{
+    color: #aaa;
+    text-decoration: none;
+}
+
 .main {
     top: 4rem;
     bottom: 0rem;
 }
 
+.main > .loading{
+    position: fixed;
+    width: 100%;
+    height: 100%;
+    z-index: 1000;
+    display: block;
+    background-color: rgb(240, 240, 240);
+}
+
+.main > .loading > span{
+    display: block;
+    text-align: center;
+    margin-top: 2rem;
+    color: #888;
+    font-size: 1.3rem;
+}
+
+.main > .loading > span:before{
+    content: "\e603";
+    -webkit-animation: anim-rotate 2s infinite linear;
+    animation: anim-rotate 2s infinite linear;
+    margin-right: 0.2rem;
+}
+
+@-webkit-keyframes anim-rotate {
+    0% {
+        -webkit-transform:rotate(0);
+        transform:rotate(0);
+    }
+    100% {
+        -webkit-transform:rotate(360deg);
+        transform:rotate(360deg);
+    }
+}
+
+@keyframes anim-rotate {
+    0% {
+        -webkit-transform:rotate(0);
+        -ms-transform:rotate(0);
+        transform:rotate(0);
+    }
+    100% {
+        -webkit-transform:rotate(360deg);
+        -ms-transform:rotate(360deg);
+        transform:rotate(360deg)
+    }
+}
+
 .main-left {
     float: left;
     width: 15%;
@@ -168,7 +227,6 @@ header > .container > .brand {
     border: 0;
     font-weight: normal;
     font-style: normal;
-    font-size: 100%;
     line-height: 1;
     font-family: inherit;
     min-width: inherit;
@@ -178,14 +236,13 @@ header > .container > .brand {
     box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12);
 }
 
-.errorbox{
+.errorbox {
     color: #fff;
     background-color: #f0ad4e;
     border-color: #eea236;
 }
 
 #maincontent > .container > div:nth-child(1).alert-message.warning > a {
-    box-sizing: border-box;
     font: inherit;
     overflow: visible;
     text-transform: none;
@@ -288,7 +345,7 @@ li {
 }
 
 #maincontent > .container {
-    margin: 0 2rem 3rem 2rem;
+    margin: 0 2rem 1rem 2rem;
 }
 
 h1 {
@@ -320,7 +377,6 @@ fieldset {
     border: 0;
     font-weight: normal;
     font-style: normal;
-    font-size: 100%;
     line-height: 1;
     font-family: inherit;
 
@@ -380,13 +436,6 @@ fieldset > table > tbody > tr:nth-of-type(odd) {
     background-color: #f9f9f9;
 }
 
-footer {
-    position: fixed;
-    z-index: 1000;
-    bottom: 0;
-    left: 0;
-}
-
 /* fix progress bar */
 #memfree > div,
 #membuff > div,
@@ -425,7 +474,6 @@ td > table > tbody > tr > td {
 /* button style */
 
 .cbi-button {
-    box-sizing: border-box;
     font: inherit;
     overflow: visible;
     text-transform: none;
@@ -632,7 +680,6 @@ td > table > tbody > tr > td {
 /* input */
 .cbi-value input[type="password"],
 .cbi-value input[type="text"] {
-    box-sizing: border-box;
     padding: 0.36rem 1rem;
     color: #555;
     min-width: 15rem;
@@ -644,7 +691,6 @@ td > table > tbody > tr > td {
 
 .cbi-value-field input[type="password"],
 .cbi-value-field input[type="text"] {
-    box-sizing: border-box;
     padding: 0.36rem 1rem;
     color: #555;
     background-color: #fff;
@@ -681,7 +727,6 @@ td > table > tbody > tr > td {
 /*textarea*/
 
 .cbi-input-textarea {
-    box-sizing: border-box;
     width: 100%;
     min-height: 16rem;
     padding: 1rem;
@@ -863,7 +908,7 @@ input[name="nslookup"] {
     width: 80%;
 }
 
-header > .container > .pull-right > *{
+header > .container > .pull-right > * {
     position: relative;
     top: 0.45rem;
     cursor: pointer;
@@ -876,7 +921,6 @@ header > .container > .pull-right > *{
 .label {
     padding: 0.3rem 0.8rem;
     font-size: 1rem;
-    box-sizing: border-box;
     font-weight: bold;
     color: #ffffff !important;
     text-transform: uppercase;
@@ -889,7 +933,7 @@ header > .container > .pull-right > *{
     text-decoration: none;
 }
 
-.notice{
+.notice {
     background-color: #5BC0DE;
 }
 
@@ -947,6 +991,19 @@ header > .container > .pull-right > *{
     float: right;
 }
 
+.node-main-login footer{
+    bottom: 0;
+    position: absolute;
+    width: 100%;
+}
+
+/* fix status overview */
+
+.node-status-overview > .main fieldset:nth-child(4) td:nth-child(2){
+    white-space: normal;
+}
+
+
 /* fix status processes */
 
 .node-status-processes > .main table tr td:nth-child(3) {
@@ -958,7 +1015,6 @@ header > .container > .pull-right > *{
 }
 
 .node-status-firewall > .main fieldset li > a {
-    box-sizing: border-box;
     font: inherit;
     overflow: visible;
     text-transform: none;
@@ -997,7 +1053,6 @@ header > .container > .pull-right > *{
 .node-system-reboot > .main > .main-right p > a {
     margin-top: 2rem;
     text-decoration: none;
-    box-sizing: border-box;
     font: inherit;
     overflow: visible;
     text-transform: none;
@@ -1049,12 +1104,16 @@ header > .container > .pull-right > *{
     padding: 0.5rem 1rem;
 }
 
-.node-system-software > .main .cbi-value > pre{
+.node-system-software > .main .cbi-value > pre {
     background-color: #eee;
     padding: 0.5rem;
     overflow: auto;
 }
 
+.cbi-tabmenu + .cbi-section {
+    margin-top: 0;
+}
+
 .node-status-firewall fieldset,
 .node-system-software fieldset,
 .node-system-backup_flash_firmware fieldset {
@@ -1069,7 +1128,7 @@ header > .container > .pull-right > *{
 }
 
 /* language fix */
-body.lang_pl.node-main-login .cbi-value-title{
+body.lang_pl.node-main-login .cbi-value-title {
     width: 12rem;
 }
 
@@ -1104,22 +1163,61 @@ body.lang_pl.node-main-login .cbi-value-title{
         padding: 1rem;
     }
 
-    .cbi-input-textarea{
+    .cbi-input-textarea {
         font-size: smaller;
     }
+
+    .node-status-firewall > .main fieldset li > a {
+        padding: 0.3rem 0.6rem;
+    }
 }
 
 @media screen and (max-width: 1280px) {
+    header {
+        height: 3.5rem;
+    }
+
+    header > .container {
+        margin-top: 0.25rem;
+    }
+
+    .main {
+        top: 3.5rem;
+    }
+
+    .main-left {
+        width: calc(0% + 13rem);
+    }
+
+    .main-right {
+        width: calc(100% - 13rem);
+    }
+
     .cbi-tabmenu > li > a, .tabs > li > a {
         padding: 0.2rem 0.5rem;
     }
-}
 
-@media screen and (max-width: 992px) {
-    * {
-        font-size: 100%;
+    .panel-title {
+        font-size: 1.3rem;
+        padding-bottom: 1rem;
+    }
+
+    table {
+        font-size: 0.8rem !important;
     }
 
+    .main > .main-left > .nav > li,
+    .main > .main-left > .nav > li a,
+    .main > .main-left > .nav > .slide > .menu {
+        font-size: 1.1rem;
+    }
+
+    .main > .main-left > .nav > .slide > .slide-menu > li > a {
+        font-size: 0.9rem;
+    }
+}
+
+@media screen and (max-width: 992px) {
     .main-left {
         width: 0;
         position: fixed;
@@ -1150,43 +1248,37 @@ body.lang_pl.node-main-login .cbi-value-title{
         padding-right: 1rem;
     }
 
-
-    .node-network-diagnostics > .main .cbi-map fieldset > div *{
+    .node-network-diagnostics > .main .cbi-map fieldset > div * {
         width: 100% !important;
     }
 
-    .node-network-diagnostics > .main .cbi-map fieldset > div input[type="text"]{
+    .node-network-diagnostics > .main .cbi-map fieldset > div input[type="text"] {
         margin: 3rem 0 0 0 !important;
     }
 
-    .node-network-diagnostics > .main .cbi-map fieldset > div:nth-child(4) input[type="text"]{
+    .node-network-diagnostics > .main .cbi-map fieldset > div:nth-child(4) input[type="text"] {
         margin: 0 !important;
     }
 
     .node-network-diagnostics > .main .cbi-map fieldset > div select,
-    .node-network-diagnostics > .main .cbi-map fieldset > div input[type="button"]{
+    .node-network-diagnostics > .main .cbi-map fieldset > div input[type="button"] {
         margin: 1rem 0 0 0;
     }
 
-    .node-network-diagnostics > .main .cbi-map fieldset > div{
+    .node-network-diagnostics > .main .cbi-map fieldset > div {
         width: 100% !important;
     }
 
-
     #diag-rc-output > pre {
         font-size: 1.2rem;
     }
 
-    .node-main-login > .main .cbi-value-title{
+    .node-main-login > .main .cbi-value-title {
         text-align: left;
     }
 }
 
 @media screen and (max-width: 480px) {
-    * {
-        font-size: 90%;
-    }
-
     fieldset {
         padding: 1rem;
         margin: 1rem 0 0 0;
@@ -1219,7 +1311,6 @@ body.lang_pl.node-main-login .cbi-value-title{
 
     .cbi-value-field, .cbi-value-description {
         width: 100%;
-        box-sizing: border-box;
     }
 
     .cbi-value > .cbi-value-field {
@@ -1231,7 +1322,8 @@ body.lang_pl.node-main-login .cbi-value-title{
     }
 
     .cbi-tabmenu > li > a, .tabs > li > a {
-        padding: 0.2rem 0.7rem;
+        padding: 0.2rem 0.3rem;
+        font-size: 0.9rem;
     }
 
     .cbi-page-actions > div > input {
@@ -1265,40 +1357,28 @@ body.lang_pl.node-main-login .cbi-value-title{
     }
 
     .tabs > li > a {
-        font-size: 1.2rem;
-    }
-
-    header {
-        height: 3.5rem;
-    }
-
-    header > .container {
-        margin-top: 0.25rem;
-    }
-
-    .main {
-        top: 3.5rem;
+        font-size: 0.9rem;
     }
 
     select,
     input {
-        font-size: 1.2rem;
+        font-size: 0.9rem;
     }
 
-    .mobile-hide{
+    .mobile-hide {
         display: none;
     }
 
-    .panel-title{
+    .panel-title {
         font-size: 1.4rem;
         padding-bottom: 1rem;
     }
 
-    .node-system-software > .main .cbi-value.cbi-value-last > div{
+    .node-system-software > .main .cbi-value.cbi-value-last > div {
         width: 100% !important;
     }
 
-    .node-system-software > .main .cbi-value .cbi-value-field input{
+    .node-system-software > .main .cbi-value .cbi-value-field input {
         width: 100%;
     }
 }
old mode 100755 (executable)
new mode 100644 (file)
index ae25457..9e6ffc9
Binary files a/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.eot and b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.eot differ
old mode 100755 (executable)
new mode 100644 (file)
index c2b360a..d38d057
@@ -11,5 +11,6 @@
 <glyph unicode="&#xe20b;" glyph-name="expand_more" d="M708 572.667l60-60-256-256-256 256 60 60 196-196z" />
 <glyph unicode="&#xe20e;" glyph-name="menu" d="M128 682.667h768v-86h-768v86zM128 384.667v84h768v-84h-768zM128 170.667v86h768v-86h-768z" />
 <glyph unicode="&#xe291;" glyph-name="favorite" d="M512 28.667l-62 56q-106 96-154 142t-107 114-81 123-22 113q0 98 67 166t167 68q116 0 192-90 76 90 192 90 100 0 167-68t67-166q0-78-52-162t-113-146-199-186z" />
+<glyph unicode="&#xe603;" glyph-name="spinner9" d="M512 960c-278.748 0-505.458-222.762-511.848-499.974 5.92 241.864 189.832 435.974 415.848 435.974 229.75 0 416-200.576 416-448 0-53.020 42.98-96 96-96s96 42.98 96 96c0 282.77-229.23 512-512 512zM512-64c278.748 0 505.458 222.762 511.848 499.974-5.92-241.864-189.832-435.974-415.848-435.974-229.75 0-416 200.576-416 448 0 53.020-42.98 96-96 96s-96-42.98-96-96c0-282.77 229.23-512 512-512z" />
 <glyph unicode="&#xf059;" glyph-name="question-circle" horiz-adv-x="878" d="M512 164.571v109.714q0 8-5.143 13.143t-13.143 5.143h-109.714q-8 0-13.143-5.143t-5.143-13.143v-109.714q0-8 5.143-13.143t13.143-5.143h109.714q8 0 13.143 5.143t5.143 13.143zM658.286 548.571q0 50.286-31.714 93.143t-79.143 66.286-97.143 23.429q-138.857 0-212-121.714-8.571-13.714 4.571-24l75.429-57.143q4-3.429 10.857-3.429 9.143 0 14.286 6.857 30.286 38.857 49.143 52.571 19.429 13.714 49.143 13.714 27.429 0 48.857-14.857t21.429-33.714q0-21.714-11.429-34.857t-38.857-25.714q-36-16-66-49.429t-30-71.714v-20.571q0-8 5.143-13.143t13.143-5.143h109.714q8 0 13.143 5.143t5.143 13.143q0 10.857 12.286 28.286t31.143 28.286q18.286 10.286 28 16.286t26.286 20 25.429 27.429 16 34.571 7.143 46.286zM877.714 438.857q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
 </font></defs></svg>
\ No newline at end of file
old mode 100755 (executable)
new mode 100644 (file)
index 793f68a..8466932
Binary files a/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.ttf and b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.ttf differ
old mode 100755 (executable)
new mode 100644 (file)
index 61a1184..00cf84e
Binary files a/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.woff and b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.woff differ
index c7d60b9e34b8bac95c744151e6d9b186642e7f06..dcf8a03d4392c0da586e21ea6e8bbf9475172121 100755 (executable)
 }(jQuery));
 
 (function ($) {
+    $(".main > .loading").fadeOut();
+
     /**
      * trim text, Remove spaces, wrap
      * @param text
 
     var tree = undefined;
     var lastNode = undefined;
-
-    /**
-     * get the current node by Hash (reserve)
-     * @returns {boolean} success?
-     */
-    function getCurrentNodeByHash() {
-        var ret = false;
-        var hash = window.location.hash;
-        if (hash.substr(0, 6) == "#tree-") {
-            hash = $.base64.decode(hash.substr(6));
-            tree = hash.split("|");
-            $(".main > .main-left > .nav > .slide > .menu").each(function () {
-                var that = $(this);
-                if (trimText(that.data("title")) == tree[0]) {
-                    that.click();
-                    that.next().find("a").each(function () {
-                        var that = $(this);
-                        if (trimText(that.data("title")) == tree[1]) {
-                            lastNode = that.parent();
-                            lastNode.addClass("active");
-                            ret = true;
-                            return true;
-                        }
-                    });
-                }
-            });
-        }
-        return ret;
-    }
+    var mainNodeName = undefined;
 
     /**
      * get the current node by Burl (primary)
      * hook menu click and add the hash
      */
     $(".main > .main-left > .nav > .slide > .slide-menu > li > a").click(function () {
-        var href = $(this).attr("href");
-        var tree = trimText($(this).parent().parent().prev().data("title")) + "|" + trimText($(this).data("title"));
-        tree = $.base64.encode(tree);
-        window.location = href + "#tree-" + tree;
         if (lastNode != undefined) lastNode.removeClass("active");
         $(this).parent().addClass("active");
-        return false;
+        $(".main > .loading").fadeIn();
+        return true;
     });
 
     /**
      * fix menu click
      */
     $(".main > .main-left > .nav > .slide > .slide-menu > li").click(function () {
-        $(this).find("a").click();
+        if (lastNode != undefined) lastNode.removeClass("active");
+        $(this).addClass("active");
+        $(".main > .loading").fadeIn();
+        window.location = $($(this).find("a")[0]).attr("href");
+        return;
     });
 
     /**
      * get current node and open it
      */
     if (!getCurrentNodeByUrl()){
-        getCurrentNodeByHash();
         if (tree != undefined && tree[0] == "Status" && tree[1] == "Overview"){
             //overview
             lastNode.addClass("active");
         }
     }
     if (tree != undefined){
-        var mainNodeName = "node-"+ tree[0] + "-" + tree[1];
-        $("body").addClass(mainNodeName.replace(/[ \t\n\r\/]+/g,"_").toLowerCase());
+        mainNodeName = "node-"+ tree[0] + "-" + tree[1];
+        mainNodeName = mainNodeName.replace(/[ \t\n\r\/]+/g,"_").toLowerCase();
+        $("body").addClass(mainNodeName);
+
     }
     $(".cbi-button-up").val("");
     $(".cbi-button-down").val("");
         if (onclick == undefined || onclick == ""){
             that.click(function () {
                 var href = that.attr("href");
-                if (tree != undefined && href.indexOf("Text") == -1) {
-                    window.location = href + "#tree-" +  $.base64.encode(tree[0] + "|" + tree[1]);
-                    return false;
-                }else{
+                if (href.indexOf("#") == -1){
+                    $(".main > .loading").fadeIn();
                     return true;
                 }
             });
         var that = $(this);
         that.after("<span class='panel-title'>" + that.text() + "</span>");
     });
+
+
+    $(".main-right").focus();
+    $(".main-right").blur();
+
+    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;
+        }
+    }
 })(jQuery);
index 596615213211af529122674724657dfaec7d84e7..5cb74ce1e4784f8b5ced0c8297244887468b7503 100755 (executable)
        local tree = disp.node()
        local categories = disp.node_childs(tree)
 %>
+                </div>
+                <footer class="mobile-hide">
+                    <a href="https://github.com/openwrt/luci">Powered by <%= ver.luciname %> (<%= ver.luciversion %>)</a> /
+                    <a href="https://openwrt.org/"><%= ver.distversion %></a>
                     <% if #categories > 1 then %>
-                    <footer>
-                        <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>
-                    </footer>
+                    <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 %>
-                </div>
+                </footer>
             </div>
         </div>
 
index 494cfe39e854c779d118ce0b1eb4a813202904c8..f96653a9c0c0e92a2a30168841849b9bf1262970 100755 (executable)
 <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 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">
 </header>
 
  <div class="main">
+        <div class="loading"><span>Loading...</span></div>
         <div class="main-left">
                 <ul class="nav">
                         <%-