# 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}\""