2012-03-11 18:38:27 +00:00
|
|
|
ve.ce.ContentObserver = function( documentView ) {
|
|
|
|
// Inheritance
|
|
|
|
ve.EventEmitter.call( this );
|
|
|
|
|
|
|
|
this.$node = null;
|
|
|
|
this.interval = null;
|
|
|
|
this.frequency = 100;
|
|
|
|
this.prevText = null;
|
|
|
|
this.prevHash = null;
|
|
|
|
};
|
|
|
|
|
|
|
|
ve.ce.ContentObserver.prototype.setElement = function( $node ) {
|
|
|
|
if ( this.$node !== $node ) {
|
|
|
|
this.stop();
|
|
|
|
|
|
|
|
this.$node = $node;
|
|
|
|
this.prevText = ve.ce.Surface.getDOMText2( this.$node[0] );
|
|
|
|
this.prevHash = ve.ce.Surface.getDOMHash( this.$node[0] );
|
|
|
|
|
|
|
|
this.start();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
ve.ce.ContentObserver.prototype.stop = function() {
|
|
|
|
if ( this.interval !== null ) {
|
|
|
|
clearInterval( this.interval );
|
|
|
|
this.interval = null;
|
|
|
|
this.poll();
|
|
|
|
this.$node = null;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
ve.ce.ContentObserver.prototype.start = function() {
|
|
|
|
this.poll();
|
|
|
|
var _this = this;
|
|
|
|
setTimeout( function() { _this.poll(); }, 0);
|
|
|
|
this.interval = setInterval( function() { _this.poll(); }, this.frequency );
|
|
|
|
};
|
|
|
|
|
|
|
|
ve.ce.ContentObserver.prototype.poll = function() {
|
|
|
|
var text = ve.ce.Surface.getDOMText2( this.$node[0] );
|
|
|
|
var hash = ve.ce.Surface.getDOMHash( this.$node[0] );
|
|
|
|
|
|
|
|
if ( text !== this.prevText || hash !== this.prevHash ) {
|
|
|
|
this.emit('change', {
|
|
|
|
$node: this.$node,
|
|
|
|
prevText: this.prevText,
|
|
|
|
text: text,
|
|
|
|
prevHash: this.prevHash,
|
|
|
|
hash: hash
|
|
|
|
} );
|
|
|
|
this.prevText = text;
|
|
|
|
this.prevHash = hash;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Inheritance */
|
|
|
|
|
2012-03-09 22:18:24 +00:00
|
|
|
ve.extendClass( ve.ce.ContentObserver , ve.EventEmitter );
|