update and refactor Ox.UI loader

This commit is contained in:
rolux 2012-12-28 18:21:26 +01:00
parent 2c2b680284
commit f54db91aaa

View file

@ -4,7 +4,6 @@ Ox.load.UI = function(options, callback) {
options = Ox.extend({ options = Ox.extend({
hideScreen: true, hideScreen: true,
loadImages: true,
showScreen: false, showScreen: false,
theme: 'classic' theme: 'classic'
}, options); }, options);
@ -44,10 +43,19 @@ Ox.load.UI = function(options, callback) {
} }
], ],
browserSupported = false, browserSupported = false,
imageNames = {}, colors = {
imageURLs = {}, marker: {
'#000000': 'videoMarkerBorder',
'#FFFFFF': 'videoMarkerBackground'
},
symbol: {
'#FF0000': 'symbolWarningColor'
}
},
images = {},
isInternetExplorer = /MSIE/.test(navigator.userAgent), isInternetExplorer = /MSIE/.test(navigator.userAgent),
loadingInterval; loadingInterval,
themes = {};
browsers.forEach(function(browser) { browsers.forEach(function(browser) {
var match = browser.regexp && browser.regexp.exec(navigator.userAgent); var match = browser.regexp && browser.regexp.exec(navigator.userAgent);
@ -216,52 +224,42 @@ Ox.load.UI = function(options, callback) {
Ox.getFile(Ox.PATH + '/Ox.UI/jquery/jquery.js', function() { Ox.getFile(Ox.PATH + '/Ox.UI/jquery/jquery.js', function() {
initUI(); initUI();
Ox.getJSON(Ox.UI.PATH + 'json/Ox.UI.files.json?' + Ox.VERSION, function(files) { Ox.getJSON(Ox.UI.PATH + 'json/Ox.UI.json?' + Ox.VERSION, function(data) {
var promises = [], themes = {}; var counter = 0, length = data.files.length;
files.forEach(function(file) { images = data.images;
var dfd = new $.Deferred(); data.files.forEach(function(file) {
promises.push(dfd.promise()); if (/\.jsonc$/.test(file)) {
if (/\.json$/.test(file)) { Ox.getJSONC(Ox.PATH + file + '?' + Ox.VERSION, function(data) {
Ox.getJSON(Ox.PATH + file + '?' + Ox.VERSION, function(data) { var theme = /\/themes\/(\w+)\/json\//.exec(file)[1];
var theme = /\/(\w+)\.json$/.exec(file)[1];
themes[theme] = data; themes[theme] = data;
dfd.resolve(); ++counter == length && initThemes();
}); });
} else { } else {
Ox.getFile(Ox.PATH + file, function() { Ox.getFile(Ox.PATH + file, function() {
dfd.resolve(); ++counter == length && initThemes();
}); });
} }
}); });
var dfd = new $.Deferred();
promises.push(dfd.promise());
Ox.getJSON(Ox.UI.PATH + 'json/Ox.UI.image' + (
options.loadImages ? 'Data' : ''
) + 'URLs.json?' + Ox.VERSION, function(images) {
imageURLs = images;
Ox.forEach(imageURLs, function(url, key) {
imageNames[url] = key.split('/')[1];
});
dfd.resolve();
});
$.when.apply(null, promises)
.done(function() {
Ox.forEach(themes, function(data, theme) {
Ox.Theme[theme] = data;
});
$(function() {
if (options.showScreen && options.hideScreen) {
Ox.UI.hideLoadingScreen();
}
callback(browserSupported);
});
})
.fail(function() {
throw new Error('File not found.')
});
}); });
}); });
}
function initThemes() {
Ox.Theme.getThemes = function() {
return Object.keys(themes);
};
Ox.Theme.getThemeData = function(theme) {
return themes[theme || Ox.Theme()];
};
$(function() {
if (options.showScreen && options.hideScreen) {
Ox.UI.hideLoadingScreen();
}
callback(browserSupported);
});
} }
function initUI() { function initUI() {
@ -313,36 +311,52 @@ Ox.load.UI = function(options, callback) {
//@ Ox.UI.elements <o> reference to all UI element instnaces //@ Ox.UI.elements <o> reference to all UI element instnaces
Ox.UI.elements = {}; Ox.UI.elements = {};
/*@ /*@
Ox.UI.getImageName <f> get image name from url Ox.UI.getImageData <f> Returns image properties
(url) -> <s> Image Name (url) -> <s> Image Name
@*/ @*/
Ox.UI.getImageName = function(url) { Ox.UI.getImageData = Ox.cache(function(url) {
return imageNames[url]; var str = 'data:image/svg+xml;base64,';
}; return Ox.startsWith(url, str)
? JSON.parse(atob(url.split(',')[1]).match(/<!--(.+?)-->/)[1])
: null;
});
/*@ /*@
Ox.UI.getImageURL <f> Returns an image URL Ox.UI.getImageURL <f> Returns an image URL
(name[, theme[, color]]) -> <s> Image URL (name[, color[, theme]]) -> <s> Image URL
Setting color works only when the `loadImages` option is set to name <s> Image name
`true`. color <s|[n]> Color name or RGB values
theme <s> Theme name
@*/ @*/
Ox.UI.getImageURL = function(name, theme, color) { Ox.UI.getImageURL = Ox.cache(function(name, color, theme) {
var imageURL; Ox.print('getImageURL', name, color, theme)
var colorName,
image = images[name],
themeData,
type = Ox.toDashes(name).split('-')[0];
color = color || 'default';
theme = theme || Ox.Theme(); theme = theme || Ox.Theme();
color = Ox.Theme[theme].color[color] || null; themeData = Ox.Theme.getThemeData(theme);
// fixme: not the best idea to do this here if (type == 'symbol') {
if (name == 'symbolPlay') { if (Ox.isString(color)) {
name = 'symbolRight'; colorName = color;
color = themeData['symbol' + Ox.toTitleCase(color) + 'Color'];
}
image = image.replace(/#808080/g, '#' + Ox.toHex(color));
} }
imageURL = imageURLs[theme + '/' + name]; Ox.forEach(colors[type], function(name, hex) {
if (options.loadImages && color) { image = image.replace(
imageURL = 'data:image/svg+xml;base64,' + btoa( new RegExp(hex, 'g'),
atob(imageURL.split(',')[1]).replace( '#' + Ox.toHex(themeData[name])
/#[0-9A-F]{6}/i, '#' + Ox.toHex(color)
)
); );
} });
return imageURL; return 'data:image/svg+xml;base64,' + btoa(
}; image + '<!--' + JSON.stringify(Ox.extend(color ? {
color: colorName
} : {}, {
name: name, theme: theme
})) + '-->'
);
});
/*@ /*@
Ox.UI.getVideoFormat <f> Get supported video formats Ox.UI.getVideoFormat <f> Get supported video formats
(formats) -> <a> of supported formats (formats) -> <a> of supported formats