You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
doushio/client/extract.js

101 lines
2.4 KiB

// remember which posts are mine for two days
var Mine = new Kioku('mine', 2);
// no cookie though
Mine.bake_cookie = function () { return false; };
$.cookie('mine', null); // TEMP
(function () {
var mine = Mine.read_all();
function extract_post_model(el) {
/* incomplete */
var info = {num: parseInt(el.id, 10)};
var $article = $(el);
/* TODO: do these all in one pass */
var $header = $article.children('header');
var $b = $header.find('b');
if ($b.length)
info.name = $b.text();
var $code = $header.find('code');
if ($code.length)
info.trip = $code.text();
var $time = $header.find('time');
if ($time.length)
info.time = new Date($time.attr('datetime')).getTime();
var $fig = $article.children('figure');
if ($fig.length) {
var $cap = $fig.children('figcaption');
var image = {
MD5: $fig.data('md5'),
size: $fig.data('size'),
src: $cap.children('a').text(),
};
var $i = $cap.children('i');
var t = $i.length && $i[0].childNodes[0];
t = t && t.data;
var m = /(\d+)x(\d+)/.exec(t);
if (m)
image.dims = [parseInt(m[1], 10), parseInt(m[2], 10)];
if (t && t.indexOf(audioIndicator) == 1)
image.audio = true;
var $nm = $i.find('a');
image.imgnm = $nm.attr('title') || $nm.text() || '';
var $img = $fig.find('img');
image.thumb = $img.attr('src');
if (image.dims && $img.length) {
image.dims.push($img.width(), $img.height());
}
info.image = image;
}
info.body = ''; // TODO
if (mine[info.num])
info.mine = true;
return new Post(info);
}
function extract_thread_model(section) {
var replies = [];
for (var i = 0; i < section.childElementCount; i++) {
var el = section.children[i];
if (el.tagName != 'ARTICLE')
continue;
var post = extract_post_model(el);
new Article({model: post, el: el});
replies.push(post);
}
var thread = new Thread({
num: parseInt(section.id, 10),
replies: new Replies(replies),
});
if (mine[thread.num])
thread.set('mine', true);
return thread;
}
function scan_threads_for_extraction() {
var bod = document.body;
var threads = [];
for (var i = 0; i < bod.childElementCount; i++) {
var el = bod.children[i];
if (el.tagName != 'SECTION')
continue;
var thread = extract_thread_model(el);
new Section({model: thread, el: el});
threads.push(thread);
}
Threads.add(threads);
if (THREAD)
CurThread = Threads.get(THREAD);
}
scan_threads_for_extraction();
Mine.purge_expired_soon();
})();