UNPKG

openfl

Version:

A fast, productive library for 2D cross-platform development.

263 lines (246 loc) 10.7 kB
// Class: openfl.display._internal.DOMTextField var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this $global.Object.defineProperty(exports, "__esModule", {value: true}); var __map_reserved = {}; // Imports var $hxClasses = require("./../../../hxClasses_stub").default; var $hxEnums = require("./../../../hxEnums_stub").default; var $import = require("./../../../import_stub").default; function EReg() {return require("./../../../EReg");} function openfl_display__$internal_DOMDisplayObject() {return require("./../../../openfl/display/_internal/DOMDisplayObject");} function openfl_text__$internal_TextEngine() {return require("./../../../openfl/text/_internal/TextEngine");} function Std() {return require("./../../../Std");} function openfl_events_TextEvent() {return require("./../../../openfl/events/TextEvent");} function StringTools() {return require("./../../../StringTools");} function openfl_text__$internal_HTMLParser() {return require("./../../../openfl/text/_internal/HTMLParser");} function openfl__$Vector_VectorIterator() {return require("./../../../openfl/_Vector/VectorIterator");} function openfl_display__$internal_DOMBitmap() {return require("./../../../openfl/display/_internal/DOMBitmap");} // Constructor var DOMTextField = function(){} // Meta DOMTextField.__name__ = "openfl.display._internal.DOMTextField"; DOMTextField.__isInterface__ = false; DOMTextField.prototype = { }; DOMTextField.prototype.__class__ = DOMTextField.prototype.constructor = $hxClasses["openfl.display._internal.DOMTextField"] = DOMTextField; // Init // Statics DOMTextField.clear = function(textField,renderer) { (openfl_display__$internal_DOMDisplayObject().default).clear(textField,renderer); if(textField.__div != null) { renderer.element.removeChild(textField.__div); textField.__div = null; textField.__style = null; } } DOMTextField.measureText = function(textField) { var textEngine = textField.__textEngine; var div = textField.__div; if(div == null) { div = window.document.createElement("div"); div.innerHTML = new (EReg().default)("\n","g").replace(textEngine.text,"<br>"); div.style.setProperty("font",(openfl_text__$internal_TextEngine().default).getFont(textField.__textFormat),null); div.style.setProperty("pointer-events","none",null); div.style.position = "absolute"; div.style.top = "110%"; window.document.body.appendChild(div); } textEngine.__measuredWidth = div.clientWidth; if(textField.__div == null) { div.style.width = (Std().default).string(textEngine.width - 4) + "px"; } textEngine.__measuredHeight = div.clientHeight; if(textField.__div == null) { window.document.body.removeChild(div); } } DOMTextField.render = function(textField,renderer) { var textEngine = textField.__textEngine; if(textField.stage != null && textField.__worldVisible && textField.__renderable) { if(textField.__dirty || textField.__renderTransformChanged || textField.__div == null) { if(textEngine.text != "" || textEngine.background || textEngine.border || textEngine.type == "input") { textField.__updateLayout(); if(textField.__div == null) { textField.__div = window.document.createElement("div"); renderer.__initializeElement(textField,textField.__div); textField.__style.setProperty("outline","none",null); textField.__div.addEventListener("input",function(event) { event.preventDefault(); if(textField.get_htmlText() != textField.__div.innerHTML) { textField.set_htmlText(textField.__div.innerHTML); var textField1 = textField.__displayAsPassword; textField.__dirty = false; var tmp = textField.get_htmlText(); textField.dispatchEvent(new (openfl_events_TextEvent().default)("textInput",false,false,tmp)); } },true); } if(!textEngine.wordWrap) { textField.__style.setProperty("white-space","nowrap",null); } else { textField.__style.setProperty("word-wrap","break-word",null); } textField.__style.setProperty("overflow","hidden",null); if(textEngine.selectable) { textField.__style.setProperty("cursor","text",null); textField.__style.setProperty("-webkit-user-select","text",null); textField.__style.setProperty("-moz-user-select","text",null); textField.__style.setProperty("-ms-user-select","text",null); textField.__style.setProperty("-o-user-select","text",null); } else { textField.__style.setProperty("cursor","inherit",null); } var div = textField.__div; div.contentEditable = textEngine.type == "input"; var style = textField.__style; if(textEngine.background) { style.setProperty("background-color","#" + (StringTools().default).hex(textEngine.backgroundColor & 16777215,6),null); } else { style.removeProperty("background-color"); } var w = textEngine.width; var h = textEngine.height; var scale = 1; var text = ""; if(textField.__isHTML) { var tmp1 = (openfl_text__$internal_HTMLParser().default).parse(textField.__text,textField.get_multiline(),textField.__styleSheet,textField.__textFormat,textField.__textEngine.textFormatRanges); textField.__updateText(tmp1); } var useTextBounds = !(textEngine.background || textEngine.border); var bounds = useTextBounds ? textEngine.textBounds : textEngine.bounds; var scrollX = -textField.get_scrollH(); var scrollY = 0.0; var group = new (openfl__$Vector_VectorIterator().default)(textEngine.layoutGroups); while(group.hasNext()) { var group1 = group.next(); if(group1.lineIndex < textField.get_scrollV() - 1) { continue; } if(group1.lineIndex > textEngine.get_bottomScrollV() - 1) { break; } text += "<div style=\""; if(group1.format.font != null) { text += "font: " + (openfl_text__$internal_TextEngine().default).getFont(group1.format) + "; "; } if(group1.format.color != null) { text += "color: #" + (StringTools().default).hex(group1.format.color & 16777215,6) + "; "; } if(group1.format.underline == true) { text += "text-decoration: underline; "; } if(group1.format.align != null) { switch(group1.format.align) { case "center": text += "text-align: center; "; break; case "justify": text += "text-align: justify; "; break; case "right": text += "text-align: right; "; break; default: text += "text-align: left; "; } } if(group1.format.leftMargin != null) { text += "padding-left: " + group1.format.leftMargin * scale + "px; "; } if(group1.format.rightMargin != null) { text += "padding-right: " + group1.format.rightMargin * scale + "px; "; } if(group1.format.indent != null) { text += "text-indent: " + group1.format.indent * scale + "px; "; } var tmp2 = group1.format.leading != null; var x = group1.offsetX + scrollX; var y = group1.offsetY + scrollY + 3; text += "left: " + x + "px; top: " + y + "px; vertical-align: top; position: absolute;\">"; if(group1.format.url != null && group1.format.url != "") { var anchorStyle = "text-decoration: underline; "; if(group1.format.color != null) { anchorStyle += "color: #" + (StringTools().default).hex(group1.format.color & 16777215,6) + "; "; } text += "<a style='" + anchorStyle + "' href='" + group1.format.url + "' target='" + group1.format.target + "'>"; } if(!textField.__isHTML) { text += (StringTools().default).replace((StringTools().default).htmlEscape(textEngine.text.substring(group1.startIndex,group1.endIndex))," ","&nbsp;"); } else { text += (StringTools().default).replace(textEngine.text.substring(group1.startIndex,group1.endIndex)," ","&nbsp;"); } if(group1.format.url != null && group1.format.url != "") { text += "</a>"; } text += "</div>"; } if(textEngine.border) { style.setProperty("border","solid 1px #" + (StringTools().default).hex(textEngine.borderColor & 16777215,6),null); textField.__renderTransform.translate(-1,-1); textField.__renderTransformChanged = true; textField.__transformDirty = true; } else if(style.border != "") { style.removeProperty("border"); textField.__renderTransformChanged = true; } style.setProperty("width",w + "px",null); style.setProperty("height",h + "px",null); textField.__div.innerHTML = text; textField.__dirty = false; } else if(textField.__div != null) { renderer.element.removeChild(textField.__div); textField.__div = null; } } if(textField.__div != null) { var old = renderer.__roundPixels; renderer.__roundPixels = true; renderer.__updateClip(textField); renderer.__applyStyle(textField,true,true,true); renderer.__roundPixels = old; } } else { DOMTextField.clear(textField,renderer); } } DOMTextField.renderDrawable = function(textField,renderer) { textField.__domRender = true; renderer.__updateCacheBitmap(textField,textField.__forceCachedBitmapUpdate); textField.__forceCachedBitmapUpdate = false; textField.__domRender = false; if(textField.__cacheBitmap != null && !textField.__isCacheBitmapRender) { renderer.__renderDrawableClear(textField); textField.__cacheBitmap.stage = textField.stage; (openfl_display__$internal_DOMBitmap().default).render(textField.__cacheBitmap,renderer); } else { if(textField.__renderedOnCanvasWhileOnDOM) { textField.__renderedOnCanvasWhileOnDOM = false; if(textField.__isHTML && textField.__htmlText != null) { textField.__updateText(textField.__htmlText); textField.__dirty = true; textField.__layoutDirty = true; textField.__setRenderDirty(); } } DOMTextField.render(textField,renderer); } renderer.__renderEvent(textField); } DOMTextField.renderDrawableClear = function(textField,renderer) { DOMTextField.clear(textField,renderer); } DOMTextField.__getAttributeMatch = function(regex) { if(regex.matched(2) != null) { return regex.matched(2); } else { return regex.matched(3); } } DOMTextField.__meta__ = { obj : { SuppressWarnings : ["checkstyle:FieldDocComment"]}} DOMTextField.__regexColor = new (EReg().default)("color=(\"#([^\"]+)\"|'#([^']+)')","i") DOMTextField.__regexFace = new (EReg().default)("face=(\"([^\"]+)\"|'([^']+)')","i") DOMTextField.__regexFont = new (EReg().default)("<font ([^>]+)>","gi") DOMTextField.__regexCloseFont = new (EReg().default)("</font>","gi") DOMTextField.__regexSize = new (EReg().default)("size=(\"([^\"]+)\"|'([^']+)')","i") // Export exports.default = DOMTextField;