VSHY
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Код: /// Used from menu // VladSh (2015.04.06) // Gets the selected text on the page and input fields; author: Lex1 var getSel = function(fConvertName /* several separate with # */, w /*window or frame*/) { var s = ''; if (arguments.length < 2) w = window; var d = w.document; if (d.selection) { var r = d.selection.createRange(); s = r ? r.text : ''; } else { s = d.getSelection().toString(); if (!s) { var e; var t = d.getElementsByTagName('textarea'); var u = d.getElementsByTagName('input'); var i = t.length; while (e = (i > 0) ? t[--i] : u[-i--]) { try { if (e.offsetHeight > 0 && (s = e.value.substring(e.selectionStart, e.selectionEnd))) break; } catch(x) {} } } } if (!s) { for (var j = 0, f; f = window.frames[j]; j++) { try { if (s = getSel(fConvertName, f)) break; } catch(x) {} } } if (fConvertName) { var converts = fConvertName.split('#'); for (var i = 0; i < converts.length; i++) { if (converts[i].search('replace') == -1) { // evaluate js-function s = eval(converts[i] + '(' + JSON.stringify(s) + ')'); } else { // replace predefined sibols to new text (often - empty string) var params = converts[i].replace(/\ {2,}/g, ' ').split(" "); /* deduplicate spaces & serarate */ var newText = (params.length > 1 && params[2] != undefined) ? params[2] : '""'; s = eval(JSON.stringify(s) + '.' + params[0] + '(/[' + params[1] + ']/g, ' + newText + ')'); } } } return s; }; // escape function with the Russian characters function escapeRu(str) { var trans = []; for (var i = 0x410; i <= 0x44F; i++) trans[i] = i - 0x350; trans[0x401] = 0xA8; trans[0x451] = 0xB8; var ret = []; for (var i = 0; i < str.length; i++) { var n = str.charCodeAt(i); if (typeof trans[n] != 'undefined') n = trans[n]; if (n <= 0xFF) ret.push(n); } return escape(String.fromCharCode.apply(null, ret)); } // Items, opened url var openUrl = function(url, sel, bFullScreen) { if (sel) { var params = ''; if (bFullScreen) params = 'fullscreen=yes,scrollbars=yes,location=yes'; else params = 'width=946,height=576,left=100,top=100,scrollbars=yes,location=no'; window.open(url.replace('#SEL#', sel), '', params); } }; // in small screen var openUrlS = function(url, fcn) { openUrl(url, getSel(fcn), 0); }; // in full screen var openUrlF = function(url, fcn) { openUrl(url, getSel(fcn), 1); }; // Insert tags around selected text var insertTags = function(tagOpen, tagClose) { var ta = window.document.getElementsByTagName('textarea'); if (ta.length) { var le = ta.length - 1; var t = ta[le]; for (var i = le - 1; i >= 0; i--) { if (ta[i].rows >= 5 && ta[i].offsetHeight) { t = ta[i]; break; } } var val = tagOpen + getSel('') + tagClose; var cpos = t.selectionStart; t.value = t.value.substr(0, cpos) + val + t.value.substr(t.selectionEnd); cpos += val.length; t.setSelectionRange(cpos, cpos); t.focus(); } }; // NB: link in address field should be selected var copyStructure = function(type /* "html" or "bbcode" */) { var d = window.document; var url = '', lbl = ''; var a = d.activeElement; if (a instanceof HTMLBodyElement) { url = d.location.href; lbl = d.title; } else { if (a.href.search('script') != -1) { lbl = a.href; } else { url = a.href; lbl = a.innerText; } } if (url) { lbl = lbl.replace(/^\s+|\s+$/g, ''); var t = d.createElement('textarea'); switch (type) { case "bbcode": t.value = '' + lbl + ''; break; case "html": t.value = '<a href="' + url + '">' + lbl + '</a>'; break; default: alert('Структура ссылки ' + type + ' не обрабатывается. Копирование невозможно.'); url = ''; return; } t.style = 'position:fixed;opacity:0;left:0;top:0;'; d.documentElement.appendChild(t); t.focus(); t.setSelectionRange(0, t.value.length); setTimeout(function(){d.documentElement.removeChild(t)}, 200); } else { alert('Выбранный объект не обрабатывается. Копирование невозможно.'); url = ''; } } |
| Всего записей: 1092 | Зарегистр. 19-05-2008 | Отправлено: 14:52 07-03-2016 | Исправлено: VSHY, 15:08 07-03-2016 |
|