Fallos solucionados en sistema de dependencias de Vn

This commit is contained in:
Juan Ferrer Toribio 2015-09-25 15:35:01 +02:00
parent c26c178e32
commit f3cc7db96d
7 changed files with 105 additions and 113 deletions

View File

@ -8,7 +8,6 @@ Vn.define (function () {
Htk.ImageEditor = new Class Htk.ImageEditor = new Class
({ ({
Extends: Htk.Widget Extends: Htk.Widget
,Xml: 'js/htk/image-editor.xml'
,initialize: function (props) ,initialize: function (props)
{ {
@ -56,6 +55,9 @@ Htk.ImageEditor = new Class
this.$('name').value = image; this.$('name').value = image;
this.$('schema').value = directory; this.$('schema').value = directory;
} }
}).extend
({
Xml: 'js/htk/image-editor.xml'
}); });
}); });

View File

@ -20,8 +20,7 @@ Vn.Locale =
{ {
this.init (); this.init ();
var file = 'locale/'+ this.language +'/'+ path +'.json' var file = 'locale/'+ this.language +'/'+ path +'.json'+ Vn.getVersion ();
+'?'+ Vn.Cookie.get ('hedera_version');
var request = new XMLHttpRequest (); var request = new XMLHttpRequest ();
request.open ('get', file, true); request.open ('get', file, true);

View File

@ -3,6 +3,7 @@ Vn.include ('js/misc/main');
Vn.includeLib ('vn', Vn.includeLib ('vn',
[ [
'browser' 'browser'
,'cookie'
,'date' ,'date'
,'value' ,'value'
,'error' ,'error'

View File

@ -43,12 +43,3 @@ Class.Mutators.Child = function (propName)
this.extend ({Child: propName}); this.extend ({Child: propName});
}; };
Class.Mutators.Xml = function (path)
{
if (path)
{
//Vn.loadXml (path);
this.extend ({Xml: path});
}
}

View File

@ -6,13 +6,24 @@ var Vn =
Config: {} Config: {}
,includes: {} ,includes: {}
,cssIncludes: {} ,cssIncludes: {}
,xmlIncludes: {} ,currentDeps: []
,tmpIncludes: [] ,currentCallback: null
,tmpDefine: null
,customTags: {} ,customTags: {}
,head: document.getElementsByTagName ('head')[0] ,head: document.getElementsByTagName ('head')[0]
,isMobileCached: null ,isMobileCached: null
,getVersion: function ()
{
if (this._version === undefined)
{
var re = /[; ]hedera_version=([^\\s;]*)/;
var sMatch = (' '+ document.cookie).match (re);
this._version = (sMatch) ? '?'+ unescape (sMatch[1]) : '';
}
return this._version;
}
/** /**
* Includes a new CSS stylesheet in the current document, if the stylesheet * Includes a new CSS stylesheet in the current document, if the stylesheet
* is already included, does nothing. * is already included, does nothing.
@ -28,7 +39,7 @@ var Vn =
var link = document.createElement ('link'); var link = document.createElement ('link');
link.rel = 'stylesheet'; link.rel = 'stylesheet';
link.type = 'text/css'; link.type = 'text/css';
link.href = fileName +'?'+ Vn.Cookie.get ('hedera_version'); link.href = fileName + this.getVersion ();
this.head.appendChild (link); this.head.appendChild (link);
this.cssIncludes[fileName] = this.cssIncludes[fileName] =
@ -60,6 +71,57 @@ var Vn =
} }
} }
,_createIncludeData: function (path)
{
var includeData = {
depCount: 0
,success: false
,loaded: false
,callbacks: []
,dependants: []
};
this.includes[path] = includeData;
return includeData;
}
,_handleCallback: function (includeData, callback)
{
if (!callback)
return;
if (includeData.success)
callback (includeData.loaded);
else
includeData.callbacks.push (callback);
}
,_resolveDeps: function (includeData)
{
includeData.success = true;
var callbacks = includeData.callbacks;
for (var i = 0; i < callbacks.length; i++)
callbacks[i] (includeData.loaded);
var dependants = includeData.dependants;
for (var i = 0; i < dependants.length; i++)
{
var dependant = dependants[i];
dependant.depCount--;
if (dependant.depCount == 0)
this._resolveDeps (dependant);
}
delete includeData.callbacks;
delete includeData.dependants;
delete includeData.depCount;
delete includeData.loaded;
}
/** /**
* Initializes the library and calls the passed function when all * Initializes the library and calls the passed function when all
* includes and its dependencies are resolved. * includes and its dependencies are resolved.
@ -83,35 +145,24 @@ var Vn =
basePath += location.pathname; basePath += location.pathname;
var scripts = this.head.getElementsByTagName ('script'); var scripts = this.head.getElementsByTagName ('script');
var includes = this.tmpIncludes; var includes = this.currentDeps;
for (var i = 0; i < scripts.length; i++) for (var i = 0; i < scripts.length; i++)
{ {
var relPath = scripts[i].src.substr (basePath.length); var path = scripts[i].src.substr (basePath.length);
relPath = relPath.substr (0, relPath.indexOf ('.js')); path = path.substr (0, path.indexOf ('.js')) +'.js';
var includeData = this.includes[relPath]; var includeData = this.includes[path];
if (includeData === undefined) if (includeData === undefined)
{ {
includeData = { this.currentDeps = includes;
depCount: 0 var includeData = this._createIncludeData (path);
,callbacks: []
,loaded: true
,dependants: []
,success: true
};
this.includes[relPath] = includeData;
}
if (i == scripts.length - 1)
includeData.callbacks.push (this._onMainDepsLoad.bind (this));
this.tmpIncludes = includes;
this._onScriptLoad (includeData, true); this._onScriptLoad (includeData, true);
} }
}
includeData.callbacks.push (this._onMainDepsLoad.bind (this));
window.addEventListener ('load', this._onWindowLoad.bind (this)); window.addEventListener ('load', this._onWindowLoad.bind (this));
} }
@ -133,17 +184,6 @@ var Vn =
this.mainCallback (); this.mainCallback ();
} }
,_handleCallback: function (includeData, callback)
{
if (!callback)
return;
if (includeData.loaded)
callback (includeData.success);
else
includeData.callbacks.push (callback);
}
/** /**
* Includes a set of javascript files and sets it as dependecies of the * Includes a set of javascript files and sets it as dependecies of the
* current script. * current script.
@ -156,8 +196,8 @@ var Vn =
{ {
var includeData = this._realIncludeJs (arguments[i] +'.js'); var includeData = this._realIncludeJs (arguments[i] +'.js');
if (!includeData.loaded) if (!includeData.success)
this.tmpIncludes.push (includeData); this.currentDeps.push (includeData);
} }
} }
@ -173,8 +213,8 @@ var Vn =
{ {
var includeData = this._realLoadXml (arguments[i]); var includeData = this._realLoadXml (arguments[i]);
if (!includeData.loaded) if (!includeData.success)
this.tmpIncludes.push (includeData); this.currentDeps.push (includeData);
} }
} }
@ -186,7 +226,7 @@ var Vn =
**/ **/
,define: function (callback) ,define: function (callback)
{ {
this.tmpDefine = callback; this.currentCallback = callback;
} }
/** /**
@ -223,24 +263,18 @@ var Vn =
if (includeData === undefined) if (includeData === undefined)
{ {
includeData = this._createIncludeData (fileName);
var src = fileName; var src = fileName;
if (!skipVersion) if (!skipVersion)
src = src +'?'+ Vn.Cookie.get ('hedera_version'); src = src + this.getVersion ();
var script = document.createElement ('script'); var script = document.createElement ('script');
script.type = 'text/javascript'; script.type = 'text/javascript';
script.async = false; script.async = false;
script.src = src; script.src = src;
includeData = {
depCount: 0
,callbacks: []
,loaded: false
,dependants: []
,success: false
};
script.onload = script.onload =
this._onScriptLoad.bind (this, includeData, true); this._onScriptLoad.bind (this, includeData, true);
script.onerror = script.onerror =
@ -248,7 +282,6 @@ var Vn =
script.onreadystatechange = script.onreadystatechange =
this._onScriptStateChange.bind (this, includeData, script); this._onScriptStateChange.bind (this, includeData, script);
this.includes[fileName] = includeData;
this.head.appendChild (script); this.head.appendChild (script);
} }
@ -261,16 +294,16 @@ var Vn =
this._onScriptLoad (includeData, true); this._onScriptLoad (includeData, true);
} }
,_onScriptLoad: function (includeData, success) ,_onScriptLoad: function (includeData, loaded)
{ {
includeData.success = success; includeData.loaded = loaded;
if (success) if (loaded)
{ {
if (this.tmpDefine) if (this.currentCallback)
includeData.callbacks.push (this.tmpDefine); includeData.callbacks.push (this.currentCallback);
var includes = this.tmpIncludes; var includes = this.currentDeps;
if (includes && includes.length > 0) if (includes && includes.length > 0)
{ {
@ -280,36 +313,13 @@ var Vn =
includes[i].dependants.push (includeData); includes[i].dependants.push (includeData);
} }
else else
this.resolveDeps (includeData); this._resolveDeps (includeData);
} }
else else
this.resolveDeps (includeData); this._resolveDeps (includeData);
this.tmpIncludes = []; this.currentDeps = [];
this.tmpDefine = null; this.currentCallback = null;
}
,resolveDeps: function (includeData)
{
includeData.loaded = true;
var callbacks = includeData.callbacks;
for (var i = 0; i < callbacks.length; i++)
callbacks[i] (includeData.success);
var dependants = includeData.dependants;
for (var i = 0; i < dependants.length; i++)
{
var dependant = dependants[i];
dependant.depCount--;
if (dependant.depCount == 0)
this.resolveDeps (dependant);
}
delete includeData.callbacks;
} }
/** /**
@ -330,23 +340,13 @@ var Vn =
if (includeData === undefined) if (includeData === undefined)
{ {
includeData = { includeData = this._createIncludeData (path);
callbacks: []
,loaded: false
,dependants: []
,depCount: 0
,success: false
,xml: null
};
var request = new XMLHttpRequest (); var request = new XMLHttpRequest ();
request.onreadystatechange = request.onreadystatechange =
this._onXmlReady.bind (this, includeData, request); this._onXmlReady.bind (this, includeData, request);
request.open ('get', request.open ('get', path + this.getVersion (), true);
path +'?'+ Vn.Cookie.get ('hedera_version'), true);
request.send (); request.send ();
this.includes[path] = includeData;
} }
return includeData; return includeData;
@ -357,12 +357,12 @@ var Vn =
if (request.readyState != 4) if (request.readyState != 4)
return; return;
includeData.success = request.status == 200; includeData.loaded = request.status == 200;
if (includeData.success) if (includeData.loaded)
includeData.xml = request.responseXML; includeData.xml = request.responseXML;
this.resolveDeps (includeData); this._resolveDeps (includeData);
} }
/** /**

View File

@ -5,9 +5,6 @@ use Vn\Hedera\Js;
require_once ('global/metatags.php'); require_once ('global/metatags.php');
Js::includeFile ('js/vn/vn.js'); Js::includeFile ('js/vn/vn.js');
Js::includeFile ('js/vn/cookie.js');
Js::includeFile ('pages/main/main.js'); Js::includeFile ('pages/main/main.js');
Js::includeCss ('pages/main/style.css');
?> ?>

View File

@ -1,4 +1,6 @@
Vn.includeCss ('pages/main/style.css');
Vn.include ('js/misc/main'); Vn.include ('js/misc/main');
Vn.include ('js/vn/locale'); Vn.include ('js/vn/locale');
Vn.include ('js/vn/main'); Vn.include ('js/vn/main');