mirror of
https://github.com/UnickSoft/graphonline.git
synced 2026-04-18 14:20:08 +00:00
first commit
This commit is contained in:
160
lib/ckeditor4/plugins/stat/plugin.js
Executable file
160
lib/ckeditor4/plugins/stat/plugin.js
Executable file
@@ -0,0 +1,160 @@
|
||||
/*
|
||||
* @file text statistics plugin for CKEditor
|
||||
* Copyright (C) 2012 Chupurnov Valeriy <leroy@xdan.ru>(http://xdan.ru)
|
||||
* @version 1.5
|
||||
*
|
||||
* == BEGIN LICENSE ==
|
||||
*
|
||||
* Licensed under the terms of any of the following licenses at your
|
||||
* choice:
|
||||
*
|
||||
* - GNU General Public License Version 2 or later (the "GPL")
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||
* http://www.gnu.org/licenses/lgpl.html
|
||||
*
|
||||
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
*
|
||||
* == END LICENSE ==
|
||||
*
|
||||
*/
|
||||
|
||||
CKEDITOR.plugins.add( 'stat',{
|
||||
lang : 'en,ru,fr',
|
||||
init : function( editor ){
|
||||
var trim = function ( str ){
|
||||
return str.replace(/^[\s]+([^\s])/g,'$1').replace(/([^\s])[\s]+$/g,'$1');
|
||||
}
|
||||
var wordcount = function ( text ) {
|
||||
text = text.replace(/(\r\n|\n|\r)/gm, ' ').replace(/ /g, ' ');
|
||||
return trim(strip(text)).split(/\s+/).length;
|
||||
}
|
||||
var getAreaSelection = function () {
|
||||
var textArea = editor.textarea.$;
|
||||
if ( document.selection ) { //IE
|
||||
var bm = document.selection.createRange().getBookmark();
|
||||
var sel = textArea.createTextRange();
|
||||
sel.moveToBookmark(bm);
|
||||
var sleft = textArea.createTextRange();
|
||||
sleft.collapse(true);
|
||||
sleft.setEndPoint("EndToStart", sel);
|
||||
textArea.selectionStart = sleft.text.length
|
||||
textArea.selectionEnd = sleft.text.length + sel.text.length;
|
||||
textArea.selectedText = sel.text;
|
||||
}else if (textArea.selectionStart){ //FF
|
||||
textArea.selectedText = textArea.value.substring(textArea.selectionStart,textArea.selectionEnd);
|
||||
}
|
||||
return textArea.selectedText;
|
||||
}
|
||||
var getAreaSelection1 = function(){
|
||||
var startPos = 0, endPos = 0 , selection ='';
|
||||
if ( editor.mode != 'source' ) return '';
|
||||
if (typeof(editor.textarea.$.selectionStart) != "undefined") {
|
||||
startPos = editor.textarea.$.selectionStart; endPos = editor.textarea.$.selectionEnd;
|
||||
}else{
|
||||
if (window.getSelection){
|
||||
selection = window.getSelection();
|
||||
}else if (document.getSelection){
|
||||
selection = document.getSelection();
|
||||
}else if (document.selection){
|
||||
selection = document.selection.createRange().text;
|
||||
}
|
||||
if( selection ){
|
||||
startPos = editor.textarea.$.indexOf(selection);
|
||||
if (startPos!= 0)
|
||||
endPos = editor.textarea.$.indexOf(selection) + selection.length;
|
||||
}
|
||||
}
|
||||
return editor.textarea.$.value.substring( startPos, endPos );
|
||||
}
|
||||
var strip = function( str,option ) {
|
||||
var key = '';
|
||||
var matches = [];
|
||||
str += '';
|
||||
matches = str.match(/(<\/?[\S][^>]*>|&[a-z]+;)/gi);
|
||||
for (key in matches) {
|
||||
if ( isNaN(key) )continue;
|
||||
str = str.split(matches[key].toString()).join(' ');
|
||||
}
|
||||
if ( option == 'nospace' )
|
||||
return trim( str.replace(/[\s]/gi,'') );
|
||||
else
|
||||
return str;
|
||||
}
|
||||
var timerstatText = 0;
|
||||
var statText = function(){
|
||||
clearTimeout(timerstatText);
|
||||
timerstatText = setTimeout(function(){
|
||||
var text = editor.getData()+'';
|
||||
document.getElementById( 'cke_stat_word_number_'+editor.name )&& (document.getElementById( 'cke_stat_word_number_'+editor.name ).innerHTML = editor.lang.stat.words+':'+wordcount(text));
|
||||
document.getElementById( 'cke_stat_'+editor.name )&& (document.getElementById( 'cke_stat_'+editor.name ).innerHTML = editor.lang.stat.strlen+':'+strip(text).length);
|
||||
document.getElementById( 'cke_stat_source_'+editor.name )&& (document.getElementById( 'cke_stat_source_'+editor.name ).innerHTML = editor.lang.stat.source+':'+text.length);
|
||||
},100);
|
||||
};
|
||||
editor.on( 'instanceReady', function(e) {
|
||||
var places = ['stat','stat_select','stat_source','stat_without_space','stat_word_number'];
|
||||
var style = 'float:left; line-height:23px; margin-left:10px;';
|
||||
for(var r in places){
|
||||
var div = document.createElement('div');
|
||||
div.setAttribute('id','cke_'+places[r]+'_'+editor.name);
|
||||
div.setAttribute('style',style);
|
||||
CKEDITOR.document.getById( editor.ui.spaceId("bottom") ).append(new CKEDITOR.dom.node(div));
|
||||
}
|
||||
window.onmousemove = function(e){
|
||||
if( startSelect )getStatSelect();
|
||||
};
|
||||
window.onmouseup = function(e){
|
||||
startSelect = false;
|
||||
};
|
||||
statText();
|
||||
});
|
||||
var timerSelect = 0;
|
||||
function _getStatSelect(){
|
||||
var text = '';
|
||||
if ( editor.mode == 'wysiwyg' ){
|
||||
var sel = editor.getSelection();
|
||||
text = (sel&&sel.getType()==CKEDITOR.SELECTION_TEXT&&sel.getSelectedText()!==null)?strip(sel.getSelectedText(),'nospace'):'';
|
||||
}else{
|
||||
if(!window["codemirror_"+editor.id])
|
||||
text = getAreaSelection();
|
||||
else text = window["codemirror_"+editor.id].getSelection();
|
||||
}
|
||||
document.getElementById( 'cke_stat_select_'+editor.name )&&(document.getElementById( 'cke_stat_select_'+editor.name ).innerHTML = editor.lang.stat.sel+':'+text.replace(/[\s\n\r]/g,'').length);
|
||||
}
|
||||
var getStatSelect = function(){
|
||||
clearTimeout(timerSelect);
|
||||
timerSelect = setTimeout(_getStatSelect,100);
|
||||
}
|
||||
var keyDownEvent = function(e){
|
||||
if ( e.data.$.shiftKey ){
|
||||
var keyCode = e.data.$.keyCode;
|
||||
if( keyCode>=33&&keyCode<=40 )getStatSelect();
|
||||
}
|
||||
}
|
||||
var startSelect = false;
|
||||
editor.on( 'mode', function( e ){
|
||||
if ( editor.mode != 'source' )
|
||||
return;
|
||||
editor.textarea.on( 'keyup',keyDownEvent);
|
||||
editor.textarea.on('mousedown',function(e){
|
||||
startSelect = true;
|
||||
});
|
||||
});
|
||||
editor.on( 'contentDom', function(e){
|
||||
this.getCommand('cut').on('state',getStatSelect)
|
||||
editor.document.on('keyup',keyDownEvent);
|
||||
editor.document.on('mousedown',function(e){
|
||||
startSelect = true;
|
||||
});
|
||||
editor.document.on('mouseup',function(e){
|
||||
startSelect = false;
|
||||
});
|
||||
});
|
||||
editor.on( 'selectionChange', getStatSelect );
|
||||
editor.on('key', statText);
|
||||
editor.on('afterCommandExec', statText);
|
||||
editor.on('dialogHide', statText);
|
||||
}
|
||||
} );
|
||||
Reference in New Issue
Block a user