# SETTINGS
overlay_padding = 10
-TYPE_TAG = peach_parser.TYPE_TAG
-TYPE_TEXT = peach_parser.TYPE_TEXT
-TYPE_COMMENT = peach_parser.TYPE_COMMENT
-TYPE_DOCTYPE = peach_parser.TYPE_DOCTYPE
-
timeout = (ms, cb) -> return setTimeout cb, ms
debug_dot_at = (doc, x, y) ->
remove = []
for c, i in tree
switch c.type
- when TYPE_TEXT
+ when 'text'
c.el = parent.ownerDocument.createTextNode c.text
parent.appendChild c.el
- when TYPE_TAG
+ when 'tag'
if c.name in ['script', 'object', 'iframe', 'link']
# TODO put placeholders instead
remove.unshift i
return done
find_next_cursor_position = (tree, n, i) ->
- if n.type is TYPE_TEXT and n.text.length > i
+ if n.type is 'text' and n.text.length > i
orig_xyh = cursor_to_xyh n, i
unless orig_xyh?
console.log "ERROR: couldn't find xy for current cursor location"
state_before = true
found = null
traverse_tree tree, (node, state) ->
- if node.type is TYPE_TEXT and state_before is false
+ if node.type is 'text' and state_before is false
if cursor_to_xyh(node, 0)?
found = node
return true
return null
find_prev_cursor_position = (tree, n, i) ->
- if n? and n.type is TYPE_TEXT and i > 0
+ if n? and n.type is 'text' and i > 0
orig_xyh = cursor_to_xyh n, i
unless orig_xyh?
console.log "ERROR: couldn't find xy for current cursor location"
found_prev = n?
found = null
traverse_tree tree, (node) ->
- if node.type is TYPE_TEXT
+ if node.type is 'text'
if node is n
if found_prev?
found = found_prev
find_loc_cursor_position = (tree, loc) ->
for c in tree
- if c.type is TYPE_TAG or c.type is TYPE_TEXT
+ if c.type is 'tag' or c.type is 'text'
bounds = get_el_bounds c.el
continue if loc.x < bounds.x
continue if loc.x > bounds.x + bounds.w
if c.children.length
ret = find_loc_cursor_position c.children, loc
return ret if ret?
- if c.type is TYPE_TEXT
+ if c.type is 'text'
# click is within bounding box that contains all text.
return [c, 0] if c.text.length is 0
before_i = 0
tree_remove_empty_text_nodes = (tree) ->
empties = []
traverse_tree tree, (n) ->
- if n.type is TYPE_TEXT
+ if n.type is 'text'
if n.text.length is 0
empties.unshift n
return false
for n in empties
# don't completely empty the tree
if tree.length is 1
- if tree[0].type is TYPE_TEXT
+ if tree[0].type is 'text'
console.log "oop, leaving a blank node because it's the only thing"
return
n.el.parentNode.removeChild n.el
iterate = (tree, cb) ->
for n in tree
- if n.type is TYPE_TEXT
+ if n.type is 'text'
i = 0
while i < n.text.length # don't foreach, cb might remove chars
advance = cb n, i
if advance
i += 1
- if n.type is TYPE_TAG
+ if n.type is 'tag'
block = is_display_block n.el
if block
cb null
prev_bounds = x: 0, y: 0, w: 0, h: 0
alpha = 0.1
while n?.el?
- if n.type is TYPE_TEXT
+ if n.type is 'text'
n = n.parent
continue
bounds = get_el_bounds n.el
inner_flags = want_nl: true
is_br = false
switch n.type
- when TYPE_TAG
+ when 'tag'
if n.name is 'br'
is_br = true
is_text = false
inner_flags.block = true
is_block = true
in_flow_block = in_flow
- when TYPE_TEXT
+ when 'text'
is_text = true
is_block = false
in_flow = true
in_flow_block = false
- else # TYPE_COMMENT, TYPE_DOCTYPE
+ else # 'comment', 'doctype'
is_text = false
is_block = false
in_flow = false
ret += "\n"
ret += indent
switch n.type
- when TYPE_TAG
+ when 'tag'
ret += '<' + n.name
attr_keys = []
for k of n.attrs
if n.children.length
ret += @pretty_html n.children, next_indent, inner_flags
ret += "</#{n.name}>"
- when TYPE_TEXT
+ when 'text'
ret += enc_text n.text
- when TYPE_COMMENT
+ when 'comment'
ret += "<!--#{n.text}-->" # TODO encode?
- when TYPE_DOCTYPE
+ when 'doctype'
ret += "<!DOCTYPE #{n.name}"
if n.public_identifier? and n.public_identifier.length > 0
ret += " \"#{n.public_identifier}\""
return String.fromCharCode((x >> 10) + 0xd800, (x % 0x400) + 0xdc00)
# Each node is an obect of the Node class. Here are the Node types:
-TYPE_TAG = 0 # name, {attributes}, [children]
-TYPE_TEXT = 1 # "text"
-TYPE_COMMENT = 2
-TYPE_DOCTYPE = 3
+TYPE_TAG = 'tag' # name, {attributes}, [children]
+TYPE_TEXT = 'text' # "text"
+TYPE_COMMENT = 'comment'
+TYPE_DOCTYPE = 'doctype'
# the following types are emited by the tokenizer, but shouldn't end up in the tree:
TYPE_START_TAG = 4 # name, [attributes ([key,value]...) in reverse order], [children]
TYPE_END_TAG = 5 # name
TYPE_AAA_BOOKMARK = 8 # http://www.w3.org/TR/html5/syntax.html#adoption-agency-algorithm
# namespace constants
-NS_HTML = 1
-NS_MATHML = 2
-NS_SVG = 3
+NS_HTML = 'html'
+NS_MATHML = 'mathml'
+NS_SVG = 'svg'
# quirks mode constants
-QUIRKS_NO = 1
-QUIRKS_LIMITED = 2
-QUIRKS_YES = 3
+QUIRKS_NO = 'no'
+QUIRKS_LIMITED = 'limited'
+QUIRKS_YES = 'yes'
# queue up debug logs, so eg they can be shown only for tests that fail
g_debug_log = []