From 53186f70604552ce023caefa73b27a349307b250 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sat, 2 Mar 2013 14:06:22 +0100 Subject: [PATCH] [feature/jquery_clock] Add jQuery-based clock to prosilver clock_side The clock we currently use needs flash support. As newer browsers and mobile devices are moving on from flash to HTML5 we should do the same and replace our flash clock with a jQuery based clock. It is using image sprites which means we only have to load 2 images. One for the single digits and one for the double digit hours. This is currently only added to prosilver and the obsolete settings in the clock module still need to be removed. B3P-218 --- .../template/portal/modules/clock_side.html | 35 ++- .../portal/modules/jquery.easing.1.3.js | 205 ++++++++++++++++++ .../template/portal/modules/portal_clock.js | 159 ++++++++++++++ .../images/portal/portal_clock_double.png | Bin 0 -> 9743 bytes .../images/portal/portal_clock_single.png | Bin 0 -> 7401 bytes .../theme/images/portal/spacer_down.png | Bin 0 -> 2799 bytes .../theme/images/portal/spacer_up.png | Bin 0 -> 2799 bytes root/styles/prosilver/theme/portal.css | 158 +++++++++++++- 8 files changed, 550 insertions(+), 7 deletions(-) create mode 100644 root/styles/prosilver/template/portal/modules/jquery.easing.1.3.js create mode 100644 root/styles/prosilver/template/portal/modules/portal_clock.js create mode 100644 root/styles/prosilver/theme/images/portal/portal_clock_double.png create mode 100644 root/styles/prosilver/theme/images/portal/portal_clock_single.png create mode 100644 root/styles/prosilver/theme/images/portal/spacer_down.png create mode 100644 root/styles/prosilver/theme/images/portal/spacer_up.png diff --git a/root/styles/prosilver/template/portal/modules/clock_side.html b/root/styles/prosilver/template/portal/modules/clock_side.html index f37197b5..5d34b13a 100644 --- a/root/styles/prosilver/template/portal/modules/clock_side.html +++ b/root/styles/prosilver/template/portal/modules/clock_side.html @@ -1,9 +1,32 @@ {$LR_BLOCK_H_L} {$TITLE}{$LR_BLOCK_H_R} -
-
- - - - +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + {$LR_BLOCK_F_L}{$LR_BLOCK_F_R} diff --git a/root/styles/prosilver/template/portal/modules/jquery.easing.1.3.js b/root/styles/prosilver/template/portal/modules/jquery.easing.1.3.js new file mode 100644 index 00000000..ef743210 --- /dev/null +++ b/root/styles/prosilver/template/portal/modules/jquery.easing.1.3.js @@ -0,0 +1,205 @@ +/* + * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ + * + * Uses the built in easing capabilities added In jQuery 1.1 + * to offer multiple easing options + * + * TERMS OF USE - jQuery Easing + * + * Open source under the BSD License. + * + * Copyright © 2008 George McGinley Smith + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +// t: current time, b: begInnIng value, c: change In value, d: duration +jQuery.easing['jswing'] = jQuery.easing['swing']; + +jQuery.extend( jQuery.easing, +{ + def: 'easeOutQuad', + swing: function (x, t, b, c, d) { + //alert(jQuery.easing.default); + return jQuery.easing[jQuery.easing.def](x, t, b, c, d); + }, + easeInQuad: function (x, t, b, c, d) { + return c*(t/=d)*t + b; + }, + easeOutQuad: function (x, t, b, c, d) { + return -c *(t/=d)*(t-2) + b; + }, + easeInOutQuad: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t + b; + return -c/2 * ((--t)*(t-2) - 1) + b; + }, + easeInCubic: function (x, t, b, c, d) { + return c*(t/=d)*t*t + b; + }, + easeOutCubic: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t + 1) + b; + }, + easeInOutCubic: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t + b; + return c/2*((t-=2)*t*t + 2) + b; + }, + easeInQuart: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t + b; + }, + easeOutQuart: function (x, t, b, c, d) { + return -c * ((t=t/d-1)*t*t*t - 1) + b; + }, + easeInOutQuart: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t + b; + return -c/2 * ((t-=2)*t*t*t - 2) + b; + }, + easeInQuint: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t*t + b; + }, + easeOutQuint: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t*t*t + 1) + b; + }, + easeInOutQuint: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; + return c/2*((t-=2)*t*t*t*t + 2) + b; + }, + easeInSine: function (x, t, b, c, d) { + return -c * Math.cos(t/d * (Math.PI/2)) + c + b; + }, + easeOutSine: function (x, t, b, c, d) { + return c * Math.sin(t/d * (Math.PI/2)) + b; + }, + easeInOutSine: function (x, t, b, c, d) { + return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; + }, + easeInExpo: function (x, t, b, c, d) { + return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; + }, + easeOutExpo: function (x, t, b, c, d) { + return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; + }, + easeInOutExpo: function (x, t, b, c, d) { + if (t==0) return b; + if (t==d) return b+c; + if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; + return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; + }, + easeInCirc: function (x, t, b, c, d) { + return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; + }, + easeOutCirc: function (x, t, b, c, d) { + return c * Math.sqrt(1 - (t=t/d-1)*t) + b; + }, + easeInOutCirc: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; + return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; + }, + easeInElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + }, + easeOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; + }, + easeInOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; + }, + easeInBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*(t/=d)*t*((s+1)*t - s) + b; + }, + easeOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; + }, + easeInOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; + return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; + }, + easeInBounce: function (x, t, b, c, d) { + return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; + }, + easeOutBounce: function (x, t, b, c, d) { + if ((t/=d) < (1/2.75)) { + return c*(7.5625*t*t) + b; + } else if (t < (2/2.75)) { + return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; + } else if (t < (2.5/2.75)) { + return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; + } else { + return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; + } + }, + easeInOutBounce: function (x, t, b, c, d) { + if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; + return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; + } +}); + +/* + * + * TERMS OF USE - EASING EQUATIONS + * + * Open source under the BSD License. + * + * Copyright © 2001 Robert Penner + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ \ No newline at end of file diff --git a/root/styles/prosilver/template/portal/modules/portal_clock.js b/root/styles/prosilver/template/portal/modules/portal_clock.js new file mode 100644 index 00000000..a5279c65 --- /dev/null +++ b/root/styles/prosilver/template/portal/modules/portal_clock.js @@ -0,0 +1,159 @@ +/** +* +* @package Board3 Portal v2.1 - Clock +* @copyright (c) 2013 Board3 Group ( www.board3.de ) +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +(function($) { // Avoid conflicts with other libraries + +"use strict"; + +var hour_cur = 0; +var minL_cur = 0; +var minR_cur = 0; +var secL_cur = 0; +var secR_cur = 0; + +phpbb.b3pFlipClock = function(identifierUp, identifierDown, val, type) { + var backIdUp = identifierUp.replace('-front-', '-back-'); + var backIdDown = identifierDown.replace('-front-', '-back-'); + var backPosition = $(backIdUp).css('background-position'); + var backPositionLength = backPosition.length; + var backY; + + if (backPosition.substring(backPositionLength - 3, backPositionLength - 2) === '0') { + backY = '0px'; + } else { + backY = backPosition.substring(backPositionLength - 5, backPositionLength); + } + + backPosition = $(backIdUp).css('background-position'); + $(identifierUp) + .css('background-position', backPosition) + .height('21px') + .css({'visibility': 'visible', 'display': 'inline-block' }); + $(identifierDown) + .height('0px') + .css('visibility', 'visible'); + + // single digits will have digits 0 - 9, double 0 - 24 + if (type === 'single') { + $(backIdUp).css('background-position', (val * -22) + 'px ' + backY); + } else if (type === 'double') { + if (val >= 12) { + backY = '-22px'; + val = val - 12; + $(backIdUp).css('background-position', (val * -43) + 'px ' + backY); + val = val + 12; + } else { + if (val < 12 && backY !== '0px') { + backY = '0px'; + } + $(backIdUp).css('background-position', (val * -43) + 'px ' + backY); + } + } else { + return; + } + + // now get the vertical offset of the bottom digit + backPosition = $(identifierDown).css('background-position'); + backPositionLength = backPosition.length; + + if (backPosition.substring(backPositionLength - 3, backPositionLength - 2) === '0') { + backY = '0px'; + } else { + backY = backPosition.substring(backPositionLength - 5, backPositionLength); + } + + // single digits will have digits 0 - 9, double 0 - 24 + if (type === 'single') { + $(identifierDown).css('background-position', (val * -22) + 'px ' + backY); + } else if (type === 'double') { + if (val >= 12) { + backY = '-65px'; + val = val - 12; + $(identifierDown).css('background-position', (val * -43) + 'px ' + backY); + val = val + 12; + } else { + if (val < 12 && backY !== '-44px') { + backY = '-44px'; + } + $(identifierDown).css('background-position', (val * -43) + 'px ' + backY); + } + } else { + return; + } + + $(identifierUp).animate({ + height: '0px', + 'margin-top': '21px' + }, + { + 'duration': 150, + defaultEasing: 'easeInOutSine', + 'complete': function(){ + $(identifierDown).animate( + {height: '20px'}, + { + 'duration': 150, + defaultEasing: 'easeInOutSine', + 'complete': function(){ + $(backIdDown).css('background-position', $(identifierDown).css('background-position')); + $(identifierDown).css({ + 'visibility': 'hidden', + 'display': 'inline-block' + }); + $(identifierUp).css({ + 'visibility': 'hidden', + 'display': 'inline-block', + 'margin-top': '0px' + }); + } + } + ); + } + } + ); +}; + +phpbb.b3pClock = function() { + var now = new Date(); + var hour = now.getHours(); + var minL = Math.floor(now.getMinutes() / 10); + var minR = now.getMinutes() % 10; + var secL = Math.floor(now.getSeconds() / 10); + var secR = now.getSeconds() % 10; + + if (hour !== hour_cur) { + phpbb.b3pFlipClock('#portal-clock-front-hours-up', '#portal-clock-front-hours-down', hour, 'double'); + hour_cur = hour; + } + + if (minR !== minR_cur) { + phpbb.b3pFlipClock('#portal-clock-front-minutes-up-right', '#portal-clock-front-minutes-down-right', minR, 'single'); + minR_cur = minR; + } + + if (minL !== minL_cur) { + phpbb.b3pFlipClock('#portal-clock-front-minutes-up-left', '#portal-clock-front-minutes-down-left', minL, 'single'); + minL_cur = minL; + } + + if (secR !== secR_cur) { + phpbb.b3pFlipClock('#portal-clock-front-seconds-up-right', '#portal-clock-front-seconds-down-right', secR, 'single'); + secR_cur = secR; + } + + if (secL !== secL_cur) { + phpbb.b3pFlipClock('#portal-clock-front-seconds-up-left', '#portal-clock-front-seconds-down-left', secL, 'single'); + secL_cur = secL; + } +}; + +$(document).ready(function() { + setInterval(phpbb.b3pClock, 1000); +}); + +})(jQuery); // Avoid conflicts with other libraries diff --git a/root/styles/prosilver/theme/images/portal/portal_clock_double.png b/root/styles/prosilver/theme/images/portal/portal_clock_double.png new file mode 100644 index 0000000000000000000000000000000000000000..1e80bb93e94d7e8925ef51f70576395e8821bfb6 GIT binary patch literal 9743 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 IWX#_GAMSs%EdT%j literal 0 HcmV?d00001 diff --git a/root/styles/prosilver/theme/images/portal/spacer_down.png b/root/styles/prosilver/theme/images/portal/spacer_down.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d04fe386198a68a673e9391fe2acb89363f802 GIT binary patch literal 2799 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 literal 0 HcmV?d00001 diff --git a/root/styles/prosilver/theme/portal.css b/root/styles/prosilver/theme/portal.css index 67ae8b7f..01a2498d 100644 --- a/root/styles/prosilver/theme/portal.css +++ b/root/styles/prosilver/theme/portal.css @@ -92,4 +92,160 @@ span.portal-corners-top-inner, span.portal-corners-bottom-inner{ background-image: url("./images/portal/arrowbullet_rtl.gif"); background-position: center right; /*custom bullet list image*/ padding-right: 19px; /*link text is indented 19px*/ -} \ No newline at end of file +} + +/* Portal clock +-------------------------------------- */ +#portal-clock { + position: relative; + width: 100%; +} + +#portal-clock-front, #portal-clock-back { + position: absolute; + top: 0px; +} + +#portal-clock-front-upper div { + height: 21px; + position: absolute; + vertical-align: bottom; + visibility: hidden; +} + +#portal-clock-front-lower div { + height: 20px; + position: absolute; + vertical-align: top; + visibility: hidden; +} + +#portal-clock-back-upper div { + position: absolute; + vertical-align: bottom; +} + +#portal-clock-back-lower div { + position: absolute; + vertical-align: top; +} + +#portal-clock-back-seconds-up-left, #portal-clock-back-seconds-up-right, +#portal-clock-front-minutes-up-left, #portal-clock-front-minutes-up-right, +#portal-clock-back-minutes-up-left, #portal-clock-back-minutes-up-right, +#portal-clock-front-seconds-up-left, #portal-clock-front-seconds-up-right, +#portal-clock-back-minutes-down-left, #portal-clock-back-minutes-down-right, +#portal-clock-back-seconds-down-left, #portal-clock-back-seconds-down-right, +#portal-clock-front-minutes-down-left, #portal-clock-front-minutes-down-right, +#portal-clock-front-seconds-down-left, #portal-clock-front-seconds-down-right { + width: 21px; + height: 21px; + background-position: 0 0; + background: url(./images/portal/portal_clock_single.png) no-repeat; +} + +/* Minutes start +-------------------------------------- */ +#portal-clock-back-minutes-up-left{ + background-position: 0 0; + margin: 0 0 0 43px; +} + +#portal-clock-back-minutes-up-right { + background-position: 0 -43px; + margin: 0 0 0 64px; +} + +#portal-clock-front-minutes-up-left { + background-position: 0 0; + margin: 0 0 0 43px; +} + +#portal-clock-front-minutes-up-right { + background-position: 0 -43px; + margin: 0 0 0 63px; +} + +#portal-clock-back-minutes-down-left{ + background-position: 0 -22px; + margin: 21px 0 0 43px; +} + +#portal-clock-back-minutes-down-right { + background-position: 0 -65px; + margin: 21px 0 0 64px; +} + +#portal-clock-front-minutes-down-left { + background-position: 0 -22px; + margin: 21px 0 0 42px; +} + +#portal-clock-front-minutes-down-right { + background-position: 0 -65px; + margin: 21px 0 0 63px; +} + +/* Seconds start +---------------------------------------- */ +#portal-clock-back-seconds-up-left{ + background-position: 0 0; + margin: 0 0 0 85px; +} + +#portal-clock-back-seconds-up-right { + background-position: 0 -43px; + margin: 0 0 0 106px; +} + +#portal-clock-front-seconds-up-left { + background-position: 0 0; + margin: 0 0 0 84px; +} + +#portal-clock-front-seconds-up-right { + background-position: 0 -43px; + margin: 0 0 0 105px; +} + +#portal-clock-back-seconds-down-left{ + background-position: 0 -22px; + margin: 21px 0 0 85px; +} + +#portal-clock-back-seconds-down-right { + background-position: 0 -65px; + margin: 21px 0 0 106px; +} + +#portal-clock-front-seconds-down-left { + background-position: 0 -22px; + margin: 21px 0 0 84px; +} + +#portal-clock-front-seconds-down-right { + background-position: 0 -65px; + margin: 21px 0 0 105px; +} + +/* Hours start +---------------------------------------- */ +#portal-clock-back-hours-up, #portal-clock-front-hours-up { + width: 42px; + height: 21px; + background: url(./images/portal/portal_clock_double.png) no-repeat; + background-position: 0 0; + vertical-align: bottom; + display: inline-block; + margin: 0 0 0 0; +} + +#portal-clock-back-hours-down, #portal-clock-front-hours-down { + width: 42px; + height: 20px; + background: url(./images/portal/portal_clock_double.png) no-repeat; + background-position: 0 -44px; + vertical-align: top; + display: inline-block; + margin: 21px 0 0 0; +}