Как грамотно сделать вот такой текстовый редактор?
Берите ckeditor там уже все продумано, в т.ч. написание под него плагинов и виджетов. Документация отличная. 
Писать свой редактор - это безумие. Поверьте, мне приходилось это делать, и могу сказать, что это плохая идея.
Или TinyMCE и вот пример