Elm.Native.Text = function(elm) { 'use strict'; elm.Native = elm.Native || {}; if (elm.Native.Text) return elm.Native.Text; var JS = Elm.JavaScript(elm); var htmlHeight = Elm.Native.Utils(elm).htmlHeight; var Color = Elm.Native.Color(elm); var Element = Elm.Graphics.Element(elm); var show = Elm.Native.Show(elm).show; function makeSpaces(s) { if (s.length == 0) { return s; } var arr = s.split(''); if (arr[0] == ' ') { arr[0] = " " } for (var i = arr.length; --i; ) { if (arr[i][0] == ' ' && arr[i-1] == ' ') { arr[i-1] = arr[i-1] + arr[i]; arr[i] = ''; } } for (var i = arr.length; i--; ) { if (arr[i].length > 1 && arr[i][0] == ' ') { var spaces = arr[i].split(''); for (var j = spaces.length - 2; j >= 0; j -= 2) { spaces[j] = ' '; } arr[i] = spaces.join(''); } } arr = arr.join(''); if (arr[arr.length-1] === " ") { return arr.slice(0,-1) + ' '; } return arr; } function properEscape(str) { if (str.length == 0) return str; str = str //.replace(/&/g, "&") .replace(/"/g, /*"*/ '"') .replace(/'/g, /*'*/ "'") .replace(//g, ">") .replace(/\n/g, "
"); var arr = str.split('
'); for (var i = arr.length; i--; ) { arr[i] = makeSpaces(arr[i]); } return arr.join('
'); } function toText(str) { return properEscape(JS.fromString(str)); } function addTag(tag) { return function(text) { return '<' + tag + ' style="padding:0;margin:0">' + text + ''; } } function addStyle(style, value, text) { return "" + text + ""; } function typeface(name, text) { return addStyle('font-family', JS.fromString(name), text); } function monospace(text) { return addStyle('font-family', 'monospace', text); } function size(px, text) { return addStyle('font-size', px + 'px', text) } var header = addTag('h1'); function height(h, text) { return addStyle('font-size', h+'em', text) } function italic(text) { return addStyle('font-style', 'italic', text) } var bold = addTag('b'); function extract(c) { if (c._3 === 1) { return 'rgb(' + c._0 + ',' + c._1 + ',' + c._2 + ')'; } return 'rgba(' + c._0 + ',' + c._1 + ',' + c._2 + ',' + c._3 + ')'; } function color(c, text) { return addStyle('color', extract(c), text); } function underline(text) { return addStyle('text-decoration', 'underline', text) } function overline(text) { return addStyle('text-decoration', 'overline', text) } function strikeThrough(text) { return addStyle('text-decoration', 'line-through', text); } function link(href, text) { return "" + text + ""; } function position(pos) { return function(text) { var e = {ctor:'RawHtml', _0: '
' + text + '
' }; var p = A2(htmlHeight, 0, text); return A3(Element.newElement, p._0, p._1, e); } } function asText(v) { return position('left')(monospace(toText(show(v)))); } function plainText(v) { return position('left')(toText(v)); } return elm.Native.Text = { toText: toText, header : header, height : F2(height), italic : italic, bold : bold, underline : underline, overline : overline, strikeThrough : strikeThrough, monospace : monospace, typeface : F2(typeface), color : F2(color), link : F2(link), justified : position('justify'), centered : position('center'), righted : position('right'), text : position('left'), plainText : plainText, asText : asText }; };