Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Wysiwyg. С чего начать? (https://javascript.ru/forum/offtopic/35128-wysiwyg-s-chego-nachat.html)

Ska1n 31.01.2013 13:46

Wysiwyg. С чего начать?
 
Приветствую. Подскажите новичку в js, пожалуйста, хочется создать велосипед в виде редактора-html, в какую степь копать? нагугливал два способа реализации, мол один использовать редактирование встроенными средствами браузера, а второй - полная эмуляция на js. Вот хочется опробовать второй вариант. Скажем, в какую сторону копать обработку свойств выделенного текста? или, допустим, реализацию подобной фичи - перетаскиваешь картинку из папки в окно редактора, та автоматически загружает ее на сервер и показывает в определенной миниатюре уже в редакторе?

DjDiablo 31.01.2013 14:16

Мне более симпотично средствами браузера :)
Должно работать во всех современных браузерах включая ie9.

<!DOCTYPE HTML>
<html>
  <head> 
    <style>
      td{
         border:1px solid red; padding:5;border-collapse:collapse;
      }
   </style>

   </head>
  <body>    

<button onClick="document.execCommand('bold', false, null);"> Жирный</button>
<button onClick="document.execCommand('italic', false, null);"> Наклон</button>
<button onClick="document.execCommand('insertunorderedlist', false, null);"> список</button>
<button onClick="document.execCommand('Delete', false, null);"> Удалить </button>


  <div id="myDiv" contenteditable="true">
        <h1>Список</h1>
       <ul id="todolist">  
          <li>Купить123123 молок</li><li>Починить дверь</li>	 
          <li>Отредактировать список!</li>
       </ul>
        <h1>Таблица</h1>
       <table class="tab">
            <tr><td>Ячейка 1</td><td>Ячейка 2</td></tr> 
            <tr><td>Ячейка 1</td><td>Ячейка 2</td></tr> 
      </table>
  </div>    
  </body>
</html>


список команд http://blog.in16.ru/index.php/2010/07/22/execcommand/

описуха Rich Text Editing на MDN + пример толкового редактора

Ska1n 31.01.2013 14:51

благодарю за ссылку и спорить не буду, что лучше, мне просто из спортивного интереса хочется узнать, как средствами js происходит работа над выделенными кусками текста и обработка событий, такие, как перетаскивание изображения в поле редактирования

Serg_pnz 31.01.2013 16:28

http://webew.ru/articles/192.webew

Tim 31.01.2013 18:20

Имхо: проще всего допилить Ace

kobezzza 31.01.2013 19:42

Цитата:

Сообщение от Tim (Сообщение 230774)
Имхо: проще всего допилить Ace

Мне кажется человек хочет принципиально написать свой велосипед с целью обучения

Tim 31.01.2013 23:42

kobezzza,
Многовато будет затруднений для новичка. Одно кроссбраузерное выделение текста чего стоит.

Gozar 01.02.2013 01:05

Цитата:

Сообщение от Tim
Многовато будет затруднений для новичка. Одно кроссбраузерное выделение текста чего стоит.

Предлагаешь забить?

Tim 01.02.2013 09:23

Gozar,
Почему бы и нет?

Gozar 01.02.2013 12:44

Цитата:

Сообщение от Tim
Почему бы и нет?

Почему бы не забить на программирование?

Tim 01.02.2013 13:00

Gozar,
бла бла бла

Ska1n 02.02.2013 22:40

решил пока опробовать работу с textarea и вставкой а ля bb-кода, после чего со стороны сервера идет уже обработка тегов... гемора, конечно, много, одна кросс-браузерность чего стоит, даже страшно представить чего ожидать при полной эмуляции))

danik.js 03.02.2013 04:12

Да ладно. Textarea - не wysiwyg. С текстарией все в сотни раз проще чем с contenteditable ))

kobezzza 03.02.2013 09:59

Попробуйте путь самурая - визвиг полностью на канвас.

danik.js 03.02.2013 10:47

Цитата:

Сообщение от kobezzza
Попробуйте путь самурая - визвиг полностью на канвас.

ИМХО неудачный путь. Хотя вот у ребят из teamlab.com вышло неплохо. Но там другая задача - онлайновый текстовый редактор, не html. Полагаю что об a11y лучше промолчать.

kobezzza 03.02.2013 12:34

Цитата:

Сообщение от danik.js (Сообщение 231176)
ИМХО неудачный путь.

Путь самурая не может быть прост, это путь трудностей;)

danik.js 03.02.2013 12:56

