Divec has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/83123


Change subject: WIP: Event Logger: collect IME functionality info
......................................................................

WIP: Event Logger: collect IME functionality info

Change-Id: I50e89d5a289f3fcb4fe2a6835a2ec96fb497242c
---
A demos/ve/eventLogger.html
1 file changed, 131 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/23/83123/1

diff --git a/demos/ve/eventLogger.html b/demos/ve/eventLogger.html
new file mode 100644
index 0000000..cff3387
--- /dev/null
+++ b/demos/ve/eventLogger.html
@@ -0,0 +1,131 @@
+<!doctype html>
+<html>
+       <head>
+               <meta charset="UTF-8">
+               <title>Keyboard Event Logger</title>
+               <style>
+                       #imediv, #inputbox {
+                               position: absolute;
+                               left: 0.5em; right: .5em; top: .5em; height: 
2em;
+                               overflow: clip;
+                       }
+                       #inputbox {
+                               border: solid gray 1px;
+                               display: none;
+                       }
+                       #logbox {
+                               border: solid gray 1px;
+                               white-space: pre;
+                               font: 10pt monospace;
+                               position: absolute;
+                               left: .5em; right: .5em; top: 3.5em; bottom: 
.5em;
+                               overflow-y: auto;
+                       }
+               </style>
+               <script src="../../modules/jquery/jquery.js"></script>
+               <script src="../../modules/jquery/jquery.client.js"></script>
+               <script src="../../modules/oojs/oo.js"></script>
+               <script src="../../modules/rangy/rangy-core-1.3.js"></script>
+               <script 
src="../../modules/rangy/rangy-position-1.3.js"></script>
+               <script src="../../modules/unicodejs/unicodejs.js"></script>
+               <script 
src="../../modules/unicodejs/unicodejs.graphemebreak.js"></script>
+               <script 
src="../../modules/unicodejs/unicodejs.wordbreak.js"></script>
+               <script src="../../modules/ve/ve.js"></script>
+               <script src="../../modules/ve/ce/ve.ce.js"></script>
+               <script src="../../modules/ve/ve.EventSequencer.js"></script>
+               <script>
+                       ve = {};
+                       ve.log = function() {};
+                       var imediv, imebox, inputbox, logbox, startTime, 
timeoutId,
+                               oldHtml = '', log = [];
+                       function onbodyload () {
+                               var i, len, range, sel,
+                                       eventNames = ['compositionstart', 
'compositionend',
+'keydown', 'keyup', 'keypress', 'input'];
+                               imediv = document.getElementById( 'imediv' ),
+                               imebox = document.getElementById( 'imebox' ),
+                               inputbox = document.getElementById( 'inputbox' 
),
+                               logbox = document.getElementById( 'logbox' );
+                               for ( i = 0, len = eventNames.length; i < len; 
i++ ) {
+                                       addListener( inputbox, eventNames[i] );
+                               }
+                               startTime = new Date().valueOf();
+                               imebox.value = '';
+                               imebox.focus();
+                       }
+
+                       function addListener( node, eventName ) {
+                               node.addEventListener( eventName, function ( e 
) {
+                                       logEvent( node, eventName, e );
+                                       var id;
+                                       id = setTimeout( function () {
+                                               if ( timeoutId != id ) {
+                                                       return;
+                                               }
+                                               logEvent( node, 'end of event 
queue', null );
+                                               log.push( '------' );
+                                               showlog();
+                                       } );
+                                       if ( timeoutId ) {
+                                               clearTimeout( timeoutId );
+                                       }
+                                       timeoutId = id;
+                               });
+                       }
+
+                       function getKeyCode ( e ) {
+                               return ( e && e.keyCode ) ? e.keyCode : null;
+                       }
+
+                       function logEvent( node, eventName, e ) {
+                               var msUtc = (new Date().valueOf() - startTime) 
/ 1000;
+                               var newHtml = node.innerHTML;
+                               var change = null;
+                               if ( oldHtml !== newHtml ) {
+                                       change = newHtml;
+                                       oldHtml = newHtml;
+                               }
+                               logOb( {
+                                       'time': msUtc,
+                                       'eventName': eventName,
+                                       'keyCode': getKeyCode( e ),
+                                       'change': change
+                               } );
+                               //log( '' + cluster + ' (' + msUtc + 's) ' + 
eventName + ' ' + showEventCode( e ) );
+                       }
+
+                       function logOb( ob ) {
+                               log.push( ob );
+                               showlog();
+                       }
+
+                       function showlog() { 
+                               logbox.innerHTML = JSON.stringify( log, null, 4 
);
+                               logbox.scrollTop = logbox.scrollHeight;
+                       }
+
+                       function start( ) {
+                               log.push( {
+                                       'imeNameAndVersion': imebox.value,
+                                       'startDom': inputbox.innerHTML
+                               } );
+                               showlog();
+                               imediv.style.display = 'none';
+                               inputbox.style.display = 'block';
+                               inputbox.focus();
+                       }
+               </script>
+       </head>
+       <body onload="onbodyload()">
+               <div id="imediv">
+                       <form onsubmit="start(); return false">
+                               IME name and version:
+                               <input type="text" id="imebox">
+                               <input type='submit' id='startbutton' 
value='Start Logging Keyboard Events'>
+                       </form>
+               </div>
+               <div id="imebox" contenteditable="true"></div>
+               <div id="inputbox" contenteditable="true"></div>
+               <div id="logbox"></div>
+       </body>
+</html>

-- 
To view, visit https://gerrit.wikimedia.org/r/83123
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I50e89d5a289f3fcb4fe2a6835a2ec96fb497242c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Divec <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to