X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=editor.coffee;h=0f68f40e4f486b8d9ea72be1f76bfebc95bf4cbf;hb=a85e7976ce04ccbceb207ffe60ffbd212eb5a789;hp=f4b78451b15478c7f49c5e9725b490ad0f533514;hpb=be45d613a601143205ac93a5359d2340983efdf5;p=peach-html5-editor.git diff --git a/editor.coffee b/editor.coffee index f4b7845..0f68f40 100644 --- a/editor.coffee +++ b/editor.coffee @@ -71,13 +71,68 @@ dom_to_html = (dom) -> ret += ">\n" return ret +domify = (h) -> + for tag, attrs of h + if tag is 'text' + return document.createTextNode attrs + el = document.createElement tag + for k, v of attrs + if k is 'children' + for child in v + el.appendChild child + else + el.setAttribute k, v + return el + +css = '' +css += 'span.peach_editor_cursor {' +css += 'display: inline-block;' +css += 'height: 1em;' +css += 'width: 2px;' +css += 'margin-left: -1px;' +css += 'margin-right: -1px;' +css += 'background: #000;' +css += '-webkit-animation: 1s blink step-end infinite;' +css += 'animation: 1s blink step-end infinite;' +css += '}' +css += '@-webkit-keyframes "blink" {' +css += 'from, to { background: transparent; }' +css += '50% { background: #000; }' +css += '}' +css += '@keyframes "blink" {' +css += 'from, to { background: transparent; }' +css += '50% { background: #000; }' +css += '}' + wysiwyg = (el, options = {}) -> opt_fragment = options.fragment ? true parser_opts = {} if opt_fragment parser_opts.fragment = 'body' - editor_instance = dom: wheic_parser.parse(el.value, parser_opts) - # el.value = dom_to_html dom + editor_instance = { + dom: [] + iframe: document.createElement('iframe') + load_html: (html) -> + @dom = wheic_parser.parse html, parser_opts + as_html = wheic.dom_to_html @dom + as_html = as_html.substr(0, 5) + '' + as_html.substr(5) + @iframe.contentDocument.body.innerHTML = as_html + } + el.parentNode.appendChild editor_instance.iframe + idoc = editor_instance.iframe.contentDocument + idoc.body.onkeypress = (e) -> + char = e.charCode ? e.keyCode ? e.which + el.value += String.fromCharCode char + editor_instance.load_html el.value + return false + if options.stylesheet # TODO test this + istyle = idoc.createElement 'style' + istyle.setAttribute 'src', options.stylesheet + idoc.head.appendChild istyle + icss = idoc.createElement 'style' + icss.appendChild idoc.createTextNode css + idoc.head.appendChild icss + editor_instance.load_html el.value return editor_instance window.wheic = {