From 220544537d89b78bde5e50be823ead3a70bf0673 Mon Sep 17 00:00:00 2001 From: George Bratsos Date: Fri, 26 Jun 2015 15:58:01 +0300 Subject: [PATCH] Packaged all dependencies, used html5 boilerplate. --- .gitignore | 1 + README.md | 7 +- browserconfig.xml | 12 + css/floativ.css | 4 +- css/jquery.mCustomScrollbar.css | 1272 --------- css/normalize.min.css | 1 + css/styles.css | 326 +++ img/apple-touch-icon.png | Bin 0 -> 3959 bytes img/favicon.ico | Bin 0 -> 766 bytes index.html | 126 +- js/jquery.mCustomScrollbar.js | 2368 ----------------- js/script.js | 1 + .../modernizr-2.8.3-respond-1.4.2.min.js | 11 + package.json | 47 +- robots.txt | 5 + 15 files changed, 470 insertions(+), 3711 deletions(-) create mode 100644 .gitignore create mode 100644 browserconfig.xml delete mode 100644 css/jquery.mCustomScrollbar.css create mode 100644 css/normalize.min.css create mode 100644 css/styles.css create mode 100644 img/apple-touch-icon.png create mode 100644 img/favicon.ico delete mode 100644 js/jquery.mCustomScrollbar.js create mode 100644 js/script.js create mode 100644 js/vendor/modernizr-2.8.3-respond-1.4.2.min.js create mode 100644 robots.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dbf0821 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/* \ No newline at end of file diff --git a/README.md b/README.md index d7de858..39a9135 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,12 @@ description will be added soon - refactor javascript so that it becomes a library/object that can be customized - have variables that can be initialized by user input - add events (?) -- remove dependencies or create a npm package to include them - refactor class and id names -- add support for zurb +- add Zurb Foundation's template +- add Bootstrap' template - create git-site for the library - replace lorem ipsum text with proper readme/guidelines - add support for most browsers -- use latest javascript dependencies - make it responsive or at least adaptive -- replace images (plus, minus) with html/css (buttons maybe) +- Find and add https://github.com/rochal/jQuery-slimScroll/ npm package - add tests (?) diff --git a/browserconfig.xml b/browserconfig.xml new file mode 100644 index 0000000..46de5d3 --- /dev/null +++ b/browserconfig.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/css/floativ.css b/css/floativ.css index 85577f3..3941a43 100644 --- a/css/floativ.css +++ b/css/floativ.css @@ -10,7 +10,7 @@ .floativ-container { background: #fff; box-shadow: 0 0 12px #A6A5A6; - position: relative + position: relative; overflow: auto; margin: auto; } @@ -34,4 +34,4 @@ .floativ-body { margin-left: 0!important; -} +} \ No newline at end of file diff --git a/css/jquery.mCustomScrollbar.css b/css/jquery.mCustomScrollbar.css deleted file mode 100644 index 51b6598..0000000 --- a/css/jquery.mCustomScrollbar.css +++ /dev/null @@ -1,1272 +0,0 @@ -/* -== malihu jquery custom scrollbar plugin == -Plugin URI: http://manos.malihu.gr/jquery-custom-content-scroller -*/ - - - -/* -CONTENTS: - 1. BASIC STYLE - Plugin's basic/essential CSS properties (normally, should not be edited). - 2. VERTICAL SCROLLBAR - Positioning and dimensions of vertical scrollbar. - 3. HORIZONTAL SCROLLBAR - Positioning and dimensions of horizontal scrollbar. - 4. VERTICAL AND HORIZONTAL SCROLLBARS - Positioning and dimensions of 2-axis scrollbars. - 5. TRANSITIONS - CSS3 transitions for hover events, auto-expanded and auto-hidden scrollbars. - 6. SCROLLBAR COLORS, OPACITY AND BACKGROUNDS - 6.1 THEMES - Scrollbar colors, opacity, dimensions, backgrounds etc. via ready-to-use themes. -*/ - - - -/* ------------------------------------------------------------------------------------------------------------------------- -1. BASIC STYLE ------------------------------------------------------------------------------------------------------------------------- -*/ - - .mCustomScrollbar{ -ms-touch-action: none; touch-action: none; /* MSPointer events - direct all pointer events to js */ } - .mCustomScrollbar.mCS_no_scrollbar, .mCustomScrollbar.mCS_touch_action{ -ms-touch-action: auto; touch-action: auto; } - - .mCustomScrollBox{ /* contains plugin's markup */ - position: relative; - overflow: hidden; - height: 100%; - max-width: 100%; - outline: none; - direction: ltr; - } - - .mCSB_container{ /* contains the original content */ - overflow: hidden; - width: auto; - height: auto; - } - - - -/* ------------------------------------------------------------------------------------------------------------------------- -2. VERTICAL SCROLLBAR -y-axis ------------------------------------------------------------------------------------------------------------------------- -*/ - - .mCSB_inside > .mCSB_container{ margin-right: 30px; } - - .mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{ margin-right: 0; } /* non-visible scrollbar */ - - .mCS-dir-rtl > .mCSB_inside > .mCSB_container{ /* RTL direction/left-side scrollbar */ - margin-right: 0; - margin-left: 30px; - } - - .mCS-dir-rtl > .mCSB_inside > .mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{ margin-left: 0; } /* RTL direction/left-side scrollbar */ - - .mCSB_scrollTools{ /* contains scrollbar markup (draggable element, dragger rail, buttons etc.) */ - position: absolute; - width: 16px; - height: auto; - left: auto; - top: 0; - right: 0; - bottom: 0; - } - - .mCSB_outside + .mCSB_scrollTools{ right: -26px; } /* scrollbar position: outside */ - - .mCS-dir-rtl > .mCSB_inside > .mCSB_scrollTools, - .mCS-dir-rtl > .mCSB_outside + .mCSB_scrollTools{ /* RTL direction/left-side scrollbar */ - right: auto; - left: 0; - } - - .mCS-dir-rtl > .mCSB_outside + .mCSB_scrollTools{ left: -26px; } /* RTL direction/left-side scrollbar (scrollbar position: outside) */ - - .mCSB_scrollTools .mCSB_draggerContainer{ /* contains the draggable element and dragger rail markup */ - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - height: auto; - } - - .mCSB_scrollTools a + .mCSB_draggerContainer{ margin: 20px 0; } - - .mCSB_scrollTools .mCSB_draggerRail{ - width: 2px; - height: 100%; - margin: 0 auto; - -webkit-border-radius: 16px; -moz-border-radius: 16px; border-radius: 16px; - } - - .mCSB_scrollTools .mCSB_dragger{ /* the draggable element */ - cursor: pointer; - width: 100%; - height: 30px; /* minimum dragger height */ - z-index: 1; - } - - .mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ /* the dragger element */ - position: relative; - width: 4px; - height: 100%; - margin: 0 auto; - -webkit-border-radius: 16px; -moz-border-radius: 16px; border-radius: 16px; - text-align: center; - } - - .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar, - .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{ width: 12px; /* auto-expanded scrollbar */ } - - .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, - .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{ width: 8px; /* auto-expanded scrollbar */ } - - .mCSB_scrollTools .mCSB_buttonUp, - .mCSB_scrollTools .mCSB_buttonDown{ - display: block; - position: absolute; - height: 20px; - width: 100%; - overflow: hidden; - margin: 0 auto; - cursor: pointer; - } - - .mCSB_scrollTools .mCSB_buttonDown{ bottom: 0; } - - - -/* ------------------------------------------------------------------------------------------------------------------------- -3. HORIZONTAL SCROLLBAR -x-axis ------------------------------------------------------------------------------------------------------------------------- -*/ - - .mCSB_horizontal.mCSB_inside > .mCSB_container{ - margin-right: 0; - margin-bottom: 30px; - } - - .mCSB_horizontal.mCSB_outside > .mCSB_container{ min-height: 100%; } - - .mCSB_horizontal > .mCSB_container.mCS_no_scrollbar_x.mCS_x_hidden{ margin-bottom: 0; } /* non-visible scrollbar */ - - .mCSB_scrollTools.mCSB_scrollTools_horizontal{ - width: auto; - height: 16px; - top: auto; - right: 0; - bottom: 0; - left: 0; - } - - .mCustomScrollBox + .mCSB_scrollTools.mCSB_scrollTools_horizontal, - .mCustomScrollBox + .mCSB_scrollTools + .mCSB_scrollTools.mCSB_scrollTools_horizontal{ bottom: -26px; } /* scrollbar position: outside */ - - .mCSB_scrollTools.mCSB_scrollTools_horizontal a + .mCSB_draggerContainer{ margin: 0 20px; } - - .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_draggerRail{ - width: 100%; - height: 2px; - margin: 7px 0; - } - - .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger{ - width: 30px; /* minimum dragger width */ - height: 100%; - left: 0; - } - - .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{ - width: 100%; - height: 4px; - margin: 6px auto; - } - - .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar, - .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{ - height: 12px; /* auto-expanded scrollbar */ - margin: 2px auto; - } - - .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, - .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{ - height: 8px; /* auto-expanded scrollbar */ - margin: 4px 0; - } - - .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft, - .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{ - display: block; - position: absolute; - width: 20px; - height: 100%; - overflow: hidden; - margin: 0 auto; - cursor: pointer; - } - - .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft{ left: 0; } - - .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{ right: 0; } - - - -/* ------------------------------------------------------------------------------------------------------------------------- -4. VERTICAL AND HORIZONTAL SCROLLBARS -yx-axis ------------------------------------------------------------------------------------------------------------------------- -*/ - - .mCSB_container_wrapper{ - position: absolute; - height: auto; - width: auto; - overflow: hidden; - top: 0; - left: 0; - right: 0; - bottom: 0; - margin-right: 30px; - margin-bottom: 30px; - } - - .mCSB_container_wrapper > .mCSB_container{ - padding-right: 30px; - padding-bottom: 30px; - } - - .mCSB_vertical_horizontal > .mCSB_scrollTools.mCSB_scrollTools_vertical{ bottom: 20px; } - - .mCSB_vertical_horizontal > .mCSB_scrollTools.mCSB_scrollTools_horizontal{ right: 20px; } - - /* non-visible horizontal scrollbar */ - .mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden + .mCSB_scrollTools.mCSB_scrollTools_vertical{ bottom: 0; } - - /* non-visible vertical scrollbar/RTL direction/left-side scrollbar */ - .mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden + .mCSB_scrollTools ~ .mCSB_scrollTools.mCSB_scrollTools_horizontal, - .mCS-dir-rtl > .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_scrollTools.mCSB_scrollTools_horizontal{ right: 0; } - - /* RTL direction/left-side scrollbar */ - .mCS-dir-rtl > .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_scrollTools.mCSB_scrollTools_horizontal{ left: 20px; } - - /* non-visible scrollbar/RTL direction/left-side scrollbar */ - .mCS-dir-rtl > .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden + .mCSB_scrollTools ~ .mCSB_scrollTools.mCSB_scrollTools_horizontal{ left: 0; } - - .mCS-dir-rtl > .mCSB_inside > .mCSB_container_wrapper{ /* RTL direction/left-side scrollbar */ - margin-right: 0; - margin-left: 30px; - } - - .mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden > .mCSB_container{ - padding-right: 0; - -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; - } - - .mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden > .mCSB_container{ - padding-bottom: 0; - -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; - } - - .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden{ - margin-right: 0; /* non-visible scrollbar */ - margin-left: 0; - } - - /* non-visible horizontal scrollbar */ - .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden{ margin-bottom: 0; } - - - -/* ------------------------------------------------------------------------------------------------------------------------- -5. TRANSITIONS ------------------------------------------------------------------------------------------------------------------------- -*/ - - .mCSB_scrollTools, - .mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCSB_scrollTools .mCSB_buttonUp, - .mCSB_scrollTools .mCSB_buttonDown, - .mCSB_scrollTools .mCSB_buttonLeft, - .mCSB_scrollTools .mCSB_buttonRight{ - -webkit-transition: opacity .2s ease-in-out, background-color .2s ease-in-out; - -moz-transition: opacity .2s ease-in-out, background-color .2s ease-in-out; - -o-transition: opacity .2s ease-in-out, background-color .2s ease-in-out; - transition: opacity .2s ease-in-out, background-color .2s ease-in-out; - } - - .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar, /* auto-expanded scrollbar */ - .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail, - .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar, - .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail{ - -webkit-transition: width .2s ease-out .2s, height .2s ease-out .2s, - margin-left .2s ease-out .2s, margin-right .2s ease-out .2s, - margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s, - opacity .2s ease-in-out, background-color .2s ease-in-out; - -moz-transition: width .2s ease-out .2s, height .2s ease-out .2s, - margin-left .2s ease-out .2s, margin-right .2s ease-out .2s, - margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s, - opacity .2s ease-in-out, background-color .2s ease-in-out; - -o-transition: width .2s ease-out .2s, height .2s ease-out .2s, - margin-left .2s ease-out .2s, margin-right .2s ease-out .2s, - margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s, - opacity .2s ease-in-out, background-color .2s ease-in-out; - transition: width .2s ease-out .2s, height .2s ease-out .2s, - margin-left .2s ease-out .2s, margin-right .2s ease-out .2s, - margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s, - opacity .2s ease-in-out, background-color .2s ease-in-out; - } - - - -/* ------------------------------------------------------------------------------------------------------------------------- -6. SCROLLBAR COLORS, OPACITY AND BACKGROUNDS ------------------------------------------------------------------------------------------------------------------------- -*/ - - /* - ---------------------------------------- - 6.1 THEMES - ---------------------------------------- - */ - - /* default theme ("light") */ - - .mCSB_scrollTools{ opacity: 0.75; filter: "alpha(opacity=75)"; -ms-filter: "alpha(opacity=75)"; } - - .mCS-autoHide > .mCustomScrollBox > .mCSB_scrollTools, - .mCS-autoHide > .mCustomScrollBox ~ .mCSB_scrollTools{ opacity: 0; filter: "alpha(opacity=0)"; -ms-filter: "alpha(opacity=0)"; } - - .mCustomScrollbar > .mCustomScrollBox > .mCSB_scrollTools.mCSB_scrollTools_onDrag, - .mCustomScrollbar > .mCustomScrollBox ~ .mCSB_scrollTools.mCSB_scrollTools_onDrag, - .mCustomScrollBox:hover > .mCSB_scrollTools, - .mCustomScrollBox:hover ~ .mCSB_scrollTools, - .mCS-autoHide:hover > .mCustomScrollBox > .mCSB_scrollTools, - .mCS-autoHide:hover > .mCustomScrollBox ~ .mCSB_scrollTools{ opacity: 1; filter: "alpha(opacity=100)"; -ms-filter: "alpha(opacity=100)"; } - - .mCSB_scrollTools .mCSB_draggerRail{ - background-color: #000; background-color: rgba(0,0,0,0.4); - filter: "alpha(opacity=40)"; -ms-filter: "alpha(opacity=40)"; - } - - .mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ - background-color: #fff; background-color: rgba(255,255,255,0.75); - filter: "alpha(opacity=75)"; -ms-filter: "alpha(opacity=75)"; - } - - .mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ - background-color: #fff; background-color: rgba(255,255,255,0.85); - filter: "alpha(opacity=85)"; -ms-filter: "alpha(opacity=85)"; - } - .mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ - background-color: #fff; background-color: rgba(255,255,255,0.9); - filter: "alpha(opacity=90)"; -ms-filter: "alpha(opacity=90)"; - } - - .mCSB_scrollTools .mCSB_buttonUp, - .mCSB_scrollTools .mCSB_buttonDown, - .mCSB_scrollTools .mCSB_buttonLeft, - .mCSB_scrollTools .mCSB_buttonRight{ - background-image: url(mCSB_buttons.png); /* css sprites */ - background-repeat: no-repeat; - opacity: 0.4; filter: "alpha(opacity=40)"; -ms-filter: "alpha(opacity=40)"; - } - - .mCSB_scrollTools .mCSB_buttonUp{ - background-position: 0 0; - /* - sprites locations - light: 0 0, -16px 0, -32px 0, -48px 0, 0 -72px, -16px -72px, -32px -72px - dark: -80px 0, -96px 0, -112px 0, -128px 0, -80px -72px, -96px -72px, -112px -72px - */ - } - - .mCSB_scrollTools .mCSB_buttonDown{ - background-position: 0 -20px; - /* - sprites locations - light: 0 -20px, -16px -20px, -32px -20px, -48px -20px, 0 -92px, -16px -92px, -32px -92px - dark: -80px -20px, -96px -20px, -112px -20px, -128px -20px, -80px -92px, -96px -92px, -112 -92px - */ - } - - .mCSB_scrollTools .mCSB_buttonLeft{ - background-position: 0 -40px; - /* - sprites locations - light: 0 -40px, -20px -40px, -40px -40px, -60px -40px, 0 -112px, -20px -112px, -40px -112px - dark: -80px -40px, -100px -40px, -120px -40px, -140px -40px, -80px -112px, -100px -112px, -120px -112px - */ - } - - .mCSB_scrollTools .mCSB_buttonRight{ - background-position: 0 -56px; - /* - sprites locations - light: 0 -56px, -20px -56px, -40px -56px, -60px -56px, 0 -128px, -20px -128px, -40px -128px - dark: -80px -56px, -100px -56px, -120px -56px, -140px -56px, -80px -128px, -100px -128px, -120px -128px - */ - } - - .mCSB_scrollTools .mCSB_buttonUp:hover, - .mCSB_scrollTools .mCSB_buttonDown:hover, - .mCSB_scrollTools .mCSB_buttonLeft:hover, - .mCSB_scrollTools .mCSB_buttonRight:hover{ opacity: 0.75; filter: "alpha(opacity=75)"; -ms-filter: "alpha(opacity=75)"; } - - .mCSB_scrollTools .mCSB_buttonUp:active, - .mCSB_scrollTools .mCSB_buttonDown:active, - .mCSB_scrollTools .mCSB_buttonLeft:active, - .mCSB_scrollTools .mCSB_buttonRight:active{ opacity: 0.9; filter: "alpha(opacity=90)"; -ms-filter: "alpha(opacity=90)"; } - - - /* theme: "dark" */ - - .mCS-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.15); } - - .mCS-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); } - - .mCS-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: rgba(0,0,0,0.85); } - - .mCS-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: rgba(0,0,0,0.9); } - - .mCS-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -80px 0; } - - .mCS-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -80px -20px; } - - .mCS-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -80px -40px; } - - .mCS-dark.mCSB_scrollTools .mCSB_buttonRight{ background-position: -80px -56px; } - - /* ---------------------------------------- */ - - - - /* theme: "light-2", "dark-2" */ - - .mCS-light-2.mCSB_scrollTools .mCSB_draggerRail, - .mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail{ - width: 4px; - background-color: #fff; background-color: rgba(255,255,255,0.1); - -webkit-border-radius: 1px; -moz-border-radius: 1px; border-radius: 1px; - } - - .mCS-light-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ - width: 4px; - background-color: #fff; background-color: rgba(255,255,255,0.75); - -webkit-border-radius: 1px; -moz-border-radius: 1px; border-radius: 1px; - } - - .mCS-light-2.mCSB_scrollTools_horizontal .mCSB_draggerRail, - .mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_draggerRail, - .mCS-light-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{ - width: 100%; - height: 4px; - margin: 6px auto; - } - - .mCS-light-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.85); } - - .mCS-light-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-light-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.9); } - - .mCS-light-2.mCSB_scrollTools .mCSB_buttonUp{ background-position: -32px 0; } - - .mCS-light-2.mCSB_scrollTools .mCSB_buttonDown{ background-position: -32px -20px; } - - .mCS-light-2.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -40px -40px; } - - .mCS-light-2.mCSB_scrollTools .mCSB_buttonRight{ background-position: -40px -56px; } - - - /* theme: "dark-2" */ - - .mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail{ - background-color: #000; background-color: rgba(0,0,0,0.1); - -webkit-border-radius: 1px; -moz-border-radius: 1px; border-radius: 1px; - } - - .mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ - background-color: #000; background-color: rgba(0,0,0,0.75); - -webkit-border-radius: 1px; -moz-border-radius: 1px; border-radius: 1px; - } - - .mCS-dark-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); } - - .mCS-dark-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-dark-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); } - - .mCS-dark-2.mCSB_scrollTools .mCSB_buttonUp{ background-position: -112px 0; } - - .mCS-dark-2.mCSB_scrollTools .mCSB_buttonDown{ background-position: -112px -20px; } - - .mCS-dark-2.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -120px -40px; } - - .mCS-dark-2.mCSB_scrollTools .mCSB_buttonRight{ background-position: -120px -56px; } - - /* ---------------------------------------- */ - - - - /* theme: "light-thick", "dark-thick" */ - - .mCS-light-thick.mCSB_scrollTools .mCSB_draggerRail, - .mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail{ - width: 4px; - background-color: #fff; background-color: rgba(255,255,255,0.1); - -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; - } - - .mCS-light-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ - width: 6px; - background-color: #fff; background-color: rgba(255,255,255,0.75); - -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; - } - - .mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail, - .mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail{ - width: 100%; - height: 4px; - margin: 6px 0; - } - - .mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{ - width: 100%; - height: 6px; - margin: 5px auto; - } - - .mCS-light-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.85); } - - .mCS-light-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-light-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.9); } - - .mCS-light-thick.mCSB_scrollTools .mCSB_buttonUp{ background-position: -16px 0; } - - .mCS-light-thick.mCSB_scrollTools .mCSB_buttonDown{ background-position: -16px -20px; } - - .mCS-light-thick.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -20px -40px; } - - .mCS-light-thick.mCSB_scrollTools .mCSB_buttonRight{ background-position: -20px -56px; } - - - /* theme: "dark-thick" */ - - .mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail{ - background-color: #000; background-color: rgba(0,0,0,0.1); - -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; - } - - .mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ - background-color: #000; background-color: rgba(0,0,0,0.75); - -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; - } - - .mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); } - - .mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-dark-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); } - - .mCS-dark-thick.mCSB_scrollTools .mCSB_buttonUp{ background-position: -96px 0; } - - .mCS-dark-thick.mCSB_scrollTools .mCSB_buttonDown{ background-position: -96px -20px; } - - .mCS-dark-thick.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -100px -40px; } - - .mCS-dark-thick.mCSB_scrollTools .mCSB_buttonRight{ background-position: -100px -56px; } - - /* ---------------------------------------- */ - - - - /* theme: "light-thin", "dark-thin" */ - - .mCS-light-thin.mCSB_scrollTools .mCSB_draggerRail{ background-color: #fff; background-color: rgba(255,255,255,0.1); } - - .mCS-light-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ width: 2px; } - - .mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail, - .mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail{ width: 100%; } - - .mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{ - width: 100%; - height: 2px; - margin: 7px auto; - } - - - /* theme "dark-thin" */ - - .mCS-dark-thin.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.15); } - - .mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); } - - .mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); } - - .mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-dark-thin.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); } - - .mCS-dark-thin.mCSB_scrollTools .mCSB_buttonUp{ background-position: -80px 0; } - - .mCS-dark-thin.mCSB_scrollTools .mCSB_buttonDown{ background-position: -80px -20px; } - - .mCS-dark-thin.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -80px -40px; } - - .mCS-dark-thin.mCSB_scrollTools .mCSB_buttonRight{ background-position: -80px -56px; } - - /* ---------------------------------------- */ - - - - /* theme "rounded", "rounded-dark", "rounded-dots", "rounded-dots-dark" */ - - .mCS-rounded.mCSB_scrollTools .mCSB_draggerRail{ background-color: #fff; background-color: rgba(255,255,255,0.15); } - - .mCS-rounded.mCSB_scrollTools .mCSB_dragger, - .mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger, - .mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger, - .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger{ height: 14px; } - - .mCS-rounded.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ - width: 14px; - margin: 0 1px; - } - - .mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger, - .mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger, - .mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger, - .mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger{ width: 14px; } - - .mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{ - height: 14px; - margin: 1px 0; - } - - .mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar, - .mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar, - .mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar, - .mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{ - width: 16px; /* auto-expanded scrollbar */ - height: 16px; - margin: -1px 0; - } - - .mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, - .mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail, - .mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, - .mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{ width: 4px; /* auto-expanded scrollbar */ } - - .mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar, - .mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar, - .mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar, - .mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{ - height: 16px; /* auto-expanded scrollbar */ - width: 16px; - margin: 0 -1px; - } - - .mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, - .mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail, - .mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, - .mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{ - height: 4px; /* auto-expanded scrollbar */ - margin: 6px 0; - } - - .mCS-rounded.mCSB_scrollTools .mCSB_buttonUp{ background-position: 0 -72px; } - - .mCS-rounded.mCSB_scrollTools .mCSB_buttonDown{ background-position: 0 -92px; } - - .mCS-rounded.mCSB_scrollTools .mCSB_buttonLeft{ background-position: 0 -112px; } - - .mCS-rounded.mCSB_scrollTools .mCSB_buttonRight{ background-position: 0 -128px; } - - - /* theme "rounded-dark", "rounded-dots-dark" */ - - .mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); } - - .mCS-rounded-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.15); } - - .mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar, - .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); } - - .mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar, - .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); } - - .mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -80px -72px; } - - .mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -80px -92px; } - - .mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -80px -112px; } - - .mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonRight{ background-position: -80px -128px; } - - - /* theme "rounded-dots", "rounded-dots-dark" */ - - .mCS-rounded-dots.mCSB_scrollTools_vertical .mCSB_draggerRail, - .mCS-rounded-dots-dark.mCSB_scrollTools_vertical .mCSB_draggerRail{ width: 4px; } - - .mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail, - .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail, - .mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail, - .mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{ - background-color: transparent; - background-position: center; - } - - .mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail, - .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail{ - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAANElEQVQYV2NkIAAYiVbw//9/Y6DiM1ANJoyMjGdBbLgJQAX/kU0DKgDLkaQAvxW4HEvQFwCRcxIJK1XznAAAAABJRU5ErkJggg=="); - background-repeat: repeat-y; - opacity: 0.3; - filter: "alpha(opacity=30)"; -ms-filter: "alpha(opacity=30)"; - } - - .mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail, - .mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{ - height: 4px; - margin: 6px 0; - background-repeat: repeat-x; - } - - .mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonUp{ background-position: -16px -72px; } - - .mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonDown{ background-position: -16px -92px; } - - .mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -20px -112px; } - - .mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonRight{ background-position: -20px -128px; } - - - /* theme "rounded-dots-dark" */ - - .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail{ - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYV2NkIAAYSVFgDFR8BqrBBEifBbGRTfiPZhpYjiQFBK3A6l6CvgAAE9kGCd1mvgEAAAAASUVORK5CYII="); - } - - .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -96px -72px; } - - .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -96px -92px; } - - .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -100px -112px; } - - .mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonRight{ background-position: -100px -128px; } - - /* ---------------------------------------- */ - - - - /* theme "3d", "3d-dark", "3d-thick", "3d-thick-dark" */ - - .mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ - background-repeat: repeat-y; - background-image: -moz-linear-gradient(left, rgba(255,255,255,0.5) 0%, rgba(255,255,255,0) 100%); - background-image: -webkit-gradient(linear, left top, right top, color-stop(0%,rgba(255,255,255,0.5)), color-stop(100%,rgba(255,255,255,0))); - background-image: -webkit-linear-gradient(left, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%); - background-image: -o-linear-gradient(left, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%); - background-image: -ms-linear-gradient(left, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%); - background-image: linear-gradient(to right, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%); - } - - .mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{ - background-repeat: repeat-x; - background-image: -moz-linear-gradient(top, rgba(255,255,255,0.5) 0%, rgba(255,255,255,0) 100%); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.5)), color-stop(100%,rgba(255,255,255,0))); - background-image: -webkit-linear-gradient(top, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%); - background-image: -o-linear-gradient(top, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%); - background-image: -ms-linear-gradient(top, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%); - background-image: linear-gradient(to bottom, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%); - } - - - /* theme "3d", "3d-dark" */ - - .mCS-3d.mCSB_scrollTools_vertical .mCSB_dragger, - .mCS-3d-dark.mCSB_scrollTools_vertical .mCSB_dragger{ height: 70px; } - - .mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger, - .mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger{ width: 70px; } - - .mCS-3d.mCSB_scrollTools, - .mCS-3d-dark.mCSB_scrollTools{ - opacity: 1; - filter: "alpha(opacity=30)"; -ms-filter: "alpha(opacity=30)"; - } - - .mCS-3d.mCSB_scrollTools .mCSB_draggerRail, - .mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail, - .mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ -webkit-border-radius: 16px; -moz-border-radius: 16px; border-radius: 16px; } - - .mCS-3d.mCSB_scrollTools .mCSB_draggerRail, - .mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail{ - width: 8px; - background-color: #000; background-color: rgba(0,0,0,0.2); - box-shadow: inset 1px 0 1px rgba(0,0,0,0.5), inset -1px 0 1px rgba(255,255,255,0.2); - } - - .mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-3d.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar, - .mCS-3d.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-3d.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar, - .mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar, - .mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-3d-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #555; } - - .mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ width: 8px; } - - .mCS-3d.mCSB_scrollTools_horizontal .mCSB_draggerRail, - .mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{ - width: 100%; - height: 8px; - margin: 4px 0; - box-shadow: inset 0 1px 1px rgba(0,0,0,0.5), inset 0 -1px 1px rgba(255,255,255,0.2); - } - - .mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{ - width: 100%; - height: 8px; - margin: 4px auto; - } - - .mCS-3d.mCSB_scrollTools .mCSB_buttonUp{ background-position: -32px -72px; } - - .mCS-3d.mCSB_scrollTools .mCSB_buttonDown{ background-position: -32px -92px; } - - .mCS-3d.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -40px -112px; } - - .mCS-3d.mCSB_scrollTools .mCSB_buttonRight{ background-position: -40px -128px; } - - - /* theme "3d-dark" */ - - .mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail{ - background-color: #000; background-color: rgba(0,0,0,0.1); - box-shadow: inset 1px 0 1px rgba(0,0,0,0.1); - } - - .mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{ box-shadow: inset 0 1px 1px rgba(0,0,0,0.1); } - - .mCS-3d-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -112px -72px; } - - .mCS-3d-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -112px -92px; } - - .mCS-3d-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -120px -112px; } - - .mCS-3d-dark.mCSB_scrollTools .mCSB_buttonRight{ background-position: -120px -128px; } - - /* ---------------------------------------- */ - - - - /* theme: "3d-thick", "3d-thick-dark" */ - - .mCS-3d-thick.mCSB_scrollTools, - .mCS-3d-thick-dark.mCSB_scrollTools{ - opacity: 1; - filter: "alpha(opacity=30)"; -ms-filter: "alpha(opacity=30)"; - } - - .mCS-3d-thick.mCSB_scrollTools, - .mCS-3d-thick-dark.mCSB_scrollTools, - .mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer, - .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer{ -webkit-border-radius: 7px; -moz-border-radius: 7px; border-radius: 7px; } - - .mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } - - .mCSB_inside + .mCS-3d-thick.mCSB_scrollTools_vertical, - .mCSB_inside + .mCS-3d-thick-dark.mCSB_scrollTools_vertical{ right: 1px; } - - .mCS-3d-thick.mCSB_scrollTools_vertical, - .mCS-3d-thick-dark.mCSB_scrollTools_vertical{ box-shadow: inset 1px 0 1px rgba(0,0,0,0.1), inset 0 0 14px rgba(0,0,0,0.5); } - - .mCS-3d-thick.mCSB_scrollTools_horizontal, - .mCS-3d-thick-dark.mCSB_scrollTools_horizontal{ - bottom: 1px; - box-shadow: inset 0 1px 1px rgba(0,0,0,0.1), inset 0 0 14px rgba(0,0,0,0.5); - } - - .mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ - box-shadow: inset 1px 0 0 rgba(255,255,255,0.4); - width: 12px; - margin: 2px; - position: absolute; - height: auto; - top: 0; - bottom: 0; - left: 0; - right: 0; - } - - .mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{ box-shadow: inset 0 1px 0 rgba(255,255,255,0.4); } - - .mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar, - .mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-3d-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #555; } - - .mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{ - height: 12px; - width: auto; - } - - .mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{ - background-color: #000; background-color: rgba(0,0,0,0.05); - box-shadow: inset 1px 1px 16px rgba(0,0,0,0.1); - } - - .mCS-3d-thick.mCSB_scrollTools .mCSB_draggerRail{ background-color: transparent; } - - .mCS-3d-thick.mCSB_scrollTools .mCSB_buttonUp{ background-position: -32px -72px; } - - .mCS-3d-thick.mCSB_scrollTools .mCSB_buttonDown{ background-position: -32px -92px; } - - .mCS-3d-thick.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -40px -112px; } - - .mCS-3d-thick.mCSB_scrollTools .mCSB_buttonRight{ background-position: -40px -128px; } - - - /* theme: "3d-thick-dark" */ - - .mCS-3d-thick-dark.mCSB_scrollTools{ box-shadow: inset 0 0 14px rgba(0,0,0,0.2); } - - .mCS-3d-thick-dark.mCSB_scrollTools_horizontal{ box-shadow: inset 0 1px 1px rgba(0,0,0,0.1), inset 0 0 14px rgba(0,0,0,0.2); } - - .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ box-shadow: inset 1px 0 0 rgba(255,255,255,0.4), inset -1px 0 0 rgba(0,0,0,0.2); } - - .mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{ box-shadow: inset 0 1px 0 rgba(255,255,255,0.4), inset 0 -1px 0 rgba(0,0,0,0.2); } - - .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar, - .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #777; } - - .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer{ - background-color: #fff; background-color: rgba(0,0,0,0.05); - box-shadow: inset 1px 1px 16px rgba(0,0,0,0.1); - } - - .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: transparent; } - - .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -112px -72px; } - - .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -112px -92px; } - - .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -120px -112px; } - - .mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonRight{ background-position: -120px -128px; } - - /* ---------------------------------------- */ - - - - /* theme: "minimal", "minimal-dark" */ - - .mCSB_outside + .mCS-minimal.mCSB_scrollTools_vertical, - .mCSB_outside + .mCS-minimal-dark.mCSB_scrollTools_vertical{ - right: 0; - margin: 12px 0; - } - - .mCustomScrollBox.mCS-minimal + .mCSB_scrollTools.mCSB_scrollTools_horizontal, - .mCustomScrollBox.mCS-minimal + .mCSB_scrollTools + .mCSB_scrollTools.mCSB_scrollTools_horizontal, - .mCustomScrollBox.mCS-minimal-dark + .mCSB_scrollTools.mCSB_scrollTools_horizontal, - .mCustomScrollBox.mCS-minimal-dark + .mCSB_scrollTools + .mCSB_scrollTools.mCSB_scrollTools_horizontal{ - bottom: 0; - margin: 0 12px; - } - - /* RTL direction/left-side scrollbar */ - .mCS-dir-rtl > .mCSB_outside + .mCS-minimal.mCSB_scrollTools_vertical, - .mCS-dir-rtl > .mCSB_outside + .mCS-minimal-dark.mCSB_scrollTools_vertical{ - left: 0; - right: auto; - } - - .mCS-minimal.mCSB_scrollTools .mCSB_draggerRail, - .mCS-minimal-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: transparent; } - - .mCS-minimal.mCSB_scrollTools_vertical .mCSB_dragger, - .mCS-minimal-dark.mCSB_scrollTools_vertical .mCSB_dragger{ height: 50px; } - - .mCS-minimal.mCSB_scrollTools_horizontal .mCSB_dragger, - .mCS-minimal-dark.mCSB_scrollTools_horizontal .mCSB_dragger{ width: 50px; } - - .mCS-minimal.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ - background-color: #fff; background-color: rgba(255,255,255,0.2); - filter: "alpha(opacity=20)"; -ms-filter: "alpha(opacity=20)"; - } - - .mCS-minimal.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-minimal.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ - background-color: #fff; background-color: rgba(255,255,255,0.5); - filter: "alpha(opacity=50)"; -ms-filter: "alpha(opacity=50)"; - } - - - /* theme: "minimal-dark" */ - - .mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ - background-color: #000; background-color: rgba(0,0,0,0.2); - filter: "alpha(opacity=20)"; -ms-filter: "alpha(opacity=20)"; - } - - .mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ - background-color: #000; background-color: rgba(0,0,0,0.5); - filter: "alpha(opacity=50)"; -ms-filter: "alpha(opacity=50)"; - } - - /* ---------------------------------------- */ - - - - /* theme "light-3", "dark-3" */ - - .mCS-light-3.mCSB_scrollTools .mCSB_draggerRail, - .mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail{ - width: 6px; - background-color: #000; background-color: rgba(0,0,0,0.2); - } - - .mCS-light-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ width: 6px; } - - .mCS-light-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-light-3.mCSB_scrollTools_horizontal .mCSB_draggerRail, - .mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_draggerRail{ - width: 100%; - height: 6px; - margin: 5px 0; - } - - .mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, - .mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail, - .mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, - .mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{ - width: 12px; - } - - .mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, - .mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail, - .mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, - .mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{ - height: 12px; - margin: 2px 0; - } - - .mCS-light-3.mCSB_scrollTools .mCSB_buttonUp{ background-position: -32px -72px; } - - .mCS-light-3.mCSB_scrollTools .mCSB_buttonDown{ background-position: -32px -92px; } - - .mCS-light-3.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -40px -112px; } - - .mCS-light-3.mCSB_scrollTools .mCSB_buttonRight{ background-position: -40px -128px; } - - - /* theme "dark-3" */ - - .mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); } - - .mCS-dark-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); } - - .mCS-dark-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-dark-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); } - - .mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.1); } - - .mCS-dark-3.mCSB_scrollTools .mCSB_buttonUp{ background-position: -112px -72px; } - - .mCS-dark-3.mCSB_scrollTools .mCSB_buttonDown{ background-position: -112px -92px; } - - .mCS-dark-3.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -120px -112px; } - - .mCS-dark-3.mCSB_scrollTools .mCSB_buttonRight{ background-position: -120px -128px; } - - /* ---------------------------------------- */ - - - - /* theme "inset", "inset-dark", "inset-2", "inset-2-dark", "inset-3", "inset-3-dark" */ - - .mCS-inset.mCSB_scrollTools .mCSB_draggerRail, - .mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail, - .mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail, - .mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail, - .mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail, - .mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{ - width: 12px; - background-color: #000; background-color: rgba(0,0,0,0.2); - } - - .mCS-inset.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-inset-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ - width: 6px; - margin: 3px 5px; - position: absolute; - height: auto; - top: 0; - bottom: 0; - left: 0; - right: 0; - } - - .mCS-inset.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, - .mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{ - height: 6px; - margin: 5px 3px; - position: absolute; - width: auto; - top: 0; - bottom: 0; - left: 0; - right: 0; - } - - .mCS-inset.mCSB_scrollTools_horizontal .mCSB_draggerRail, - .mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail, - .mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_draggerRail, - .mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail, - .mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_draggerRail, - .mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{ - width: 100%; - height: 12px; - margin: 2px 0; - } - - .mCS-inset.mCSB_scrollTools .mCSB_buttonUp, - .mCS-inset-2.mCSB_scrollTools .mCSB_buttonUp, - .mCS-inset-3.mCSB_scrollTools .mCSB_buttonUp{ background-position: -32px -72px; } - - .mCS-inset.mCSB_scrollTools .mCSB_buttonDown, - .mCS-inset-2.mCSB_scrollTools .mCSB_buttonDown, - .mCS-inset-3.mCSB_scrollTools .mCSB_buttonDown{ background-position: -32px -92px; } - - .mCS-inset.mCSB_scrollTools .mCSB_buttonLeft, - .mCS-inset-2.mCSB_scrollTools .mCSB_buttonLeft, - .mCS-inset-3.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -40px -112px; } - - .mCS-inset.mCSB_scrollTools .mCSB_buttonRight, - .mCS-inset-2.mCSB_scrollTools .mCSB_buttonRight, - .mCS-inset-3.mCSB_scrollTools .mCSB_buttonRight{ background-position: -40px -128px; } - - - /* theme "inset-dark", "inset-2-dark", "inset-3-dark" */ - - .mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, - .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); } - - .mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar, - .mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar, - .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); } - - .mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-inset-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar, - .mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar, - .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); } - - .mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail, - .mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail, - .mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.1); } - - .mCS-inset-dark.mCSB_scrollTools .mCSB_buttonUp, - .mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonUp, - .mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -112px -72px; } - - .mCS-inset-dark.mCSB_scrollTools .mCSB_buttonDown, - .mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonDown, - .mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -112px -92px; } - - .mCS-inset-dark.mCSB_scrollTools .mCSB_buttonLeft, - .mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonLeft, - .mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -120px -112px; } - - .mCS-inset-dark.mCSB_scrollTools .mCSB_buttonRight, - .mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonRight, - .mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonRight{ background-position: -120px -128px; } - - - /* theme "inset-2", "inset-2-dark" */ - - .mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail, - .mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail{ - background-color: transparent; - border-width: 1px; - border-style: solid; - border-color: #fff; - border-color: rgba(255,255,255,0.2); - -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; - } - - .mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail{ border-color: #000; border-color: rgba(0,0,0,0.2); } - - - /* theme "inset-3", "inset-3-dark" */ - - .mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail{ background-color: #fff; background-color: rgba(255,255,255,0.6); } - - .mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.6); } - - .mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); } - - .mCS-inset-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); } - - .mCS-inset-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-inset-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); } - - .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.75); } - - .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.85); } - - .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, - .mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.9); } - - /* ---------------------------------------- */ diff --git a/css/normalize.min.css b/css/normalize.min.css new file mode 100644 index 0000000..f6e0b65 --- /dev/null +++ b/css/normalize.min.css @@ -0,0 +1 @@ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}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}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} \ No newline at end of file diff --git a/css/styles.css b/css/styles.css new file mode 100644 index 0000000..e778d10 --- /dev/null +++ b/css/styles.css @@ -0,0 +1,326 @@ +/*! HTML5 Boilerplate v5.0 | MIT License | http://h5bp.com/ */ + +html { + color: #222; + font-size: 1em; + line-height: 1.4; +} + +::-moz-selection { + background: #b3d4fc; + text-shadow: none; +} + +::selection { + background: #b3d4fc; + text-shadow: none; +} + +hr { + display: block; + height: 1px; + border: 0; + border-top: 1px solid #ccc; + margin: 1em 0; + padding: 0; +} + +audio, +canvas, +iframe, +img, +svg, +video { + vertical-align: middle; +} + +fieldset { + border: 0; + margin: 0; + padding: 0; +} + +textarea { + resize: vertical; +} + +.browserupgrade { + margin: 0.2em 0; + background: #ccc; + color: #000; + padding: 0.2em 0; +} +/* ===== Initializr Styles ================================================== + Author: Jonathan Verrecchia - verekia.com/initializr/responsive-template + ========================================================================== */ + +body { + font: 16px/26px Helvetica, Helvetica Neue, Arial; +} + +.wrapper { + width: 90%; + margin: 0 5%; +} +/* =================== + ALL: Orange Theme + =================== */ + +.header-container { + border-bottom: 20px solid #e44d26; +} + +.footer-container, +.main aside { + border-top: 20px solid #e44d26; +} + +.header-container, +.footer-container, +.main aside { + background: #f16529; +} + +.title { + color: white; +} +/* ============== + MOBILE: Menu + ============== */ + +nav ul { + margin: 0; + padding: 0; + list-style-type: none; +} + +nav a { + display: block; + margin-bottom: 10px; + padding: 15px 0; + text-align: center; + text-decoration: none; + font-weight: bold; + color: white; + background: #e44d26; +} + +nav a:hover, +nav a:visited { + color: white; +} + +nav a:hover { + text-decoration: underline; +} +/* ============== + MOBILE: Main + ============== */ + +.main { + padding: 30px 0; +} + +.main article h1 { + font-size: 2em; +} + +.main aside { + color: white; + padding: 0px 5% 10px; +} + +.footer-container footer { + color: white; + padding: 20px 0; +} +/* =============== + ALL: IE Fixes + =============== */ + +.ie7 .title { + padding-top: 20px; +} +/* ========================================================================== + Author's custom styles + ========================================================================== */ +/* ========================================================================== + Media Queries + ========================================================================== */ + +@media only screen and (min-width: 480px) { + /* ==================== + INTERMEDIATE: Menu + ==================== */ + + nav a { + float: left; + width: 27%; + margin: 0 1.7%; + padding: 25px 2%; + margin-bottom: 0; + } + nav li:first-child a { + margin-left: 0; + } + nav li:last-child a { + margin-right: 0; + } + /* ======================== + INTERMEDIATE: IE Fixes + ======================== */ + + nav ul li { + display: inline; + } + .oldie nav a { + margin: 0 0.7%; + } +} + +@media only screen and (min-width: 768px) { + /* ==================== + WIDE: CSS3 Effects + ==================== */ + + .header-container, + .main aside { + box-shadow: 0 5px 10px #aaa; + } + /* ============ + WIDE: Menu + ============ */ + + .title { + float: left; + } + nav { + float: right; + width: 38%; + } + /* ============ + WIDE: Main + ============ */ + + .main article { + float: left; + width: 57%; + } + .main aside { + float: right; + width: 28%; + } +} + +@media only screen and (min-width: 1140px) { + /* =============== + Maximal Width + =============== */ + + .wrapper { + width: 1026px; + /* 1140px - 10% for margins */ + + margin: 0 auto; + } +} +/* ========================================================================== + Helper classes + ========================================================================== */ + +.hidden { + display: none !important; + visibility: hidden; +} + +.visuallyhidden { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +.visuallyhidden.focusable:active, +.visuallyhidden.focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; +} + +.invisible { + visibility: hidden; +} + +.clearfix:before, +.clearfix:after { + content: " "; + display: table; +} + +.clearfix:after { + clear: both; +} + +.clearfix { + *zoom: 1; +} +/* ========================================================================== + Print styles + ========================================================================== */ + +@media print { + *, + *:before, + *:after { + background: transparent !important; + color: #000 !important; + box-shadow: none !important; + text-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } +} \ No newline at end of file diff --git a/img/apple-touch-icon.png b/img/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..600738f2cee82ca5dc8e92efdb4561fd59eaeb47 GIT binary patch literal 3959 zcmYjUcQhON7mpY*BBZ61AokuPv19KdlveFoTBJ&;+9P(vvs#`?s8veMQd%Q5ORZW@ z(I^dSH%0rFy=9&pBGY>NW0AMvUHAG*$E&m)w;Kkk4 zkmCaYu<4i?>e)xoY){d!0svqjym?-C?Q)bdz#G1<#~cC&{TD;=u>S%Mx&y&~nb-VI zX{(pQ{g$VEI(~Xo71rqeesghNR5uvc`b8fJ)b^+Q4F1=&qb;F3T&h!O;Yre5CZI% zaEM(lMpPNdB3x(4Amz&0BsXdDRnZ4wMGw_81OQcN!=#7MfygPrqHC@BI-xl60w^HU z<_0}(Ye0QTz#aL^=5?H|u1HYam*B!=HxSw*$SgVAux0>5CE_v(oGhDJQb1Il4LaV- z`(6oo!yx)zt1@gwBMm^fY8>{Zj#=RBfvgV_sBwChzQH)ynVo9SXxdRjlEQcoh+oCM zor>g4ODz8R){HI=BUS}8dH6#Ft^_+P_fzZaJ=k&qnx^K@YN{6U+JO%KL zuTIRSd1%{s;qcGwq)BlNP2AEjJl30^2F{)(O|OM3<$T?Xp(eh4WPF!p@D^9HSe!~z zdu1PJ2BZjk>Zn0SLidfS3*Ws7055aX?u>b-nK?;KpYv77f zfa!L*Nc0_K*9vXZUJ`Y`{@K)FfE&VA%TCKF^K3j*5MT&0vHwgk)FqLBhS-L6M;HU* zCa5F7u5#)C4@5}hoqvdrtk$gHtd<|1_vndY!6}sYMl;bh3saZO{jPr|ta@9kbt%BI zKM+}wF=2WDfDl?dgIVCC@*pOn#rY$S_a?l;m{$t3Rz=~4Wcy2jjxL;x;h^aWHolOC zFl4LhDZ)y%(%Z;{0DS}6sr|lmW`Rbs5{cXqV*9tNoT|ZQe-Sf`^!@$6md~hSK)_6q zU4I9&z}wVeOhl)%{ZbQaEarh8JAn!+YRKM0G%wpxMBHJSs*hzZo;eJE-z!S!2 zQ&W}90={p1Fzt>j>N_H^wI_OXarRa<7gmoL|IJ)%+X8lv#e`#VUp2gqtPJBiDmSp4 z4<=<723+_(Vzl$984Ex$aa5?C3g7vEB+kvOZrsLJig`g7e-geq0zP7dEMToGF0%D( z@JJc9J0-un$#ivAEozK%T-+EKnA8VO$*{N9+Z%#+KPUtk9oVS_1ATNP8_q@xx?_OD zE6Diq<=G=dab<`4cxx1M_Y(Dc6}}8AYsV%1Gg*1HzhL~2eha_;%4b%}xa z0jCMKtZ3=8@!GMPom=`ue_|?cHfMLGO%~w`<&Vvt) zP6OSpUxVu@=TjP3F#b?fd9sn#5F3iA7Kw`C>J@B&hpHSN&k5V59CzG%Z>ukEMwEH- zvIxVp#$3(28~I`bcpC|c&A}CGXw;hFrxM7swo_wXx$%}yxkFfBO-;wvYzK&~$ED8w z1RC_YeOq*%#C+Xe)o*PA#`aI)%M6jkgX7m0Zr$eJ;dLfy{5P8Ews!?a~$55hi@upj7mr+7KRRKftQITgE7vKYSWPS$e)b{=yvvl8lXnYt&=% zB#_R}zj;i{lD|i=OLz{gyeeyOgNlDEC^wul5T03577WB)KfnTLI>)Em+#Flw(p6o{&{nDRo=uGy$(m&Pg-gx`dT?uG2JS zFj8$nO)TcSQ}1@h_>AZ1RhT79m~Q%Ju6~020Uc#4XJ3}Syp~S1mMQblHfO-XSiQEZ z6pY5ClpF!H;%3OMJ4F8<(D`H z_G1Q%QSDp3>4H4CN8ay3@=j=TMs8U5aesoSmmH(}*;Q+OUYM9^nYF&X@L(0*kHN3f zM9lu+Gzd*QpYZrtXEOXb^+LaAl>!4vPe1N&7iUGoIm%Cu7L_vkO(%>riTjh!-f{?D zzE0?F8b6ephf&IG43w535m^Y{m3QQcFKFqZ{si~cD=CWHxWvTzw+|-zuNIZ552$>q zQt1A(%f|zZO-z^w!hR`d2}D}HhoANJnTJG0QamynOU7!wkulK?wQkbX@x;oc`V|Go zpp&715dD1cNY}PZW-li1^5=7S%C;@9M*F-!ov5JF(wo+qmx@?CxgD9joARYsk`6tW zR?*-8!`@3{Rxs1H`Raf>QsQtU&5~Eeht6P8rdKyoOI1;Lc)#jCfbr-Z6m9K&L&CI( zSub>SP8PdGpv3N`w{RpIb@P-(HyckxM=qxi{XUmn%-JLCFw- zAoVqiT>4-W7msxtqcCoFq^e|?gLp3sj z<)U3LVv?F4_UDSSTPwjHP_c6ih^{jN>MmPS9l!2kZE`=@M3u=^2EL>V5a}3uE&lf- zZV1osT_dE9)+N%JVZ(50eW#gR=Uxtr z;%)y34x@x{{T2aUZtFLU9#JU-) zWSA>j#!C7DK{8gQKBCDm#h4p1(*d4qK*n-%TNzj=mB%v{`tIvyBfFIquEZ5cj8*_m zVghhvo4~@bqs1~PJfuK)=Dx{u)^7@}!!!}3O(XY^Pj`Ji%@vu%?T=szFsh3NcYfLV zJKX&Rp;iW;(MKvwx#uf{8jLUMz?;c01U#swABW%zh=1nLVaUElmt^WseG|5<0(EdT z2r5OHKUMz$KlHyvocf_`Zq^<>eZgN=952j-{#K^tBt7W^1ZHs;E@nxYoh&SU*w;%D z#^=4_bab#55+Y4nIr@hG{rx;w(?~IB!CuK8ebc2prFHsw!>Zj`}lG#&(X)*lNE+V zJE(JE(Bez6k+6ONHaBD+CiF_a$6t@HL^st(9@`_V@cD^s5U%~5j5gzyVAO_TV!3Kq>Jfr*DNEPk1sQ)Sq$i}{f1R%O}C+?r6w<__?9P9W8?NcP;7Mi z!|6_ALf_K#@<44w6KS@lhHo6-@o2@NIy4G>FlazA-a6izwy0ii|1{*}$h*!5dvZzc z!D7VBP+#x^bl1sgjT(#?>Y&QxD4_&%paGte%L1UmLob)Lzv0f@ZF*En5_dR`XqI9* z$pp8e)P|BBJ8(WaT9D+yIZ}goz55z;Aq%mX>W#JZF6Z6>-#s+Y)$Rt<;YTN4h_Y_oMNu*^T!lyy z9)}kSl{^xM5@nYbI{l(c`O^|yesVe_OnBYmLQR1MIHPNN^uCmH&tA zRM#XyO`HD<-j1B{E64w zr6Iu+<(+2ZYQ~*ObHrrx329FazcO@{Qfi&q~bfs}2Ly zjbx)e879z74azR`$wf`xyt*`vfdgj%)9Pov2Gto)x5@dEC$}0JRk~vI4h5CSM}8Ok z3wo>3^~S<9Mx_Z=*jfX-fpAriIDU48j>x-zF6rHqTRWfd<@B9HHMK`@M#LH3UPVql zK`m<=7#N8Q)TXsO8d$c~*3celt90k$Ag5;Msp~U4NmwqhRt*v4=p3!s#V5nk(;)`N z()Ix#Kk8Q`g0i>6kT%nNESM}ld|02{pRwY1u7dpXj62y4^bze(X(a}sa@o5|&Clsc zpP2;F?-R@)-Vi~&!^D018W_xa<;8Ua!5%w(4i)J)EgxSjM7kfsNgmKLLqo;pfXDat z>uhcx<5(SLD6n#ErhA!Io#>m9}TKSXyO=M+1JFZA3OHiP6@quU`faKG1(w%B-K{ z#76`D7rm^mtYa|Fl=JjWkDsF%x+W4?^X+t$i;39NI35f rG9mC9Le@}_HGn#v_P_Xt_AlJUK1fCA@&qhc|085(bj`3{-#y`fsh?GF literal 0 HcmV?d00001 diff --git a/img/favicon.ico b/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..be74abd69ad6a32de7375df13cab9354798e328f GIT binary patch literal 766 zcmc(dze~eV5XUd2fg&jH87YDYDQKxq1{4b-_ydP-wqS9vgGh17QXQQAwOE{VaBvi* zmu^z9t({y-&1ey8Y_x;?x+`BviV9;aRjMgZ8M*!jgkRrFqSI9;F zHyfX@Az|AvVmn~YWWZP`0&JWEY~BFm?*Vq}VD7&_%x%MP$p`D`4JMC!K|B7pt?Mmp zUJAB7rxMXS6=!P+AtLU9V)J#61WPxwipRXCHO{BJ`l{m53#=t97a!znv~vfmr|AaP zRGIT7#0FyJy3Z*hL{GQp-0TRhX8UzZ)+>%?mK0^goaX4Q;x - + + + + + + + + - - + + floativ.js: How it works + + + + + + + + + + + - - - + + - + + + + + + +
+
+

floativ.js: How it works

+
+
-
-
-
+ +
+
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vitae nunc lobortis, rutrum tortor at, sodales massa. Duis semper dolor in ex condimentum, in semper augue mattis. Nam gravida semper mi. Etiam interdum rhoncus cursus. Suspendisse potenti. Pellentesque condimentum dui lacus, sit amet facilisis diam pulvinar vitae. Quisque aliquam erat ut metus viverra, non accumsan risus feugiat. Mauris justo mauris, hendrerit non vestibulum quis, vulputate non risus. Fusce a augue quis ex tincidunt tincidunt nec ac ipsum. Praesent sed quam sed nisi bibendum iaculis sit amet eget metus. Duis tellus sem, malesuada nec eros sit amet, posuere faucibus nisl. Quisque aliquam elit orci, at venenatis felis ornare et. Aliquam vel facilisis nisl. Praesent rhoncus nunc rutrum dictum mattis. Suspendisse at urna et quam commodo aliquam. Ut mollis est aliquet, congue neque malesuada, volutpat arcu. Cras justo justo, volutpat ut ornare et, efficitur et ex. Nam interdum maximus velit vel auctor. Nulla facilisi. Donec ac rutrum felis. Duis nulla nulla, auctor et consectetur ac, tempor in leo. Nulla felis neque, egestas eget lorem ac, pretium finibus massa. Nam porttitor auctor dolor, sit amet lobortis eros faucibus blandit. Mauris commodo sapien eget pretium pharetra. Proin sodales augue ut dui euismod auctor. Curabitur semper nisi sed bibendum consectetur. Ut rutrum sapien ac condimentum vehicula. Aliquam ornare placerat erat, vel fringilla libero scelerisque in. Suspendisse aliquet urna sollicitudin massa tristique dignissim. Nulla auctor enim sapien, sed porta leo interdum ullamcorper. Mauris aliquet arcu vitae felis consequat pretium. Maecenas vitae venenatis tortor. Vestibulum eget bibendum velit, vitae pulvinar est. Pellentesque porta erat quis tellus venenatis, nec ornare orci bibendum. Mauris posuere quam risus, non iaculis purus aliquet tristique. Sed maximus mi eget mauris pretium, id cursus turpis venenatis. Aliquam tincidunt id dolor sit amet bibendum. Sed malesuada vel libero quis bibendum. Sed condimentum purus dictum, dignissim sapien nec, tempus mi. Nam at metus diam. Ut tortor mi, tincidunt id augue in, tincidunt suscipit est. In hac habitasse platea dictumst. Nullam condimentum dapibus ipsum id dignissim. Mauris vehicula erat erat, nec lacinia ipsum hendrerit sit amet. Donec at laoreet ex. Nullam et magna urna. Donec lectus ante, tristique id sem et, mattis dictum ipsum. Aliquam lacinia ac urna sed gravida. Maecenas elementum augue nec dolor scelerisque, quis porttitor odio dapibus. Duis dignissim gravida ligula, sed pharetra dolor bibendum a. Vivamus fringilla turpis eget bibendum elementum. Curabitur sit amet lacinia turpis, a fermentum nunc. Suspendisse massa enim, tempor non neque sit amet, ornare interdum enim. Sed suscipit volutpat metus, vitae accumsan nulla egestas et. Proin aliquam, ex pretium imperdiet luctus, ipsum diam volutpat elit, id interdum lectus mi vitae massa. Curabitur felis ex, auctor in augue id, aliquet mattis velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi et efficitur velit, non gravida purus. Phasellus eget leo efficitur, lacinia quam tempor, gravida tellus. Nullam bibendum eget nibh vitae vestibulum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sit amet neque urna. Phasellus eget semper ipsum. Pellentesque at porttitor elit. In at sapien sed lectus fermentum pulvinar eu eget justo. Suspendisse vitae magna velit. Maecenas vulputate volutpat sapien, non iaculis elit. Sed ac iaculis urna. Nunc porta arcu eget commodo porta. Mauris quis pulvinar est. Maecenas a commodo tortor, a dapibus nunc. Nunc maximus, erat vitae ornare sodales, ex nisi congue risus, eu tempor quam arcu non magna. Nunc fermentum, velit at efficitur dapibus, ex erat sollicitudin diam, quis volutpat massa nunc at orci. Sed sit amet orci nec neque cursus vestibulum. Sed vehicula euismod sapien et mattis. Quisque aliquet fermentum nisl a interdum. Etiam elementum eu mi vel sodales. Duis efficitur tincidunt lacus. In id finibus purus, non egestas dolor. Etiam ut tincidunt nisi, imperdiet dignissim neque. Donec eu ipsum sit amet purus viverra venenatis ac id velit. Quisque porta dolor vel tincidunt aliquet. Morbi et porta leo. Proin augue lorem, scelerisque vitae metus volutpat, congue auctor leo. Praesent convallis ante fermentum ipsum mollis, in sodales lacus vehicula. Mauris convallis tempor urna quis sodales. Sed auctor nisl non ex lobortis rhoncus. Suspendisse suscipit leo vitae nulla pretium laoreet. Praesent pulvinar mollis felis, luctus efficitur augue convallis et. Sed pharetra velit mi, ut suscipit erat convallis in. Pellentesque fermentum sodales diam, et efficitur libero fringilla sit amet. Quisque a ultrices tellus, et pretium lacus. Suspendisse porta risus vel magna hendrerit laoreet. Quisque dictum, quam in blandit pulvinar, massa orci molestie erat, in ultrices odio magna eu turpis. Donec mi tortor, posuere et malesuada sed, facilisis at nibh. Phasellus sed pretium tellus, tristique mollis diam. Curabitur vehicula est ut massa molestie, eget venenatis neque aliquam. Donec pellentesque felis erat, suscipit pharetra nunc ullamcorper a. In hac habitasse platea dictumst. Nam posuere nisi enim, vel pulvinar tellus viverra at. Pellentesque sit amet ipsum at diam vestibulum dapibus ut congue libero. Etiam fermentum odio nec sollicitudin hendrerit. Duis iaculis lacus quis erat tristique dapibus. Pellentesque rutrum odio nulla, at imperdiet quam ultrices at. Integer pharetra in magna sed gravida. Fusce blandit odio posuere nulla porta cursus. Donec a ligula venenatis, rutrum risus id, aliquet nisl. Vestibulum dignissim massa ac sem vulputate, ut condimentum dolor tristique. Maecenas sed lorem hendrerit, venenatis lorem quis, mollis erat. Duis feugiat commodo ante, in dignissim purus blandit in. Curabitur rhoncus aliquet orci, vel eleifend lacus tincidunt ut. Mauris velit lorem, blandit ut porta id, convallis ac nisl. Ut felis lorem, rutrum egestas sodales scelerisque, sodales elementum magna. Ut sed pellentesque enim. Nulla consequat eget ipsum quis tempus. Etiam scelerisque eu ipsum at molestie. Nam ut sem blandit, sagittis nisl eu, porttitor odio. Aliquam neque augue, tincidunt nec justo eget, sollicitudin luctus urna. Ut a nulla pharetra, ullamcorper leo non, sagittis nisi. Etiam viverra ex id vehicula lobortis. Nullam malesuada volutpat neque vitae efficitur. Ut vitae dignissim justo, a volutpat augue. Nam id ante auctor nulla tincidunt finibus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nunc nibh massa, placerat nec auctor at, porttitor sodales lacus. Quisque feugiat elit leo, non mollis massa rutrum iaculis. Aliquam facilisis mauris non justo imperdiet rhoncus. Nam accumsan, velit et commodo viverra, metus nisl tristique diam, eget lacinia leo nibh et nulla. Sed convallis ipsum eget tellus placerat, at mollis velit volutpat. Pellentesque nibh mauris, feugiat quis suscipit quis, finibus vitae nulla. Quisque in ipsum feugiat, laoreet ante in, viverra ante. Aliquam erat volutpat. Fusce maximus tellus sit amet mauris pulvinar feugiat. Nullam posuere sit amet est ac tincidunt. Suspendisse purus magna, hendrerit eu suscipit eu, vulputate sed magna. Donec molestie ac velit quis placerat. Phasellus varius nisl ligula, sit amet convallis eros congue non. Sed tristique, nulla vel lobortis facilisis, metus sem pulvinar ligula, in pulvinar tortor nisl vitae urna. Sed eget diam ante. Duis pharetra neque vel vulputate maximus. Nullam at turpis finibus, pulvinar ligula id, finibus sapien. Sed interdum dui eget tortor eleifend dictum. Nam in metus ut dolor accumsan lacinia ac id velit. Aenean consequat urna eros, sed pharetra augue molestie id. Nunc volutpat purus a elit pretium, sed laoreet ex fermentum. Mauris accumsan odio id tellus placerat, sed aliquam est tristique. Donec vitae rutrum enim. Vestibulum at suscipit nibh. Ut ut tincidunt turpis. Ut semper dictum dolor a lobortis. Vestibulum eu rutrum ante, ac tincidunt tellus. Vivamus quis dignissim mauris. Phasellus sed magna vitae est tincidunt pretium. In sagittis viverra dui at semper. Etiam accumsan fermentum tortor in egestas. Praesent venenatis turpis a metus vehicula scelerisque. Mauris a tellus eu sem varius dapibus. Nullam sit amet tempus mi, vitae dapibus enim. Suspendisse feugiat nisi non aliquet posuere. Curabitur sagittis at nunc vitae maximus. Proin pharetra mi velit, quis commodo ipsum efficitur id. Donec luctus lacus mauris, nec mattis felis suscipit sit amet. Proin vitae suscipit nulla, sed porta tortor. Curabitur feugiat vehicula magna sed consequat. Mauris aliquam ex in venenatis efficitur. Quisque vitae mi mauris. Nunc condimentum metus sit amet mi malesuada consectetur. Cras lacinia ligula a viverra suscipit. Ut a gravida leo. Nulla vitae aliquet augue. Maecenas porta orci eget nunc mattis elementum. Morbi pharetra ex id tempus congue. Phasellus lectus libero, volutpat vel risus sed, mattis suscipit odio. Aliquam interdum lectus ut nisi lacinia, eget cursus elit mattis. Nullam gravida justo id turpis tempus pretium. Nullam aliquam viverra eros ut fermentum. Etiam augue dolor, tristique non sem eget, scelerisque finibus lorem. In quis varius elit. Nam cursus, erat nec elementum suscipit, felis felis feugiat dolor, id convallis sem odio non dolor. Ut interdum neque mauris, in ultricies ex consectetur auctor. Donec eleifend libero vel arcu feugiat lobortis. Vivamus vulputate mattis ante, eget eleifend massa. Vestibulum tincidunt scelerisque mattis. Nullam quis ligula sed lectus dapibus mattis nec quis est. Nunc scelerisque tortor metus, in sagittis est porta quis. Nunc lectus enim, tristique id pellentesque ac, congue eget magna. Proin id nunc ligula. Phasellus placerat ut erat at scelerisque. Duis nec lacinia dui. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac est in lectus posuere porttitor. Curabitur semper leo eget feugiat ullamcorper. Suspendisse aliquet erat sed magna vulputate dignissim. Nam nec ex semper, hendrerit libero ac, ullamcorper diam. Donec facilisis a justo vel efficitur. Duis tempus cursus felis, id porttitor tellus dapibus et. Aliquam sollicitudin enim venenatis sapien aliquet eleifend. Sed sagittis mi nec odio sollicitudin interdum. Duis vulputate in nulla fermentum tempus. In aliquet velit a nunc congue egestas. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In ut justo porta, volutpat turpis sit amet, convallis eros. Fusce nec maximus est, sed dignissim odio. Ut eu pellentesque mauris. Cras pretium iaculis mi, pulvinar blandit nunc imperdiet id. Mauris condimentum in nibh eget maximus. Sed lobortis dolor ut vulputate hendrerit. Pellentesque sodales efficitur tortor, sit amet luctus ipsum accumsan quis. In nibh arcu, aliquet aliquam finibus at, suscipit eget est. Donec tincidunt velit quam, dapibus facilisis nibh luctus nec. Pellentesque sagittis viverra leo, quis finibus dolor aliquet quis. Aenean dignissim imperdiet nisi, at tristique mi eleifend non. Suspendisse ex turpis, convallis vel bibendum eu, fringilla eu lorem. Aliquam lacus mauris, luctus vitae tincidunt quis, placerat ac mi. Aenean scelerisque venenatis felis dignissim faucibus. Pellentesque a consectetur metus, at facilisis mauris. Proin vehicula hendrerit magna, eget dictum dui sollicitudin eu. Vestibulum fermentum ex nec ultricies vulputate. Vestibulum augue leo, iaculis ac consequat sed, dapibus eget ipsum. Maecenas lorem eros, dignissim id porta viverra, laoreet at ante. Mauris eu aliquet nunc. Phasellus rhoncus condimentum arcu, vitae iaculis ipsum lobortis et. Morbi elementum magna ac nisi cursus convallis. Mauris commodo posuere ipsum. Curabitur pharetra nulla eget nunc vulputate malesuada.

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vitae nunc lobortis, rutrum tortor at, sodales massa. Duis semper dolor in ex condimentum, in semper augue mattis. Nam gravida semper mi. Etiam interdum rhoncus cursus. Suspendisse potenti. Pellentesque condimentum dui lacus, sit amet facilisis diam pulvinar vitae. Quisque aliquam erat ut metus viverra, non accumsan risus feugiat. Mauris justo mauris, hendrerit non vestibulum quis, vulputate non risus. Fusce a augue quis ex tincidunt tincidunt nec ac ipsum. Praesent sed quam sed nisi bibendum iaculis sit amet eget metus. Duis tellus sem, malesuada nec eros sit amet, posuere faucibus nisl. Quisque aliquam elit orci, at venenatis felis ornare et. Aliquam vel facilisis nisl. Praesent rhoncus nunc rutrum dictum mattis. Suspendisse at urna et quam commodo aliquam. Ut mollis est aliquet, congue neque malesuada, volutpat arcu. Cras justo justo, volutpat ut ornare et, efficitur et ex. Nam interdum maximus velit vel auctor. Nulla facilisi. Donec ac rutrum felis. Duis nulla nulla, auctor et consectetur ac, tempor in leo. Nulla felis neque, egestas eget lorem ac, pretium finibus massa. Nam porttitor auctor dolor, sit amet lobortis eros faucibus blandit. Mauris commodo sapien eget pretium pharetra. Proin sodales augue ut dui euismod auctor. Curabitur semper nisi sed bibendum consectetur. Ut rutrum sapien ac condimentum vehicula. Aliquam ornare placerat erat, vel fringilla libero scelerisque in. Suspendisse aliquet urna sollicitudin massa tristique dignissim. Nulla auctor enim sapien, sed porta leo interdum ullamcorper. Mauris aliquet arcu vitae felis consequat pretium. Maecenas vitae venenatis tortor. Vestibulum eget bibendum velit, vitae pulvinar est. Pellentesque porta erat quis tellus venenatis, nec ornare orci bibendum. Mauris posuere quam risus, non iaculis purus aliquet tristique. Sed maximus mi eget mauris pretium, id cursus turpis venenatis. Aliquam tincidunt id dolor sit amet bibendum. Sed malesuada vel libero quis bibendum. Sed condimentum purus dictum, dignissim sapien nec, tempus mi. Nam at metus diam. Ut tortor mi, tincidunt id augue in, tincidunt suscipit est. In hac habitasse platea dictumst. Nullam condimentum dapibus ipsum id dignissim. Mauris vehicula erat erat, nec lacinia ipsum hendrerit sit amet. Donec at laoreet ex. Nullam et magna urna. Donec lectus ante, tristique id sem et, mattis dictum ipsum. Aliquam lacinia ac urna sed gravida. Maecenas elementum augue nec dolor scelerisque, quis porttitor odio dapibus. Duis dignissim gravida ligula, sed pharetra dolor bibendum a. Vivamus fringilla turpis eget bibendum elementum. Curabitur sit amet lacinia turpis, a fermentum nunc. Suspendisse massa enim, tempor non neque sit amet, ornare interdum enim. Sed suscipit volutpat metus, vitae accumsan nulla egestas et. Proin aliquam, ex pretium imperdiet luctus, ipsum diam volutpat elit, id interdum lectus mi vitae massa. Curabitur felis ex, auctor in augue id, aliquet mattis velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi et efficitur velit, non gravida purus. Phasellus eget leo efficitur, lacinia quam tempor, gravida tellus. Nullam bibendum eget nibh vitae vestibulum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sit amet neque urna. Phasellus eget semper ipsum. Pellentesque at porttitor elit. In at sapien sed lectus fermentum pulvinar eu eget justo. Suspendisse vitae magna velit. Maecenas vulputate volutpat sapien, non iaculis elit. Sed ac iaculis urna. Nunc porta arcu eget commodo porta. Mauris quis pulvinar est. Maecenas a commodo tortor, a dapibus nunc. Nunc maximus, erat vitae ornare sodales, ex nisi congue risus, eu tempor quam arcu non magna. Nunc fermentum, velit at efficitur dapibus, ex erat sollicitudin diam, quis volutpat massa nunc at orci. Sed sit amet orci nec neque cursus vestibulum. Sed vehicula euismod sapien et mattis. Quisque aliquet fermentum nisl a interdum. Etiam elementum eu mi vel sodales. Duis efficitur tincidunt lacus. In id finibus purus, non egestas dolor. Etiam ut tincidunt nisi, imperdiet dignissim neque. Donec eu ipsum sit amet purus viverra venenatis ac id velit. Quisque porta dolor vel tincidunt aliquet. Morbi et porta leo. Proin augue lorem, scelerisque vitae metus volutpat, congue auctor leo. Praesent convallis ante fermentum ipsum mollis, in sodales lacus vehicula. Mauris convallis tempor urna quis sodales. Sed auctor nisl non ex lobortis rhoncus. Suspendisse suscipit leo vitae nulla pretium laoreet. Praesent pulvinar mollis felis, luctus efficitur augue convallis et. Sed pharetra velit mi, ut suscipit erat convallis in. Pellentesque fermentum sodales diam, et efficitur libero fringilla sit amet. Quisque a ultrices tellus, et pretium lacus. Suspendisse porta risus vel magna hendrerit laoreet. Quisque dictum, quam in blandit pulvinar, massa orci molestie erat, in ultrices odio magna eu turpis. Donec mi tortor, posuere et malesuada sed, facilisis at nibh. Phasellus sed pretium tellus, tristique mollis diam. Curabitur vehicula est ut massa molestie, eget venenatis neque aliquam. Donec pellentesque felis erat, suscipit pharetra nunc ullamcorper a. In hac habitasse platea dictumst. Nam posuere nisi enim, vel pulvinar tellus viverra at. Pellentesque sit amet ipsum at diam vestibulum dapibus ut congue libero. Etiam fermentum odio nec sollicitudin hendrerit. Duis iaculis lacus quis erat tristique dapibus. Pellentesque rutrum odio nulla, at imperdiet quam ultrices at. Integer pharetra in magna sed gravida. Fusce blandit odio posuere nulla porta cursus. Donec a ligula venenatis, rutrum risus id, aliquet nisl. Vestibulum dignissim massa ac sem vulputate, ut condimentum dolor tristique. Maecenas sed lorem hendrerit, venenatis lorem quis, mollis erat. Duis feugiat commodo ante, in dignissim purus blandit in. Curabitur rhoncus aliquet orci, vel eleifend lacus tincidunt ut. Mauris velit lorem, blandit ut porta id, convallis ac nisl. Ut felis lorem, rutrum egestas sodales scelerisque, sodales elementum magna. Ut sed pellentesque enim. Nulla consequat eget ipsum quis tempus. Etiam scelerisque eu ipsum at molestie. Nam ut sem blandit, sagittis nisl eu, porttitor odio. Aliquam neque augue, tincidunt nec justo eget, sollicitudin luctus urna. Ut a nulla pharetra, ullamcorper leo non, sagittis nisi. Etiam viverra ex id vehicula lobortis. Nullam malesuada volutpat neque vitae efficitur. Ut vitae dignissim justo, a volutpat augue. Nam id ante auctor nulla tincidunt finibus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nunc nibh massa, placerat nec auctor at, porttitor sodales lacus. Quisque feugiat elit leo, non mollis massa rutrum iaculis. Aliquam facilisis mauris non justo imperdiet rhoncus. Nam accumsan, velit et commodo viverra, metus nisl tristique diam, eget lacinia leo nibh et nulla. Sed convallis ipsum eget tellus placerat, at mollis velit volutpat. Pellentesque nibh mauris, feugiat quis suscipit quis, finibus vitae nulla. Quisque in ipsum feugiat, laoreet ante in, viverra ante. Aliquam erat volutpat. Fusce maximus tellus sit amet mauris pulvinar feugiat. Nullam posuere sit amet est ac tincidunt. Suspendisse purus magna, hendrerit eu suscipit eu, vulputate sed magna. Donec molestie ac velit quis placerat. Phasellus varius nisl ligula, sit amet convallis eros congue non. Sed tristique, nulla vel lobortis facilisis, metus sem pulvinar ligula, in pulvinar tortor nisl vitae urna. Sed eget diam ante. Duis pharetra neque vel vulputate maximus. Nullam at turpis finibus, pulvinar ligula id, finibus sapien. Sed interdum dui eget tortor eleifend dictum. Nam in metus ut dolor accumsan lacinia ac id velit. Aenean consequat urna eros, sed pharetra augue molestie id. Nunc volutpat purus a elit pretium, sed laoreet ex fermentum. Mauris accumsan odio id tellus placerat, sed aliquam est tristique. Donec vitae rutrum enim. Vestibulum at suscipit nibh. Ut ut tincidunt turpis. Ut semper dictum dolor a lobortis. Vestibulum eu rutrum ante, ac tincidunt tellus. Vivamus quis dignissim mauris. Phasellus sed magna vitae est tincidunt pretium. In sagittis viverra dui at semper. Etiam accumsan fermentum tortor in egestas. Praesent venenatis turpis a metus vehicula scelerisque. Mauris a tellus eu sem varius dapibus. Nullam sit amet tempus mi, vitae dapibus enim. Suspendisse feugiat nisi non aliquet posuere. Curabitur sagittis at nunc vitae maximus. Proin pharetra mi velit, quis commodo ipsum efficitur id. Donec luctus lacus mauris, nec mattis felis suscipit sit amet. Proin vitae suscipit nulla, sed porta tortor. Curabitur feugiat vehicula magna sed consequat. Mauris aliquam ex in venenatis efficitur. Quisque vitae mi mauris. Nunc condimentum metus sit amet mi malesuada consectetur. Cras lacinia ligula a viverra suscipit. Ut a gravida leo. Nulla vitae aliquet augue. Maecenas porta orci eget nunc mattis elementum. Morbi pharetra ex id tempus congue. Phasellus lectus libero, volutpat vel risus sed, mattis suscipit odio. Aliquam interdum lectus ut nisi lacinia, eget cursus elit mattis. Nullam gravida justo id turpis tempus pretium. Nullam aliquam viverra eros ut fermentum. Etiam augue dolor, tristique non sem eget, scelerisque finibus lorem. In quis varius elit. Nam cursus, erat nec elementum suscipit, felis felis feugiat dolor, id convallis sem odio non dolor. Ut interdum neque mauris, in ultricies ex consectetur auctor. Donec eleifend libero vel arcu feugiat lobortis. Vivamus vulputate mattis ante, eget eleifend massa. Vestibulum tincidunt scelerisque mattis. Nullam quis ligula sed lectus dapibus mattis nec quis est. Nunc scelerisque tortor metus, in sagittis est porta quis. Nunc lectus enim, tristique id pellentesque ac, congue eget magna. Proin id nunc ligula. Phasellus placerat ut erat at scelerisque. Duis nec lacinia dui. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac est in lectus posuere porttitor. Curabitur semper leo eget feugiat ullamcorper. Suspendisse aliquet erat sed magna vulputate dignissim. Nam nec ex semper, hendrerit libero ac, ullamcorper diam. Donec facilisis a justo vel efficitur. Duis tempus cursus felis, id porttitor tellus dapibus et. Aliquam sollicitudin enim venenatis sapien aliquet eleifend. Sed sagittis mi nec odio sollicitudin interdum. Duis vulputate in nulla fermentum tempus. In aliquet velit a nunc congue egestas. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In ut justo porta, volutpat turpis sit amet, convallis eros. Fusce nec maximus est, sed dignissim odio. Ut eu pellentesque mauris. Cras pretium iaculis mi, pulvinar blandit nunc imperdiet id. Mauris condimentum in nibh eget maximus. Sed lobortis dolor ut vulputate hendrerit. Pellentesque sodales efficitur tortor, sit amet luctus ipsum accumsan quis. In nibh arcu, aliquet aliquam finibus at, suscipit eget est. Donec tincidunt velit quam, dapibus facilisis nibh luctus nec. Pellentesque sagittis viverra leo, quis finibus dolor aliquet quis. Aenean dignissim imperdiet nisi, at tristique mi eleifend non. Suspendisse ex turpis, convallis vel bibendum eu, fringilla eu lorem. Aliquam lacus mauris, luctus vitae tincidunt quis, placerat ac mi. Aenean scelerisque venenatis felis dignissim faucibus. Pellentesque a consectetur metus, at facilisis mauris. Proin vehicula hendrerit magna, eget dictum dui sollicitudin eu. Vestibulum fermentum ex nec ultricies vulputate. Vestibulum augue leo, iaculis ac consequat sed, dapibus eget ipsum. Maecenas lorem eros, dignissim id porta viverra, laoreet at ante. Mauris eu aliquet nunc. Phasellus rhoncus condimentum arcu, vitae iaculis ipsum lobortis et. Morbi elementum magna ac nisi cursus convallis. Mauris commodo posuere ipsum. Curabitur pharetra nulla eget nunc vulputate malesuada. + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vitae nunc lobortis, rutrum tortor at, sodales massa. Duis semper dolor in ex condimentum, in semper augue mattis. Nam gravida semper mi. Etiam interdum rhoncus cursus. Suspendisse potenti. Pellentesque condimentum dui lacus, sit amet facilisis diam pulvinar vitae. Quisque aliquam erat ut metus viverra, non accumsan risus feugiat. Mauris justo mauris, hendrerit non vestibulum quis, vulputate non risus. Fusce a augue quis ex tincidunt tincidunt nec ac ipsum. Praesent sed quam sed nisi bibendum iaculis sit amet eget metus. Duis tellus sem, malesuada nec eros sit amet, posuere faucibus nisl. Quisque aliquam elit orci, at venenatis felis ornare et. Aliquam vel facilisis nisl. Praesent rhoncus nunc rutrum dictum mattis. Suspendisse at urna et quam commodo aliquam. Ut mollis est aliquet, congue neque malesuada, volutpat arcu. Cras justo justo, volutpat ut ornare et, efficitur et ex. Nam interdum maximus velit vel auctor. Nulla facilisi. Donec ac rutrum felis. Duis nulla nulla, auctor et consectetur ac, tempor in leo. Nulla felis neque, egestas eget lorem ac, pretium finibus massa. Nam porttitor auctor dolor, sit amet lobortis eros faucibus blandit. Mauris commodo sapien eget pretium pharetra. Proin sodales augue ut dui euismod auctor. Curabitur semper nisi sed bibendum consectetur. Ut rutrum sapien ac condimentum vehicula. Aliquam ornare placerat erat, vel fringilla libero scelerisque in. Suspendisse aliquet urna sollicitudin massa tristique dignissim. Nulla auctor enim sapien, sed porta leo interdum ullamcorper. Mauris aliquet arcu vitae felis consequat pretium. Maecenas vitae venenatis tortor. Vestibulum eget bibendum velit, vitae pulvinar est. Pellentesque porta erat quis tellus venenatis, nec ornare orci bibendum. Mauris posuere quam risus, non iaculis purus aliquet tristique. Sed maximus mi eget mauris pretium, id cursus turpis venenatis. Aliquam tincidunt id dolor sit amet bibendum. Sed malesuada vel libero quis bibendum. Sed condimentum purus dictum, dignissim sapien nec, tempus mi. Nam at metus diam. Ut tortor mi, tincidunt id augue in, tincidunt suscipit est. In hac habitasse platea dictumst. Nullam condimentum dapibus ipsum id dignissim. Mauris vehicula erat erat, nec lacinia ipsum hendrerit sit amet. Donec at laoreet ex. Nullam et magna urna. Donec lectus ante, tristique id sem et, mattis dictum ipsum. Aliquam lacinia ac urna sed gravida. Maecenas elementum augue nec dolor scelerisque, quis porttitor odio dapibus. Duis dignissim gravida ligula, sed pharetra dolor bibendum a. Vivamus fringilla turpis eget bibendum elementum. Curabitur sit amet lacinia turpis, a fermentum nunc. Suspendisse massa enim, tempor non neque sit amet, ornare interdum enim. Sed suscipit volutpat metus, vitae accumsan nulla egestas et. Proin aliquam, ex pretium imperdiet luctus, ipsum diam volutpat elit, id interdum lectus mi vitae massa. Curabitur felis ex, auctor in augue id, aliquet mattis velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi et efficitur velit, non gravida purus. Phasellus eget leo efficitur, lacinia quam tempor, gravida tellus. Nullam bibendum eget nibh vitae vestibulum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sit amet neque urna. Phasellus eget semper ipsum. Pellentesque at porttitor elit. In at sapien sed lectus fermentum pulvinar eu eget justo. Suspendisse vitae magna velit. Maecenas vulputate volutpat sapien, non iaculis elit. Sed ac iaculis urna. Nunc porta arcu eget commodo porta. Mauris quis pulvinar est. Maecenas a commodo tortor, a dapibus nunc. Nunc maximus, erat vitae ornare sodales, ex nisi congue risus, eu tempor quam arcu non magna. Nunc fermentum, velit at efficitur dapibus, ex erat sollicitudin diam, quis volutpat massa nunc at orci. Sed sit amet orci nec neque cursus vestibulum. Sed vehicula euismod sapien et mattis. Quisque aliquet fermentum nisl a interdum. Etiam elementum eu mi vel sodales. Duis efficitur tincidunt lacus. In id finibus purus, non egestas dolor. Etiam ut tincidunt nisi, imperdiet dignissim neque. Donec eu ipsum sit amet purus viverra venenatis ac id velit. Quisque porta dolor vel tincidunt aliquet. Morbi et porta leo. Proin augue lorem, scelerisque vitae metus volutpat, congue auctor leo. Praesent convallis ante fermentum ipsum mollis, in sodales lacus vehicula. Mauris convallis tempor urna quis sodales. Sed auctor nisl non ex lobortis rhoncus. Suspendisse suscipit leo vitae nulla pretium laoreet. Praesent pulvinar mollis felis, luctus efficitur augue convallis et. Sed pharetra velit mi, ut suscipit erat convallis in. Pellentesque fermentum sodales diam, et efficitur libero fringilla sit amet. Quisque a ultrices tellus, et pretium lacus. Suspendisse porta risus vel magna hendrerit laoreet. Quisque dictum, quam in blandit pulvinar, massa orci molestie erat, in ultrices odio magna eu turpis. Donec mi tortor, posuere et malesuada sed, facilisis at nibh. Phasellus sed pretium tellus, tristique mollis diam. Curabitur vehicula est ut massa molestie, eget venenatis neque aliquam. Donec pellentesque felis erat, suscipit pharetra nunc ullamcorper a. In hac habitasse platea dictumst. Nam posuere nisi enim, vel pulvinar tellus viverra at. Pellentesque sit amet ipsum at diam vestibulum dapibus ut congue libero. Etiam fermentum odio nec sollicitudin hendrerit. Duis iaculis lacus quis erat tristique dapibus. Pellentesque rutrum odio nulla, at imperdiet quam ultrices at. Integer pharetra in magna sed gravida. Fusce blandit odio posuere nulla porta cursus. Donec a ligula venenatis, rutrum risus id, aliquet nisl. Vestibulum dignissim massa ac sem vulputate, ut condimentum dolor tristique. Maecenas sed lorem hendrerit, venenatis lorem quis, mollis erat. Duis feugiat commodo ante, in dignissim purus blandit in. Curabitur rhoncus aliquet orci, vel eleifend lacus tincidunt ut. Mauris velit lorem, blandit ut porta id, convallis ac nisl. Ut felis lorem, rutrum egestas sodales scelerisque, sodales elementum magna. Ut sed pellentesque enim. Nulla consequat eget ipsum quis tempus. Etiam scelerisque eu ipsum at molestie. Nam ut sem blandit, sagittis nisl eu, porttitor odio. Aliquam neque augue, tincidunt nec justo eget, sollicitudin luctus urna. Ut a nulla pharetra, ullamcorper leo non, sagittis nisi. Etiam viverra ex id vehicula lobortis. Nullam malesuada volutpat neque vitae efficitur. Ut vitae dignissim justo, a volutpat augue. Nam id ante auctor nulla tincidunt finibus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nunc nibh massa, placerat nec auctor at, porttitor sodales lacus. Quisque feugiat elit leo, non mollis massa rutrum iaculis. Aliquam facilisis mauris non justo imperdiet rhoncus. Nam accumsan, velit et commodo viverra, metus nisl tristique diam, eget lacinia leo nibh et nulla. Sed convallis ipsum eget tellus placerat, at mollis velit volutpat. Pellentesque nibh mauris, feugiat quis suscipit quis, finibus vitae nulla. Quisque in ipsum feugiat, laoreet ante in, viverra ante. Aliquam erat volutpat. Fusce maximus tellus sit amet mauris pulvinar feugiat. Nullam posuere sit amet est ac tincidunt. Suspendisse purus magna, hendrerit eu suscipit eu, vulputate sed magna. Donec molestie ac velit quis placerat. Phasellus varius nisl ligula, sit amet convallis eros congue non. Sed tristique, nulla vel lobortis facilisis, metus sem pulvinar ligula, in pulvinar tortor nisl vitae urna. Sed eget diam ante. Duis pharetra neque vel vulputate maximus. Nullam at turpis finibus, pulvinar ligula id, finibus sapien. Sed interdum dui eget tortor eleifend dictum. Nam in metus ut dolor accumsan lacinia ac id velit. Aenean consequat urna eros, sed pharetra augue molestie id. Nunc volutpat purus a elit pretium, sed laoreet ex fermentum. Mauris accumsan odio id tellus placerat, sed aliquam est tristique. Donec vitae rutrum enim. Vestibulum at suscipit nibh. Ut ut tincidunt turpis. Ut semper dictum dolor a lobortis. Vestibulum eu rutrum ante, ac tincidunt tellus. Vivamus quis dignissim mauris. Phasellus sed magna vitae est tincidunt pretium. In sagittis viverra dui at semper. Etiam accumsan fermentum tortor in egestas. Praesent venenatis turpis a metus vehicula scelerisque. Mauris a tellus eu sem varius dapibus. Nullam sit amet tempus mi, vitae dapibus enim. Suspendisse feugiat nisi non aliquet posuere. Curabitur sagittis at nunc vitae maximus. Proin pharetra mi velit, quis commodo ipsum efficitur id. Donec luctus lacus mauris, nec mattis felis suscipit sit amet. Proin vitae suscipit nulla, sed porta tortor. Curabitur feugiat vehicula magna sed consequat. Mauris aliquam ex in venenatis efficitur. Quisque vitae mi mauris. Nunc condimentum metus sit amet mi malesuada consectetur. Cras lacinia ligula a viverra suscipit. Ut a gravida leo. Nulla vitae aliquet augue. Maecenas porta orci eget nunc mattis elementum. Morbi pharetra ex id tempus congue. Phasellus lectus libero, volutpat vel risus sed, mattis suscipit odio. Aliquam interdum lectus ut nisi lacinia, eget cursus elit mattis. Nullam gravida justo id turpis tempus pretium. Nullam aliquam viverra eros ut fermentum. Etiam augue dolor, tristique non sem eget, scelerisque finibus lorem. In quis varius elit. Nam cursus, erat nec elementum suscipit, felis felis feugiat dolor, id convallis sem odio non dolor. Ut interdum neque mauris, in ultricies ex consectetur auctor. Donec eleifend libero vel arcu feugiat lobortis. Vivamus vulputate mattis ante, eget eleifend massa. Vestibulum tincidunt scelerisque mattis. Nullam quis ligula sed lectus dapibus mattis nec quis est. Nunc scelerisque tortor metus, in sagittis est porta quis. Nunc lectus enim, tristique id pellentesque ac, congue eget magna. Proin id nunc ligula. Phasellus placerat ut erat at scelerisque. Duis nec lacinia dui. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac est in lectus posuere porttitor. Curabitur semper leo eget feugiat ullamcorper. Suspendisse aliquet erat sed magna vulputate dignissim. Nam nec ex semper, hendrerit libero ac, ullamcorper diam. Donec facilisis a justo vel efficitur. Duis tempus cursus felis, id porttitor tellus dapibus et. Aliquam sollicitudin enim venenatis sapien aliquet eleifend. Sed sagittis mi nec odio sollicitudin interdum. Duis vulputate in nulla fermentum tempus. In aliquet velit a nunc congue egestas. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In ut justo porta, volutpat turpis sit amet, convallis eros. Fusce nec maximus est, sed dignissim odio. Ut eu pellentesque mauris. Cras pretium iaculis mi, pulvinar blandit nunc imperdiet id. Mauris condimentum in nibh eget maximus. Sed lobortis dolor ut vulputate hendrerit. Pellentesque sodales efficitur tortor, sit amet luctus ipsum accumsan quis. In nibh arcu, aliquet aliquam finibus at, suscipit eget est. Donec tincidunt velit quam, dapibus facilisis nibh luctus nec. Pellentesque sagittis viverra leo, quis finibus dolor aliquet quis. Aenean dignissim imperdiet nisi, at tristique mi eleifend non. Suspendisse ex turpis, convallis vel bibendum eu, fringilla eu lorem. Aliquam lacus mauris, luctus vitae tincidunt quis, placerat ac mi. Aenean scelerisque venenatis felis dignissim faucibus. Pellentesque a consectetur metus, at facilisis mauris. Proin vehicula hendrerit magna, eget dictum dui sollicitudin eu. Vestibulum fermentum ex nec ultricies vulputate. Vestibulum augue leo, iaculis ac consequat sed, dapibus eget ipsum. Maecenas lorem eros, dignissim id porta viverra, laoreet at ante. Mauris eu aliquet nunc. Phasellus rhoncus condimentum arcu, vitae iaculis ipsum lobortis et. Morbi elementum magna ac nisi cursus convallis. Mauris commodo posuere ipsum. Curabitur pharetra nulla eget nunc vulputate malesuada.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vitae nunc lobortis, rutrum tortor at, sodales massa. Duis semper dolor in ex condimentum, in semper augue mattis. Nam gravida semper mi. Etiam interdum rhoncus cursus. Suspendisse potenti. Pellentesque condimentum dui lacus, sit amet facilisis diam pulvinar vitae. Quisque aliquam erat ut metus viverra, non accumsan risus feugiat. Mauris justo mauris, hendrerit non vestibulum quis, vulputate non risus. Fusce a augue quis ex tincidunt tincidunt nec ac ipsum. Praesent sed quam sed nisi bibendum iaculis sit amet eget metus. Duis tellus sem, malesuada nec eros sit amet, posuere faucibus nisl. Quisque aliquam elit orci, at venenatis felis ornare et. Aliquam vel facilisis nisl. Praesent rhoncus nunc rutrum dictum mattis. Suspendisse at urna et quam commodo aliquam. Ut mollis est aliquet, congue neque malesuada, volutpat arcu. Cras justo justo, volutpat ut ornare et, efficitur et ex. Nam interdum maximus velit vel auctor. Nulla facilisi. Donec ac rutrum felis. Duis nulla nulla, auctor et consectetur ac, tempor in leo. Nulla felis neque, egestas eget lorem ac, pretium finibus massa. Nam porttitor auctor dolor, sit amet lobortis eros faucibus blandit. Mauris commodo sapien eget pretium pharetra. Proin sodales augue ut dui euismod auctor. Curabitur semper nisi sed bibendum consectetur. Ut rutrum sapien ac condimentum vehicula. Aliquam ornare placerat erat, vel fringilla libero scelerisque in. Suspendisse aliquet urna sollicitudin massa tristique dignissim. Nulla auctor enim sapien, sed porta leo interdum ullamcorper. Mauris aliquet arcu vitae felis consequat pretium. Maecenas vitae venenatis tortor. Vestibulum eget bibendum velit, vitae pulvinar est. Pellentesque porta erat quis tellus venenatis, nec ornare orci bibendum. Mauris posuere quam risus, non iaculis purus aliquet tristique. Sed maximus mi eget mauris pretium, id cursus turpis venenatis. Aliquam tincidunt id dolor sit amet bibendum. Sed malesuada vel libero quis bibendum. Sed condimentum purus dictum, dignissim sapien nec, tempus mi. Nam at metus diam. Ut tortor mi, tincidunt id augue in, tincidunt suscipit est. In hac habitasse platea dictumst. Nullam condimentum dapibus ipsum id dignissim. Mauris vehicula erat erat, nec lacinia ipsum hendrerit sit amet. Donec at laoreet ex. Nullam et magna urna. Donec lectus ante, tristique id sem et, mattis dictum ipsum. Aliquam lacinia ac urna sed gravida. Maecenas elementum augue nec dolor scelerisque, quis porttitor odio dapibus. Duis dignissim gravida ligula, sed pharetra dolor bibendum a. Vivamus fringilla turpis eget bibendum elementum. Curabitur sit amet lacinia turpis, a fermentum nunc. Suspendisse massa enim, tempor non neque sit amet, ornare interdum enim. Sed suscipit volutpat metus, vitae accumsan nulla egestas et. Proin aliquam, ex pretium imperdiet luctus, ipsum diam volutpat elit, id interdum lectus mi vitae massa. Curabitur felis ex, auctor in augue id, aliquet mattis velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi et efficitur velit, non gravida purus. Phasellus eget leo efficitur, lacinia quam tempor, gravida tellus. Nullam bibendum eget nibh vitae vestibulum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sit amet neque urna. Phasellus eget semper ipsum. Pellentesque at porttitor elit. In at sapien sed lectus fermentum pulvinar eu eget justo. Suspendisse vitae magna velit. Maecenas vulputate volutpat sapien, non iaculis elit. Sed ac iaculis urna. Nunc porta arcu eget commodo porta. Mauris quis pulvinar est. Maecenas a commodo tortor, a dapibus nunc. Nunc maximus, erat vitae ornare sodales, ex nisi congue risus, eu tempor quam arcu non magna. Nunc fermentum, velit at efficitur dapibus, ex erat sollicitudin diam, quis volutpat massa nunc at orci. Sed sit amet orci nec neque cursus vestibulum. Sed vehicula euismod sapien et mattis. Quisque aliquet fermentum nisl a interdum. Etiam elementum eu mi vel sodales. Duis efficitur tincidunt lacus. In id finibus purus, non egestas dolor. Etiam ut tincidunt nisi, imperdiet dignissim neque. Donec eu ipsum sit amet purus viverra venenatis ac id velit. Quisque porta dolor vel tincidunt aliquet. Morbi et porta leo. Proin augue lorem, scelerisque vitae metus volutpat, congue auctor leo. Praesent convallis ante fermentum ipsum mollis, in sodales lacus vehicula. Mauris convallis tempor urna quis sodales. Sed auctor nisl non ex lobortis rhoncus. Suspendisse suscipit leo vitae nulla pretium laoreet. Praesent pulvinar mollis felis, luctus efficitur augue convallis et. Sed pharetra velit mi, ut suscipit erat convallis in. Pellentesque fermentum sodales diam, et efficitur libero fringilla sit amet. Quisque a ultrices tellus, et pretium lacus. Suspendisse porta risus vel magna hendrerit laoreet. Quisque dictum, quam in blandit pulvinar, massa orci molestie erat, in ultrices odio magna eu turpis. Donec mi tortor, posuere et malesuada sed, facilisis at nibh. Phasellus sed pretium tellus, tristique mollis diam. Curabitur vehicula est ut massa molestie, eget venenatis neque aliquam. Donec pellentesque felis erat, suscipit pharetra nunc ullamcorper a. In hac habitasse platea dictumst. Nam posuere nisi enim, vel pulvinar tellus viverra at. Pellentesque sit amet ipsum at diam vestibulum dapibus ut congue libero. Etiam fermentum odio nec sollicitudin hendrerit. Duis iaculis lacus quis erat tristique dapibus. Pellentesque rutrum odio nulla, at imperdiet quam ultrices at. Integer pharetra in magna sed gravida. Fusce blandit odio posuere nulla porta cursus. Donec a ligula venenatis, rutrum risus id, aliquet nisl. Vestibulum dignissim massa ac sem vulputate, ut condimentum dolor tristique. Maecenas sed lorem hendrerit, venenatis lorem quis, mollis erat. Duis feugiat commodo ante, in dignissim purus blandit in. Curabitur rhoncus aliquet orci, vel eleifend lacus tincidunt ut. Mauris velit lorem, blandit ut porta id, convallis ac nisl. Ut felis lorem, rutrum egestas sodales scelerisque, sodales elementum magna. Ut sed pellentesque enim. Nulla consequat eget ipsum quis tempus. Etiam scelerisque eu ipsum at molestie. Nam ut sem blandit, sagittis nisl eu, porttitor odio. Aliquam neque augue, tincidunt nec justo eget, sollicitudin luctus urna. Ut a nulla pharetra, ullamcorper leo non, sagittis nisi. Etiam viverra ex id vehicula lobortis. Nullam malesuada volutpat neque vitae efficitur. Ut vitae dignissim justo, a volutpat augue. Nam id ante auctor nulla tincidunt finibus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nunc nibh massa, placerat nec auctor at, porttitor sodales lacus. Quisque feugiat elit leo, non mollis massa rutrum iaculis. Aliquam facilisis mauris non justo imperdiet rhoncus. Nam accumsan, velit et commodo viverra, metus nisl tristique diam, eget lacinia leo nibh et nulla. Sed convallis ipsum eget tellus placerat, at mollis velit volutpat. Pellentesque nibh mauris, feugiat quis suscipit quis, finibus vitae nulla. Quisque in ipsum feugiat, laoreet ante in, viverra ante. Aliquam erat volutpat. Fusce maximus tellus sit amet mauris pulvinar feugiat. Nullam posuere sit amet est ac tincidunt. Suspendisse purus magna, hendrerit eu suscipit eu, vulputate sed magna. Donec molestie ac velit quis placerat. Phasellus varius nisl ligula, sit amet convallis eros congue non. Sed tristique, nulla vel lobortis facilisis, metus sem pulvinar ligula, in pulvinar tortor nisl vitae urna. Sed eget diam ante. Duis pharetra neque vel vulputate maximus. Nullam at turpis finibus, pulvinar ligula id, finibus sapien. Sed interdum dui eget tortor eleifend dictum. Nam in metus ut dolor accumsan lacinia ac id velit. Aenean consequat urna eros, sed pharetra augue molestie id. Nunc volutpat purus a elit pretium, sed laoreet ex fermentum. Mauris accumsan odio id tellus placerat, sed aliquam est tristique. Donec vitae rutrum enim. Vestibulum at suscipit nibh. Ut ut tincidunt turpis. Ut semper dictum dolor a lobortis. Vestibulum eu rutrum ante, ac tincidunt tellus. Vivamus quis dignissim mauris. Phasellus sed magna vitae est tincidunt pretium. In sagittis viverra dui at semper. Etiam accumsan fermentum tortor in egestas. Praesent venenatis turpis a metus vehicula scelerisque. Mauris a tellus eu sem varius dapibus. Nullam sit amet tempus mi, vitae dapibus enim. Suspendisse feugiat nisi non aliquet posuere. Curabitur sagittis at nunc vitae maximus. Proin pharetra mi velit, quis commodo ipsum efficitur id. Donec luctus lacus mauris, nec mattis felis suscipit sit amet. Proin vitae suscipit nulla, sed porta tortor. Curabitur feugiat vehicula magna sed consequat. Mauris aliquam ex in venenatis efficitur. Quisque vitae mi mauris. Nunc condimentum metus sit amet mi malesuada consectetur. Cras lacinia ligula a viverra suscipit. Ut a gravida leo. Nulla vitae aliquet augue. Maecenas porta orci eget nunc mattis elementum. Morbi pharetra ex id tempus congue. Phasellus lectus libero, volutpat vel risus sed, mattis suscipit odio. Aliquam interdum lectus ut nisi lacinia, eget cursus elit mattis. Nullam gravida justo id turpis tempus pretium. Nullam aliquam viverra eros ut fermentum. Etiam augue dolor, tristique non sem eget, scelerisque finibus lorem. In quis varius elit. Nam cursus, erat nec elementum suscipit, felis felis feugiat dolor, id convallis sem odio non dolor. Ut interdum neque mauris, in ultricies ex consectetur auctor. Donec eleifend libero vel arcu feugiat lobortis. Vivamus vulputate mattis ante, eget eleifend massa. Vestibulum tincidunt scelerisque mattis. Nullam quis ligula sed lectus dapibus mattis nec quis est. Nunc scelerisque tortor metus, in sagittis est porta quis. Nunc lectus enim, tristique id pellentesque ac, congue eget magna. Proin id nunc ligula. Phasellus placerat ut erat at scelerisque. Duis nec lacinia dui. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac est in lectus posuere porttitor. Curabitur semper leo eget feugiat ullamcorper. Suspendisse aliquet erat sed magna vulputate dignissim. Nam nec ex semper, hendrerit libero ac, ullamcorper diam. Donec facilisis a justo vel efficitur. Duis tempus cursus felis, id porttitor tellus dapibus et. Aliquam sollicitudin enim venenatis sapien aliquet eleifend. Sed sagittis mi nec odio sollicitudin interdum. Duis vulputate in nulla fermentum tempus. In aliquet velit a nunc congue egestas. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In ut justo porta, volutpat turpis sit amet, convallis eros. Fusce nec maximus est, sed dignissim odio. Ut eu pellentesque mauris. Cras pretium iaculis mi, pulvinar blandit nunc imperdiet id. Mauris condimentum in nibh eget maximus. Sed lobortis dolor ut vulputate hendrerit. Pellentesque sodales efficitur tortor, sit amet luctus ipsum accumsan quis. In nibh arcu, aliquet aliquam finibus at, suscipit eget est. Donec tincidunt velit quam, dapibus facilisis nibh luctus nec. Pellentesque sagittis viverra leo, quis finibus dolor aliquet quis. Aenean dignissim imperdiet nisi, at tristique mi eleifend non. Suspendisse ex turpis, convallis vel bibendum eu, fringilla eu lorem. Aliquam lacus mauris, luctus vitae tincidunt quis, placerat ac mi. Aenean scelerisque venenatis felis dignissim faucibus. Pellentesque a consectetur metus, at facilisis mauris. Proin vehicula hendrerit magna, eget dictum dui sollicitudin eu. Vestibulum fermentum ex nec ultricies vulputate. Vestibulum augue leo, iaculis ac consequat sed, dapibus eget ipsum. Maecenas lorem eros, dignissim id porta viverra, laoreet at ante. Mauris eu aliquet nunc. Phasellus rhoncus condimentum arcu, vitae iaculis ipsum lobortis et. Morbi elementum magna ac nisi cursus convallis. Mauris commodo posuere ipsum. Curabitur pharetra nulla eget nunc vulputate malesuada.
-
+ + + +
+ +
+ + +
- - + + + + +
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vitae nunc lobortis, rutrum tortor at, sodales massa. Duis semper dolor in ex condimentum, in semper augue mattis. Nam gravida semper mi. Etiam interdum rhoncus cursus. Suspendisse potenti. Pellentesque condimentum dui lacus, sit amet facilisis diam pulvinar vitae. Quisque aliquam erat ut metus viverra, non accumsan risus feugiat. Mauris justo mauris, hendrerit non vestibulum quis, vulputate non risus. Fusce a augue quis ex tincidunt tincidunt nec ac ipsum. Praesent sed quam sed nisi bibendum iaculis sit amet eget metus. Duis tellus sem, malesuada nec eros sit amet, posuere faucibus nisl. Quisque aliquam elit orci, at venenatis felis ornare et. Aliquam vel facilisis nisl. Praesent rhoncus nunc rutrum dictum mattis. Suspendisse at urna et quam commodo aliquam. Ut mollis est aliquet, congue neque malesuada, volutpat arcu. Cras justo justo, volutpat ut ornare et, efficitur et ex. Nam interdum maximus velit vel auctor. Nulla facilisi. Donec ac rutrum felis. Duis nulla nulla, auctor et consectetur ac, tempor in leo. Nulla felis neque, egestas eget lorem ac, pretium finibus massa. Nam porttitor auctor dolor, sit amet lobortis eros faucibus blandit. Mauris commodo sapien eget pretium pharetra. Proin sodales augue ut dui euismod auctor. Curabitur semper nisi sed bibendum consectetur. Ut rutrum sapien ac condimentum vehicula. Aliquam ornare placerat erat, vel fringilla libero scelerisque in. Suspendisse aliquet urna sollicitudin massa tristique dignissim. Nulla auctor enim sapien, sed porta leo interdum ullamcorper. Mauris aliquet arcu vitae felis consequat pretium. Maecenas vitae venenatis tortor. Vestibulum eget bibendum velit, vitae pulvinar est. Pellentesque porta erat quis tellus venenatis, nec ornare orci bibendum. Mauris posuere quam risus, non iaculis purus aliquet tristique. Sed maximus mi eget mauris pretium, id cursus turpis venenatis. Aliquam tincidunt id dolor sit amet bibendum. Sed malesuada vel libero quis bibendum. Sed condimentum purus dictum, dignissim sapien nec, tempus mi. Nam at metus diam. Ut tortor mi, tincidunt id augue in, tincidunt suscipit est. In hac habitasse platea dictumst. Nullam condimentum dapibus ipsum id dignissim. Mauris vehicula erat erat, nec lacinia ipsum hendrerit sit amet. Donec at laoreet ex. Nullam et magna urna. Donec lectus ante, tristique id sem et, mattis dictum ipsum. Aliquam lacinia ac urna sed gravida. Maecenas elementum augue nec dolor scelerisque, quis porttitor odio dapibus. Duis dignissim gravida ligula, sed pharetra dolor bibendum a. Vivamus fringilla turpis eget bibendum elementum. Curabitur sit amet lacinia turpis, a fermentum nunc. Suspendisse massa enim, tempor non neque sit amet, ornare interdum enim. Sed suscipit volutpat metus, vitae accumsan nulla egestas et. Proin aliquam, ex pretium imperdiet luctus, ipsum diam volutpat elit, id interdum lectus mi vitae massa. Curabitur felis ex, auctor in augue id, aliquet mattis velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi et efficitur velit, non gravida purus. Phasellus eget leo efficitur, lacinia quam tempor, gravida tellus. Nullam bibendum eget nibh vitae vestibulum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sit amet neque urna. Phasellus eget semper ipsum. Pellentesque at porttitor elit. In at sapien sed lectus fermentum pulvinar eu eget justo. Suspendisse vitae magna velit. Maecenas vulputate volutpat sapien, non iaculis elit. Sed ac iaculis urna. Nunc porta arcu eget commodo porta. Mauris quis pulvinar est. Maecenas a commodo tortor, a dapibus nunc. Nunc maximus, erat vitae ornare sodales, ex nisi congue risus, eu tempor quam arcu non magna. Nunc fermentum, velit at efficitur dapibus, ex erat sollicitudin diam, quis volutpat massa nunc at orci. Sed sit amet orci nec neque cursus vestibulum. Sed vehicula euismod sapien et mattis. Quisque aliquet fermentum nisl a interdum. Etiam elementum eu mi vel sodales. Duis efficitur tincidunt lacus. In id finibus purus, non egestas dolor. Etiam ut tincidunt nisi, imperdiet dignissim neque. Donec eu ipsum sit amet purus viverra venenatis ac id velit. Quisque porta dolor vel tincidunt aliquet. Morbi et porta leo. Proin augue lorem, scelerisque vitae metus volutpat, congue auctor leo. Praesent convallis ante fermentum ipsum mollis, in sodales lacus vehicula. Mauris convallis tempor urna quis sodales. Sed auctor nisl non ex lobortis rhoncus. Suspendisse suscipit leo vitae nulla pretium laoreet. Praesent pulvinar mollis felis, luctus efficitur augue convallis et. Sed pharetra velit mi, ut suscipit erat convallis in. Pellentesque fermentum sodales diam, et efficitur libero fringilla sit amet. Quisque a ultrices tellus, et pretium lacus. Suspendisse porta risus vel magna hendrerit laoreet. Quisque dictum, quam in blandit pulvinar, massa orci molestie erat, in ultrices odio magna eu turpis. Donec mi tortor, posuere et malesuada sed, facilisis at nibh. Phasellus sed pretium tellus, tristique mollis diam. Curabitur vehicula est ut massa molestie, eget venenatis neque aliquam. Donec pellentesque felis erat, suscipit pharetra nunc ullamcorper a. In hac habitasse platea dictumst. Nam posuere nisi enim, vel pulvinar tellus viverra at. Pellentesque sit amet ipsum at diam vestibulum dapibus ut congue libero. Etiam fermentum odio nec sollicitudin hendrerit. Duis iaculis lacus quis erat tristique dapibus. Pellentesque rutrum odio nulla, at imperdiet quam ultrices at. Integer pharetra in magna sed gravida. Fusce blandit odio posuere nulla porta cursus. Donec a ligula venenatis, rutrum risus id, aliquet nisl. Vestibulum dignissim massa ac sem vulputate, ut condimentum dolor tristique. Maecenas sed lorem hendrerit, venenatis lorem quis, mollis erat. Duis feugiat commodo ante, in dignissim purus blandit in. Curabitur rhoncus aliquet orci, vel eleifend lacus tincidunt ut. Mauris velit lorem, blandit ut porta id, convallis ac nisl. Ut felis lorem, rutrum egestas sodales scelerisque, sodales elementum magna. Ut sed pellentesque enim. Nulla consequat eget ipsum quis tempus. Etiam scelerisque eu ipsum at molestie. Nam ut sem blandit, sagittis nisl eu, porttitor odio. Aliquam neque augue, tincidunt nec justo eget, sollicitudin luctus urna. Ut a nulla pharetra, ullamcorper leo non, sagittis nisi. Etiam viverra ex id vehicula lobortis. Nullam malesuada volutpat neque vitae efficitur. Ut vitae dignissim justo, a volutpat augue. Nam id ante auctor nulla tincidunt finibus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nunc nibh massa, placerat nec auctor at, porttitor sodales lacus. Quisque feugiat elit leo, non mollis massa rutrum iaculis. Aliquam facilisis mauris non justo imperdiet rhoncus. Nam accumsan, velit et commodo viverra, metus nisl tristique diam, eget lacinia leo nibh et nulla. Sed convallis ipsum eget tellus placerat, at mollis velit volutpat. Pellentesque nibh mauris, feugiat quis suscipit quis, finibus vitae nulla. Quisque in ipsum feugiat, laoreet ante in, viverra ante. Aliquam erat volutpat. Fusce maximus tellus sit amet mauris pulvinar feugiat. Nullam posuere sit amet est ac tincidunt. Suspendisse purus magna, hendrerit eu suscipit eu, vulputate sed magna. Donec molestie ac velit quis placerat. Phasellus varius nisl ligula, sit amet convallis eros congue non. Sed tristique, nulla vel lobortis facilisis, metus sem pulvinar ligula, in pulvinar tortor nisl vitae urna. Sed eget diam ante. Duis pharetra neque vel vulputate maximus. Nullam at turpis finibus, pulvinar ligula id, finibus sapien. Sed interdum dui eget tortor eleifend dictum. Nam in metus ut dolor accumsan lacinia ac id velit. Aenean consequat urna eros, sed pharetra augue molestie id. Nunc volutpat purus a elit pretium, sed laoreet ex fermentum. Mauris accumsan odio id tellus placerat, sed aliquam est tristique. Donec vitae rutrum enim. Vestibulum at suscipit nibh. Ut ut tincidunt turpis. Ut semper dictum dolor a lobortis. Vestibulum eu rutrum ante, ac tincidunt tellus. Vivamus quis dignissim mauris. Phasellus sed magna vitae est tincidunt pretium. In sagittis viverra dui at semper. Etiam accumsan fermentum tortor in egestas. Praesent venenatis turpis a metus vehicula scelerisque. Mauris a tellus eu sem varius dapibus. Nullam sit amet tempus mi, vitae dapibus enim. Suspendisse feugiat nisi non aliquet posuere. Curabitur sagittis at nunc vitae maximus. Proin pharetra mi velit, quis commodo ipsum efficitur id. Donec luctus lacus mauris, nec mattis felis suscipit sit amet. Proin vitae suscipit nulla, sed porta tortor. Curabitur feugiat vehicula magna sed consequat. Mauris aliquam ex in venenatis efficitur. Quisque vitae mi mauris. Nunc condimentum metus sit amet mi malesuada consectetur. Cras lacinia ligula a viverra suscipit. Ut a gravida leo. Nulla vitae aliquet augue. Maecenas porta orci eget nunc mattis elementum. Morbi pharetra ex id tempus congue. Phasellus lectus libero, volutpat vel risus sed, mattis suscipit odio. Aliquam interdum lectus ut nisi lacinia, eget cursus elit mattis. Nullam gravida justo id turpis tempus pretium. Nullam aliquam viverra eros ut fermentum. Etiam augue dolor, tristique non sem eget, scelerisque finibus lorem. In quis varius elit. Nam cursus, erat nec elementum suscipit, felis felis feugiat dolor, id convallis sem odio non dolor. Ut interdum neque mauris, in ultricies ex consectetur auctor. Donec eleifend libero vel arcu feugiat lobortis. Vivamus vulputate mattis ante, eget eleifend massa. Vestibulum tincidunt scelerisque mattis. Nullam quis ligula sed lectus dapibus mattis nec quis est. Nunc scelerisque tortor metus, in sagittis est porta quis. Nunc lectus enim, tristique id pellentesque ac, congue eget magna. Proin id nunc ligula. Phasellus placerat ut erat at scelerisque. Duis nec lacinia dui. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac est in lectus posuere porttitor. Curabitur semper leo eget feugiat ullamcorper. Suspendisse aliquet erat sed magna vulputate dignissim. Nam nec ex semper, hendrerit libero ac, ullamcorper diam. Donec facilisis a justo vel efficitur. Duis tempus cursus felis, id porttitor tellus dapibus et. Aliquam sollicitudin enim venenatis sapien aliquet eleifend. Sed sagittis mi nec odio sollicitudin interdum. Duis vulputate in nulla fermentum tempus. In aliquet velit a nunc congue egestas. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In ut justo porta, volutpat turpis sit amet, convallis eros. Fusce nec maximus est, sed dignissim odio. Ut eu pellentesque mauris. Cras pretium iaculis mi, pulvinar blandit nunc imperdiet id. Mauris condimentum in nibh eget maximus. Sed lobortis dolor ut vulputate hendrerit. Pellentesque sodales efficitur tortor, sit amet luctus ipsum accumsan quis. In nibh arcu, aliquet aliquam finibus at, suscipit eget est. Donec tincidunt velit quam, dapibus facilisis nibh luctus nec. Pellentesque sagittis viverra leo, quis finibus dolor aliquet quis. Aenean dignissim imperdiet nisi, at tristique mi eleifend non. Suspendisse ex turpis, convallis vel bibendum eu, fringilla eu lorem. Aliquam lacus mauris, luctus vitae tincidunt quis, placerat ac mi. Aenean scelerisque venenatis felis dignissim faucibus. Pellentesque a consectetur metus, at facilisis mauris. Proin vehicula hendrerit magna, eget dictum dui sollicitudin eu. Vestibulum fermentum ex nec ultricies vulputate. Vestibulum augue leo, iaculis ac consequat sed, dapibus eget ipsum. Maecenas lorem eros, dignissim id porta viverra, laoreet at ante. Mauris eu aliquet nunc. Phasellus rhoncus condimentum arcu, vitae iaculis ipsum lobortis et. Morbi elementum magna ac nisi cursus convallis. Mauris commodo posuere ipsum. Curabitur pharetra nulla eget nunc vulputate malesuada. @@ -68,14 +90,34 @@
- - - - + + + + - + + + + + + - + \ No newline at end of file diff --git a/js/jquery.mCustomScrollbar.js b/js/jquery.mCustomScrollbar.js deleted file mode 100644 index 5d4eacc..0000000 --- a/js/jquery.mCustomScrollbar.js +++ /dev/null @@ -1,2368 +0,0 @@ -/* -== malihu jquery custom scrollbar plugin == -Version: 3.0.9 -Plugin URI: http://manos.malihu.gr/jquery-custom-content-scroller -Author: malihu -Author URI: http://manos.malihu.gr -License: MIT License (MIT) -*/ - -/* -Copyright 2010 Manos Malihutsakis (email: manos@malihu.gr) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -/* -The code below is fairly long, fully commented and should be normally used in development. -For production, use either the minified jquery.mCustomScrollbar.min.js script or -the production-ready jquery.mCustomScrollbar.concat.min.js which contains the plugin -and dependencies (minified). -*/ - -(function(factory){ - if(typeof module!=="undefined" && module.exports){ - module.exports=factory; - }else{ - factory(jQuery,window,document); - } -}(function($){ -(function(init){ - var _rjs=typeof define==="function" && define.amd, /* RequireJS */ - _njs=typeof module !== "undefined" && module.exports, /* NodeJS */ - _dlp=("https:"==document.location.protocol) ? "https:" : "http:", /* location protocol */ - _url="cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.12/jquery.mousewheel.min.js"; - if(!_rjs){ - if(_njs){ - require("jquery-mousewheel")($); - }else{ - /* load jquery-mousewheel plugin (via CDN) if it's not present or not loaded via RequireJS - (works when mCustomScrollbar fn is called on window load) */ - $.event.special.mousewheel || $("head").append(decodeURI("%3Cscript src="+_dlp+"//"+_url+"%3E%3C/script%3E")); - } - } - init(); -}(function(){ - - /* - ---------------------------------------- - PLUGIN NAMESPACE, PREFIX, DEFAULT SELECTOR(S) - ---------------------------------------- - */ - - var pluginNS="mCustomScrollbar", - pluginPfx="mCS", - defaultSelector=".mCustomScrollbar", - - - - - - /* - ---------------------------------------- - DEFAULT OPTIONS - ---------------------------------------- - */ - - defaults={ - /* - set element/content width/height programmatically - values: boolean, pixels, percentage - option default - ------------------------------------- - setWidth false - setHeight false - */ - /* - set the initial css top property of content - values: string (e.g. "-100px", "10%" etc.) - */ - setTop:0, - /* - set the initial css left property of content - values: string (e.g. "-100px", "10%" etc.) - */ - setLeft:0, - /* - scrollbar axis (vertical and/or horizontal scrollbars) - values (string): "y", "x", "yx" - */ - axis:"y", - /* - position of scrollbar relative to content - values (string): "inside", "outside" ("outside" requires elements with position:relative) - */ - scrollbarPosition:"inside", - /* - scrolling inertia - values: integer (milliseconds) - */ - scrollInertia:950, - /* - auto-adjust scrollbar dragger length - values: boolean - */ - autoDraggerLength:true, - /* - auto-hide scrollbar when idle - values: boolean - option default - ------------------------------------- - autoHideScrollbar false - */ - /* - auto-expands scrollbar on mouse-over and dragging - values: boolean - option default - ------------------------------------- - autoExpandScrollbar false - */ - /* - always show scrollbar, even when there's nothing to scroll - values: integer (0=disable, 1=always show dragger rail and buttons, 2=always show dragger rail, dragger and buttons), boolean - */ - alwaysShowScrollbar:0, - /* - scrolling always snaps to a multiple of this number in pixels - values: integer - option default - ------------------------------------- - snapAmount null - */ - /* - when snapping, snap with this number in pixels as an offset - values: integer - */ - snapOffset:0, - /* - mouse-wheel scrolling - */ - mouseWheel:{ - /* - enable mouse-wheel scrolling - values: boolean - */ - enable:true, - /* - scrolling amount in pixels - values: "auto", integer - */ - scrollAmount:"auto", - /* - mouse-wheel scrolling axis - the default scrolling direction when both vertical and horizontal scrollbars are present - values (string): "y", "x" - */ - axis:"y", - /* - prevent the default behaviour which automatically scrolls the parent element(s) when end of scrolling is reached - values: boolean - option default - ------------------------------------- - preventDefault null - */ - /* - the reported mouse-wheel delta value. The number of lines (translated to pixels) one wheel notch scrolls. - values: "auto", integer - "auto" uses the default OS/browser value - */ - deltaFactor:"auto", - /* - normalize mouse-wheel delta to -1 or 1 (disables mouse-wheel acceleration) - values: boolean - option default - ------------------------------------- - normalizeDelta null - */ - /* - invert mouse-wheel scrolling direction - values: boolean - option default - ------------------------------------- - invert null - */ - /* - the tags that disable mouse-wheel when cursor is over them - */ - disableOver:["select","option","keygen","datalist","textarea"] - }, - /* - scrollbar buttons - */ - scrollButtons:{ - /* - enable scrollbar buttons - values: boolean - option default - ------------------------------------- - enable null - */ - /* - scrollbar buttons scrolling type - values (string): "stepless", "stepped" - */ - scrollType:"stepless", - /* - scrolling amount in pixels - values: "auto", integer - */ - scrollAmount:"auto" - /* - tabindex of the scrollbar buttons - values: false, integer - option default - ------------------------------------- - tabindex null - */ - }, - /* - keyboard scrolling - */ - keyboard:{ - /* - enable scrolling via keyboard - values: boolean - */ - enable:true, - /* - keyboard scrolling type - values (string): "stepless", "stepped" - */ - scrollType:"stepless", - /* - scrolling amount in pixels - values: "auto", integer - */ - scrollAmount:"auto" - }, - /* - enable content touch-swipe scrolling - values: boolean, integer, string (number) - integer values define the axis-specific minimum amount required for scrolling momentum - */ - contentTouchScroll:25, - /* - advanced option parameters - */ - advanced:{ - /* - auto-expand content horizontally (for "x" or "yx" axis) - values: boolean - option default - ------------------------------------- - autoExpandHorizontalScroll null - */ - /* - auto-scroll to elements with focus - */ - autoScrollOnFocus:"input,textarea,select,button,datalist,keygen,a[tabindex],area,object,[contenteditable='true']", - /* - auto-update scrollbars on content, element or viewport resize - should be true for fluid layouts/elements, adding/removing content dynamically, hiding/showing elements, content with images etc. - values: boolean - */ - updateOnContentResize:true, - /* - auto-update scrollbars each time each image inside the element is fully loaded - values: boolean - */ - updateOnImageLoad:true, - /* - auto-update scrollbars based on the amount and size changes of specific selectors - useful when you need to update the scrollbar(s) automatically, each time a type of element is added, removed or changes its size - values: boolean, string (e.g. "ul li" will auto-update scrollbars each time list-items inside the element are changed) - a value of true (boolean) will auto-update scrollbars each time any element is changed - option default - ------------------------------------- - updateOnSelectorChange null - */ - /* - extra selectors that'll release scrollbar dragging upon mouseup, pointerup, touchend etc. (e.g. "selector-1, selector-2") - option default - ------------------------------------- - releaseDraggableSelectors null - */ - /* - auto-update timeout - values: integer (milliseconds) - */ - autoUpdateTimeout:60 - }, - /* - scrollbar theme - values: string (see CSS/plugin URI for a list of ready-to-use themes) - */ - theme:"light", - /* - user defined callback functions - */ - callbacks:{ - /* - Available callbacks: - callback default - ------------------------------------- - onInit null - onScrollStart null - onScroll null - onTotalScroll null - onTotalScrollBack null - whileScrolling null - onOverflowY null - onOverflowX null - onOverflowYNone null - onOverflowXNone null - onImageLoad null - onSelectorChange null - onUpdate null - */ - onTotalScrollOffset:0, - onTotalScrollBackOffset:0, - alwaysTriggerOffsets:true - } - /* - add scrollbar(s) on all elements matching the current selector, now and in the future - values: boolean, string - string values: "on" (enable), "once" (disable after first invocation), "off" (disable) - liveSelector values: string (selector) - option default - ------------------------------------- - live false - liveSelector null - */ - }, - - - - - - /* - ---------------------------------------- - VARS, CONSTANTS - ---------------------------------------- - */ - - totalInstances=0, /* plugin instances amount */ - liveTimers={}, /* live option timers */ - oldIE=(window.attachEvent && !window.addEventListener) ? 1 : 0, /* detect IE < 9 */ - touchActive=false,touchable, /* global touch vars (for touch and pointer events) */ - /* general plugin classes */ - classes=[ - "mCSB_dragger_onDrag","mCSB_scrollTools_onDrag","mCS_img_loaded","mCS_disabled","mCS_destroyed","mCS_no_scrollbar", - "mCS-autoHide","mCS-dir-rtl","mCS_no_scrollbar_y","mCS_no_scrollbar_x","mCS_y_hidden","mCS_x_hidden","mCSB_draggerContainer", - "mCSB_buttonUp","mCSB_buttonDown","mCSB_buttonLeft","mCSB_buttonRight" - ], - - - - - - /* - ---------------------------------------- - METHODS - ---------------------------------------- - */ - - methods={ - - /* - plugin initialization method - creates the scrollbar(s), plugin data object and options - ---------------------------------------- - */ - - init:function(options){ - - var options=$.extend(true,{},defaults,options), - selector=_selector.call(this); /* validate selector */ - - /* - if live option is enabled, monitor for elements matching the current selector and - apply scrollbar(s) when found (now and in the future) - */ - if(options.live){ - var liveSelector=options.liveSelector || this.selector || defaultSelector, /* live selector(s) */ - $liveSelector=$(liveSelector); /* live selector(s) as jquery object */ - if(options.live==="off"){ - /* - disable live if requested - usage: $(selector).mCustomScrollbar({live:"off"}); - */ - removeLiveTimers(liveSelector); - return; - } - liveTimers[liveSelector]=setTimeout(function(){ - /* call mCustomScrollbar fn on live selector(s) every half-second */ - $liveSelector.mCustomScrollbar(options); - if(options.live==="once" && $liveSelector.length){ - /* disable live after first invocation */ - removeLiveTimers(liveSelector); - } - },500); - }else{ - removeLiveTimers(liveSelector); - } - - /* options backward compatibility (for versions < 3.0.0) and normalization */ - options.setWidth=(options.set_width) ? options.set_width : options.setWidth; - options.setHeight=(options.set_height) ? options.set_height : options.setHeight; - options.axis=(options.horizontalScroll) ? "x" : _findAxis(options.axis); - options.scrollInertia=options.scrollInertia>0 && options.scrollInertia<17 ? 17 : options.scrollInertia; - if(typeof options.mouseWheel!=="object" && options.mouseWheel==true){ /* old school mouseWheel option (non-object) */ - options.mouseWheel={enable:true,scrollAmount:"auto",axis:"y",preventDefault:false,deltaFactor:"auto",normalizeDelta:false,invert:false} - } - options.mouseWheel.scrollAmount=!options.mouseWheelPixels ? options.mouseWheel.scrollAmount : options.mouseWheelPixels; - options.mouseWheel.normalizeDelta=!options.advanced.normalizeMouseWheelDelta ? options.mouseWheel.normalizeDelta : options.advanced.normalizeMouseWheelDelta; - options.scrollButtons.scrollType=_findScrollButtonsType(options.scrollButtons.scrollType); - - _theme(options); /* theme-specific options */ - - /* plugin constructor */ - return $(selector).each(function(){ - - var $this=$(this); - - if(!$this.data(pluginPfx)){ /* prevent multiple instantiations */ - - /* store options and create objects in jquery data */ - $this.data(pluginPfx,{ - idx:++totalInstances, /* instance index */ - opt:options, /* options */ - scrollRatio:{y:null,x:null}, /* scrollbar to content ratio */ - overflowed:null, /* overflowed axis */ - contentReset:{y:null,x:null}, /* object to check when content resets */ - bindEvents:false, /* object to check if events are bound */ - tweenRunning:false, /* object to check if tween is running */ - sequential:{}, /* sequential scrolling object */ - langDir:$this.css("direction"), /* detect/store direction (ltr or rtl) */ - cbOffsets:null, /* object to check whether callback offsets always trigger */ - /* - object to check how scrolling events where last triggered - "internal" (default - triggered by this script), "external" (triggered by other scripts, e.g. via scrollTo method) - usage: object.data("mCS").trigger - */ - trigger:null - }); - - var d=$this.data(pluginPfx),o=d.opt, - /* HTML data attributes */ - htmlDataAxis=$this.data("mcs-axis"),htmlDataSbPos=$this.data("mcs-scrollbar-position"),htmlDataTheme=$this.data("mcs-theme"); - - if(htmlDataAxis){o.axis=htmlDataAxis;} /* usage example: data-mcs-axis="y" */ - if(htmlDataSbPos){o.scrollbarPosition=htmlDataSbPos;} /* usage example: data-mcs-scrollbar-position="outside" */ - if(htmlDataTheme){ /* usage example: data-mcs-theme="minimal" */ - o.theme=htmlDataTheme; - _theme(o); /* theme-specific options */ - } - - _pluginMarkup.call(this); /* add plugin markup */ - - $("#mCSB_"+d.idx+"_container img:not(."+classes[2]+")").addClass(classes[2]); /* flag loaded images */ - - methods.update.call(null,$this); /* call the update method */ - - } - - }); - - }, - /* ---------------------------------------- */ - - - - /* - plugin update method - updates content and scrollbar(s) values, events and status - ---------------------------------------- - usage: $(selector).mCustomScrollbar("update"); - */ - - update:function(el,cb){ - - var selector=el || _selector.call(this); /* validate selector */ - - return $(selector).each(function(){ - - var $this=$(this); - - if($this.data(pluginPfx)){ /* check if plugin has initialized */ - - var d=$this.data(pluginPfx),o=d.opt, - mCSB_container=$("#mCSB_"+d.idx+"_container"), - mCSB_dragger=[$("#mCSB_"+d.idx+"_dragger_vertical"),$("#mCSB_"+d.idx+"_dragger_horizontal")]; - - if(!mCSB_container.length){return;} - - if(d.tweenRunning){_stop($this);} /* stop any running tweens while updating */ - - /* if element was disabled or destroyed, remove class(es) */ - if($this.hasClass(classes[3])){$this.removeClass(classes[3]);} - if($this.hasClass(classes[4])){$this.removeClass(classes[4]);} - - _maxHeight.call(this); /* detect/set css max-height value */ - - _expandContentHorizontally.call(this); /* expand content horizontally */ - - if(o.axis!=="y" && !o.advanced.autoExpandHorizontalScroll){ - mCSB_container.css("width",_contentWidth(mCSB_container.children())); - } - - d.overflowed=_overflowed.call(this); /* determine if scrolling is required */ - - _scrollbarVisibility.call(this); /* show/hide scrollbar(s) */ - - /* auto-adjust scrollbar dragger length analogous to content */ - if(o.autoDraggerLength){_setDraggerLength.call(this);} - - _scrollRatio.call(this); /* calculate and store scrollbar to content ratio */ - - _bindEvents.call(this); /* bind scrollbar events */ - - /* reset scrolling position and/or events */ - var to=[Math.abs(mCSB_container[0].offsetTop),Math.abs(mCSB_container[0].offsetLeft)]; - if(o.axis!=="x"){ /* y/yx axis */ - if(!d.overflowed[0]){ /* y scrolling is not required */ - _resetContentPosition.call(this); /* reset content position */ - if(o.axis==="y"){ - _unbindEvents.call(this); - }else if(o.axis==="yx" && d.overflowed[1]){ - _scrollTo($this,to[1].toString(),{dir:"x",dur:0,overwrite:"none"}); - } - }else if(mCSB_dragger[0].height()>mCSB_dragger[0].parent().height()){ - _resetContentPosition.call(this); /* reset content position */ - }else{ /* y scrolling is required */ - _scrollTo($this,to[0].toString(),{dir:"y",dur:0,overwrite:"none"}); - d.contentReset.y=null; - } - } - if(o.axis!=="y"){ /* x/yx axis */ - if(!d.overflowed[1]){ /* x scrolling is not required */ - _resetContentPosition.call(this); /* reset content position */ - if(o.axis==="x"){ - _unbindEvents.call(this); - }else if(o.axis==="yx" && d.overflowed[0]){ - _scrollTo($this,to[0].toString(),{dir:"y",dur:0,overwrite:"none"}); - } - }else if(mCSB_dragger[1].width()>mCSB_dragger[1].parent().width()){ - _resetContentPosition.call(this); /* reset content position */ - }else{ /* x scrolling is required */ - _scrollTo($this,to[1].toString(),{dir:"x",dur:0,overwrite:"none"}); - d.contentReset.x=null; - } - } - - /* callbacks: onImageLoad, onSelectorChange, onUpdate */ - if(cb && d){ - if(cb===2 && o.callbacks.onImageLoad && typeof o.callbacks.onImageLoad==="function"){ - o.callbacks.onImageLoad.call(this); - }else if(cb===3 && o.callbacks.onSelectorChange && typeof o.callbacks.onSelectorChange==="function"){ - o.callbacks.onSelectorChange.call(this); - }else if(o.callbacks.onUpdate && typeof o.callbacks.onUpdate==="function"){ - o.callbacks.onUpdate.call(this); - } - } - - _autoUpdate.call(this); /* initialize automatic updating (for dynamic content, fluid layouts etc.) */ - - } - - }); - - }, - /* ---------------------------------------- */ - - - - /* - plugin scrollTo method - triggers a scrolling event to a specific value - ---------------------------------------- - usage: $(selector).mCustomScrollbar("scrollTo",value,options); - */ - - scrollTo:function(val,options){ - - /* prevent silly things like $(selector).mCustomScrollbar("scrollTo",undefined); */ - if(typeof val=="undefined" || val==null){return;} - - var selector=_selector.call(this); /* validate selector */ - - return $(selector).each(function(){ - - var $this=$(this); - - if($this.data(pluginPfx)){ /* check if plugin has initialized */ - - var d=$this.data(pluginPfx),o=d.opt, - /* method default options */ - methodDefaults={ - trigger:"external", /* method is by default triggered externally (e.g. from other scripts) */ - scrollInertia:o.scrollInertia, /* scrolling inertia (animation duration) */ - scrollEasing:"mcsEaseInOut", /* animation easing */ - moveDragger:false, /* move dragger instead of content */ - timeout:60, /* scroll-to delay */ - callbacks:true, /* enable/disable callbacks */ - onStart:true, - onUpdate:true, - onComplete:true - }, - methodOptions=$.extend(true,{},methodDefaults,options), - to=_arr.call(this,val),dur=methodOptions.scrollInertia>0 && methodOptions.scrollInertia<17 ? 17 : methodOptions.scrollInertia; - - /* translate yx values to actual scroll-to positions */ - to[0]=_to.call(this,to[0],"y"); - to[1]=_to.call(this,to[1],"x"); - - /* - check if scroll-to value moves the dragger instead of content. - Only pixel values apply on dragger (e.g. 100, "100px", "-=100" etc.) - */ - if(methodOptions.moveDragger){ - to[0]*=d.scrollRatio.y; - to[1]*=d.scrollRatio.x; - } - - methodOptions.dur=dur; - - setTimeout(function(){ - /* do the scrolling */ - if(to[0]!==null && typeof to[0]!=="undefined" && o.axis!=="x" && d.overflowed[0]){ /* scroll y */ - methodOptions.dir="y"; - methodOptions.overwrite="all"; - _scrollTo($this,to[0].toString(),methodOptions); - } - if(to[1]!==null && typeof to[1]!=="undefined" && o.axis!=="y" && d.overflowed[1]){ /* scroll x */ - methodOptions.dir="x"; - methodOptions.overwrite="none"; - _scrollTo($this,to[1].toString(),methodOptions); - } - },methodOptions.timeout); - - } - - }); - - }, - /* ---------------------------------------- */ - - - - /* - plugin stop method - stops scrolling animation - ---------------------------------------- - usage: $(selector).mCustomScrollbar("stop"); - */ - stop:function(){ - - var selector=_selector.call(this); /* validate selector */ - - return $(selector).each(function(){ - - var $this=$(this); - - if($this.data(pluginPfx)){ /* check if plugin has initialized */ - - _stop($this); - - } - - }); - - }, - /* ---------------------------------------- */ - - - - /* - plugin disable method - temporarily disables the scrollbar(s) - ---------------------------------------- - usage: $(selector).mCustomScrollbar("disable",reset); - reset (boolean): resets content position to 0 - */ - disable:function(r){ - - var selector=_selector.call(this); /* validate selector */ - - return $(selector).each(function(){ - - var $this=$(this); - - if($this.data(pluginPfx)){ /* check if plugin has initialized */ - - var d=$this.data(pluginPfx); - - _autoUpdate.call(this,"remove"); /* remove automatic updating */ - - _unbindEvents.call(this); /* unbind events */ - - if(r){_resetContentPosition.call(this);} /* reset content position */ - - _scrollbarVisibility.call(this,true); /* show/hide scrollbar(s) */ - - $this.addClass(classes[3]); /* add disable class */ - - } - - }); - - }, - /* ---------------------------------------- */ - - - - /* - plugin destroy method - completely removes the scrollbar(s) and returns the element to its original state - ---------------------------------------- - usage: $(selector).mCustomScrollbar("destroy"); - */ - destroy:function(){ - - var selector=_selector.call(this); /* validate selector */ - - return $(selector).each(function(){ - - var $this=$(this); - - if($this.data(pluginPfx)){ /* check if plugin has initialized */ - - var d=$this.data(pluginPfx),o=d.opt, - mCustomScrollBox=$("#mCSB_"+d.idx), - mCSB_container=$("#mCSB_"+d.idx+"_container"), - scrollbar=$(".mCSB_"+d.idx+"_scrollbar"); - - if(o.live){removeLiveTimers(o.liveSelector || $(selector).selector);} /* remove live timers */ - - _autoUpdate.call(this,"remove"); /* remove automatic updating */ - - _unbindEvents.call(this); /* unbind events */ - - _resetContentPosition.call(this); /* reset content position */ - - $this.removeData(pluginPfx); /* remove plugin data object */ - - _delete(this,"mcs"); /* delete callbacks object */ - - /* remove plugin markup */ - scrollbar.remove(); /* remove scrollbar(s) first (those can be either inside or outside plugin's inner wrapper) */ - mCSB_container.find("img."+classes[2]).removeClass(classes[2]); /* remove loaded images flag */ - mCustomScrollBox.replaceWith(mCSB_container.contents()); /* replace plugin's inner wrapper with the original content */ - /* remove plugin classes from the element and add destroy class */ - $this.removeClass(pluginNS+" _"+pluginPfx+"_"+d.idx+" "+classes[6]+" "+classes[7]+" "+classes[5]+" "+classes[3]).addClass(classes[4]); - - } - - }); - - } - /* ---------------------------------------- */ - - }, - - - - - - /* - ---------------------------------------- - FUNCTIONS - ---------------------------------------- - */ - - /* validates selector (if selector is invalid or undefined uses the default one) */ - _selector=function(){ - return (typeof $(this)!=="object" || $(this).length<1) ? defaultSelector : this; - }, - /* -------------------- */ - - - /* changes options according to theme */ - _theme=function(obj){ - var fixedSizeScrollbarThemes=["rounded","rounded-dark","rounded-dots","rounded-dots-dark"], - nonExpandedScrollbarThemes=["rounded-dots","rounded-dots-dark","3d","3d-dark","3d-thick","3d-thick-dark","inset","inset-dark","inset-2","inset-2-dark","inset-3","inset-3-dark"], - disabledScrollButtonsThemes=["minimal","minimal-dark"], - enabledAutoHideScrollbarThemes=["minimal","minimal-dark"], - scrollbarPositionOutsideThemes=["minimal","minimal-dark"]; - obj.autoDraggerLength=$.inArray(obj.theme,fixedSizeScrollbarThemes) > -1 ? false : obj.autoDraggerLength; - obj.autoExpandScrollbar=$.inArray(obj.theme,nonExpandedScrollbarThemes) > -1 ? false : obj.autoExpandScrollbar; - obj.scrollButtons.enable=$.inArray(obj.theme,disabledScrollButtonsThemes) > -1 ? false : obj.scrollButtons.enable; - obj.autoHideScrollbar=$.inArray(obj.theme,enabledAutoHideScrollbarThemes) > -1 ? true : obj.autoHideScrollbar; - obj.scrollbarPosition=$.inArray(obj.theme,scrollbarPositionOutsideThemes) > -1 ? "outside" : obj.scrollbarPosition; - }, - /* -------------------- */ - - - /* live option timers removal */ - removeLiveTimers=function(selector){ - if(liveTimers[selector]){ - clearTimeout(liveTimers[selector]); - _delete(liveTimers,selector); - } - }, - /* -------------------- */ - - - /* normalizes axis option to valid values: "y", "x", "yx" */ - _findAxis=function(val){ - return (val==="yx" || val==="xy" || val==="auto") ? "yx" : (val==="x" || val==="horizontal") ? "x" : "y"; - }, - /* -------------------- */ - - - /* normalizes scrollButtons.scrollType option to valid values: "stepless", "stepped" */ - _findScrollButtonsType=function(val){ - return (val==="stepped" || val==="pixels" || val==="step" || val==="click") ? "stepped" : "stepless"; - }, - /* -------------------- */ - - - /* generates plugin markup */ - _pluginMarkup=function(){ - var $this=$(this),d=$this.data(pluginPfx),o=d.opt, - expandClass=o.autoExpandScrollbar ? " "+classes[1]+"_expand" : "", - scrollbar=["
","
"], - wrapperClass=o.axis==="yx" ? "mCSB_vertical_horizontal" : o.axis==="x" ? "mCSB_horizontal" : "mCSB_vertical", - scrollbars=o.axis==="yx" ? scrollbar[0]+scrollbar[1] : o.axis==="x" ? scrollbar[1] : scrollbar[0], - contentWrapper=o.axis==="yx" ? "
" : "", - autoHideClass=o.autoHideScrollbar ? " "+classes[6] : "", - scrollbarDirClass=(o.axis!=="x" && d.langDir==="rtl") ? " "+classes[7] : ""; - if(o.setWidth){$this.css("width",o.setWidth);} /* set element width */ - if(o.setHeight){$this.css("height",o.setHeight);} /* set element height */ - o.setLeft=(o.axis!=="y" && d.langDir==="rtl") ? "989999px" : o.setLeft; /* adjust left position for rtl direction */ - $this.addClass(pluginNS+" _"+pluginPfx+"_"+d.idx+autoHideClass+scrollbarDirClass).wrapInner("
"); - var mCustomScrollBox=$("#mCSB_"+d.idx), - mCSB_container=$("#mCSB_"+d.idx+"_container"); - if(o.axis!=="y" && !o.advanced.autoExpandHorizontalScroll){ - mCSB_container.css("width",_contentWidth(mCSB_container.children())); - } - if(o.scrollbarPosition==="outside"){ - if($this.css("position")==="static"){ /* requires elements with non-static position */ - $this.css("position","relative"); - } - $this.css("overflow","visible"); - mCustomScrollBox.addClass("mCSB_outside").after(scrollbars); - }else{ - mCustomScrollBox.addClass("mCSB_inside").append(scrollbars); - mCSB_container.wrap(contentWrapper); - } - _scrollButtons.call(this); /* add scrollbar buttons */ - /* minimum dragger length */ - var mCSB_dragger=[$("#mCSB_"+d.idx+"_dragger_vertical"),$("#mCSB_"+d.idx+"_dragger_horizontal")]; - mCSB_dragger[0].css("min-height",mCSB_dragger[0].height()); - mCSB_dragger[1].css("min-width",mCSB_dragger[1].width()); - }, - /* -------------------- */ - - - /* calculates content width */ - _contentWidth=function(el){ - return Math.max.apply(Math,el.map(function(){return $(this).outerWidth(true);}).get()); - }, - /* -------------------- */ - - - /* expands content horizontally */ - _expandContentHorizontally=function(){ - var $this=$(this),d=$this.data(pluginPfx),o=d.opt, - mCSB_container=$("#mCSB_"+d.idx+"_container"); - if(o.advanced.autoExpandHorizontalScroll && o.axis!=="y"){ - /* - wrap content with an infinite width div and set its position to absolute and width to auto. - Setting width to auto before calculating the actual width is important! - We must let the browser set the width as browser zoom values are impossible to calculate. - */ - mCSB_container.css({"position":"absolute","width":"auto"}) - .wrap("
") - .css({ /* set actual width, original position and un-wrap */ - /* - get the exact width (with decimals) and then round-up. - Using jquery outerWidth() will round the width value which will mess up with inner elements that have non-integer width - */ - "width":(Math.ceil(mCSB_container[0].getBoundingClientRect().right+0.4)-Math.floor(mCSB_container[0].getBoundingClientRect().left)), - "position":"relative" - }).unwrap(); - } - }, - /* -------------------- */ - - - /* adds scrollbar buttons */ - _scrollButtons=function(){ - var $this=$(this),d=$this.data(pluginPfx),o=d.opt, - mCSB_scrollTools=$(".mCSB_"+d.idx+"_scrollbar:first"), - tabindex=!_isNumeric(o.scrollButtons.tabindex) ? "" : "tabindex='"+o.scrollButtons.tabindex+"'", - btnHTML=[ - "", - "", - "", - "" - ], - btn=[(o.axis==="x" ? btnHTML[2] : btnHTML[0]),(o.axis==="x" ? btnHTML[3] : btnHTML[1]),btnHTML[2],btnHTML[3]]; - if(o.scrollButtons.enable){ - mCSB_scrollTools.prepend(btn[0]).append(btn[1]).next(".mCSB_scrollTools").prepend(btn[2]).append(btn[3]); - } - }, - /* -------------------- */ - - - /* detects/sets css max-height value */ - _maxHeight=function(){ - var $this=$(this),d=$this.data(pluginPfx), - mCustomScrollBox=$("#mCSB_"+d.idx), - mh=$this.css("max-height") || "none",pct=mh.indexOf("%")!==-1, - bs=$this.css("box-sizing"); - if(mh!=="none"){ - var val=pct ? $this.parent().height()*parseInt(mh)/100 : parseInt(mh); - /* if element's css box-sizing is "border-box", subtract any paddings and/or borders from max-height value */ - if(bs==="border-box"){val-=(($this.innerHeight()-$this.height())+($this.outerHeight()-$this.innerHeight()));} - mCustomScrollBox.css("max-height",Math.round(val)); - } - }, - /* -------------------- */ - - - /* auto-adjusts scrollbar dragger length */ - _setDraggerLength=function(){ - var $this=$(this),d=$this.data(pluginPfx), - mCustomScrollBox=$("#mCSB_"+d.idx), - mCSB_container=$("#mCSB_"+d.idx+"_container"), - mCSB_dragger=[$("#mCSB_"+d.idx+"_dragger_vertical"),$("#mCSB_"+d.idx+"_dragger_horizontal")], - ratio=[mCustomScrollBox.height()/mCSB_container.outerHeight(false),mCustomScrollBox.width()/mCSB_container.outerWidth(false)], - l=[ - parseInt(mCSB_dragger[0].css("min-height")),Math.round(ratio[0]*mCSB_dragger[0].parent().height()), - parseInt(mCSB_dragger[1].css("min-width")),Math.round(ratio[1]*mCSB_dragger[1].parent().width()) - ], - h=oldIE && (l[1]mCustomScrollBox.height(),contentWidth>mCustomScrollBox.width()]; - }, - /* -------------------- */ - - - /* resets content position to 0 */ - _resetContentPosition=function(){ - var $this=$(this),d=$this.data(pluginPfx),o=d.opt, - mCustomScrollBox=$("#mCSB_"+d.idx), - mCSB_container=$("#mCSB_"+d.idx+"_container"), - mCSB_dragger=[$("#mCSB_"+d.idx+"_dragger_vertical"),$("#mCSB_"+d.idx+"_dragger_horizontal")]; - _stop($this); /* stop any current scrolling before resetting */ - if((o.axis!=="x" && !d.overflowed[0]) || (o.axis==="y" && d.overflowed[0])){ /* reset y */ - mCSB_dragger[0].add(mCSB_container).css("top",0); - _scrollTo($this,"_resetY"); - } - if((o.axis!=="y" && !d.overflowed[1]) || (o.axis==="x" && d.overflowed[1])){ /* reset x */ - var cx=dx=0; - if(d.langDir==="rtl"){ /* adjust left position for rtl direction */ - cx=mCustomScrollBox.width()-mCSB_container.outerWidth(false); - dx=Math.abs(cx/d.scrollRatio.x); - } - mCSB_container.css("left",cx); - mCSB_dragger[1].css("left",dx); - _scrollTo($this,"_resetX"); - } - }, - /* -------------------- */ - - - /* binds scrollbar events */ - _bindEvents=function(){ - var $this=$(this),d=$this.data(pluginPfx),o=d.opt; - if(!d.bindEvents){ /* check if events are already bound */ - _draggable.call(this); - if(o.contentTouchScroll){_contentDraggable.call(this);} - _selectable.call(this); - if(o.mouseWheel.enable){ /* bind mousewheel fn when plugin is available */ - function _mwt(){ - mousewheelTimeout=setTimeout(function(){ - if(!$.event.special.mousewheel){ - _mwt(); - }else{ - clearTimeout(mousewheelTimeout); - _mousewheel.call($this[0]); - } - },100); - } - var mousewheelTimeout; - _mwt(); - } - _draggerRail.call(this); - _wrapperScroll.call(this); - if(o.advanced.autoScrollOnFocus){_focus.call(this);} - if(o.scrollButtons.enable){_buttons.call(this);} - if(o.keyboard.enable){_keyboard.call(this);} - d.bindEvents=true; - } - }, - /* -------------------- */ - - - /* unbinds scrollbar events */ - _unbindEvents=function(){ - var $this=$(this),d=$this.data(pluginPfx),o=d.opt, - namespace=pluginPfx+"_"+d.idx, - sb=".mCSB_"+d.idx+"_scrollbar", - sel=$("#mCSB_"+d.idx+",#mCSB_"+d.idx+"_container,#mCSB_"+d.idx+"_container_wrapper,"+sb+" ."+classes[12]+",#mCSB_"+d.idx+"_dragger_vertical,#mCSB_"+d.idx+"_dragger_horizontal,"+sb+">a"), - mCSB_container=$("#mCSB_"+d.idx+"_container"); - if(o.advanced.releaseDraggableSelectors){sel.add($(o.advanced.releaseDraggableSelectors));} - if(d.bindEvents){ /* check if events are bound */ - /* unbind namespaced events from document/selectors */ - $(document).unbind("."+namespace); - sel.each(function(){ - $(this).unbind("."+namespace); - }); - /* clear and delete timeouts/objects */ - clearTimeout($this[0]._focusTimeout); _delete($this[0],"_focusTimeout"); - clearTimeout(d.sequential.step); _delete(d.sequential,"step"); - clearTimeout(mCSB_container[0].onCompleteTimeout); _delete(mCSB_container[0],"onCompleteTimeout"); - d.bindEvents=false; - } - }, - /* -------------------- */ - - - /* toggles scrollbar visibility */ - _scrollbarVisibility=function(disabled){ - var $this=$(this),d=$this.data(pluginPfx),o=d.opt, - contentWrapper=$("#mCSB_"+d.idx+"_container_wrapper"), - content=contentWrapper.length ? contentWrapper : $("#mCSB_"+d.idx+"_container"), - scrollbar=[$("#mCSB_"+d.idx+"_scrollbar_vertical"),$("#mCSB_"+d.idx+"_scrollbar_horizontal")], - mCSB_dragger=[scrollbar[0].find(".mCSB_dragger"),scrollbar[1].find(".mCSB_dragger")]; - if(o.axis!=="x"){ - if(d.overflowed[0] && !disabled){ - scrollbar[0].add(mCSB_dragger[0]).add(scrollbar[0].children("a")).css("display","block"); - content.removeClass(classes[8]+" "+classes[10]); - }else{ - if(o.alwaysShowScrollbar){ - if(o.alwaysShowScrollbar!==2){mCSB_dragger[0].css("display","none");} - content.removeClass(classes[10]); - }else{ - scrollbar[0].css("display","none"); - content.addClass(classes[10]); - } - content.addClass(classes[8]); - } - } - if(o.axis!=="y"){ - if(d.overflowed[1] && !disabled){ - scrollbar[1].add(mCSB_dragger[1]).add(scrollbar[1].children("a")).css("display","block"); - content.removeClass(classes[9]+" "+classes[11]); - }else{ - if(o.alwaysShowScrollbar){ - if(o.alwaysShowScrollbar!==2){mCSB_dragger[1].css("display","none");} - content.removeClass(classes[11]); - }else{ - scrollbar[1].css("display","none"); - content.addClass(classes[11]); - } - content.addClass(classes[9]); - } - } - if(!d.overflowed[0] && !d.overflowed[1]){ - $this.addClass(classes[5]); - }else{ - $this.removeClass(classes[5]); - } - }, - /* -------------------- */ - - - /* returns input coordinates of pointer, touch and mouse events (relative to document) */ - _coordinates=function(e){ - var t=e.type; - switch(t){ - case "pointerdown": case "MSPointerDown": case "pointermove": case "MSPointerMove": case "pointerup": case "MSPointerUp": - return e.target.ownerDocument!==document ? [e.originalEvent.screenY,e.originalEvent.screenX,false] : [e.originalEvent.pageY,e.originalEvent.pageX,false]; - break; - case "touchstart": case "touchmove": case "touchend": - var touch=e.originalEvent.touches[0] || e.originalEvent.changedTouches[0], - touches=e.originalEvent.touches.length || e.originalEvent.changedTouches.length; - return e.target.ownerDocument!==document ? [touch.screenY,touch.screenX,touches>1] : [touch.pageY,touch.pageX,touches>1]; - break; - default: - return [e.pageY,e.pageX,false]; - } - }, - /* -------------------- */ - - - /* - SCROLLBAR DRAG EVENTS - scrolls content via scrollbar dragging - */ - _draggable=function(){ - var $this=$(this),d=$this.data(pluginPfx),o=d.opt, - namespace=pluginPfx+"_"+d.idx, - draggerId=["mCSB_"+d.idx+"_dragger_vertical","mCSB_"+d.idx+"_dragger_horizontal"], - mCSB_container=$("#mCSB_"+d.idx+"_container"), - mCSB_dragger=$("#"+draggerId[0]+",#"+draggerId[1]), - draggable,dragY,dragX, - rds=o.advanced.releaseDraggableSelectors ? mCSB_dragger.add($(o.advanced.releaseDraggableSelectors)) : mCSB_dragger; - mCSB_dragger.bind("mousedown."+namespace+" touchstart."+namespace+" pointerdown."+namespace+" MSPointerDown."+namespace,function(e){ - e.stopImmediatePropagation(); - e.preventDefault(); - if(!_mouseBtnLeft(e)){return;} /* left mouse button only */ - touchActive=true; - if(oldIE){document.onselectstart=function(){return false;}} /* disable text selection for IE < 9 */ - _iframe(false); /* enable scrollbar dragging over iframes by disabling their events */ - _stop($this); - draggable=$(this); - var offset=draggable.offset(),y=_coordinates(e)[0]-offset.top,x=_coordinates(e)[1]-offset.left, - h=draggable.height()+offset.top,w=draggable.width()+offset.left; - if(y0 && x0){ - dragY=y; - dragX=x; - } - _onDragClasses(draggable,"active",o.autoExpandScrollbar); - }).bind("touchmove."+namespace,function(e){ - e.stopImmediatePropagation(); - e.preventDefault(); - var offset=draggable.offset(),y=_coordinates(e)[0]-offset.top,x=_coordinates(e)[1]-offset.left; - _drag(dragY,dragX,y,x); - }); - $(document).bind("mousemove."+namespace+" pointermove."+namespace+" MSPointerMove."+namespace,function(e){ - if(draggable){ - var offset=draggable.offset(),y=_coordinates(e)[0]-offset.top,x=_coordinates(e)[1]-offset.left; - if(dragY===y){return;} /* has it really moved? */ - _drag(dragY,dragX,y,x); - } - }).add(rds).bind("mouseup."+namespace+" touchend."+namespace+" pointerup."+namespace+" MSPointerUp."+namespace,function(e){ - if(draggable){ - _onDragClasses(draggable,"active",o.autoExpandScrollbar); - draggable=null; - } - touchActive=false; - if(oldIE){document.onselectstart=null;} /* enable text selection for IE < 9 */ - _iframe(true); /* enable iframes events */ - }); - function _iframe(evt){ - var el=mCSB_container.find("iframe"); - if(!el.length){return;} /* check if content contains iframes */ - var val=!evt ? "none" : "auto"; - el.css("pointer-events",val); /* for IE11, iframe's display property should not be "block" */ - } - function _drag(dragY,dragX,y,x){ - mCSB_container[0].idleTimer=o.scrollInertia<233 ? 250 : 0; - if(draggable.attr("id")===draggerId[1]){ - var dir="x",to=((draggable[0].offsetLeft-dragX)+x)*d.scrollRatio.x; - }else{ - var dir="y",to=((draggable[0].offsetTop-dragY)+y)*d.scrollRatio.y; - } - _scrollTo($this,to.toString(),{dir:dir,drag:true}); - } - }, - /* -------------------- */ - - - /* - TOUCH SWIPE EVENTS - scrolls content via touch swipe - Emulates the native touch-swipe scrolling with momentum found in iOS, Android and WP devices - */ - _contentDraggable=function(){ - var $this=$(this),d=$this.data(pluginPfx),o=d.opt, - namespace=pluginPfx+"_"+d.idx, - mCustomScrollBox=$("#mCSB_"+d.idx), - mCSB_container=$("#mCSB_"+d.idx+"_container"), - mCSB_dragger=[$("#mCSB_"+d.idx+"_dragger_vertical"),$("#mCSB_"+d.idx+"_dragger_horizontal")], - dragY,dragX,touchStartY,touchStartX,touchMoveY=[],touchMoveX=[],startTime,runningTime,endTime,distance,speed,amount, - durA=0,durB,overwrite=o.axis==="yx" ? "none" : "all",touchIntent=[],touchDrag,docDrag, - iframe=mCSB_container.find("iframe"), - events=[ - "touchstart."+namespace+" pointerdown."+namespace+" MSPointerDown."+namespace, //start - "touchmove."+namespace+" pointermove."+namespace+" MSPointerMove."+namespace, //move - "touchend."+namespace+" pointerup."+namespace+" MSPointerUp."+namespace //end - ]; - mCSB_container.bind(events[0],function(e){ - _onTouchstart(e); - }).bind(events[1],function(e){ - _onTouchmove(e); - }); - mCustomScrollBox.bind(events[0],function(e){ - _onTouchstart2(e); - }).bind(events[2],function(e){ - _onTouchend(e); - }); - if(iframe.length){ - iframe.each(function(){ - $(this).load(function(){ - /* bind events on accessible iframes */ - if(_canAccessIFrame(this)){ - $(this.contentDocument || this.contentWindow.document).bind(events[0],function(e){ - _onTouchstart(e); - _onTouchstart2(e); - }).bind(events[1],function(e){ - _onTouchmove(e); - }).bind(events[2],function(e){ - _onTouchend(e); - }); - } - }); - }); - } - function _onTouchstart(e){ - if(!_pointerTouch(e) || touchActive || _coordinates(e)[2]){touchable=0; return;} - touchable=1; touchDrag=0; docDrag=0; - $this.removeClass("mCS_touch_action"); - var offset=mCSB_container.offset(); - dragY=_coordinates(e)[0]-offset.top; - dragX=_coordinates(e)[1]-offset.left; - touchIntent=[_coordinates(e)[0],_coordinates(e)[1]]; - } - function _onTouchmove(e){ - if(!_pointerTouch(e) || touchActive || _coordinates(e)[2]){return;} - e.stopImmediatePropagation(); - if(docDrag && !touchDrag){return;} - runningTime=_getTime(); - var offset=mCustomScrollBox.offset(),y=_coordinates(e)[0]-offset.top,x=_coordinates(e)[1]-offset.left, - easing="mcsLinearOut"; - touchMoveY.push(y); - touchMoveX.push(x); - touchIntent[2]=Math.abs(_coordinates(e)[0]-touchIntent[0]); touchIntent[3]=Math.abs(_coordinates(e)[1]-touchIntent[1]); - if(d.overflowed[0]){ - var limit=mCSB_dragger[0].parent().height()-mCSB_dragger[0].height(), - prevent=((dragY-y)>0 && (y-dragY)>-(limit*d.scrollRatio.y) && (touchIntent[3]*20 && (x-dragX)>-(limitX*d.scrollRatio.x) && (touchIntent[2]*230){return;} - speed=1000/(endTime-startTime); - var easing="mcsEaseOut",slow=speed<2.5, - diff=slow ? [touchMoveY[touchMoveY.length-2],touchMoveX[touchMoveX.length-2]] : [0,0]; - distance=slow ? [(y-diff[0]),(x-diff[1])] : [y-touchStartY,x-touchStartX]; - var absDistance=[Math.abs(distance[0]),Math.abs(distance[1])]; - speed=slow ? [Math.abs(distance[0]/4),Math.abs(distance[1]/4)] : [speed,speed]; - var a=[ - Math.abs(mCSB_container[0].offsetTop)-(distance[0]*_m((absDistance[0]/speed[0]),speed[0])), - Math.abs(mCSB_container[0].offsetLeft)-(distance[1]*_m((absDistance[1]/speed[1]),speed[1])) - ]; - amount=o.axis==="yx" ? [a[0],a[1]] : o.axis==="x" ? [null,a[1]] : [a[0],null]; - durB=[(absDistance[0]*4)+o.scrollInertia,(absDistance[1]*4)+o.scrollInertia]; - var md=parseInt(o.contentTouchScroll) || 0; /* absolute minimum distance required */ - amount[0]=absDistance[0]>md ? amount[0] : 0; - amount[1]=absDistance[1]>md ? amount[1] : 0; - if(d.overflowed[0]){_drag(amount[0],durB[0],easing,"y",overwrite,false);} - if(d.overflowed[1]){_drag(amount[1],durB[1],easing,"x",overwrite,false);} - } - function _m(ds,s){ - var r=[s*1.5,s*2,s/1.5,s/2]; - if(ds>90){ - return s>4 ? r[0] : r[3]; - }else if(ds>60){ - return s>3 ? r[3] : r[2]; - }else if(ds>30){ - return s>8 ? r[1] : s>6 ? r[0] : s>4 ? s : r[2]; - }else{ - return s>8 ? s : r[3]; - } - } - function _drag(amount,dur,easing,dir,overwrite,drag){ - if(!amount){return;} - _scrollTo($this,amount.toString(),{dur:dur,scrollEasing:easing,dir:dir,overwrite:overwrite,drag:drag}); - } - }, - /* -------------------- */ - - - /* - SELECT TEXT EVENTS - scrolls content when text is selected - */ - _selectable=function(){ - var $this=$(this),d=$this.data(pluginPfx),o=d.opt,seq=d.sequential, - namespace=pluginPfx+"_"+d.idx, - mCSB_container=$("#mCSB_"+d.idx+"_container"), - wrapper=mCSB_container.parent(), - action; - mCSB_container.bind("mousedown."+namespace,function(e){ - if(touchable){return;} - if(!action){action=1; touchActive=true;} - }).add(document).bind("mousemove."+namespace,function(e){ - if(!touchable && action && _sel()){ - var offset=mCSB_container.offset(), - y=_coordinates(e)[0]-offset.top+mCSB_container[0].offsetTop,x=_coordinates(e)[1]-offset.left+mCSB_container[0].offsetLeft; - if(y>0 && y0 && xwrapper.height()){ - _seq("on",40); - } - } - if(o.axis!=="y" && d.overflowed[1]){ - if(x<0){ - _seq("on",37); - }else if(x>wrapper.width()){ - _seq("on",39); - } - } - } - } - }).bind("mouseup."+namespace,function(e){ - if(touchable){return;} - if(action){action=0; _seq("off",null);} - touchActive=false; - }); - function _sel(){ - return window.getSelection ? window.getSelection().toString() : - document.selection && document.selection.type!="Control" ? document.selection.createRange().text : 0; - } - function _seq(a,c,s){ - seq.type=s && action ? "stepped" : "stepless"; - seq.scrollAmount=10; - _sequentialScroll($this,a,c,"mcsLinearOut",s ? 60 : null); - } - }, - /* -------------------- */ - - - /* - MOUSE WHEEL EVENT - scrolls content via mouse-wheel - via mouse-wheel plugin (https://github.com/brandonaaron/jquery-mousewheel) - */ - _mousewheel=function(){ - if(!$(this).data(pluginPfx)){return;} /* Check if the scrollbar is ready to use mousewheel events (issue: #185) */ - var $this=$(this),d=$this.data(pluginPfx),o=d.opt, - namespace=pluginPfx+"_"+d.idx, - mCustomScrollBox=$("#mCSB_"+d.idx), - mCSB_dragger=[$("#mCSB_"+d.idx+"_dragger_vertical"),$("#mCSB_"+d.idx+"_dragger_horizontal")], - iframe=$("#mCSB_"+d.idx+"_container").find("iframe"); - if(iframe.length){ - iframe.each(function(){ - $(this).load(function(){ - /* bind events on accessible iframes */ - if(_canAccessIFrame(this)){ - $(this.contentDocument || this.contentWindow.document).bind("mousewheel."+namespace,function(e,delta){ - _onMousewheel(e,delta); - }); - } - }); - }); - } - mCustomScrollBox.bind("mousewheel."+namespace,function(e,delta){ - _onMousewheel(e,delta); - }); - function _onMousewheel(e,delta){ - _stop($this); - if(_disableMousewheel($this,e.target)){return;} /* disables mouse-wheel when hovering specific elements */ - var deltaFactor=o.mouseWheel.deltaFactor!=="auto" ? parseInt(o.mouseWheel.deltaFactor) : (oldIE && e.deltaFactor<100) ? 100 : e.deltaFactor || 100; - if(o.axis==="x" || o.mouseWheel.axis==="x"){ - var dir="x", - px=[Math.round(deltaFactor*d.scrollRatio.x),parseInt(o.mouseWheel.scrollAmount)], - amount=o.mouseWheel.scrollAmount!=="auto" ? px[1] : px[0]>=mCustomScrollBox.width() ? mCustomScrollBox.width()*0.9 : px[0], - contentPos=Math.abs($("#mCSB_"+d.idx+"_container")[0].offsetLeft), - draggerPos=mCSB_dragger[1][0].offsetLeft, - limit=mCSB_dragger[1].parent().width()-mCSB_dragger[1].width(), - dlt=e.deltaX || e.deltaY || delta; - }else{ - var dir="y", - px=[Math.round(deltaFactor*d.scrollRatio.y),parseInt(o.mouseWheel.scrollAmount)], - amount=o.mouseWheel.scrollAmount!=="auto" ? px[1] : px[0]>=mCustomScrollBox.height() ? mCustomScrollBox.height()*0.9 : px[0], - contentPos=Math.abs($("#mCSB_"+d.idx+"_container")[0].offsetTop), - draggerPos=mCSB_dragger[0][0].offsetTop, - limit=mCSB_dragger[0].parent().height()-mCSB_dragger[0].height(), - dlt=e.deltaY || delta; - } - if((dir==="y" && !d.overflowed[0]) || (dir==="x" && !d.overflowed[1])){return;} - if(o.mouseWheel.invert || e.webkitDirectionInvertedFromDevice){dlt=-dlt;} - if(o.mouseWheel.normalizeDelta){dlt=dlt<0 ? -1 : 1;} - if((dlt>0 && draggerPos!==0) || (dlt<0 && draggerPos!==limit) || o.mouseWheel.preventDefault){ - e.stopImmediatePropagation(); - e.preventDefault(); - } - _scrollTo($this,(contentPos-(dlt*amount)).toString(),{dir:dir}); - } - }, - /* -------------------- */ - - - /* checks if iframe can be accessed */ - _canAccessIFrame=function(iframe){ - var html=null; - try{ - var doc=iframe.contentDocument || iframe.contentWindow.document; - html=doc.body.innerHTML; - }catch(err){/* do nothing */} - return(html!==null); - }, - /* -------------------- */ - - - /* disables mouse-wheel when hovering specific elements like select, datalist etc. */ - _disableMousewheel=function(el,target){ - var tag=target.nodeName.toLowerCase(), - tags=el.data(pluginPfx).opt.mouseWheel.disableOver, - /* elements that require focus */ - focusTags=["select","textarea"]; - return $.inArray(tag,tags) > -1 && !($.inArray(tag,focusTags) > -1 && !$(target).is(":focus")); - }, - /* -------------------- */ - - - /* - DRAGGER RAIL CLICK EVENT - scrolls content via dragger rail - */ - _draggerRail=function(){ - var $this=$(this),d=$this.data(pluginPfx), - namespace=pluginPfx+"_"+d.idx, - mCSB_container=$("#mCSB_"+d.idx+"_container"), - wrapper=mCSB_container.parent(), - mCSB_draggerContainer=$(".mCSB_"+d.idx+"_scrollbar ."+classes[12]); - mCSB_draggerContainer.bind("touchstart."+namespace+" pointerdown."+namespace+" MSPointerDown."+namespace,function(e){ - touchActive=true; - }).bind("touchend."+namespace+" pointerup."+namespace+" MSPointerUp."+namespace,function(e){ - touchActive=false; - }).bind("click."+namespace,function(e){ - if($(e.target).hasClass(classes[12]) || $(e.target).hasClass("mCSB_draggerRail")){ - _stop($this); - var el=$(this),mCSB_dragger=el.find(".mCSB_dragger"); - if(el.parent(".mCSB_scrollTools_horizontal").length>0){ - if(!d.overflowed[1]){return;} - var dir="x", - clickDir=e.pageX>mCSB_dragger.offset().left ? -1 : 1, - to=Math.abs(mCSB_container[0].offsetLeft)-(clickDir*(wrapper.width()*0.9)); - }else{ - if(!d.overflowed[0]){return;} - var dir="y", - clickDir=e.pageY>mCSB_dragger.offset().top ? -1 : 1, - to=Math.abs(mCSB_container[0].offsetTop)-(clickDir*(wrapper.height()*0.9)); - } - _scrollTo($this,to.toString(),{dir:dir,scrollEasing:"mcsEaseInOut"}); - } - }); - }, - /* -------------------- */ - - - /* - FOCUS EVENT - scrolls content via element focus (e.g. clicking an input, pressing TAB key etc.) - */ - _focus=function(){ - var $this=$(this),d=$this.data(pluginPfx),o=d.opt, - namespace=pluginPfx+"_"+d.idx, - mCSB_container=$("#mCSB_"+d.idx+"_container"), - wrapper=mCSB_container.parent(); - mCSB_container.bind("focusin."+namespace,function(e){ - var el=$(document.activeElement), - nested=mCSB_container.find(".mCustomScrollBox").length, - dur=0; - if(!el.is(o.advanced.autoScrollOnFocus)){return;} - _stop($this); - clearTimeout($this[0]._focusTimeout); - $this[0]._focusTimer=nested ? (dur+17)*nested : 0; - $this[0]._focusTimeout=setTimeout(function(){ - var to=[_childPos(el)[0],_childPos(el)[1]], - contentPos=[mCSB_container[0].offsetTop,mCSB_container[0].offsetLeft], - isVisible=[ - (contentPos[0]+to[0]>=0 && contentPos[0]+to[0]=0 && contentPos[0]+to[1]a"); - btn.bind("mousedown."+namespace+" touchstart."+namespace+" pointerdown."+namespace+" MSPointerDown."+namespace+" mouseup."+namespace+" touchend."+namespace+" pointerup."+namespace+" MSPointerUp."+namespace+" mouseout."+namespace+" pointerout."+namespace+" MSPointerOut."+namespace+" click."+namespace,function(e){ - e.preventDefault(); - if(!_mouseBtnLeft(e)){return;} /* left mouse button only */ - var btnClass=$(this).attr("class"); - seq.type=o.scrollButtons.scrollType; - switch(e.type){ - case "mousedown": case "touchstart": case "pointerdown": case "MSPointerDown": - if(seq.type==="stepped"){return;} - touchActive=true; - d.tweenRunning=false; - _seq("on",btnClass); - break; - case "mouseup": case "touchend": case "pointerup": case "MSPointerUp": - case "mouseout": case "pointerout": case "MSPointerOut": - if(seq.type==="stepped"){return;} - touchActive=false; - if(seq.dir){_seq("off",btnClass);} - break; - case "click": - if(seq.type!=="stepped" || d.tweenRunning){return;} - _seq("on",btnClass); - break; - } - function _seq(a,c){ - seq.scrollAmount=o.snapAmount || o.scrollButtons.scrollAmount; - _sequentialScroll($this,a,c); - } - }); - }, - /* -------------------- */ - - - /* - KEYBOARD EVENTS - scrolls content via keyboard - Keys: up arrow, down arrow, left arrow, right arrow, PgUp, PgDn, Home, End - */ - _keyboard=function(){ - var $this=$(this),d=$this.data(pluginPfx),o=d.opt,seq=d.sequential, - namespace=pluginPfx+"_"+d.idx, - mCustomScrollBox=$("#mCSB_"+d.idx), - mCSB_container=$("#mCSB_"+d.idx+"_container"), - wrapper=mCSB_container.parent(), - editables="input,textarea,select,datalist,keygen,[contenteditable='true']", - iframe=mCSB_container.find("iframe"), - events=["blur."+namespace+" keydown."+namespace+" keyup."+namespace]; - if(iframe.length){ - iframe.each(function(){ - $(this).load(function(){ - /* bind events on accessible iframes */ - if(_canAccessIFrame(this)){ - $(this.contentDocument || this.contentWindow.document).bind(events[0],function(e){ - _onKeyboard(e); - }); - } - }); - }); - } - mCustomScrollBox.attr("tabindex","0").bind(events[0],function(e){ - _onKeyboard(e); - }); - function _onKeyboard(e){ - switch(e.type){ - case "blur": - if(d.tweenRunning && seq.dir){_seq("off",null);} - break; - case "keydown": case "keyup": - var code=e.keyCode ? e.keyCode : e.which,action="on"; - if((o.axis!=="x" && (code===38 || code===40)) || (o.axis!=="y" && (code===37 || code===39))){ - /* up (38), down (40), left (37), right (39) arrows */ - if(((code===38 || code===40) && !d.overflowed[0]) || ((code===37 || code===39) && !d.overflowed[1])){return;} - if(e.type==="keyup"){action="off";} - if(!$(document.activeElement).is(editables)){ - e.preventDefault(); - e.stopImmediatePropagation(); - _seq(action,code); - } - }else if(code===33 || code===34){ - /* PgUp (33), PgDn (34) */ - if(d.overflowed[0] || d.overflowed[1]){ - e.preventDefault(); - e.stopImmediatePropagation(); - } - if(e.type==="keyup"){ - _stop($this); - var keyboardDir=code===34 ? -1 : 1; - if(o.axis==="x" || (o.axis==="yx" && d.overflowed[1] && !d.overflowed[0])){ - var dir="x",to=Math.abs(mCSB_container[0].offsetLeft)-(keyboardDir*(wrapper.width()*0.9)); - }else{ - var dir="y",to=Math.abs(mCSB_container[0].offsetTop)-(keyboardDir*(wrapper.height()*0.9)); - } - _scrollTo($this,to.toString(),{dir:dir,scrollEasing:"mcsEaseInOut"}); - } - }else if(code===35 || code===36){ - /* End (35), Home (36) */ - if(!$(document.activeElement).is(editables)){ - if(d.overflowed[0] || d.overflowed[1]){ - e.preventDefault(); - e.stopImmediatePropagation(); - } - if(e.type==="keyup"){ - if(o.axis==="x" || (o.axis==="yx" && d.overflowed[1] && !d.overflowed[0])){ - var dir="x",to=code===35 ? Math.abs(wrapper.width()-mCSB_container.outerWidth(false)) : 0; - }else{ - var dir="y",to=code===35 ? Math.abs(wrapper.height()-mCSB_container.outerHeight(false)) : 0; - } - _scrollTo($this,to.toString(),{dir:dir,scrollEasing:"mcsEaseInOut"}); - } - } - } - break; - } - function _seq(a,c){ - seq.type=o.keyboard.scrollType; - seq.scrollAmount=o.snapAmount || o.keyboard.scrollAmount; - if(seq.type==="stepped" && d.tweenRunning){return;} - _sequentialScroll($this,a,c); - } - } - }, - /* -------------------- */ - - - /* scrolls content sequentially (used when scrolling via buttons, keyboard arrows etc.) */ - _sequentialScroll=function(el,action,trigger,e,s){ - var d=el.data(pluginPfx),o=d.opt,seq=d.sequential, - mCSB_container=$("#mCSB_"+d.idx+"_container"), - once=seq.type==="stepped" ? true : false, - steplessSpeed=o.scrollInertia < 26 ? 26 : o.scrollInertia, /* 26/1.5=17 */ - steppedSpeed=o.scrollInertia < 1 ? 17 : o.scrollInertia; - switch(action){ - case "on": - seq.dir=[ - (trigger===classes[16] || trigger===classes[15] || trigger===39 || trigger===37 ? "x" : "y"), - (trigger===classes[13] || trigger===classes[15] || trigger===38 || trigger===37 ? -1 : 1) - ]; - _stop(el); - if(_isNumeric(trigger) && seq.type==="stepped"){return;} - _on(once); - break; - case "off": - _off(); - if(once || (d.tweenRunning && seq.dir)){ - _on(true); - } - break; - } - /* starts sequence */ - function _on(once){ - var c=seq.type!=="stepped", /* continuous scrolling */ - t=s ? s : !once ? 1000/60 : c ? steplessSpeed/1.5 : steppedSpeed, /* timer */ - m=!once ? 2.5 : c ? 7.5 : 40, /* multiplier */ - contentPos=[Math.abs(mCSB_container[0].offsetTop),Math.abs(mCSB_container[0].offsetLeft)], - ratio=[d.scrollRatio.y>10 ? 10 : d.scrollRatio.y,d.scrollRatio.x>10 ? 10 : d.scrollRatio.x], - amount=seq.dir[0]==="x" ? contentPos[1]+(seq.dir[1]*(ratio[1]*m)) : contentPos[0]+(seq.dir[1]*(ratio[0]*m)), - px=seq.dir[0]==="x" ? contentPos[1]+(seq.dir[1]*parseInt(seq.scrollAmount)) : contentPos[0]+(seq.dir[1]*parseInt(seq.scrollAmount)), - to=seq.scrollAmount!=="auto" ? px : amount, - easing=e ? e : !once ? "mcsLinear" : c ? "mcsLinearOut" : "mcsEaseInOut", - onComplete=!once ? false : true; - if(once && t<17){ - to=seq.dir[0]==="x" ? contentPos[1] : contentPos[0]; - } - _scrollTo(el,to.toString(),{dir:seq.dir[0],scrollEasing:easing,dur:t,onComplete:onComplete}); - if(once){ - seq.dir=false; - return; - } - clearTimeout(seq.step); - seq.step=setTimeout(function(){ - _on(); - },t); - } - /* stops sequence */ - function _off(){ - clearTimeout(seq.step); - _delete(seq,"step"); - _stop(el); - } - }, - /* -------------------- */ - - - /* returns a yx array from value */ - _arr=function(val){ - var o=$(this).data(pluginPfx).opt,vals=[]; - if(typeof val==="function"){val=val();} /* check if the value is a single anonymous function */ - /* check if value is object or array, its length and create an array with yx values */ - if(!(val instanceof Array)){ /* object value (e.g. {y:"100",x:"100"}, 100 etc.) */ - vals[0]=val.y ? val.y : val.x || o.axis==="x" ? null : val; - vals[1]=val.x ? val.x : val.y || o.axis==="y" ? null : val; - }else{ /* array value (e.g. [100,100]) */ - vals=val.length>1 ? [val[0],val[1]] : o.axis==="x" ? [null,val[0]] : [val[0],null]; - } - /* check if array values are anonymous functions */ - if(typeof vals[0]==="function"){vals[0]=vals[0]();} - if(typeof vals[1]==="function"){vals[1]=vals[1]();} - return vals; - }, - /* -------------------- */ - - - /* translates values (e.g. "top", 100, "100px", "#id") to actual scroll-to positions */ - _to=function(val,dir){ - if(val==null || typeof val=="undefined"){return;} - var $this=$(this),d=$this.data(pluginPfx),o=d.opt, - mCSB_container=$("#mCSB_"+d.idx+"_container"), - wrapper=mCSB_container.parent(), - t=typeof val; - if(!dir){dir=o.axis==="x" ? "x" : "y";} - var contentLength=dir==="x" ? mCSB_container.outerWidth(false) : mCSB_container.outerHeight(false), - contentPos=dir==="x" ? mCSB_container[0].offsetLeft : mCSB_container[0].offsetTop, - cssProp=dir==="x" ? "left" : "top"; - switch(t){ - case "function": /* this currently is not used. Consider removing it */ - return val(); - break; - case "object": /* js/jquery object */ - var obj=val.jquery ? val : $(val); - if(!obj.length){return;} - return dir==="x" ? _childPos(obj)[1] : _childPos(obj)[0]; - break; - case "string": case "number": - if(_isNumeric(val)){ /* numeric value */ - return Math.abs(val); - }else if(val.indexOf("%")!==-1){ /* percentage value */ - return Math.abs(contentLength*parseInt(val)/100); - }else if(val.indexOf("-=")!==-1){ /* decrease value */ - return Math.abs(contentPos-parseInt(val.split("-=")[1])); - }else if(val.indexOf("+=")!==-1){ /* inrease value */ - var p=(contentPos+parseInt(val.split("+=")[1])); - return p>=0 ? 0 : Math.abs(p); - }else if(val.indexOf("px")!==-1 && _isNumeric(val.split("px")[0])){ /* pixels string value (e.g. "100px") */ - return Math.abs(val.split("px")[0]); - }else{ - if(val==="top" || val==="left"){ /* special strings */ - return 0; - }else if(val==="bottom"){ - return Math.abs(wrapper.height()-mCSB_container.outerHeight(false)); - }else if(val==="right"){ - return Math.abs(wrapper.width()-mCSB_container.outerWidth(false)); - }else if(val==="first" || val==="last"){ - var obj=mCSB_container.find(":"+val); - return dir==="x" ? _childPos(obj)[1] : _childPos(obj)[0]; - }else{ - if($(val).length){ /* jquery selector */ - return dir==="x" ? _childPos($(val))[1] : _childPos($(val))[0]; - }else{ /* other values (e.g. "100em") */ - mCSB_container.css(cssProp,val); - methods.update.call(null,$this[0]); - return; - } - } - } - break; - } - }, - /* -------------------- */ - - - /* calls the update method automatically */ - _autoUpdate=function(rem){ - var $this=$(this),d=$this.data(pluginPfx),o=d.opt, - mCSB_container=$("#mCSB_"+d.idx+"_container"); - if(rem){ - /* - removes autoUpdate timer - usage: _autoUpdate.call(this,"remove"); - */ - clearTimeout(mCSB_container[0].autoUpdate); - _delete(mCSB_container[0],"autoUpdate"); - return; - } - var wrapper=mCSB_container.parent(), - scrollbar=[$("#mCSB_"+d.idx+"_scrollbar_vertical"),$("#mCSB_"+d.idx+"_scrollbar_horizontal")], - scrollbarSize=function(){return [ - scrollbar[0].is(":visible") ? scrollbar[0].outerHeight(true) : 0, /* returns y-scrollbar height */ - scrollbar[1].is(":visible") ? scrollbar[1].outerWidth(true) : 0 /* returns x-scrollbar width */ - ]}, - oldSelSize=sizesSum(),newSelSize, - os=[mCSB_container.outerHeight(false),mCSB_container.outerWidth(false),wrapper.height(),wrapper.width(),scrollbarSize()[0],scrollbarSize()[1]],ns, - oldImgsLen=imgSum(),newImgsLen; - upd(); - function upd(){ - clearTimeout(mCSB_container[0].autoUpdate); - if($this.parents("html").length===0){ - /* check element in dom tree */ - $this=null; - return; - } - mCSB_container[0].autoUpdate=setTimeout(function(){ - /* update on specific selector(s) length and size change */ - if(o.advanced.updateOnSelectorChange){ - newSelSize=sizesSum(); - if(newSelSize!==oldSelSize){ - doUpd(3); - oldSelSize=newSelSize; - return; - } - } - /* update on main element and scrollbar size changes */ - if(o.advanced.updateOnContentResize){ - ns=[mCSB_container.outerHeight(false),mCSB_container.outerWidth(false),wrapper.height(),wrapper.width(),scrollbarSize()[0],scrollbarSize()[1]]; - if(ns[0]!==os[0] || ns[1]!==os[1] || ns[2]!==os[2] || ns[3]!==os[3] || ns[4]!==os[4] || ns[5]!==os[5]){ - doUpd(ns[0]!==os[0] || ns[1]!==os[1]); - os=ns; - } - } - /* update on image load */ - if(o.advanced.updateOnImageLoad){ - newImgsLen=imgSum(); - if(newImgsLen!==oldImgsLen){ - mCSB_container.find("img").each(function(){ - imgLoader(this); - }); - oldImgsLen=newImgsLen; - } - } - if(o.advanced.updateOnSelectorChange || o.advanced.updateOnContentResize || o.advanced.updateOnImageLoad){upd();} - },o.advanced.autoUpdateTimeout); - } - /* returns images amount */ - function imgSum(){ - var total=0 - if(o.advanced.updateOnImageLoad){total=mCSB_container.find("img").length;} - return total; - } - /* a tiny image loader */ - function imgLoader(el){ - if($(el).hasClass(classes[2])){doUpd(); return;} - var img=new Image(); - function createDelegate(contextObject,delegateMethod){ - return function(){return delegateMethod.apply(contextObject,arguments);} - } - function imgOnLoad(){ - this.onload=null; - $(el).addClass(classes[2]); - doUpd(2); - } - img.onload=createDelegate(img,imgOnLoad); - img.src=el.src; - } - /* returns the total height and width sum of all elements matching the selector */ - function sizesSum(){ - if(o.advanced.updateOnSelectorChange===true){o.advanced.updateOnSelectorChange="*";} - var total=0,sel=mCSB_container.find(o.advanced.updateOnSelectorChange); - if(o.advanced.updateOnSelectorChange && sel.length>0){sel.each(function(){total+=$(this).height()+$(this).width();});} - return total; - } - /* calls the update method */ - function doUpd(cb){ - clearTimeout(mCSB_container[0].autoUpdate); - methods.update.call(null,$this[0],cb); - } - }, - /* -------------------- */ - - - /* snaps scrolling to a multiple of a pixels number */ - _snapAmount=function(to,amount,offset){ - return (Math.round(to/amount)*amount-offset); - }, - /* -------------------- */ - - - /* stops content and scrollbar animations */ - _stop=function(el){ - var d=el.data(pluginPfx), - sel=$("#mCSB_"+d.idx+"_container,#mCSB_"+d.idx+"_container_wrapper,#mCSB_"+d.idx+"_dragger_vertical,#mCSB_"+d.idx+"_dragger_horizontal"); - sel.each(function(){ - _stopTween.call(this); - }); - }, - /* -------------------- */ - - - /* - ANIMATES CONTENT - This is where the actual scrolling happens - */ - _scrollTo=function(el,to,options){ - var d=el.data(pluginPfx),o=d.opt, - defaults={ - trigger:"internal", - dir:"y", - scrollEasing:"mcsEaseOut", - drag:false, - dur:o.scrollInertia, - overwrite:"all", - callbacks:true, - onStart:true, - onUpdate:true, - onComplete:true - }, - options=$.extend(defaults,options), - dur=[options.dur,(options.drag ? 0 : options.dur)], - mCustomScrollBox=$("#mCSB_"+d.idx), - mCSB_container=$("#mCSB_"+d.idx+"_container"), - wrapper=mCSB_container.parent(), - totalScrollOffsets=o.callbacks.onTotalScrollOffset ? _arr.call(el,o.callbacks.onTotalScrollOffset) : [0,0], - totalScrollBackOffsets=o.callbacks.onTotalScrollBackOffset ? _arr.call(el,o.callbacks.onTotalScrollBackOffset) : [0,0]; - d.trigger=options.trigger; - if(wrapper.scrollTop()!==0 || wrapper.scrollLeft()!==0){ /* always reset scrollTop/Left */ - $(".mCSB_"+d.idx+"_scrollbar").css("visibility","visible"); - wrapper.scrollTop(0).scrollLeft(0); - } - if(to==="_resetY" && !d.contentReset.y){ - /* callbacks: onOverflowYNone */ - if(_cb("onOverflowYNone")){o.callbacks.onOverflowYNone.call(el[0]);} - d.contentReset.y=1; - } - if(to==="_resetX" && !d.contentReset.x){ - /* callbacks: onOverflowXNone */ - if(_cb("onOverflowXNone")){o.callbacks.onOverflowXNone.call(el[0]);} - d.contentReset.x=1; - } - if(to==="_resetY" || to==="_resetX"){return;} - if((d.contentReset.y || !el[0].mcs) && d.overflowed[0]){ - /* callbacks: onOverflowY */ - if(_cb("onOverflowY")){o.callbacks.onOverflowY.call(el[0]);} - d.contentReset.x=null; - } - if((d.contentReset.x || !el[0].mcs) && d.overflowed[1]){ - /* callbacks: onOverflowX */ - if(_cb("onOverflowX")){o.callbacks.onOverflowX.call(el[0]);} - d.contentReset.x=null; - } - if(o.snapAmount){to=_snapAmount(to,o.snapAmount,o.snapOffset);} /* scrolling snapping */ - switch(options.dir){ - case "x": - var mCSB_dragger=$("#mCSB_"+d.idx+"_dragger_horizontal"), - property="left", - contentPos=mCSB_container[0].offsetLeft, - limit=[ - mCustomScrollBox.width()-mCSB_container.outerWidth(false), - mCSB_dragger.parent().width()-mCSB_dragger.width() - ], - scrollTo=[to,to===0 ? 0 : (to/d.scrollRatio.x)], - tso=totalScrollOffsets[1], - tsbo=totalScrollBackOffsets[1], - totalScrollOffset=tso>0 ? tso/d.scrollRatio.x : 0, - totalScrollBackOffset=tsbo>0 ? tsbo/d.scrollRatio.x : 0; - break; - case "y": - var mCSB_dragger=$("#mCSB_"+d.idx+"_dragger_vertical"), - property="top", - contentPos=mCSB_container[0].offsetTop, - limit=[ - mCustomScrollBox.height()-mCSB_container.outerHeight(false), - mCSB_dragger.parent().height()-mCSB_dragger.height() - ], - scrollTo=[to,to===0 ? 0 : (to/d.scrollRatio.y)], - tso=totalScrollOffsets[0], - tsbo=totalScrollBackOffsets[0], - totalScrollOffset=tso>0 ? tso/d.scrollRatio.y : 0, - totalScrollBackOffset=tsbo>0 ? tsbo/d.scrollRatio.y : 0; - break; - } - if(scrollTo[1]<0 || (scrollTo[0]===0 && scrollTo[1]===0)){ - scrollTo=[0,0]; - }else if(scrollTo[1]>=limit[1]){ - scrollTo=[limit[0],limit[1]]; - }else{ - scrollTo[0]=-scrollTo[0]; - } - if(!el[0].mcs){ - _mcs(); /* init mcs object (once) to make it available before callbacks */ - if(_cb("onInit")){o.callbacks.onInit.call(el[0]);} /* callbacks: onInit */ - } - clearTimeout(mCSB_container[0].onCompleteTimeout); - if(!d.tweenRunning && ((contentPos===0 && scrollTo[0]>=0) || (contentPos===limit[0] && scrollTo[0]<=limit[0]))){return;} - _tweenTo(mCSB_dragger[0],property,Math.round(scrollTo[1]),dur[1],options.scrollEasing); - _tweenTo(mCSB_container[0],property,Math.round(scrollTo[0]),dur[0],options.scrollEasing,options.overwrite,{ - onStart:function(){ - if(options.callbacks && options.onStart && !d.tweenRunning){ - /* callbacks: onScrollStart */ - if(_cb("onScrollStart")){_mcs(); o.callbacks.onScrollStart.call(el[0]);} - d.tweenRunning=true; - _onDragClasses(mCSB_dragger); - d.cbOffsets=_cbOffsets(); - } - },onUpdate:function(){ - if(options.callbacks && options.onUpdate){ - /* callbacks: whileScrolling */ - if(_cb("whileScrolling")){_mcs(); o.callbacks.whileScrolling.call(el[0]);} - } - },onComplete:function(){ - if(options.callbacks && options.onComplete){ - if(o.axis==="yx"){clearTimeout(mCSB_container[0].onCompleteTimeout);} - var t=mCSB_container[0].idleTimer || 0; - mCSB_container[0].onCompleteTimeout=setTimeout(function(){ - /* callbacks: onScroll, onTotalScroll, onTotalScrollBack */ - if(_cb("onScroll")){_mcs(); o.callbacks.onScroll.call(el[0]);} - if(_cb("onTotalScroll") && scrollTo[1]>=limit[1]-totalScrollOffset && d.cbOffsets[0]){_mcs(); o.callbacks.onTotalScroll.call(el[0]);} - if(_cb("onTotalScrollBack") && scrollTo[1]<=totalScrollBackOffset && d.cbOffsets[1]){_mcs(); o.callbacks.onTotalScrollBack.call(el[0]);} - d.tweenRunning=false; - mCSB_container[0].idleTimer=0; - _onDragClasses(mCSB_dragger,"hide"); - },t); - } - } - }); - /* checks if callback function exists */ - function _cb(cb){ - return d && o.callbacks[cb] && typeof o.callbacks[cb]==="function"; - } - /* checks whether callback offsets always trigger */ - function _cbOffsets(){ - return [o.callbacks.alwaysTriggerOffsets || contentPos>=limit[0]+tso,o.callbacks.alwaysTriggerOffsets || contentPos<=-tsbo]; - } - /* - populates object with useful values for the user - values: - content: this.mcs.content - content top position: this.mcs.top - content left position: this.mcs.left - dragger top position: this.mcs.draggerTop - dragger left position: this.mcs.draggerLeft - scrolling y percentage: this.mcs.topPct - scrolling x percentage: this.mcs.leftPct - scrolling direction: this.mcs.direction - */ - function _mcs(){ - var cp=[mCSB_container[0].offsetTop,mCSB_container[0].offsetLeft], /* content position */ - dp=[mCSB_dragger[0].offsetTop,mCSB_dragger[0].offsetLeft], /* dragger position */ - cl=[mCSB_container.outerHeight(false),mCSB_container.outerWidth(false)], /* content length */ - pl=[mCustomScrollBox.height(),mCustomScrollBox.width()]; /* content parent length */ - el[0].mcs={ - content:mCSB_container, /* original content wrapper as jquery object */ - top:cp[0],left:cp[1],draggerTop:dp[0],draggerLeft:dp[1], - topPct:Math.round((100*Math.abs(cp[0]))/(Math.abs(cl[0])-pl[0])),leftPct:Math.round((100*Math.abs(cp[1]))/(Math.abs(cl[1])-pl[1])), - direction:options.dir - }; - /* - this refers to the original element containing the scrollbar(s) - usage: this.mcs.top, this.mcs.leftPct etc. - */ - } - }, - /* -------------------- */ - - - /* - CUSTOM JAVASCRIPT ANIMATION TWEEN - Lighter and faster than jquery animate() and css transitions - Animates top/left properties and includes easings - */ - _tweenTo=function(el,prop,to,duration,easing,overwrite,callbacks){ - if(!el._mTween){el._mTween={top:{},left:{}};} - var callbacks=callbacks || {}, - onStart=callbacks.onStart || function(){},onUpdate=callbacks.onUpdate || function(){},onComplete=callbacks.onComplete || function(){}, - startTime=_getTime(),_delay,progress=0,from=el.offsetTop,elStyle=el.style,_request,tobj=el._mTween[prop]; - if(prop==="left"){from=el.offsetLeft;} - var diff=to-from; - tobj.stop=0; - if(overwrite!=="none"){_cancelTween();} - _startTween(); - function _step(){ - if(tobj.stop){return;} - if(!progress){onStart.call();} - progress=_getTime()-startTime; - _tween(); - if(progress>=tobj.time){ - tobj.time=(progress>tobj.time) ? progress+_delay-(progress-tobj.time) : progress+_delay-1; - if(tobj.time0){ - tobj.currVal=_ease(tobj.time,from,diff,duration,easing); - elStyle[prop]=Math.round(tobj.currVal)+"px"; - }else{ - elStyle[prop]=to+"px"; - } - onUpdate.call(); - } - function _startTween(){ - _delay=1000/60; - tobj.time=progress+_delay; - _request=(!window.requestAnimationFrame) ? function(f){_tween(); return setTimeout(f,0.01);} : window.requestAnimationFrame; - tobj.id=_request(_step); - } - function _cancelTween(){ - if(tobj.id==null){return;} - if(!window.requestAnimationFrame){clearTimeout(tobj.id); - }else{window.cancelAnimationFrame(tobj.id);} - tobj.id=null; - } - function _ease(t,b,c,d,type){ - switch(type){ - case "linear": case "mcsLinear": - return c*t/d + b; - break; - case "mcsLinearOut": - t/=d; t--; return c * Math.sqrt(1 - t*t) + b; - break; - case "easeInOutSmooth": - t/=d/2; - if(t<1) return c/2*t*t + b; - t--; - return -c/2 * (t*(t-2) - 1) + b; - break; - case "easeInOutStrong": - t/=d/2; - if(t<1) return c/2 * Math.pow( 2, 10 * (t - 1) ) + b; - t--; - return c/2 * ( -Math.pow( 2, -10 * t) + 2 ) + b; - break; - case "easeInOut": case "mcsEaseInOut": - t/=d/2; - if(t<1) return c/2*t*t*t + b; - t-=2; - return c/2*(t*t*t + 2) + b; - break; - case "easeOutSmooth": - t/=d; t--; - return -c * (t*t*t*t - 1) + b; - break; - case "easeOutStrong": - return c * ( -Math.pow( 2, -10 * t/d ) + 1 ) + b; - break; - case "easeOut": case "mcsEaseOut": default: - var ts=(t/=d)*t,tc=ts*t; - return b+c*(0.499999999999997*tc*ts + -2.5*ts*ts + 5.5*tc + -6.5*ts + 4*t); - } - } - }, - /* -------------------- */ - - - /* returns current time */ - _getTime=function(){ - if(window.performance && window.performance.now){ - return window.performance.now(); - }else{ - if(window.performance && window.performance.webkitNow){ - return window.performance.webkitNow(); - }else{ - if(Date.now){return Date.now();}else{return new Date().getTime();} - } - } - }, - /* -------------------- */ - - - /* stops a tween */ - _stopTween=function(){ - var el=this; - if(!el._mTween){el._mTween={top:{},left:{}};} - var props=["top","left"]; - for(var i=0; i=0 && cPos[0]+_childPos($el)[0]=0 && cPos[1]+_childPos($el)[1]',a,""].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b)&&c(b).matches||!1;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f #mq-test-1 { width: 42px; }',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){v(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},g=function(a){return a.replace(c.regex.minmaxwh,"").match(c.regex.other)};if(c.ajax=f,c.queue=d,c.unsupportedmq=g,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,comments:/\/\*[^*]*\*+([^/][^*]*\*+)*\//gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,maxw:/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,minmaxwh:/\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi,other:/\([^\)]*\)/g},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var h,i,j,k=a.document,l=k.documentElement,m=[],n=[],o=[],p={},q=30,r=k.getElementsByTagName("head")[0]||l,s=k.getElementsByTagName("base")[0],t=r.getElementsByTagName("link"),u=function(){var a,b=k.createElement("div"),c=k.body,d=l.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=k.createElement("body"),c.style.background="none"),l.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&l.insertBefore(c,l.firstChild),a=b.offsetWidth,f?l.removeChild(c):c.removeChild(b),l.style.fontSize=d,e&&(c.style.fontSize=e),a=j=parseFloat(a)},v=function(b){var c="clientWidth",d=l[c],e="CSS1Compat"===k.compatMode&&d||k.body[c]||d,f={},g=t[t.length-1],p=(new Date).getTime();if(b&&h&&q>p-h)return a.clearTimeout(i),i=a.setTimeout(v,q),void 0;h=p;for(var s in m)if(m.hasOwnProperty(s)){var w=m[s],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?j||u():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?j||u():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(n[w.rules]))}for(var C in o)o.hasOwnProperty(C)&&o[C]&&o[C].parentNode===r&&r.removeChild(o[C]);o.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=k.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,r.insertBefore(E,g.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(k.createTextNode(F)),o.push(E)}},w=function(a,b,d){var e=a.replace(c.regex.comments,"").replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},i=!f&&d;b.length&&(b+="/"),i&&(f=1);for(var j=0;f>j;j++){var k,l,o,p;i?(k=d,n.push(h(a))):(k=e[j].match(c.regex.findStyles)&&RegExp.$1,n.push(RegExp.$2&&h(RegExp.$2))),o=k.split(","),p=o.length;for(var q=0;p>q;q++)l=o[q],g(l)||m.push({media:l.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:n.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}v()},x=function(){if(d.length){var b=d.shift();f(b.href,function(c){w(c,b.href,b.media),p[b.href]=!0,a.setTimeout(function(){x()},0)})}},y=function(){for(var b=0;b, George Bratsos ", - "license": "GPL-3.0", - "bugs": { - "url": "https://github.com/GBratsos/floativ/issues" - }, - "homepage": "https://github.com/GBratsos/floativ", - "dependencies": { - "jquery": "<2.x.x", - "mCustomScrollbar": "git://github.com/malihu/malihu-custom-scrollbar-plugin.git#master" - } -} + "author": "Panagiotis Papadatis , George Bratsos ", + "license": "GPL-3.0", + "bugs": { + "url": "https://github.com/GBratsos/floativ/issues" + }, + "homepage": "https://github.com/GBratsos/floativ", + "devDependencies": { + "jquery": "<2.x.x", + "mCustomScrollbar": "git://github.com/malihu/malihu-custom-scrollbar-plugin.git#master", + "font-awesome": "^4.3.0" + } +} \ No newline at end of file diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..d0e5f1b --- /dev/null +++ b/robots.txt @@ -0,0 +1,5 @@ +# www.robotstxt.org/ + +# Allow crawling of all content +User-agent: * +Disallow: