# along with this program. If not, see <http://www.gnu.org/licenses/>.
# encode text so it can be safely placed inside an html attribute
+enc_attr_regex = new RegExp '(&)|(")|(\u00A0)', 'g'
enc_attr = (txt) ->
- # FIXME implement
- return txt
+ return txt.replace enc_attr_regex, (match, amp, quote) ->
+ return '&' if (amp)
+ return '"' if (quote)
+ return ' '
void_elements = {
area: true
ret += '<' + el.name
attr_keys = []
for k of el.attrs
- attr_keys.push k
- attr_keys.sort()
+ attr_keys.unshift k
+ #attr_keys.sort()
for k in attr_keys
- ret += " #{k}=\"#{enc_attr el.attrs[k]}\""
+ ret += " #{k}"
+ if el.attrs[k].length > 0
+ ret += "=\"#{enc_attr el.attrs[k]}\""
ret += '>'
- unless ret.name in void_elements
+ unless void_elements[el.name]
if el.children.length
ret += dom_to_html el.children
ret += "</#{el.name}>"
ret += " \"#{el.public_identifier}\""
if el.system_identifier? and el.system_identifier.length > 0
ret += " \"#{el.system_identifier}\""
+ ret += ">\n"
return ret
wysiwyg = (el, options = {}) ->
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: wheic_parser.parse el.value, parser_opts
+ iframe: document.createElement('iframe')
+ load_html: (html) ->
+ @dom = wheic_parser.parse el.value, parser_opts
+ }
+ idoc = editor_instance.iframe.contentDocument
+ if options.stylesheet # TODO test this
+ istyle = idoc.createElement 'style'
+ istyle.setAttribute 'src', options.stylesheet
+ idoc.head.appendChild istyle
+ el.parentNode.appendChild editor_instance.iframe
return editor_instance
window.wheic = {