Compare commits

..

5 commits

Author SHA1 Message Date
j
a890b25bc4 port /dev symlinks 2026-02-18 20:19:59 +01:00
j
23075d6739 remove tmp import 2026-02-18 18:35:27 +01:00
j
7ed524517d nodejs fixes 2026-02-18 18:16:43 +01:00
j
dd5237e4ed fix loading, minify with rollup 2026-02-18 17:36:01 +01:00
j
9c3450947b WIP: use es-modules 2026-02-16 22:44:25 +01:00
153 changed files with 993 additions and 421 deletions

View file

@ -6,7 +6,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="shortcut icon" type="image/png" href="../../../source/UI/themes/oxlight/png/icon16.png"/> <link rel="shortcut icon" type="image/png" href="../../../source/UI/themes/oxlight/png/icon16.png"/>
<link rel="stylesheet" type="text/css" href="css/example.css"/> <link rel="stylesheet" type="text/css" href="css/example.css"/>
<script type="text/javascript" src="../../../dev/Ox.js"></script> <script type="text/javascript" src="../../../min/Ox.js"></script>
<script type="text/javascript" src="js/example.js"></script> <script type="text/javascript" src="js/example.js"></script>
<script>window.addEventListener('message', function(e) { e.origin == window.location.origin && eval('(' + e.data + ')'); });</script> <script>window.addEventListener('message', function(e) { e.origin == window.location.origin && eval('(' + e.data + ')'); });</script>
</head> </head>

View file

@ -251,10 +251,13 @@ Ox.load(/^https?:\/\/(www\.)?oxjs\.org\//.test(
Ox.get('readme/index/' + id + '.html' + q, function(html) { Ox.get('readme/index/' + id + '.html' + q, function(html) {
app.data.html[id] = html; app.data.html[id] = html;
if (Ox.len(app.data.html) == app.data.pages.length) { if (Ox.len(app.data.html) == app.data.pages.length) {
/*
navigator.onLine ? Ox.getJSON(url, function(data) { navigator.onLine ? Ox.getJSON(url, function(data) {
app.data.downloads = data; app.data.downloads = data;
callback(); callback();
}) : callback(); }) : callback();
*/
callback()
} }
}); });
}); });

21
package.json Normal file
View file

@ -0,0 +1,21 @@
{
"name": "@0x2620/oxjs",
"version": "1.0.0",
"main": "min/Ox/Ox.js",
"module": "min/Ox/Ox.js",
"browser": "min/Ox.js",
"type": "module",
"devDependencies": {
"@rollup/plugin-node-resolve": "^16.0.3",
"@rollup/plugin-terser": "^0.4.4",
"rollup": "^2.79.2",
"rollup-plugin-copy": "^3.5.0"
},
"scripts": {
"build": "rollup -c",
"dev": "rollup -c -w"
},
"files": [
"min"
]
}

261
rollup.config.js Normal file
View file

@ -0,0 +1,261 @@
import resolve from '@rollup/plugin-node-resolve';
import terser from '@rollup/plugin-terser';
import copy from 'rollup-plugin-copy';
import fs from 'fs';
import path from 'path';
import { version } from './package.json';
function install(options = {}) {
const sourcePath = options.sourcePath || 'source/';
const devPath = options.devPath || 'dev/';
const minPath = options.minPath || 'min/';
// Helper: parse CSS with variable substitutions
function parseCss(css, values) {
return css.replace(/\$(\w+)(\[\d+\])?/g, (match, key, index) => {
let value = values[key];
if (index) {
const idx = parseInt(index.slice(1, -1));
value = value[idx];
}
if (typeof value === 'string') {
return value;
}
// Handle numeric arrays (e.g., RGB or RGBA)
if (Array.isArray(value[0])) {
// Already nested arrays
return value
.map(vals => `rgb${vals.length === 4 ? 'a' : ''}(${vals.join(', ')})`)
.join(', ');
} else {
// Single array
return `rgb${value.length === 4 ? 'a' : ''}(${value.join(', ')})`;
}
});
}
function readJsonc(filePath) {
const jsoncText = fs.readFileSync(filePath, 'utf-8');
let text = jsoncText.replace(/\/\/.*$/gm, ''); // Remove single-line comments
text = text.replace(/\/\*[\s\S]*?\*\//g, ''); // Remove multi-line comments
text = text.replace(/,\s*(?=[}\]])/g, ''); // Remove trailing commas in objects and arrays
return JSON.parse(text);
}
function writeFile(filePath, data) {
fs.mkdirSync(path.dirname(filePath), { recursive: true });
fs.writeFileSync(filePath, typeof data === 'string' ? data : data.toString('utf-8'));
return data.length;
}
function formatColor(rgb) {
return '#' + rgb.map(c => c.toString(16).padStart(2, '0').toUpperCase()).join('');
}
function writeBundle() {
const themesDir = path.join(sourcePath, 'UI', 'themes');
const themes = fs.readdirSync(themesDir).filter(name => !['.', '_'].includes(name[0]));
const themeData = {};
for (const theme of themes) {
const themeJsonPath = path.join(themesDir, theme, 'json', 'theme.jsonc');
themeData[theme] = readJsonc(themeJsonPath);
themeData[theme].themeClass = 'OxTheme' + theme[0].toUpperCase() + theme.slice(1);
}
const cssPath = path.join(sourcePath, 'UI', 'css', 'theme.css');
const css = fs.readFileSync(cssPath, 'utf-8')
for (const theme of themes) {
let themeCss = parseCss(css, themeData[theme]);
themeCss = themeCss.replace(/\.png\)/g, `.png?${version})`);
writeFile(path.join(devPath, 'UI', 'themes', theme, 'css', 'theme.css'), themeCss);
writeFile(path.join(minPath, 'UI', 'themes', theme, 'css', 'theme.css'), themeCss);
}
const uiImages = {}
const svgDir = path.join(sourcePath, 'UI', 'svg');
const svgs = fs.readdirSync(svgDir).filter(name => !['.', '_'].includes(name[0]));
for (const filename of svgs) {
const svgPath = path.join(svgDir, filename);
let svg = fs.readFileSync(svgPath, 'utf-8')
svg = svg.replace(/\n\s*/g, '');
svg = svg.replace(/<!--.+?-->/g, '');
uiImages[filename.slice(0, -4)] = svg
if (filename.startsWith('symbolLoading')) {
for (const theme of themes) {
let themeSVG = svg.replace(/#808080/g, formatColor(themeData[theme]['symbolDefaultColor']))
writeFile(path.join(devPath, 'UI', 'themes', theme, 'svg', filename), themeSVG);
writeFile(path.join(minPath, 'UI', 'themes', theme, 'svg', filename), themeSVG);
}
}
}
}
return {
name: 'install-plugin',
writeBundle
};
}
function symlinkDevPlugin(options = {}) {
const sourcePath = options.source || 'source';
const devPath = options.dev || 'dev';
function shouldInclude(filePath, filename) {
if (filePath.includes('_')) return false;
if (filename.startsWith('.') || filename.startsWith('_')) return false;
if (filename.endsWith('~')) return false;
if (filePath.includes(`${path.sep}UI${path.sep}svg`)) return false;
return true;
}
function ensureDir(dir) {
fs.mkdirSync(dir, { recursive: true });
}
function removeIfExists(target) {
if (fs.existsSync(target) || fs.lstatSync(target, { throwIfNoEntry: false })) {
try {
const stat = fs.lstatSync(target);
if (stat.isSymbolicLink()) {
fs.unlinkSync(target);
} else if (stat.isDirectory()) {
fs.rmdirSync(target);
} else {
console.log("not symlink, what to do?", target)
}
} catch (err) {
// ignore if it doesn't exist anymore
}
}
}
function walk(dir) {
const entries = fs.readdirSync(dir, { withFileTypes: true });
for (const entry of entries) {
const fullPath = path.join(dir, entry.name);
if (entry.isDirectory()) {
walk(fullPath);
} else if (entry.isFile()) {
if (!shouldInclude(dir, entry.name)) continue;
const relativePath = path.relative(sourcePath, dir);
const targetDir = path.join(devPath, relativePath);
const targetPath = path.join(targetDir, entry.name);
const relativeSource = path.relative(targetDir, fullPath);
ensureDir(targetDir);
removeIfExists(targetPath);
if (!fs.existsSync(targetPath)) {
fs.symlinkSync(relativeSource, targetPath);
}
}
}
}
return {
name: 'symlink-dev-plugin',
writeBundle() {
if (!fs.existsSync(sourcePath)) {
this.warn(`Source path "${sourcePath}" does not exist.`);
return;
}
walk(sourcePath);
}
};
}
// TBD: get version
// TBD: add ' OxJS %s (c) %s 0x2620, dual-licensed GPL/MIT, see https://oxjs.org for details ' % (version, year)
//
/*
// kind of inline now, but missing cache busting!
# Ox.UI CSS
css = read_text(source_path + 'UI/css/UI.css')
css = css.replace('$import', '\n'.join([
'@import url("../themes/%s/css/theme.css?%s");' % (theme, version) for theme in themes
]))
write_file('%sUI/css/UI.css' % dev_path, css)
write_file('%sUI/css/UI.css' % min_path, css)
# Ox.UI SVGs
ui_images = {}
path = source_path + 'UI/svg/'
for filename in [filename for filename in os.listdir(path) if not filename[0] in '._']:
svg = read_text(path + filename)
svg = re.sub(r'\n\s*', '', svg)
svg = re.sub(r'<!--.+?-->', '', svg)
# end fix
ui_images[filename[:-4]] = svg
if filename.startswith('symbolLoading'):
for theme in themes:
theme_svg = re.sub(r'#808080', format_hex(theme_data[theme]['symbolDefaultColor']), svg)
write_file('%sUI/themes/%s/svg/%s' % (dev_path, theme, filename), theme_svg)
write_file('%sUI/themes/%s/svg/%s' % (min_path, theme, filename), theme_svg)
write_file(min_path + 'UI/json/UI.json', json.dumps({
'files': sorted(ui_files['min']),
'images': ui_images
}, sort_keys=True))
js = re.sub(
r'Ox.LOCALES = \{\}',
'Ox.LOCALES = ' + json.dumps(locales, indent=4, sort_keys=True),
js
)
js = re.sub(
r"Ox.VERSION = '([\d\.]+)'",
"Ox.VERSION = '%s'" % version,
js
)
*/
export default {
input: {
'Ox': 'source/Ox/Ox.js',
'UI': 'source/UI/UI.js',
'Unicode': 'source/Unicode/Unicode.js',
'Geo': 'source/Geo/Geo.js',
'Image': 'source/Image/Image.js',
},
output: {
dir: 'min',
format: 'es',
entryFileNames: '[name]/[name].js',
chunkFileNames: '[name]/[name].js',
},
plugins: [
resolve(),
terser(),
copy({
targets: [
{ src: "source/Ox.js", dest: 'min/' },
{ src: "source/Ox/json/locale.*.json", dest: 'min/Ox/json' },
{ src: "source/UI/css/*.css", dest: 'min/UI/css' },
{ src: "source/UI/json/locale.*.json", dest: 'min/UI/json' },
{ src: "source/UI/json/UI.json", dest: 'min/UI/json/' }, // FIXME: this one should be genreated first
{ src: "source/UI/png", dest: 'min/UI/' },
{ src: "source/UI/jquery/*.js", dest: 'min/UI/jquery' },
{ src: "source/UI/themes", dest: 'min/UI' },
{ src: "source/Unicode/json/*.json", dest: 'min/Unicode/json' },
{ src: "source/Geo/json/*.json", dest: 'min/Geo/json' },
{ src: "source/Geo/png/flags", dest: 'min/Geo/png/'}
],
hook: 'writeBundle'
}),
install(),
symlinkDevPlugin()
]
};

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../Ox/js/Ox.Global.js';
Ox.load.Geo = function(options, callback) { Ox.load.Geo = function(options, callback) {

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../Ox/js/Ox.Global.js';
Ox.load.Image = function(options, callback) { Ox.load.Image = function(options, callback) {

View file

@ -1,40 +1,12 @@
'use strict'; 'use strict';
(function(global) { (async function(global) {
const initLoad = [];
global.Ox = { global.Ox = {
load: function(...args) {
load: function() { initLoad.push(args)
var args = arguments,
callback = args[args.length - 1],
path = getPath(),
regexp = /dev\/$/,
version = +new Date();
if (args[0] === true && regexp.test(path)) {
path = path.replace(regexp, 'min/');
loadScript('Ox.js', function() {
Ox.MODE = 'min';
Ox.PATH = path;
Ox.load.apply(null, Ox.slice(args, 1));
});
} else {
loadJSON(function(data) {
var previousOx = global.Ox;
version = data.version;
loadScriptsSerial(data.files, function() {
Ox.LOCALES = data.locales;
Ox.VERSION = data.version;
Ox.forEach(previousOx, function(value, key) {
if (Ox.isUndefined(Ox[key])) {
Ox[key] = value;
}
});
Ox.load.apply(null, args);
});
});
} }
};
function getPath() { function getPath() {
var index, regexp = /Ox\.js(\?[\d\.]+|)$/, var index, regexp = /Ox\.js(\?[\d\.]+|)$/,
@ -47,60 +19,10 @@
} }
} }
function loadJSON(callback) { const module = await import('./Ox/Ox.js');
var request = new XMLHttpRequest(), if (Ox.MODE == 'source') {
time = +new Date(); Ox.MODE = 'dev';
request.open('GET', path + 'Ox/json/Ox.json?' + time, true);
request.onreadystatechange = function() {
if (request.readyState == 4) {
if (request.status == 200) {
callback(JSON.parse(request.responseText));
} }
} console.log("Ox was loaded", Ox.MODE, Ox.PATH);
}; initLoad.forEach((args) => global.Ox.load.apply(null, args))
request.send(); }(globalThis));
}
function loadScript(script, callback) {
var element = document.createElement('script'),
head = document.head
|| document.getElementsByTagName('head')[0]
|| document.documentElement;
element.onload = element.onreadystatechange = function() {
if (
!this.readyState
|| this.readyState == 'loaded'
|| this.readyState == 'complete'
) {
callback();
}
}
element.src = path + script + '?' + version;
element.type = 'text/javascript';
head.appendChild(element);
}
function loadScriptsParallel(scripts, callback) {
var i = 0, n = scripts.length;
while (scripts.length) {
loadScript(scripts.shift(), function() {
++i == n && callback();
});
}
}
function loadScriptsSerial(scripts, callback) {
loadScriptsParallel(scripts.shift(), function() {
if (scripts.length) {
loadScriptsSerial(scripts, callback);
} else {
callback();
}
});
}
}
};
}(this));

45
source/Ox/Ox.js Normal file
View file

@ -0,0 +1,45 @@
'use strict';
import Ox from './js/Ox.Global.js';
import './js/Core.js';
import './js/Function.js';
import './js/Polyfill.js';
import './js/Array.js';
import './js/String.js';
import './js/Collection.js';
import './js/Math.js';
import './js/Async.js';
import './js/Color.js';
import './js/Constants.js';
import './js/Date.js';
import './js/DOM.js';
import './js/Encoding.js';
import './js/Format.js';
import './js/Geo.js';
import './js/Hash.js';
import './js/HTML.js';
import './js/JavaScript.js';
import './js/Locale.js';
import './js/Object.js';
import './js/RegExp.js';
import './js/Request.js';
import './js/Type.js';
import './js/Video.js';
export default Ox;
export { Ox };
// For backward compatibility with global usage
if (typeof globalThis !== 'undefined') {
// FIXME: examples/ui/widget_design_patterns writes to Ox before load
if (typeof globalThis.Ox != 'undefined') {
Object.keys(globalThis.Ox).forEach(key => {
if (typeof Ox[key] == 'undefined') {
Ox[key] = globalThis.Ox[key]
}
})
}
globalThis.Ox = Ox;
}

View file

@ -1,5 +1,7 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
/*@ /*@
Ox.api <f> Turns an array into a list API Ox.api <f> Turns an array into a list API
`Ox.api` takes an array and returns a function that allows you to run `Ox.api` takes an array and returns a function that allows you to run

View file

@ -1,5 +1,7 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
(function() { (function() {
function asyncMap(forEach, collection, iterator, that, callback) { function asyncMap(forEach, collection, iterator, that, callback) {

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
/*@ /*@
Ox.avg <f> Returns the average of an array's values, or an object's properties Ox.avg <f> Returns the average of an array's values, or an object's properties
@ -465,6 +466,7 @@ Ox.slice = Ox.toArray = function(collection, start, stop) {
// value. Firefox 3.6 returns an array of undefined values if a string is passed // value. Firefox 3.6 returns an array of undefined values if a string is passed
// as value. // as value.
if ( if (
typeof document !== 'undefined' && (
Ox.slice([0]).length == 0 Ox.slice([0]).length == 0
|| Ox.slice('0')[0] === null || Ox.slice('0')[0] === null
|| Ox.slice('0')[0] === void 0 || Ox.slice('0')[0] === void 0
@ -473,7 +475,7 @@ if (
return Ox.slice(document.getElementsByTagName('a')); return Ox.slice(document.getElementsByTagName('a'));
} catch (error) {} } catch (error) {}
}()) }())
) { )) {
// FIXME: remove toArray alias // FIXME: remove toArray alias
Ox.slice = Ox.toArray = function(collection, start, stop) { Ox.slice = Ox.toArray = function(collection, start, stop) {
var args = stop === void 0 ? [start] : [start, stop], var args = stop === void 0 ? [start] : [start, stop],

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
/*@ /*@
Ox.hsl <f> Takes RGB values and returns HSL values Ox.hsl <f> Takes RGB values and returns HSL values

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
//@ Ox.AMPM <[s]> ['AM', 'PM'] //@ Ox.AMPM <[s]> ['AM', 'PM']
Ox.AMPM = ['AM', 'PM']; Ox.AMPM = ['AM', 'PM'];
@ -92,6 +93,7 @@ Ox.SHORT_MONTHS = Ox.MONTHS.map(function(val) {
}); });
//@ Ox.PATH <s> Path of Ox.js //@ Ox.PATH <s> Path of Ox.js
Ox.PATH = (function() { Ox.PATH = (function() {
if (typeof document !== 'undefined') {
// IE8 can't apply slice to NodeLists, see Ox.slice // IE8 can't apply slice to NodeLists, see Ox.slice
var index, regexp = /Ox\.js(\?.+|)$/, var index, regexp = /Ox\.js(\?.+|)$/,
scripts = document.getElementsByTagName('script'), src; scripts = document.getElementsByTagName('script'), src;
@ -101,6 +103,9 @@ Ox.PATH = (function() {
return src.replace(regexp, ''); return src.replace(regexp, '');
} }
} }
}
// FIXME: fix path detection
return './source/';
}()); }());
//@ Ox.MODE <s> Mode ('dev' or 'min') //@ Ox.MODE <s> Mode ('dev' or 'min')
Ox.MODE = Ox.PATH.slice(0, -1).split('/').pop(); Ox.MODE = Ox.PATH.slice(0, -1).split('/').pop();

View file

@ -2,15 +2,7 @@
'use strict'; 'use strict';
/*@ import Ox from './Ox.Global.js';
Ox <f> The `Ox` object
See `Ox.wrap` for details.
(value) -> <o> wrapped value
value <*> Any value
@*/
this.Ox = function(value) {
return Ox.wrap(value);
};
/*@ /*@
Ox.load <f> Loads OxJS and, optionally, one or more modules Ox.load <f> Loads OxJS and, optionally, one or more modules
@ -76,10 +68,17 @@ Ox.load = function() {
if (!length) { if (!length) {
callback(true); callback(true);
} else { } else {
Ox.forEach(modules, function(options, module) { let fn = Ox.noop
Ox.getFile( if ('UI' in modules) {
Ox.PATH + module + '/' + module + '.js?' + Ox.VERSION, fn = function(callback) {
function() { var path = Ox.PATH + 'UI/jquery/jquery-1.7.1.min.js?' + Ox.VERSION;
Ox.getFile(path, callback)
}
}
fn(function() {
Ox.forEach(modules, async function(options, module) {
console.log("load module!", module, options)
const obj = await import(Ox.PATH + module + '/' + module + '.js?' + Ox.VERSION);
Ox.load[module](options, function(success) { Ox.load[module](options, function(success) {
succeeded += success; succeeded += success;
if (++loaded == length) { if (++loaded == length) {
@ -88,9 +87,8 @@ Ox.load = function() {
}); });
} }
}); });
}
);
}); });
})
} }
}); });
}; };
@ -114,7 +112,7 @@ Ox.localStorage = function(namespace) {
var localStorage; var localStorage;
try { try {
// this will fail if third party cookies/storage is not allowed // this will fail if third party cookies/storage is not allowed
localStorage = window.localStorage || {}; localStorage = globalThis.localStorage || {};
// FF 3.6 can't assign to or iterate over localStorage // FF 3.6 can't assign to or iterate over localStorage
for (var key in localStorage) {} for (var key in localStorage) {}
// In Safari (OS X or iOS) is in private browsing mode, // In Safari (OS X or iOS) is in private browsing mode,
@ -206,7 +204,7 @@ Ox.Log = (function() {
args.unshift( args.unshift(
Ox.formatDate(date, '%H:%M:%S.') + (+date).toString().slice(-3) Ox.formatDate(date, '%H:%M:%S.') + (+date).toString().slice(-3)
); );
window.console && window.console.log && window.console.log.apply(window.console, args); globalThis.console && globalThis.console.log && globalThis.console.log.apply(globalThis.console, args);
ret = args.join(' '); ret = args.join(' ');
} }
return ret; return ret;
@ -268,7 +266,7 @@ Ox.print = function() {
args.unshift( args.unshift(
date.toString().split(' ')[4] + '.' + (+date).toString().slice(-3) date.toString().split(' ')[4] + '.' + (+date).toString().slice(-3)
); );
window.console && window.console.log.apply(window.console, args); globalThis.console && globalThis.console.log.apply(globalThis.console, args);
return args.join(' '); return args.join(' ');
}; };

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
/*@ /*@
Ox.$ <f> Generic HTML element, mimics jQuery Ox.$ <f> Generic HTML element, mimics jQuery
@ -828,12 +829,19 @@ Ox.documentReady <function> Calls a callback function once the DOM is ready
@*/ @*/
Ox.documentReady = (function() { Ox.documentReady = (function() {
var callbacks = []; var callbacks = [];
document.onreadystatechange = window.onload = function() { if (typeof document === 'undefined') {
return function(callback) {
callback();
return true;
}
}
document.onreadystatechange = globalThis.onload = function() {
if (document.readyState == 'complete') { if (document.readyState == 'complete') {
callbacks.forEach(function(callback) { callbacks.forEach(function(callback) {
callback(); callback();
}); });
document.onreadystatechange = window.onload = null; document.onreadystatechange = globalThis.onload = null;
} }
}; };
return function(callback) { return function(callback) {

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
//@ Ox.getDate <f> Get the day of a date, optionally UTC //@ Ox.getDate <f> Get the day of a date, optionally UTC
// see Ox.setSeconds for source code // see Ox.setSeconds for source code

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
/*@ /*@
Ox.encodeBase26 <b> Encode a number as bijective base26 Ox.encodeBase26 <b> Encode a number as bijective base26

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
/*@ /*@
Ox.formatArea <f> Formats a number of meters as square meters or kilometers Ox.formatArea <f> Formats a number of meters as square meters or kilometers

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
/*@ /*@
Ox.cache <f> Memoize a function Ox.cache <f> Memoize a function

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
(function() { (function() {

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
(function() { (function() {

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
/*@ /*@
Ox.oshash <f> Calculates oshash for a given file or blob object. Async. Ox.oshash <f> Calculates oshash for a given file or blob object. Async.

View file

@ -1,4 +1,7 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
var globalEval = eval;
/*@ /*@
Ox.doc <f> Generates documentation for annotated JavaScript Ox.doc <f> Generates documentation for annotated JavaScript
@ -827,7 +830,7 @@ Ox.test = function(argument, callback) {
); );
} }
Ox.Log('TEST', statement); Ox.Log('TEST', statement);
actual = eval(statement); actual = globalEval(statement);
if (!isAsync && test.expected) { if (!isAsync && test.expected) {
Ox.test.data[id].results.push({ Ox.test.data[id].results.push({
actual: stringifyResult(actual), actual: stringifyResult(actual),
@ -836,7 +839,7 @@ Ox.test = function(argument, callback) {
section: item.section, section: item.section,
statement: statement, statement: statement,
passed: Ox.isEqual( passed: Ox.isEqual(
actual, eval('(' + test.expected + ')') actual, globalEval('(' + test.expected + ')')
) )
}); });
} }

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
(function() { (function() {

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
/*@ /*@
Ox.acosh <f> Inverse hyperbolic cosine Ox.acosh <f> Inverse hyperbolic cosine

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
/*@ /*@
Ox.extend <function> Extends an object with one or more other objects Ox.extend <function> Extends an object with one or more other objects

14
source/Ox/js/Ox.Global.js Normal file
View file

@ -0,0 +1,14 @@
'use strict';
/*@
Ox <f> The `Ox` object
See `Ox.wrap` for details.
(value) -> <o> wrapped value
value <*> Any value
@*/
export const Ox = function(value) {
return Ox.wrap(value)
};
export default Ox;

View file

@ -1,4 +1,7 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
var globalEval = eval;
(function(window) { (function(window) {
@ -209,7 +212,7 @@
} }
return { return {
parse: function parse(string) { parse: function parse(string) {
return eval('(' + string + ')'); return globalEval('(' + string + ')');
}, },
stringify: function stringify(value) { stringify: function stringify(value) {
var ret = 'null', type = Ox.typeOf(value); var ret = 'null', type = Ox.typeOf(value);
@ -396,7 +399,7 @@
].forEach(function(item) { ].forEach(function(item) {
var object = item[0], keys = item[1]; var object = item[0], keys = item[1];
keys.forEach(function(key) { keys.forEach(function(key) {
if (!key in object) { if (!(key in object)) {
if (canDefineProperty) { if (canDefineProperty) {
Object.defineProperty(object, key, { Object.defineProperty(object, key, {
configurable: true, configurable: true,
@ -427,4 +430,4 @@
} }
} }
}(this)); }(globalThis));

View file

@ -1,3 +1,5 @@
import Ox from './Ox.Global.js';
/*@ /*@
Ox.escapeRegExp <f> Escapes a string for use in a regular expression Ox.escapeRegExp <f> Escapes a string for use in a regular expression
(str) -> <r> Escaped string (str) -> <r> Escaped string

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
/*@ /*@
Ox.get <f> Get a remote resource Ox.get <f> Get a remote resource
@ -87,6 +88,10 @@ Ox.getAsync = function(urls, get, callback) {
(function() { (function() {
if (typeof document == 'undefined') {
console.log("running in node, disable some things in Requets.js")
return
}
var cache = {}, var cache = {},
head = document.head head = document.head
|| document.getElementsByTagName('head')[0] || document.getElementsByTagName('head')[0]

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
/*@ /*@
Ox.char <f> Alias for String.fromCharCode Ox.char <f> Alias for String.fromCharCode
@ -265,9 +266,21 @@ Ox.parseURL <f> Takes a URL, returns its components
'?a=0&b=1' '?a=0&b=1'
@*/ @*/
Ox.parseURL = (function() { Ox.parseURL = (function() {
var a = document.createElement('a'), const keys = [
keys = ['hash', 'host', 'hostname', 'origin', 'hash', 'host', 'hostname', 'origin',
'pathname', 'port', 'protocol', 'search']; 'pathname', 'port', 'protocol', 'search'
];
if (typeof document == 'undefined') {
return function(string) {
const a = new URL(string);
var ret = {};
keys.forEach(function(key) {
ret[key] = a[key];
});
return ret;
}
} else {
var a = document.createElement('a');
return function(string) { return function(string) {
var ret = {}; var ret = {};
a.href = string; a.href = string;
@ -276,6 +289,7 @@ Ox.parseURL = (function() {
}); });
return ret; return ret;
}; };
}
}()); }());
// FIXME: can we get rid of this? // FIXME: can we get rid of this?

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
/*@ /*@
Ox.checkType <f> Throws a TypeError if a value is not of a given type Ox.checkType <f> Throws a TypeError if a value is not of a given type
@ -442,11 +443,13 @@ Ox.typeOf = function(value) {
// Mobile Safari returns 'DOMWindow' for null and undefined // Mobile Safari returns 'DOMWindow' for null and undefined
// Firefox 30+ returns 'window' for window // Firefox 30+ returns 'window' for window
if ( if (
(typeof document != 'undefined') && (
Ox.typeOf((function() { return arguments; }())) != 'arguments' Ox.typeOf((function() { return arguments; }())) != 'arguments'
|| Ox.typeOf(document.getElementsByTagName('a')) != 'nodelist' || Ox.typeOf(document.getElementsByTagName('a')) != 'nodelist'
|| Ox.typeOf(null) != 'null' || Ox.typeOf(null) != 'null'
|| Ox.typeOf(window) != 'global' || Ox.typeOf(window) != 'global'
|| Ox.typeOf() != 'undefined' || Ox.typeOf() != 'undefined'
)
) { ) {
Ox.typeOf = function(value) { Ox.typeOf = function(value) {
var type = Object.prototype.toString.call( var type = Object.prototype.toString.call(

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './Ox.Global.js';
/*@ /*@
Ox.getVideoFormat <f> Get supported video format Ox.getVideoFormat <f> Get supported video format

View file

@ -1,7 +1,128 @@
'use strict'; 'use strict';
Ox.load.UI = function(options, callback) { import Ox from './../Ox/js/Ox.Global.js';
Ox.UI = Ox.UI || {};
import './js/Audio/AudioElement.js';
import './js/Audio/AudioPlayer.js';
import './js/Bar/Bar.js';
import './js/Bar/Progressbar.js';
import './js/Bar/Resizebar.js';
import './js/Bar/Tabbar.js';
import './js/Calendar/CalendarEditor.js';
import './js/Calendar/Calendar.js';
import './js/Code/DocPage.js';
import './js/Code/DocPanel.js';
import './js/Code/ExamplePage.js';
import './js/Code/ExamplePanel.js';
import './js/Code/SourceViewer.js';
import './js/Code/SyntaxHighlighter.js';
import './js/Core/API.js';
import './js/Core/App.js';
import './js/Core/Clipboard.js';
import './js/Core/Container.js';
import './js/Core/Cookies.js';
import './js/Core/Element.js';
import './js/Core/Event.js';
import './js/Core/Focus.js';
import './js/Core/Fullscreen.js';
import './js/Core/GarbageCollection.js';
import './js/Core/History.js';
import './js/Core/LoadingIcon.js';
import './js/Core/LoadingScreen.js';
import './js/Core/Request.js';
import './js/Core/Theme.js';
import './js/Core/UI.js';
import './js/Core/URL.js';
import './js/Form/ArrayEditable.js';
import './js/Form/ArrayInput.js';
import './js/Form/ButtonGroup.js';
import './js/Form/Button.js';
import './js/Form/CheckboxGroup.js';
import './js/Form/Checkbox.js';
import './js/Form/ColorInput.js';
import './js/Form/ColorPicker.js';
import './js/Form/DateInput.js';
import './js/Form/DateTimeInput.js';
import './js/Form/EditableContent.js';
import './js/Form/Editable.js';
import './js/Form/FileButton.js';
import './js/Form/FileInput.js';
import './js/Form/Filter.js';
import './js/Form/FormElementGroup.js';
import './js/Form/FormItem.js';
import './js/Form/Form.js';
import './js/Form/FormPanel.js';
import './js/Form/InputGroup.js';
import './js/Form/Input.js';
import './js/Form/InsertHTMLDialog.js';
import './js/Form/Label.js';
import './js/Form/ObjectArrayInput.js';
import './js/Form/ObjectInput.js';
import './js/Form/OptionGroup.js';
import './js/Form/Picker.js';
import './js/Form/PlaceInput.js';
import './js/Form/PlacePicker.js';
import './js/Form/Range.js';
import './js/Form/SelectInput.js';
import './js/Form/Select.js';
import './js/Form/Spreadsheet.js';
import './js/Form/TimeInput.js';
import './js/Image/ImageElement.js';
import './js/Image/ImageViewer.js';
import './js/List/Chart.js';
import './js/List/ColumnList.js';
import './js/List/CustomList.js';
import './js/List/IconItem.js';
import './js/List/IconList.js';
import './js/List/InfoList.js';
import './js/List/ListItem.js';
import './js/List/List.js';
import './js/List/SortList.js';
import './js/List/TableList.js';
import './js/List/TreeList.js';
import './js/Map/MapEditor.js';
import './js/Map/MapImage.js';
import './js/Map/Map.js';
import './js/Map/MapMarkerImage.js';
import './js/Map/MapMarker.js';
import './js/Map/MapPlace.js';
import './js/Map/MapRectangle.js';
import './js/Map/MapRectangleMarker.js';
import './js/Menu/MainMenu.js';
import './js/Menu/MenuButton.js';
import './js/Menu/MenuItem.js';
import './js/Menu/Menu.js';
import './js/Panel/CollapsePanel.js';
import './js/Panel/SlidePanel.js';
import './js/Panel/SplitPanel.js';
import './js/Panel/TabPanel.js';
import './js/Video/AnnotationFolder.js';
import './js/Video/AnnotationPanel.js';
import './js/Video/BlockVideoTimeline.js';
import './js/Video/ClipPanel.js';
import './js/Video/LargeVideoTimeline.js';
import './js/Video/SmallVideoTimelineImage.js';
import './js/Video/SmallVideoTimeline.js';
import './js/Video/VideoAnnotationPanel.js';
import './js/Video/VideoEditPanel.js';
import './js/Video/VideoElement.js';
import './js/Video/VideoPlayer.js';
import './js/Video/VideoPlayerMenu.js';
import './js/Video/VideoPlayerPanel.js';
import './js/Video/VideoPreview.js';
import './js/Video/VideoTimelinePanel.js';
import './js/Video/VideoTimelinePlayer.js';
import './js/Window/Dialog.js';
import './js/Window/Layer.js';
import './js/Window/SortDialog.js';
import './js/Window/Tooltip.js';
export const UI = Ox.UI;
export default UI;
if (typeof globalThis !== 'undefined') {
Ox.load.UI = function(options, callback) {
options = Ox.extend({ options = Ox.extend({
hideScreen: true, hideScreen: true,
loadCSS: true, loadCSS: true,
@ -69,8 +190,6 @@ Ox.load.UI = function(options, callback) {
} }
}); });
Ox.UI = {};
Ox.UI.LoadingScreen = (function() { Ox.UI.LoadingScreen = (function() {
var $body = Ox.$('body'), var $body = Ox.$('body'),
@ -128,7 +247,8 @@ Ox.load.UI = function(options, callback) {
.appendTo(div); .appendTo(div);
}); });
*/ */
var src = Ox.PATH + 'UI/themes/' + options.theme + '/svg/symbolLoading.svg' //var src = Ox.PATH + 'UI/themes/' + options.theme + '/svg/symbolLoading.svg'
var src = Ox.PATH + '../dev/UI/themes/' + options.theme + '/svg/symbolLoading.svg'
Ox.getFile(src, function() { Ox.getFile(src, function() {
$icon = Ox.$('<img>') $icon = Ox.$('<img>')
.attr({ .attr({
@ -249,10 +369,7 @@ Ox.load.UI = function(options, callback) {
loadUI(); loadUI();
function loadUI() { function loadUI() {
let path = Ox.PATH + 'UI/json/UI.json?' + Ox.VERSION;
var path = Ox.PATH + 'UI/jquery/jquery.js?' + Ox.VERSION;
Ox.getFile(path, function() {
path = Ox.PATH + 'UI/json/UI.json?' + Ox.VERSION;
Ox.getJSON(path, function(data) { Ox.getJSON(path, function(data) {
var counter = 0, length; var counter = 0, length;
if (!options.loadCSS) { if (!options.loadCSS) {
@ -283,8 +400,6 @@ Ox.load.UI = function(options, callback) {
} }
}); });
}); });
});
} }
function initUI() { function initUI() {
@ -303,3 +418,4 @@ Ox.load.UI = function(options, callback) {
} }
}; };
}

View file

@ -1,4 +1,7 @@
$import @import url("../themes/aqua/css/theme.css");
@import url("../themes/oxdark/css/theme.css");
@import url("../themes/oxlight/css/theme.css");
@import url("../themes/oxmedium/css/theme.css");
/* /*
================================================================================ ================================================================================

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.AudioElement <f> AudioElement Object Ox.AudioElement <f> AudioElement Object

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.AudioPlayer <f> Generic Audio Player Ox.AudioPlayer <f> Generic Audio Player

View file

@ -1,4 +1,6 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Bar <f> Bar Ox.Bar <f> Bar
options <o> Options object options <o> Options object

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Progressbar <f> Progress Bar Ox.Progressbar <f> Progress Bar

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Resizebar <f> Resizebar Ox.Resizebar <f> Resizebar
options <o> Options object options <o> Options object

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Tabbar <f> Tabbar Ox.Tabbar <f> Tabbar
options <o> Options object options <o> Options object

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Calendar <f> Basic calendar object Ox.Calendar <f> Basic calendar object

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.CalendarEditor <f> Calendar Editor Ox.CalendarEditor <f> Calendar Editor

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.DocPage <f> DocPage Ox.DocPage <f> DocPage

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.DocPanel <f> Documentation Panel Ox.DocPanel <f> Documentation Panel

View file

@ -1,4 +1,5 @@
'use strict' 'use strict'
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.ExamplePage <f> Example Page Ox.ExamplePage <f> Example Page

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.ExamplePanel <f> Example Panel Ox.ExamplePanel <f> Example Panel

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.SourceViewer <f> Source Viewer Ox.SourceViewer <f> Source Viewer

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.SyntaxHighlighter <f> Syntax Highlighter Ox.SyntaxHighlighter <f> Syntax Highlighter

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.API <f> Remote API controller Ox.API <f> Remote API controller

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.App <f> Basic application instance that communicates with a JSON API Ox.App <f> Basic application instance that communicates with a JSON API
@ -75,12 +76,12 @@ Ox.App = function(options) {
screen: screen, screen: screen,
time: (+new Date() - self.time) / 1000, time: (+new Date() - self.time) / 1000,
window: { window: {
innerHeight: window.innerHeight, innerHeight: globalThis.innerHeight,
innerWidth: window.innerWidth, innerWidth: globalThis.innerWidth,
outerHeight: window.outerHeight, outerHeight: globalThis.outerHeight,
outerWidth: window.outerWidth, outerWidth: globalThis.outerWidth,
screenLeft: window.screenLeft, screenLeft: globalThis.screenLeft,
screenTop: window.screenTop screenTop: globalThis.screenTop
} }
}; };
} }

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Clipboard <o> Basic clipboard handler Ox.Clipboard <o> Basic clipboard handler

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
// fixme: wouldn't it be better to let the elements be, // fixme: wouldn't it be better to let the elements be,
// rather then $element, $content, and potentially others, // rather then $element, $content, and potentially others,

View file

@ -1,3 +1,5 @@
import Ox from './../../../Ox/js/Ox.Global.js';
Ox.Cookies = function() { Ox.Cookies = function() {
var name, value, cookies; var name, value, cookies;
if (arguments.length == 1) { if (arguments.length == 1) {

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
(function(_) { (function(_) {
var noTooltipEvents = {}; var noTooltipEvents = {};

View file

@ -1,3 +1,5 @@
import Ox from './../../../Ox/js/Ox.Global.js';
(function() { (function() {
var chars = { var chars = {

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Focus <o> Basic focus controller Ox.Focus <o> Basic focus controller

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Fullscreen <o> Fullscreen controller Ox.Fullscreen <o> Fullscreen controller

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.GarbageCollection <f> GarbageCollection Ox.GarbageCollection <f> GarbageCollection

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
Ox.History = function(options) { Ox.History = function(options) {

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.LoadingIcon <f> Loading Icon Element Ox.LoadingIcon <f> Loading Icon Element

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.LoadingScreen <f> Simple loading screen Ox.LoadingScreen <f> Simple loading screen

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Request <o> Basic request controller Ox.Request <o> Basic request controller

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Theme <f> get/set theme Ox.Theme <f> get/set theme

View file

@ -1,4 +1,8 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
Ox.UI = Ox.UI || {};
console.log("Ox", Ox, Ox.UI)
Ox.documentReady(function() { Ox.documentReady(function() {
// FIXME: use Ox.$foo everywhere! // FIXME: use Ox.$foo everywhere!
@ -16,10 +20,11 @@ Ox.documentReady(function() {
Ox.$elements = {}; Ox.$elements = {};
//@ Ox.UI.DIMENSIONS <o> Names of horizontal and vertical dimensions //@ Ox.UI.DIMENSIONS <o> Names of horizontal and vertical dimensions
Ox.DIMENSIONS = Ox.UI.DIMENSIONS = { Ox.UI.DIMENSIONS = {
horizontal: ['width', 'height'], horizontal: ['width', 'height'],
vertical: ['height', 'width'] vertical: ['height', 'width']
}; };
Ox.DIMENSIONS = Ox.UI.DIMENSIONS;
//@ Ox.UI.EDGES <o> Names of horizontal and vertical edges //@ Ox.UI.EDGES <o> Names of horizontal and vertical edges
Ox.EDGES = Ox.UI.EDGES = { Ox.EDGES = Ox.UI.EDGES = {

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.URL <f> URL controller Ox.URL <f> URL controller

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.ArrayEditable <f> Array Editable Ox.ArrayEditable <f> Array Editable

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.ArrayInput <f> Array input Ox.ArrayInput <f> Array input

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Button <f> Button Object Ox.Button <f> Button Object

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.ButtonGroup <f> ButtonGroup Object Ox.ButtonGroup <f> ButtonGroup Object

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Checkbox <f> Checkbox Element Ox.Checkbox <f> Checkbox Element

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.CheckboxGroup <f> CheckboxGroup Object Ox.CheckboxGroup <f> CheckboxGroup Object

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.ColorInput <f> ColorInput Element Ox.ColorInput <f> ColorInput Element

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.ColorPicker <f> ColorPicker Element Ox.ColorPicker <f> ColorPicker Element

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.DateInput <f> DateInput Element Ox.DateInput <f> DateInput Element

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.DateTimeInput <f> DateTimeInput Element Ox.DateTimeInput <f> DateTimeInput Element

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Editable <f> Editable element Ox.Editable <f> Editable element

View file

@ -1,3 +1,5 @@
import Ox from './../../../Ox/js/Ox.Global.js';
Ox.EditableContent = function(options, self) { Ox.EditableContent = function(options, self) {
self = self || {}; self = self || {};

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.FileButton <f> File Button Ox.FileButton <f> File Button

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.FileInput <f> File Input Ox.FileInput <f> File Input

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Filter <f> Filter Object Ox.Filter <f> Filter Object

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Form <f> Form Object Ox.Form <f> Form Object

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.FormElementGroup <f> FormElementGroup Element Ox.FormElementGroup <f> FormElementGroup Element

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.FormItem <f> FormItem Element, wraps form element with an error message Ox.FormItem <f> FormItem Element, wraps form element with an error message

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.FormPanel <f> Form Panel Ox.FormPanel <f> Form Panel

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Input <f> Input Element Ox.Input <f> Input Element

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.InputGroup <f> InputGroup Object Ox.InputGroup <f> InputGroup Object

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.InsertHTMLDialog <f> Insert HTML Dialog Ox.InsertHTMLDialog <f> Insert HTML Dialog

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Label <f> Label element Ox.Label <f> Label element

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.ObjectArrayInput <f> Object Array Input Ox.ObjectArrayInput <f> Object Array Input

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.ObjectInput <f> Object Input Ox.ObjectInput <f> Object Input

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.OptionGroup <f> OptionGroup Ox.OptionGroup <f> OptionGroup

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Picker <f> Picker Object Ox.Picker <f> Picker Object

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.PlaceInput <f> PlaceInput Object Ox.PlaceInput <f> PlaceInput Object

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.PlacePicker <f> PlacePicker Object Ox.PlacePicker <f> PlacePicker Object

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Range <f> Range Object Ox.Range <f> Range Object

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Select <f> Select Object Ox.Select <f> Select Object

View file

@ -1,4 +1,6 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
//FIXME: does not work without options //FIXME: does not work without options
/*@ /*@
Ox.SelectInput <f> Select Input Ox.SelectInput <f> Select Input

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.Spreadsheet <f> Spreadsheet Ox.Spreadsheet <f> Spreadsheet

View file

@ -1,4 +1,5 @@
'use strict'; 'use strict';
import Ox from './../../../Ox/js/Ox.Global.js';
/*@ /*@
Ox.TimeInput <f> TimeInput Object Ox.TimeInput <f> TimeInput Object

Some files were not shown because too many files have changed in this diff Show more