var alaem = ' .،؛,:'; var letterYeh = "یي"; var pishVand = ' نمی ' var letterNoChasban = "ءاإأآؤدذرزو"; var pasvands = " ها هایی های هایش هایم هایشان هایتان هایمان ای اید ایم اند ام"; var pairedAlaemEnd = '}>])﴾»\"'; var pairedAlaemBeg = '{<[(﴿«\"'; var sanadVaseth = ' عن عنه '; var sanadEnd = ' سالت سألت قلت قال یقول قالوا قالا قلنا '; var wlast = ''; var indexlast = -1; var onCharacterKeyPress = function isCharacterKeyPress(evt) { if (typeof evt.which == "undefined") { // This is IE, which only fires keypress events for printable keys return true; } else if (typeof evt.which == "number" && evt.which > 0) { // In other browsers except old versions of WebKit, evt.which is // only greater than zero if the keypress is a printable key. // We need to filter out backspace and ctrl/alt/meta key combinations return !evt.ctrlKey && !evt.metaKey && !evt.altKey && evt.which != 8; } return false; } function isErab(c){ return c.match(/[\u064B-\u0652]/g); } function removeErab(text){ text = text.replace(/[\u064B-\u0652]/g, ''); return text; } function isPairedChar(c){ var index = pairedAlaemBeg.indexOf(c); if( index === -1 ) return ''; return pairedAlaemEnd[index]; } function isAlaem(c){ //var c = String.fromCharCode(keyCode); return alaem.indexOf(c) !== -1; } function getNextWord(text, index){ var w = ''; if(index < 0 ) index = 0; for(var i=index; i < text.length; i++ ) { var c = text[i]; if(alaem.indexOf(text[i]) !== -1) return w; w += text[i]; } return w; } function getLastWord(text, index){ var w = ''; if(index>=text.length ) index = text.length-1; for(var i=index; i >= 0; i-- ) { var c = text[i]; if(isAlaem(text[i])) return w; w = text[i] + w; } return w; } function isHalfSpaceNeed(range){ var index = -1; var w1 = '', w2 = ''; var ret = [index, w1, w2 ]; var text = range.endContainer.data; var i1 = range.endOffset - ' '.length; //var i1 = text.length-1 - ' '.length; var w1 = getLastWord(text, i1); var w2 = ''; if(w1 != '') { wlast = w1; indexlast = i1 + 1 + ' '.length; w2 = getLastWord(text, i1-w1.length-1); } if(w2 === '') return ret; var correcting = false; var c2Last = w2[w2.length-1]; if(letterYeh.indexOf(c2Last) !== -1){ if( w2.length < 3 || pishVand.indexOf(' ' + w2) !== -1) correcting = true; } if( !correcting && letterNoChasban.indexOf(c2Last) === -1) { if(pasvands.indexOf(' ' + w1) !== -1) { correcting = true; } } if(correcting){ // می شود ... ret[0] = range.endOffset-w1.length-1; // space position ret[1] = w1; // شود ret[2] = w2; //می return ret; } else return ret; } function isTextElement(range) { return range.endContainer != null && range.endContainer.nodeType === 3; } function unSelect(editor){ if(!editor.selection.isCollapsed()){ editor.selection.collapse(false); editor.focus(); } } function selectParag(editor){ var range = editor.selection.getRng().cloneRange(); var node = range.endContainer; while( !isValidLineTag(node) ) { if( node.parentNode == null ) break; node = node.parentNode; } if(node === null) return false; range.selectNodeContents(node); editor.selection.setRng(range); editor.focus(); return true; } function selectWord(editor){ //var b = tinyMCE.Env.browser.isIE(); if (editor.selection.isCollapsed()) { if (tinyMCE.Env.browser.isIE()) { // Internet Explorer var range = editor.selection.getRng().cloneRange(); var text = range.endContainer.data; if(text.length == 0) return false; var i1 = range.endOffset-1; if( i1<0 ) i1 = 0; if( i1 >= text.length ) i1 = text.length-1; var c = text[i1]; var w = ''; while( i1 >= 0 && !isAlaem(text[i1])){ i1--; } if (i1 < 0) i1 = 0; if(isAlaem(text[i1])) i1++; w = getNextWord(text, i1); range.setStart(range.endContainer, i1); range.setEnd(range.endContainer, i1+w.length); editor.selection.setRng(range); editor.focus(); return true; } } return false; } function isLetter(keyCode){ if ( (keyCode < 65 ) || (keyCode > 90 && keyCode < 97 ) || (keyCode > 122 && keyCode < 161 ) || (keyCode > 1631 && keyCode < 1646 ) ){ return false; } return true; } function getRange(editor){ var range = editor.selection.getRng().cloneRange(); if(editor.selection.isCollapsed()){ var node = range.endContainer; while( !isValidLineTag(node) ) { if( node.parentNode == null ) break; node = node.parentNode; } if(node === null) return; range.selectNodeContents(node); } editor.selection.setRng(range); return range; } function removeContentErab(editor){ var range = getRange(editor); var text = editor.selection.getContent(); text = removeErab(text); editor.undoManager.add(); //editor.undoManager.transact(function () { editor.selection.setContent(text); //}); range.collapse(false); editor.focus(); return true; } function parseHadith(editor){ var range = getRange(editor); var text = editor.selection.getContent(); if(text.indexOf('class="tsanad"') != -1 || text.indexOf('class="thadith"') != -1){ range.collapse(false); editor.focus(); return false; } var text2 = ''; var sanadvalid = false; var w = '', w2 = ''; for(var i=0; i < text.length; i++ ) { var c = text[i]; if(isAlaem(c)){ w2 += c; if(!sanadvalid && w != ''){ if(sanadEnd.indexOf(' ' + w) != -1){ text2 = '' + text2 + w2 + ''; text2 += '' sanadvalid = true; w2 = ''; w = ''; continue; } } text2 += w2; w2 = ''; w = ''; } else { w2 += c; if( !isErab(c) ) w += c; } } text2 += w2; if(sanadvalid) text2 += ''; editor.undoManager.add(); //editor.undoManager.transact(function () { editor.selection.setContent(text2 + ' '); //}); range.collapse(false); editor.focus(); return true; } function checkPairedChar(editor, e){ var range = editor.selection.getRng().cloneRange(); if( isTextElement(range)){ var c = isPairedChar(e.key); if( c!== '' ){ if(!editor.selection.isCollapsed()){ editor.selection.setContent( e.key + editor.selection.getContent() + c); editor.focus(); return true; } else{ editor.execCommand('mceInsertContent', false, e.key + c); //editor.selection.setContent( e.key + c); var range2 = editor.selection.getRng().cloneRange(); if(range2.endContainer.nodeType == 3) range2.setEnd(range2.endContainer, range2.endOffset-1); else if(range2.endContainer.nodeType==1 && range2.endContainer.lastChild && range2.endContainer.lastChild.nodeType == 3) range2.setEnd(range2.endContainer.lastChild, range2.endContainer.lastChild.textContent.length-1); else return true; editor.selection.setRng(range2); editor.focus(); return true; } } } return false; } function setingTag2(editor, e){ if(e.keyCode === 35 || e.key === '#'){ //'#' var range = editor.selection.getRng().cloneRange(); var text = range.endContainer.data; var i1 = range.endOffset; if(i1< text.length){ var w1 = getNextWord(text,i1) if(w1.length > 0){ range.setStart(range.endContainer,i1-1); range.setEnd(range.endContainer, i1+w1.length+1); editor.selection.setRng(range); var t = editor.selection.getContent(); if(t[0] === '#') t = t.substring(1); editor.selection.setContent(''+t+''); editor.focus(); return true; } } return false; } return false; } function setingTag(editor, e, range){ if(isLetter(e.keyCode) ){ var text = range.endContainer.data; var i1 = range.endOffset-1; if( i1 > 0 ){ if( text[i1-1] === '#' && text[i1-2] === ' ') { if( !isTagging(range.endContainer.parentNode) ){ range.setStart(range.endContainer,i1-1); range.setEnd(range.endContainer, i1+1); editor.selection.setRng(range); editor.selection.setContent(''+editor.selection.getContent()+''); range.selectNodeContents(range.endContainer.nextSibling); range.collapse(false); editor.selection.setRng(range); editor.focus(); return true; } } } } return false; } function endigTag(editor, e, range){ if(isTagging(range.endContainer.parentNode)){ var tag = range.endContainer.parentNode; var t = tag.innerText; if(t.length < 2) return false; if(t[0] === '#') t = t.substring(1); range.selectNodeContents(tag); editor.selection.setRng(range); editor.selection.setContent(t); if(e.keyCode == 13) tinyMCE.execCommand('removeformat'); else if(tag.nextSibling) { range.setStart(tag.nextSibling,0); range.setEnd(tag.nextSibling,0); editor.selection.setRng(range); editor.selection.setContent( ' ' + editor.selection.getContent()); } editor.focus(); return true; } return false; } function endingMarkDowns(editor, e){ var range = editor.selection.getRng().cloneRange(); if(e.keyCode === 13){ if(endigTag(editor, e, range)) return true; } return false; } function checkMarkDown(editor, e){ var range = editor.selection.getRng().cloneRange(); if( isTextElement(range)){ if( editor.selection.isCollapsed() ){ if(e.keyCode == 32 || e.keyCode == 160 ){ var text = range.endContainer.data; var i1 = range.endOffset-1 - ' '.length; //var i1 = text.length-1 - ' '.length; var w1 = ''; var numbering = false; const regex = /\d/g; if( i1 > 0 ){ if( text[i1] === '.') { if(regex.exec(text[i1-1]) !== null ){ w1 = text[i1-1] +'.'; numbering = true; } } } if(w1 === '') w1 = getLastWord(text,i1); if(w1 === '') return false; var index = i1-w1.length; if(index < 0) index = 0; // if( w1 === 'آیه' || w1 === 'آيه'){ // editor.undoManager.transact(function () { // tinyMCE.execCommand('mceInsertContent', false, '-'); // }); // //tinyMCE.execCommand('ayahautocomplate', true, 'ناس'); // return true; // } if(w1 === '=' || w1 === '==' || w1 === '===' || w1 ==='*' || numbering ) { if(index != 0) return false; var node = range.endContainer; while( !isValidLineTag(node) ) { if( node.parentNode == null ) break; node = node.parentNode; } var id = ""; if(node == null) { range.setStart(range.endContainer,index); range.setEnd(range.endContainer, index + w1.length); } else { range.selectNodeContents(node); id = node.getAttribute('id'); } editor.selection.setRng(range); if(id != null && id != '') id = ' id="'+id+'"'; else id = ''; var nodefocus = range.endContainer; var t = editor.selection.getContent(); if(t.length >= w1.length && t.substring(0,w1.length) === w1) t = t.substring(w1.length); if(numbering) { var m = regex.exec(w1[0]); editor.selection.setContent('