mirror of
http://git.whoc.org.uk/git/password-manager.git
synced 2025-01-10 23:10:04 +01:00
644891059e
JQTouch and Zepto are tentatively used for the mobile version of Clipperz. No final commitment has been made, though.
124 lines
4.4 KiB
JavaScript
Executable File
124 lines
4.4 KiB
JavaScript
Executable File
/*
|
|
|
|
_/ _/_/ _/_/_/_/_/ _/
|
|
_/ _/ _/ _/_/ _/ _/ _/_/_/ _/_/_/
|
|
_/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ _/
|
|
_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/
|
|
_/ _/_/ _/ _/ _/_/ _/_/_/ _/_/_/ _/ _/
|
|
_/
|
|
_/
|
|
|
|
Documentation and issue tracking on Google Code <http://code.google.com/p/jqtouch/>
|
|
|
|
(c) 2011 by jQTouch project members.
|
|
See LICENSE.txt for license.
|
|
|
|
*/
|
|
|
|
(function($) {
|
|
if ($.jQTouch) {
|
|
|
|
var scriptpath = $("script").last().attr("src").split('?')[0].split('/').slice(0, -1).join('/')+'/';
|
|
|
|
$.jQTouch.addExtension(function ThemeSwitcher(jQT) {
|
|
|
|
var current,
|
|
link,
|
|
titles = {},
|
|
defaults = {
|
|
themeStyleSelector: 'link[rel="stylesheet"][title]',
|
|
themeIncluded: [
|
|
{title: 'jQTouch', href: scriptpath + '../themes/css/jqtouch.css'},
|
|
{title: 'Apple', href: scriptpath + '../themes/css/apple.css'},
|
|
{title: 'Vanilla', href: scriptpath + '../themes/css/vanilla.css'}
|
|
|
|
]
|
|
},
|
|
options = $.extend({}, defaults, jQT.settings);
|
|
|
|
function setStyleState(item, title) {
|
|
var $item = $(item);
|
|
|
|
if ($item.attr('title') === title) {
|
|
item.disabled = false; // workaround for Firefox on Zepto
|
|
$item.removeAttr('disabled');
|
|
} else {
|
|
item.disabled = true; // workaround for Firefox on Zepto
|
|
$item.attr('disabled', true);
|
|
}
|
|
}
|
|
|
|
function initializeStyleState(item, title) {
|
|
// and, workaround for WebKit by initializing the 'disabled' attribute
|
|
if (!current) {
|
|
current = title;
|
|
}
|
|
setStyleState(item, current);
|
|
}
|
|
|
|
// public
|
|
function switchStyle(title) {
|
|
current = title;
|
|
$(options.themeStyleSelector).each(function(i, item) {
|
|
setStyleState(item, title);
|
|
});
|
|
}
|
|
|
|
// collect title names, from <head>
|
|
$(options.themeStyleSelector).each(function(i, item) {
|
|
var $item = $(item);
|
|
var title = $item.attr('title');
|
|
|
|
titles[title] = true;
|
|
|
|
initializeStyleState(item, title);
|
|
});
|
|
|
|
// add included theme
|
|
for (var i=0; i < options.themeIncluded.length; i++) {
|
|
var hash = options.themeIncluded[i];
|
|
if (!(hash.title in titles)) {
|
|
link = $('<link title="' + hash.title + '" href="' + hash.href + '" rel="stylesheet">');
|
|
$('head').append($(link));
|
|
|
|
titles[hash.title] = true;
|
|
|
|
initializeStyleState(link, hash.title);
|
|
}
|
|
}
|
|
|
|
if (options.themeSelectionSelector) {
|
|
// create UI items
|
|
for (var title in titles) {
|
|
var $item = $('<li><a href="#" data-title="' + title + '">' + title + '</a></li>');
|
|
$(options.themeSelectionSelector).append($item);
|
|
}
|
|
|
|
// bind to UI items
|
|
$(options.themeSelectionSelector).delegate('* > a', 'tap', function(e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
var $a = $(this).closest('a');
|
|
$a.removeClass('active');
|
|
switchStyle($a.attr('data-title'));
|
|
|
|
// poor-man simulation of radio button behaviour
|
|
$(options.themeSelectionSelector).find('a').removeClass('selected');
|
|
$a.addClass('selected');
|
|
});
|
|
|
|
// poor-man simulation of radio button behaviour
|
|
$(options.themeSelectionSelector).closest('#jqt > *').bind('pageAnimationEnd', function(e, data){
|
|
if (data.direction === 'in') {
|
|
$(options.themeSelectionSelector).find('a[data-title="' + current + '"]').addClass('selected');
|
|
}
|
|
});
|
|
}
|
|
|
|
return {switchStyle: switchStyle};
|
|
|
|
});
|
|
}
|
|
})($);
|