ИМХО на canvas получится не то пальто. Это как на DirectDraw делать UI какой-нибудь десктопной программы...

Gozar 03.02.2013 13:01

Цитата:

Сообщение от danik.js
Да ладно. Textarea - не wysiwyg.

Ясен пень. textarea это половина wysiwyg.

И не надо никого запугивать. Я сам когда-то написал wysiwyg и это не так уж сложно как вы пытаетесь представить. Главное разобраться с выделением.

danik.js 03.02.2013 13:11

Цитата:

Сообщение от Gozar
Главное разобраться с выделением.
__________________

Ага. А потом оказывается что некоторые браузеры суют всякий хлам в код. И что оказывается есть d'n'd, что есть winword, из которого любят копировать, и что оказывается в firefox нет возможности получить plain text из clipboardData (потому что его тупо нет). А потом вспоминается про undo/redo, а потом ... это можно продолжать довольно долго ))
Хотя конечно все зависит от поставленной цели. Есть ведь монстры типа CKEditor или TinyMCE, а есть и всякие малютки

Gozar 03.02.2013 13:30

Цитата:

Сообщение от danik.js
это можно продолжать довольно долго

Это проблема?
Цитата:

Море такое большое, в нем столько всякой рыбы.
http://filmin.ru/6902-francuzskiy-poceluy.html 1:20:20

Tim 03.02.2013 14:04

Цитата:

Это проблема?
это проблемы
я понимаю что самописные вещи гораздо приятнее и опыта наберёшься, но в данном случает это не оправданно геморный гемор. и опыт этот больше ни где не пригодится. и юзать этот редактор потом не будешь ни где. я когда то писал что то подобное, но оно так и не пригодилось ни разу. просто интересно было как это работает. время потратил и всё.

редкая хрень.

Gozar 03.02.2013 14:09

Цитата:

Сообщение от Tim
юзать этот редактор потом не будешь ни где

ЧСВ это забавно, но иногда оно мешает думать логически.

Я написал такой редактор и я его юзаю и он мне нравиться больше, чем то, что писал не я.

А так, да меня посмешило, что в этой теме собралось аж два ПРОРОКА.

DjDiablo 03.02.2013 14:21

Моё имхо, просто технология вымирающая, я ума немогу приложить где она может пригодиться. в 9ой опере или IE6 ?
Ну и кому это нужно через пару лет будет, впрочем оно уже некому не нужно. Изучить можно, но перспектив
я невижу.
Gozar
в чём преимущество перед HTML 5 editable ?

Gozar 03.02.2013 15:01

Читаем вопрос ТС и не задаем глупые вопросы!

Человек хочет научиться, а не выслушивать неуместные советы о том, что учиться не нужно, якобы. Наработка опыта невозможна без понимания вопроса целиком. Изучение вопроса дает понимание выделений в браузере, понимание, которого у ТС явно нет и которое он хочет получить. А что вы ему советуете? Не получить эти знания?

Gozar 03.02.2013 15:05

Любой быдлокодер может поставить tinyMCE, но это еще не значит, что он станет понимать как он работает. Я когда начинал изучать этот вопрос, мне тоже многие советовали поставить редактор. Я правильно сделал, что не стал слушать их советы. Мне очень пригодились полученные знания в будущем. Хотя они и не касались редактора визивиг.

Gozar 03.02.2013 15:07

Ссылка в тему http://habrahabr.ru/post/55922/

kobezzza 03.02.2013 15:24

Абсолютно согласен с Gozar.

danik.js 03.02.2013 15:40

Да ниче особо полезного это не даст. Ну познакомитесь вы с десятком-другим различных багов браузеров, уже известных, ну зарепортире еще с десяток новых ))
С editing API все настолько криво и хреново реализовано что работать с этим противно. Хотя конечно, некоторый опыт все-равно получите. В любом случае кодер должен писать код, какая разница что это - визивиг или какая-нибудь игрулька )

kobezzza 03.02.2013 16:18

Написание нормального визвига серьёзная задача: автор познакомится с паттернами проектирования и различными архитектурными решениями, для того чтобы визвиг легко расширялся и поддерживал различные плагины, затем автор неплохо освоит регулярные выражения, т.к. при написании визвига их очень активно юзают при анализе вставляемого/сохраняемого текста (например при вставке из ворда), далее автор освоит различные HTML5 API, такие как DnD, LocalStorage, FileAPI + Canvas (можно сделать простой редактор картинок) и т.д. Хороший визвиг непременно должен поддерживать локализацию, значит автор освоит приёмы реализаций её...перечислять могу ещё долго плюсов от такого проекта, а хаки - они инкапсулируются в первые часы разработки.

