os0x (owner)

Revisions

gist: 217196 Download_button fork
public
Description:
SITEINFO Server by Opera Unite
Public Clone URL: git://gist.github.com/217196.git
Embed All Files: show embed
server.js #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
* server.js : public domain
*/
 
var debug = true;
function log(text){
  if (debug) opera.postError(text);
}
 
function httpGet(url, onload, onerror) {
  var xhr = new XMLHttpRequest;
  xhr.open('GET', url, false);
  if (onload) xhr.onload = function(){onload(xhr.responseText)}
  if (onerror) xhr.onerror = function(){onerror()}
  xhr.send(null);
}
 
/* server */
// dispatcher
var webserver = opera.io.webserver;
window.onload = function () {
if (webserver){
webserver.addEventListener('_index', index, false);
webserver.addEventListener('get', get,false);
getSiteinfo();
}
}
 
var Siteinfo = [];
var Microformats = [];
var cache = {};
 
// request handler (view)
function get(e) {
var req = e.connection.request;
var url = req.getItem('url');
if (!url) return not_found(e);
url = url[0];
if (!url) return not_found(e);
var info = search_siteinfo(url);
log(info.map(function(e){return [e.url.toString(), e.nextLink, e.pageElement].join(' , ')}).join('\n'));
info = info.concat(Microformats);
 
var res = e.connection.response;
res.setResponseHeader('Content-type', 'application/javascript; charset=utf-8');
res.write('window.AutoPagerizeCallbackSiteinfo(' + JSON.stringify(info) + ');');
res.close();
}
 
function not_found(e) {
  var res = e.connection.response;
  res.setStatus('404', 'Not Found');
  res.close();
}
 
function index(e) {
  var res = e.connection.response;
  res.write('<!DOCTYPE html>'+
    '<title>AutoPagerize SITEINFO Server</title>'+
    '<p>Welcome to AutoPagerize SITEINFO Server</p>');
  res.close();
}
 
// controller
function search_siteinfo(url) {
  if (cache[url]) return cache[url];
  var results = [];
  var n = Siteinfo.length;
  while(--n) {
    var re = Siteinfo[n][0];
    if (re.test(url)) results.push(Siteinfo[n][1]);
  }
  cache[url] = results;
  return results;
}
 
function getSiteinfo() {
httpGet('http://ss-o.net/json/wedataAutoPagerizeSITEINFO.json',function(t){
if(t.length < 1000) return;
var _siteinfo = JSON.parse(t);
var n = _siteinfo.length;
while(--n) {
var info = _siteinfo[n];
var re = new RegExp(info.url);
if (re.test('http://a')) {
// isolate siteinfo that matches any url
Microformats.push(info);
} else {
Siteinfo.push([re, info]);
}
}
});
}