За последние 24 часа нас посетили 17719 программистов и 1628 роботов. Сейчас ищут 1127 программистов ...

Онлайн текстовые редакторы.

Тема в разделе "JavaScript и AJAX", создана пользователем Trank, 26 сен 2007.

  1. Trank

    Trank Активный пользователь

    С нами с:
    5 июл 2007
    Сообщения:
    24
    Симпатии:
    0
    кто подскажет принципы работы TinyMCE и ему подобных библиотек?

    вот редактор http://www.worz.ru/

    Как работает?
    Там как-то textarea подкладывается, но ее не видно. В место нее отображается блок форматированного текста.

    TinyMCE хотел разложить, да в ней код нечитабельный...
     
  2. Kanat Taumenov

    Kanat Taumenov Активный пользователь

    С нами с:
    16 сен 2007
    Сообщения:
    16
    Симпатии:
    0
    Адрес:
    Казахстан, Уральск
    то есть нечитабельный?
    обычно есть файл *_src.js - там все читабельно.
    а самому понять принцип работы будет очень трудновато, не зная тонкостей программирования на js.
     
  3. Trank

    Trank Активный пользователь

    С нами с:
    5 июл 2007
    Сообщения:
    24
    Симпатии:
    0
    Там текст не форматированный... Все в одну строчку...

    Если уж тут у бывалых не найдется, то тогда да. Тогда буду ковырять до посинения. Очень мне интересно стало.
     
  4. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    Trank
    сам разберись, никто не сможет тебе объяснить, это слишком долгий расказ, который по памяти не расскажешь.
     
  5. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    в php классы и методы в js прототипы и функции, а так одно и тоже, тока вид сбоку.
     
  6. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Поверхностно смотрел на код визуального редактора. Как понял, там iframe наложен на textarea. Но вот как посылать данные в textarea из iframe так я не понял.
    Объясните принцип, пожалуйста.
     
  7. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
  8. Trank

    Trank Активный пользователь

    С нами с:
    5 июл 2007
    Сообщения:
    24
    Симпатии:
    0
    Как интересно.
    А найдется такой же простенький пример визуального редактора основанного НЕ на свойстве designMode?
     
  9. Anonymous

    Anonymous Guest

    Чем плох designMode? Аргументируйте.
     
  10. Trank

    Trank Активный пользователь

    С нами с:
    5 июл 2007
    Сообщения:
    24
    Симпатии:
    0
    А где я сказал, что он плох? И что исходя из этого мне нужно аргументировать?

    Я прочел, что designMode это не единственный способ. К тому же мне писали, что
    и я считаю, что эти слова нельзя отнести к приведенному примеру.
     
  11. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    где прочёл?
     
  12. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Хорошая статья по поводу визуальных редакторов! Просто и наглядно!
    Здесь подробное описание execCommand
     
  13. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Недавно делал так:

    При вводе каждого нового символа в textarea формы, содержание всей textarea копируется в фрейм рядом. Тоесть в форме: <b>Текст</b>, а при переносе в фрейм: Текст. Получается некий предпросмотр, как в macromedia: сверху код, снизу то, как оно будет в браузере. JS кода при этом минимум.
     
  14. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    +Sten+
    Я тоже так пробовал месяца два назад. Мне не понравилось. Не презентабельно :lol:
     
  15. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Я тоже так сделал, но только используя designMode - в итоге: два окошка, если правишь в редакторе - тут же все отображается в wysiwyng'е, если в wysiwyng'е то отображается в редакторе. еще сдделал кнопки для смены режимов отображения: только wysiwyng, только редактор, или оба. ИМХО удобно. Напрягает только что при правке в wysiwyng'е в редакторе все отображается без форматирования и отступов, но с этим можно мириться...
     
  16. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Я чего-то не понял - на одной странице не могут быть два визуальных редактора? В FF по крайней мере не работает.
     
  17. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Могут, но зачем?
    Уже все перешли на FCKEditor!
     
  18. Ивашка

    Ивашка Активный пользователь

    С нами с:
    29 авг 2007
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Щёкино/Тула
    Kreker
    Что именно не работает в FF? "Код в студию" :)

    S.t.A.M.
    Ну я бы за всех не говорил. Тем более про такого монстра, как fck.
     
  19. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Ивашка
    У меня первый редактор инициализируется и вставляется нужный текст, а второй - нет. И ошибок в ФФ нет. А в ИЕ пишет - "document.body - null или не является объектом" и дает ссылку на строку, где вставляется текст во второй редактор.

    Код редакторов одинаков, за исключением разных id.

    HTML:
    1.  
    2.  
    3.    <table class="redactortbl">
    4.       <tr>
    5.           <td style="width: 70%; border-right: 1px solid #000000; border-bottom: 1px solid #000000">
    6.               Текст
    7.              <iframe src='#' id='redactor_2' name='redactor_2' class="frame"></iframe><br />
    8.           </td>
    9.           <td class="botbord">
    10.                 <script type="text/javascript">
    11.                     designInit("redactor_2");
    12.                 </script>
    13.  
    14.              <input type="hidden" name="redactor_2_text" id="redactor_2_text" />
    15.           </td>
    16.       </tr>
    17.        <tr style="background-color: #ffffff">
    18.           <td>
    19.                
    20.               <input type="button" value="Отправить" name="submitted" onClick="submite(Array('redactor_2'))" />
    21.            </td>
    22.        </tr>
    23.    </table>
    24.    <script type="text/javascript">
    25.     getIFrameDocument("redactor_2").document.body.innerHTML = "asdadddsd";
    26.     </script>
    27.  
    [js]
    function designInit(redactor_id) {
    // Определим Gecko-браузеры, т.к. они отличаются в своей работе от Оперы и IE
    var isGecko = navigator.userAgent.toLowerCase().indexOf("gecko") != -1;
    // Получаем доступ к объектам window & document для ифрейма
    var obj = getIFrameDocument(redactor_id).document;
    if (!obj.designMode) alert("Визуальный режим редактирования не поддерживается Вашим браузером");
    else obj.designMode = (isGecko) ? "on" : "On";
    }
    function getIFrameDocument(redactor_id){
    // if contentDocument exists, W3C compliant (Mozilla)
    if (document.getElementById(redactor_id).contentDocument) {
    ie = false;
    return document.getElementById(redactor_id).contentWindow;
    }
    else {
    // IE
    ie = true;
    return document.frames[redactor_id];
    }
    }
    [/js]
     
  20. Ивашка

    Ивашка Активный пользователь

    С нами с:
    29 авг 2007
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Щёкино/Тула
    Kreker
    IE все правильно пишет - на момент второго обращения к document.body его еще не существует.
    Попробуйте такой пример:
    [js]function run() {
    getIFrameDocument("redactor_1").document.body.innerHTML = "111";
    getIFrameDocument("redactor_2").document.body.innerHTML = "222";
    }[/js]
    и кнопочку:
    HTML:
    1. <input type="button" onclick="run()" value="run" />
    Т.е. произвести вставку текста не в runtime а по клике на кнопке - все будет хорошо.
    Из этого делаем вывод, что вставку текста в любом случае придется делать по onload основного документа или отдельно для каждого фрейма.

    Идем дальше. В Gecko видимо есть такой баг (или фича) - если в src ифрейма находится нечно, явно не похожее на нормальный url (# как у вас или например javascript:void(0)), то объект document такого фрейма создается, но его body может просто напросто не отображаться (посмотрите ваши фреймы в firebug, наверняка второй body будет сереньким).
    Чтобы это поправить я лично заюзал старый добрый document.write :)
    Применительно к вашей функции это будет выглядеть примерно так:
    [js] function designInit(redactor_id) {
    // Определим Gecko-браузеры, т.к. они отличаются в своей работе от Оперы и IE
    var isGecko = navigator.userAgent.toLowerCase().indexOf("gecko") != -1;
    // Получаем доступ к объектам window & document для ифрейма
    var obj = getIFrameDocument(redactor_id).document;
    if (!obj.designMode) alert("Визуальный режим редактирования не поддерживается Вашим браузером");
    else obj.designMode = (isGecko) ? "on" : "On";
    obj.write('<html><body></body></html>');
    obj.close();
    }[/js]

    На будущее - в Gecko (и кажется в некоторых версиях Оперы) есть еще один интересный баг: если каким-либо образом скрыть фрейм, содержащий документ с включенным designMode, то после его повторного отображения это свойство отключается.
     
  21. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Обращается только после отрисовки фрейма.
    Делал, в ИЕ начинает работать, в фаерфоксе - нет.

    Спасибо за ответ! После кучи попыток заставить работать (последний Ваш совет не пробовал), решил отказать от двух и более визуальных редакторов. Когда будет необходимость - редактор просто будет вызываться через pop-up и его результат будет вставляться в необходимое поле на странице.