onlyoffice_docspace-1.1.0/js/onlyoffice-docspace-widget.js

js/onlyoffice-docspace-widget.js
/*
 * (c) Copyright Ascensio System SIA 2024
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/

(function ($, Drupal) {
  var $selectButtons = $('.oodsp-select-button');
  var $removeButtons = $('.oodsp-remove-button');
  var $oodspDialog = $('<div id="oodspModalDialog"><div id="oodsp-selector-frame"></div></div>').appendTo('body');
  var modalConfig = {
    frameId: 'oodsp-selector-frame',
    width: "100%",
    height: "100%",
    selectorType: 'roomsOnly',
    locale: drupalSettings.OODSP_Settings.locale,
    theme: "Base"
  }

  $selectButtons.on('click', function (event) {
    event.preventDefault();

    const widgetId = $(event.target).parents('.onlyoffice-docspace-widget').attr('id');
    const mode = event.target.dataset.mode || null;
    const title = event.target.dataset.title || "";
    const dialog = Drupal.dialog($oodspDialog, {
      title: title,
      width: '400px',
      height: '500px'
    });

    const onSelectRoomCallback = (event) => {
      setInputValue(widgetId, 'target-id', event[0].id);
      setInputValue(widgetId, 'type', 'manager');
      setInputValue(widgetId, 'title', event[0].label);
      setInputValue(widgetId, 'image', event[0].icon ?? "");

      const requestTokens = event[0].requestTokens;
      const requestToken = requestTokens ? requestTokens[0].requestToken : null;

      setInputValue(widgetId, 'request-token', requestToken);

      if (requestToken !== null && requestToken !== "") {
        $('div[data-drupal-selector="' + widgetId + '-fields-field-items-type"] .public-index').removeClass('hidden');
      } else {
        $('div[data-drupal-selector="' + widgetId + '-fields-field-items-type"] .public-index').addClass('hidden');
      }

      if (event[0].icon) {
        $('img[data-drupal-selector="' + widgetId + '-fields-field-image"]')
          .attr('src', Drupal.OODSP_Utils.getAbsoluteUrl(event[0].icon))
          .attr('data-default-src', drupalSettings.OODSP_Settings.images['room-icon']);
      } else {
        $('img[data-drupal-selector="' + widgetId + '-fields-field-image"]')
          .attr('src', drupalSettings.OODSP_Settings.images['room-icon'])
          .attr('data-default-src', drupalSettings.OODSP_Settings.images['room-icon']);
      }

      $('div[data-drupal-selector="' + widgetId + '-fields-field-items-type"] .value').text(drupalSettings.OODSP_Settings.labels['room']);
      $('div[data-drupal-selector="' + widgetId + '-fields-field-items-title"] .value').text(event[0].label);

      $('div[data-drupal-selector="' + widgetId + '-fields"]').removeClass('hidden');
      $('div[data-drupal-selector="' + widgetId + '-buttons"]').addClass('hidden');
      dialog.close();
    }

    const onSelectFileCallback = (event) => {
      setInputValue(widgetId, 'target-id', event.id);
      setInputValue(widgetId, 'type', 'editor');
      setInputValue(widgetId, 'title', event.title);
      setInputValue(widgetId, 'image', event.icon ?? "");

      const requestTokens = event.requestTokens;
      const requestToken = requestTokens ? requestTokens[0].requestToken : null;

      setInputValue(widgetId, 'request-token', requestToken);

      if (requestToken !== null && requestToken !== "") {
        $('div[data-drupal-selector="' + widgetId + '-fields-field-items-type"] .public-index').removeClass('hidden');
      } else {
        $('div[data-drupal-selector="' + widgetId + '-fields-field-items-type"] .public-index').addClass('hidden');
      }

      if (event.icon)
        $('img[data-drupal-selector="' + widgetId + '-fields-field-image"]')
          .attr('src', Drupal.OODSP_Utils.getAbsoluteUrl(event.icon))
          .attr('data-default-src', drupalSettings.OODSP_Settings.images['file-icon']);
      else {
        $('img[data-drupal-selector="' + widgetId + '-fields-field-image"]')
          .attr('src', drupalSettings.OODSP_Settings.images['file-icon'])
          .attr('data-default-src', drupalSettings.OODSP_Settings.images['file-icon']);
      }

      $('div[data-drupal-selector="' + widgetId + '-fields-field-items-type"] .value').text(drupalSettings.OODSP_Settings.labels['file']);
      $('div[data-drupal-selector="' + widgetId + '-fields-field-items-title"] .value').text(event.title);

      $('div[data-drupal-selector="' + widgetId + '-fields"]').removeClass('hidden');
      $('div[data-drupal-selector="' + widgetId + '-buttons"]').addClass('hidden');
      dialog.close();
    }

    const onCloseCallback = () => {
      dialog.close();
    }

    $(window).on('editor:dialogsave', () => {
      DocSpace.SDK.frames['oodsp-selector-frame'].destroyFrame();
    });

    modalConfig.mode = mode;
    switch (mode) {
      case 'room-selector':
        modalConfig.events = {
          onSelectCallback: onSelectRoomCallback,
          onCloseCallback: onCloseCallback
        }
        break;

      case 'file-selector':
        modalConfig.events = {
          onSelectCallback: onSelectFileCallback,
          onCloseCallback: onCloseCallback
        }
        break;
    }

    Drupal.OODSP_Utils.initLoginManager(
      'oodsp-selector-frame',
      function() {
        DocSpace.SDK.initFrame(modalConfig);
      }
    );
    dialog.showModal();
  });

  $removeButtons.on('click', function (event) {
    event.preventDefault();

    const widgetId = $(event.target).parents('.onlyoffice-docspace-widget').attr('id');

    setInputValue(widgetId, 'target-id', '');
    setInputValue(widgetId, 'type', '');
    setInputValue(widgetId, 'title', '');
    setInputValue(widgetId, 'image', '');
    setInputValue(widgetId, 'request-token', '');

    $('div[data-drupal-selector="' + widgetId + '-fields"]').addClass('hidden');
    $('div[data-drupal-selector="' + widgetId + '-buttons"]').removeClass('hidden');
  });

  const setInputValue = function (id, name, value) {
    $('input[data-drupal-selector="' + id + '-' + name + '"]').val(value);
  }

})(jQuery, Drupal);

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc