Pages are rendered into the dom in the wiki-client's lib/refresh.coffee. Logic there annotates elements with data attributes offen fetched with jquery.
# Item
Refresh creates a dom element for each story item. These are passed to plugin functions emit and bind.
emit = ($item, item) -> ... bind = ($item, item) -> ...
Cooperating items can share things by announcing their availability by attaching a class to $item and then retrieving available items by agreed function calls.
$item.addClass 'thing-source' $item.get(0).getThings = -> ...
By convention we retrieve items above and to our left.
items = $(".item:lt(#{$('.item').index($item)})") for each in items if $(each).hasClass 'thing-source' things = each.getThings() ...
An item can revise its own contents by constructing a new or revised item object, rendering it, and then posting an edit action to the server which will revise the journal on completion. See Tips for Binding Events
$item.empty() emit($item, item) bind($item, item) wiki.pageHandler.put $page, type: 'edit', id: item.id, item: item
# Page
Refresh expects an empty dom element which it fills after fetching json content from the web.
Find a page from an item by looking up the dom element parent tree. From this one can retrieve the parsed json for the page as refreshed. See JSON Schema
$page = $item.parents '.page'
page = $page.data 'data'
Test the classes attached to pages to special case logic.
$page.hasClass('local') $page.hasClass('remote') $page.hasClass('plugin') $page.hasClass('recycler') $page.hasClass('ghost')
A page retrieved from a remote site will be annotated as such. Null or absent means page came from the origin.
remote = $page.data 'site'
Find the slug of the page from the page id. [sic]
slug_rev = $page.attr('id') slug = $page.attr('id').split('_')[0]
Find the title from the h1 or from the page data.
title = $page.find('h1').text().trim() title = page.title