%PDF- %PDF-
Direktori : /www/varak.net/wiki.varak.net/extensions/VisualEditor/lib/ve/demos/ve/ |
Current File : /www/varak.net/wiki.varak.net/extensions/VisualEditor/lib/ve/demos/ve/eventLogger.html |
<!DOCTYPE html> <html> <!-- /*! * VisualEditor keyboard event logger page * * @copyright 2011-2016 VisualEditor Team and others; see http://ve.mit-license.org */ --> <head> <meta charset="utf-8"> <title>Keyboard Event Logger</title> <style> html { margin: 0; padding: 0; height: 100%; } body { margin: 1em; padding: 0; height: 100%; } .ve-demo-form { width: 100%; min-height: 2em; } .ve-demo-content { border: 1px solid gray; width: 100%; min-height: 2em; max-height: 15%; overflow-y: auto; } .ve-demo-log { margin-top: 1em; border: 1px solid gray; width: 100%; height: 80%; white-space: pre; font-family: monospace; padding: 0; overflow-y: auto; } </style> </head> <body> <form class="ve-demo-form"> IME identifier (name and version): <input type="text" class="ve-demo-identifier"> <input type="submit" value="Start Logging Keyboard Events"> </form> <div class="ve-demo-content" contenteditable="true"></div> <textarea class="ve-demo-log"></textarea> <script src="../../lib/jquery/jquery.js"></script> <script src="../../lib/oojs/oojs.jquery.js"></script> <script src="../../lib/oojs-ui/oojs-ui.js"></script> <script src="../../lib/unicodejs/unicodejs.js"></script> <script src="../../src/ve.js"></script> <script src="../../src/ve.utils.js"></script> <script src="../../src/ve.EventSequencer.js"></script> <script> ( function () { var $form, $content, $log, startTime, oldHtml = '', oldStartOffset = 0, oldEndOffset = 0, comments, log = []; function makeEventHandler( eventName ) { return function ( e ) { logEvent( 'sendEvent', eventName, e ); }; } function makeAfterLoopHandler() { return function () { logEvent( 'endLoop' ); }; } function eventToObject( e ) { // TODO: flesh this out more if ( !e || e.keyCode === undefined ) { return {}; } else { return { keyCode: e.keyCode }; } } function logEvent( methodName, eventName, e ) { var args = [], msUtc = (new Date().getTime() - startTime) / 1000, newHtml = $content.html(), newStartOffset = document.getSelection().anchorOffset, newEndOffset = document.getSelection().focusOffset; if ( oldHtml !== newHtml ) { logWrite( { seq: log.length, time: msUtc, action: 'changeText', args: [ newHtml ] } ); oldHtml = newHtml; } if ( oldStartOffset !== newStartOffset || oldEndOffset !== newEndOffset ) { logWrite( { seq: log.length, time: msUtc, action: 'changeSel', args: [ newStartOffset, newEndOffset ] } ); oldStartOffset = newStartOffset; oldEndOffset = newEndOffset; } if ( eventName !== undefined ) { args.push( eventName ); args.push( eventToObject( e ) ); } logWrite( { seq: log.length, time: msUtc, action: methodName, args: args } ); } function logWrite( val ) { log.push( val ); showLog(); } function showLog() { var i, len, jsons = []; jsons.push( JSON.stringify( comments ) ); for ( i = 0, len = log.length; i < len; i++ ) { jsons.push( JSON.stringify( log[i] ) ); } $log.val( '[\n\t' + jsons.join(',\n\t') + '\n]' ); $log[0].scrollTop = $log[0].scrollHeight; } /** @param {jQuery.Event} e Halo form submit event */ function start( e ) { e.preventDefault(); comments = { imeIdentifier: $( '.ve-demo-identifier' ).val(), userAgent: navigator.userAgent, startDom: $content.html() }; $form.hide(); $content.show().focus(); } function init() { var i, len, eventSequencer, handlers = {}, eventNames = [ 'compositionstart', 'compositionend', 'keydown', 'keyup', 'keypress', 'input' ]; $form = $( '.ve-demo-form' ); $content = $( '.ve-demo-content' ).hide(); $log = $( '.ve-demo-log' ).val( '' ); for ( i = 0, len = eventNames.length; i < len; i++ ) { handlers[ eventNames[i] ] = makeEventHandler( eventNames[i] ); } eventSequencer = new ve.EventSequencer( eventNames ) .attach( $content ) .on( handlers ) .afterLoop( makeAfterLoopHandler() ); startTime = new Date().getTime(); $form.on( 'submit', start ); $log.on( 'click', function () { if ( this.select ) { this.select(); } } ); } init(); }() ); </script> </body> </html>