/* <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, ElementsMediator = require("js/mediators/element-mediator").ElementMediator; exports.TextTool = Montage.create(DrawingTool, { drawingFeedback: { value: { mode: "Draw3D", type: "rectangle" } }, _selectedElement: { value : null }, selectedElement: { get: function() { return this._selectedElement; }, set: function(val) { //Set Selected Element if (this._selectedElement !== null) { this.applyStyle(); } this._selectedElement = val; if(this._selectedElement !== null) { this.drawTextTool(); this.handleScroll(); this.application.ninja.stage._iframeContainer.addEventListener("scroll", this, false); } else { this.application.ninja.stage._iframeContainer.removeEventListener("scroll", this); } } }, applyStyle: { value: function() { this.selectedElement.innerHTML = this.application.ninja.stage.textTool.value; this.application.ninja.stage.textTool.value = ""; this.application.ninja.stage.textTool.element.style.display = "none"; //ElementsMediator.setProperty([this.selectedElement], "color", [window.getComputedStyle(this.application.ninja.stage.textTool.element)["color"]], "Change", "textTool"); } }, 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; } if(this._hasDraw) { this._hasDraw = false; this.endDraw(event); } else { this.doSelection(event); if (this.application.ninja.selectedElements.length !== 0 ) { this.selectedElement = this.application.ninja.selectedElements[0]; } this._isDrawing = false; } } }, getSelectedElement: { value: function(editor) { var element = editor._selectedRange.startContainer; if (element.nodeType == 3) { element = element.parentNode; } return element; } }, getStyleOfSelectedElement: { value: function(editor) { return window.getComputedStyle(this.getSelectedElement(editor)); } }, 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() { var self = this; 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) this.application.ninja.stage.textTool.didDraw = function() { self.applyElementStyles(self.selectedElement, self.application.ninja.stage.textTool.element, ["overflow"]); self.applyElementStyles(self.selectedElement, self.application.ninja.stage.textTool.element, ["font","padding-left","padding-top","padding-right","padding-bottom", "color"]); this.selectAll(); this.didDraw = function() {}; } } }, /* HandleDoubleClick: { value: function(e) { //this.application.ninja.selectedElements[0].setAttribute("contenteditable", true); } }, */ 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"); } } } });