X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=editor.coffee;h=870c61bb6b91fb21b111b805509e99085fb3724d;hb=dac5189783f7b082e0baf790c859aae9f28c5412;hp=66d1dfedcaa62042c2d17a2982b3fab7fcf6a567;hpb=fb81209e78ff39a5469ee9217b35d4edf94a21d5;p=peach-html5-editor.git diff --git a/editor.coffee b/editor.coffee index 66d1dfe..870c61b 100644 --- a/editor.coffee +++ b/editor.coffee @@ -24,6 +24,19 @@ next_frame = (cb) -> else timeout 16, cb +this_url_sans_path = -> + ret = "#{window.location.href}" + clip = ret.lastIndexOf '#' + if clip > -1 + ret = ret.substr 0, clip + clip = ret.lastIndexOf '?' + if clip > -1 + ret = ret.substr 0, clip + clip = ret.lastIndexOf '/' + if clip > -1 + ret = ret.substr 0, clip + 1 + return ret + # 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" @@ -232,14 +245,20 @@ outer_css = (args) -> 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 += '-webkit-animation: blink 1s linear infinite;' + ret += 'animation: blink 1s linear infinite;' ret += '}' ret += '@-webkit-keyframes blink {' - ret += 'to { visibility: hidden; }' + ret += '0% { background-color: rgba(0,0,0,0.7); }' + ret += '50% { background-color: rgba(0,0,0,0.7); }' + ret += '50.001% { background-color: rgba(255,255,255,0.7); }' + ret += '100% { background-color: rgba(255,255,255,0.7); }' ret += '}' ret += '@keyframes blink {' - ret += 'to { visibility: hidden; }' + ret += '0% { background-color: rgba(0,0,0,0.7); }' + ret += '50% { background-color: rgba(0,0,0,0.7); }' + ret += '50.001% { background-color: rgba(255,255,255,0.7); }' + ret += '100% { background-color: rgba(255,255,255,0.7); }' ret += '}' ret += '.ann_box {' ret += 'z-index: 5;' @@ -587,6 +606,7 @@ tree_dedup_space = (tree) -> class PeachHTML5Editor # Options: (all optional) # editor_id: "id" attribute for outer-most element created by/for editor + # css_file: filename of a css file to style editable content # on_init: callback for when the editable content is in place constructor: (in_el, options) -> @options = options ? {} @@ -619,7 +639,7 @@ class PeachHTML5Editor domify @outer_idoc, text: css ] @outer_idoc.head.appendChild icss - @iframe = domify @outer_idoc, iframe: {} + @iframe = domify @outer_idoc, iframe: sandbox: 'allow-same-origin allow-scripts' @iframe.onload = => @init() setTimeout (=> @init() unless @inited), 200 # firefox never fires this onload @@ -661,9 +681,12 @@ class PeachHTML5Editor @outer_idoc.body.onkeypress = (e) => @have_focus() return event_return e, @onkeypress e - if @options.stylesheet + # 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 # TODO test this - @idoc.head.appendChild domify @idoc, style: src: @options.stylesheet + @idoc.head.appendChild domify @idoc, link: rel: 'stylesheet', type: 'text/css', href: @options.css_file @load_html @in_el.value @inited = true if @options.on_init?