author | Clipperz <info@clipperz.com> | 2013-01-09 09:03:53 (UTC) |
---|---|---|
committer | Clipperz <info@clipperz.com> | 2013-01-09 09:03:53 (UTC) |
commit | 644891059e1f37d0748bc34b9ca78c05fa748214 (patch) (unidiff) | |
tree | a746ee125d503088dc53dac823474e4295560947 /frontend/gamma/js/JQTouch/extensions/jqt.themeswitcher.js | |
parent | a9974c63bdcef65f009420dce095d1e39da7e3b8 (diff) | |
download | clipperz-644891059e1f37d0748bc34b9ca78c05fa748214.zip clipperz-644891059e1f37d0748bc34b9ca78c05fa748214.tar.gz clipperz-644891059e1f37d0748bc34b9ca78c05fa748214.tar.bz2 |
Added JQTouch and Zepto libraries
JQTouch and Zepto are tentatively used for the mobile version of Clipperz.
No final commitment has been made, though.
Diffstat (limited to 'frontend/gamma/js/JQTouch/extensions/jqt.themeswitcher.js') (more/less context) (ignore whitespace changes)
-rwxr-xr-x | frontend/gamma/js/JQTouch/extensions/jqt.themeswitcher.js | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/frontend/gamma/js/JQTouch/extensions/jqt.themeswitcher.js b/frontend/gamma/js/JQTouch/extensions/jqt.themeswitcher.js new file mode 100755 index 0000000..ef3a75d --- a/dev/null +++ b/frontend/gamma/js/JQTouch/extensions/jqt.themeswitcher.js | |||
@@ -0,0 +1,123 @@ | |||
1 | /* | ||
2 | |||
3 | _/ _/_/ _/_/_/_/_/ _/ | ||
4 | _/ _/ _/ _/_/ _/ _/ _/_/_/ _/_/_/ | ||
5 | _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ _/ | ||
6 | _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ | ||
7 | _/ _/_/ _/ _/ _/_/ _/_/_/ _/_/_/ _/ _/ | ||
8 | _/ | ||
9 | _/ | ||
10 | |||
11 | Documentation and issue tracking on Google Code <http://code.google.com/p/jqtouch/> | ||
12 | |||
13 | (c) 2011 by jQTouch project members. | ||
14 | See LICENSE.txt for license. | ||
15 | |||
16 | */ | ||
17 | |||
18 | (function($) { | ||
19 | if ($.jQTouch) { | ||
20 | |||
21 | var scriptpath = $("script").last().attr("src").split('?')[0].split('/').slice(0, -1).join('/')+'/'; | ||
22 | |||
23 | $.jQTouch.addExtension(function ThemeSwitcher(jQT) { | ||
24 | |||
25 | var current, | ||
26 | link, | ||
27 | titles = {}, | ||
28 | defaults = { | ||
29 | themeStyleSelector: 'link[rel="stylesheet"][title]', | ||
30 | themeIncluded: [ | ||
31 | {title: 'jQTouch', href: scriptpath + '../themes/css/jqtouch.css'}, | ||
32 | {title: 'Apple', href: scriptpath + '../themes/css/apple.css'}, | ||
33 | {title: 'Vanilla', href: scriptpath + '../themes/css/vanilla.css'} | ||
34 | |||
35 | ] | ||
36 | }, | ||
37 | options = $.extend({}, defaults, jQT.settings); | ||
38 | |||
39 | function setStyleState(item, title) { | ||
40 | var $item = $(item); | ||
41 | |||
42 | if ($item.attr('title') === title) { | ||
43 | item.disabled = false; // workaround for Firefox on Zepto | ||
44 | $item.removeAttr('disabled'); | ||
45 | } else { | ||
46 | item.disabled = true; // workaround for Firefox on Zepto | ||
47 | $item.attr('disabled', true); | ||
48 | } | ||
49 | } | ||
50 | |||
51 | function initializeStyleState(item, title) { | ||
52 | // and, workaround for WebKit by initializing the 'disabled' attribute | ||
53 | if (!current) { | ||
54 | current = title; | ||
55 | } | ||
56 | setStyleState(item, current); | ||
57 | } | ||
58 | |||
59 | // public | ||
60 | function switchStyle(title) { | ||
61 | current = title; | ||
62 | $(options.themeStyleSelector).each(function(i, item) { | ||
63 | setStyleState(item, title); | ||
64 | }); | ||
65 | } | ||
66 | |||
67 | // collect title names, from <head> | ||
68 | $(options.themeStyleSelector).each(function(i, item) { | ||
69 | var $item = $(item); | ||
70 | var title = $item.attr('title'); | ||
71 | |||
72 | titles[title] = true; | ||
73 | |||
74 | initializeStyleState(item, title); | ||
75 | }); | ||
76 | |||
77 | // add included theme | ||
78 | for (var i=0; i < options.themeIncluded.length; i++) { | ||
79 | var hash = options.themeIncluded[i]; | ||
80 | if (!(hash.title in titles)) { | ||
81 | link = $('<link title="' + hash.title + '" href="' + hash.href + '" rel="stylesheet">'); | ||
82 | $('head').append($(link)); | ||
83 | |||
84 | titles[hash.title] = true; | ||
85 | |||
86 | initializeStyleState(link, hash.title); | ||
87 | } | ||
88 | } | ||
89 | |||
90 | if (options.themeSelectionSelector) { | ||
91 | // create UI items | ||
92 | for (var title in titles) { | ||
93 | var $item = $('<li><a href="#" data-title="' + title + '">' + title + '</a></li>'); | ||
94 | $(options.themeSelectionSelector).append($item); | ||
95 | } | ||
96 | |||
97 | // bind to UI items | ||
98 | $(options.themeSelectionSelector).delegate('* > a', 'tap', function(e) { | ||
99 | e.preventDefault(); | ||
100 | e.stopPropagation(); | ||
101 | |||
102 | var $a = $(this).closest('a'); | ||
103 | $a.removeClass('active'); | ||
104 | switchStyle($a.attr('data-title')); | ||
105 | |||
106 | // poor-man simulation of radio button behaviour | ||
107 | $(options.themeSelectionSelector).find('a').removeClass('selected'); | ||
108 | $a.addClass('selected'); | ||
109 | }); | ||
110 | |||
111 | // poor-man simulation of radio button behaviour | ||
112 | $(options.themeSelectionSelector).closest('#jqt > *').bind('pageAnimationEnd', function(e, data){ | ||
113 | if (data.direction === 'in') { | ||
114 | $(options.themeSelectionSelector).find('a[data-title="' + current + '"]').addClass('selected'); | ||
115 | } | ||
116 | }); | ||
117 | } | ||
118 | |||
119 | return {switchStyle: switchStyle}; | ||
120 | |||
121 | }); | ||
122 | } | ||
123 | })($); | ||