Подробности далее.
Зачем мы это сделали?
Итак, мы решили дать разработчикам возможность добавлять нужную (но не относящуюся напрямую к форматам OOXML) функциональность в редакторы ONLYOFFICE.
Всё началось с одной компании, в которой очень хотели написать собственную кнопку, чтобы генерить контент и вставлять получившиеся данные в редактор. Окей, подумали мы, в этом есть смысл. Есть функциональность, которая нужна только определенным людям и больше никому. Мы не можем сделать всё для всех, но мы можем дать возможность подрубить всё, что нужно. Поэтому вот вам API для работы с редактором, первая версия.
Так и появились плагины.
В них можно использовать код, который мы сами не сможем брать из-за лицензионных ограничений. Мы делаем коммерческий продукт и продаем его, нельзя просто взять и (*в этом моменте автор текста прерывается, чтобы отмахнуться от всплывшего из глубин подсознания призрака Шона Бина) нельзя просто взять и использовать любой код из интернета. То есть, нам нельзя. А вам можно. Те вещи, которые мы по объективным причинам не можем, наши пользователи могут.
Типы плагинов
Мы делим их на три типа:
Визуальные. Когда мы пользуемся таким расширением редактора, у нас открывается окно и рисуется определенный интерфейс. Например, Главред, который просили наши пиарщики.
Визуальный плагин может менять что-то в самом документе, а может и ничего не менять. Главред ничего не меняет — он лишь подсвечивает определенную часть текста (штампы, лишние слова и пр).
Можно написать плагин, который ищет по Google.Картинкам и вставляет понравившуюся в текст. Этот плагин меняет документ.
Невизуальные. Например, простая кнопка, при нажатии которой производятся манипуляции с документом. Простейший пример такого плагина: расширение, которое при нажатии кнопки добавляет в ваш документ слова Hello World!
(function (window, undefined) {
window.Asc.plugin.init = function () {
var sScript = 'var oDocument = Api.GetDocument();';
sScript += 'var oParagraph = Api.CreateParagraph();';
sScript += 'oParagraph.AddText(\'Hello world!\');';
sScript += 'oDocument.InsertContent([oParagraph]);';
window.Asc.plugin.info.recalculate = true;
this.executeCommand("close", sScript);
};
window.Asc.plugin.button = function (id) {
};
})(window, undefined);
Вы также можете добавить в свой документ, например, свою собственную кнопку Bold. Или кнопку, при нажатии которой генерится отчет.
OLE-объекты. Это наши любимые плагины. И единственный способ для стороннего разработчика «влезать» в форматную часть документа, т.е. записывать свою информацию не только во время работы редактора, но и непосредственно в файл. Это, например, наши шахматы.
К какому решению подключаются плагины и как это делается?
На самом деле, к любому.
Для серверной версии
Плагины нужно прописать в конфиги редакторов — они автоматически появятся у всех пользователей портала.
Для десктопа
Архивируем плагины, меняем расширение файла на .plugin и бросаем на главную страницу. Они сразу подхватятся, обещаем. Кроме того, если вы подключите приложение к порталу с включенными плагинами, они автоматически будут работать и в десктопе.
Для веб-версии
В ближайшее время мы запилим что-то вроде магазина или галереи, куда будут добавляться (после модерации) плагины от пользователей.
Пока «магазина» нет, плагины можно добавлять через расширение в браузере. Этот путь пока работает только для Chrome. У нас на GitHub'e есть папка c говорящим названием chrome_extension_example: это и есть образец, как сделать по нашим плагинам расширение в Chrome.
Здесь, кстати, недлинное видео, о том, что могут наши плагины и как их добавить в существующую инсталляцию (десктоп, сервер).
Как написать свой плагин?
Здесь мы хотели написать подробную инструкцию, как это сделать. Но вспомнили, что у нас уже есть хорошая и подробная документация, где структура плагина описана во всех необходимых деталях. Так что всё здесь. Вы также можете изучить устройство дополнений, которые мы собственноручно выложили на GitHub.
На этом, пожалуй, всё. И да — мы надеемся со временем увидеть буйство плагинов, созданное сообществом. Во всяком случае, очень любопытно, какие функции допишут наши пользователи.
Комментарии (49)
Veikedo
09.11.2016 14:12Ребят, а вы писали где-нибудь про то, как архитектурно у вас сделано всё?
hellonadya
09.11.2016 14:30+2такого огромного и всеобъемлющего, чтобы про «всё» не было. а что именно вам интересно?
Veikedo
09.11.2016 15:02Про облачное решение было бы интересно почитать.
Как построено, как справляетесь с нагрузкой, какие инструменты/технологии используете.
Также было бы интересно какой объём кода и насколько большие команды и как, грубо говоря, боретесь со сложностью разработки.hellonadya
09.11.2016 15:38такого мы не писали, к сожалению. объем кода и пр. можно посмотреть на гитхабе.
NoVASpirit
09.11.2016 16:32-5Сейчас напророчу, но не взлетит этот онлиофис в массы… Захожу на сайт, ни одна ссылка не работает, похоже, что про-уровень кодеров делавших сайт сомнителен.
Am0ralist
09.11.2016 18:44К сожалению, ods-очку мою ваш редактор прожевать не смог…
Да и 2,5 гига оперативы, которые потребовались ему в попытке открыть 3 мб файл немного удивили.
Все таки опенофис всегда в 500 мб укладывался для данного файла.xkorolx
09.11.2016 18:46Если можно, скиньте файл в личку. Заранее спасибо.
Am0ralist
09.11.2016 21:09+1Не могу, к сожалению. Но вообще явно проблема в объеме, убираешь один из «больших» листов и файл грузится. Отдельно этот лист так же грузится, или в паре с другим тяжеловесом.
Забейте файл формулами и немножко текстом мегабайта на 3-4 и, думаю, легко повториться (хотя я на 64 битной версии это делал, если что)
Из замеченного:
1) «группировка» исчезает и фиг бы с ней, но проблема в том, что показать спрятанные столбцы — невозможно в итоге вообще. Т.е. команда «показать» не срабатывает.
2) В ООо можно объединить ячейку так, что в ней будет отображено только значение первой ячейки, но при этом все ячейки «под ней» останутся неизменными. В спрятанных таким образом ячейках может быть формула, которая продолжит работу. И на эти ячейки так же можно ссылаться.
У вас же вместо формулы туда записывается число, причем не совсем понятно откуда его вообще взяли, т.е. это не результат работы формулы ("=C21*D21*E21/1000000" превратилось в 3171, хотя даже значение было 0,00)
3) Анализ формул храмает на обе ноги:
Было:
==IF(B6<>«Фасадный профиль матовое серебро [ VE21BIA06000A ]»;((I11*2)+(I14*2))*I17*1,1/1000;"")
Стало:
==IF(B6<>«Фасадный профиль матовое серебро VE21BIA06000A ]»,(([!I11*2)+(I14*2))*I17*1.1/1000,"")
Подсказка: см на "[" и ";"
4) При этом исправить формулу невозможно. То есть исправляешь, нажимаешь энтер — ошибка… Удаляешь формулу, энтер, чтоб сохранилось, заново выделяешь ячейку, вставляешь тоже самое исправленное — всё отлично!
Нельзя откатить изменения до исходного текста неверной формулы. Изменил, удалил — обратно не получишь.
Нельзя вставить формулу в ячейку и исправить ее, редактор сразу говорит «неверная» и стирает ее.
Надо выделить ячейку и в область ввода данных вставить…
5) Тот же эксель старается выделить ошибку, которая ему мешает. (например, выделив 1.1 в формуле выше). Можно этапы вычисления вызвать. У вас — только гадать, где ошибка.
Или вон в формулах выше было "==" — это, конечно, описка, но ООо — плевать, а эксель же предложит при введении убрать лишний знак или вернуть на этап редактирования формулы, где подсветит проблемный участок.
У вас же просто ошибка и думай что хочешь
Из-за этих причин формулы наполовину к чертям слетели. Плюс почему то OFFSET не возвращает значение из ячеек…
В итоге, серьезно формулы писать в вашем редакторе менее удобно, чем в экселе или ООо, не говоря уж о том, что быстродействие ООо на моих файлах в разы выше: секунд по 5-10 изменения применяются в вашем редакторе, да и оперативки ООО у меня например 158 съел, а онлиофис 450-550 (причем это так с покоя скачет даже просто при просмотре-прокрутке листа)
Плюс формулы связанные — не пересчитываются автоматически.
Далее, как я понимаю, редактор с ODS работает на самом деле, как с экселем. Однако это не полностью совместимые форматы:
1) Если объединить ячейки, то данные и форматы прочих ячеек затираются, т.е. повторить пункт 2 нельзя
Это эксель, да, но не ООо
2) формула "=C21*D21*E21/1000000" выдаст ошибку, если в ячейках, из которых она берет данные будет формула вида "=IF(N270=«чему-то там»;1;"")" и это формула выдаст ответ из ветки ложь "" (т.е. пусто). С учетом, что реальное пустое поле в экселе такой ошибки не даст — то это ошибка (точнее «фича») именно экселя
А вот ООо выдаст ноль.
3) Функционал «проверка» в виде текстового списка к конкретной ячейки или ссылки на диапазон ячеек — не работает (в экселе, кстати, он есть, пусть и в виде только диапазона ячеек)
PS. Ищу работу тестировщиком. Даже не спрашивайте, чем я найду эти баги и как вообще можно было на них наткнуться, но ваши программисты будут меня ненавидеть.
Шутка)trofim24
10.11.2016 15:101) «Групппировку» пока не поддерживаем, но показать скрытые строки/столбцы можно. Раскрыть их можно с помощью контекстного меню (как и обычные скрытые строки/столбцы).
2) А объединяли какие ячейки и в какой была такая формула, которая превратилась в 3171? Мы записываем не число, а значение левой верхней ячейки из объединения и в предупреждении об этом сообщаем. По поводу сохранения значений под объединением: мы рассмотрим данную возможность, формат такое позволяет сохранять. Часто возникает необходимость что-то держать под объединением?
3) ";" заменилась на "," из-за региональных настроек. В английской локали используется в качестве разделителя ",", а в русской — ";". По поводу символа "[". Возможно что-то не так распознали. Но уже смущает наличие двух символов « и », а также два символа "=". Они в таком виде не могут быть в формуле, поэтому и выдается ошибка. В оригинале как выглядит эта формула? Были бы признательны за файл.
4-5) Мы работаем над формулами, в ближайших релизах выйдет большое обновление с ускорениями в расчете формул и правкой багов. С ods мы не работаем. Мы конвертируем его в xlsx.
Ps. Мы любим тестировщиков, которые находят нам баги)Am0ralist
10.11.2016 16:26Посижу, смастерю файл с примером.
1) Группировка столбцов была в файле, и проблема в том, что у меня как раз не срабатывает для столбцов «показать» в этом случае (для строк — срабатывает)
2) Тут просто разница подходов:
— эксель просто затирает данные,
— ООо предлагает либо слить все данные в одну строку, либо оставить только левое. В последнем случае, данные никуда не пропадают и даже формулы — продолжают считаться.
Просто при любом подходе ссылка на ту ячейку конкретно в моем случае вернула бы «ноль» (в экселе 2003 как минимум пустая ячейка и 0 — одно и то же, а в OOo там формула бы выдала 0 и все было бы тип топ).
А тут получилось, что при конвертации данные там все же оказались, но — неверные.
Держать спрятанным по факту и не надо, просто у OOo — такая особенность, которую не учли в конвертере (боюсь, изначально разработчики ООо так же этот момент просто не учли на самом деле и забыли сделать стирание данных в тех ячейках)
3) В файле будет, однако, если честно, в редакторах видны только ", и ни каких « и ».
а вот "==" — это я описал ниже, в 5 пункте: ООо такую описку игнорирует.
В файле были еще формулы, в которых == не было, а вот знак [ смещался и становился [! и они не работали, просто они ооочень длинные, чтоб их приводить, а смысл тот же.
А вот Экселевский подход, когда пустая ячейка равна 0, а если формула вернуло пусто — то это не равно нулю и умножать на это нельзя — мне кажется явной ошибкой самого экселя. ООо в этом случае ведет себя вернее.
PS. Хотя я и шутил, однако, далеко не все те, с кем я сталкивался, любили, когда им на голову сыпалась кучка багов.trofim24
10.11.2016 17:06Будем признательны за файл.
С двойным равно разберемся. В планах есть пункт о добавлении подсказок в ошибках по формулам.
По поводу той формулы. Вот такая формула
=IF(B6<>"Фасадный профиль матовое серебро [ VE21BIA06000A ]",((I11*2)+(I14*2))*I17*1.1/1000,"")
добавляется и считается. Но мы передали проблему отделу тестирования.
rgaliull
09.11.2016 19:11и интересно провести сравнение основных редакторов конкурентов.
Am0ralist
09.11.2016 21:39Оу… неблагодарная это работа.
За 14 лет я не встретил ни одного человека, который бы использовал все возможности офисных пакетов. Да даже на 50%. А теперь найдите такого, кто знает оба (ООо и либре различия минимальные) пакета одинаково глубоко, что бы провести сравнение.
При этом я сам, если что, участвовал в областных олимпиадах по офисному пакету (уж не знаю, проводят ли сейчас такие, ибо тот еще бред, на самом деле).
Но с экселем старым помню была главная проблема — очень маленькое количество вложенных друг в друга формул (уровня три-четыре, если не ошибаюсь). В ООо в этом плане я так и не достиг лимита, если что.
В 2010 не требовалось (в онлиофисе, кстати, мои ООо формулы проблем не вызвали)
Часть функций в формулах работают по разному, причем могут в мелочах, что не сразу сообразишь. Да и вообще стандартный набор функций немножко разный.
По разному какие-то действия выполняются (копи-паст в мс офисе после ООо — это такое убожество… зато есть удобный буфер обмена).
По-умолчанию в русском офисе — русские названия формул, и это бесит, потому что адреса ячеек и $ — из латинской раскладки, и в латинице в итоге удобнее всю формулу вбить, а перевести сам офис не может.
И это все нюансы разницы в двух редакторах которые понимаешь активно поработав в них, а тут третий еще сравнить с ними)
Хотя, в МС возможностей больше в итоге, по моему мнению.rgaliull
09.11.2016 22:19думаю, достаточно скорости открытия и потребления ресурсов.
Конечно, важнейшим критерием является функционал, но сравнивать его не так уж простоAm0ralist
09.11.2016 23:05Помню лет восемь назад стояла задачка перенести табличку из двух столбцов и сколько-то там тысяч строк из экселя в ворд (требования такие были у госорганов)… Опенофис просто не смог открыть файл екселевский (во всяком случае за вменяемое время работы).
И из экселя в ворд вставлять копипастом было ооочень долго… Зато я обнаружил, что если вставить табличку экселя на страничку ворда, то в этом случае копипаст из нее (из режима редактировании ее, точнее) работал в разы быстрее.
А по поводу скорости открытия и потребления — в файлах, которыми я тестировал, формул просто безумное количество, причем сложных, многоуровневых. Это сильно не стандартная ситуация, если честно.
Если бы там был сплошной текст с сложными форматами, то при тех же объемах файла — это была бы абсолютно другая нагрузка.
Поэтому опять упремся в используемый функционал.
Хотя, если память не подводит, 2003 эксель жрал меньше ООо, а новые версии уже не сравнивал.
trofim24
10.11.2016 15:12У нас, кстати, можно выбрать язык для формул, если вам не нравятся русские названия.
apollo2k4
09.11.2016 21:31С печатью тоже сказка, у меня 8 страниц из docx в очереди принтера стали 1Гб raw
DenimTornado
09.11.2016 20:51Спасибо вам огромное, заменить MS Office на Маке пока полностью не получается, но всё к тому идёт. В частности очень криво разбираются файлы rtf и doc с таблицами. Всяческие резюме и т.п. В эту сторону подвижки стоит ждать в ближайшее время.
MAXHO
09.11.2016 22:27А русскоязычная документация есть?
А так очень долгожданная новость…
Даже есть идеи, что начинать писать…xkorolx
09.11.2016 22:51Рускоязычной нет. Пока. Но с английской версией не должно возникнуть проблем, там несложно). Если будете писать и возникнут проблемы — пишите, поможем.
axi01
10.11.2016 07:54ну наконец-то!!!
плагины это всегда хорошо.
может теперь кто-то с прямыми руками (нет, я сам попробую, но моими руками плагины писать, что блоху кувалдой ковать) напишет так нужные мне:
«Продолжить нумерацию» — для ворда
«Обрезать/кадрировать изображение» — для всего пакета.
плагины это всегда хорошо.
плагины с модерацией это очень хорошо.
sniks
10.11.2016 08:12Использовать docker контейнеры не есть лучшее решение.
Облачная версия неимоверно тупит. Разворачивал на виртуалке отдав под систему 2 ядра и 12 гб ram. Любой простой документ в облаке очень долго открывается. Да и в приницпе веб портал очень медленно работает.
Самый главный минус это отсутствие поддержки макросов.
Zverienish
10.11.2016 10:36Хотел начать пользоваться на работе. Но есть несколько «НО».
1. Документ с имеющимся разрывом страницы открывается без него.
2. Не особо быстро работает. Запускается дольше LibreOffice. Некоторые
3. Для меня наверное самое главное. Очень мелкие значки и надписи. А при том что значки монохромны все, то постоянно приходится приближиться к монитору и вглядываться (при том на 24 дюймовом мониторе). Текст по размеру получается меньше в раза полтора точно, чем у того же Хрома или LibreOffice.xkorolx
10.11.2016 11:24С разрывами страниц должно все быть отлично. Если пришлете файл, будем благодарны. По поводу последнего — очень странно это. Может зум выставлен у нас в редакторе? Если можно — пришлите скрины, настройки системы. Попробуем разобраться. Спасибо.
beremour
10.11.2016 22:51Desktop Editors version 4.1.2.270 (кстати в About выделить мышкой номер версии нельзя, только переколачивать ручками)
Пытаемся отправить на печатьDaylightIsBurning
11.11.2016 01:03Возможна ли интеграция с Endnote? Как вообще со ссылками (для списка литературы) и референс-ссылками на изображения/формулы/таблицы?
xkorolx
11.11.2016 12:13В новой, т.е. уже следующей, версии будут добавлены сноски(на странице), концевые сноски в планах, и будут сделаны совсем скоро.
DaylightIsBurning
12.11.2016 14:27А что на счёт перекрёстных ссылок (labels/cross-references для формул, рисунков, таблиц, глав). Есть ли отдельная поддержка подписей (captions) под рисунками/таблицами или подписи оформляются просто абзацами не связанными с объектом?
Можно ли надеяться на появление плагина для Endnote?xkorolx
13.11.2016 11:53Пока нет. Но в планах.
Про плагин. Мы настроены писать плагины в первую очередь «для всех». Т.е. плагины, которые будут полезны почти всем. Также помогать писать для тех заказчиков, которые начали писать, но возникли вопросы/не получается. Остальное будем добавлять так: появилась хорошая идея и появилась свободное время — сделали.
Myrddin
12.11.2016 03:26WPS стартует в 10 раз быстрее. Меню симпатичнее. Совместимость на таком же уровне.
SoftVIP
12.11.2016 07:56В программе не нашел главный функционал динамическая таблица? Есть она вообще или нет?
trofim24
14.11.2016 11:06Если вы про «Форматировать как таблицу (Format as table)», то у нас это есть.
Format as tableSoftVIP
14.11.2016 17:22Извиняюсь за мою ошибку в стране где я живу эта функция называется динамическая таблица, но в России Сводная таблица, который функционал отличается от вами предложенного, пожалуйста подтвердите где я могу его найти
nkalimbetov
Круто, спасибо, полезная нововведения!