diff --git a/index.html b/index.html index e77801c..430e8ef 100644 --- a/index.html +++ b/index.html @@ -17,6 +17,7 @@ along with this program. If not, see . Die Zeit als Wort - in HTML, CSS und JS + diff --git a/jquery-ui-1.10.3.custom.min.js b/jquery-ui-1.10.3.custom.min.js new file mode 100644 index 0000000..c7f8a65 --- /dev/null +++ b/jquery-ui-1.10.3.custom.min.js @@ -0,0 +1,6 @@ +/*! jQuery UI - v1.10.3 - 2014-01-11 +* http://jqueryui.com +* Includes: jquery.ui.core.js, jquery.ui.widget.js +* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ + +(function(t,e){function n(e,n){var r,s,o,a=e.nodeName.toLowerCase();return"area"===a?(r=e.parentNode,s=r.name,e.href&&s&&"map"===r.nodeName.toLowerCase()?(o=t("img[usemap=#"+s+"]")[0],!!o&&i(o)):!1):(/input|select|textarea|button|object/.test(a)?!e.disabled:"a"===a?e.href||n:n)&&i(e)}function i(e){return t.expr.filters.visible(e)&&!t(e).parents().addBack().filter(function(){return"hidden"===t.css(this,"visibility")}).length}var r=0,s=/^ui-id-\d+$/;t.ui=t.ui||{},t.extend(t.ui,{version:"1.10.3",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),t.fn.extend({focus:function(e){return function(n,i){return"number"==typeof n?this.each(function(){var e=this;setTimeout(function(){t(e).focus(),i&&i.call(e)},n)}):e.apply(this,arguments)}}(t.fn.focus),scrollParent:function(){var e;return e=t.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(t.css(this,"position"))&&/(auto|scroll)/.test(t.css(this,"overflow")+t.css(this,"overflow-y")+t.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(t.css(this,"overflow")+t.css(this,"overflow-y")+t.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!e.length?t(document):e},zIndex:function(n){if(n!==e)return this.css("zIndex",n);if(this.length)for(var i,r,s=t(this[0]);s.length&&s[0]!==document;){if(i=s.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(r=parseInt(s.css("zIndex"),10),!isNaN(r)&&0!==r))return r;s=s.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++r)})},removeUniqueId:function(){return this.each(function(){s.test(this.id)&&t(this).removeAttr("id")})}}),t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(n){return!!t.data(n,e)}}):function(e,n,i){return!!t.data(e,i[3])},focusable:function(e){return n(e,!isNaN(t.attr(e,"tabindex")))},tabbable:function(e){var i=t.attr(e,"tabindex"),r=isNaN(i);return(r||i>=0)&&n(e,!r)}}),t("").outerWidth(1).jquery||t.each(["Width","Height"],function(n,i){function r(e,n,i,r){return t.each(s,function(){n-=parseFloat(t.css(e,"padding"+this))||0,i&&(n-=parseFloat(t.css(e,"border"+this+"Width"))||0),r&&(n-=parseFloat(t.css(e,"margin"+this))||0)}),n}var s="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(n){return n===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,r(this,n)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,r(this,e,!0,n)+"px")})}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t("").data("a-b","a").removeData("a-b").data("a-b")&&(t.fn.removeData=function(e){return function(n){return arguments.length?e.call(this,t.camelCase(n)):e.call(this)}}(t.fn.removeData)),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),t.support.selectstart="onselectstart"in document.createElement("div"),t.fn.extend({disableSelection:function(){return this.bind((t.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(t){t.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),t.extend(t.ui,{plugin:{add:function(e,n,i){var r,s=t.ui[e].prototype;for(r in i)s.plugins[r]=s.plugins[r]||[],s.plugins[r].push([n,i[r]])},call:function(t,e,n){var i,r=t.plugins[e];if(r&&t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType)for(i=0;r.length>i;i++)t.options[r[i][0]]&&r[i][1].apply(t.element,n)}},hasScroll:function(e,n){if("hidden"===t(e).css("overflow"))return!1;var i=n&&"left"===n?"scrollLeft":"scrollTop",r=!1;return e[i]>0?!0:(e[i]=1,r=e[i]>0,e[i]=0,r)}})})(jQuery);(function(t,e){var i=0,s=Array.prototype.slice,o=t.cleanData;t.cleanData=function(e){for(var i,s=0;null!=(i=e[s]);s++)try{t(i).triggerHandler("remove")}catch(n){}o(e)},t.widget=function(i,s,o){var n,r,a,l,h={},c=i.split(".")[0];i=i.split(".")[1],n=c+"-"+i,o||(o=s,s=t.Widget),t.expr[":"][n.toLowerCase()]=function(e){return!!t.data(e,n)},t[c]=t[c]||{},r=t[c][i],a=t[c][i]=function(t,i){return this._createWidget?(arguments.length&&this._createWidget(t,i),e):new a(t,i)},t.extend(a,r,{version:o.version,_proto:t.extend({},o),_childConstructors:[]}),l=new s,l.options=t.widget.extend({},l.options),t.each(o,function(i,o){return t.isFunction(o)?(h[i]=function(){var t=function(){return s.prototype[i].apply(this,arguments)},e=function(t){return s.prototype[i].apply(this,t)};return function(){var i,s=this._super,n=this._superApply;return this._super=t,this._superApply=e,i=o.apply(this,arguments),this._super=s,this._superApply=n,i}}(),e):(h[i]=o,e)}),a.prototype=t.widget.extend(l,{widgetEventPrefix:r?l.widgetEventPrefix:i},h,{constructor:a,namespace:c,widgetName:i,widgetFullName:n}),r?(t.each(r._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,a,i._proto)}),delete r._childConstructors):s._childConstructors.push(a),t.widget.bridge(i,a)},t.widget.extend=function(i){for(var o,n,r=s.call(arguments,1),a=0,l=r.length;l>a;a++)for(o in r[a])n=r[a][o],r[a].hasOwnProperty(o)&&n!==e&&(i[o]=t.isPlainObject(n)?t.isPlainObject(i[o])?t.widget.extend({},i[o],n):t.widget.extend({},n):n);return i},t.widget.bridge=function(i,o){var n=o.prototype.widgetFullName||i;t.fn[i]=function(r){var a="string"==typeof r,l=s.call(arguments,1),h=this;return r=!a&&l.length?t.widget.extend.apply(null,[r].concat(l)):r,a?this.each(function(){var s,o=t.data(this,n);return o?t.isFunction(o[r])&&"_"!==r.charAt(0)?(s=o[r].apply(o,l),s!==o&&s!==e?(h=s&&s.jquery?h.pushStack(s.get()):s,!1):e):t.error("no such method '"+r+"' for "+i+" widget instance"):t.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+r+"'")}):this.each(function(){var e=t.data(this,n);e?e.option(r||{})._init():t.data(this,n,new o(r,this))}),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this.bindings=t(),this.hoverable=t(),this.focusable=t(),s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:t.noop,_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(t.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:t.noop,widget:function(){return this.element},option:function(i,s){var o,n,r,a=i;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof i)if(a={},o=i.split("."),i=o.shift(),o.length){for(n=a[i]=t.widget.extend({},this.options[i]),r=0;o.length-1>r;r++)n[o[r]]=n[o[r]]||{},n=n[o[r]];if(i=o.pop(),s===e)return n[i]===e?null:n[i];n[i]=s}else{if(s===e)return this.options[i]===e?null:this.options[i];a[i]=s}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return this.options[t]=e,"disabled"===t&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!e).attr("aria-disabled",e),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,o){var n,r=this;"boolean"!=typeof i&&(o=s,s=i,i=!1),o?(s=n=t(s),this.bindings=this.bindings.add(s)):(o=s,s=this.element,n=this.widget()),t.each(o,function(o,a){function l(){return i||r.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?r[a]:a).apply(r,arguments):e}"string"!=typeof a&&(l.guid=a.guid=a.guid||l.guid||t.guid++);var h=o.match(/^(\w+)\s*(.*)$/),c=h[1]+r.eventNamespace,p=h[2];p?n.delegate(p,c,l):s.bind(c,l)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(e).undelegate(e)},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){t(e.currentTarget).addClass("ui-state-hover")},mouseleave:function(e){t(e.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){t(e.currentTarget).addClass("ui-state-focus")},focusout:function(e){t(e.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(e,i,s){var o,n,r=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],n=i.originalEvent)for(o in n)o in i||(i[o]=n[o]);return this.element.trigger(i,s),!(t.isFunction(r)&&r.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,o,n){"string"==typeof o&&(o={effect:o});var r,a=o?o===!0||"number"==typeof o?i:o.effect||i:e;o=o||{},"number"==typeof o&&(o={duration:o}),r=!t.isEmptyObject(o),o.complete=n,o.delay&&s.delay(o.delay),r&&t.effects&&t.effects.effect[a]?s[e](o):a!==e&&s[a]?s[a](o.duration,o.easing,n):s.queue(function(i){t(this)[e](),n&&n.call(s[0]),i()})}})})(jQuery); \ No newline at end of file diff --git a/uhr-de.js b/uhr-de.js index 297484d..7c0d461 100644 --- a/uhr-de.js +++ b/uhr-de.js @@ -27,4 +27,4 @@ var layout = { [h('Z', 10), h('E', 10),h('H', 10),h('N', 9, 10),h('E', 9),h('U', 9),h('N', 9),l('K'),l('U'),l('H'),l('R')] ] }; -Uhr.registerLanguage('de', layout); +window._uhr.languages['de'] = layout; diff --git a/uhr-de_CH.js b/uhr-de_CH.js index 4b6f5cb..874ae1c 100644 --- a/uhr-de_CH.js +++ b/uhr-de_CH.js @@ -27,4 +27,4 @@ var layout = { [h('Z', 12), h('W', 12),h('Ö', 12),h('U', 12),h('F', 12),h('I', 12),l('N'),l('A'),l('U'),l('H'),l('R')] ] }; -Uhr.registerLanguage('de_CH', layout); +window._uhr.languages['de_CH'] = layout; diff --git a/uhr-en.js b/uhr-en.js index 2727d28..bca4c8e 100644 --- a/uhr-en.js +++ b/uhr-en.js @@ -34,4 +34,4 @@ var layout = { return hour; } }; -Uhr.registerLanguage('en', layout); +window._uhr.languages['en'] = layout; diff --git a/uhr.js b/uhr.js index 8337a01..3fa85ae 100644 --- a/uhr.js +++ b/uhr.js @@ -15,121 +15,133 @@ along with this program. If not, see . (function($) { "use strict"; - if (window.Uhr !== undefined) { + if (window._uhr !== undefined) { return; } - window.Uhr = { + window._uhr = { id: 0, - start: function(e) { - if (!Uhr.isOn(e)) { - e.data('timer', window.setInterval(function() {Uhr.update(e);}, 1000)); - Uhr.update(e); - jQuery.cookie('status' + e.data('id'), 'on', {expires: 365, path: '/'}); + languages: new Array() + }; + $.widget("fritteli.uhr", { + options: { + width: '100%', + status: 'on', + language: 'de_CH', + theme: 'black', + force: false + }, + start: function() { + if (!this._isOn()) { + var uhr = this; + this._timer = window.setInterval(function() { + uhr._update(); + }, 1000); + this._update(); + $.cookie('uhr-status' + this._id, 'on', {expires: 365, path: '/'}); + } else { } }, - stop: function(e) { - if (Uhr.isOn(e)) { - window.clearInterval(e.data('timer')); - e.data('timer', null); - Uhr.update(e); - jQuery.cookie('status' + e.data('id'), 'off', {expires: 365, path: '/'}); + stop: function() { + if(this._isOn()) { + window.clearInterval(this._timer); + this._timer = null; + this._update(); + $.cookie('uhr-status' + this._id, 'off', {expires: 365, path: '/'}); } }, - update: function(e) { - if (Uhr.isOn(e)) { + toggle: function() { + if(this._isOn()) { + this.stop(); + } else { + this.start(); + } + }, + language: function(languageKey) { + if (languageKey !== this.options.language) { + this.options.language = languageKey; + var renderer = new UhrRenderer(this._language(), this.element.find('.letterarea')); + renderer.render(this); + $.cookie('uhr-language' + this._id, languageKey, {expires: 365, path: '/'}); + this._update(); + } + }, + theme: function(theme) { + if (theme != this.options.theme) { + this.element.removeClass(this.options.theme).addClass(theme); + $('#uhr-onoffswitch' + this._id).removeClass(this.options.theme).addClass(theme); + this.options.theme = theme; + $.cookie('uhr-theme' + this._id, theme, {expires: 365, path: '/'}); + } + }, + // private variables + _id: -1, + _timer: null, + _currentMinute: -1, + // private methods + _isOn: function() { + return this._timer !== null; + }, + _update: function() { + if (this._isOn()) { var now = new Date(); - if (now.getMinutes() == e.data('currentMinute')) { + if (now.getMinutes() == this._currentMinute) { return; } - e.data('currentMinute', now.getMinutes()); - var dotMinute = Uhr.getDotMinute(e, now); - var hour = Uhr.getHour(e, now); - var coarseMinute = this.getCoarseMinute(e, now); - Uhr.clear(e); - Uhr.highlight(e, 'on'); + this._currentMinute = now.getMinutes(); + var dotMinute = this._getDotMinute(now); + var hour = this._getHour(now); + var coarseMinute = this._getCoarseMinute(now); + this._clear(); + this._highlight('on'); for (var i = 1; i <= dotMinute; i++) { - Uhr.highlight(e, 'dot' + i); + this._highlight('dot' + i); } - Uhr.highlight(e, 'minute' + coarseMinute); - hour = this.normalizeHour(hour); - Uhr.highlight(e, 'hour' + hour); + this._highlight('minute' + coarseMinute); + hour = this._normalizeHour(hour); + this._highlight('hour' + hour); if (coarseMinute == 0) { - Uhr.highlight(e, 'sharphour'); + this._highlight('sharphour'); } } else { - Uhr.clear(e); - e.data('currentMinute', -1); + this._clear(); + this._currentMinute = -1; } }, - toggle: function(e) { - if (Uhr.isOn(e)) { - Uhr.stop(e); - } else { - Uhr.start(e); + _language: function() { + return window._uhr.languages[this.options.language]; + }, + _highlight: function(itemClass) { + this.element.find('.item.' + itemClass).addClass('active'); + }, + _clear: function() { + this.element.find('.item').removeClass('active'); + }, + _getHour: function(date) { + if (typeof this._language().getHour === 'function') { + return this._language().getHour(date); } - }, - clear: function(e) { - e.find('.item').removeClass('active'); - }, - setLanguage: function(e, language) { - var newLanguage = Uhr.layouts[language]; - if (newLanguage !== undefined && newLanguage != e.data('currentLanguage')) { - e.data('currentLanguage', newLanguage); - var renderer = new UhrRenderer(newLanguage, e.find('.letterarea')); - renderer.render(e); - jQuery.cookie('language' + e.data('id'), language, {expires: 365, path: '/'}); - } - }, - setTheme: function(e, theme) { - var currentTheme = e.data('currentTheme'); - if (theme != currentTheme) { - e.removeClass(currentTheme).addClass(theme); - e.data('toggleSwitch').removeClass(currentTheme).addClass(theme); - e.data('currentTheme', theme); - jQuery.cookie('theme' + e.data('id'), theme, {expires: 365, path: '/'}); - } - }, - isOn: function(e) { - return e.data('timer') != null; - }, - highlight: function(e, itemClass) { - e.find('.item.' + itemClass).addClass('active'); - }, - getHour: function(e, date) { - //FIXME - /* - if (typeof e.data('currentLayout').getHour === 'function') { - return e.data('currentLayout').getHour(date); - } - */ var hour = date.getHours(); if (date.getMinutes() >= 25) { return hour + 1; } return hour; }, - getCoarseMinute: function(e, date) { - //FIXME - /* - if (typeof e.data('currentLayout').getCoarseMinute === 'function') { - return e.data('currentLayout').getCoarseMinute(date); + _getCoarseMinute: function(date) { + if (typeof this._language().getCoarseMinute === 'function') { + return this._language().getCoarseMinute(date); } - */ var minutes = date.getMinutes(); - return minutes - Uhr.getDotMinute(e, date); + return minutes - this._getDotMinute(date); }, - getDotMinute: function(e, date) { - //FIXME - /* - if (typeof e.data('currentLayout').getDotMinute === 'function') { - return e.data('currentLayout').getDotMinute(date); + _getDotMinute: function(date) { + if (typeof this._language().getDotMinute === 'function') { + return this._language().getDotMinute(date); } - */ var minutes = date.getMinutes(); return minutes % 5; }, - normalizeHour: function(hour) { + _normalizeHour: function(hour) { if (hour > 12) { hour %= 12; } @@ -138,25 +150,14 @@ along with this program. If not, see . } return hour; }, - registerLanguage: function(languageKey, layout) { - this.layouts[languageKey] = layout; + _create: function() { + this._id = window._uhr.id++; + this._setupHTML(); + this._wireFunctionality(); }, - layouts: new Array() - } - $.fn.uhr = function(options) { - var settings = $.extend({ - width: '100%', - force: false, - status: 'on', - language: 'de_CH', - theme: 'black' - }, options); - return this.each(function() { - var e = $(this); - var id = window.Uhr.id++; - e.data('id', id); - e.data('timer', null); - + _setupHTML: function() { + var e = this.element; + // Base clock area e.addClass('uhr'); e.empty(); e.append(''); @@ -165,333 +166,89 @@ along with this program. If not, see . e.append(''); e.append('
'); e.append('
'); - e.css('width', settings.width); + e.css('width', this.options.width); var realWidth = e.width() e.width(realWidth); e.height(realWidth); e.css('font-size', (realWidth / 40) + 'px'); - var toggleSwitch = jQuery('
'); - toggleSwitch.append(''); - toggleSwitch.append('