- 05.01.2012 02:28
- 05.01.2012 19:13
Ура, нашел решение, в общем код кнопки приведенный выше работает.. но есть проблемка:
нужно перед тем как заключать в теги делать из символов сущности по аналогии с функцией htmlspecialchars() в PHP. Нашел функцию на JS которая это делает:Код:Пробовал так:function htmlspecialchars(html) { html = html.replace(/&/g, "&"); html = html.replace(/</g, "<"); html = html.replace(/>/g, ">"); html = html.replace(/"/g, """); return html; }
Код:Но она не работает, думаю что параметры неверно передаю, либо неверно происходит возврат значения.(function() { tinymce.create("tinymce.plugins.myplugin", { init: function(ed,c) { ed.addButton('preCode', { title : '<code>', image : c+'/img/preCode.gif', onclick : function() { opentag = '<pre><code>'; closetag = '</code></pre>'; content = ed.selection.getSel(); function htmlspecialchars(content) { // Сначала необходимо заменить & content = html.replace(/&/g, "&"); // А затем всё остальное в любой последовательности content = html.replace(/</g, "<"); content = html.replace(/>/g, ">"); content = html.replace(/"/g, """); // Возвращаем полученное значение return content; } ed.focus(); ed.selection.setContent(opentag+content+closetag); } }); } }); tinymce.PluginManager.add("myplugin",tinymce.plugins.myplugin) } )();
Есть идея правильного решения у кого нибудь? или на ошибку укажите...Последний раз редактировалось cOAPerator; 05.01.2012 в 19:20.
- 06.01.2012 02:07
Мне не по силам дописать, знаний мало.
Ребята, за денюжку допишете эту кнопку? если согласны пишите в ЛС, объясню какой нужен функционал и обсудим стоимость. - 06.01.2012 14:05
- Регистрация: 29.11.2009
- Сообщений: 131
- Репутация: 32
function htmlspecialchars(html) {
html = html.replace(/&/g, "&");
html = html.replace(/</g, "<");
return html;
}
А в вашей функции вы получаете переменную content, а заменяете текст в переменной html. Смените везде на content и будет вам счастье. - 06.01.2012 18:05
Весёлый химик, пробовал, так:
function htmlspecialchars(content) {
content = content.replace(/&/g, "&");
content = content.replace(/</g, "<");
content = content.replace(/>/g, ">");
content = content.replace(/"/g, """);
return content;
не работает так тоже(((
Не преобразует.. и тег вставляет не с обоих сторон а оба тега в концеПоследний раз редактировалось cOAPerator; 06.01.2012 в 18:18.
- 07.01.2012 19:53
- Регистрация: 29.11.2009
- Сообщений: 131
- Репутация: 32
cOAPerator, ну лапонька, ну функцию-то ты описал, а кто ж вызывать ее будет?
Тебе надо надо , т.е. content = htmlspecialchars(content); писать после объявления этой функции, либо вообще убрать эту функцию и просто
content = content.replace(/&/g, "&");
content = content.replace(/</g, "<");
content = content.replace(/>/g, ">");
content = content.replace(/"/g, """);
оставить. Это как минимум, потому что может там еще есть с tinymce заморочки какие, а просто по javascript объясняю. - 08.01.2012 00:49
Весёлый химик, спасибо за ответ, я пробовал оба способа:
так:Код:и вот так:(function() { tinymce.create("tinymce.plugins.custombuttons", { init: function(ed,c) { ed.addButton('preCode', { title : '<code>', image : c+'/img/preCode.gif', onclick : function() { opentag = '<pre><code>'; closetag = '</code></pre>'; content = ed.selection.getSel(); function htmlspecialchars(content) { content = content.replace(/&/g, "&"); content = content.replace(/</g, "<"); content = content.replace(/>/g, ">"); content = content.replace(/"/g, """); //return content; } content = htmlspecialchars(content); ed.focus(); ed.selection.setContent(opentag+content+closetag); } }); } }); tinymce.PluginManager.add("custombuttons",tinymce.plugins.custombuttons) } )();
Код:Про то что надо вызывать написанную функцию, я подумал и попробовал сразу по аналогии с php, второй вариант попробовал но он не работает тоже.(function() { tinymce.create("tinymce.plugins.custombuttons", { init: function(ed,c) { ed.addButton('preCode', { title : '<code>', image : c+'/img/preCode.gif', onclick : function() { opentag = '<pre><code>'; closetag = '</code></pre>'; content = ed.selection.getSel(); content = content.replace(/&/g, "&"); content = content.replace(/</g, "<"); content = content.replace(/>/g, ">"); content = content.replace(/"/g, """); ed.focus(); ed.selection.setContent(opentag+content+closetag); } }); } }); tinymce.PluginManager.add("custombuttons",tinymce.plugins.custombuttons) } )();
в обоих случаях перестает вообще кнопка работать. В чем причина не могу понять никак...Последний раз редактировалось cOAPerator; 08.01.2012 в 01:25.
- 08.01.2012 13:46
- Регистрация: 29.11.2009
- Сообщений: 131
- Репутация: 32
Таки пришлось документацию по tinymce почитать :)
Код:Развлекайтесь :)<script type="text/javascript"> (function () { tinymce.create('tinymce.plugins.ExamplePlugin', { init:function (ed, url) { ed.addCommand('mceExample', function () { var opentag = '<pre><code>'; var closetag = '</code></pre>'; var content = ed.selection.getContent(); console.log(content); // content = content.replace(/&/g, "&"); // content = content.replace(/</g, "<"); // content = content.replace(/>/g, ">"); // content = content.replace(/"/g, """); ed.focus(); ed.selection.setContent(opentag + content + closetag); }); ed.addButton('example', { title:'<C>', image:url + '/img/example.gif', cmd:'mceExample' }); } }); tinymce.PluginManager.add('example', tinymce.plugins.ExamplePlugin); })(); </script>
Важное - ваша функция должна выполняться не на onclick по кнопке, а надо оформить ее отдельной командой, чтобы был доступ к объекту самого редактора, во-вторых я там жирным выделил метод получения выделнного сейчас содержимого (можно еще просто текст получать), плюс я закомментировал ваши преобразования, а то получается html-код, хотя если именно он вам и нужен - то раскомментируйте обратно.Спасибо сказали:
cOAPerator(10.01.2012), - 08.01.2012 16:04
Весёлый химик, Спасибо за столь полный и быстрый ответ. Сегодня опробую обязательно. Как я и предполагал, мне такого кода не осилить пока....
В качестве пополнения знаний, поясните пожалуйста - console.log(content); - это для регистрации событий, то есть в редакторе есть кнопки undo/redo (отменить/повторить действие) - чтобы это действие запоминалось?
- и эта функция если я правильно понял, потом все-равно привязывается вот тут
к кнопке?
суть была в том что при вставке html кода, он оставался в исходном виде при вставке в бд,а нужно было делать из тегов сущьности... чтобы при выводе не происходило обработки тегов, а осуществлялся их вывод как текст. А посему раскоментирую строки...
PS: Серьезно, низкий Вам поклон! Вы единственный кто помог за все время на 3 форумах! В качестве благодарности я напишу о вас, на своем сайте пару строк... и возражений я не приму) Напишите плиз как Ваше имя мне в ЛС, а то не нашел в профиле имени..Последний раз редактировалось cOAPerator; 08.01.2012 в 16:31.
- 08.01.2012 18:15
- Регистрация: 29.11.2009
- Сообщений: 131
- Репутация: 32
Это уберите лучше, я просто во время отладки это использовал, чтобы посмотреть значения переменных. Это в файрбаг/драгонфлай/консоль выводит значение переменной. Если не уберете - в ИЕ ошибки могут показываться.
Насчет привязки функции - да, сначала регистрируете команду "mceExample", потом назначаете ее кнопке.
Вообще код почти целиком взят с сайта tinymce - http://www.tinymce.com/wiki.php/Creating_a_pluginСпасибо сказали:
cOAPerator(10.01.2012),
Тэги топика:
Похожие темы
Темы | Раздел | Ответов | Последний пост |
---|---|---|---|
Javascript оптимизатор | Дайджест блогосферы | 0 | 13.08.2011 01:26 |
Анимированные кнопки без JavaScript | Дайджест блогосферы | 0 | 04.04.2011 16:43 |
помогите с javascript | Web программирование | 1 | 30.01.2011 14:46 |
Подозрительный Javascript/IFrame | Web программирование | 4 | 15.11.2010 20:02 |