forked from 0x2620/oxjs
modularize oxui
This commit is contained in:
parent
2e3292e9ce
commit
0024af978c
106 changed files with 16127 additions and 47034 deletions
209
source/js/OxUI.js
Normal file
209
source/js/OxUI.js
Normal file
|
|
@ -0,0 +1,209 @@
|
|||
(function() {
|
||||
|
||||
var path = Array.prototype.slice.apply(
|
||||
document.getElementsByTagName('script')
|
||||
).filter(function(script) {
|
||||
return /OxUI\.js$/(script.src);
|
||||
})[0].src.replace('OxUI.js', ''),
|
||||
scripts = [
|
||||
{ready: typeof Ox != 'undefined', src: 'Ox.js'},
|
||||
{ready: typeof $ != 'undefined', src: 'jquery.js'}
|
||||
],
|
||||
uiCallback,
|
||||
ready = false,
|
||||
readyCallbacks = [];
|
||||
|
||||
Ox = typeof Ox != 'undefined' ? Ox : function() {};
|
||||
Ox.UI = function(callback) {
|
||||
uiCallback = callback;
|
||||
};
|
||||
|
||||
scripts.forEach(function(script) {
|
||||
var element;
|
||||
if (!script.ready) {
|
||||
element = document.createElement('script');
|
||||
element.src = path + script.src;
|
||||
element.type = 'text/javascript';
|
||||
element.onload = function() {
|
||||
script.ready = true;
|
||||
onload();
|
||||
};
|
||||
document.getElementsByTagName('head')[0].appendChild(element);
|
||||
}
|
||||
});
|
||||
|
||||
onload();
|
||||
|
||||
function onload() {
|
||||
if (scripts.map(function(script) {
|
||||
return script.ready;
|
||||
}).reduce(function(pre, cur) {
|
||||
return pre && cur;
|
||||
})) {
|
||||
|
||||
Ox.UI = {};
|
||||
Ox.UI.ready = function(callback) {
|
||||
if (!ready) {
|
||||
readyCallbacks.push(callback);
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
$(function() {
|
||||
Ox.UI.$body = $('body');
|
||||
Ox.UI.$document = $(document);
|
||||
Ox.UI.$head = $('head');
|
||||
Ox.UI.$window = $(window);
|
||||
ready = true;
|
||||
readyCallbacks.forEach(function(callback) {
|
||||
callback();
|
||||
});
|
||||
});
|
||||
|
||||
Ox.UI.elements = {};
|
||||
Ox.UI.DEFAULT_THEME = 'classic';
|
||||
Ox.UI.DIMENSIONS = {
|
||||
horizontal: ['width', 'height'],
|
||||
vertical: ['height', 'width']
|
||||
};
|
||||
Ox.UI.EDGES = {
|
||||
horizontal: ['left', 'right', 'top', 'bottom'],
|
||||
vertical: ['top', 'bottom', 'left', 'right']
|
||||
};
|
||||
Ox.UI.getImagePath = function(filename) {
|
||||
// fixme: not the best idea to do this here
|
||||
if (filename == 'symbolPlay.svg') {
|
||||
filename = 'symbolRight.svg';
|
||||
}
|
||||
return Ox.UI.PATH + filename.split('.').pop() +
|
||||
'/ox.ui.' + Ox.UI.theme() + '/' + filename;
|
||||
};
|
||||
|
||||
Ox.UI.PATH = $('script[src*="OxUI.js"]')
|
||||
.attr('src').replace('js/OxUI.js', '');
|
||||
Ox.UI.SCROLLBAR_SIZE = $.browser.mozilla ? 16 : 12;
|
||||
// fixme: the follwing should be deprecated
|
||||
Ox.UI.theme = function() {
|
||||
var theme;
|
||||
Ox.forEach(Ox.UI.$body.attr('class').split(' '), function(v) {
|
||||
if (Ox.startsWith(v, 'OxTheme')) {
|
||||
theme = v.replace('OxTheme', '').toLowerCase();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return theme || Ox.UI.DEFAULT_THEME; // fixme: shouldn't be neccessary
|
||||
};
|
||||
Ox.UI.getBarSize = function(size) {
|
||||
var sizes = {
|
||||
small: 20,
|
||||
medium: 24,
|
||||
large: 28,
|
||||
};
|
||||
return sizes[size];
|
||||
};
|
||||
Ox.UI.symbols = {
|
||||
alt: '\u2325',
|
||||
apple: '\uF8FF',
|
||||
arrow_down: '\u2193',
|
||||
arrow_left: '\u2190',
|
||||
arrow_right: '\u2192',
|
||||
arrow_up: '\u2191',
|
||||
backspace: '\u232B',
|
||||
backup: '\u2707',
|
||||
ballot: '\u2717',
|
||||
black_star: '\u2605',
|
||||
burn: '\u2622',
|
||||
caps_lock: '\u21EA',
|
||||
check: '\u2713',
|
||||
//clear: '\u2327',
|
||||
clear: '\u00D7',
|
||||
click: '\uF803',
|
||||
close: '\u2715',
|
||||
command: '\u2318',
|
||||
control: '\u2303',
|
||||
cut: '\u2702',
|
||||
'delete': '\u2326',
|
||||
diamond: '\u25C6',
|
||||
edit: '\uF802',
|
||||
eject: '\u23CF',
|
||||
escape: '\u238B',
|
||||
end: '\u2198',
|
||||
enter: '\u2324',
|
||||
fly: '\u2708',
|
||||
gear: '\u2699',
|
||||
home: '\u2196',
|
||||
info: '\u24D8',
|
||||
navigate: '\u2388',
|
||||
option: '\u2387',
|
||||
page_up: '\u21DE',
|
||||
page_down: '\u21DF',
|
||||
redo: '\u21BA',
|
||||
'return': '\u21A9',
|
||||
//select: '\u21D5',
|
||||
select: '\u25BE',
|
||||
shift: '\u21E7',
|
||||
sound: '\u266B',
|
||||
space: '\u2423',
|
||||
tab: '\u21E5',
|
||||
trash: '\u267A',
|
||||
triangle_down: '\u25BC',
|
||||
triangle_left: '\u25C0',
|
||||
triangle_right: '\u25BA',
|
||||
triangle_up: '\u25B2',
|
||||
undo: '\u21BB',
|
||||
voltage: '\u26A1',
|
||||
warning: '\u26A0',
|
||||
white_star: '\u2606'
|
||||
};
|
||||
$.getJSON(Ox.UI.PATH + 'json/OxUI.json', function(data) {
|
||||
|
||||
function loadImage(src) {
|
||||
var dfd = new $.Deferred();
|
||||
var image = new Image();
|
||||
image.onload = function() {
|
||||
dfd.resolve();
|
||||
};
|
||||
image.src = Ox.UI.PATH + src;
|
||||
return dfd.promise();
|
||||
}
|
||||
|
||||
function loadScript(src) {
|
||||
// jQuery doesn't work here, does some unwanted magic
|
||||
var dfd = new $.Deferred();
|
||||
var script = document.createElement('script');
|
||||
script.onload = function() {
|
||||
//setTimeout(function() {
|
||||
console.log('onload', src)
|
||||
dfd.resolve();
|
||||
//}, 1000)
|
||||
};
|
||||
script.src = Ox.UI.PATH + src;
|
||||
script.type = 'text/javascript';
|
||||
document.getElementsByTagName('head')[0].appendChild(script);
|
||||
return dfd.promise();
|
||||
}
|
||||
|
||||
var $head = $('head'),
|
||||
promises = [];
|
||||
// fixme: find a better way to not wait for flags
|
||||
data = data.filter(function(image) {
|
||||
return !Ox.startsWith(image, 'svg/ox.map/')
|
||||
});
|
||||
data.forEach(function(src) {
|
||||
if (/\.js$/(src)) {
|
||||
promises.push(loadScript(src));
|
||||
} else {
|
||||
promises.push(loadImage(src));
|
||||
}
|
||||
});
|
||||
$.when.apply(null, promises)
|
||||
.done(uiCallback || []);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}());
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue