From 0e78422f358438e46712a9f59bce24832f164650 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Sat, 28 May 2016 02:47:52 +0300 Subject: [PATCH] tweaking... Signed-off-by: Alex A. Naanou --- ui (gen4)/ext-lib/require.js | 136 +++++++++++++++++++++++-------- ui (gen4)/features/cli.js | 14 ++-- ui (gen4)/features/core.js | 5 +- ui (gen4)/features/filesystem.js | 6 +- ui (gen4)/ig.js | 2 +- ui (gen4)/images.js | 2 +- ui (gen4)/index.html | 10 --- ui (gen4)/lib/jli.js | 83 ------------------- ui (gen4)/lib/util.js | 88 ++++++++++++++++++++ ui (gen4)/ui.js | 6 ++ 10 files changed, 213 insertions(+), 139 deletions(-) diff --git a/ui (gen4)/ext-lib/require.js b/ui (gen4)/ext-lib/require.js index 7f31fa20..23ddb4ee 100755 --- a/ui (gen4)/ext-lib/require.js +++ b/ui (gen4)/ext-lib/require.js @@ -1,7 +1,6 @@ /** vim: et:ts=4:sw=4:sts=4 - * @license RequireJS 2.1.14 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved. - * Available via the MIT or new BSD license. - * see: http://github.com/jrburke/requirejs for details + * @license RequireJS 2.2.0 Copyright jQuery Foundation and other contributors. + * Released under MIT license, http://github.com/requirejs/requirejs/LICENSE */ //Not using strict: uneven strict support in browsers, #392, and causes //problems with requirejs.exec()/transpiler plugins that may not be strict. @@ -12,7 +11,7 @@ var requirejs, require, define; (function (global) { var req, s, head, baseElement, dataMain, src, interactiveScript, currentlyAddingScript, mainScript, subPath, - version = '2.1.14', + version = '2.2.0', commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg, cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, jsSuffixRegExp = /\.js$/, @@ -20,8 +19,6 @@ var requirejs, require, define; op = Object.prototype, ostring = op.toString, hasOwn = op.hasOwnProperty, - ap = Array.prototype, - apsp = ap.splice, isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document), isWebWorker = !isBrowser && typeof importScripts !== 'undefined', //PS3 indicates loaded and complete, but need to wait for complete @@ -38,6 +35,11 @@ var requirejs, require, define; globalDefQueue = [], useInteractive = false; + //Could match something like ')//comment', do not lose the prefix to comment. + function commentReplace(match, multi, multiText, singlePrefix) { + return singlePrefix || ''; + } + function isFunction(it) { return ostring.call(it) === '[object Function]'; } @@ -244,7 +246,7 @@ var requirejs, require, define; // still work when converted to a path, even though // as an ID it is less than ideal. In larger point // releases, may be better to just kick out an error. - if (i === 0 || (i == 1 && ary[2] === '..') || ary[i - 1] === '..') { + if (i === 0 || (i === 1 && ary[2] === '..') || ary[i - 1] === '..') { continue; } else if (i > 0) { ary.splice(i - 1, 2); @@ -554,11 +556,13 @@ var requirejs, require, define; function takeGlobalQueue() { //Push all the globalDefQueue items into the context's defQueue if (globalDefQueue.length) { - //Array splice in the values since the context code has a - //local var ref to defQueue, so cannot just reassign the one - //on context. - apsp.apply(defQueue, - [defQueue.length, 0].concat(globalDefQueue)); + each(globalDefQueue, function(queueItem) { + var id = queueItem[0]; + if (typeof id === 'string') { + context.defQueueMap[id] = true; + } + defQueue.push(queueItem); + }); globalDefQueue = []; } } @@ -589,7 +593,7 @@ var requirejs, require, define; id: mod.map.id, uri: mod.map.url, config: function () { - return getOwn(config.config, mod.map.id) || {}; + return getOwn(config.config, mod.map.id) || {}; }, exports: mod.exports || (mod.exports = {}) }); @@ -845,7 +849,10 @@ var requirejs, require, define; factory = this.factory; if (!this.inited) { - this.fetch(); + // Only fetch if not already in the defQueue. + if (!hasProp(context.defQueueMap, id)) { + this.fetch(); + } } else if (this.error) { this.emit('error', this.error); } else if (!this.defining) { @@ -905,7 +912,11 @@ var requirejs, require, define; defined[id] = exports; if (req.onResourceLoad) { - req.onResourceLoad(context, this.map, this.depMaps); + var resLoadMaps = []; + each(this.depMaps, function (depMap) { + resLoadMaps.push(depMap.normalizedMap || depMap); + }); + req.onResourceLoad(context, this.map, resLoadMaps); } } @@ -964,6 +975,7 @@ var requirejs, require, define; this.map.parentMap); on(normalizedMap, 'defined', bind(this, function (value) { + this.map.normalizedMap = normalizedMap; this.init([], function () { return value; }, null, { enabled: true, ignore: true @@ -1117,12 +1129,22 @@ var requirejs, require, define; this.depCount += 1; on(depMap, 'defined', bind(this, function (depExports) { + if (this.undefed) { + return; + } this.defineDep(i, depExports); this.check(); })); if (this.errback) { on(depMap, 'error', bind(this, this.errback)); + } else if (this.events.error) { + // No direct errback on this module, but something + // else is listening for errors, so be sure to + // propagate the error correctly. + on(depMap, 'error', bind(this, function(err) { + this.emit('error', err); + })); } } @@ -1226,13 +1248,15 @@ var requirejs, require, define; while (defQueue.length) { args = defQueue.shift(); if (args[0] === null) { - return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); + return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + + args[args.length - 1])); } else { //args are id, deps, factory. Should be normalized by the //define() function. callGetModule(args); } } + context.defQueueMap = {}; } context = { @@ -1242,6 +1266,7 @@ var requirejs, require, define; defined: defined, urlFetched: urlFetched, defQueue: defQueue, + defQueueMap: {}, Module: Module, makeModuleMap: makeModuleMap, nextTick: req.nextTick, @@ -1259,6 +1284,14 @@ var requirejs, require, define; } } + // Convert old style urlArgs string to a function. + if (typeof cfg.urlArgs === 'string') { + var urlArgs = cfg.urlArgs; + cfg.urlArgs = function(id, url) { + return (url.indexOf('?') === -1 ? '?' : '&') + urlArgs; + }; + } + //Save off the paths since they require special processing, //they are additive. var shim = config.shim, @@ -1313,7 +1346,7 @@ var requirejs, require, define; each(cfg.packages, function (pkgObj) { var location, name; - pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj; + pkgObj = typeof pkgObj === 'string' ? {name: pkgObj} : pkgObj; name = pkgObj.name; location = pkgObj.location; @@ -1340,7 +1373,7 @@ var requirejs, require, define; //late to modify them, and ignore unnormalized ones //since they are transient. if (!mod.inited && !mod.map.unnormalized) { - mod.map = makeModuleMap(id); + mod.map = makeModuleMap(id, null, true); } }); @@ -1476,6 +1509,7 @@ var requirejs, require, define; var map = makeModuleMap(id, relMap, true), mod = getOwn(registry, id); + mod.undefed = true; removeScript(id); delete defined[id]; @@ -1486,10 +1520,11 @@ var requirejs, require, define; //in array so that the splices do not //mess up the iteration. eachReverse(defQueue, function(args, i) { - if(args[0] === id) { + if (args[0] === id) { defQueue.splice(i, 1); } }); + delete context.defQueueMap[id]; if (mod) { //Hold on to listeners in case the @@ -1551,6 +1586,7 @@ var requirejs, require, define; callGetModule(args); } + context.defQueueMap = {}; //Do this after the cycle of callGetModule in case the result //of those calls/init calls changes the registry. @@ -1632,13 +1668,12 @@ var requirejs, require, define; //Join the path parts together, then figure out if baseUrl is needed. url = syms.join('/'); - url += (ext || (/^data\:|\?/.test(url) || skipExt ? '' : '.js')); + url += (ext || (/^data\:|^blob\:|\?/.test(url) || skipExt ? '' : '.js')); url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url; } - return config.urlArgs ? url + - ((url.indexOf('?') === -1 ? '?' : '&') + - config.urlArgs) : url; + return config.urlArgs && !/^blob\:/.test(url) ? + url + config.urlArgs(moduleName, url) : url; }, //Delegates to req.load. Broken out as a separate function to @@ -1686,7 +1721,21 @@ var requirejs, require, define; onScriptError: function (evt) { var data = getScriptData(evt); if (!hasPathFallback(data.id)) { - return onError(makeError('scripterror', 'Script error for: ' + data.id, evt, [data.id])); + var parents = []; + eachProp(registry, function(value, key) { + if (key.indexOf('_@r') !== 0) { + each(value.depMaps, function(depMap) { + if (depMap.id === data.id) { + parents.push(key); + return true; + } + }); + } + }); + return onError(makeError('scripterror', 'Script error for "' + data.id + + (parents.length ? + '", needed by: ' + parents.join(', ') : + '"'), evt, [data.id])); } } }; @@ -1860,11 +1909,11 @@ var requirejs, require, define; if (node.attachEvent && //Check if node.attachEvent is artificially added by custom script or //natively supported by browser - //read https://github.com/jrburke/requirejs/issues/187 + //read https://github.com/requirejs/requirejs/issues/187 //if we can NOT find [native code] then it must NOT natively supported. //in IE8, node.attachEvent does not have toString() //Note the test for "[native code" with no closing brace, see: - //https://github.com/jrburke/requirejs/issues/273 + //https://github.com/requirejs/requirejs/issues/273 !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && !isOpera) { //Probably IE. IE (at least 6-8) do not fire @@ -1892,6 +1941,12 @@ var requirejs, require, define; } node.src = url; + //Calling onNodeCreated after all properties on the node have been + //set, but before it is placed in the DOM. + if (config.onNodeCreated) { + config.onNodeCreated(node, config, moduleName, url); + } + //For some cache cases in IE 6-8, the script executes before the end //of the appendChild execution, so to tie an anonymous define //call to the module name (which is stored on the node), hold on @@ -1910,9 +1965,14 @@ var requirejs, require, define; //In a web worker, use importScripts. This is not a very //efficient use of importScripts, importScripts will block until //its script is downloaded and evaluated. However, if web workers - //are in play, the expectation that a build has been done so that - //only one script needs to be loaded anyway. This may need to be - //reevaluated if other use cases become common. + //are in play, the expectation is that a build has been done so + //that only one script needs to be loaded anyway. This may need + //to be reevaluated if other use cases become common. + + // Post a task to the event loop to work around a bug in WebKit + // where the worker gets garbage-collected after calling + // importScripts(): https://webkit.org/b/153317 + setTimeout(function() {}, 0); importScripts(url); //Account for anonymous modules @@ -1958,8 +2018,10 @@ var requirejs, require, define; //Preserve dataMain in case it is a path (i.e. contains '?') mainScript = dataMain; - //Set final baseUrl if there is not already an explicit one. - if (!cfg.baseUrl) { + //Set final baseUrl if there is not already an explicit one, + //but only do so if the data-main value is not a loader plugin + //module ID. + if (!cfg.baseUrl && mainScript.indexOf('!') === -1) { //Pull off the directory of data-main for use as the //baseUrl. src = mainScript.split('/'); @@ -1973,7 +2035,7 @@ var requirejs, require, define; //like a module name. mainScript = mainScript.replace(jsSuffixRegExp, ''); - //If mainScript is still a path, fall back to dataMain + //If mainScript is still a path, fall back to dataMain if (req.jsExtRegExp.test(mainScript)) { mainScript = dataMain; } @@ -2020,7 +2082,7 @@ var requirejs, require, define; if (callback.length) { callback .toString() - .replace(commentRegExp, '') + .replace(commentRegExp, commentReplace) .replace(cjsRequireRegExp, function (match, dep) { deps.push(dep); }); @@ -2052,14 +2114,18 @@ var requirejs, require, define; //where the module name is not known until the script onload event //occurs. If no context, use the global queue, and get it processed //in the onscript load callback. - (context ? context.defQueue : globalDefQueue).push([name, deps, callback]); + if (context) { + context.defQueue.push([name, deps, callback]); + context.defQueueMap[name] = true; + } else { + globalDefQueue.push([name, deps, callback]); + } }; define.amd = { jQuery: true }; - /** * Executes the text. Normally just uses eval, but can be modified * to use a better, environment-specific call. Only used for transpiling diff --git a/ui (gen4)/features/cli.js b/ui (gen4)/features/cli.js index a78df793..0cad746b 100755 --- a/ui (gen4)/features/cli.js +++ b/ui (gen4)/features/cli.js @@ -54,10 +54,14 @@ var CLIActions = actions.Actions({ path = path || this.location.path return this.loadImages(path) - .then(function(){ return that.makePreviews('all') }) - .then(function(){ return that.sortImages() }) - //.then(function(){ return that.readAllMetadata() }) - .then(function(){ return that.saveIndex() }) + .then(function(){ + that.makePreviews('all') + //that.readAllMetadata() + that + .sortImages() + // XXX for some reason this is not running from cli + .saveIndex(path) + }) }], }) @@ -209,7 +213,7 @@ module.CLI = core.ImageGridFeatures.Feature({ .arguments(' [args]') .action(function(action, args){ // XXX - //console.log('>>>>', action, args, !!that[action]) + console.log('>>>>', action, args, !!that[action]) that[action](args) }) diff --git a/ui (gen4)/features/core.js b/ui (gen4)/features/core.js index ecb4bd1e..8c395b29 100755 --- a/ui (gen4)/features/core.js +++ b/ui (gen4)/features/core.js @@ -11,6 +11,7 @@ define(function(require){ var module = {} // XXX var DEBUG = typeof(DEBUG) != 'undefined' ? DEBUG : true +var util = require('lib/util') var object = require('lib/object') var actions = require('lib/actions') var features = require('lib/features') @@ -92,8 +93,8 @@ if(typeof(process) != 'undefined'){ //global.Date = window.Date // XXX this is less of a hack but it is still an implicit - patchDate(global.Date) - patchDate(window.Date) + util.patchDate(global.Date) + util.patchDate(window.Date) // node... } else { diff --git a/ui (gen4)/features/filesystem.js b/ui (gen4)/features/filesystem.js index ba7469a5..402cb850 100755 --- a/ui (gen4)/features/filesystem.js +++ b/ui (gen4)/features/filesystem.js @@ -579,6 +579,10 @@ var FileSystemLoaderUIActions = actions.Actions({ // show user the list... var so = that.Overlay(browse.makeList(null, loaders) + .on('update', function(){ + // select top element... + so.client.select(0) + }) // close self and parent... .open(function(){ so.close() @@ -589,8 +593,6 @@ var FileSystemLoaderUIActions = actions.Actions({ //o.parent.focus() o.select(item) }) - // select top element... - so.client.select(0) return so } diff --git a/ui (gen4)/ig.js b/ui (gen4)/ig.js index 8fd0c1c5..e275698f 100644 --- a/ui (gen4)/ig.js +++ b/ui (gen4)/ig.js @@ -8,7 +8,7 @@ //var DEBUG = DEBUG != null ? DEBUG : true -var requirejs = require('requirejs') +global.requirejs = global.requirejs || require('requirejs') requirejs.config({ nodeRequire: require, //baseUrl: __dirname, diff --git a/ui (gen4)/images.js b/ui (gen4)/images.js index 1f6c017d..76729c53 100755 --- a/ui (gen4)/images.js +++ b/ui (gen4)/images.js @@ -309,7 +309,7 @@ module.ImagesClassPrototype = { // XXX stub... var i = 0 //var base_pattern = base ? RegExp('^' + base) : null - var base_pattern = base ? RegExp('^' + quoteRegExp(base)) : null + var base_pattern = base ? RegExp('^' + RegExp.quoteRegExp(base)) : null data.forEach(function(path){ // XXX need to normalize path... var p = (base_pattern ? path.replace(base_pattern, './') : path) diff --git a/ui (gen4)/index.html b/ui (gen4)/index.html index 3ef69ea6..737539f9 100755 --- a/ui (gen4)/index.html +++ b/ui (gen4)/index.html @@ -246,8 +246,6 @@ if(window.require && window.nw){ - - @@ -255,14 +253,6 @@ if(window.require && window.nw){ - - - diff --git a/ui (gen4)/lib/jli.js b/ui (gen4)/lib/jli.js index dfb4e144..c11e07e3 100755 --- a/ui (gen4)/lib/jli.js +++ b/ui (gen4)/lib/jli.js @@ -1054,89 +1054,6 @@ var cancelAnimationFrame = (window.cancelAnimationFrame || clearTimeout) -// NOTE: repatching a date should not lead to any side effects as this -// does not add any state... -function patchDate(date){ - date = date || Date - - date.prototype.toShortDate = function(){ - var y = this.getFullYear() - var M = this.getMonth()+1 - M = M < 10 ? '0'+M : M - var D = this.getDate() - D = D < 10 ? '0'+D : D - var H = this.getHours() - H = H < 10 ? '0'+H : H - var m = this.getMinutes() - m = m < 10 ? '0'+m : m - var s = this.getSeconds() - s = s < 10 ? '0'+s : s - - return ''+y+'-'+M+'-'+D+' '+H+':'+m+':'+s - } - date.prototype.getTimeStamp = function(no_seconds){ - var y = this.getFullYear() - var M = this.getMonth()+1 - M = M < 10 ? '0'+M : M - var D = this.getDate() - D = D < 10 ? '0'+D : D - var H = this.getHours() - H = H < 10 ? '0'+H : H - var m = this.getMinutes() - m = m < 10 ? '0'+m : m - var s = this.getSeconds() - s = s < 10 ? '0'+s : s - - return ''+y+M+D+H+m+s - } - date.prototype.setTimeStamp = function(ts){ - ts = ts.replace(/[^0-9]*/g, '') - this.setFullYear(ts.slice(0, 4)) - this.setMonth(ts.slice(4, 6)*1-1) - this.setDate(ts.slice(6, 8)) - this.setHours(ts.slice(8, 10)) - this.setMinutes(ts.slice(10, 12)) - this.setSeconds(ts.slice(12, 14)) - return this - } - date.timeStamp = function(){ - return (new this()).getTimeStamp() - } - date.fromTimeStamp = function(ts){ - return (new this()).setTimeStamp(ts) - } - // convert string time period to milliseconds... - date.str2ms = function(str, dfl){ - dfl = dfl || 'ms' - - if(typeof(str) == typeof(123)){ - var val = str - str = dfl - - } else { - var val = parseFloat(str) - str = str.trim() - - // check if a unit is given... - str = str == val ? dfl : str - } - - var c = /(m(illi)?(-)?s(ec(ond(s)?)?)?)$/i.test(str) ? 1 - : /s(ec(ond(s)?)?)?$/i.test(str) ? 1000 - : /m(in(ute(s)?)?)?$/i.test(str) ? 1000*60 - : /h(our(s)?)?$/i.test(str) ? 1000*60*60 - : /d(ay(s)?)?$/i.test(str) ? 1000*60*60*24 - : null - - return c ? val * c : NaN - } - - return date -} -// patch the root date... -patchDate() - - function logCalls(func, logger){ var that = this var _func = function(){ diff --git a/ui (gen4)/lib/util.js b/ui (gen4)/lib/util.js index cd2b45e1..47951fc3 100755 --- a/ui (gen4)/lib/util.js +++ b/ui (gen4)/lib/util.js @@ -141,6 +141,7 @@ Object.defineProperty(Array.prototype, 'len', { + // convert JS arguments to Array... var args2array = module.args2array = @@ -151,6 +152,7 @@ function(args){ // Quote a string and convert to RegExp to match self literally. var quoteRegExp = +RegExp.quoteRegExp = module.quoteRegExp = function(str){ return str.replace(/([\.\\\/\(\)\[\]\$\*\+\-\{\}\@\^\&\?\<\>])/g, '\\$1') @@ -217,6 +219,92 @@ module.selectElemText = function(elem){ +/*********************************************************************/ +// NOTE: repatching a date should not lead to any side effects as this +// does not add any state... +var patchDate = +module.patchDate = function(date){ + date = date || Date + + date.prototype.toShortDate = function(){ + var y = this.getFullYear() + var M = this.getMonth()+1 + M = M < 10 ? '0'+M : M + var D = this.getDate() + D = D < 10 ? '0'+D : D + var H = this.getHours() + H = H < 10 ? '0'+H : H + var m = this.getMinutes() + m = m < 10 ? '0'+m : m + var s = this.getSeconds() + s = s < 10 ? '0'+s : s + + return ''+y+'-'+M+'-'+D+' '+H+':'+m+':'+s + } + date.prototype.getTimeStamp = function(no_seconds){ + var y = this.getFullYear() + var M = this.getMonth()+1 + M = M < 10 ? '0'+M : M + var D = this.getDate() + D = D < 10 ? '0'+D : D + var H = this.getHours() + H = H < 10 ? '0'+H : H + var m = this.getMinutes() + m = m < 10 ? '0'+m : m + var s = this.getSeconds() + s = s < 10 ? '0'+s : s + + return ''+y+M+D+H+m+s + } + date.prototype.setTimeStamp = function(ts){ + ts = ts.replace(/[^0-9]*/g, '') + this.setFullYear(ts.slice(0, 4)) + this.setMonth(ts.slice(4, 6)*1-1) + this.setDate(ts.slice(6, 8)) + this.setHours(ts.slice(8, 10)) + this.setMinutes(ts.slice(10, 12)) + this.setSeconds(ts.slice(12, 14)) + return this + } + date.timeStamp = function(){ + return (new this()).getTimeStamp() + } + date.fromTimeStamp = function(ts){ + return (new this()).setTimeStamp(ts) + } + // convert string time period to milliseconds... + date.str2ms = function(str, dfl){ + dfl = dfl || 'ms' + + if(typeof(str) == typeof(123)){ + var val = str + str = dfl + + } else { + var val = parseFloat(str) + str = str.trim() + + // check if a unit is given... + str = str == val ? dfl : str + } + + var c = /(m(illi)?(-)?s(ec(ond(s)?)?)?)$/i.test(str) ? 1 + : /s(ec(ond(s)?)?)?$/i.test(str) ? 1000 + : /m(in(ute(s)?)?)?$/i.test(str) ? 1000*60 + : /h(our(s)?)?$/i.test(str) ? 1000*60*60 + : /d(ay(s)?)?$/i.test(str) ? 1000*60*60*24 + : null + + return c ? val * c : NaN + } + + return date +} +// patch the root date... +patchDate() + + + /*********************************************************************/ // XXX experiment diff --git a/ui (gen4)/ui.js b/ui (gen4)/ui.js index c0e7e138..3710af25 100755 --- a/ui (gen4)/ui.js +++ b/ui (gen4)/ui.js @@ -20,8 +20,14 @@ if((typeof(process) != 'undefined' ? process : {}).__nwjs){ // // NOTE: no need to do this in browser... if(typeof(process) != 'undefined'){ + var requirejs = require('requirejs') + global.requirejs = requirejs + if(typeof(window) != 'undefined'){ + window.requirejs = requirejs + } + requirejs.config({ nodeRequire: require, //baseUrl: __dirname,