/* <copyright> This file contains proprietary software owned by Motorola Mobility, Inc.<br/> No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/> (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. </copyright> */ var Montage = require("montage/core/core").Montage, DrawingTool = require("js/tools/drawing-tool").DrawingTool; RichTextEditor = require("node_modules/labs/rich-text-editor.reel").RichTextEditor; exports.TextTool = Montage.create(DrawingTool, { _selectedElement: { value : null }, selectedElement: { get: function() { return this._selectedElement; }, set: function(val) { if (this._selectedElement !== null) { this.selectedElement.innerHTML = this.application.ninja.stage.textTool.value; this.application.ninja.stage.textTool.value = ""; this.application.ninja.stage.textTool.element.style.display = "none"; this.applyElementStyles(this.application.ninja.stage.textTool.element.firstChild, this.selectedElement, ["color"]); } //Set Selected Element this._selectedElement = val; if(val !== null) { this.drawTextTool(); this.handleScroll(); this.application.ninja.stage._iframeContainer.addEventListener("scroll", this, false); } else { this.application.ninja.stage._iframeContainer.removeEventListener("scroll", this); } } }, drawingFeedback: { value: { mode: "Draw3D", type: "rectangle" } }, HandleLeftButtonDown: { value: function(event) { this.selectedElement = null; this.startDraw(event); } }, handleScroll: { value: function(e) { // Set Top & Left Positions var textToolCoordinates = this.application.ninja.stage.toViewportCoordinates(this.selectedElement.offsetLeft, this.selectedElement.offsetTop); this.application.ninja.stage.textTool.element.style.left = textToolCoordinates[0] + "px"; this.application.ninja.stage.textTool.element.style.top = textToolCoordinates[1] + "px"; } }, HandleMouseMove: { value: function(event) { if(this._escape) { this._escape = false; this.isDrawing = true; } if(this.isDrawing) { this._hasDraw = true; // Flag for position of element this.doDraw(event); } else { this.doSnap(event); } this.drawLastSnap(); // Required cleanup for both Draw/Feedbacks } }, HandleLeftButtonUp: { value: function(event) { if(this._escape) { this._escape = false; return; } var drawData, selectedItem; if(this._hasDraw) { drawData = this.getDrawingData(); if(drawData) { //this.insertElement(drawData); } this._hasDraw = false; this.endDraw(event); } else { this.doSelection(event); if (this.application.ninja.selectedElements.length !== 0 ) { this.selectedElement = this.application.ninja.selectedElements[0]._element; } this._isDrawing = false; } } }, applyElementStyles : { value: function(fromElement, toElement, styles) { styles.forEach(function(style) { var styleCamelCase = style.replace(/(\-[a-z])/g, function($1){return $1.toUpperCase().replace('-','');}); toElement.style[styleCamelCase] = window.getComputedStyle(fromElement)[style]; }, this); } }, drawTextTool: { value: function() { this.application.ninja.stage.textTool.value = this.selectedElement.innerHTML; if(this.application.ninja.stage.textTool.value === "") { this.application.ninja.stage.textTool.value = " "; } this.selectedElement.innerHTML = ""; //Styling Options for text tool to look identical to the text you are manipulating. this.application.ninja.stage.textTool.element.style.display = "block"; this.application.ninja.stage.textTool.element.style.position = "absolute"; // Set Width, Height this.application.ninja.stage.textTool.element.style.width = this.selectedElement.offsetWidth + "px"; this.application.ninja.stage.textTool.element.style.height = this.selectedElement.offsetHeight + "px"; // Set font styling (Size, Style, Weight) me = this; this.application.ninja.stage.textTool.didDraw = function() { me.applyElementStyles(me.selectedElement, me.application.ninja.stage.textTool.element, ["overflow"]); me.applyElementStyles(me.selectedElement, me.application.ninja.stage.textTool.element.firstChild, ["font","padding-left","padding-top","padding-right","padding-bottom", "color"]); var range = document.createRange(), sel = window.getSelection(); sel.removeAllRanges(); range.selectNodeContents(this.application.ninja.stage.textTool.element.firstChild); sel.addRange(range); this.didDraw = function() {}; } } }, HandleDoubleClick: { value: function(e) { //this.application.ninja.selectedElements[0]._element.setAttribute("contenteditable", true); //if (!this.application.ninja.textTool) { //} } }, Configure: { value: function(wasSelected) { if(wasSelected) { NJevent("enableStageMove"); this.options.defineInitialProperties(); this.application.ninja.stage.stageDeps.snapManager.setupDragPlaneFromPlane( workingPlane ); } else { this.selectedElement = null; NJevent("disableStageMove"); } } } });