X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=editor.coffee;h=a9d0a3c95d352931672379cbb953bc8fd6b155de;hb=b3b872ef2a2200cd1e674845f0215341c1e67bfd;hp=5dbc566c08c60f952a132f96a30f8b53689669b8;hpb=bf21f4d11feb0738efe013a3a3db1ecc8f3f8787;p=peach-html5-editor.git diff --git a/editor.coffee b/editor.coffee index 5dbc566..a9d0a3c 100644 --- a/editor.coffee +++ b/editor.coffee @@ -609,9 +609,9 @@ class PeachHTML5Editor constructor: (in_el, options) -> @options = options ? {} @in_el = in_el - @tree = [] + @tree = null @matting = [] - @inited = false # when iframes have loaded + @init_1_called = false # when iframes have loaded @outer_iframe # iframe to hold editor @outer_idoc # "document" object for @outer_iframe @wrap2 = null # scrollbar is on this @@ -622,6 +622,7 @@ class PeachHTML5Editor @cursor_visible = false @poll_for_blur_timeout = null @iframe_offset = null + @iframe_height = null opt_fragment = @options.fragment ? true @parser_opts = {} if opt_fragment @@ -639,8 +640,9 @@ class PeachHTML5Editor @outer_idoc.head.appendChild icss @iframe = domify @outer_idoc, iframe: sandbox: 'allow-same-origin allow-scripts' @iframe.onload = => - @init() - setTimeout (=> @init() unless @inited), 200 # firefox never fires this onload + @init_1() + timeout 200, => # firefox never fires this onload + @init_1() unless @init_1_called @outer_idoc.body.appendChild( domify @outer_idoc, div: id: 'wrap1', children: [ domify @outer_idoc, div: style: "position: absolute; top: 0; left: 1px; font-size: 10px", children: [ domify @outer_idoc, text: "Peach HTML5 Editor" ] @@ -663,8 +665,23 @@ class PeachHTML5Editor @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 (or timeout on firefox) + init_1: -> # @iframe has loaded (but not it's css) @idoc = @iframe.contentDocument + @init_1_called = true + # chromium doesn't resolve relative urls as though they were at the same domain + # so add a tag + @idoc.head.appendChild domify @idoc, base: href: this_url_sans_path() + # don't let @iframe have scrollbars + @idoc.head.appendChild domify @idoc, style: children: [domify @idoc, text: "body { overflow: hidden; }"] + # load css file + if @options.css_file + istyle = domify @idoc, link: rel: 'stylesheet', href: @options.css_file + istyle.onload = => + @init_2() + @idoc.head.appendChild istyle + else + @init_2() + init_2: -> # @iframe and it's css file(s) are ready @overlay.onclick = (e) => @have_focus() return event_return e, @onclick e @@ -680,17 +697,7 @@ class PeachHTML5Editor @outer_idoc.body.onkeypress = (e) => @have_focus() return event_return e, @onkeypress e - # chromium doesn't resolve relative urls as though they were at the same domain - # so add a tag - @idoc.head.appendChild domify @idoc, base: href: this_url_sans_path() - if @options.css_file - istyle = domify @idoc, link: rel: 'stylesheet', type: 'text/css', href: @options.css_file + '?foo=baz' - istyle.onload = => - @adjust_iframe_height() - @idoc.head.appendChild istyle - @idoc.head.appendChild domify @idoc, style: children: [domify @idoc, text: "body { overflow: hidden; }"] @load_html @in_el.value - @inited = true if @options.on_init? @options.on_init() overlay_event_to_inner_xy: (e) -> @@ -817,8 +824,13 @@ class PeachHTML5Editor @load_html @in_el.value @adjust_iframe_height() adjust_iframe_height: -> - @iframe.style.height = "0" - @iframe.style.height = "#{@idoc.body.scrollHeight}px" + h = parseInt(@idoc.body.scrollHeight, 10) + if @iframe_height isnt h + @iframe_height = h + s = @wrap2.scrollTop + @iframe.style.height = "0" + @iframe.style.height = "#{h}px" + @wrap2.scrollTop = s kill_cursor: -> # remove it, forget where it was if @cursor_visible @cursor_el.parentNode.removeChild @cursor_el