Files
recycled-ni-neutrino/data/y-web/Y_yWeb.js
vanhofen 6f50f76a4d yWeb: rename Y_yweb.js => Y_yWeb.js
Origin commit data
------------------
Branch: ni/coolstream
Commit: 4eace25154
Author: vanhofen <vanhofen@gmx.de>
Date: 2023-02-20 (Mon, 20 Feb 2023)

Origin message was:
------------------
- yWeb: rename Y_yweb.js => Y_yWeb.js

------------------
No further description and justification available within origin commit message!

------------------
This commit was generated by Migit
2023-02-20 20:47:53 +01:00

210 lines
6.3 KiB
JavaScript

/* yWeb by yjogol
internal organisation of yWeb
*/
/* define namespace */
if(typeof(Y) == "undefined")
Y = {};
/* Class Y.yWeb */
Y.yWeb = new Class.create();
Object.extend(Y.yWeb.prototype, {
ver_file_prop : new Hash(),
yweb_version: $H({major:'0', minor:'0', patch:'0', pre:'0'}),
yweblib_version: $H({major:'1', minor:'0', patch:'0', pre:'0'}),
prototype_version: $H({major:'0', minor:'0', patch:'0', pre:'0'}),
baselib_version: $H({major:'1', minor:'0', patch:'0', pre:'0'}),
initialize: function(){
this.ver_file_get();
split_version(this.ver_file_prop.get('version'),this.yweb_version);
split_version(Prototype.Version,this.prototype_version);
if(typeof(baselib_version)!="undefined")
split_version(baselib_version,this.baselib_version);
},
ver_file_get: function(){
var v_file=loadSyncURL("/Y_Version.txt");
var lines=v_file.split("\n");
lines.each(function(e){
var x=e.split("=");
if(x.length==2 && (x[0]!=""))
this.ver_file_prop.set(x[0],x[1]);
},this);
},
_require: function(min_version_str,check_version,is_msg,msg_text){
var v=$H();
split_version(min_version_str,v);
if (!version_le(v, check_version)) {
if (typeof(is_msg) != "undefined") alert(msg_text + min_version_str + " required");
return false;
}
else
return true;
},
require_prototype:function(min_version_str,is_msg){
return this._require(min_version_str,this.prototype_version,is_msg,"prototype-library version: ");
},
require_baselib:function(min_version_str,is_msg){
return this._require(min_version_str,this.baselib_version,is_msg,"baselib-library version: ");
},
require_yweblib:function(min_version_str,is_msg){
return this._require(min_version_str,this.yweblib_version,is_msg,"yweb-library version: ");
},
require:function(min_version_str,is_msg){
return this._require(min_version_str,this.yweb_version,is_msg,"yweb version: ");
}
});
/* main instance */
if (window == top.top_main.prim_menu) {
var yweb = new Y.yWeb();
yweb.require_prototype("1.7.3");
}
else
if(top.top_main.prim_menu && top.top_main.prim_menu.yweb)
var yweb = top.top_main.prim_menu.yweb;
else { // should not happen!
var yweb = new Y.yWeb();
yweb.require_prototype("1.7.3");
}
/* n/m= type, menuitem, desc, file, tag, version, url, yweb_version, info_url
* x= type, menuitem, ymenu, file, tag, version, url, yweb_version, info_url
* u=type,site,description,url
*/
/* Class Y.extension */
Y.extension = new Class.create();
Object.extend(Y.extension.prototype, {
ext_version: 1, /* ver of Y.extension*/
conf_version: 2,/* ver of local conf file */
upd_version: 2, /* ver of upd file */
file: "",
installed_extensions: [],
update_sites: [],
upd_extensions: [],
on_get_updates: null,
get_file: function(){
this.file = loadSyncURL("/control/exec?Y_Tools&get_extension_list&" + Math.random());
},
read_items: function(){
this.installed_extensions=[];
this.update_sites=[];
this.conf_version=2;
this.get_file();
if(this.file!=""){
var list = this.file.split("\n");
list.each(function(line){
var p=str_to_hash(line);
switch(p.get('type')){
case "m": case "n": case "p": case "x": case "s": case "o":
this.installed_extensions.push(p);
break;
case "u":
this.update_sites.push(p);
break;
case "v":
this.conf_version=p.get('version');
break;
}
},this);
}
},
get_updates: function(){
this.upd_extensions=[];
this.upd_version=2;
this.update_sites.each(function(e){
var update_file = loadSyncURL("/control/exec?Y_Tools&url_get&"+e.get('url')+"&ext_upt.txt&" + Math.random());
if(this.on_get_updates) this.on_get_updates(e.get('url'), (update_file.search(/wget: cannot/)!=-1) );
var list = update_file.split("\n");
list.each(function(line){
var p=str_to_hash(line);
switch(p.get('type')){
case "m": case "n": case "p": case "x": case "s": case "o":
p.set('site', e.get('site'));
this.upd_extensions.push(p);
break;
case "v":
this.upd_version=p.get('version');
break;
}
},this);
},this);
this.upd_extensions = this.upd_extensions.sortBy(function(e){return e.get('tag');});
},
build_extension_file: function(){
var ext="version:"+this.conf_version+"\n";
for (i = 0; i < this.installed_extensions.length; i++)
ext+=hash_to_str(this.installed_extensions[i])+"\n";
for(i=0;i<this.update_sites.length;i++)
ext+=hash_to_str(this.update_sites[i])+"\n";
return ext;
},
add_extension_to_installed: function(props) {
var allready_installed = false;
for(i=0;i<this.installed_extensions.length;i++){
if(this.installed_extensions[i].get('tag')==props.get('tag')){
allready_installed = true;
this.installed_extensions[i]=props;
}
}
if(!allready_installed)
this.installed_extensions.push(props);
},
install: function(item){
var res = loadSyncURL("/control/exec?Y_Tools&ext_installer&"+item.get('url'));
if(res.search(/error/)==-1)
this.add_extension_to_installed(item);
return res;
},
get_item_by_tag:function(tag){
return this.installed_extensions.find(function(e){
return e.get('tag')==tag;
},this);
},
uninstall: function(tag){
var res = loadSyncURL("/control/exec?Y_Tools&ext_uninstaller&"+tag);
if(res.search(/error/)==-1)
this.installed_extensions = this.installed_extensions.without(this.get_item_by_tag(tag));
return res;
},
select_menu: function(menu_name){
return this.installed_extensions.findAll(function(e){
return e.get('type')=="x" && e.get('ymenu')==menu_name;
},this);
},
select_type: function(_type){
return this.installed_extensions.findAll(function(e){
return e.get('type')==_type;
},this);
}
});
function add_yExtensions(_ymenu, _id) {
var menu=ext.select_menu(_ymenu);
menu.each(function(e){
var el=new Element('li').update(
new Element('a', {
'class': (_ymenu == 'main') ? 'y_menu_prim_ext' : 'y_menu_sec_ext',
'target': (_ymenu == 'main') ? 'base' : 'work',
'title': e.get('desc'),
'href': e.get('file')
}).update(e.get('menuitem'))
);
$(_id).insert({'bottom':el});
});
}
/* singleton pattern*/
if (window == top.top_main.prim_menu) {
var ext = new Y.extension();
ext.read_items();
}
else
if(top.top_main.prim_menu && top.top_main.prim_menu.ext)
var ext = top.top_main.prim_menu.ext;
else { // should not happen!
var ext = new Y.extension();
ext.read_items();
}