JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
fix typing several symbols
[peach-html5-editor.git] / editor.coffee
index efc218f..8bc72ef 100644 (file)
@@ -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