Что если бы вы могли добавить в редакторы документов любые функции, какие вам хочется? Теперь вы можете: в редакторах ONLYOFFICE появилась возможность подключения плагинов. Несколько примеров мы написали сами — все их можно посмотреть в нашем открытом репозитории на GitHub'e. Теперь ваш ход — напишите то, чего вам не хватало.

Подробности далее.



Зачем мы это сделали?


Итак, мы решили дать разработчикам возможность добавлять нужную (но не относящуюся напрямую к форматам 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)


  1. nkalimbetov
    09.11.2016 13:41
    +3

    Круто, спасибо, полезная нововведения!


  1. Veikedo
    09.11.2016 14:12

    Ребят, а вы писали где-нибудь про то, как архитектурно у вас сделано всё?


    1. hellonadya
      09.11.2016 14:30
      +2

      такого огромного и всеобъемлющего, чтобы про «всё» не было. а что именно вам интересно?


      1. Veikedo
        09.11.2016 15:02

        Про облачное решение было бы интересно почитать.
        Как построено, как справляетесь с нагрузкой, какие инструменты/технологии используете.
        Также было бы интересно какой объём кода и насколько большие команды и как, грубо говоря, боретесь со сложностью разработки.


        1. hellonadya
          09.11.2016 15:38

          такого мы не писали, к сожалению. объем кода и пр. можно посмотреть на гитхабе.


        1. trofim24
          09.11.2016 15:55
          -1

          В статье про переход на Node.JS есть схема работы серверной части.


  1. NoVASpirit
    09.11.2016 16:32
    -5

    Сейчас напророчу, но не взлетит этот онлиофис в массы… Захожу на сайт, ни одна ссылка не работает, похоже, что про-уровень кодеров делавших сайт сомнителен.


    1. xkorolx
      09.11.2016 16:35

      Потыкал — вроде работают ссылки. Конкретный пример есть?


  1. SkyHunter
    09.11.2016 17:59

    Как дела с безопасностью?


    1. xkorolx
      09.11.2016 18:03

      Вы просто пишете js код. Можно сравнить с браузерным расширением.


  1. evocatus
    09.11.2016 18:31
    -4

    Что мне делать, если я категорически не хочу писать на JS?


    1. xkorolx
      09.11.2016 18:34
      +7

      не писать плагины к веб приложениям)


    1. Dolios
      10.11.2016 14:31

      @evocatus
      разработка на всём для всего от Verilog до Python

      Ну ну…


      1. evocatus
        10.11.2016 15:43

        Чтобы написать подробнее не хватило места. Не на всём, конечно.


  1. Am0ralist
    09.11.2016 18:44

    К сожалению, ods-очку мою ваш редактор прожевать не смог…

    Да и 2,5 гига оперативы, которые потребовались ему в попытке открыть 3 мб файл немного удивили.
    Все таки опенофис всегда в 500 мб укладывался для данного файла.


    1. xkorolx
      09.11.2016 18:46

      Если можно, скиньте файл в личку. Заранее спасибо.


      1. 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. Ищу работу тестировщиком. Даже не спрашивайте, чем я найду эти баги и как вообще можно было на них наткнуться, но ваши программисты будут меня ненавидеть.
        Шутка)


        1. trofim24
          10.11.2016 15:10

          1) «Групппировку» пока не поддерживаем, но показать скрытые строки/столбцы можно. Раскрыть их можно с помощью контекстного меню (как и обычные скрытые строки/столбцы).
          2) А объединяли какие ячейки и в какой была такая формула, которая превратилась в 3171? Мы записываем не число, а значение левой верхней ячейки из объединения и в предупреждении об этом сообщаем. По поводу сохранения значений под объединением: мы рассмотрим данную возможность, формат такое позволяет сохранять. Часто возникает необходимость что-то держать под объединением?
          3) ";" заменилась на "," из-за региональных настроек. В английской локали используется в качестве разделителя ",", а в русской — ";". По поводу символа "[". Возможно что-то не так распознали. Но уже смущает наличие двух символов « и », а также два символа "=". Они в таком виде не могут быть в формуле, поэтому и выдается ошибка. В оригинале как выглядит эта формула? Были бы признательны за файл.
          4-5) Мы работаем над формулами, в ближайших релизах выйдет большое обновление с ускорениями в расчете формул и правкой багов. С ods мы не работаем. Мы конвертируем его в xlsx.

          Ps. Мы любим тестировщиков, которые находят нам баги)


          1. Am0ralist
            10.11.2016 16:26

            Посижу, смастерю файл с примером.

            1) Группировка столбцов была в файле, и проблема в том, что у меня как раз не срабатывает для столбцов «показать» в этом случае (для строк — срабатывает)

            2) Тут просто разница подходов:
            — эксель просто затирает данные,
            — ООо предлагает либо слить все данные в одну строку, либо оставить только левое. В последнем случае, данные никуда не пропадают и даже формулы — продолжают считаться.
            Просто при любом подходе ссылка на ту ячейку конкретно в моем случае вернула бы «ноль» (в экселе 2003 как минимум пустая ячейка и 0 — одно и то же, а в OOo там формула бы выдала 0 и все было бы тип топ).
            А тут получилось, что при конвертации данные там все же оказались, но — неверные.

            Держать спрятанным по факту и не надо, просто у OOo — такая особенность, которую не учли в конвертере (боюсь, изначально разработчики ООо так же этот момент просто не учли на самом деле и забыли сделать стирание данных в тех ячейках)

            3) В файле будет, однако, если честно, в редакторах видны только ", и ни каких « и ».
            а вот "==" — это я описал ниже, в 5 пункте: ООо такую описку игнорирует.
            В файле были еще формулы, в которых == не было, а вот знак [ смещался и становился [! и они не работали, просто они ооочень длинные, чтоб их приводить, а смысл тот же.

            А вот Экселевский подход, когда пустая ячейка равна 0, а если формула вернуло пусто — то это не равно нулю и умножать на это нельзя — мне кажется явной ошибкой самого экселя. ООо в этом случае ведет себя вернее.

            PS. Хотя я и шутил, однако, далеко не все те, с кем я сталкивался, любили, когда им на голову сыпалась кучка багов.


            1. trofim24
              10.11.2016 17:06

              Будем признательны за файл.
              С двойным равно разберемся. В планах есть пункт о добавлении подсказок в ошибках по формулам.
              По поводу той формулы. Вот такая формула
              =IF(B6<>"Фасадный профиль матовое серебро [ VE21BIA06000A ]",((I11*2)+(I14*2))*I17*1.1/1000,"")

              добавляется и считается. Но мы передали проблему отделу тестирования.


    1. rgaliull
      09.11.2016 19:11

      и интересно провести сравнение основных редакторов конкурентов.


      1. Am0ralist
        09.11.2016 21:39

        Оу… неблагодарная это работа.
        За 14 лет я не встретил ни одного человека, который бы использовал все возможности офисных пакетов. Да даже на 50%. А теперь найдите такого, кто знает оба (ООо и либре различия минимальные) пакета одинаково глубоко, что бы провести сравнение.
        При этом я сам, если что, участвовал в областных олимпиадах по офисному пакету (уж не знаю, проводят ли сейчас такие, ибо тот еще бред, на самом деле).

        Но с экселем старым помню была главная проблема — очень маленькое количество вложенных друг в друга формул (уровня три-четыре, если не ошибаюсь). В ООо в этом плане я так и не достиг лимита, если что.
        В 2010 не требовалось (в онлиофисе, кстати, мои ООо формулы проблем не вызвали)

        Часть функций в формулах работают по разному, причем могут в мелочах, что не сразу сообразишь. Да и вообще стандартный набор функций немножко разный.
        По разному какие-то действия выполняются (копи-паст в мс офисе после ООо — это такое убожество… зато есть удобный буфер обмена).
        По-умолчанию в русском офисе — русские названия формул, и это бесит, потому что адреса ячеек и $ — из латинской раскладки, и в латинице в итоге удобнее всю формулу вбить, а перевести сам офис не может.

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


        1. rgaliull
          09.11.2016 22:19

          думаю, достаточно скорости открытия и потребления ресурсов.
          Конечно, важнейшим критерием является функционал, но сравнивать его не так уж просто


          1. Am0ralist
            09.11.2016 23:05

            Помню лет восемь назад стояла задачка перенести табличку из двух столбцов и сколько-то там тысяч строк из экселя в ворд (требования такие были у госорганов)… Опенофис просто не смог открыть файл екселевский (во всяком случае за вменяемое время работы).
            И из экселя в ворд вставлять копипастом было ооочень долго… Зато я обнаружил, что если вставить табличку экселя на страничку ворда, то в этом случае копипаст из нее (из режима редактировании ее, точнее) работал в разы быстрее.

            А по поводу скорости открытия и потребления — в файлах, которыми я тестировал, формул просто безумное количество, причем сложных, многоуровневых. Это сильно не стандартная ситуация, если честно.

            Если бы там был сплошной текст с сложными форматами, то при тех же объемах файла — это была бы абсолютно другая нагрузка.
            Поэтому опять упремся в используемый функционал.
            Хотя, если память не подводит, 2003 эксель жрал меньше ООо, а новые версии уже не сравнивал.


        1. trofim24
          10.11.2016 15:12

          У нас, кстати, можно выбрать язык для формул, если вам не нравятся русские названия.


    1. apollo2k4
      09.11.2016 21:31

      С печатью тоже сказка, у меня 8 страниц из docx в очереди принтера стали 1Гб raw


  1. rgaliull
    09.11.2016 19:09

    Плагины сумма прописью и вычисляемые значения в таблицах есть?


    1. trofim24
      10.11.2016 16:50

      Добавили плагин «сумма прописью».


  1. DenimTornado
    09.11.2016 20:51

    Спасибо вам огромное, заменить MS Office на Маке пока полностью не получается, но всё к тому идёт. В частности очень криво разбираются файлы rtf и doc с таблицами. Всяческие резюме и т.п. В эту сторону подвижки стоит ждать в ближайшее время.


  1. vanxant
    09.11.2016 22:20
    +1

    Что-то в вашем примере плагина хелловорлд какая-то жесть с евалом. Просто функцию передать нельзя что-ли?


    1. xkorolx
      09.11.2016 22:47

      Плагин работает в своем контексте (iframe). Так писать не очень удобно, лучше смотреть в сторону плагина templates.


  1. MAXHO
    09.11.2016 22:27

    А русскоязычная документация есть?
    А так очень долгожданная новость…

    Даже есть идеи, что начинать писать…


    1. xkorolx
      09.11.2016 22:51

      Рускоязычной нет. Пока. Но с английской версией не должно возникнуть проблем, там несложно). Если будете писать и возникнут проблемы — пишите, поможем.


  1. axi01
    10.11.2016 07:54

    ну наконец-то!!!
    плагины это всегда хорошо.
    может теперь кто-то с прямыми руками (нет, я сам попробую, но моими руками плагины писать, что блоху кувалдой ковать) напишет так нужные мне:
    «Продолжить нумерацию» — для ворда
    «Обрезать/кадрировать изображение» — для всего пакета.

    плагины это всегда хорошо.
    плагины с модерацией это очень хорошо.


  1. sniks
    10.11.2016 08:12

    Использовать docker контейнеры не есть лучшее решение.
    Облачная версия неимоверно тупит. Разворачивал на виртуалке отдав под систему 2 ядра и 12 гб ram. Любой простой документ в облаке очень долго открывается. Да и в приницпе веб портал очень медленно работает.
    Самый главный минус это отсутствие поддержки макросов.


  1. Zverienish
    10.11.2016 10:36

    Хотел начать пользоваться на работе. Но есть несколько «НО».
    1. Документ с имеющимся разрывом страницы открывается без него.
    2. Не особо быстро работает. Запускается дольше LibreOffice. Некоторые
    3. Для меня наверное самое главное. Очень мелкие значки и надписи. А при том что значки монохромны все, то постоянно приходится приближиться к монитору и вглядываться (при том на 24 дюймовом мониторе). Текст по размеру получается меньше в раза полтора точно, чем у того же Хрома или LibreOffice.


    1. xkorolx
      10.11.2016 11:24

      С разрывами страниц должно все быть отлично. Если пришлете файл, будем благодарны. По поводу последнего — очень странно это. Может зум выставлен у нас в редакторе? Если можно — пришлите скрины, настройки системы. Попробуем разобраться. Спасибо.


  1. beremour
    10.11.2016 22:51

    Desktop Editors version 4.1.2.270 (кстати в About выделить мышкой номер версии нельзя, только переколачивать ручками)

    Пытаемся отправить на печать
    image


    1. xkorolx
      11.11.2016 20:59

      Не получается повторить. Будем пробовать дальше. Всегда падает или случайно?


  1. DaylightIsBurning
    11.11.2016 01:03

    Возможна ли интеграция с Endnote? Как вообще со ссылками (для списка литературы) и референс-ссылками на изображения/формулы/таблицы?


    1. xkorolx
      11.11.2016 12:13

      В новой, т.е. уже следующей, версии будут добавлены сноски(на странице), концевые сноски в планах, и будут сделаны совсем скоро.


      1. DaylightIsBurning
        12.11.2016 14:27

        А что на счёт перекрёстных ссылок (labels/cross-references для формул, рисунков, таблиц, глав). Есть ли отдельная поддержка подписей (captions) под рисунками/таблицами или подписи оформляются просто абзацами не связанными с объектом?
        Можно ли надеяться на появление плагина для Endnote?


        1. xkorolx
          13.11.2016 11:53

          Пока нет. Но в планах.

          Про плагин. Мы настроены писать плагины в первую очередь «для всех». Т.е. плагины, которые будут полезны почти всем. Также помогать писать для тех заказчиков, которые начали писать, но возникли вопросы/не получается. Остальное будем добавлять так: появилась хорошая идея и появилась свободное время — сделали.


  1. Myrddin
    12.11.2016 03:26

    WPS стартует в 10 раз быстрее. Меню симпатичнее. Совместимость на таком же уровне.


  1. SoftVIP
    12.11.2016 07:56

    В программе не нашел главный функционал динамическая таблица? Есть она вообще или нет?


    1. trofim24
      14.11.2016 11:06

      Если вы про «Форматировать как таблицу (Format as table)», то у нас это есть.

      Format as table


      1. SoftVIP
        14.11.2016 17:22

        Извиняюсь за мою ошибку в стране где я живу эта функция называется динамическая таблица, но в России Сводная таблица, который функционал отличается от вами предложенного, пожалуйста подтвердите где я могу его найти


        1. trofim24
          14.11.2016 17:28

          Мы работаем над сводными таблицами и в ближайшее время добавим данную функциональность.


          1. SoftVIP
            15.11.2016 02:58

            Большое спасибо, я без них как без рук!