oxjs/source/js/Ox.UI/Core/Ox.Theme.js

102 lines
3.1 KiB
JavaScript

// vim: et:ts=4:sw=4:sts=4:ft=js
// fixme: this should be Ox.Theme, and provide Ox.Theme.set(), Ox.Theme.load, etc.
/**
if name is given as argument, switch to this theme.
return current theme otherwise.
Ox.theme()
get theme
Ox.theme('foo')
set theme to 'foo'
*/
Ox.Theme = function(theme) {
return theme ? setTheme(theme) : getTheme();
function getTheme() {
var theme = '';
Ox.forEach(Ox.UI.$body.attr('class').split(' '), function(className) {
if (Ox.startsWith(className, 'OxTheme')) {
theme = className.replace('OxTheme', '').toLowerCase();
return false;
}
});
Ox.print('getTheme', theme)
return theme;
}
function setTheme(theme) {
var currentTheme = getTheme();
if (theme != currentTheme) {
Ox.UI.$body
.addClass('OxTheme' + Ox.toTitleCase(theme))
.removeClass('OxTheme' + Ox.toTitleCase(currentTheme));
$('img').add('input[type=image]').each(function() {
var $this = $(this);
$this.attr({
src: $this.attr('src')
.replace('/Ox.UI.' + currentTheme, '/Ox.UI.' + theme)
});
});
}
return theme;
}
};
/*
Ox.UI.ready(function() {
Ox.theme = function() {
var length = arguments.length,
classes = Ox.UI.$body.attr('class').split(' '),
arg, theme;
Ox.forEach(classes, function(v) {
if (Ox.startsWith(v, 'OxTheme')) {
theme = v.replace('OxTheme', '').toLowerCase();
if (length == 1) {
Ox.UI.$body.removeClass(v);
}
return false;
}
});
if (length == 1) {
arg = arguments[0]
Ox.UI.$body.addClass('OxTheme' + Ox.toTitleCase(arg));
if (theme) {
$('img').each(function() {
var $this = $(this);
if (!$this.attr('src')) return; // fixme: remove, should't be neccessary
$this.attr({
src: $this.attr('src').replace(
'/ox.ui.' + theme + '/', '/ox.ui.' + arg + '/'
)
});
});
$('input[type=image]').each(function() {
var $this = $(this);
$this.attr({
src: $this.attr('src').replace(
'/ox.ui.' + theme + '/', '/ox.ui.' + arg + '/'
)
});
});
$('.OxLoadingIcon').each(function() {
var $this = $(this);
$this.attr({
src: $this.attr('src').replace(
'/ox.ui.' + theme + '/', '/ox.ui.' + arg + '/'
)
});
})
}
}
return theme;
};
Ox.theme(Ox.UI.DEFAULT_THEME);
});
*/