diff --git a/public/less/admin/admin.less b/public/less/admin/admin.less index c6e360a8c3..d1364d5611 100644 --- a/public/less/admin/admin.less +++ b/public/less/admin/admin.less @@ -28,6 +28,8 @@ @import "./modules/alerts"; @import "./modules/selectable"; @import "./modules/snackbar"; +@import "./modules/nprogress"; + .admin { background: #fff; diff --git a/public/less/admin/modules/nprogress.less b/public/less/admin/modules/nprogress.less new file mode 100644 index 0000000000..c1b6effe02 --- /dev/null +++ b/public/less/admin/modules/nprogress.less @@ -0,0 +1,80 @@ +#nprogress { + pointer-events: none; +} + +#nprogress .bar { + background: #29d; + + position: fixed; + z-index: 1031; + top: 0; + left: 0; + + width: 100%; + height: 2px; +} + +#nprogress .peg { + display: block; + position: absolute; + right: 0px; + width: 100px; + height: 100%; + box-shadow: 0 0 10px #29d, 0 0 5px #29d; + opacity: 1.0; + + -webkit-transform: rotate(3deg) translate(0px, -4px); + -ms-transform: rotate(3deg) translate(0px, -4px); + transform: rotate(3deg) translate(0px, -4px); +} + +#nprogress .spinner { + display: block; + position: fixed; + z-index: 1031; + top: 165px; + right: 35px; +} + +@media (max-width: @screen-xs-max) { + #nprogress .spinner { + bottom: 15px; + right: 15px; + top: initial; + } +} + + +#nprogress .spinner-icon { + width: 18px; + height: 18px; + box-sizing: border-box; + + border: solid 2px transparent; + border-top-color: #29d; + border-left-color: #29d; + border-radius: 50%; + + -webkit-animation: nprogress-spinner 400ms linear infinite; + animation: nprogress-spinner 400ms linear infinite; +} + +.nprogress-custom-parent { + overflow: hidden; + position: relative; +} + +.nprogress-custom-parent #nprogress .spinner, +.nprogress-custom-parent #nprogress .bar { + position: absolute; +} + +@-webkit-keyframes nprogress-spinner { + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(360deg); } +} +@keyframes nprogress-spinner { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + diff --git a/public/src/admin/admin.js b/public/src/admin/admin.js index fc54067d3a..62234df1e9 100644 --- a/public/src/admin/admin.js +++ b/public/src/admin/admin.js @@ -1,5 +1,5 @@ "use strict"; -/*global config, translator, componentHandler, define, socket, app, ajaxify, utils, bootbox, Slideout, RELATIVE_PATH*/ +/*global config, translator, componentHandler, define, socket, app, ajaxify, utils, bootbox, Slideout, NProgress, RELATIVE_PATH*/ (function() { @@ -27,6 +27,7 @@ app.alert = launchSnackbar; configureSlidemenu(); + setupNProgress(); }); $(window).on('action:ajaxify.contentLoaded', function(ev, data) { @@ -38,6 +39,16 @@ componentHandler.upgradeDom(); }); + function setupNProgress() { + $(window).on('action:ajaxify.start', function() { + NProgress.set(0.7); + }); + + $(window).on('action:ajaxify.end', function(ev, data) { + NProgress.done(); + }); + } + function setupKeybindings() { require(['mousetrap'], function(mousetrap) { mousetrap.bind('ctrl+shift+a r', function() { diff --git a/public/vendor/nprogress.min.js b/public/vendor/nprogress.min.js new file mode 100644 index 0000000000..09998a166f --- /dev/null +++ b/public/vendor/nprogress.min.js @@ -0,0 +1,3 @@ +/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT */ +!function(n,t){"object"==typeof exports?module.exports=t():n.NProgress=t()}(this,function(){function n(n,t,e){return t>n?t:n>e?e:n}function t(n){return 100*(-1+n)}function e(n,e,r){var i;return i="translate3d"===c.positionUsing?{transform:"translate3d("+t(n)+"%,0,0)"}:"translate"===c.positionUsing?{transform:"translate("+t(n)+"%,0)"}:{"margin-left":t(n)+"%"},i.transition="all "+e+"ms "+r,i}function r(n,t){var e="string"==typeof n?n:o(n);return e.indexOf(" "+t+" ")>=0}function i(n,t){var e=o(n),i=e+t;r(e,t)||(n.className=i.substring(1))}function s(n,t){var e,i=o(n);r(n,t)&&(e=i.replace(" "+t+" "," "),n.className=e.substring(1,e.length-1))}function o(n){return(" "+(n.className||"")+" ").replace(/\s+/gi," ")}function a(n){n&&n.parentNode&&n.parentNode.removeChild(n)}var u={};u.version="0.1.6";var c=u.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'