mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
Res: Add resources from xowa_app_windows_64_v4.5.26.1810
This commit is contained in:
155
res/bin/any/xowa/xtns/Graph/Xograph.js
Normal file
155
res/bin/any/xowa/xtns/Graph/Xograph.js
Normal file
@@ -0,0 +1,155 @@
|
||||
xo.xtns = xo.xtns || {};
|
||||
xo.xtns.graph = new function() {
|
||||
var xolog = new xo.logs.logger('xo.xtns.graph');
|
||||
var vega_cbks = {} // map of callbacks for tabular
|
||||
// var page_cache = {}; // TOMBSTONE: do not try to cache requests; multiple requests for same page may start at same time
|
||||
|
||||
this.load_xowa = function(url, opt, callback) {
|
||||
this.init_xowa_props(opt);
|
||||
|
||||
// cache callback
|
||||
var vega_cbk_guid = Uuid_.make();
|
||||
vega_cbks[vega_cbk_guid] = callback;
|
||||
|
||||
// call xo_server
|
||||
var page_guid = xowa.page.guid;
|
||||
xolog.info("get_page.bgn", "page", opt.xowa_page);
|
||||
xo.server.send_by_bridge('xowa.app.util.misc', 'page_get',
|
||||
{ 'page_get_cbk':'xo.xtns.graph.load_xowa_recv'
|
||||
, 'protocol':opt.xowa_protocol
|
||||
, 'wiki':opt.xowa_wiki
|
||||
, 'page':opt.xowa_page
|
||||
, 'page_guid':page_guid
|
||||
, 'vega_cbk_guid':vega_cbk_guid
|
||||
});
|
||||
}
|
||||
|
||||
this.load_xowa_recv = function(msg_str) {
|
||||
// parse msg
|
||||
var msg = JSON.parse(msg_str);
|
||||
xolog.info("get_page.end", "page", msg.page);
|
||||
|
||||
// get page_text
|
||||
var page_text = msg.page_text;
|
||||
var protocol = msg.protocol;
|
||||
switch (protocol) {
|
||||
case 'map:':
|
||||
case 'tabular:':
|
||||
page_text = "{\"jsondata\":" + page_text + "}"; // format as "{jsondata:page_text}"; note that this is done by JsonConfig api
|
||||
break;
|
||||
}
|
||||
|
||||
// get callback and process page_text
|
||||
var callback = vega_cbks[msg.vega_cbk_guid];
|
||||
callback(null, page_text);
|
||||
|
||||
return "pass:load_xowa_recv"; // return something for xoajax
|
||||
}
|
||||
|
||||
this.init_xowa_props = function(opt) {
|
||||
// get protocol
|
||||
var url = opt.url;
|
||||
var protocol_end = url.indexOf(':/');
|
||||
var protocol = 'unknown';
|
||||
if (protocol_end != -1) {
|
||||
protocol = url.substring(0, protocol_end + 1).toLowerCase(); // +1 to capture ":"; note that graph2.compiled.js compares to "wikiraw:", "map:", etc.
|
||||
}
|
||||
|
||||
// get page
|
||||
var page = '';
|
||||
var wiki = 'commons.wikimedia.org';
|
||||
switch (protocol) {
|
||||
case 'map:':
|
||||
page = replace_at_bgn_or_null(url, "map:///", "Data:");
|
||||
break;
|
||||
case 'tabular:':
|
||||
page = replace_at_bgn_or_null(url, "tabular:///", "Data:");
|
||||
break;
|
||||
case 'wikiraw:':
|
||||
page = replace_at_bgn_or_null(url, "wikiraw:///", "");
|
||||
wiki = xowa.page.wiki;
|
||||
break;
|
||||
}
|
||||
if (page == null) {
|
||||
xolog.warn("unknown page protocol", "protocol", protocol, "url", url);
|
||||
}
|
||||
|
||||
// set xowa_props
|
||||
opt.xowa_protocol = protocol;
|
||||
opt.xowa_wiki = wiki;
|
||||
opt.xowa_page = page;
|
||||
}
|
||||
|
||||
// XOWA: from /modules/graph1.js|graph2.js; modified b/c MW use mw.hook('wikipage.content'); DATE:2018-02-25
|
||||
this.drawVegaGraph = function(version, elem, data, callback)
|
||||
{
|
||||
if (version == 1)
|
||||
{
|
||||
vg.parse.spec
|
||||
( data
|
||||
, function (chart)
|
||||
{
|
||||
if (chart)
|
||||
{
|
||||
chart({el: elem}).update();
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
vg.parse.spec
|
||||
( data
|
||||
, function (error, chart)
|
||||
{
|
||||
if (!error)
|
||||
{
|
||||
chart({el:elem}).update();
|
||||
}
|
||||
if (callback)
|
||||
{
|
||||
callback(error);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
this.exec = function()
|
||||
{
|
||||
xolog.info("running graphs");
|
||||
|
||||
var $ = jQuery;
|
||||
var $content = $('#content');
|
||||
// from graph2.compiled.js; modified b/c MW saves data in mw.config.get('wgGraphSpecs')
|
||||
$content.find( '.mw-graph' ).each
|
||||
( function ()
|
||||
{
|
||||
var elem = this;
|
||||
var version = $(this).attr('xo-graph-version');
|
||||
var html = $(this).html();
|
||||
var spec = JSON.parse(Html_.decode(html));
|
||||
xolog.info("running graph", "version", version); //, "data", html);
|
||||
|
||||
// blank out html; run graph
|
||||
$(this).html('');
|
||||
xo.xtns.graph.drawVegaGraph
|
||||
( version
|
||||
, this
|
||||
, spec
|
||||
, function (error)
|
||||
{
|
||||
if (error)
|
||||
console.log(error);
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
var replace_at_bgn_or_null = function(str, find, repl) {
|
||||
if (str.startsWith(find))
|
||||
return repl + str.substring(find.length, str.length);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user