Formatter
Mon Jan 27 2014 14:49:11 GMT+0100 (Central Europe Standard Time)
enabled
# Fix Copy and Paste - Copying text (and morphs) is broken under Chrome and current Lively, because it require the user to press CMD+C twice. broken Chrome The event is only actually handled the second time the keybaord is called. The bug is observeable under Linux and Windows and new Lively versions. The issues does not occure in Lively Webwerkstatt.Webwerkstattversions [log] copy: foo [log] create clipboard capture [log] copy: foo [log] create clipboard capture [log] copied foo
[log] Saving lively/experimental/FixWindowsCopyBug.js...
[log] ... 9083 bytes saved.
[log] Successfully evaluated module
[log] Browser statusMessage: Saving lively.experimental.FixWindowsCopyBug...
Successfully saved
Successfully evaluated lively.experimental.FixWindowsCopyBug
[log] updated 9 browsers in 0.01s
[log] enable log layer
[log] onKeyDown [object KeyboardEvent]
[log] onKeyDown [object KeyboardEvent]
[log] copy: Webwerkstatt
[log] onKeyDown [object KeyboardEvent]
[log] onKeyDown [object KeyboardEvent]
[log] native paste: 
[log] onKeyDown [object KeyboardEvent]
[log] onKeyDown [object KeyboardEvent]
[log] copy: versions
[log] onKeyDown [object KeyboardEvent]
[log] onKeyDown [object KeyboardEvent]
[log] native paste: 
[log] disable log layer (mouse out)
[log] enable log layer
[log] disable log layer (mouse out)
[log] enable log layer
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
follow log
clear
reattach
Log Messages
X

Menu
foo barconsole.log("copy: " + this.selectionString())
                
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
foo onKeyCopy onKeyCopy
foo bar foo foo foo bar bar bar foo bar bar foo
TextCore.js:Text:-- all --:processCommandKeys (proto)
X

Menu
N
core/lively/morphic/
...
React.js (not parsed)
Rendering.js (not parsed)
ScriptingSupport.js (not parsed)
Serialization.js (not parsed)
Shapes.js (not parsed)
Styles.js (not parsed)
StyleSheetRepresentation.js (not parsed)
StyleSheets.js (not parsed)
StyleSheetsHTML.js (not parsed)
SVG.js (not parsed)
TabMorphs.js (not parsed)
TextCore.js
TextUndo.js (not parsed)
HTMLParser
HTMLParser (extension)
idSetup (function)
lively.morphic.Text.Fonts (object)
RichText
RichText2
ShortcutHandler
Text
Text (extension)
Text (extension)
TextChunk
TextChunkOwner
TextDevLayer
TextEmphasis
-- all --
accessing
debugging
evaluation
experimentation
initializing
JavaScript support
keyboard event reaction
keyboard events
mouse events
properties
rendering
rich text
rich text spec
onLeftPressed (proto)
onMouseDown (proto)
onMouseUp (proto)
onMouseWheel (proto)
onPageDownPressed (proto)
onPageUpPressed (proto)
onPaste (proto)
onRightPressed (proto)
onTabPressed (proto)
onUpPressed (proto)
openRichTextSpecEditor (proto)
outdentSelection (proto)
processCommandKeys (proto)
readRichTextMarkupString (proto)
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
            case "3": { this.applyStyle({align: 'center'}); return true; }
            case "4": { this.applyStyle({align: 'justify'}); return true; }
            case "5": { this.setFontSize(8); return true; }
            case "6": { this.setFontSize(12); return true; }
            case "7": { this.setFontSize(18); return true; }
            case "8": { this.setFontSize(30); return true; }
            case "e": { this.doExchange(); return true; }
            case "f": { this.doFind(); return true; }
            case "g": { this.doFindNext(); return true; }
            case "m": { this.doMore(evt.isShiftDown()); return true; }
            case "a": {
                if (this.charsTyped && this.charsTyped.length > 0) {
                    // select recent typing, if any
                    var i = this.getSelectionRange()[1];
                    this.setSelectionRange(i - this.charsTyped.length, i);
                    this.charsTyped = '';
                    return true;
                }
                // Otherwise, do a normal select-all
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
>
<
FixWindowsCopyBug.js
X

Menu
N

...
../
BiggerStatusMessages.js (not parsed)
CopyAndPaste.js (not parsed)
ExperimentalFeatures.js
FixWindowsCopyBug.js
MethodFinder.js
RobustLoading.js (not parsed)
TextPaste.js (not parsed)
Todo.js (not parsed)
Webwerkstatt.js (not parsed)
DebugWindowsCopyBugLayer
FixWindowsCopyBugLayer
>
<
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
module('lively.experimental.FixWindowsCopyBug').requires('cop.Layers', 'lively.morphic.Widgets').toRun(function() {
cop.create('DebugWindowsCopyBugLayer').refineClass(lively.morphic.Text,{
    
    doKeyCopy: function(evtdata) {
        return null
    },
    onFocus: function() {
        // console.log("enable log layer")
        // LogGlobalEventsLayer.beGlobal();
        return cop.proceed.apply(this, arguments)  
    },
    onBlur: function(evt) {
        // console.log("disable log layer (mouse out)")
        // LogGlobalEventsLayer.beNotGlobal()
        return cop.proceed.apply(this, arguments)  
    },
    onKeyPress: function(evt) {
        this.cachedTextString = null;
        // save info for 'More' command
        this.rememberSelectionForDoMore('onKeyPress');
        var key = evt.getKeyChar();
        if (key && key.toLowerCase() == "v" && evt.isCommandKey()) {
            console.log("Paste: " + lively.morphic.Text.clipboardString);
            this.charsTyped += lively.morphic.Text.clipboardString;
        } else {
            this.charsTyped += key;
        }
        // if (this.textString.length == 0) this.textString += key;
        this.fixChunksDelayed();
        evt.stopPropagation()
        return true;
    },
    createClipboardCapture: function(handler) {
        console.log("create clipboard capture " )
        var input = lively.$('<input id="clipboardAccess" type="text" style="width:1px;height:1px;outline:0;position:absolute
;top:-1px;left:-1px"/>'),
            world = lively.morphic.World.current(),
            morph = this,
            focused = morph.isFocused();
        lively.$('body').append(input);
        input[0].addEventListener('copy', handler, false);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX