>>2
Because it's a pain in the butt to browse a board that uses sage "correctly" using a web browser.
I was considering modifying chaika[1] a couple months ago, but that's not going to happen, Shitchan lacks too many standard features, and it doesn't even put old threads in an archive so shit would probably be really slow and bandwidth-raping.
Because it's a pain in the butt to browse a board that uses sage "correctly" using a web browser.
per-thread atom feeds would probably fix that, and trivial to implement... http://hotaru.thinkindifferent.net/tinybb3/ has them, along with subject.txt, json (http://hotaru.thinkindifferent.net/tinybb3/json/1278697659), and gopher (gopher://thinkindifferent.net/1/hotaru/tinybb3), and the whole thing is only about 40KB. maybe you could bug mrvacbob about adding them.
>>16
That doesn't involve work, because those algorithms are well-known and reimplementing them just involves regurgitating them from memory into whatever language.
What >>14 has to do, though, involves actually thinking. There's an incredibly high chance he wouldn't be doing this if it were already written.
Name:
Anonymous2010-07-13 10:01
Here's what I have so far, I'll upload it to Userscripts.org after some more cleaning up.
>>24
no, but they're a common feature of other text board scripts.
they're trivial to add, and useful on boards that have a few good threads in an ocean of shit posted by idiots from the imageboards.
Why hardcode the domain, and why use GM_xmlhttpRequest when you're only doing intra-domain requests?
And instead of serialising and unserialising the board status into a string all the time, shouldn't you be using a database?
Hahah, just kidding. IndexedDB is shit, top-posted olddb.request.onsuccess = function() { olddb.request.onsuccess = function() { olddb.request.onsuccess = function() {, and No exceptions. (No, really.)
Name:
Anonymous2010-07-13 17:15
Why hardcode the domain,
Thanks, didn't think of changing that.
and why use GM_xmlhttpRequest when you're only doing intra-domain requests?
What else can be used?
And instead of serialising and unserialising the board status into a string all the time, shouldn't you be using a database?
Hahah, just kidding. IndexedDB is shit, top-posted olddb.request.onsuccess = function() { olddb.request.onsuccess = function() { olddb.request.onsuccess = function() {, and No exceptions. (No, really.)
I'll take a closer look at it, but after finding out that the Web Storage thing sends a browser-global event when the data is changed I'm not sure I want to use anything else (I'd have to convert this to an extension).
>>29
The Mozilla devs and MS, the web brotherhood of bloat, have joined together to ensure there won't be SQL on the web, and that things can't make sense ever.
Apparently joins are for pussies, and efficient, robust, well-tested, full-featured databases are best written as Javascript libraries on top of a clunky keystore interface, running in a browser.
>>33
What!, none of them are supported in the latest stable Firefox. I'll just have to live with localStorage.
Maybe I can use keys like "prog-1278877486", but it would probably require storing a per-board index as well. Oh and I should also store the domain name in the key to theoretically support other web sights.
Storing the keys like that worked, overall performance seems better, but marking all the threads as read is close to impossible due to the setItem implementation (filesystem is synced on every set).
I will attempt the extension route. I should get access to better performing database APIs (@mozilla.org/storage/service;1 perhaps), full synchronization across tabs and (hopefully) windows, and perhaps some facilities for running processing in the background.
Started actual work on extension today. SQLite database is working and XUL for thread list as well. Many things left to do. Will post an update in a week, but I won't have gotten much done by then.
The tables currently look like this, but the information about read posts needs to be added somewhere.
CREATE TABLE `boards` (
`context` TEXT NOT NULL,
PRIMARY KEY (`context`));
CREATE TABLE `settings` (
`context` TEXT NOT NULL,
`key` TEXT NOT NULL,
`value` TEXT NOT NULL,
PRIMARY KEY (`context`, `key`),
FOREIGN KEY (`context`) REFERENCES `boards` (`context`));
CREATE TABLE `threads` (
`context` TEXT NOT NULL,
`tid` INTEGER NOT NULL,
`subj` TEXT,
`icon` TEXT,
`count` INTEGER NOT NULL,
`lastpost` INTEGER NOT NULL,
`closed` INTEGER NOT NULL DEFAULT 0,
PRIMARY KEY (`context`, `tid`),
FOREIGN KEY (`context`) REFERENCES `boards` (`context`))
CREATE TABLE `posts` (
`context` TEXT NOT NULL,
`tid` INTEGER NOT NULL,
`num` INTEGER NOT NULL,
`time` INTEGER NOT NULL,
`iphash` TEXT,
`name` TEXT,
`tripcode` TEXT,
`triphash` TEXT,
`email` TEXT,
`text` TEXT,
PRIMARY KEY (`context`, `tid`, `num`),
FOREIGN KEY (`context`) REFERENCES `boards` (`context`),
FOREIGN KEY (`tid`) REFERENCES `threads` (`tid`))