diff --git a/Gruntfile.js b/Gruntfile.js index 2c190f358..f1dccc386 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -55,6 +55,7 @@ module.exports = function (grunt) { 'js/common.js', 'js/modals.js', 'js/popovers.js', + 'js/transitions.js', 'js/push.js', 'js/segmented-controllers.js', 'js/sliders.js', diff --git a/dist/css/ratchet.min.css b/dist/css/ratchet.min.css index c101297a8..94ae08610 100644 --- a/dist/css/ratchet.min.css +++ b/dist/css/ratchet.min.css @@ -6,4 +6,4 @@ * * v2.0.2 designed by @connors. * ===================================================== - *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */.icon,a{text-decoration:none}img,legend{border:0}legend,td,th{padding:0}body,mark{color:#000}.bar-tab,.btn-block,.title,input[type=button],input[type=reset],input[type=submit]{width:100%}.btn,.text-center,.title{text-align:center}*,input[type=search]{-webkit-box-sizing:border-box;box-sizing:border-box}.btn,.slider .slide-group,.title{white-space:nowrap}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent;color:#428bca;-webkit-tap-highlight-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0}.btn,.content,body{background-color:#fff}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}.bar-footer,.content,body{bottom:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre,textarea{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}.input-row label,body,button,input,select,textarea{font-family:"Helvetica Neue",Helvetica,sans-serif}button{overflow:visible}.content,.popover .table-view{-webkit-overflow-scrolling:touch}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}table{border-spacing:0;border-collapse:collapse}.bar-nav~.content,.popover .bar~.table-view{padding-top:44px}*{-moz-box-sizing:border-box}body{margin:0;position:fixed;top:0;right:0;left:0;font-size:17px;line-height:21px}.card,.content-padded{margin:10px}a:active{color:#3071a9}.content{position:absolute;top:0;right:0;left:0;overflow:auto}.card,.input-row,.modal,.segmented-control,.slider,.table-view .media,.table-view .media-body,.table-view-cell,.table-view-cell>a:not(.btn){overflow:hidden}.content>*{-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}.bar-header-secondary~.content{padding-top:88px}.bar-footer~.content{padding-bottom:44px}.bar-footer-secondary~.content{padding-bottom:88px}.bar-tab~.content{padding-bottom:50px}.bar-footer-secondary-tab~.content{padding-bottom:94px}.pull-left{float:left}.pull-right{float:right}.clearfix:after,.clearfix:before{display:table;content:" "}.clearfix:after{clear:both}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:10px;line-height:1}.h5,.h6,h5,h6{margin-top:20px}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin-top:0;margin-bottom:10px;font-size:14px;color:#777}.btn{position:relative;display:inline-block;padding:6px 8px 7px;margin-bottom:0;font-size:12px;font-weight:400;line-height:1;color:#333;vertical-align:top;cursor:pointer;border:1px solid #ccc;border-radius:3px}.btn.active,.btn:active{color:inherit;background-color:#ccc}.btn.disabled,.btn:disabled{opacity:.6}.btn-primary{color:#fff;background-color:#428bca;border:1px solid #428bca}.btn-primary.active,.btn-primary:active{color:#fff;background-color:#3071a9;border:1px solid #3071a9}.btn-positive{color:#fff;background-color:#5cb85c;border:1px solid #5cb85c}.btn-positive.active,.btn-positive:active{color:#fff;background-color:#449d44;border:1px solid #449d44}.btn-negative{color:#fff;background-color:#d9534f;border:1px solid #d9534f}.btn-negative.active,.btn-negative:active{color:#fff;background-color:#c9302c;border:1px solid #c9302c}.btn-link,.btn-outlined{background-color:transparent}.btn-outlined.btn-primary{color:#428bca}.btn-outlined.btn-positive{color:#5cb85c}.btn-outlined.btn-negative{color:#d9534f}.btn-outlined.btn-negative:active,.btn-outlined.btn-positive:active,.btn-outlined.btn-primary:active{color:#fff}.btn-link{padding-top:6px;padding-bottom:6px;color:#428bca;border:0}.btn-link.active,.btn-link:active{color:#3071a9;background-color:transparent}.btn-block{display:block;padding:15px 0;margin-bottom:10px;font-size:18px}.btn .badge{margin:-2px -4px -2px 4px;font-size:12px;background-color:rgba(0,0,0,.15)}.btn .badge-inverted,.btn:active .badge-inverted{background-color:transparent}.btn-negative:active .badge-inverted,.btn-positive:active .badge-inverted,.btn-primary:active .badge-inverted{color:#fff}.btn-block .badge{position:absolute;right:0;margin-right:10px}.btn .icon{font-size:inherit}.bar{position:fixed;right:0;left:0;z-index:10;height:44px;padding-right:10px;padding-left:10px;background-color:#fff;border-bottom:1px solid #ddd;-webkit-backface-visibility:hidden;backface-visibility:hidden}.bar-tab,.card .table-view,.card .table-view-cell:last-child{border-bottom:0}.bar-header-secondary{top:44px}.bar-footer-secondary{bottom:44px}.bar-footer-secondary-tab{bottom:50px}.bar-footer,.bar-footer-secondary,.bar-footer-secondary-tab{border-top:1px solid #ddd;border-bottom:0}.bar-nav{top:0}.title{position:absolute;display:block;padding:0;margin:0 -10px;font-size:17px;font-weight:500;line-height:44px;color:#000}.title a{color:inherit}.bar-tab{bottom:0;display:table;height:50px;padding:0;table-layout:fixed;border-top:1px solid #ddd}.bar-tab .tab-item{position:relative;display:table-cell;width:1%;height:50px;color:#929292;text-align:center;vertical-align:middle}.bar-tab .tab-item.active,.bar-tab .tab-item:active{color:#428bca}.bar-tab .tab-item .badge{position:absolute;top:3px;left:50%;vertical-align:top}.bar-tab .tab-item .icon{top:3px;width:24px;height:24px;padding-top:0;padding-bottom:0}.bar-tab .tab-item .icon~.tab-label{display:block;font-size:11px}.bar .btn{position:relative;top:7px;z-index:20;padding:6px 12px 7px;margin-top:0;font-weight:400}.bar .btn.pull-right{margin-left:10px}.bar .btn.pull-left{margin-right:10px}.bar .btn-link{top:0;padding:0;font-size:16px;line-height:44px;color:#428bca;border:0}.bar .btn-link.active,.bar .btn-link:active{color:#3071a9}.bar .btn-block{top:6px;padding:7px 0;margin-bottom:0;font-size:16px}.bar .btn-nav.pull-left{margin-left:-5px}.bar .btn-nav.pull-left .icon-left-nav{margin-right:-3px}.bar .btn-nav.pull-right{margin-right:-5px}.bar .btn-nav.pull-right .icon-right-nav{margin-left:-3px}.bar .icon{position:relative;z-index:20;padding-top:10px;padding-bottom:10px;font-size:24px}.bar .btn .icon{top:3px;padding:0}.bar .title .icon{padding:0}.bar .title .icon.icon-caret{top:4px;margin-left:-5px}.bar input[type=search]{height:29px;margin:6px 0}.bar .segmented-control{top:7px;margin:0 auto}.badge{display:inline-block;padding:2px 9px 3px;font-size:12px;line-height:1;color:#333;background-color:rgba(0,0,0,.15);border-radius:100px}.badge.badge-inverted{padding:0 5px 0 0;background-color:transparent}.badge-primary{color:#fff;background-color:#428bca}.badge-primary.badge-inverted{color:#428bca}.badge-positive{color:#fff;background-color:#5cb85c}.badge-positive.badge-inverted{color:#5cb85c}.badge-negative{color:#fff;background-color:#d9534f}.card,.table-view{background-color:#fff}.badge-negative.badge-inverted{color:#d9534f}.card{border:1px solid #ddd;border-radius:6px}.card .table-view{margin-bottom:0;border-top:0}.card .table-view .table-view-divider:first-child{top:0;border-top-left-radius:6px;border-top-right-radius:6px}.card .table-view .table-view-divider:last-child{border-bottom-right-radius:6px;border-bottom-left-radius:6px}.table-view,.table-view-cell{border-bottom:1px solid #ddd}.table-view{padding-left:0;margin-top:0;margin-bottom:15px;list-style:none;border-top:1px solid #ddd}.table-view-cell{position:relative;padding:11px 65px 11px 15px}.table-view-cell:last-child{border-bottom:0}.table-view-cell>a:not(.btn){position:relative;display:block;padding:inherit;margin:-11px -65px -11px -15px;color:inherit}.table-view-cell>a:not(.btn):active{background-color:#eee}.table-view-cell p{margin-bottom:0}.table-view-divider{padding-top:6px;padding-bottom:6px;padding-left:15px;margin-top:-1px;margin-left:0;font-weight:500;color:#999;background-color:#fafafa;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.table-view .media-object.pull-left{margin-right:10px}.table-view .media-object.pull-right{margin-left:10px}.table-view-cell>.badge,.table-view-cell>.btn,.table-view-cell>.toggle,.table-view-cell>a>.badge,.table-view-cell>a>.btn,.table-view-cell>a>.toggle{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%)}.table-view-cell .navigate-left>.badge,.table-view-cell .navigate-left>.btn,.table-view-cell .navigate-left>.toggle,.table-view-cell .navigate-right>.badge,.table-view-cell .navigate-right>.btn,.table-view-cell .navigate-right>.toggle,.table-view-cell .push-left>.badge,.table-view-cell .push-left>.btn,.table-view-cell .push-left>.toggle,.table-view-cell .push-right>.badge,.table-view-cell .push-right>.btn,.table-view-cell .push-right>.toggle,.table-view-cell>a .navigate-left>.badge,.table-view-cell>a .navigate-left>.btn,.table-view-cell>a .navigate-left>.toggle,.table-view-cell>a .navigate-right>.badge,.table-view-cell>a .navigate-right>.btn,.table-view-cell>a .navigate-right>.toggle,.table-view-cell>a .push-left>.badge,.table-view-cell>a .push-left>.btn,.table-view-cell>a .push-left>.toggle,.table-view-cell>a .push-right>.badge,.table-view-cell>a .push-right>.btn,.table-view-cell>a .push-right>.toggle{right:35px}.content>.table-view:first-child{margin-top:15px}button,input,select,textarea{font-size:17px}input[type=password],input[type=datetime],input[type=datetime-local],input[type=date],input[type=month],input[type=time],input[type=week],input[type=email],input[type=url],input[type=tel],input[type=color],input[type=number],input[type=search],input[type=text],select,textarea{width:100%;height:35px;-webkit-appearance:none;padding:0 15px;margin-bottom:15px;line-height:21px;background-color:#fff;border:1px solid #ddd;border-radius:3px;outline:0}select,textarea{height:auto}input[type=search]{-moz-box-sizing:border-box;padding:0 10px;font-size:16px;border-radius:20px}input[type=search]:focus{text-align:left}select{font-size:14px;background-color:#f8f8f8;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.input-group{background-color:#fff}.input-group input,.input-group textarea{margin-bottom:0;background-color:transparent;border-top:0;border-right:0;border-left:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.input-row{height:35px;border-bottom:1px solid #ddd}.input-row label{float:left;width:35%;padding:8px 15px;line-height:1.1}.input-row input{float:right;width:65%;padding-left:0;margin-bottom:0;border:0}.segmented-control{position:relative;display:table;font-size:12px;font-weight:400;background-color:#fff;border:1px solid #ccc;border-radius:3px}.segmented-control .control-item{display:table-cell;width:1%;padding-top:6px;padding-bottom:7px;overflow:hidden;line-height:1;color:#333;text-align:center;text-overflow:ellipsis;white-space:nowrap;border-left:1px solid #ccc}.segmented-control .control-item:first-child{border-left-width:0}.segmented-control .control-item:active{background-color:#eee}.segmented-control .control-item.active{background-color:#ccc}.segmented-control-primary{border-color:#428bca}.segmented-control-primary .control-item{color:#428bca;border-color:inherit}.segmented-control-primary .control-item:active{background-color:#cde1f1}.segmented-control-primary .control-item.active{color:#fff;background-color:#428bca}.segmented-control-positive{border-color:#5cb85c}.segmented-control-positive .control-item{color:#5cb85c;border-color:inherit}.segmented-control-positive .control-item:active{background-color:#d8eed8}.segmented-control-positive .control-item.active{color:#fff;background-color:#5cb85c}.segmented-control-negative{border-color:#d9534f}.segmented-control-negative .control-item{color:#d9534f;border-color:inherit}.segmented-control-negative .control-item:active{background-color:#f9e2e2}.segmented-control-negative .control-item.active{color:#fff;background-color:#d9534f}.control-content{display:none}.control-content.active{display:block}.popover{position:fixed;top:55px;left:50%;z-index:20;display:none;width:280px;margin-left:-140px;background-color:#fff;border-radius:6px;-webkit-box-shadow:0 0 15px rgba(0,0,0,.1);box-shadow:0 0 15px rgba(0,0,0,.1);opacity:0;-webkit-transition:all .25s linear;-o-transition:all .25s linear;transition:all .25s linear;-webkit-transform:translate3d(0,-15px,0);-ms-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}.popover:before{position:absolute;top:-15px;left:50%;width:0;height:0;margin-left:-15px;content:'';border-right:15px solid transparent;border-bottom:15px solid #fff;border-left:15px solid transparent}.backdrop,.modal{position:fixed;top:0}.popover.visible{opacity:1;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.backdrop{right:0;bottom:0;left:0;z-index:15;background-color:rgba(0,0,0,.3)}.modal,.popover .table-view,.toggle{background-color:#fff}.popover .btn-block{margin-bottom:5px}.popover .btn-block:last-child{margin-bottom:0}.popover .bar-nav{border-bottom:1px solid #ddd;border-top-left-radius:12px;border-top-right-radius:12px;-webkit-box-shadow:none;box-shadow:none}.popover .table-view{max-height:300px;margin-bottom:0;overflow:auto;border-top:0;border-bottom:0;border-radius:6px}.modal{z-index:11;width:100%;min-height:100%;opacity:0;-webkit-transition:-webkit-transform .25s,opacity 1ms .25s;-o-transition:-o-transform .25s,opacity 1ms .25s;transition:transform .25s,opacity 1ms .25s;-webkit-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.modal.active{height:100%;opacity:1;-webkit-transition:-webkit-transform .25s;-o-transition:-o-transform .25s;transition:transform .25s;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slider{width:100%;background-color:#000}.slider .slide-group{position:relative;font-size:0;-webkit-transition:all 0s linear;-o-transition:all 0s linear;transition:all 0s linear}.toggle,.toggle .toggle-handle{-o-transition-duration:.2s;transition-duration:.2s;-webkit-transition-duration:.2s}.slider .slide-group .slide{display:inline-block;width:100%;height:100%;font-size:14px;vertical-align:top}.toggle{position:relative;display:block;width:74px;height:30px;border:2px solid #ddd;border-radius:20px;-webkit-transition-property:background-color,border;-o-transition-property:background-color,border;transition-property:background-color,border}.toggle .toggle-handle{position:absolute;top:-1px;left:-1px;z-index:2;width:28px;height:28px;background-color:#fff;border:1px solid #ddd;border-radius:100px;-webkit-transition-property:-webkit-transform,border,width;-o-transition-property:-o-transform,border,width;transition-property:transform,border,width}.toggle:before{position:absolute;top:3px;right:11px;font-size:13px;color:#999;text-transform:uppercase;content:"Off"}.toggle.active{background-color:#5cb85c;border:2px solid #5cb85c}.toggle.active .toggle-handle{border-color:#5cb85c;-webkit-transform:translate3d(44px,0,0);-ms-transform:translate3d(44px,0,0);transform:translate3d(44px,0,0)}.toggle.active:before{right:auto;left:15px;color:#fff;content:"On"}.toggle input[type=checkbox]{display:none}.content.fade{left:0;opacity:0;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.content.fade.in{opacity:1}.content.sliding{z-index:2;-webkit-transition:-webkit-transform .4s;-o-transition:-o-transform .4s;transition:transform .4s;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.content.sliding.left{z-index:1;-webkit-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.content.sliding.right{z-index:3;-webkit-transform:translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.navigate-left:after,.navigate-right:after,.push-left:after,.push-right:after{position:absolute;top:50%;display:inline-block;font-family:Ratchicons;font-size:inherit;line-height:1;color:#bbb;text-decoration:none;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);-webkit-font-smoothing:antialiased}.navigate-left:after,.push-left:after{left:15px;content:'\e822'}.navigate-right:after,.push-right:after{right:15px;content:'\e826'}@font-face{font-family:Ratchicons;font-style:normal;font-weight:400;src:url(../fonts/ratchicons.eot);src:url(../fonts/ratchicons.eot?#iefix)format("embedded-opentype"),url(../fonts/ratchicons.woff)format("woff"),url(../fonts/ratchicons.ttf)format("truetype"),url(../fonts/ratchicons.svg#svgFontName)format("svg")}.icon{display:inline-block;font-family:Ratchicons;font-size:24px;line-height:1;-webkit-font-smoothing:antialiased}.icon-back:before{content:'\e80a'}.icon-bars:before{content:'\e80e'}.icon-caret:before{content:'\e80f'}.icon-check:before{content:'\e810'}.icon-close:before{content:'\e811'}.icon-code:before{content:'\e812'}.icon-compose:before{content:'\e813'}.icon-download:before{content:'\e815'}.icon-edit:before{content:'\e829'}.icon-forward:before{content:'\e82a'}.icon-gear:before{content:'\e821'}.icon-home:before{content:'\e82b'}.icon-info:before{content:'\e82c'}.icon-list:before{content:'\e823'}.icon-more-vertical:before{content:'\e82e'}.icon-more:before{content:'\e82f'}.icon-pages:before{content:'\e824'}.icon-pause:before{content:'\e830'}.icon-person:before{content:'\e832'}.icon-play:before{content:'\e816'}.icon-plus:before{content:'\e817'}.icon-refresh:before{content:'\e825'}.icon-search:before{content:'\e819'}.icon-share:before{content:'\e81a'}.icon-sound:before{content:'\e827'}.icon-sound2:before{content:'\e828'}.icon-sound3:before{content:'\e80b'}.icon-sound4:before{content:'\e80c'}.icon-star-filled:before{content:'\e81b'}.icon-star:before{content:'\e81c'}.icon-stop:before{content:'\e81d'}.icon-trash:before{content:'\e81e'}.icon-up-nav:before{content:'\e81f'}.icon-up:before{content:'\e80d'}.icon-right-nav:before{content:'\e818'}.icon-right:before{content:'\e826'}.icon-down-nav:before{content:'\e814'}.icon-down:before{content:'\e820'}.icon-left-nav:before{content:'\e82d'}.icon-left:before{content:'\e822'} \ No newline at end of file + *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */.icon,a{text-decoration:none}img,legend{border:0}legend,td,th{padding:0}body,mark{color:#000}.bar-tab,.btn-block,.title,input[type=button],input[type=reset],input[type=submit]{width:100%}.btn,.text-center,.title{text-align:center}*,input[type=search]{-webkit-box-sizing:border-box;box-sizing:border-box}.btn,.slider .slide-group,.title{white-space:nowrap}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent;color:#428bca;-webkit-tap-highlight-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0}.btn,.content,body{background-color:#fff}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}.bar-footer,.content,body{bottom:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre,textarea{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}.input-row label,body,button,input,select,textarea{font-family:"Helvetica Neue",Helvetica,sans-serif}.icon,.navigate-left:after,.navigate-right:after,.push-left:after,.push-right:after{display:inline-block;font-family:Ratchicons;line-height:1;-webkit-font-smoothing:antialiased}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}table{border-spacing:0;border-collapse:collapse}*{-moz-box-sizing:border-box}body{margin:0;position:fixed;top:0;right:0;left:0;font-size:17px;line-height:21px}.card,.content-padded{margin:10px}a:active{color:#3071a9}.content{position:absolute;top:0;right:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch}.content>*{-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}.bar-nav~.content{padding-top:44px}.bar-header-secondary~.content{padding-top:88px}.bar-footer~.content{padding-bottom:44px}.bar-footer-secondary~.content{padding-bottom:88px}.bar-tab~.content{padding-bottom:50px}.bar-footer-secondary-tab~.content{padding-bottom:94px}.pull-left{float:left}.pull-right{float:right}.clearfix:after,.clearfix:before{display:table;content:" "}.clearfix:after{clear:both}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:10px;line-height:1}.h5,.h6,h5,h6{margin-top:20px}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin-top:0;margin-bottom:10px;font-size:14px;color:#777}.btn{position:relative;display:inline-block;padding:6px 8px 7px;margin-bottom:0;font-size:12px;font-weight:400;line-height:1;color:#333;vertical-align:top;cursor:pointer;border:1px solid #ccc;border-radius:3px}.btn.active,.btn:active{color:inherit;background-color:#ccc}.btn.disabled,.btn:disabled{opacity:.6}.btn-primary{color:#fff;background-color:#428bca;border:1px solid #428bca}.btn-primary.active,.btn-primary:active{color:#fff;background-color:#3071a9;border:1px solid #3071a9}.btn-positive{color:#fff;background-color:#5cb85c;border:1px solid #5cb85c}.btn-positive.active,.btn-positive:active{color:#fff;background-color:#449d44;border:1px solid #449d44}.btn-negative{color:#fff;background-color:#d9534f;border:1px solid #d9534f}.btn-negative.active,.btn-negative:active{color:#fff;background-color:#c9302c;border:1px solid #c9302c}.btn-link,.btn-outlined{background-color:transparent}.btn-outlined.btn-primary{color:#428bca}.btn-outlined.btn-positive{color:#5cb85c}.btn-outlined.btn-negative{color:#d9534f}.btn-outlined.btn-negative:active,.btn-outlined.btn-positive:active,.btn-outlined.btn-primary:active{color:#fff}.btn-link{padding-top:6px;padding-bottom:6px;color:#428bca;border:0}.btn-link.active,.btn-link:active{color:#3071a9;background-color:transparent}.btn-block{display:block;padding:15px 0;margin-bottom:10px;font-size:18px}.btn .badge{margin:-2px -4px -2px 4px;font-size:12px;background-color:rgba(0,0,0,.15)}.btn .badge-inverted,.btn:active .badge-inverted{background-color:transparent}.btn-negative:active .badge-inverted,.btn-positive:active .badge-inverted,.btn-primary:active .badge-inverted{color:#fff}.btn-block .badge{position:absolute;right:0;margin-right:10px}.btn .icon{font-size:inherit}.bar{position:fixed;right:0;left:0;z-index:10;height:44px;padding-right:10px;padding-left:10px;background-color:#fff;border-bottom:1px solid #ddd;-webkit-backface-visibility:hidden;backface-visibility:hidden}.bar-tab,.card .table-view,.card .table-view-cell:last-child{border-bottom:0}.bar-header-secondary{top:44px}.bar-footer-secondary{bottom:44px}.bar-footer-secondary-tab{bottom:50px}.bar-footer,.bar-footer-secondary,.bar-footer-secondary-tab{border-top:1px solid #ddd;border-bottom:0}.bar-nav{top:0}.title{position:absolute;display:block;padding:0;margin:0 -10px;font-size:17px;font-weight:500;line-height:44px;color:#000}.title a{color:inherit}.bar-tab{bottom:0;display:table;height:50px;padding:0;table-layout:fixed;border-top:1px solid #ddd}.bar-tab .tab-item{position:relative;display:table-cell;width:1%;height:50px;color:#929292;text-align:center;vertical-align:middle}.bar-tab .tab-item.active,.bar-tab .tab-item:active{color:#428bca}.bar-tab .tab-item .badge{position:absolute;top:3px;left:50%;vertical-align:top}.bar-tab .tab-item .icon{top:3px;width:24px;height:24px;padding-top:0;padding-bottom:0}.bar-tab .tab-item .icon~.tab-label{display:block;font-size:11px}.bar .btn{position:relative;top:7px;z-index:20;padding:6px 12px 7px;margin-top:0;font-weight:400}.bar .btn.pull-right{margin-left:10px}.bar .btn.pull-left{margin-right:10px}.bar .btn-link{top:0;padding:0;font-size:16px;line-height:44px;color:#428bca;border:0}.bar .btn-link.active,.bar .btn-link:active{color:#3071a9}.bar .btn-block{top:6px;padding:7px 0;margin-bottom:0;font-size:16px}.bar .btn-nav.pull-left{margin-left:-5px}.bar .btn-nav.pull-left .icon-left-nav{margin-right:-3px}.bar .btn-nav.pull-right{margin-right:-5px}.bar .btn-nav.pull-right .icon-right-nav{margin-left:-3px}.bar .icon{position:relative;z-index:20;padding-top:10px;padding-bottom:10px;font-size:24px}.bar .btn .icon{top:3px;padding:0}.bar .title .icon{padding:0}.bar .title .icon.icon-caret{top:4px;margin-left:-5px}.bar input[type=search]{height:29px;margin:6px 0}.bar .segmented-control{top:7px;margin:0 auto}.badge{display:inline-block;padding:2px 9px 3px;font-size:12px;line-height:1;color:#333;background-color:rgba(0,0,0,.15);border-radius:100px}.badge.badge-inverted{padding:0 5px 0 0;background-color:transparent}.badge-primary{color:#fff;background-color:#428bca}.badge-primary.badge-inverted{color:#428bca}.badge-positive{color:#fff;background-color:#5cb85c}.badge-positive.badge-inverted{color:#5cb85c}.badge-negative{color:#fff;background-color:#d9534f}.card,.table-view{background-color:#fff}.badge-negative.badge-inverted{color:#d9534f}.card{overflow:hidden;border:1px solid #ddd;border-radius:6px}.card .table-view{margin-bottom:0;border-top:0}.card .table-view .table-view-divider:first-child{top:0;border-top-left-radius:6px;border-top-right-radius:6px}.card .table-view .table-view-divider:last-child{border-bottom-right-radius:6px;border-bottom-left-radius:6px}.table-view,.table-view-cell{border-bottom:1px solid #ddd}.table-view{padding-left:0;margin-top:0;margin-bottom:15px;list-style:none;border-top:1px solid #ddd}.table-view-cell{position:relative;padding:11px 65px 11px 15px;overflow:hidden}.table-view-cell:last-child{border-bottom:0}.table-view-cell>a:not(.btn){position:relative;display:block;padding:inherit;margin:-11px -65px -11px -15px;overflow:hidden;color:inherit}.table-view-cell>a:not(.btn):active{background-color:#eee}.table-view-cell p{margin-bottom:0}.table-view-divider{padding-top:6px;padding-bottom:6px;padding-left:15px;margin-top:-1px;margin-left:0;font-weight:500;color:#999;background-color:#fafafa;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.table-view .media,.table-view .media-body{overflow:hidden}.table-view .media-object.pull-left{margin-right:10px}.table-view .media-object.pull-right{margin-left:10px}.table-view-cell>.badge,.table-view-cell>.btn,.table-view-cell>.toggle,.table-view-cell>a>.badge,.table-view-cell>a>.btn,.table-view-cell>a>.toggle{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%)}.table-view-cell .navigate-left>.badge,.table-view-cell .navigate-left>.btn,.table-view-cell .navigate-left>.toggle,.table-view-cell .navigate-right>.badge,.table-view-cell .navigate-right>.btn,.table-view-cell .navigate-right>.toggle,.table-view-cell .push-left>.badge,.table-view-cell .push-left>.btn,.table-view-cell .push-left>.toggle,.table-view-cell .push-right>.badge,.table-view-cell .push-right>.btn,.table-view-cell .push-right>.toggle,.table-view-cell>a .navigate-left>.badge,.table-view-cell>a .navigate-left>.btn,.table-view-cell>a .navigate-left>.toggle,.table-view-cell>a .navigate-right>.badge,.table-view-cell>a .navigate-right>.btn,.table-view-cell>a .navigate-right>.toggle,.table-view-cell>a .push-left>.badge,.table-view-cell>a .push-left>.btn,.table-view-cell>a .push-left>.toggle,.table-view-cell>a .push-right>.badge,.table-view-cell>a .push-right>.btn,.table-view-cell>a .push-right>.toggle{right:35px}.content>.table-view:first-child{margin-top:15px}button,input,select,textarea{font-size:17px}input[type=password],input[type=datetime],input[type=datetime-local],input[type=date],input[type=month],input[type=time],input[type=week],input[type=email],input[type=url],input[type=tel],input[type=color],input[type=number],input[type=search],input[type=text],select,textarea{width:100%;height:35px;-webkit-appearance:none;padding:0 15px;margin-bottom:15px;line-height:21px;background-color:#fff;border:1px solid #ddd;border-radius:3px;outline:0}select,textarea{height:auto}input[type=search]{-moz-box-sizing:border-box;padding:0 10px;font-size:16px;border-radius:20px}input[type=search]:focus{text-align:left}select{font-size:14px;background-color:#f8f8f8;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.input-group{background-color:#fff}.input-group input,.input-group textarea{margin-bottom:0;background-color:transparent;border-top:0;border-right:0;border-left:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.input-row{height:35px;overflow:hidden;border-bottom:1px solid #ddd}.input-row label{float:left;width:35%;padding:8px 15px;line-height:1.1}.input-row input{float:right;width:65%;padding-left:0;margin-bottom:0;border:0}.segmented-control{position:relative;display:table;overflow:hidden;font-size:12px;font-weight:400;background-color:#fff;border:1px solid #ccc;border-radius:3px}.segmented-control .control-item{display:table-cell;width:1%;padding-top:6px;padding-bottom:7px;overflow:hidden;line-height:1;color:#333;text-align:center;text-overflow:ellipsis;white-space:nowrap;border-left:1px solid #ccc}.segmented-control .control-item:first-child{border-left-width:0}.segmented-control .control-item:active{background-color:#eee}.segmented-control .control-item.active{background-color:#ccc}.segmented-control-primary{border-color:#428bca}.segmented-control-primary .control-item{color:#428bca;border-color:inherit}.segmented-control-primary .control-item:active{background-color:#cde1f1}.segmented-control-primary .control-item.active{color:#fff;background-color:#428bca}.segmented-control-positive{border-color:#5cb85c}.segmented-control-positive .control-item{color:#5cb85c;border-color:inherit}.segmented-control-positive .control-item:active{background-color:#d8eed8}.segmented-control-positive .control-item.active{color:#fff;background-color:#5cb85c}.segmented-control-negative{border-color:#d9534f}.segmented-control-negative .control-item{color:#d9534f;border-color:inherit}.segmented-control-negative .control-item:active{background-color:#f9e2e2}.segmented-control-negative .control-item.active{color:#fff;background-color:#d9534f}.control-content{display:none}.control-content.active{display:block}.popover{position:fixed;top:55px;left:50%;z-index:20;display:none;width:280px;margin-left:-140px;background-color:#fff;border-radius:6px;-webkit-box-shadow:0 0 15px rgba(0,0,0,.1);box-shadow:0 0 15px rgba(0,0,0,.1);opacity:0;-webkit-transition:all .25s linear;-o-transition:all .25s linear;transition:all .25s linear;-webkit-transform:translate3d(0,-15px,0);-ms-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}.popover:before{position:absolute;top:-15px;left:50%;width:0;height:0;margin-left:-15px;content:'';border-right:15px solid transparent;border-bottom:15px solid #fff;border-left:15px solid transparent}.backdrop,.modal{position:fixed;top:0}.popover.visible{opacity:1;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.popover .bar~.table-view{padding-top:44px}.backdrop{right:0;bottom:0;left:0;z-index:15;background-color:rgba(0,0,0,.3)}.modal,.popover .table-view,.toggle{background-color:#fff}.popover .btn-block{margin-bottom:5px}.popover .btn-block:last-child{margin-bottom:0}.popover .bar-nav{border-bottom:1px solid #ddd;border-top-left-radius:12px;border-top-right-radius:12px;-webkit-box-shadow:none;box-shadow:none}.popover .table-view{max-height:300px;margin-bottom:0;overflow:auto;-webkit-overflow-scrolling:touch;border-top:0;border-bottom:0;border-radius:6px}.modal,.slider{overflow:hidden}.modal{z-index:11;width:100%;min-height:100%;opacity:0;-webkit-transition:-webkit-transform .25s,opacity 1ms .25s;-o-transition:-o-transform .25s,opacity 1ms .25s;transition:transform .25s,opacity 1ms .25s;-webkit-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.modal.active{height:100%;opacity:1;-webkit-transition:-webkit-transform .25s;-o-transition:-o-transform .25s;transition:transform .25s;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slider{width:100%;background-color:#000}.slider .slide-group{position:relative;font-size:0;-webkit-transition:all 0s linear;-o-transition:all 0s linear;transition:all 0s linear}.toggle,.toggle .toggle-handle{-o-transition-duration:.2s;transition-duration:.2s;-webkit-transition-duration:.2s}.slider .slide-group .slide{display:inline-block;width:100%;height:100%;font-size:14px;vertical-align:top}.toggle{position:relative;display:block;width:74px;height:30px;border:2px solid #ddd;border-radius:20px;-webkit-transition-property:background-color,border;-o-transition-property:background-color,border;transition-property:background-color,border}.toggle .toggle-handle{position:absolute;top:-1px;left:-1px;z-index:2;width:28px;height:28px;background-color:#fff;border:1px solid #ddd;border-radius:100px;-webkit-transition-property:-webkit-transform,border,width;-o-transition-property:-o-transform,border,width;transition-property:transform,border,width}.toggle:before{position:absolute;top:3px;right:11px;font-size:13px;color:#999;text-transform:uppercase;content:"Off"}.toggle.active{background-color:#5cb85c;border:2px solid #5cb85c}.toggle.active .toggle-handle{border-color:#5cb85c;-webkit-transform:translate3d(44px,0,0);-ms-transform:translate3d(44px,0,0);transform:translate3d(44px,0,0)}.toggle.active:before{right:auto;left:15px;color:#fff;content:"On"}.toggle input[type=checkbox]{display:none}.content.fade{left:0;opacity:0;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.content.fade.in{opacity:1}.content.sliding{z-index:2;-webkit-transition:-webkit-transform .4s;-o-transition:-o-transform .4s;transition:transform .4s;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.content.sliding.left{z-index:1;-webkit-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.content.sliding.right{z-index:3;-webkit-transform:translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.navigate-left:after,.navigate-right:after,.push-left:after,.push-right:after{position:absolute;top:50%;font-size:inherit;color:#bbb;text-decoration:none;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%)}.navigate-left:after,.push-left:after{left:15px;content:'\e822'}.navigate-right:after,.push-right:after{right:15px;content:'\e826'}@font-face{font-family:Ratchicons;font-style:normal;font-weight:400;src:url(../fonts/ratchicons.eot);src:url(../fonts/ratchicons.eot?#iefix)format("embedded-opentype"),url(../fonts/ratchicons.woff)format("woff"),url(../fonts/ratchicons.ttf)format("truetype"),url(../fonts/ratchicons.svg#svgFontName)format("svg")}.icon{font-size:24px}.icon-back:before{content:'\e80a'}.icon-bars:before{content:'\e80e'}.icon-caret:before{content:'\e80f'}.icon-check:before{content:'\e810'}.icon-close:before{content:'\e811'}.icon-code:before{content:'\e812'}.icon-compose:before{content:'\e813'}.icon-download:before{content:'\e815'}.icon-edit:before{content:'\e829'}.icon-forward:before{content:'\e82a'}.icon-gear:before{content:'\e821'}.icon-home:before{content:'\e82b'}.icon-info:before{content:'\e82c'}.icon-list:before{content:'\e823'}.icon-more-vertical:before{content:'\e82e'}.icon-more:before{content:'\e82f'}.icon-pages:before{content:'\e824'}.icon-pause:before{content:'\e830'}.icon-person:before{content:'\e832'}.icon-play:before{content:'\e816'}.icon-plus:before{content:'\e817'}.icon-refresh:before{content:'\e825'}.icon-search:before{content:'\e819'}.icon-share:before{content:'\e81a'}.icon-sound:before{content:'\e827'}.icon-sound2:before{content:'\e828'}.icon-sound3:before{content:'\e80b'}.icon-sound4:before{content:'\e80c'}.icon-star-filled:before{content:'\e81b'}.icon-star:before{content:'\e81c'}.icon-stop:before{content:'\e81d'}.icon-trash:before{content:'\e81e'}.icon-up-nav:before{content:'\e81f'}.icon-up:before{content:'\e80d'}.icon-right-nav:before{content:'\e818'}.icon-right:before{content:'\e826'}.icon-down-nav:before{content:'\e814'}.icon-down:before{content:'\e820'}.icon-left-nav:before{content:'\e82d'}.icon-left:before{content:'\e822'} \ No newline at end of file diff --git a/dist/js/ratchet.js b/dist/js/ratchet.js index 15b21d16d..405256d89 100644 --- a/dist/js/ratchet.js +++ b/dist/js/ratchet.js @@ -205,6 +205,152 @@ }()); +!(function () { + 'use strict'; + + // Ratchet's layout includes fixed position headers & footers that should always + // appear before the main .content div within + // + // These fixed bars will have new content swapped in, ignoring any + // transitions (slide-in, slide-out & fade). + // + // These following selectors define which elements are transitioned with + // simple DOM replacement and are always immediate children of + var barSelectors = [ + '.bar-tab', + '.bar-nav', + '.bar-footer', + '.bar-header-secondary' + ]; + + // Other than any fixed bars, '.content' should be the only other child of body + var contentSelector = '.content'; + + // For any bar elements in `newMarkup`, either: + // * replace an existing bar elements with new content + // * add new bar elements when an existing one isn't present + // * remove any bar elements not found in `newMarkup` + var updateBars = function (newMarkup) { + for (var i = 0; i < barSelectors.length; i++) { + var selector = barSelectors[i]; + var newBar = newMarkup.querySelector(selector); + var existingBar = document.querySelector(selector); + + if (newBar) { + displayBar(newBar, existingBar); + } else if (existingBar) { + existingBar.parentNode.removeChild(existingBar); + } + } + }; + + var displayBar = function (bar, container) { + if (container) { + container.innerHTML = ''; + container.appendChild(bar); + } else { + // per Ratchet's CSS, bar elements must be the first thing in + // here we assume `.content` is an immediate child of + document.body.insertBefore(bar, document.querySelector(contentSelector)); + } + }; + + var transitionContent = function (swap, container, transition, complete) { + var enter; + var containerDirection; + var swapDirection; + + enter = /in$/.test(transition); + + if (transition === 'fade') { + container.classList.add('in'); + container.classList.add('fade'); + swap.classList.add('fade'); + } + + if (/slide/.test(transition)) { + swap.classList.add('sliding-in', enter ? 'right' : 'left'); + swap.classList.add('sliding'); + container.classList.add('sliding'); + } + + container.parentNode.insertBefore(swap, container); + + if (transition === 'fade') { + container.offsetWidth; // force reflow + container.classList.remove('in'); + var fadeContainerEnd = function () { + container.removeEventListener(window.RATCHET.getTransitionEnd, fadeContainerEnd); + swap.classList.add('in'); + swap.addEventListener(window.RATCHET.getTransitionEnd, fadeSwapEnd); + }; + var fadeSwapEnd = function () { + swap.removeEventListener(window.RATCHET.getTransitionEnd, fadeSwapEnd); + container.parentNode.removeChild(container); + swap.classList.remove('fade'); + swap.classList.remove('in'); + complete && complete(); + }; + container.addEventListener(window.RATCHET.getTransitionEnd, fadeContainerEnd); + } + + if (/slide/.test(transition)) { + var slideEnd = function () { + swap.removeEventListener(window.RATCHET.getTransitionEnd, slideEnd); + swap.classList.remove('sliding', 'sliding-in'); + swap.classList.remove(swapDirection); + container.parentNode.removeChild(container); + complete && complete(); + }; + + container.offsetWidth; // force reflow + swapDirection = enter ? 'right' : 'left'; + containerDirection = enter ? 'left' : 'right'; + container.classList.add(containerDirection); + swap.classList.remove(swapDirection); + swap.addEventListener('webkitTransitionEnd', slideEnd); + } + }; + + // `contents` can either be a string of HTML or a DOM object. + // Either way, `contents` must include: + // * bar elements (optional -- see `barSelectors`) + // * a single content element + // All as children of a single parent. + // + // For example: + //
+ //
+ //
+ //
+ //
+ var TRANSITION = function (contents, transition, complete) { + + if (typeof(contents) === 'string' || contents instanceof String) { + var div = document.createElement('div'); + div.innerHTML = contents; + contents = div.childNodes[0]; + } else { + contents = contents.cloneNode(true); + } + + if (transition) { + updateBars(contents); + + var existingContentDiv = document.querySelector(contentSelector); + var newContentDiv = contents.querySelector(contentSelector); + transitionContent(newContentDiv, existingContentDiv, + transition, complete); + } else { + document.body.innerHTML = ''; + document.body.appendChild(contents); + complete && complete(); + } + }; + + window.RATCHET.transition = TRANSITION; +}()); + /* ======================================================================== * Ratchet: push.js v2.0.2 * http://goratchet.com/components#push @@ -214,7 +360,7 @@ * Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE) * ======================================================================== */ -/* global _gaq: true */ +/* global _gaq */ !(function () { 'use strict'; @@ -236,13 +382,6 @@ fade : 'fade' }; - var bars = { - bartab : '.bar-tab', - barnav : '.bar-nav', - barfooter : '.bar-footer', - barheadersecondary : '.bar-header-secondary' - }; - var cacheReplace = function (data, updates) { PUSH.id = data.id; if (updates) { @@ -334,8 +473,6 @@ }; var popstate = function (e) { - var key; - var barElement; var activeObj; var activeDom; var direction; @@ -383,27 +520,11 @@ }); } - if (transitionFromObj.transition) { - activeObj = extendWithDom(activeObj, '.content', activeDom.cloneNode(true)); - for (key in bars) { - if (bars.hasOwnProperty(key)) { - barElement = document.querySelector(bars[key]); - if (activeObj[key]) { - swapContent(activeObj[key], barElement); - } else if (barElement) { - barElement.parentNode.removeChild(barElement); - } - } - } - } - - swapContent( - (activeObj.contents || activeDom).cloneNode(true), - document.querySelector('.content'), - transition, function () { - triggerStateChange(); - } - ); + window.RATCHET.transition(activeDom.cloneNode(true), + transitionFromObj.transition, + function () { + triggerStateChange(); + }); PUSH.id = id; @@ -415,17 +536,8 @@ // ======================= var PUSH = function (options) { - var key; var xhr = PUSH.xhr; - options.container = options.container || options.transition ? document.querySelector('.content') : document.body; - - for (key in bars) { - if (bars.hasOwnProperty(key)) { - options[key] = options[key] || document.querySelector(bars[key]); - } - } - if (xhr && xhr.readyState < 4) { xhr.onreadystatechange = noop; xhr.abort(); @@ -480,8 +592,6 @@ // ================= var success = function (xhr, options) { - var key; - var barElement; var data = parseXHR(xhr, options); if (!data.contents) { @@ -492,20 +602,7 @@ document.title = data.title; } - if (options.transition) { - for (key in bars) { - if (bars.hasOwnProperty(key)) { - barElement = document.querySelector(bars[key]); - if (data[key]) { - swapContent(data[key], barElement); - } else if (barElement) { - barElement.parentNode.removeChild(barElement); - } - } - } - } - - swapContent(data.contents, options.container, options.transition, function () { + window.RATCHET.transition(data.contents, options.transition, function () { cacheReplace({ id : options.id || +new Date(), url : data.url, @@ -516,6 +613,7 @@ triggerStateChange(); }); + if (!options.ignorePush && window._gaq) { _gaq.push(['_trackPageview']); // google analytics } @@ -532,84 +630,6 @@ // PUSH helpers // ============ - var swapContent = function (swap, container, transition, complete) { - var enter; - var containerDirection; - var swapDirection; - - if (!transition) { - if (container) { - container.innerHTML = swap.innerHTML; - } else if (swap.classList.contains('content')) { - document.body.appendChild(swap); - } else { - document.body.insertBefore(swap, document.querySelector('.content')); - } - } else { - enter = /in$/.test(transition); - - if (transition === 'fade') { - container.classList.add('in'); - container.classList.add('fade'); - swap.classList.add('fade'); - } - - if (/slide/.test(transition)) { - swap.classList.add('sliding-in', enter ? 'right' : 'left'); - swap.classList.add('sliding'); - container.classList.add('sliding'); - } - - container.parentNode.insertBefore(swap, container); - } - - if (!transition) { - if (complete) { - complete(); - } - } - - if (transition === 'fade') { - container.offsetWidth; // force reflow - container.classList.remove('in'); - var fadeContainerEnd = function () { - container.removeEventListener(window.RATCHET.getTransitionEnd, fadeContainerEnd); - swap.classList.add('in'); - swap.addEventListener(window.RATCHET.getTransitionEnd, fadeSwapEnd); - }; - var fadeSwapEnd = function () { - swap.removeEventListener(window.RATCHET.getTransitionEnd, fadeSwapEnd); - container.parentNode.removeChild(container); - swap.classList.remove('fade'); - swap.classList.remove('in'); - if (complete) { - complete(); - } - }; - container.addEventListener(window.RATCHET.getTransitionEnd, fadeContainerEnd); - - } - - if (/slide/.test(transition)) { - var slideEnd = function () { - swap.removeEventListener(window.RATCHET.getTransitionEnd, slideEnd); - swap.classList.remove('sliding', 'sliding-in'); - swap.classList.remove(swapDirection); - container.parentNode.removeChild(container); - if (complete) { - complete(); - } - }; - - container.offsetWidth; // force reflow - swapDirection = enter ? 'right' : 'left'; - containerDirection = enter ? 'left' : 'right'; - container.classList.add(containerDirection); - swap.classList.remove(swapDirection); - swap.addEventListener(window.RATCHET.getTransitionEnd, slideEnd); - } - }; - var triggerStateChange = function () { var e = new CustomEvent('push', { detail: { state: getCached(PUSH.id) }, @@ -638,29 +658,6 @@ window.location.replace(url); }; - var extendWithDom = function (obj, fragment, dom) { - var i; - var result = {}; - - for (i in obj) { - if (obj.hasOwnProperty(i)) { - result[i] = obj[i]; - } - } - - Object.keys(bars).forEach(function (key) { - var el = dom.querySelector(bars[key]); - if (el) { - el.parentNode.removeChild(el); - } - result[key] = el; - }); - - result.contents = dom.querySelector(fragment); - - return result; - }; - var parseXHR = function (xhr, options) { var head; var body; @@ -687,11 +684,7 @@ var text = 'innerText' in data.title ? 'innerText' : 'textContent'; data.title = data.title && data.title[text].trim(); - if (options.transition) { - data = extendWithDom(data, '.content', body); - } else { - data.contents = body; - } + data.contents = body; return data; }; diff --git a/dist/js/ratchet.min.js b/dist/js/ratchet.min.js index 8680135ec..2f1e61776 100644 --- a/dist/js/ratchet.min.js +++ b/dist/js/ratchet.min.js @@ -7,4 +7,4 @@ * v2.0.2 designed by @connors. * ===================================================== */ -!function(){"use strict";window.CustomEvent||(window.CustomEvent=function(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,b.bubbles,b.cancelable,b.detail),c}),"undefined"==typeof window.RATCHET&&(window.RATCHET={}),window.RATCHET.getBrowserCapabilities=function(){var a=window.getComputedStyle(document.documentElement,""),b=(Array.prototype.slice.call(a).join("").match(/-(moz|webkit|ms)-/)||""===a.OLink&&["","o"])[1];return{prefix:"-"+b+"-",transform:b[0].toUpperCase()+b.substr(1)+"Transform"}}(),window.RATCHET.getTransitionEnd=function(){var a=document.createElement("ratchet"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return b[c];return b.transition}()}(),!function(){"use strict";var a=new CustomEvent("modalOpen",{bubbles:!0,cancelable:!0}),b=new CustomEvent("modalClose",{bubbles:!0,cancelable:!0}),c=function(a){for(var b,c=document.querySelectorAll("a");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a},d=function(a){var b=c(a.target);return b&&b.hash?document.querySelector(b.hash):void 0};window.addEventListener("touchend",function(c){var e=d(c);if(e&&e.classList.contains("modal")){var f=a;e.classList.contains("active")&&(f=b),e.dispatchEvent(f),e.classList.toggle("active")}c.preventDefault()})}(),!function(){"use strict";var a,b=function(a){for(var b,c=document.querySelectorAll("a");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a},c=function(){a.style.display="none",a.removeEventListener(window.RATCHET.getTransitionEnd,c)},d=function(){var b=document.createElement("div");return b.classList.add("backdrop"),b.addEventListener("touchend",function(){a.addEventListener(window.RATCHET.getTransitionEnd,c),a.classList.remove("visible"),a.parentNode.removeChild(d)}),b}(),e=function(c){var d=b(c.target);if(d&&d.hash&&!(d.hash.indexOf("/")>0)){try{a=document.querySelector(d.hash)}catch(e){a=null}if(null!==a&&a&&a.classList.contains("popover"))return a}},f=function(a){var b=e(a);b&&(b.style.display="block",b.offsetHeight,b.classList.add("visible"),b.parentNode.appendChild(d))};window.addEventListener("touchend",f)}(),!function(){"use strict";function a(){f[p.id]=document.body.cloneNode(!0)}var b,c=function(){},d=20,e=sessionStorage,f={},g={"slide-in":"slide-out","slide-out":"slide-in",fade:"fade"},h={bartab:".bar-tab",barnav:".bar-nav",barfooter:".bar-footer",barheadersecondary:".bar-header-secondary"},i=function(a,b){p.id=a.id,b&&(a=l(a.id)),e[a.id]=JSON.stringify(a),window.history.replaceState(a.id,a.title,a.url)},j=function(){var a=p.id,b=JSON.parse(e.cacheForwardStack||"[]"),c=JSON.parse(e.cacheBackStack||"[]");for(c.push(a);b.length;)delete e[b.shift()];for(;c.length>d;)delete e[c.shift()];l(p.id).url&&window.history.pushState(null,"",l(p.id).url),e.cacheForwardStack=JSON.stringify(b),e.cacheBackStack=JSON.stringify(c)},k=function(a,b){var c="forward"===b,d=JSON.parse(e.cacheForwardStack||"[]"),f=JSON.parse(e.cacheBackStack||"[]"),g=c?f:d,h=c?d:f;p.id&&g.push(p.id),h.pop(),e.cacheForwardStack=JSON.stringify(d),e.cacheBackStack=JSON.stringify(f)},l=function(a){return JSON.parse(e[a]||null)||{}},m=function(a){var c=u(a.target);if(!(!c||a.which>1||a.metaKey||a.ctrlKey||b||location.protocol!==c.protocol||location.host!==c.host||!c.hash&&/#/.test(c.href)||c.hash&&c.href.replace(c.hash,"")===location.href.replace(location.hash,"")||"push"===c.getAttribute("data-ignore")))return c},n=function(a){var b=m(a);b&&(a.preventDefault(),p({url:b.href,hash:b.hash,timeout:b.getAttribute("data-timeout"),transition:b.getAttribute("data-transition")}))},o=function(a){var b,c,d,i,j,m,n,o,q=a.state;if(q&&e[q]){if(j=p.id]*>([\s\S.]*)<\/head>/i)[0],d.innerHTML=f.match(/]*>([\s\S.]*)<\/body>/i)[0]):(c=d=document.createElement("div"),c.innerHTML=f),e.title=c.querySelector("title")||document.querySelector("title");var g="innerText"in e.title?"innerText":"textContent";return e.title=e.title&&e.title[g].trim(),b.transition?e=w(e,".content",d):e.contents=d,e};window.addEventListener("touchstart",function(){b=!1}),window.addEventListener("touchmove",function(){b=!0}),window.addEventListener("touchend",n),window.addEventListener("click",function(a){m(a)&&a.preventDefault()}),window.addEventListener("popstate",o),window.PUSH=p,window.RATCHET.push=p}(),!function(){"use strict";var a=function(a){for(var b,c=document.querySelectorAll(".segmented-control .control-item");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a};window.addEventListener("touchend",function(b){var c,d,e,f=a(b.target),g="active",h="."+g;if(f&&(c=f.parentNode.querySelector(h),c&&c.classList.remove(g),f.classList.add(g),f.hash&&(e=document.querySelector(f.hash)))){d=e.parentNode.querySelectorAll(h);for(var i=0;i .slide-group");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a},r=function(){var a=c.style[p].match(/translate3d\(([^,]*)/),b=a?a[1]:0;return parseInt(b,10)},s=function(a){var b=a?0>d?"ceil":"floor":"round";k=Math[b](r()/(m/c.children.length)),k+=a,k=Math.min(k,0),k=Math.max(-(c.children.length-1),k)},t=function(f){if(c=q(f.target)){var k=c.querySelector(".slide");m=k.offsetWidth*c.children.length,l=void 0,j=c.offsetWidth,i=1,g=-(c.children.length-1),h=+new Date,a=f.touches[0].pageX,b=f.touches[0].pageY,d=0,e=0,s(0),c.style[o+"transition-duration"]=0}},u=function(h){h.touches.length>1||!c||(n||(a+=h.touches[0].pageX-a-1),d=h.touches[0].pageX-a,e=h.touches[0].pageY-b,a=h.touches[0].pageX,b=h.touches[0].pageY,"undefined"==typeof l&&n&&(l=Math.abs(e)>Math.abs(d)),l||(f=d/i+r(),h.preventDefault(),i=0===k&&d>0?a/j+1.25:k===g&&0>d?Math.abs(a)/j+1.25:1,c.style[p]="translate3d("+f+"px,0,0)",n=!0))},v=function(a){c&&!l&&(n=!1,s(+new Date-h<1e3&&Math.abs(d)>15?0>d?-1:1:0),f=k*j,c.style[o+"transition-duration"]=".2s",c.style[p]="translate3d("+f+"px,0,0)",a=new CustomEvent("slide",{detail:{slideNumber:Math.abs(k)},bubbles:!0,cancelable:!0}),c.parentNode.dispatchEvent(a))};window.addEventListener("touchstart",t),window.addEventListener("touchmove",u),window.addEventListener("touchend",v)}(),!function(){"use strict";var a={},b=!1,c=!1,d=!1,e=window.RATCHET.getBrowserCapabilities.transform,f=function(a){for(var b,c=document.querySelectorAll(".toggle");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a};window.addEventListener("touchstart",function(c){if(c=c.originalEvent||c,d=f(c.target)){var e=d.querySelector(".toggle-handle"),g=d.clientWidth,h=e.clientWidth,i=d.classList.contains("active")?g-h:0;a={pageX:c.touches[0].pageX-i,pageY:c.touches[0].pageY},b=!1}}),window.addEventListener("touchmove",function(f){if(f=f.originalEvent||f,!(f.touches.length>1)&&d){var g=d.querySelector(".toggle-handle"),h=f.touches[0],i=d.clientWidth,j=g.clientWidth,k=i-j;if(b=!0,c=h.pageX-a.pageX,!(Math.abs(c)c)return g.style[e]="translate3d(0,0,0)";if(c>k)return g.style[e]="translate3d("+k+"px,0,0)";g.style[e]="translate3d("+c+"px,0,0)",d.classList[c>i/2-j/2?"add":"remove"]("active")}}}),window.addEventListener("touchend",function(a){if(d){var f=d.querySelector(".toggle-handle"),g=d.clientWidth,h=f.clientWidth,i=g-h,j=!b&&!d.classList.contains("active")||b&&c>g/2-h/2;f.style[e]=j?"translate3d("+i+"px,0,0)":"translate3d(0,0,0)",d.classList[j?"add":"remove"]("active"),a=new CustomEvent("toggle",{detail:{isActive:j},bubbles:!0,cancelable:!0}),d.dispatchEvent(a),b=!1,d=!1}})}(); \ No newline at end of file +!function(){"use strict";window.CustomEvent||(window.CustomEvent=function(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,b.bubbles,b.cancelable,b.detail),c}),"undefined"==typeof window.RATCHET&&(window.RATCHET={}),window.RATCHET.getBrowserCapabilities=function(){var a=window.getComputedStyle(document.documentElement,""),b=(Array.prototype.slice.call(a).join("").match(/-(moz|webkit|ms)-/)||""===a.OLink&&["","o"])[1];return{prefix:"-"+b+"-",transform:b[0].toUpperCase()+b.substr(1)+"Transform"}}(),window.RATCHET.getTransitionEnd=function(){var a=document.createElement("ratchet"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return b[c];return b.transition}()}(),!function(){"use strict";var a=new CustomEvent("modalOpen",{bubbles:!0,cancelable:!0}),b=new CustomEvent("modalClose",{bubbles:!0,cancelable:!0}),c=function(a){for(var b,c=document.querySelectorAll("a");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a},d=function(a){var b=c(a.target);return b&&b.hash?document.querySelector(b.hash):void 0};window.addEventListener("touchend",function(c){var e=d(c);if(e&&e.classList.contains("modal")){var f=a;e.classList.contains("active")&&(f=b),e.dispatchEvent(f),e.classList.toggle("active")}c.preventDefault()})}(),!function(){"use strict";var a,b=function(a){for(var b,c=document.querySelectorAll("a");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a},c=function(){a.style.display="none",a.removeEventListener(window.RATCHET.getTransitionEnd,c)},d=function(){var b=document.createElement("div");return b.classList.add("backdrop"),b.addEventListener("touchend",function(){a.addEventListener(window.RATCHET.getTransitionEnd,c),a.classList.remove("visible"),a.parentNode.removeChild(d)}),b}(),e=function(c){var d=b(c.target);if(d&&d.hash&&!(d.hash.indexOf("/")>0)){try{a=document.querySelector(d.hash)}catch(e){a=null}if(null!==a&&a&&a.classList.contains("popover"))return a}},f=function(a){var b=e(a);b&&(b.style.display="block",b.offsetHeight,b.classList.add("visible"),b.parentNode.appendChild(d))};window.addEventListener("touchend",f)}(),!function(){"use strict";var a=[".bar-tab",".bar-nav",".bar-footer",".bar-header-secondary"],b=".content",c=function(b){for(var c=0;cd;)delete e[c.shift()];k(o.id).url&&window.history.pushState(null,"",k(o.id).url),e.cacheForwardStack=JSON.stringify(b),e.cacheBackStack=JSON.stringify(c)},j=function(a,b){var c="forward"===b,d=JSON.parse(e.cacheForwardStack||"[]"),f=JSON.parse(e.cacheBackStack||"[]"),g=c?f:d,h=c?d:f;o.id&&g.push(o.id),h.pop(),e.cacheForwardStack=JSON.stringify(d),e.cacheBackStack=JSON.stringify(f)},k=function(a){return JSON.parse(e[a]||null)||{}},l=function(a){var c=s(a.target);if(!(!c||a.which>1||a.metaKey||a.ctrlKey||b||location.protocol!==c.protocol||location.host!==c.host||!c.hash&&/#/.test(c.href)||c.hash&&c.href.replace(c.hash,"")===location.href.replace(location.hash,"")||"push"===c.getAttribute("data-ignore")))return c},m=function(a){var b=l(a);b&&(a.preventDefault(),o({url:b.href,hash:b.hash,timeout:b.getAttribute("data-timeout"),transition:b.getAttribute("data-transition")}))},n=function(a){var b,c,d,h,i,l,m=a.state;if(m&&e[m]){if(d=o.id]*>([\s\S.]*)<\/head>/i)[0],d.innerHTML=f.match(/]*>([\s\S.]*)<\/body>/i)[0]):(c=d=document.createElement("div"),c.innerHTML=f),e.title=c.querySelector("title")||document.querySelector("title");var g="innerText"in e.title?"innerText":"textContent";return e.title=e.title&&e.title[g].trim(),e.contents=d,e};window.addEventListener("touchstart",function(){b=!1}),window.addEventListener("touchmove",function(){b=!0}),window.addEventListener("touchend",m),window.addEventListener("click",function(a){l(a)&&a.preventDefault()}),window.addEventListener("popstate",n),window.PUSH=o,window.RATCHET.push=o}(),!function(){"use strict";var a=function(a){for(var b,c=document.querySelectorAll(".segmented-control .control-item");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a};window.addEventListener("touchend",function(b){var c,d,e,f=a(b.target),g="active",h="."+g;if(f&&(c=f.parentNode.querySelector(h),c&&c.classList.remove(g),f.classList.add(g),f.hash&&(e=document.querySelector(f.hash)))){d=e.parentNode.querySelectorAll(h);for(var i=0;i .slide-group");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a},r=function(){var a=c.style[p].match(/translate3d\(([^,]*)/),b=a?a[1]:0;return parseInt(b,10)},s=function(a){var b=a?0>d?"ceil":"floor":"round";k=Math[b](r()/(m/c.children.length)),k+=a,k=Math.min(k,0),k=Math.max(-(c.children.length-1),k)},t=function(f){if(c=q(f.target)){var k=c.querySelector(".slide");m=k.offsetWidth*c.children.length,l=void 0,j=c.offsetWidth,i=1,g=-(c.children.length-1),h=+new Date,a=f.touches[0].pageX,b=f.touches[0].pageY,d=0,e=0,s(0),c.style[o+"transition-duration"]=0}},u=function(h){h.touches.length>1||!c||(n||(a+=h.touches[0].pageX-a-1),d=h.touches[0].pageX-a,e=h.touches[0].pageY-b,a=h.touches[0].pageX,b=h.touches[0].pageY,"undefined"==typeof l&&n&&(l=Math.abs(e)>Math.abs(d)),l||(f=d/i+r(),h.preventDefault(),i=0===k&&d>0?a/j+1.25:k===g&&0>d?Math.abs(a)/j+1.25:1,c.style[p]="translate3d("+f+"px,0,0)",n=!0))},v=function(a){c&&!l&&(n=!1,s(+new Date-h<1e3&&Math.abs(d)>15?0>d?-1:1:0),f=k*j,c.style[o+"transition-duration"]=".2s",c.style[p]="translate3d("+f+"px,0,0)",a=new CustomEvent("slide",{detail:{slideNumber:Math.abs(k)},bubbles:!0,cancelable:!0}),c.parentNode.dispatchEvent(a))};window.addEventListener("touchstart",t),window.addEventListener("touchmove",u),window.addEventListener("touchend",v)}(),!function(){"use strict";var a={},b=!1,c=!1,d=!1,e=window.RATCHET.getBrowserCapabilities.transform,f=function(a){for(var b,c=document.querySelectorAll(".toggle");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a};window.addEventListener("touchstart",function(c){if(c=c.originalEvent||c,d=f(c.target)){var e=d.querySelector(".toggle-handle"),g=d.clientWidth,h=e.clientWidth,i=d.classList.contains("active")?g-h:0;a={pageX:c.touches[0].pageX-i,pageY:c.touches[0].pageY},b=!1}}),window.addEventListener("touchmove",function(f){if(f=f.originalEvent||f,!(f.touches.length>1)&&d){var g=d.querySelector(".toggle-handle"),h=f.touches[0],i=d.clientWidth,j=g.clientWidth,k=i-j;if(b=!0,c=h.pageX-a.pageX,!(Math.abs(c)c)return g.style[e]="translate3d(0,0,0)";if(c>k)return g.style[e]="translate3d("+k+"px,0,0)";g.style[e]="translate3d("+c+"px,0,0)",d.classList[c>i/2-j/2?"add":"remove"]("active")}}}),window.addEventListener("touchend",function(a){if(d){var f=d.querySelector(".toggle-handle"),g=d.clientWidth,h=f.clientWidth,i=g-h,j=!b&&!d.classList.contains("active")||b&&c>g/2-h/2;f.style[e]=j?"translate3d("+i+"px,0,0)":"translate3d(0,0,0)",d.classList[j?"add":"remove"]("active"),a=new CustomEvent("toggle",{detail:{isActive:j},bubbles:!0,cancelable:!0}),d.dispatchEvent(a),b=!1,d=!1}})}(); \ No newline at end of file diff --git a/docs/dist/css/ratchet.min.css b/docs/dist/css/ratchet.min.css index c101297a8..94ae08610 100644 --- a/docs/dist/css/ratchet.min.css +++ b/docs/dist/css/ratchet.min.css @@ -6,4 +6,4 @@ * * v2.0.2 designed by @connors. * ===================================================== - *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */.icon,a{text-decoration:none}img,legend{border:0}legend,td,th{padding:0}body,mark{color:#000}.bar-tab,.btn-block,.title,input[type=button],input[type=reset],input[type=submit]{width:100%}.btn,.text-center,.title{text-align:center}*,input[type=search]{-webkit-box-sizing:border-box;box-sizing:border-box}.btn,.slider .slide-group,.title{white-space:nowrap}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent;color:#428bca;-webkit-tap-highlight-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0}.btn,.content,body{background-color:#fff}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}.bar-footer,.content,body{bottom:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre,textarea{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}.input-row label,body,button,input,select,textarea{font-family:"Helvetica Neue",Helvetica,sans-serif}button{overflow:visible}.content,.popover .table-view{-webkit-overflow-scrolling:touch}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}table{border-spacing:0;border-collapse:collapse}.bar-nav~.content,.popover .bar~.table-view{padding-top:44px}*{-moz-box-sizing:border-box}body{margin:0;position:fixed;top:0;right:0;left:0;font-size:17px;line-height:21px}.card,.content-padded{margin:10px}a:active{color:#3071a9}.content{position:absolute;top:0;right:0;left:0;overflow:auto}.card,.input-row,.modal,.segmented-control,.slider,.table-view .media,.table-view .media-body,.table-view-cell,.table-view-cell>a:not(.btn){overflow:hidden}.content>*{-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}.bar-header-secondary~.content{padding-top:88px}.bar-footer~.content{padding-bottom:44px}.bar-footer-secondary~.content{padding-bottom:88px}.bar-tab~.content{padding-bottom:50px}.bar-footer-secondary-tab~.content{padding-bottom:94px}.pull-left{float:left}.pull-right{float:right}.clearfix:after,.clearfix:before{display:table;content:" "}.clearfix:after{clear:both}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:10px;line-height:1}.h5,.h6,h5,h6{margin-top:20px}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin-top:0;margin-bottom:10px;font-size:14px;color:#777}.btn{position:relative;display:inline-block;padding:6px 8px 7px;margin-bottom:0;font-size:12px;font-weight:400;line-height:1;color:#333;vertical-align:top;cursor:pointer;border:1px solid #ccc;border-radius:3px}.btn.active,.btn:active{color:inherit;background-color:#ccc}.btn.disabled,.btn:disabled{opacity:.6}.btn-primary{color:#fff;background-color:#428bca;border:1px solid #428bca}.btn-primary.active,.btn-primary:active{color:#fff;background-color:#3071a9;border:1px solid #3071a9}.btn-positive{color:#fff;background-color:#5cb85c;border:1px solid #5cb85c}.btn-positive.active,.btn-positive:active{color:#fff;background-color:#449d44;border:1px solid #449d44}.btn-negative{color:#fff;background-color:#d9534f;border:1px solid #d9534f}.btn-negative.active,.btn-negative:active{color:#fff;background-color:#c9302c;border:1px solid #c9302c}.btn-link,.btn-outlined{background-color:transparent}.btn-outlined.btn-primary{color:#428bca}.btn-outlined.btn-positive{color:#5cb85c}.btn-outlined.btn-negative{color:#d9534f}.btn-outlined.btn-negative:active,.btn-outlined.btn-positive:active,.btn-outlined.btn-primary:active{color:#fff}.btn-link{padding-top:6px;padding-bottom:6px;color:#428bca;border:0}.btn-link.active,.btn-link:active{color:#3071a9;background-color:transparent}.btn-block{display:block;padding:15px 0;margin-bottom:10px;font-size:18px}.btn .badge{margin:-2px -4px -2px 4px;font-size:12px;background-color:rgba(0,0,0,.15)}.btn .badge-inverted,.btn:active .badge-inverted{background-color:transparent}.btn-negative:active .badge-inverted,.btn-positive:active .badge-inverted,.btn-primary:active .badge-inverted{color:#fff}.btn-block .badge{position:absolute;right:0;margin-right:10px}.btn .icon{font-size:inherit}.bar{position:fixed;right:0;left:0;z-index:10;height:44px;padding-right:10px;padding-left:10px;background-color:#fff;border-bottom:1px solid #ddd;-webkit-backface-visibility:hidden;backface-visibility:hidden}.bar-tab,.card .table-view,.card .table-view-cell:last-child{border-bottom:0}.bar-header-secondary{top:44px}.bar-footer-secondary{bottom:44px}.bar-footer-secondary-tab{bottom:50px}.bar-footer,.bar-footer-secondary,.bar-footer-secondary-tab{border-top:1px solid #ddd;border-bottom:0}.bar-nav{top:0}.title{position:absolute;display:block;padding:0;margin:0 -10px;font-size:17px;font-weight:500;line-height:44px;color:#000}.title a{color:inherit}.bar-tab{bottom:0;display:table;height:50px;padding:0;table-layout:fixed;border-top:1px solid #ddd}.bar-tab .tab-item{position:relative;display:table-cell;width:1%;height:50px;color:#929292;text-align:center;vertical-align:middle}.bar-tab .tab-item.active,.bar-tab .tab-item:active{color:#428bca}.bar-tab .tab-item .badge{position:absolute;top:3px;left:50%;vertical-align:top}.bar-tab .tab-item .icon{top:3px;width:24px;height:24px;padding-top:0;padding-bottom:0}.bar-tab .tab-item .icon~.tab-label{display:block;font-size:11px}.bar .btn{position:relative;top:7px;z-index:20;padding:6px 12px 7px;margin-top:0;font-weight:400}.bar .btn.pull-right{margin-left:10px}.bar .btn.pull-left{margin-right:10px}.bar .btn-link{top:0;padding:0;font-size:16px;line-height:44px;color:#428bca;border:0}.bar .btn-link.active,.bar .btn-link:active{color:#3071a9}.bar .btn-block{top:6px;padding:7px 0;margin-bottom:0;font-size:16px}.bar .btn-nav.pull-left{margin-left:-5px}.bar .btn-nav.pull-left .icon-left-nav{margin-right:-3px}.bar .btn-nav.pull-right{margin-right:-5px}.bar .btn-nav.pull-right .icon-right-nav{margin-left:-3px}.bar .icon{position:relative;z-index:20;padding-top:10px;padding-bottom:10px;font-size:24px}.bar .btn .icon{top:3px;padding:0}.bar .title .icon{padding:0}.bar .title .icon.icon-caret{top:4px;margin-left:-5px}.bar input[type=search]{height:29px;margin:6px 0}.bar .segmented-control{top:7px;margin:0 auto}.badge{display:inline-block;padding:2px 9px 3px;font-size:12px;line-height:1;color:#333;background-color:rgba(0,0,0,.15);border-radius:100px}.badge.badge-inverted{padding:0 5px 0 0;background-color:transparent}.badge-primary{color:#fff;background-color:#428bca}.badge-primary.badge-inverted{color:#428bca}.badge-positive{color:#fff;background-color:#5cb85c}.badge-positive.badge-inverted{color:#5cb85c}.badge-negative{color:#fff;background-color:#d9534f}.card,.table-view{background-color:#fff}.badge-negative.badge-inverted{color:#d9534f}.card{border:1px solid #ddd;border-radius:6px}.card .table-view{margin-bottom:0;border-top:0}.card .table-view .table-view-divider:first-child{top:0;border-top-left-radius:6px;border-top-right-radius:6px}.card .table-view .table-view-divider:last-child{border-bottom-right-radius:6px;border-bottom-left-radius:6px}.table-view,.table-view-cell{border-bottom:1px solid #ddd}.table-view{padding-left:0;margin-top:0;margin-bottom:15px;list-style:none;border-top:1px solid #ddd}.table-view-cell{position:relative;padding:11px 65px 11px 15px}.table-view-cell:last-child{border-bottom:0}.table-view-cell>a:not(.btn){position:relative;display:block;padding:inherit;margin:-11px -65px -11px -15px;color:inherit}.table-view-cell>a:not(.btn):active{background-color:#eee}.table-view-cell p{margin-bottom:0}.table-view-divider{padding-top:6px;padding-bottom:6px;padding-left:15px;margin-top:-1px;margin-left:0;font-weight:500;color:#999;background-color:#fafafa;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.table-view .media-object.pull-left{margin-right:10px}.table-view .media-object.pull-right{margin-left:10px}.table-view-cell>.badge,.table-view-cell>.btn,.table-view-cell>.toggle,.table-view-cell>a>.badge,.table-view-cell>a>.btn,.table-view-cell>a>.toggle{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%)}.table-view-cell .navigate-left>.badge,.table-view-cell .navigate-left>.btn,.table-view-cell .navigate-left>.toggle,.table-view-cell .navigate-right>.badge,.table-view-cell .navigate-right>.btn,.table-view-cell .navigate-right>.toggle,.table-view-cell .push-left>.badge,.table-view-cell .push-left>.btn,.table-view-cell .push-left>.toggle,.table-view-cell .push-right>.badge,.table-view-cell .push-right>.btn,.table-view-cell .push-right>.toggle,.table-view-cell>a .navigate-left>.badge,.table-view-cell>a .navigate-left>.btn,.table-view-cell>a .navigate-left>.toggle,.table-view-cell>a .navigate-right>.badge,.table-view-cell>a .navigate-right>.btn,.table-view-cell>a .navigate-right>.toggle,.table-view-cell>a .push-left>.badge,.table-view-cell>a .push-left>.btn,.table-view-cell>a .push-left>.toggle,.table-view-cell>a .push-right>.badge,.table-view-cell>a .push-right>.btn,.table-view-cell>a .push-right>.toggle{right:35px}.content>.table-view:first-child{margin-top:15px}button,input,select,textarea{font-size:17px}input[type=password],input[type=datetime],input[type=datetime-local],input[type=date],input[type=month],input[type=time],input[type=week],input[type=email],input[type=url],input[type=tel],input[type=color],input[type=number],input[type=search],input[type=text],select,textarea{width:100%;height:35px;-webkit-appearance:none;padding:0 15px;margin-bottom:15px;line-height:21px;background-color:#fff;border:1px solid #ddd;border-radius:3px;outline:0}select,textarea{height:auto}input[type=search]{-moz-box-sizing:border-box;padding:0 10px;font-size:16px;border-radius:20px}input[type=search]:focus{text-align:left}select{font-size:14px;background-color:#f8f8f8;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.input-group{background-color:#fff}.input-group input,.input-group textarea{margin-bottom:0;background-color:transparent;border-top:0;border-right:0;border-left:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.input-row{height:35px;border-bottom:1px solid #ddd}.input-row label{float:left;width:35%;padding:8px 15px;line-height:1.1}.input-row input{float:right;width:65%;padding-left:0;margin-bottom:0;border:0}.segmented-control{position:relative;display:table;font-size:12px;font-weight:400;background-color:#fff;border:1px solid #ccc;border-radius:3px}.segmented-control .control-item{display:table-cell;width:1%;padding-top:6px;padding-bottom:7px;overflow:hidden;line-height:1;color:#333;text-align:center;text-overflow:ellipsis;white-space:nowrap;border-left:1px solid #ccc}.segmented-control .control-item:first-child{border-left-width:0}.segmented-control .control-item:active{background-color:#eee}.segmented-control .control-item.active{background-color:#ccc}.segmented-control-primary{border-color:#428bca}.segmented-control-primary .control-item{color:#428bca;border-color:inherit}.segmented-control-primary .control-item:active{background-color:#cde1f1}.segmented-control-primary .control-item.active{color:#fff;background-color:#428bca}.segmented-control-positive{border-color:#5cb85c}.segmented-control-positive .control-item{color:#5cb85c;border-color:inherit}.segmented-control-positive .control-item:active{background-color:#d8eed8}.segmented-control-positive .control-item.active{color:#fff;background-color:#5cb85c}.segmented-control-negative{border-color:#d9534f}.segmented-control-negative .control-item{color:#d9534f;border-color:inherit}.segmented-control-negative .control-item:active{background-color:#f9e2e2}.segmented-control-negative .control-item.active{color:#fff;background-color:#d9534f}.control-content{display:none}.control-content.active{display:block}.popover{position:fixed;top:55px;left:50%;z-index:20;display:none;width:280px;margin-left:-140px;background-color:#fff;border-radius:6px;-webkit-box-shadow:0 0 15px rgba(0,0,0,.1);box-shadow:0 0 15px rgba(0,0,0,.1);opacity:0;-webkit-transition:all .25s linear;-o-transition:all .25s linear;transition:all .25s linear;-webkit-transform:translate3d(0,-15px,0);-ms-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}.popover:before{position:absolute;top:-15px;left:50%;width:0;height:0;margin-left:-15px;content:'';border-right:15px solid transparent;border-bottom:15px solid #fff;border-left:15px solid transparent}.backdrop,.modal{position:fixed;top:0}.popover.visible{opacity:1;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.backdrop{right:0;bottom:0;left:0;z-index:15;background-color:rgba(0,0,0,.3)}.modal,.popover .table-view,.toggle{background-color:#fff}.popover .btn-block{margin-bottom:5px}.popover .btn-block:last-child{margin-bottom:0}.popover .bar-nav{border-bottom:1px solid #ddd;border-top-left-radius:12px;border-top-right-radius:12px;-webkit-box-shadow:none;box-shadow:none}.popover .table-view{max-height:300px;margin-bottom:0;overflow:auto;border-top:0;border-bottom:0;border-radius:6px}.modal{z-index:11;width:100%;min-height:100%;opacity:0;-webkit-transition:-webkit-transform .25s,opacity 1ms .25s;-o-transition:-o-transform .25s,opacity 1ms .25s;transition:transform .25s,opacity 1ms .25s;-webkit-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.modal.active{height:100%;opacity:1;-webkit-transition:-webkit-transform .25s;-o-transition:-o-transform .25s;transition:transform .25s;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slider{width:100%;background-color:#000}.slider .slide-group{position:relative;font-size:0;-webkit-transition:all 0s linear;-o-transition:all 0s linear;transition:all 0s linear}.toggle,.toggle .toggle-handle{-o-transition-duration:.2s;transition-duration:.2s;-webkit-transition-duration:.2s}.slider .slide-group .slide{display:inline-block;width:100%;height:100%;font-size:14px;vertical-align:top}.toggle{position:relative;display:block;width:74px;height:30px;border:2px solid #ddd;border-radius:20px;-webkit-transition-property:background-color,border;-o-transition-property:background-color,border;transition-property:background-color,border}.toggle .toggle-handle{position:absolute;top:-1px;left:-1px;z-index:2;width:28px;height:28px;background-color:#fff;border:1px solid #ddd;border-radius:100px;-webkit-transition-property:-webkit-transform,border,width;-o-transition-property:-o-transform,border,width;transition-property:transform,border,width}.toggle:before{position:absolute;top:3px;right:11px;font-size:13px;color:#999;text-transform:uppercase;content:"Off"}.toggle.active{background-color:#5cb85c;border:2px solid #5cb85c}.toggle.active .toggle-handle{border-color:#5cb85c;-webkit-transform:translate3d(44px,0,0);-ms-transform:translate3d(44px,0,0);transform:translate3d(44px,0,0)}.toggle.active:before{right:auto;left:15px;color:#fff;content:"On"}.toggle input[type=checkbox]{display:none}.content.fade{left:0;opacity:0;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.content.fade.in{opacity:1}.content.sliding{z-index:2;-webkit-transition:-webkit-transform .4s;-o-transition:-o-transform .4s;transition:transform .4s;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.content.sliding.left{z-index:1;-webkit-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.content.sliding.right{z-index:3;-webkit-transform:translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.navigate-left:after,.navigate-right:after,.push-left:after,.push-right:after{position:absolute;top:50%;display:inline-block;font-family:Ratchicons;font-size:inherit;line-height:1;color:#bbb;text-decoration:none;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);-webkit-font-smoothing:antialiased}.navigate-left:after,.push-left:after{left:15px;content:'\e822'}.navigate-right:after,.push-right:after{right:15px;content:'\e826'}@font-face{font-family:Ratchicons;font-style:normal;font-weight:400;src:url(../fonts/ratchicons.eot);src:url(../fonts/ratchicons.eot?#iefix)format("embedded-opentype"),url(../fonts/ratchicons.woff)format("woff"),url(../fonts/ratchicons.ttf)format("truetype"),url(../fonts/ratchicons.svg#svgFontName)format("svg")}.icon{display:inline-block;font-family:Ratchicons;font-size:24px;line-height:1;-webkit-font-smoothing:antialiased}.icon-back:before{content:'\e80a'}.icon-bars:before{content:'\e80e'}.icon-caret:before{content:'\e80f'}.icon-check:before{content:'\e810'}.icon-close:before{content:'\e811'}.icon-code:before{content:'\e812'}.icon-compose:before{content:'\e813'}.icon-download:before{content:'\e815'}.icon-edit:before{content:'\e829'}.icon-forward:before{content:'\e82a'}.icon-gear:before{content:'\e821'}.icon-home:before{content:'\e82b'}.icon-info:before{content:'\e82c'}.icon-list:before{content:'\e823'}.icon-more-vertical:before{content:'\e82e'}.icon-more:before{content:'\e82f'}.icon-pages:before{content:'\e824'}.icon-pause:before{content:'\e830'}.icon-person:before{content:'\e832'}.icon-play:before{content:'\e816'}.icon-plus:before{content:'\e817'}.icon-refresh:before{content:'\e825'}.icon-search:before{content:'\e819'}.icon-share:before{content:'\e81a'}.icon-sound:before{content:'\e827'}.icon-sound2:before{content:'\e828'}.icon-sound3:before{content:'\e80b'}.icon-sound4:before{content:'\e80c'}.icon-star-filled:before{content:'\e81b'}.icon-star:before{content:'\e81c'}.icon-stop:before{content:'\e81d'}.icon-trash:before{content:'\e81e'}.icon-up-nav:before{content:'\e81f'}.icon-up:before{content:'\e80d'}.icon-right-nav:before{content:'\e818'}.icon-right:before{content:'\e826'}.icon-down-nav:before{content:'\e814'}.icon-down:before{content:'\e820'}.icon-left-nav:before{content:'\e82d'}.icon-left:before{content:'\e822'} \ No newline at end of file + *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */.icon,a{text-decoration:none}img,legend{border:0}legend,td,th{padding:0}body,mark{color:#000}.bar-tab,.btn-block,.title,input[type=button],input[type=reset],input[type=submit]{width:100%}.btn,.text-center,.title{text-align:center}*,input[type=search]{-webkit-box-sizing:border-box;box-sizing:border-box}.btn,.slider .slide-group,.title{white-space:nowrap}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent;color:#428bca;-webkit-tap-highlight-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0}.btn,.content,body{background-color:#fff}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}.bar-footer,.content,body{bottom:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre,textarea{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}.input-row label,body,button,input,select,textarea{font-family:"Helvetica Neue",Helvetica,sans-serif}.icon,.navigate-left:after,.navigate-right:after,.push-left:after,.push-right:after{display:inline-block;font-family:Ratchicons;line-height:1;-webkit-font-smoothing:antialiased}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}table{border-spacing:0;border-collapse:collapse}*{-moz-box-sizing:border-box}body{margin:0;position:fixed;top:0;right:0;left:0;font-size:17px;line-height:21px}.card,.content-padded{margin:10px}a:active{color:#3071a9}.content{position:absolute;top:0;right:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch}.content>*{-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}.bar-nav~.content{padding-top:44px}.bar-header-secondary~.content{padding-top:88px}.bar-footer~.content{padding-bottom:44px}.bar-footer-secondary~.content{padding-bottom:88px}.bar-tab~.content{padding-bottom:50px}.bar-footer-secondary-tab~.content{padding-bottom:94px}.pull-left{float:left}.pull-right{float:right}.clearfix:after,.clearfix:before{display:table;content:" "}.clearfix:after{clear:both}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:10px;line-height:1}.h5,.h6,h5,h6{margin-top:20px}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin-top:0;margin-bottom:10px;font-size:14px;color:#777}.btn{position:relative;display:inline-block;padding:6px 8px 7px;margin-bottom:0;font-size:12px;font-weight:400;line-height:1;color:#333;vertical-align:top;cursor:pointer;border:1px solid #ccc;border-radius:3px}.btn.active,.btn:active{color:inherit;background-color:#ccc}.btn.disabled,.btn:disabled{opacity:.6}.btn-primary{color:#fff;background-color:#428bca;border:1px solid #428bca}.btn-primary.active,.btn-primary:active{color:#fff;background-color:#3071a9;border:1px solid #3071a9}.btn-positive{color:#fff;background-color:#5cb85c;border:1px solid #5cb85c}.btn-positive.active,.btn-positive:active{color:#fff;background-color:#449d44;border:1px solid #449d44}.btn-negative{color:#fff;background-color:#d9534f;border:1px solid #d9534f}.btn-negative.active,.btn-negative:active{color:#fff;background-color:#c9302c;border:1px solid #c9302c}.btn-link,.btn-outlined{background-color:transparent}.btn-outlined.btn-primary{color:#428bca}.btn-outlined.btn-positive{color:#5cb85c}.btn-outlined.btn-negative{color:#d9534f}.btn-outlined.btn-negative:active,.btn-outlined.btn-positive:active,.btn-outlined.btn-primary:active{color:#fff}.btn-link{padding-top:6px;padding-bottom:6px;color:#428bca;border:0}.btn-link.active,.btn-link:active{color:#3071a9;background-color:transparent}.btn-block{display:block;padding:15px 0;margin-bottom:10px;font-size:18px}.btn .badge{margin:-2px -4px -2px 4px;font-size:12px;background-color:rgba(0,0,0,.15)}.btn .badge-inverted,.btn:active .badge-inverted{background-color:transparent}.btn-negative:active .badge-inverted,.btn-positive:active .badge-inverted,.btn-primary:active .badge-inverted{color:#fff}.btn-block .badge{position:absolute;right:0;margin-right:10px}.btn .icon{font-size:inherit}.bar{position:fixed;right:0;left:0;z-index:10;height:44px;padding-right:10px;padding-left:10px;background-color:#fff;border-bottom:1px solid #ddd;-webkit-backface-visibility:hidden;backface-visibility:hidden}.bar-tab,.card .table-view,.card .table-view-cell:last-child{border-bottom:0}.bar-header-secondary{top:44px}.bar-footer-secondary{bottom:44px}.bar-footer-secondary-tab{bottom:50px}.bar-footer,.bar-footer-secondary,.bar-footer-secondary-tab{border-top:1px solid #ddd;border-bottom:0}.bar-nav{top:0}.title{position:absolute;display:block;padding:0;margin:0 -10px;font-size:17px;font-weight:500;line-height:44px;color:#000}.title a{color:inherit}.bar-tab{bottom:0;display:table;height:50px;padding:0;table-layout:fixed;border-top:1px solid #ddd}.bar-tab .tab-item{position:relative;display:table-cell;width:1%;height:50px;color:#929292;text-align:center;vertical-align:middle}.bar-tab .tab-item.active,.bar-tab .tab-item:active{color:#428bca}.bar-tab .tab-item .badge{position:absolute;top:3px;left:50%;vertical-align:top}.bar-tab .tab-item .icon{top:3px;width:24px;height:24px;padding-top:0;padding-bottom:0}.bar-tab .tab-item .icon~.tab-label{display:block;font-size:11px}.bar .btn{position:relative;top:7px;z-index:20;padding:6px 12px 7px;margin-top:0;font-weight:400}.bar .btn.pull-right{margin-left:10px}.bar .btn.pull-left{margin-right:10px}.bar .btn-link{top:0;padding:0;font-size:16px;line-height:44px;color:#428bca;border:0}.bar .btn-link.active,.bar .btn-link:active{color:#3071a9}.bar .btn-block{top:6px;padding:7px 0;margin-bottom:0;font-size:16px}.bar .btn-nav.pull-left{margin-left:-5px}.bar .btn-nav.pull-left .icon-left-nav{margin-right:-3px}.bar .btn-nav.pull-right{margin-right:-5px}.bar .btn-nav.pull-right .icon-right-nav{margin-left:-3px}.bar .icon{position:relative;z-index:20;padding-top:10px;padding-bottom:10px;font-size:24px}.bar .btn .icon{top:3px;padding:0}.bar .title .icon{padding:0}.bar .title .icon.icon-caret{top:4px;margin-left:-5px}.bar input[type=search]{height:29px;margin:6px 0}.bar .segmented-control{top:7px;margin:0 auto}.badge{display:inline-block;padding:2px 9px 3px;font-size:12px;line-height:1;color:#333;background-color:rgba(0,0,0,.15);border-radius:100px}.badge.badge-inverted{padding:0 5px 0 0;background-color:transparent}.badge-primary{color:#fff;background-color:#428bca}.badge-primary.badge-inverted{color:#428bca}.badge-positive{color:#fff;background-color:#5cb85c}.badge-positive.badge-inverted{color:#5cb85c}.badge-negative{color:#fff;background-color:#d9534f}.card,.table-view{background-color:#fff}.badge-negative.badge-inverted{color:#d9534f}.card{overflow:hidden;border:1px solid #ddd;border-radius:6px}.card .table-view{margin-bottom:0;border-top:0}.card .table-view .table-view-divider:first-child{top:0;border-top-left-radius:6px;border-top-right-radius:6px}.card .table-view .table-view-divider:last-child{border-bottom-right-radius:6px;border-bottom-left-radius:6px}.table-view,.table-view-cell{border-bottom:1px solid #ddd}.table-view{padding-left:0;margin-top:0;margin-bottom:15px;list-style:none;border-top:1px solid #ddd}.table-view-cell{position:relative;padding:11px 65px 11px 15px;overflow:hidden}.table-view-cell:last-child{border-bottom:0}.table-view-cell>a:not(.btn){position:relative;display:block;padding:inherit;margin:-11px -65px -11px -15px;overflow:hidden;color:inherit}.table-view-cell>a:not(.btn):active{background-color:#eee}.table-view-cell p{margin-bottom:0}.table-view-divider{padding-top:6px;padding-bottom:6px;padding-left:15px;margin-top:-1px;margin-left:0;font-weight:500;color:#999;background-color:#fafafa;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.table-view .media,.table-view .media-body{overflow:hidden}.table-view .media-object.pull-left{margin-right:10px}.table-view .media-object.pull-right{margin-left:10px}.table-view-cell>.badge,.table-view-cell>.btn,.table-view-cell>.toggle,.table-view-cell>a>.badge,.table-view-cell>a>.btn,.table-view-cell>a>.toggle{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%)}.table-view-cell .navigate-left>.badge,.table-view-cell .navigate-left>.btn,.table-view-cell .navigate-left>.toggle,.table-view-cell .navigate-right>.badge,.table-view-cell .navigate-right>.btn,.table-view-cell .navigate-right>.toggle,.table-view-cell .push-left>.badge,.table-view-cell .push-left>.btn,.table-view-cell .push-left>.toggle,.table-view-cell .push-right>.badge,.table-view-cell .push-right>.btn,.table-view-cell .push-right>.toggle,.table-view-cell>a .navigate-left>.badge,.table-view-cell>a .navigate-left>.btn,.table-view-cell>a .navigate-left>.toggle,.table-view-cell>a .navigate-right>.badge,.table-view-cell>a .navigate-right>.btn,.table-view-cell>a .navigate-right>.toggle,.table-view-cell>a .push-left>.badge,.table-view-cell>a .push-left>.btn,.table-view-cell>a .push-left>.toggle,.table-view-cell>a .push-right>.badge,.table-view-cell>a .push-right>.btn,.table-view-cell>a .push-right>.toggle{right:35px}.content>.table-view:first-child{margin-top:15px}button,input,select,textarea{font-size:17px}input[type=password],input[type=datetime],input[type=datetime-local],input[type=date],input[type=month],input[type=time],input[type=week],input[type=email],input[type=url],input[type=tel],input[type=color],input[type=number],input[type=search],input[type=text],select,textarea{width:100%;height:35px;-webkit-appearance:none;padding:0 15px;margin-bottom:15px;line-height:21px;background-color:#fff;border:1px solid #ddd;border-radius:3px;outline:0}select,textarea{height:auto}input[type=search]{-moz-box-sizing:border-box;padding:0 10px;font-size:16px;border-radius:20px}input[type=search]:focus{text-align:left}select{font-size:14px;background-color:#f8f8f8;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.input-group{background-color:#fff}.input-group input,.input-group textarea{margin-bottom:0;background-color:transparent;border-top:0;border-right:0;border-left:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.input-row{height:35px;overflow:hidden;border-bottom:1px solid #ddd}.input-row label{float:left;width:35%;padding:8px 15px;line-height:1.1}.input-row input{float:right;width:65%;padding-left:0;margin-bottom:0;border:0}.segmented-control{position:relative;display:table;overflow:hidden;font-size:12px;font-weight:400;background-color:#fff;border:1px solid #ccc;border-radius:3px}.segmented-control .control-item{display:table-cell;width:1%;padding-top:6px;padding-bottom:7px;overflow:hidden;line-height:1;color:#333;text-align:center;text-overflow:ellipsis;white-space:nowrap;border-left:1px solid #ccc}.segmented-control .control-item:first-child{border-left-width:0}.segmented-control .control-item:active{background-color:#eee}.segmented-control .control-item.active{background-color:#ccc}.segmented-control-primary{border-color:#428bca}.segmented-control-primary .control-item{color:#428bca;border-color:inherit}.segmented-control-primary .control-item:active{background-color:#cde1f1}.segmented-control-primary .control-item.active{color:#fff;background-color:#428bca}.segmented-control-positive{border-color:#5cb85c}.segmented-control-positive .control-item{color:#5cb85c;border-color:inherit}.segmented-control-positive .control-item:active{background-color:#d8eed8}.segmented-control-positive .control-item.active{color:#fff;background-color:#5cb85c}.segmented-control-negative{border-color:#d9534f}.segmented-control-negative .control-item{color:#d9534f;border-color:inherit}.segmented-control-negative .control-item:active{background-color:#f9e2e2}.segmented-control-negative .control-item.active{color:#fff;background-color:#d9534f}.control-content{display:none}.control-content.active{display:block}.popover{position:fixed;top:55px;left:50%;z-index:20;display:none;width:280px;margin-left:-140px;background-color:#fff;border-radius:6px;-webkit-box-shadow:0 0 15px rgba(0,0,0,.1);box-shadow:0 0 15px rgba(0,0,0,.1);opacity:0;-webkit-transition:all .25s linear;-o-transition:all .25s linear;transition:all .25s linear;-webkit-transform:translate3d(0,-15px,0);-ms-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}.popover:before{position:absolute;top:-15px;left:50%;width:0;height:0;margin-left:-15px;content:'';border-right:15px solid transparent;border-bottom:15px solid #fff;border-left:15px solid transparent}.backdrop,.modal{position:fixed;top:0}.popover.visible{opacity:1;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.popover .bar~.table-view{padding-top:44px}.backdrop{right:0;bottom:0;left:0;z-index:15;background-color:rgba(0,0,0,.3)}.modal,.popover .table-view,.toggle{background-color:#fff}.popover .btn-block{margin-bottom:5px}.popover .btn-block:last-child{margin-bottom:0}.popover .bar-nav{border-bottom:1px solid #ddd;border-top-left-radius:12px;border-top-right-radius:12px;-webkit-box-shadow:none;box-shadow:none}.popover .table-view{max-height:300px;margin-bottom:0;overflow:auto;-webkit-overflow-scrolling:touch;border-top:0;border-bottom:0;border-radius:6px}.modal,.slider{overflow:hidden}.modal{z-index:11;width:100%;min-height:100%;opacity:0;-webkit-transition:-webkit-transform .25s,opacity 1ms .25s;-o-transition:-o-transform .25s,opacity 1ms .25s;transition:transform .25s,opacity 1ms .25s;-webkit-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.modal.active{height:100%;opacity:1;-webkit-transition:-webkit-transform .25s;-o-transition:-o-transform .25s;transition:transform .25s;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slider{width:100%;background-color:#000}.slider .slide-group{position:relative;font-size:0;-webkit-transition:all 0s linear;-o-transition:all 0s linear;transition:all 0s linear}.toggle,.toggle .toggle-handle{-o-transition-duration:.2s;transition-duration:.2s;-webkit-transition-duration:.2s}.slider .slide-group .slide{display:inline-block;width:100%;height:100%;font-size:14px;vertical-align:top}.toggle{position:relative;display:block;width:74px;height:30px;border:2px solid #ddd;border-radius:20px;-webkit-transition-property:background-color,border;-o-transition-property:background-color,border;transition-property:background-color,border}.toggle .toggle-handle{position:absolute;top:-1px;left:-1px;z-index:2;width:28px;height:28px;background-color:#fff;border:1px solid #ddd;border-radius:100px;-webkit-transition-property:-webkit-transform,border,width;-o-transition-property:-o-transform,border,width;transition-property:transform,border,width}.toggle:before{position:absolute;top:3px;right:11px;font-size:13px;color:#999;text-transform:uppercase;content:"Off"}.toggle.active{background-color:#5cb85c;border:2px solid #5cb85c}.toggle.active .toggle-handle{border-color:#5cb85c;-webkit-transform:translate3d(44px,0,0);-ms-transform:translate3d(44px,0,0);transform:translate3d(44px,0,0)}.toggle.active:before{right:auto;left:15px;color:#fff;content:"On"}.toggle input[type=checkbox]{display:none}.content.fade{left:0;opacity:0;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.content.fade.in{opacity:1}.content.sliding{z-index:2;-webkit-transition:-webkit-transform .4s;-o-transition:-o-transform .4s;transition:transform .4s;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.content.sliding.left{z-index:1;-webkit-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.content.sliding.right{z-index:3;-webkit-transform:translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.navigate-left:after,.navigate-right:after,.push-left:after,.push-right:after{position:absolute;top:50%;font-size:inherit;color:#bbb;text-decoration:none;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%)}.navigate-left:after,.push-left:after{left:15px;content:'\e822'}.navigate-right:after,.push-right:after{right:15px;content:'\e826'}@font-face{font-family:Ratchicons;font-style:normal;font-weight:400;src:url(../fonts/ratchicons.eot);src:url(../fonts/ratchicons.eot?#iefix)format("embedded-opentype"),url(../fonts/ratchicons.woff)format("woff"),url(../fonts/ratchicons.ttf)format("truetype"),url(../fonts/ratchicons.svg#svgFontName)format("svg")}.icon{font-size:24px}.icon-back:before{content:'\e80a'}.icon-bars:before{content:'\e80e'}.icon-caret:before{content:'\e80f'}.icon-check:before{content:'\e810'}.icon-close:before{content:'\e811'}.icon-code:before{content:'\e812'}.icon-compose:before{content:'\e813'}.icon-download:before{content:'\e815'}.icon-edit:before{content:'\e829'}.icon-forward:before{content:'\e82a'}.icon-gear:before{content:'\e821'}.icon-home:before{content:'\e82b'}.icon-info:before{content:'\e82c'}.icon-list:before{content:'\e823'}.icon-more-vertical:before{content:'\e82e'}.icon-more:before{content:'\e82f'}.icon-pages:before{content:'\e824'}.icon-pause:before{content:'\e830'}.icon-person:before{content:'\e832'}.icon-play:before{content:'\e816'}.icon-plus:before{content:'\e817'}.icon-refresh:before{content:'\e825'}.icon-search:before{content:'\e819'}.icon-share:before{content:'\e81a'}.icon-sound:before{content:'\e827'}.icon-sound2:before{content:'\e828'}.icon-sound3:before{content:'\e80b'}.icon-sound4:before{content:'\e80c'}.icon-star-filled:before{content:'\e81b'}.icon-star:before{content:'\e81c'}.icon-stop:before{content:'\e81d'}.icon-trash:before{content:'\e81e'}.icon-up-nav:before{content:'\e81f'}.icon-up:before{content:'\e80d'}.icon-right-nav:before{content:'\e818'}.icon-right:before{content:'\e826'}.icon-down-nav:before{content:'\e814'}.icon-down:before{content:'\e820'}.icon-left-nav:before{content:'\e82d'}.icon-left:before{content:'\e822'} \ No newline at end of file diff --git a/docs/dist/js/ratchet.js b/docs/dist/js/ratchet.js index 15b21d16d..405256d89 100644 --- a/docs/dist/js/ratchet.js +++ b/docs/dist/js/ratchet.js @@ -205,6 +205,152 @@ }()); +!(function () { + 'use strict'; + + // Ratchet's layout includes fixed position headers & footers that should always + // appear before the main .content div within + // + // These fixed bars will have new content swapped in, ignoring any + // transitions (slide-in, slide-out & fade). + // + // These following selectors define which elements are transitioned with + // simple DOM replacement and are always immediate children of + var barSelectors = [ + '.bar-tab', + '.bar-nav', + '.bar-footer', + '.bar-header-secondary' + ]; + + // Other than any fixed bars, '.content' should be the only other child of body + var contentSelector = '.content'; + + // For any bar elements in `newMarkup`, either: + // * replace an existing bar elements with new content + // * add new bar elements when an existing one isn't present + // * remove any bar elements not found in `newMarkup` + var updateBars = function (newMarkup) { + for (var i = 0; i < barSelectors.length; i++) { + var selector = barSelectors[i]; + var newBar = newMarkup.querySelector(selector); + var existingBar = document.querySelector(selector); + + if (newBar) { + displayBar(newBar, existingBar); + } else if (existingBar) { + existingBar.parentNode.removeChild(existingBar); + } + } + }; + + var displayBar = function (bar, container) { + if (container) { + container.innerHTML = ''; + container.appendChild(bar); + } else { + // per Ratchet's CSS, bar elements must be the first thing in + // here we assume `.content` is an immediate child of + document.body.insertBefore(bar, document.querySelector(contentSelector)); + } + }; + + var transitionContent = function (swap, container, transition, complete) { + var enter; + var containerDirection; + var swapDirection; + + enter = /in$/.test(transition); + + if (transition === 'fade') { + container.classList.add('in'); + container.classList.add('fade'); + swap.classList.add('fade'); + } + + if (/slide/.test(transition)) { + swap.classList.add('sliding-in', enter ? 'right' : 'left'); + swap.classList.add('sliding'); + container.classList.add('sliding'); + } + + container.parentNode.insertBefore(swap, container); + + if (transition === 'fade') { + container.offsetWidth; // force reflow + container.classList.remove('in'); + var fadeContainerEnd = function () { + container.removeEventListener(window.RATCHET.getTransitionEnd, fadeContainerEnd); + swap.classList.add('in'); + swap.addEventListener(window.RATCHET.getTransitionEnd, fadeSwapEnd); + }; + var fadeSwapEnd = function () { + swap.removeEventListener(window.RATCHET.getTransitionEnd, fadeSwapEnd); + container.parentNode.removeChild(container); + swap.classList.remove('fade'); + swap.classList.remove('in'); + complete && complete(); + }; + container.addEventListener(window.RATCHET.getTransitionEnd, fadeContainerEnd); + } + + if (/slide/.test(transition)) { + var slideEnd = function () { + swap.removeEventListener(window.RATCHET.getTransitionEnd, slideEnd); + swap.classList.remove('sliding', 'sliding-in'); + swap.classList.remove(swapDirection); + container.parentNode.removeChild(container); + complete && complete(); + }; + + container.offsetWidth; // force reflow + swapDirection = enter ? 'right' : 'left'; + containerDirection = enter ? 'left' : 'right'; + container.classList.add(containerDirection); + swap.classList.remove(swapDirection); + swap.addEventListener('webkitTransitionEnd', slideEnd); + } + }; + + // `contents` can either be a string of HTML or a DOM object. + // Either way, `contents` must include: + // * bar elements (optional -- see `barSelectors`) + // * a single content element + // All as children of a single parent. + // + // For example: + //
+ //
+ //
+ //
+ //
+ var TRANSITION = function (contents, transition, complete) { + + if (typeof(contents) === 'string' || contents instanceof String) { + var div = document.createElement('div'); + div.innerHTML = contents; + contents = div.childNodes[0]; + } else { + contents = contents.cloneNode(true); + } + + if (transition) { + updateBars(contents); + + var existingContentDiv = document.querySelector(contentSelector); + var newContentDiv = contents.querySelector(contentSelector); + transitionContent(newContentDiv, existingContentDiv, + transition, complete); + } else { + document.body.innerHTML = ''; + document.body.appendChild(contents); + complete && complete(); + } + }; + + window.RATCHET.transition = TRANSITION; +}()); + /* ======================================================================== * Ratchet: push.js v2.0.2 * http://goratchet.com/components#push @@ -214,7 +360,7 @@ * Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE) * ======================================================================== */ -/* global _gaq: true */ +/* global _gaq */ !(function () { 'use strict'; @@ -236,13 +382,6 @@ fade : 'fade' }; - var bars = { - bartab : '.bar-tab', - barnav : '.bar-nav', - barfooter : '.bar-footer', - barheadersecondary : '.bar-header-secondary' - }; - var cacheReplace = function (data, updates) { PUSH.id = data.id; if (updates) { @@ -334,8 +473,6 @@ }; var popstate = function (e) { - var key; - var barElement; var activeObj; var activeDom; var direction; @@ -383,27 +520,11 @@ }); } - if (transitionFromObj.transition) { - activeObj = extendWithDom(activeObj, '.content', activeDom.cloneNode(true)); - for (key in bars) { - if (bars.hasOwnProperty(key)) { - barElement = document.querySelector(bars[key]); - if (activeObj[key]) { - swapContent(activeObj[key], barElement); - } else if (barElement) { - barElement.parentNode.removeChild(barElement); - } - } - } - } - - swapContent( - (activeObj.contents || activeDom).cloneNode(true), - document.querySelector('.content'), - transition, function () { - triggerStateChange(); - } - ); + window.RATCHET.transition(activeDom.cloneNode(true), + transitionFromObj.transition, + function () { + triggerStateChange(); + }); PUSH.id = id; @@ -415,17 +536,8 @@ // ======================= var PUSH = function (options) { - var key; var xhr = PUSH.xhr; - options.container = options.container || options.transition ? document.querySelector('.content') : document.body; - - for (key in bars) { - if (bars.hasOwnProperty(key)) { - options[key] = options[key] || document.querySelector(bars[key]); - } - } - if (xhr && xhr.readyState < 4) { xhr.onreadystatechange = noop; xhr.abort(); @@ -480,8 +592,6 @@ // ================= var success = function (xhr, options) { - var key; - var barElement; var data = parseXHR(xhr, options); if (!data.contents) { @@ -492,20 +602,7 @@ document.title = data.title; } - if (options.transition) { - for (key in bars) { - if (bars.hasOwnProperty(key)) { - barElement = document.querySelector(bars[key]); - if (data[key]) { - swapContent(data[key], barElement); - } else if (barElement) { - barElement.parentNode.removeChild(barElement); - } - } - } - } - - swapContent(data.contents, options.container, options.transition, function () { + window.RATCHET.transition(data.contents, options.transition, function () { cacheReplace({ id : options.id || +new Date(), url : data.url, @@ -516,6 +613,7 @@ triggerStateChange(); }); + if (!options.ignorePush && window._gaq) { _gaq.push(['_trackPageview']); // google analytics } @@ -532,84 +630,6 @@ // PUSH helpers // ============ - var swapContent = function (swap, container, transition, complete) { - var enter; - var containerDirection; - var swapDirection; - - if (!transition) { - if (container) { - container.innerHTML = swap.innerHTML; - } else if (swap.classList.contains('content')) { - document.body.appendChild(swap); - } else { - document.body.insertBefore(swap, document.querySelector('.content')); - } - } else { - enter = /in$/.test(transition); - - if (transition === 'fade') { - container.classList.add('in'); - container.classList.add('fade'); - swap.classList.add('fade'); - } - - if (/slide/.test(transition)) { - swap.classList.add('sliding-in', enter ? 'right' : 'left'); - swap.classList.add('sliding'); - container.classList.add('sliding'); - } - - container.parentNode.insertBefore(swap, container); - } - - if (!transition) { - if (complete) { - complete(); - } - } - - if (transition === 'fade') { - container.offsetWidth; // force reflow - container.classList.remove('in'); - var fadeContainerEnd = function () { - container.removeEventListener(window.RATCHET.getTransitionEnd, fadeContainerEnd); - swap.classList.add('in'); - swap.addEventListener(window.RATCHET.getTransitionEnd, fadeSwapEnd); - }; - var fadeSwapEnd = function () { - swap.removeEventListener(window.RATCHET.getTransitionEnd, fadeSwapEnd); - container.parentNode.removeChild(container); - swap.classList.remove('fade'); - swap.classList.remove('in'); - if (complete) { - complete(); - } - }; - container.addEventListener(window.RATCHET.getTransitionEnd, fadeContainerEnd); - - } - - if (/slide/.test(transition)) { - var slideEnd = function () { - swap.removeEventListener(window.RATCHET.getTransitionEnd, slideEnd); - swap.classList.remove('sliding', 'sliding-in'); - swap.classList.remove(swapDirection); - container.parentNode.removeChild(container); - if (complete) { - complete(); - } - }; - - container.offsetWidth; // force reflow - swapDirection = enter ? 'right' : 'left'; - containerDirection = enter ? 'left' : 'right'; - container.classList.add(containerDirection); - swap.classList.remove(swapDirection); - swap.addEventListener(window.RATCHET.getTransitionEnd, slideEnd); - } - }; - var triggerStateChange = function () { var e = new CustomEvent('push', { detail: { state: getCached(PUSH.id) }, @@ -638,29 +658,6 @@ window.location.replace(url); }; - var extendWithDom = function (obj, fragment, dom) { - var i; - var result = {}; - - for (i in obj) { - if (obj.hasOwnProperty(i)) { - result[i] = obj[i]; - } - } - - Object.keys(bars).forEach(function (key) { - var el = dom.querySelector(bars[key]); - if (el) { - el.parentNode.removeChild(el); - } - result[key] = el; - }); - - result.contents = dom.querySelector(fragment); - - return result; - }; - var parseXHR = function (xhr, options) { var head; var body; @@ -687,11 +684,7 @@ var text = 'innerText' in data.title ? 'innerText' : 'textContent'; data.title = data.title && data.title[text].trim(); - if (options.transition) { - data = extendWithDom(data, '.content', body); - } else { - data.contents = body; - } + data.contents = body; return data; }; diff --git a/docs/dist/js/ratchet.min.js b/docs/dist/js/ratchet.min.js index 8680135ec..2f1e61776 100644 --- a/docs/dist/js/ratchet.min.js +++ b/docs/dist/js/ratchet.min.js @@ -7,4 +7,4 @@ * v2.0.2 designed by @connors. * ===================================================== */ -!function(){"use strict";window.CustomEvent||(window.CustomEvent=function(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,b.bubbles,b.cancelable,b.detail),c}),"undefined"==typeof window.RATCHET&&(window.RATCHET={}),window.RATCHET.getBrowserCapabilities=function(){var a=window.getComputedStyle(document.documentElement,""),b=(Array.prototype.slice.call(a).join("").match(/-(moz|webkit|ms)-/)||""===a.OLink&&["","o"])[1];return{prefix:"-"+b+"-",transform:b[0].toUpperCase()+b.substr(1)+"Transform"}}(),window.RATCHET.getTransitionEnd=function(){var a=document.createElement("ratchet"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return b[c];return b.transition}()}(),!function(){"use strict";var a=new CustomEvent("modalOpen",{bubbles:!0,cancelable:!0}),b=new CustomEvent("modalClose",{bubbles:!0,cancelable:!0}),c=function(a){for(var b,c=document.querySelectorAll("a");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a},d=function(a){var b=c(a.target);return b&&b.hash?document.querySelector(b.hash):void 0};window.addEventListener("touchend",function(c){var e=d(c);if(e&&e.classList.contains("modal")){var f=a;e.classList.contains("active")&&(f=b),e.dispatchEvent(f),e.classList.toggle("active")}c.preventDefault()})}(),!function(){"use strict";var a,b=function(a){for(var b,c=document.querySelectorAll("a");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a},c=function(){a.style.display="none",a.removeEventListener(window.RATCHET.getTransitionEnd,c)},d=function(){var b=document.createElement("div");return b.classList.add("backdrop"),b.addEventListener("touchend",function(){a.addEventListener(window.RATCHET.getTransitionEnd,c),a.classList.remove("visible"),a.parentNode.removeChild(d)}),b}(),e=function(c){var d=b(c.target);if(d&&d.hash&&!(d.hash.indexOf("/")>0)){try{a=document.querySelector(d.hash)}catch(e){a=null}if(null!==a&&a&&a.classList.contains("popover"))return a}},f=function(a){var b=e(a);b&&(b.style.display="block",b.offsetHeight,b.classList.add("visible"),b.parentNode.appendChild(d))};window.addEventListener("touchend",f)}(),!function(){"use strict";function a(){f[p.id]=document.body.cloneNode(!0)}var b,c=function(){},d=20,e=sessionStorage,f={},g={"slide-in":"slide-out","slide-out":"slide-in",fade:"fade"},h={bartab:".bar-tab",barnav:".bar-nav",barfooter:".bar-footer",barheadersecondary:".bar-header-secondary"},i=function(a,b){p.id=a.id,b&&(a=l(a.id)),e[a.id]=JSON.stringify(a),window.history.replaceState(a.id,a.title,a.url)},j=function(){var a=p.id,b=JSON.parse(e.cacheForwardStack||"[]"),c=JSON.parse(e.cacheBackStack||"[]");for(c.push(a);b.length;)delete e[b.shift()];for(;c.length>d;)delete e[c.shift()];l(p.id).url&&window.history.pushState(null,"",l(p.id).url),e.cacheForwardStack=JSON.stringify(b),e.cacheBackStack=JSON.stringify(c)},k=function(a,b){var c="forward"===b,d=JSON.parse(e.cacheForwardStack||"[]"),f=JSON.parse(e.cacheBackStack||"[]"),g=c?f:d,h=c?d:f;p.id&&g.push(p.id),h.pop(),e.cacheForwardStack=JSON.stringify(d),e.cacheBackStack=JSON.stringify(f)},l=function(a){return JSON.parse(e[a]||null)||{}},m=function(a){var c=u(a.target);if(!(!c||a.which>1||a.metaKey||a.ctrlKey||b||location.protocol!==c.protocol||location.host!==c.host||!c.hash&&/#/.test(c.href)||c.hash&&c.href.replace(c.hash,"")===location.href.replace(location.hash,"")||"push"===c.getAttribute("data-ignore")))return c},n=function(a){var b=m(a);b&&(a.preventDefault(),p({url:b.href,hash:b.hash,timeout:b.getAttribute("data-timeout"),transition:b.getAttribute("data-transition")}))},o=function(a){var b,c,d,i,j,m,n,o,q=a.state;if(q&&e[q]){if(j=p.id]*>([\s\S.]*)<\/head>/i)[0],d.innerHTML=f.match(/]*>([\s\S.]*)<\/body>/i)[0]):(c=d=document.createElement("div"),c.innerHTML=f),e.title=c.querySelector("title")||document.querySelector("title");var g="innerText"in e.title?"innerText":"textContent";return e.title=e.title&&e.title[g].trim(),b.transition?e=w(e,".content",d):e.contents=d,e};window.addEventListener("touchstart",function(){b=!1}),window.addEventListener("touchmove",function(){b=!0}),window.addEventListener("touchend",n),window.addEventListener("click",function(a){m(a)&&a.preventDefault()}),window.addEventListener("popstate",o),window.PUSH=p,window.RATCHET.push=p}(),!function(){"use strict";var a=function(a){for(var b,c=document.querySelectorAll(".segmented-control .control-item");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a};window.addEventListener("touchend",function(b){var c,d,e,f=a(b.target),g="active",h="."+g;if(f&&(c=f.parentNode.querySelector(h),c&&c.classList.remove(g),f.classList.add(g),f.hash&&(e=document.querySelector(f.hash)))){d=e.parentNode.querySelectorAll(h);for(var i=0;i .slide-group");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a},r=function(){var a=c.style[p].match(/translate3d\(([^,]*)/),b=a?a[1]:0;return parseInt(b,10)},s=function(a){var b=a?0>d?"ceil":"floor":"round";k=Math[b](r()/(m/c.children.length)),k+=a,k=Math.min(k,0),k=Math.max(-(c.children.length-1),k)},t=function(f){if(c=q(f.target)){var k=c.querySelector(".slide");m=k.offsetWidth*c.children.length,l=void 0,j=c.offsetWidth,i=1,g=-(c.children.length-1),h=+new Date,a=f.touches[0].pageX,b=f.touches[0].pageY,d=0,e=0,s(0),c.style[o+"transition-duration"]=0}},u=function(h){h.touches.length>1||!c||(n||(a+=h.touches[0].pageX-a-1),d=h.touches[0].pageX-a,e=h.touches[0].pageY-b,a=h.touches[0].pageX,b=h.touches[0].pageY,"undefined"==typeof l&&n&&(l=Math.abs(e)>Math.abs(d)),l||(f=d/i+r(),h.preventDefault(),i=0===k&&d>0?a/j+1.25:k===g&&0>d?Math.abs(a)/j+1.25:1,c.style[p]="translate3d("+f+"px,0,0)",n=!0))},v=function(a){c&&!l&&(n=!1,s(+new Date-h<1e3&&Math.abs(d)>15?0>d?-1:1:0),f=k*j,c.style[o+"transition-duration"]=".2s",c.style[p]="translate3d("+f+"px,0,0)",a=new CustomEvent("slide",{detail:{slideNumber:Math.abs(k)},bubbles:!0,cancelable:!0}),c.parentNode.dispatchEvent(a))};window.addEventListener("touchstart",t),window.addEventListener("touchmove",u),window.addEventListener("touchend",v)}(),!function(){"use strict";var a={},b=!1,c=!1,d=!1,e=window.RATCHET.getBrowserCapabilities.transform,f=function(a){for(var b,c=document.querySelectorAll(".toggle");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a};window.addEventListener("touchstart",function(c){if(c=c.originalEvent||c,d=f(c.target)){var e=d.querySelector(".toggle-handle"),g=d.clientWidth,h=e.clientWidth,i=d.classList.contains("active")?g-h:0;a={pageX:c.touches[0].pageX-i,pageY:c.touches[0].pageY},b=!1}}),window.addEventListener("touchmove",function(f){if(f=f.originalEvent||f,!(f.touches.length>1)&&d){var g=d.querySelector(".toggle-handle"),h=f.touches[0],i=d.clientWidth,j=g.clientWidth,k=i-j;if(b=!0,c=h.pageX-a.pageX,!(Math.abs(c)c)return g.style[e]="translate3d(0,0,0)";if(c>k)return g.style[e]="translate3d("+k+"px,0,0)";g.style[e]="translate3d("+c+"px,0,0)",d.classList[c>i/2-j/2?"add":"remove"]("active")}}}),window.addEventListener("touchend",function(a){if(d){var f=d.querySelector(".toggle-handle"),g=d.clientWidth,h=f.clientWidth,i=g-h,j=!b&&!d.classList.contains("active")||b&&c>g/2-h/2;f.style[e]=j?"translate3d("+i+"px,0,0)":"translate3d(0,0,0)",d.classList[j?"add":"remove"]("active"),a=new CustomEvent("toggle",{detail:{isActive:j},bubbles:!0,cancelable:!0}),d.dispatchEvent(a),b=!1,d=!1}})}(); \ No newline at end of file +!function(){"use strict";window.CustomEvent||(window.CustomEvent=function(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,b.bubbles,b.cancelable,b.detail),c}),"undefined"==typeof window.RATCHET&&(window.RATCHET={}),window.RATCHET.getBrowserCapabilities=function(){var a=window.getComputedStyle(document.documentElement,""),b=(Array.prototype.slice.call(a).join("").match(/-(moz|webkit|ms)-/)||""===a.OLink&&["","o"])[1];return{prefix:"-"+b+"-",transform:b[0].toUpperCase()+b.substr(1)+"Transform"}}(),window.RATCHET.getTransitionEnd=function(){var a=document.createElement("ratchet"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return b[c];return b.transition}()}(),!function(){"use strict";var a=new CustomEvent("modalOpen",{bubbles:!0,cancelable:!0}),b=new CustomEvent("modalClose",{bubbles:!0,cancelable:!0}),c=function(a){for(var b,c=document.querySelectorAll("a");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a},d=function(a){var b=c(a.target);return b&&b.hash?document.querySelector(b.hash):void 0};window.addEventListener("touchend",function(c){var e=d(c);if(e&&e.classList.contains("modal")){var f=a;e.classList.contains("active")&&(f=b),e.dispatchEvent(f),e.classList.toggle("active")}c.preventDefault()})}(),!function(){"use strict";var a,b=function(a){for(var b,c=document.querySelectorAll("a");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a},c=function(){a.style.display="none",a.removeEventListener(window.RATCHET.getTransitionEnd,c)},d=function(){var b=document.createElement("div");return b.classList.add("backdrop"),b.addEventListener("touchend",function(){a.addEventListener(window.RATCHET.getTransitionEnd,c),a.classList.remove("visible"),a.parentNode.removeChild(d)}),b}(),e=function(c){var d=b(c.target);if(d&&d.hash&&!(d.hash.indexOf("/")>0)){try{a=document.querySelector(d.hash)}catch(e){a=null}if(null!==a&&a&&a.classList.contains("popover"))return a}},f=function(a){var b=e(a);b&&(b.style.display="block",b.offsetHeight,b.classList.add("visible"),b.parentNode.appendChild(d))};window.addEventListener("touchend",f)}(),!function(){"use strict";var a=[".bar-tab",".bar-nav",".bar-footer",".bar-header-secondary"],b=".content",c=function(b){for(var c=0;cd;)delete e[c.shift()];k(o.id).url&&window.history.pushState(null,"",k(o.id).url),e.cacheForwardStack=JSON.stringify(b),e.cacheBackStack=JSON.stringify(c)},j=function(a,b){var c="forward"===b,d=JSON.parse(e.cacheForwardStack||"[]"),f=JSON.parse(e.cacheBackStack||"[]"),g=c?f:d,h=c?d:f;o.id&&g.push(o.id),h.pop(),e.cacheForwardStack=JSON.stringify(d),e.cacheBackStack=JSON.stringify(f)},k=function(a){return JSON.parse(e[a]||null)||{}},l=function(a){var c=s(a.target);if(!(!c||a.which>1||a.metaKey||a.ctrlKey||b||location.protocol!==c.protocol||location.host!==c.host||!c.hash&&/#/.test(c.href)||c.hash&&c.href.replace(c.hash,"")===location.href.replace(location.hash,"")||"push"===c.getAttribute("data-ignore")))return c},m=function(a){var b=l(a);b&&(a.preventDefault(),o({url:b.href,hash:b.hash,timeout:b.getAttribute("data-timeout"),transition:b.getAttribute("data-transition")}))},n=function(a){var b,c,d,h,i,l,m=a.state;if(m&&e[m]){if(d=o.id]*>([\s\S.]*)<\/head>/i)[0],d.innerHTML=f.match(/]*>([\s\S.]*)<\/body>/i)[0]):(c=d=document.createElement("div"),c.innerHTML=f),e.title=c.querySelector("title")||document.querySelector("title");var g="innerText"in e.title?"innerText":"textContent";return e.title=e.title&&e.title[g].trim(),e.contents=d,e};window.addEventListener("touchstart",function(){b=!1}),window.addEventListener("touchmove",function(){b=!0}),window.addEventListener("touchend",m),window.addEventListener("click",function(a){l(a)&&a.preventDefault()}),window.addEventListener("popstate",n),window.PUSH=o,window.RATCHET.push=o}(),!function(){"use strict";var a=function(a){for(var b,c=document.querySelectorAll(".segmented-control .control-item");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a};window.addEventListener("touchend",function(b){var c,d,e,f=a(b.target),g="active",h="."+g;if(f&&(c=f.parentNode.querySelector(h),c&&c.classList.remove(g),f.classList.add(g),f.hash&&(e=document.querySelector(f.hash)))){d=e.parentNode.querySelectorAll(h);for(var i=0;i .slide-group");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a},r=function(){var a=c.style[p].match(/translate3d\(([^,]*)/),b=a?a[1]:0;return parseInt(b,10)},s=function(a){var b=a?0>d?"ceil":"floor":"round";k=Math[b](r()/(m/c.children.length)),k+=a,k=Math.min(k,0),k=Math.max(-(c.children.length-1),k)},t=function(f){if(c=q(f.target)){var k=c.querySelector(".slide");m=k.offsetWidth*c.children.length,l=void 0,j=c.offsetWidth,i=1,g=-(c.children.length-1),h=+new Date,a=f.touches[0].pageX,b=f.touches[0].pageY,d=0,e=0,s(0),c.style[o+"transition-duration"]=0}},u=function(h){h.touches.length>1||!c||(n||(a+=h.touches[0].pageX-a-1),d=h.touches[0].pageX-a,e=h.touches[0].pageY-b,a=h.touches[0].pageX,b=h.touches[0].pageY,"undefined"==typeof l&&n&&(l=Math.abs(e)>Math.abs(d)),l||(f=d/i+r(),h.preventDefault(),i=0===k&&d>0?a/j+1.25:k===g&&0>d?Math.abs(a)/j+1.25:1,c.style[p]="translate3d("+f+"px,0,0)",n=!0))},v=function(a){c&&!l&&(n=!1,s(+new Date-h<1e3&&Math.abs(d)>15?0>d?-1:1:0),f=k*j,c.style[o+"transition-duration"]=".2s",c.style[p]="translate3d("+f+"px,0,0)",a=new CustomEvent("slide",{detail:{slideNumber:Math.abs(k)},bubbles:!0,cancelable:!0}),c.parentNode.dispatchEvent(a))};window.addEventListener("touchstart",t),window.addEventListener("touchmove",u),window.addEventListener("touchend",v)}(),!function(){"use strict";var a={},b=!1,c=!1,d=!1,e=window.RATCHET.getBrowserCapabilities.transform,f=function(a){for(var b,c=document.querySelectorAll(".toggle");a&&a!==document;a=a.parentNode)for(b=c.length;b--;)if(c[b]===a)return a};window.addEventListener("touchstart",function(c){if(c=c.originalEvent||c,d=f(c.target)){var e=d.querySelector(".toggle-handle"),g=d.clientWidth,h=e.clientWidth,i=d.classList.contains("active")?g-h:0;a={pageX:c.touches[0].pageX-i,pageY:c.touches[0].pageY},b=!1}}),window.addEventListener("touchmove",function(f){if(f=f.originalEvent||f,!(f.touches.length>1)&&d){var g=d.querySelector(".toggle-handle"),h=f.touches[0],i=d.clientWidth,j=g.clientWidth,k=i-j;if(b=!0,c=h.pageX-a.pageX,!(Math.abs(c)c)return g.style[e]="translate3d(0,0,0)";if(c>k)return g.style[e]="translate3d("+k+"px,0,0)";g.style[e]="translate3d("+c+"px,0,0)",d.classList[c>i/2-j/2?"add":"remove"]("active")}}}),window.addEventListener("touchend",function(a){if(d){var f=d.querySelector(".toggle-handle"),g=d.clientWidth,h=f.clientWidth,i=g-h,j=!b&&!d.classList.contains("active")||b&&c>g/2-h/2;f.style[e]=j?"translate3d("+i+"px,0,0)":"translate3d(0,0,0)",d.classList[j?"add":"remove"]("active"),a=new CustomEvent("toggle",{detail:{isActive:j},bubbles:!0,cancelable:!0}),d.dispatchEvent(a),b=!1,d=!1}})}(); \ No newline at end of file diff --git a/js/push.js b/js/push.js index 998116657..a3a54511e 100644 --- a/js/push.js +++ b/js/push.js @@ -7,7 +7,7 @@ * Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE) * ======================================================================== */ -/* global _gaq: true */ +/* global _gaq */ !(function () { 'use strict'; @@ -29,13 +29,6 @@ fade : 'fade' }; - var bars = { - bartab : '.bar-tab', - barnav : '.bar-nav', - barfooter : '.bar-footer', - barheadersecondary : '.bar-header-secondary' - }; - var cacheReplace = function (data, updates) { PUSH.id = data.id; if (updates) { @@ -127,8 +120,6 @@ }; var popstate = function (e) { - var key; - var barElement; var activeObj; var activeDom; var direction; @@ -176,27 +167,11 @@ }); } - if (transitionFromObj.transition) { - activeObj = extendWithDom(activeObj, '.content', activeDom.cloneNode(true)); - for (key in bars) { - if (bars.hasOwnProperty(key)) { - barElement = document.querySelector(bars[key]); - if (activeObj[key]) { - swapContent(activeObj[key], barElement); - } else if (barElement) { - barElement.parentNode.removeChild(barElement); - } - } - } - } - - swapContent( - (activeObj.contents || activeDom).cloneNode(true), - document.querySelector('.content'), - transition, function () { - triggerStateChange(); - } - ); + window.RATCHET.transition(activeDom.cloneNode(true), + transitionFromObj.transition, + function () { + triggerStateChange(); + }); PUSH.id = id; @@ -208,17 +183,8 @@ // ======================= var PUSH = function (options) { - var key; var xhr = PUSH.xhr; - options.container = options.container || options.transition ? document.querySelector('.content') : document.body; - - for (key in bars) { - if (bars.hasOwnProperty(key)) { - options[key] = options[key] || document.querySelector(bars[key]); - } - } - if (xhr && xhr.readyState < 4) { xhr.onreadystatechange = noop; xhr.abort(); @@ -273,8 +239,6 @@ // ================= var success = function (xhr, options) { - var key; - var barElement; var data = parseXHR(xhr, options); if (!data.contents) { @@ -285,20 +249,7 @@ document.title = data.title; } - if (options.transition) { - for (key in bars) { - if (bars.hasOwnProperty(key)) { - barElement = document.querySelector(bars[key]); - if (data[key]) { - swapContent(data[key], barElement); - } else if (barElement) { - barElement.parentNode.removeChild(barElement); - } - } - } - } - - swapContent(data.contents, options.container, options.transition, function () { + window.RATCHET.transition(data.contents, options.transition, function () { cacheReplace({ id : options.id || +new Date(), url : data.url, @@ -309,6 +260,7 @@ triggerStateChange(); }); + if (!options.ignorePush && window._gaq) { _gaq.push(['_trackPageview']); // google analytics } @@ -325,84 +277,6 @@ // PUSH helpers // ============ - var swapContent = function (swap, container, transition, complete) { - var enter; - var containerDirection; - var swapDirection; - - if (!transition) { - if (container) { - container.innerHTML = swap.innerHTML; - } else if (swap.classList.contains('content')) { - document.body.appendChild(swap); - } else { - document.body.insertBefore(swap, document.querySelector('.content')); - } - } else { - enter = /in$/.test(transition); - - if (transition === 'fade') { - container.classList.add('in'); - container.classList.add('fade'); - swap.classList.add('fade'); - } - - if (/slide/.test(transition)) { - swap.classList.add('sliding-in', enter ? 'right' : 'left'); - swap.classList.add('sliding'); - container.classList.add('sliding'); - } - - container.parentNode.insertBefore(swap, container); - } - - if (!transition) { - if (complete) { - complete(); - } - } - - if (transition === 'fade') { - container.offsetWidth; // force reflow - container.classList.remove('in'); - var fadeContainerEnd = function () { - container.removeEventListener(window.RATCHET.getTransitionEnd, fadeContainerEnd); - swap.classList.add('in'); - swap.addEventListener(window.RATCHET.getTransitionEnd, fadeSwapEnd); - }; - var fadeSwapEnd = function () { - swap.removeEventListener(window.RATCHET.getTransitionEnd, fadeSwapEnd); - container.parentNode.removeChild(container); - swap.classList.remove('fade'); - swap.classList.remove('in'); - if (complete) { - complete(); - } - }; - container.addEventListener(window.RATCHET.getTransitionEnd, fadeContainerEnd); - - } - - if (/slide/.test(transition)) { - var slideEnd = function () { - swap.removeEventListener(window.RATCHET.getTransitionEnd, slideEnd); - swap.classList.remove('sliding', 'sliding-in'); - swap.classList.remove(swapDirection); - container.parentNode.removeChild(container); - if (complete) { - complete(); - } - }; - - container.offsetWidth; // force reflow - swapDirection = enter ? 'right' : 'left'; - containerDirection = enter ? 'left' : 'right'; - container.classList.add(containerDirection); - swap.classList.remove(swapDirection); - swap.addEventListener(window.RATCHET.getTransitionEnd, slideEnd); - } - }; - var triggerStateChange = function () { var e = new CustomEvent('push', { detail: { state: getCached(PUSH.id) }, @@ -431,29 +305,6 @@ window.location.replace(url); }; - var extendWithDom = function (obj, fragment, dom) { - var i; - var result = {}; - - for (i in obj) { - if (obj.hasOwnProperty(i)) { - result[i] = obj[i]; - } - } - - Object.keys(bars).forEach(function (key) { - var el = dom.querySelector(bars[key]); - if (el) { - el.parentNode.removeChild(el); - } - result[key] = el; - }); - - result.contents = dom.querySelector(fragment); - - return result; - }; - var parseXHR = function (xhr, options) { var head; var body; @@ -480,11 +331,7 @@ var text = 'innerText' in data.title ? 'innerText' : 'textContent'; data.title = data.title && data.title[text].trim(); - if (options.transition) { - data = extendWithDom(data, '.content', body); - } else { - data.contents = body; - } + data.contents = body; return data; }; diff --git a/js/transitions.js b/js/transitions.js new file mode 100644 index 000000000..9b8fcc11e --- /dev/null +++ b/js/transitions.js @@ -0,0 +1,145 @@ +!(function () { + 'use strict'; + + // Ratchet's layout includes fixed position headers & footers that should always + // appear before the main .content div within + // + // These fixed bars will have new content swapped in, ignoring any + // transitions (slide-in, slide-out & fade). + // + // These following selectors define which elements are transitioned with + // simple DOM replacement and are always immediate children of + var barSelectors = [ + '.bar-tab', + '.bar-nav', + '.bar-footer', + '.bar-header-secondary' + ]; + + // Other than any fixed bars, '.content' should be the only other child of body + var contentSelector = '.content'; + + // For any bar elements in `newMarkup`, either: + // * replace an existing bar elements with new content + // * add new bar elements when an existing one isn't present + // * remove any bar elements not found in `newMarkup` + var updateBars = function (newMarkup) { + for (var i = 0; i < barSelectors.length; i++) { + var selector = barSelectors[i]; + var newBar = newMarkup.querySelector(selector); + var existingBar = document.querySelector(selector); + + if (newBar) { + displayBar(newBar, existingBar); + } else if (existingBar) { + existingBar.parentNode.removeChild(existingBar); + } + } + }; + + var displayBar = function (bar, container) { + if (container) { + container.innerHTML = ''; + container.appendChild(bar); + } else { + // per Ratchet's CSS, bar elements must be the first thing in + // here we assume `.content` is an immediate child of + document.body.insertBefore(bar, document.querySelector(contentSelector)); + } + }; + + var transitionContent = function (swap, container, transition, complete) { + var enter; + var containerDirection; + var swapDirection; + + enter = /in$/.test(transition); + + if (transition === 'fade') { + container.classList.add('in'); + container.classList.add('fade'); + swap.classList.add('fade'); + } + + if (/slide/.test(transition)) { + swap.classList.add('sliding-in', enter ? 'right' : 'left'); + swap.classList.add('sliding'); + container.classList.add('sliding'); + } + + container.parentNode.insertBefore(swap, container); + + if (transition === 'fade') { + container.offsetWidth; // force reflow + container.classList.remove('in'); + var fadeContainerEnd = function () { + container.removeEventListener(window.RATCHET.getTransitionEnd, fadeContainerEnd); + swap.classList.add('in'); + swap.addEventListener(window.RATCHET.getTransitionEnd, fadeSwapEnd); + }; + var fadeSwapEnd = function () { + swap.removeEventListener(window.RATCHET.getTransitionEnd, fadeSwapEnd); + container.parentNode.removeChild(container); + swap.classList.remove('fade'); + swap.classList.remove('in'); + complete && complete(); + }; + container.addEventListener(window.RATCHET.getTransitionEnd, fadeContainerEnd); + } + + if (/slide/.test(transition)) { + var slideEnd = function () { + swap.removeEventListener(window.RATCHET.getTransitionEnd, slideEnd); + swap.classList.remove('sliding', 'sliding-in'); + swap.classList.remove(swapDirection); + container.parentNode.removeChild(container); + complete && complete(); + }; + + container.offsetWidth; // force reflow + swapDirection = enter ? 'right' : 'left'; + containerDirection = enter ? 'left' : 'right'; + container.classList.add(containerDirection); + swap.classList.remove(swapDirection); + swap.addEventListener('webkitTransitionEnd', slideEnd); + } + }; + + // `contents` can either be a string of HTML or a DOM object. + // Either way, `contents` must include: + // * bar elements (optional -- see `barSelectors`) + // * a single content element + // All as children of a single parent. + // + // For example: + //
+ //
+ //
+ //
+ //
+ var TRANSITION = function (contents, transition, complete) { + + if (typeof(contents) === 'string' || contents instanceof String) { + var div = document.createElement('div'); + div.innerHTML = contents; + contents = div.childNodes[0]; + } else { + contents = contents.cloneNode(true); + } + + if (transition) { + updateBars(contents); + + var existingContentDiv = document.querySelector(contentSelector); + var newContentDiv = contents.querySelector(contentSelector); + transitionContent(newContentDiv, existingContentDiv, + transition, complete); + } else { + document.body.innerHTML = ''; + document.body.appendChild(contents); + complete && complete(); + } + }; + + window.RATCHET.transition = TRANSITION; +}());