https://www.mediawiki.org/wiki/Special:Code/MediaWiki/112240
Revision: 112240
Author: inez
Date: 2012-02-23 20:11:04 +0000 (Thu, 23 Feb 2012)
Log Message:
-----------
Move playground to demos subdirectory
Added Paths:
-----------
trunk/extensions/VisualEditor/demos/playground/
trunk/extensions/VisualEditor/demos/playground/index.html
trunk/extensions/VisualEditor/demos/playground/playground.js
Added: trunk/extensions/VisualEditor/demos/playground/index.html
===================================================================
--- trunk/extensions/VisualEditor/demos/playground/index.html
(rev 0)
+++ trunk/extensions/VisualEditor/demos/playground/index.html 2012-02-23
20:11:04 UTC (rev 112240)
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+
+<html>
+ <head>
+ <title>Playground</title>
+ <style>
+ #editor {
+ width: 300px;
+ height: 300px;
+ border: solid 1px;
+ }
+ </style>
+ <script src="../modules/jquery/jquery.js"></script>
+ <script src="../modules/rangy/rangy-core.js"></script>
+ <script src="playground.js"></script>
+ </head>
+ <body>
+ <div contenteditable="true" id="editor">
+ </div>
+ </body>
+</html>
Property changes on: trunk/extensions/VisualEditor/demos/playground/index.html
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/extensions/VisualEditor/demos/playground/playground.js
===================================================================
--- trunk/extensions/VisualEditor/demos/playground/playground.js
(rev 0)
+++ trunk/extensions/VisualEditor/demos/playground/playground.js
2012-02-23 20:11:04 UTC (rev 112240)
@@ -0,0 +1,200 @@
+app = function () {
+ var _this = this,
+ $document = $( document );
+
+ this.$editor = $('#editor');
+
+ this.$editor.bind( {
+ 'focus': function( e ) {
+ $document.unbind( '.surfaceView' );
+ $document.bind( {
+ 'keydown.surfaceView': function( e ) {
+ return _this.onKeyDown( e );
+ },
+ 'keyup.surfaceView': function( e ) {
+ return _this.onKeyUp( e );
+ },
+ 'keypress.surfaceView': function( e ) {
+ return _this.onKeyPress( e );
+ }
+ } );
+ },
+ 'blur': function( e ) {
+ $document.unbind( '.surfaceView' );
+ }
+ } );
+
+ this.$editor.mousedown( function(e) {
+ return _this.onMouseDown( e );
+ } );
+
+ // Set initial content for the "editor"
+ this.$editor.html("<b>Lorem Ipsum is simply dummy text</b> of the
printing and typesetting industry. <b>Lorem Ipsum has been the
<i>industry's</i> standard</b> dummy text ever since the 1500s, when an unknown
printer took a galley of type and scrambled it <u>to <b>make <i>a type</i>
specimen</b> book.</u>");
+ this.$editor.addClass('leafNode');
+
+ this.keypress = false;
+ this.keyup = false;
+ this.keydown = false;
+ this.mousedown = false;
+ this.inime = false;
+ this.prevText = app.getDOMText(this.$editor[0]);
+
+ setInterval(function() {
+ _this.loopFunc();
+ }, 100);
+};
+
+app.prototype.onKeyPress = function() {
+ //console.log("onKeyPress");
+ this.keypress = true;
+ if ( e.which === 229 ) {
+ this.inime = true;
+ }
+};
+
+app.prototype.onKeyUp = function() {
+ //console.log("onKeyUp");
+ this.keyup = true;
+ if ( this.inime ) {
+ this.inime = false;
+ }
+};
+
+app.prototype.onKeyDown = function( e ) {
+ //console.log("onKeyDown");
+ this.keydown = true;
+ if ( e.which === 229 ) {
+ this.inime = true;
+ }
+};
+
+app.prototype.onMouseDown = function() {
+ this.mousedown = true;
+
+ if ( this.inime ) {
+ this.inime = false;
+ }
+};
+
+app.prototype.loopFunc = function() {
+ var text = app.getDOMText(this.$editor[0]);
+
+ if(text != this.prevText) {
+
+ var selection = rangy.getSelection();
+
+
+
+ // keyup in IE
+ // keypress and keydown in FF and Chrome
+ if ( (($.browser.msie && !this.keyup) || (!$.browser.msie &&
!this.keypress && !this.mousedown)) && !this.inime ) {
+ console.log(this.inime);
+ console.log('SPELLCHECK');
+ this.prevText = text;
+ this.keypress = false;
+ this.keyup = false;
+ this.mousedown = false;
+ return;
+ }
+
+ console.log("keyboard");
+ // we are going to need a cursor position
+ var offset = this.getOffset( selection.anchorNode,
selection.anchorOffset );
+ var diffLength = text.length - this.prevText.length;
+ //console.log("diffLength: " + diffLength);
+
+ if ( diffLength > 0 ) {
+ //console.log( text.substring(offset - diffLength,
offset) );
+ } else if ( diffLength === 0 ) {
+ //console.log( text.substring(offset - 1, offset) );
+ }
+
+
+ this.prevText = text;
+ }
+ this.keypress = false;
+ this.keyup = false;
+ this.keydown = false;
+ this.mousedown = false;
+};
+
+app.getDOMText = function( elem ) {
+ var nodeType = elem.nodeType,
+ ret = '';
+
+ if ( nodeType === 1 || nodeType === 9 ) {
+ // Use textContent || innerText for elements
+ if ( typeof elem.textContent === 'string' ) {
+ return elem.textContent;
+ } else if ( typeof elem.innerText === 'string' ) {
+ // Replace IE's carriage returns
+ return elem.innerText.replace( /\r\n/g, '' );
+ } else {
+ // Traverse it's children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
+ ret += app.getDOMText( elem );
+ }
+ }
+ } else if ( nodeType === 3 || nodeType === 4 ) {
+ return elem.nodeValue;
+ }
+
+ return ret;
+};
+
+app.prototype.getOffset = function( localNode, localOffset ) {
+ var $node = $( localNode );
+
+ if ( $node.hasClass( 'leafNode' ) ) {
+ return localOffset;
+ }
+
+ while( !$node.hasClass( 'leafNode' ) ) {
+ $node = $node.parent();
+ }
+
+ var current = [$node.contents(), 0];
+ var stack = [current];
+
+ var offset = 0;
+
+ while ( stack.length > 0 ) {
+ if ( current[1] >= current[0].length ) {
+ stack.pop();
+ current = stack[ stack.length - 1 ];
+ continue;
+ }
+ var item = current[0][current[1]];
+ var $item = current[0].eq( current[1] );
+
+ if ( item.nodeType === 3 ) {
+ if ( item === localNode ) {
+ offset += localOffset;
+ break;
+ } else {
+ offset += item.textContent.length;
+ }
+ } else if ( item.nodeType === 1 ) {
+ if ( $( item ).attr('contentEditable') === "false" ) {
+ offset += 1;
+ } else {
+ if ( item === localNode ) {
+ offset += localOffset;
+ break;
+ }
+
+ stack.push( [$item.contents(), 0] );
+ current[1]++;
+ current = stack[stack.length-1];
+ continue;
+ }
+ }
+ current[1]++;
+ }
+
+ return offset;
+};
+
+$(function() {
+ new app();
+});
\ No newline at end of file
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs