JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
wrap in div, match dimensions
authorJason Woofenden <jason@jasonwoof.com>
Tue, 8 Mar 2016 15:43:25 +0000 (10:43 -0500)
committerJason Woofenden <jason@jasonwoof.com>
Tue, 8 Mar 2016 15:43:25 +0000 (10:43 -0500)
editor.coffee
editor_tests_compiled.html

index 224b2f9..98595f1 100644 (file)
@@ -23,7 +23,7 @@ TYPE_COMMENT = peach_parser.TYPE_COMMENT
 TYPE_DOCTYPE = peach_parser.TYPE_DOCTYPE
 
 debug_dot_at = (doc, x, y) ->
-       return
+       return # disabled
        el = doc.createElement 'div'
        el.setAttribute 'style', "position: absolute; left: #{x}px; top: #{y}px; width: 1px; height: 3px; background-color: red"
        doc.body.appendChild el
@@ -175,58 +175,67 @@ domify = (doc, hash) ->
                                el.setAttribute k, v
        return el
 
-css = ''
-css += 'body {'
-css +=     'margin: 0;'
-css +=     'padding: 0;'
-css += '}'
-css += '#wrap1 {'
-css +=     'border: 1px solid black;'
-css +=     "padding: #{overlay_padding}px;"
-css += '}'
-css += '#wrap2 {'
-css +=     'border: 1px solid black;'
-css +=     "padding: #{overlay_padding}px;"
-css += '}'
-css += '#wrap3 {'
-css +=     'position: relative;'
-css += '}'
-css += 'iframe {'
-css +=     'box-sizing: border-box;'
-css +=     'margin: 0;'
-css +=     'border: none;'
-css +=     'padding: 0;'
-css +=     "width: #{300 - 4 - 4 * overlay_padding}px;"
-css +=     "height: #{300 - 4 - 4 * overlay_padding}px;"
-css += '}'
-css += '#overlay {'
-css +=     'position: absolute;'
-css +=     "left: -#{overlay_padding}px;"
-css +=     "top: -#{overlay_padding}px;"
-css +=     "right: -#{overlay_padding}px;"
-css +=     "bottom: -#{overlay_padding}px;"
-css +=     'overflow: hidden;'
-css += '}'
-css += '.lightbox {'
-css +=     'position: absolute;'
-css +=     'background: rgba(100,100,100,0.2);'
-css += '}'
-css += '#cursor {'
-css +=     'position: absolute;'
-css +=     'height: 1em;'
-css +=     'width: 2px;'
-css +=     'margin-left: -1px;'
-css +=     'margin-right: -1px;'
-css +=     'background: #444;'
-css +=     '-webkit-animation: blink 1s steps(2, start) infinite;'
-css +=     'animation: blink 1s steps(2, start) infinite;'
-css += '}'
-css += '@-webkit-keyframes blink {'
-css +=     'to { visibility: hidden; }'
-css += '}'
-css += '@keyframes blink {'
-css +=     'to { visibility: hidden; }'
-css += '}'
+outer_css = (args) ->
+       w = args.w ? 300
+       h = args.h ? 300
+       inner_padding = args.inner_padding ? overlay_padding
+       frame_width = args.frame_width ? inner_padding
+       # TODO editor controls height...
+       shrink = (px) ->
+               w -= 2 * px
+               h -= 2 * px
+               return px
+       ret = ''
+       ret += 'body {'
+       ret +=     'margin: 0;'
+       ret +=     'padding: 0;'
+       ret += '}'
+       ret += '#wrap1 {'
+       ret +=     "border: #{shrink 1}px solid black;"
+       ret +=     "padding: #{shrink frame_width}px;"
+       ret += '}'
+       ret += '#wrap2 {'
+       ret +=     "border: #{shrink 1}px solid black;"
+       ret +=     "padding: #{shrink inner_padding}px;"
+       ret += '}'
+       ret += '#wrap3 {'
+       ret +=     'position: relative;'
+       ret += '}'
+       ret += 'iframe {'
+       ret +=     'box-sizing: border-box;'
+       ret +=     'margin: 0;'
+       ret +=     'border: none;'
+       ret +=     'padding: 0;'
+       ret +=     "width: #{w}px;"
+       ret +=     "height: #{h}px;"
+       ret += '}'
+       ret += '#overlay {'
+       ret +=     'position: absolute;'
+       ret +=     "left: -#{inner_padding}px;"
+       ret +=     "top: -#{inner_padding}px;"
+       ret +=     "right: -#{inner_padding}px;"
+       ret +=     "bottom: -#{inner_padding}px;"
+       ret +=     'overflow: hidden;'
+       ret += '}'
+       ret += '.lightbox {'
+       ret +=     'position: absolute;'
+       ret +=     'background: rgba(100,100,100,0.2);'
+       ret += '}'
+       ret += '#cursor {'
+       ret +=     'position: absolute;'
+       ret +=     'height: 1em;' # FIXME adjust for hight of text
+       ret +=     'width: 2px;'
+       ret +=     'background: #444;'
+       ret +=     '-webkit-animation: blink 1s steps(2, start) infinite;'
+       ret +=     'animation: blink 1s steps(2, start) infinite;'
+       ret += '}'
+       ret += '@-webkit-keyframes blink {'
+       ret +=     'to { visibility: hidden; }'
+       ret += '}'
+       ret += '@keyframes blink {'
+       ret +=     'to { visibility: hidden; }'
+       ret += '}'
+       return ret
 
 # key codes:
 KEY_LEFT = 37
