spiralofhope logo
spiralofhope logo

S
piral of Hope
Better software is possible.
Styles
Table of Contents

Compiled Website > To Do


Also see compiled website bugs.






old stuff below

To Do

Notes:

To Do: High Priority

  1. allow git:// urls
  2. De-personalize everything to prepare for packaging.
    1. Examine the header-and-footer code: Have it read in a text file. Make that text file in a separate config directory. If that text file is not present, then hard code a default to fall back on.
  3. Examine the way I launch it and prepare something de-personalized.
  4. Prepare a proper changelog and versioning.
  5. Put the version number in the compiled output (html).

  1. Website standards compliance

  1. Change from Google to scroogle or some other search engine.
    1. I wonder if I should have a selector to be able to use multiple search engines in a way that's similar to my show/hide functionality. That'd be cool.
  2. Consider CSS text resizing in the same way that it's done with styles. Remember it with a cookie.
    1. http://www.javascriptkit.com/script/script2/doctextresizer.shtml
    2. If done, mention it in javascript.
  3. Add a mouseover section link for #s0.
  4. A pre block should definitely deny syntax within. The backtick is especially annoying, but html is getting translated too, which is probably bad. Maybe I should have <code> do that, and then the user can code+pre or some such? I dunno, figure it out.
  5. Allow mixed spaces and hyphons in filenames.
    1. This will require a complete rethink of the way I do things. Argh.
    2. Decide on how I should locally store filenames. Maybe allow all characters in the filename and then roughly translate things into the .html filename. Somehow.
  6. Named local links. [[actual name|displayed name]].
  7. Redirect pages?
  8. [[new file]] needs to be modified to translate spaces and dashes and the like.
  9. To implement section-editing I would have to store pages as both a whole and as individual sections.
    1. When detecting a section change, re-merge it and process it.
    2. When detecting a whole-page change break it back up into sections.
    3. Then I would generate edit links within each section (and to the left, dammit) to the section .asc files.
  10. A 'listings' feature like ;list: item
    1. Maybe just style it only with CSS and not with regular HTML markup.
  11. If I purge the compiled directory then I get several sets of errors while things are rebuilt. Everything goes well if I just re-run the scripting.. but I should troubleshoot all of that so that it's graceful. I think this is because of directory deletion.
    1. note to self: don't purge the css/ and images/ directories.
  12. If a .asc file is empty, delete it and the associated .html file, and recompile the other files to remove the link.
  13. Implement in-file comments which are not compiled and output? Could be useful, but functionality would have to be really rock-solid for security concerns. Maybe {{private text}}
  14. Lists of mixed-types. So an ordered list with some unordered lists within it.
  15. Implement a tag which will pass multiple lines through as-is, and convert HTML-brackets like < becomes &lt;
    1. Maybe make it a list start and list end type thing? like <nowiki> that can work across multiple lines.
    2. I think I'd have to modify every feature to have it notice and skip lines with that marker.
  16. Have the backtick ` disallow all nested tags, and convert HTML-brackets to text-brackets like < becomes &lt;
  17. Research: If I could make firefox open geany to a specific line, then I could very easily implement section-editing! I don't think Geany can do that.. ask for it. Can firefox summon up a program and pass it parameters? e.g. file:///foo/bar/bla.txt#somewhere => geany /foo/bar/bla.txt -line 5 ??
  18. Make automatic linking be once-per-section, separated by <h1> etc.
    1. I can tell when I'm in a section based on whatever current variable being populated.. I think.
    2. For each section, maintain an array. Blank the array when moving to a new section.
    3. Then for every link found only linkify it if it's not in the array. If linking it, also add it into the array.
    4. To achieve this, I'd have to redo or avoid using the old markup() routine. Probably abandon it and look at it later.

Image markup language

An image markup language.

Keep the usual linking, don't treat images differently:

  • http://example.com/example.png
  • [2]
  • name
  1. hotlink: *http://example.com/example.png
  2. Browser-resized to some standard value and hotlinked: ?
    1. I hate hotlinking, but it may be important to fit things inside of my templating if there is any sort of style concern.
  3. Browser-resized to a specific value and hotlinked: ?
  4. Downloaded, cached and linked: ?
    1. And also display a link to the original.
  5. Downloaded, cached, resized to a standard value, and displayed: ?
  6. Downloaded, cached, resized to a specific value, and displayed: ?

404 Search

Implement a firefox search of the wiki. Have it do something like

http://spiralofhope.com/%s.html
Then make my 404 page redirect to a google page like:

http://www.google.com/search?q=site%3Aspiralofhope.com+%s

To Do: Medium Priority

  1. Split things off to make every change-detection run in its own subroutine.
    1. This is so that I can edit page1 and then page 2, but now two processes will run. Perhaps page1 is complex but page2 is simple and page2 can now finish quickly without needing to wait.
  2. Styles are all bungled up. Totally separate the basics, the colours and the layout into three separate concepts. Then I can more easily mix-and-match colours into different layouts.
    1. Playing with styles reveals a serious issue with the way I do paragraphs. Right now I have divs that do (header body)(header body). Instead I should have ((header)(body))
    2. I also see an odd

  3. Learn what it would take to make a website friendly to the disabled
    1. Colourblind
    2. Blind / screen readers
    3. Link navigation - is my table of contents in the way for tabbing to links?
  4. Automate the detection of new articles (just by file date) and build an RSS feed.
  5. view_html() should only fire if it's been x amount of time since its last update. This way I'm not constantly firing it when writing an article and constantly saving it.
  6. Create an 'about' page which talks about website technology
    1. Browser, base standards and quirks (mozilla rounded borders)
    2. CSS
    3. JavaScript
    4. Cookies (for remembering style changes, if any)
  7. When JavaScript is turned off:
    1. Hide the text+link for "Styles" and "Table of Contents" at the top-right
    2. Display the table of contents below the footer.
    3. Create a page which explains what JavaScript is for. Link to it.
    4. Create another page which explains how to enable JavaScript.
    5. Also promote Firefox/NoScript.
  8. Define an external linking language `[[w:wikipedia link]]`
  9. Printable version and text-only version
    1. Done through the site and not by browser style CSS selection?
  10. Some sort of easy article renaming? Hell, I could even code something within the markup language to say [[previous||new]] and have the document previous.asc|.html be renamed to new.asc|.html
  11. A draft/working copy system - maybe something like _#.filename.asc -- This topic needs a lot of thought.
    1. User-modified articles which are accessed/stored in a way completely separate from the actual site. So for each document there's a secured official copy and a less-secured working copy.
  12. A commenting/forum system
    1. Just have links to something like http://forum.spiralofhope.com/article and use some other engine.
    2. What if an article is renamed? A spider would have to visit the forum to rename the topic, and to update the article link in the original post.
    3. Maybe I can even include content from the forum in some kind of magical embedding widget. That would be sweet.
  13. Release the code to the public
    1. A core component is really fugly and needs a major rewrite before the code can be released. Expect this to be done in May 2010.
    2. note to self: Versioning is major.minor.working. For the working number: Even numbers are beta and run fine for me so far; odd numbers are alpha and are either experimental and untested, are known to contain critical bugs or are otherwise untrusted. I don't usually put out anything experimental.
  14. Decide on licensing.
    1. Perhaps I should also have a special tag I place in pages to designate them as being held under licence 'x' or 'y' etc. This could be handled by templates, which is an existing todo item.
    2. http://creativecommons.org/
    3. http://www.opencontent.org/openpub/
  15. Fixme: I have no way of removing local links from within tags.
    1. So <nowiki>index</index> is fine
    2. but <nowiki>text index text</index> will always become linked!
    3. text index text
    4. Ugh, to do this I'd have to rewrite markup(), marked_yes() and marked_no()
  16. local linking: Allow full valid *nix filenames. But for the compiled .html filename, convert inadvisable characters to dashes or some other thing like %20.
    1. What are the inadvisable characters? Research.
  17. "Last edited" timestamp in the footer?
    1. With something like that, it'd be possible to generate a sitemap which shows each item and also its timestamp. That could be made sortable, or could be pre-sorted however I like. Hmm, could be useful.
  18. Create a for-print version that
    1. ... changes numbered links into anchor links to a nice list of endnotes.
    2. ... prepends the correct http:// etc to URLs.
    3. I could even tinyurl all those links automatically.
  19. Templating {{replacement file}} {{subst:replacement file}}
  20. Detect the deletion of a source file and delete the associated compiled file.
    1. And watch directories too.
  21. An XML sitemap generator (the SEO standard XML file thingy)
    1. I downloaded sitemap_gen.py and it works well.
      1. It also reveals a bunch of broken links which were relative URLs from the blog. Those need to be fixed.
    2. Implement a spider trap?: [3]
    3. Submit to more search engines, see robots.txt for some TODO items.

Syntax Highlighting

  • test cases for common usage
  • test cases for my extensions
  • desperately need to stop lists from intruding on pre blocks

Table Markup

A simple markup language for tables. Anything more complex should use HTML.

|cell 1|cell 2
=>
<table>
<tr><td>cell 1</td><td>cell 2</td></tr>
</table>
=>
cell 1cell 2

To Do: Low Priority

  1. A bookmark link would be cool. Unfortunately it's impossible at the moment because for a very very long time, Firefox would allow the bookmark but clicking it would load it in the sidebar and not the main browser window. Lame.
    1. I need to find and track the associated bug. There better be one.
  2. The sitemap should display sub-directories and their files.
  3. [4] Comment reply via email - I could do an interpretation of that..
    1. [5]
  4. [6] Post by email - I could do an interpretation of that..
    1. [7]
  5. I'd love to use Ruby/HTML Tidy
    1. I can't figure out how to use it, and it looks dated and unloved.
    2. [8] [9] [10]
    3. gem install tidy

Stylesheet based on browser dimensions

It's possible to auto-detect the browser's initial dimensions, and set the default CSS stylesheet. Something like:

<script type="text/javascript">
  width = getScreenWidth();
  height = getScreenHeight();
  SetStyle(width, height);
</script>
I could also make a routine to re-check the browser dimensions and re-change the CSS. But that may be very annoying, or even reduce the user's browsing speed. Maybe just make a "force re-check" link which will re-run the javascript detect routine.

Something like this could even load in different sized images/thumbnails.. this might be very cool.

Link Checking/Caching

The basic philosophy is really simple. Way too many sites go down, and this is only going to get worse over time. So to solve that, keep a local copy of any links made by any document.

archive.org may not be around forever, it may stop caching content, and it's already unreliable for quite a number of caches such as when a webmaster chooses to deny caching.


A link like http://example.com becomes a dual-link. One is the original, and the second is to one or more locally-cached versions.

http://example.com (local cache)
All links are scanned in the document. For each link:

  • Learn if the link is good or not.
    • Simple 404 check? What about other codes?
      • HTML redirects and permanent redirects could be quite useful to notice.
      • Noticing service interruptions (e.g. a Slashdotting) is also very useful.
Link is good:

  • Do not present the cached copy link prominently. Hide it completely unless a javascript unhide link is used, like I do with the table of contents.
    • I don't want people needlessly checking my possibly-outdated cached version and/or wasting my bandwidth.
  • Cache the first page and store it locally.
    • Need to make sure the local cache has info posted prominently at the top that it's a copy, and provide a link to the original.
    • Don't re-cache a page if a cache was made very recently. I need to be able to edit and re-edit a page multiple times throughout a day without hammering all the links.
    • wget - but it's crap to work with, and doesn't really work.. or if it does it's not nearly robust enough for actual use.
    • links
    • lynx ?
    • w3m
    • Some sort of downloader. I've tried a bunch and they all suck. Find my various notes and include them all here.
    • Snapshot a page and turn it into a PDF with midori -s
    • ? Also cache any second-level links which are direct-links to media (txt, pdf, jpg, mpg, etc.)
    • Need to be careful not to re-cache and overwrite a potentially valuable old copy, especially not with a 404/etc!
      • Maybe keep multiple revisions of the cached document?
      • Maybe do a diff to determine the level of difference. If it's really significant, then keep the previous revision.
Link is bad:

  • Present the cached link more prominently, with its cache date.
  • Possibly also present previous cached links.
  • Display the date the link was first found to be dead.
    • Maybe have some intelligence in there to determine if there is intermittent downtime. I also want to be very careful not to overwrite my cache with a spam/SEO page if a site goes down and is bought up.
Other thoughts:

  • This should create a cache summary at the bottom of the page, with any notes.. like stuff which may need to be manually checked.
  • If multiple pages all refer to the same document, make sure they're not all hammering the server to update that same cached file. So the cached file will have statistics/info in it to direct any cache attempts.
  • Some manual markup syntax to stop a link from being cached. Maybe something simple like ]http://example.com[

Manual Lists

FUCK! Or I could use something like <ol start="7">

I count the lines and paint the numbers myself. This will let me have broken lists:

But to do this I would have to define at least an end and probably a start. I will also need a way to communicate to the list function the number I want it to continue a list at.

#- automatically one
    1. automatically two
paragraph
    1. automatically three
=> <dl> <dd>1. automatically one</dd> <dd>2. automatically two</dd> <p>paragraph</p> <dd>3. automatically three</dd> </dl>
... or manually specifying the number:

#-3 text
    1. text
    2. text
#-2 text
    1. text
    2. text
=> <dl> <dd>3. text</dd> <dd>4. text</dd> <dd>5. text</dd> <dd>2. text</dd> <dd>3. text</dd> <dd>4. text</dd> </dl> =>
3. text
4. text
5. text
2. text
3. text
4. text

... another problem is that it doesn't look as clean as a proper list!

A proper list would look like this:

  1. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines.
However my incarnation would look like this:

1. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines.

... to solve that, I would have to wrap the numbers in a div and shift them to the left to get the right effect.

First, a style:

div.list-number {
  text-indent:  -1.4em;
  padding-left: 2.4em;
}
<div class="list-number">1. This is a long list which wraps around on two lines....</div>
<div class="list-number">2. This is a long list which wraps around on two lines....</div>
=>
1. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines.
2. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines. This is a long list which wraps around on two lines.

Subdirectories

Subdirectories are sortof supported. At this stage it's more of an afterthought from some old code. Stuff that I know won't work properly includes:

  • Automatic local linking only links to its current directory.
    • If I include parent and child directories, then I'd have to give link priority to the current directory.
  • The sitemap doesn't include subdirectories.

ighlighter.all();