ЗЫ: я тоже писал свой визвиг когда только начинал изучать JS.

Tim 03.02.2013 16:24

Цитата:

ЧСВ это забавно
в каком месте?

Цитата:

аж два ПРОРОКА
кто другой?

Gozar 03.02.2013 16:33

Цитата:

Сообщение от Tim
кто другой?

danik.js

Tim 03.02.2013 17:26

Gozar,
имхо попытка троллинга на пустом месте.
ни чего особенного мы не сказали. только предупредили про гемор с кроссбраузерностью

DjDiablo 03.02.2013 18:07

Я непонимаю в чём противоречие :)
Если говорить о Html5 editable
то для стандартных фичь понадобиться document.execCommand
А вот для нестандартных понадобиться всё тот же range и selection
так что я не считаю что использование современных технологий приведёт к дефициту полезных навыков.

Можно же много прикольных задач придумать . Ну к примеру обьединение ячеек в таблице, и наоборот разделение ячеек таблицы. Или нестандартную команду добавить к преобразованию текста, ну скажем сделать выделенный текст вертикальным, или добавить тень к тексту. А вот нафига делать свой жирный текст, в то время как это можно сделать одной командой при помощи document.execCommand я хз. Если уж тратить силы то интересное, а не на то что даром некому ненужно :)

Ссылка по теме WYSIWYG HTML редактор в браузере http://habrahabr.ru/post/107829/

Вот список оддерживаемых комманд на старых браузерах
http://www.quirksmode.org/dom/execCommand.html большая их часть даже у ie6 есть.

Deff 03.02.2013 18:14

Цитата:

Сообщение от DjDiablo
Ну к примеру обьединение ячеек в таблице, и наоборот разделение ячеек таблицы.

Вроде есть тут тема от транс-гумманиста, красивое решение ( там удаление добавка строк и ячеек *в процессе решаются и эти задачи

Gozar 03.02.2013 20:38

Цитата:

Сообщение от DjDiablo
нафига

Процесс обучения состоит из постоянного изобретения велосипедов.

danik.js 03.02.2013 22:30

Цитата:

Сообщение от DjDiablo
А вот нафига делать свой жирный текст, в то время как это можно сделать одной командой при помощи document.execCommand

Ок, что мы получим после этой команды? <b>текст</b> ? или <strong>текст</b> ?

DjDiablo 04.02.2013 04:24

в ie <strong> текст </strong>
в остальных <b> текст </b>
<strong>текст</b> - мы не получим точно :)

помимо 'bold' есть много других команд в основном кроссбраузерных, за некоторым исключением.
Что касается именно bold то разницей между bold и strong в ряде проектов можно пренебречь, так как по умолчанию они отображаются совершенно одинаково.

Если принибречь неполучается то на ваш выбор целых три решения.
1й - после применения execCommand найти в документе тэг strong и замените его на bold.
2й - написать свою реализацию bold с блэк джеком и шлюхами для всех браузеров
3й - написать свою реализацию bold только для ie, в остальных юзать exec.
в условии реального проекта 1е и 2е решение видятся более вероятными.

сравнение bold и strong
<B>Привет</B>
<strong>Привет</strong>

Gozar 04.02.2013 12:19

Цитата:

Сообщение от DjDiablo
сравнение bold и strong

Это разные теги, как они отображаются не важно.

Я за 1 и 3 вариант.

danik.js 04.02.2013 15:32

1 вариант вырежет даже вручную расставленные теги.
2 вариант больше всего подходит на данный момент. Ибо фича-детекшн тут неприменим как я понимаю, а сниффинг юзерагента не есть гуд. Да и один фиг нужны ведь и другие теги, не предусмотренные стандартными командами. Так что один фиг нужен универсальный метод вставки тегов. Кстати кто вкурсе что говорится в спецификации по поводу команды bold ( а также italic)? Лень просто читать.
3 - в опере тоже strong вроде бы вставляется.

DjDiablo 04.02.2013 16:59

Цитата:

вариант вырежет даже вручную расставленные теги.
дак сделай так чтоб вырезал только тот который не нужен

Цитата:

2 вариант больше всего подходит на данный момент
Да. Так как могут быть и другие теги, то всёравно будет некое api которым удобно пользоваться и для bold.

Цитата:

в опере тоже strong вроде бы вставляется
До 9ой версии она пыталась 'эксплореру подражать, так что вполне возможно что strong так и остался с тех пор.


Часовой пояс GMT +3, время: 12:32.