The idea is simple - to edit web pages in browser. Changing nodes in web inspector is not fun. Luckily with contenteditable we cant any text we see. It is almost text note, check it out.

Some data is hidden by default, lets open it:

And while we are here style them a bit:

Pretty comfortable I think. Now to persistence. It is as simple as GET request returning exactly same data it got with PUT request. Implemented as ruby rack server, data stored in one level tree:

run Proc.new {|env|
  method = env['REQUEST_METHOD']
  path = '.' + env['PATH_INFO']
  case method
  when 'PUT'
    content = env['rack.input'].read
    File.write(path, content)
    [200, {}, []]
  when 'GET'
    content = begin
      File.read(path)
    rescue Errno::ENOENT
      '<html contenteditable=true><p>Not Found'
    end
    [200, {"Content-Type" => "text/html"}, [content]]
  end
}

Browser should PUT data that will be returned next GET. As it expects HTML, send that to server. To make it simple store document.documentElement, no doctype. This means we are at quirks mode, but that's ok.

As this page would be published I won't allow PUT requests on my web server. But you are free to save and load from localStorage, try it yourself — edit the page and , , .

And that's all! With such a minimal setup we got very close to original browser. It was browser-editor, you know. Authoring web pages without touching HTML, yay!

In the next series you will see MIME, angle-dangle and other controls, XHTML beating HTML.