From 09faef4d74e05910be944a649e35e1e871a60ca4 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sat, 2 Mar 2013 23:07:56 +0100 Subject: [PATCH] [feature/jquery_clock] Add jQuery clock to subsilver2 The clock module is now also displaying the jQuery clock in subsilver2. B3P-218 --- .../overall_header_head_append_listener.html | 2 +- .../overall_header_head_append_listener.html | 1 + .../template/portal/modules/clock_side.html | 37 +++- .../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/subsilver2/theme/portal.css | 155 +++++++++++++ 10 files changed, 551 insertions(+), 8 deletions(-) create mode 100644 root/styles/subsilver2/template/events/overall_header_head_append_listener.html create mode 100644 root/styles/subsilver2/template/portal/modules/jquery.easing.1.3.js create mode 100644 root/styles/subsilver2/template/portal/modules/portal_clock.js create mode 100644 root/styles/subsilver2/theme/images/portal/portal_clock_double.png create mode 100644 root/styles/subsilver2/theme/images/portal/portal_clock_single.png create mode 100644 root/styles/subsilver2/theme/images/portal/spacer_down.png create mode 100644 root/styles/subsilver2/theme/images/portal/spacer_up.png create mode 100644 root/styles/subsilver2/theme/portal.css diff --git a/root/styles/prosilver/template/events/overall_header_head_append_listener.html b/root/styles/prosilver/template/events/overall_header_head_append_listener.html index b0a87f19..2ca0ca1f 100644 --- a/root/styles/prosilver/template/events/overall_header_head_append_listener.html +++ b/root/styles/prosilver/template/events/overall_header_head_append_listener.html @@ -1 +1 @@ - + diff --git a/root/styles/subsilver2/template/events/overall_header_head_append_listener.html b/root/styles/subsilver2/template/events/overall_header_head_append_listener.html new file mode 100644 index 00000000..fa7ec0c9 --- /dev/null +++ b/root/styles/subsilver2/template/events/overall_header_head_append_listener.html @@ -0,0 +1 @@ + diff --git a/root/styles/subsilver2/template/portal/modules/clock_side.html b/root/styles/subsilver2/template/portal/modules/clock_side.html index dacdc385..fbdf3182 100644 --- a/root/styles/subsilver2/template/portal/modules/clock_side.html +++ b/root/styles/subsilver2/template/portal/modules/clock_side.html @@ -1,13 +1,36 @@ {$LR_BLOCK_H_L} {$TITLE}{$LR_BLOCK_H_R} - - +
-
- - - - +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + {$LR_BLOCK_F_L}{$LR_BLOCK_F_R} \ No newline at end of file diff --git a/root/styles/subsilver2/template/portal/modules/jquery.easing.1.3.js b/root/styles/subsilver2/template/portal/modules/jquery.easing.1.3.js new file mode 100644 index 00000000..ef743210 --- /dev/null +++ b/root/styles/subsilver2/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/subsilver2/template/portal/modules/portal_clock.js b/root/styles/subsilver2/template/portal/modules/portal_clock.js new file mode 100644 index 00000000..a5279c65 --- /dev/null +++ b/root/styles/subsilver2/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/subsilver2/theme/images/portal/portal_clock_double.png b/root/styles/subsilver2/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/subsilver2/theme/images/portal/spacer_down.png b/root/styles/subsilver2/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/subsilver2/theme/portal.css b/root/styles/subsilver2/theme/portal.css new file mode 100644 index 00000000..c51b10fd --- /dev/null +++ b/root/styles/subsilver2/theme/portal.css @@ -0,0 +1,155 @@ +/* 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; +}