var ta = new Object(); ta.init=function($ta) { $('.editor .bPanel .eBtn').hover(function() { $(this).addClass('btnSel'); }, function() { $(this).removeClass('btnSel'); }); // $('#downloadImgBtn').click(ta.downloadImg); // $('#downloadVideoBtn').click(ta.downloadVideo); $('#addLinkBtn').click(ta.addLink); $ta.on('keyup focusout', ta.onChangeFn); $ta.on('keyup', function(e) { var code = e.keyCode ? e.keyCode : e.which; if(code == 13) { var txt = $ta[0].value; var lineEnd = $ta.getLineStartPosition(); var lineStart = 0; if (lineEnd>0) { if (lineEnd>1 && txt.substr(lineEnd-2, 2)=='\r\n') { lineEnd -= 2; } else if (txt.substr(lineEnd-1, 1)=='\r' || txt.substr(lineEnd-1, 1)=='\n') { lineEnd -= 1; } } if (lineEnd>0) { lineStart=lineEnd; var char = txt.substr(lineStart-1, 1); while (char!='\r' && char!='\n' && lineStart>0) { lineStart -= 1; char = lineStart>0?txt.substr(lineStart-1, 1):''; } } var line = txt.substring(lineStart, lineEnd); var regexp = /^([ \t]*\*[ \t]{0,3})/; var match = regexp.exec(line); if (match!=null) { if (line.length==match[0].length) { // empty line $ta.deleteText(lineStart, lineStart+match[0].length+1); $ta.setSelection(lineStart,lineStart); } else { $ta.replaceSelectedText('* '); }; }; // $('#test').html(txt.substr(lineStart,lineEnd-lineStart)); }; }); $ta.on("keydown", function(e) { var code = e.keyCode ? e.keyCode : e.which; if(code == 8) { // remove *{space} on backspace var txt = $ta[0].value; var lineStart = $ta.getLineStartPosition(); var p1=txt.indexOf('\n',lineStart); var p2=txt.indexOf('\r',lineStart); var lineEnd = p1>=0?p1:lineStart; lineEnd = (p2>=0&&p2/g,'>'); val=val.replace(/\r/g,'\n'); val=val.replace(/(youtube:[^\s]+)/g,'\n$1\n'); val=val.replace(/(\[QUOTE\]|\[\/QUOTE\])/g,'\n$1\n'); val=val.replace(/(\[H\])/g,'\n$1'); val=val.replace(/(\[\/H\])/g,'$1\n'); var lines = val.split('\n'); for (var i=0;i to prev line lines[i-1]=lines[i-1]+'\n'; ulOpened=false; } if (line==''||line=='[H]'||line=='[/H]'||line=='[QUOTE]'||line=='[/QUOTE]') { } else if (line.startsWith('[H]')&&line.endsWith('[/H]')) { } else if (line.startsWith('youtube')) { } else if (line.startsWith('* ') || line=='*') { lines[i]=(!ulOpened?''; val = val.replace(/\[B\](.*?)\[\/B\]/g,'$1'); val = val.replace(/\[U\](.*?)\[\/U\]/g,'$1'); val = val.replace(/\[I\](.*?)\[\/I\]/g,'$1'); val = val.replace(/\[H\](.*?)\[\/H\]/g,'

$1

'); val = val.replace(/\[QUOTE\]\n

([\s\S]*?)<\/p>\n\[\/QUOTE\]/g,'

\n

$1

\n
'); val = val.replace(/\[QUOTE\]([\s\S]*?)\[\/QUOTE\]/g,'
$1
'); val = val.replace(/(https?:\/\/(st.)?turtella\.ru\/photos\/[0-9]{1,5}\/l[0-9]{1,10}\.jpg)/g,''); // val = val.replace(/(https?:\/\/img\..+\/[0-9]{1,10}\.jpg)\((.*)\)/g,'$2'); val = val.replace(/(https?:\/\/img\..+\/[0-9]{1,10}\.jpg)(?:\((.*)\))?/g, ta.replacer); val = val.replace(/\.jpg\((.*)\)/g,'.jpg" alt="$1" title="$1"'); val = val.replace(/\[L\s*URL=(.*?) +TXT=(.*?)](.*?)\[\/L\]/g,'$3'); val = val.replace(/\[[AL]\s*URL=(.*?)](.*?)\[\/[AL]\]/g,'$2'); val = val.replace(/youtube:([a-zA-Z0-9-_]{5,}):([^\s]+)/g,''); $('#preview').html(val); $('#taTxtLen').html(val.length); }, 10); }; ta.replacer = function(match, p1, p2, offset, string) { return `${p2}`; } ta.isValidSelection=function(str) { return (str.indexOf('\n')<0 && str.indexOf('\r')<0); }; ta.imgUploadDone = function(result) { $('#imgUpload').bPopup().close(); if (result.startsWith('OK:')) { var o = JSON.parse(result.substring(3)); var $ta = $("#ta"); if (o.hasOwnProperty("type") && o.type=='garticle') { $ta.replaceSelectedText(' '+getGArticleImgUrl(o.imgId)+' ',"collapseToEnd"); } else { $ta.replaceSelectedText(' '+o.url+' ',"collapseToEnd"); } ta.onChangeFn(); } else { msg.showErr('Ошибка', 'Изображение не может быть загружено.'); } }; ta.downloadImg = function() { var url = $('#imgUrl').val(); if (url!='') { ajx.request({ data: {url: url}, success: function(data, status, request) { ta.imgUploadDone(data); }, url: '/ajax/downloadImg/'+$('#imgType').val()+'/' }); } }; ta.addLink = function() { var url = $('#linkUrl').val(); if (isValidUrl(url)) { var $ta = $("#ta"); if (ta.isLnk) { $ta.surroundSelectedText("[L URL="+url+"]", "[/L]"); } else { $ta.surroundSelectedText("[A URL="+url+"]", "[/A]"); } $('#userLink').bPopup().close(); ta.onChangeFn(); } else { $('#userLinkErr').show(); } }; ta.downloadVideo = function() { var url = $('#videoUrl').val(); if (url!='') { ajx.request({ data: {url: url}, success: function(data, status, request) { $('#videoUpload').bPopup().close(); if (data.startsWith('VALID:')) { var idUrl = data.substring(6); var pos = idUrl.indexOf(':'); if (pos>0) { var videoId = idUrl.substring(0,pos); var videoImg = idUrl.substring(pos+1); var $ta = $("#ta"); $ta.replaceSelectedText(' youtube:'+videoId+':'+videoImg+' ',"collapseToEnd"); ta.onChangeFn(); } } else { var err = 'Ошибка обработки видео'; if (data=='BAD_URL') { err = 'Неверный адрес видео'; } else if (data=='CANT_FIND') { err = 'Указанное Вами видео не найдено'; } else if (data=='NOT_EMBEDDABLE') { err = 'Данное видео не может быть встроено на сторонних сайтах'; } msg.showErr('Ошибка', err); } }, url: '/ajax/downloadVideo/' }); } };