diff options
Diffstat (limited to 'js/clipboard/internal-ops/elements-clipboard-agent.js')
-rw-r--r-- | js/clipboard/internal-ops/elements-clipboard-agent.js | 50 |
1 files changed, 31 insertions, 19 deletions
diff --git a/js/clipboard/internal-ops/elements-clipboard-agent.js b/js/clipboard/internal-ops/elements-clipboard-agent.js index 14984593..a6bce2ba 100644 --- a/js/clipboard/internal-ops/elements-clipboard-agent.js +++ b/js/clipboard/internal-ops/elements-clipboard-agent.js | |||
@@ -1,24 +1,25 @@ | |||
1 | /* <copyright> | 1 | /* <copyright> |
2 | Copyright (c) 2012, Motorola Mobility, Inc | 2 | Copyright (c) 2012, Motorola Mobility LLC. |
3 | All Rights Reserved. | 3 | All Rights Reserved. |
4 | BSD License. | ||
5 | 4 | ||
6 | Redistribution and use in source and binary forms, with or without | 5 | Redistribution and use in source and binary forms, with or without |
7 | modification, are permitted provided that the following conditions are met: | 6 | modification, are permitted provided that the following conditions are met: |
8 | 7 | ||
9 | - Redistributions of source code must retain the above copyright notice, | 8 | * Redistributions of source code must retain the above copyright notice, |
10 | this list of conditions and the following disclaimer. | 9 | this list of conditions and the following disclaimer. |
11 | - Redistributions in binary form must reproduce the above copyright | 10 | |
12 | notice, this list of conditions and the following disclaimer in the | 11 | * Redistributions in binary form must reproduce the above copyright notice, |
13 | documentation and/or other materials provided with the distribution. | 12 | this list of conditions and the following disclaimer in the documentation |
14 | - Neither the name of Motorola Mobility nor the names of its contributors | 13 | and/or other materials provided with the distribution. |
15 | may be used to endorse or promote products derived from this software | 14 | |
16 | without specific prior written permission. | 15 | * Neither the name of Motorola Mobility LLC nor the names of its |
16 | contributors may be used to endorse or promote products derived from this | ||
17 | software without specific prior written permission. | ||
17 | 18 | ||
18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
21 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | 22 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
22 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 23 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
23 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 24 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
24 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 25 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
@@ -31,8 +32,8 @@ POSSIBILITY OF SUCH DAMAGE. | |||
31 | //////////////////////////////////////////////////////////////////////// | 32 | //////////////////////////////////////////////////////////////////////// |
32 | // | 33 | // |
33 | 34 | ||
34 | var Montage = require("montage/core/core").Montage, | 35 | var Montage = require("montage/core/core").Montage, |
35 | Component = require("montage/ui/component").Component, | 36 | Component = require("montage/ui/component").Component, |
36 | ClipboardUtil = require("js/clipboard/util").ClipboardUtil, | 37 | ClipboardUtil = require("js/clipboard/util").ClipboardUtil, |
37 | World = require("js/lib/drawing/world").World; | 38 | World = require("js/lib/drawing/world").World; |
38 | 39 | ||
@@ -141,7 +142,7 @@ var ElementsClipboardAgent = exports.ElementsClipboardAgent = Montage.create(Com | |||
141 | } | 142 | } |
142 | }, | 143 | }, |
143 | 144 | ||
144 | pasteFromCopy:{//todo: change to appropriate name | 145 | pasteFromCopy:{ |
145 | value:function(){ | 146 | value:function(){ |
146 | var i=0, j=0, | 147 | var i=0, j=0, |
147 | pastedElements = [],//array of te pastes clones - for selection | 148 | pastedElements = [],//array of te pastes clones - for selection |
@@ -151,7 +152,7 @@ var ElementsClipboardAgent = exports.ElementsClipboardAgent = Montage.create(Com | |||
151 | 152 | ||
152 | this.pasteCounter++; | 153 | this.pasteCounter++; |
153 | 154 | ||
154 | //TODO: cleanse HTML | 155 | //cleanse HTML |
155 | 156 | ||
156 | for(j=0; j< this.copiedObjects.copy.length; j++){ | 157 | for(j=0; j< this.copiedObjects.copy.length; j++){ |
157 | copiedElement = this.copiedObjects.copy[j]; | 158 | copiedElement = this.copiedObjects.copy[j]; |
@@ -229,9 +230,6 @@ var ElementsClipboardAgent = exports.ElementsClipboardAgent = Montage.create(Com | |||
229 | //build the computed style attribute | 230 | //build the computed style attribute |
230 | computedStyles = elem.ownerDocument.defaultView.getComputedStyle(elem); | 231 | computedStyles = elem.ownerDocument.defaultView.getComputedStyle(elem); |
231 | 232 | ||
232 | //todo: consider cleaning up the position data [or making position:relative with 0,0] from the computed styles, | ||
233 | // so that the object is pasted onto expernal applicaitons [like gmail] with no offset | ||
234 | |||
235 | for (i = 0; i < computedStyles.length; i++) { | 233 | for (i = 0; i < computedStyles.length; i++) { |
236 | stylePropertyName = computedStyles[i]; | 234 | stylePropertyName = computedStyles[i]; |
237 | computedStylesStr = computedStylesStr + stylePropertyName + ":" + computedStyles.getPropertyValue(stylePropertyName) + ";"; | 235 | computedStylesStr = computedStylesStr + stylePropertyName + ":" + computedStyles.getPropertyValue(stylePropertyName) + ";"; |
@@ -267,7 +265,10 @@ var ElementsClipboardAgent = exports.ElementsClipboardAgent = Montage.create(Com | |||
267 | styles = null; | 265 | styles = null; |
268 | } | 266 | } |
269 | 267 | ||
268 | var addDelegate = this.application.ninja.elementMediator.addDelegate; | ||
269 | this.application.ninja.elementMediator.addDelegate = null; | ||
270 | this.application.ninja.elementMediator.addElements(canvas, styles, false); | 270 | this.application.ninja.elementMediator.addElements(canvas, styles, false); |
271 | this.application.ninja.elementMediator.addDelegate = addDelegate; | ||
271 | 272 | ||
272 | worldData = sourceCanvas.elementModel.shapeModel ? sourceCanvas.elementModel.shapeModel.GLWorld.exportJSON(): null; | 273 | worldData = sourceCanvas.elementModel.shapeModel ? sourceCanvas.elementModel.shapeModel.GLWorld.exportJSON(): null; |
273 | if(worldData) | 274 | if(worldData) |
@@ -349,7 +350,7 @@ var ElementsClipboardAgent = exports.ElementsClipboardAgent = Montage.create(Com | |||
349 | 350 | ||
350 | pastePositioned:{ | 351 | pastePositioned:{ |
351 | value: function(element, styles, fromCopy){// for now can wok for both in-place and centered paste | 352 | value: function(element, styles, fromCopy){// for now can wok for both in-place and centered paste |
352 | var modObject = [], x,y, newX, newY, counter; | 353 | var modObject = [], x,y, newX, newY, counter, self = this; |
353 | 354 | ||
354 | if((typeof fromCopy === "undefined") || (fromCopy && fromCopy === true)){ | 355 | if((typeof fromCopy === "undefined") || (fromCopy && fromCopy === true)){ |
355 | counter = this.pasteCounter; | 356 | counter = this.pasteCounter; |
@@ -362,11 +363,22 @@ var ElementsClipboardAgent = exports.ElementsClipboardAgent = Montage.create(Com | |||
362 | newX = styles ? ("" + (styles.left + (25 * counter)) + "px") : "100px"; | 363 | newX = styles ? ("" + (styles.left + (25 * counter)) + "px") : "100px"; |
363 | newY = styles ? ("" + (styles.top + (25 * counter)) + "px") : "100px"; | 364 | newY = styles ? ("" + (styles.top + (25 * counter)) + "px") : "100px"; |
364 | 365 | ||
366 | var addDelegate = this.application.ninja.elementMediator.addDelegate; | ||
367 | this.application.ninja.elementMediator.addDelegate = null; | ||
365 | if(!styles || (styles && !styles.position)){ | 368 | if(!styles || (styles && !styles.position)){ |
366 | this.application.ninja.elementMediator.addElements(element, null, false); | 369 | this.application.ninja.elementMediator.addElements(element, null, false); |
367 | }else if(styles && (styles.position === "absolute")){ | 370 | }else if(styles && (styles.position === "absolute")){ |
371 | if((element.tagName === "IMG") || (element.getAttribute("type") === "image/svg+xml")){ | ||
372 | element.onload = function(){ | ||
373 | element.onload = null; | ||
374 | //refresh selection | ||
375 | self.application.ninja.stage.needsDraw = true; | ||
376 | } | ||
377 | } | ||
378 | |||
368 | this.application.ninja.elementMediator.addElements(element, {"top" : newY, "left" : newX}, false);//displace | 379 | this.application.ninja.elementMediator.addElements(element, {"top" : newY, "left" : newX}, false);//displace |
369 | } | 380 | } |
381 | this.application.ninja.elementMediator.addDelegate = addDelegate; | ||
370 | } | 382 | } |
371 | }, | 383 | }, |
372 | 384 | ||