X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=editor.coffee;h=8bc72ef32b75d814d17a41351150e9d2063e5d77;hb=a1a9a189a821bc17cd1f07d7d145d5fe0e1d80a8;hp=efc218f7a548250d56818b60e8dab1a9cfb95c17;hpb=9e042b84e5262f349fdfdbffe7c714628183cb6c;p=peach-html5-editor.git diff --git a/editor.coffee b/editor.coffee index efc218f..8bc72ef 100644 --- a/editor.coffee +++ b/editor.coffee @@ -19,6 +19,11 @@ overlay_padding = 10 timeout = (ms, cb) -> return setTimeout cb, ms +# xml 1.0 spec, chromium and firefox accept these, plus lots of unicode chars +valid_attr_regex = new RegExp '^[a-zA-Z_:][-a-zA-Z0-9_:.]*$' +# html5 spec is much more lax, but chromium won't let me make at attribute with the name "4" +js_attr_regex = new RegExp '^[oO][nN].' + debug_dot_at = (doc, x, y) -> return # disabled el = doc.createElement 'div' @@ -246,7 +251,15 @@ outer_css = (args) -> ret += '}' return ret -# key codes: + +ignore_key_codes = + '18': true # alt + '20': true # capslock + '17': true # ctrl + '144': true # numlock + '16': true # shift + '91': true # windows "start" key +# key codes: (valid on keydown, not keypress) KEY_LEFT = 37 KEY_UP = 38 KEY_RIGHT = 39 @@ -261,14 +274,6 @@ KEY_INSERT = 45 KEY_PAGE_UP = 33 KEY_PAGE_DOWN = 34 KEY_TAB = 9 - -ignore_key_codes = - '18': true # alt - '20': true # capslock - '17': true # ctrl - '144': true # numlock - '16': true # shift - '91': true # windows "start" key control_key_codes = # we react to these, but they aren't typing '37': KEY_LEFT '38': KEY_UP @@ -301,7 +306,9 @@ instantiate_tree = (tree, parent) -> c.el = parent.ownerDocument.createElement c.name for k, v of c.attrs # FIXME if attr_whitelist[k]? - c.el.setAttribute k, v + if valid_attr_regex.test k + unless js_attr_regex.test k + c.el.setAttribute k, v parent.appendChild c.el if c.children.length instantiate_tree c.children, c.el @@ -658,6 +665,8 @@ class PeachHTML5Editor new_cursor = find_loc_cursor_position @tree, xy if new_cursor? @move_cursor new_cursor + else + @kill_cursor() return false ondoubleclick: (e) -> return false @@ -733,7 +742,7 @@ class PeachHTML5Editor onkeypress: (e) -> return if e.ctrlKey return false if ignore_key_codes[e.keyCode]? - return false if control_key_codes[e.keyCode]? # handled in keydown + # return false if control_key_codes[e.keyCode]? # handled in keydown char = e.charCode ? e.keyCode if char and @cursor? char = String.fromCharCode char @@ -787,7 +796,12 @@ class PeachHTML5Editor @overlay.appendChild @cursor_el @cursor_visible = true @cursor_el.style.left = "#{loc.x + overlay_padding - 1}px" - @cursor_el.style.top = "#{loc.y + overlay_padding}px" + if loc.h < 5 + height = 12 + else + height = loc.h + @cursor_el.style.top = "#{loc.y + overlay_padding + Math.round(height * .07)}px" + @cursor_el.style.height = "#{Math.round height * 0.82}px" @matt cursor[0] matt: (n) -> while @matting.length > 0