@@ -544,7 +553,8 @@ class PeachHTML5Editor
                if opt_fragment
                        @parser_opts.fragment = 'body'
 
-               @outer_iframe = domify document, iframe: class: 'peach_html5_editor'
+               @outer_iframe = domify document, iframe: {}
+               outer_iframe_style = 'border: none !important; margin: 0 !important; padding: 0 !important; height: 100% !important; width: 100% !important;'
                if @options.editor_id?
                        @outer_iframe.setAttribute 'id', @options.editor_id
                @outer_iframe.onload = =>
@@ -553,8 +563,6 @@ class PeachHTML5Editor
                                domify @outer_idoc, text: css
                        ]
                        @outer_idoc.head.appendChild icss
-                       # FIXME continue
-
                        @iframe = domify @outer_idoc, iframe: {}
                        @iframe.onload = =>
                                @init()
@@ -568,7 +576,17 @@ class PeachHTML5Editor
                                        ]
                                ]
                        )
-               @in_el.parentNode.appendChild @outer_iframe
+               outer_wrap = domify document, div: class: 'peach_html5_editor'
+               @in_el.parentNode.appendChild outer_wrap
+               outer_bounds = get_el_bounds outer_wrap
+               if outer_bounds.w < 300
+                       outer_bounds.w = 300
+               if outer_bounds.h < 300
+                       outer_bounds.h = 300
+               outer_iframe_style += "width: #{outer_bounds.w}px; height: #{outer_bounds.h}px;"
+               @outer_iframe.setAttribute 'style', outer_iframe_style
+               css = outer_css w: outer_bounds.w, h: outer_bounds.h
+               outer_wrap.appendChild @outer_iframe
        init: -> # called by @iframe's onload
                @idoc = @iframe.contentDocument
                @overlay.onclick = (e) =>
@@ -714,7 +732,7 @@ class PeachHTML5Editor
                @overlay.appendChild @cursor_el
                @cursor_visible = true
                # TODO figure out x,y coords for cursor
-               @cursor_el.style.left = "#{loc.x + overlay_padding}px"
+               @cursor_el.style.left = "#{loc.x + overlay_padding - 1}px"
                @cursor_el.style.top = "#{loc.y + overlay_padding}px"
 
 window.peach_html5_editor = (args...) ->
index 712e36a..e3ead1a 100644 (file)
@@ -9,13 +9,11 @@
                        box-sizing: border-box;
                        width: 100%;
                }
+               /* optional */
                .peach_html5_editor {
-                       box-sizing: border-box;
-                       width: 300px;
-                       height: 300px;
-                       border: 0;
-                       margin: 10px 0;
-                       padding: 0;
+                       width: 500px;
+                       height: 500px;
+                       margin: 0 auto;
                }
        </style>
 </head>