Task 2: WordPress – creating an outline in Google Apps Scripts.

//Needs to add more comments

/*
// Функция onEdit является триггером, который срабатывает при завершении ввода данных в ячейку Таблицы пользователем
// https://developers.google.com/apps-script/guides/triggers/#onedite
function onEdit(e) {
  Logger.log(e);

  // Получаем диапазон ячеек, в которых произошли изменения
  // https://developers.google.com/apps-script/reference/spreadsheet/range
  var range = e.range;

  // Лист, на котором производились изменения
  // https://developers.google.com/apps-script/reference/spreadsheet/sheet
  var sheet = range.getSheet();

  // Проверяем, нужный ли это нам лист
  Logger.log(sheet.getName());
  if (sheet.getName() != 'Перевод текста') {
    return false;
  }

  // Переводить необходимо текст, введённый только в первую колонку.
  // Проверяем стартовую позицию диапазона
  Logger.log(range.getColumn());
  if  (range.getColumn() != 1) {
    return false;
  }

  for (var i = 1; i <= range.getNumRows(); i++) {
    var cell = range.getCell(
      i, // номер строки
      1 // номер колонки
    );

    // Получаем текст на русском
    var russianText = cell.getValue();

    // Переводим текст на английский
    // https://developers.google.com/apps-script/reference/language/language-app
    var english = LanguageApp.translate(
      russianText, // текст
      'ru', // с какого языка переводим
      'en' // на какой язык переводим
    );

    var estonian = LanguageApp.translate(
      russianText, // текст
      'ru', // с какого языка переводим
      'et' // на какой язык переводим
    );

    var spanish = LanguageApp.translate(
      russianText, // текст
      'ru', // с какого языка переводим
      'es' // на какой язык переводим
    );

    // Вставляем переведённый текст во вторую колонку
    sheet.getRange(
      cell.getRowIndex(), // номер строки
      2 // номер столбца
    ).setValue(english);

    sheet.getRange(
      cell.getRowIndex(),
      3
    ).setValue(estonian);
    
    sheet.getRange(
      cell.getRowIndex(),
      4
    ).setValue(spanish);
  }
}


// Функция onOpen() запускается автоматически при открытии документа
// https://developers.google.com/apps-script/guides/triggers/#onopen
function onOpen() {
 
  // Создаём новое меню
  // https://developers.google.com/apps-script/reference/base/ui#createmenucaption
  SpreadsheetApp.getUi()
      .createMenu('Custom Menu')
      .addItem('Show alert', 'showAlert')
      .addItem('Show prompt', 'showPrompt')
      .addToUi();
}
 
function showAlert() {
  var ui = SpreadsheetApp.getUi();
 
  // https://developers.google.com/apps-script/reference/base/ui#alerttitle-prompt-buttons
  var result = ui.alert(
     'Подтвердите действие', // Заголовок окна
     'Вы уверены, что хотите продолжить?', // Сообщение
      ui.ButtonSet.YES_NO // Кнопки
  );
 
  if (result == ui.Button.YES) { // Пользователь нажал на "Да"
    // User clicked "Yes".
    ui.alert('Подтверждение получено.');
  } else { // Пользователь нажал на "Нет" или на X (закрыл окно)
    ui.alert('В разрешении отказано.');
  }
}
 
function showPrompt() {
  var ui = SpreadsheetApp.getUi();
 
  // https://developers.google.com/apps-script/reference/base/ui#prompttitle-prompt-buttons
  var result = ui.prompt(
      'Сообщите что-нибудь о себе!', // Заголовок
      'Введите своё имя:', // Сообщение
      ui.ButtonSet.OK_CANCEL // Кнопки
  );
 
  var result1 = ui.prompt(
      'Сообщите что-нибудь о себе!', // Заголовок
      'Введите своё день рождения:', // Сообщение
      ui.ButtonSet.OK_CANCEL // Кнопки
  );


  var button = result.getSelectedButton(); // Кнопка, на которую нажал пользователь
  var text = result.getResponseText(); // Текст, который ввёл пользователь
  var textd = result1.getResponseText(); // Текст, который ввёл пользователь
 
  if (button == ui.Button.OK) {
    ui.alert('Ваше имя: ' + text + '.\nВаше день рождения ' + textd + '.');
  } else if (button == ui.Button.CANCEL) {
    ui.alert('Вы отказались вводить своё имя.');
  } else if (button == ui.Button.CLOSE) {
    ui.alert('Вы закрыли окно.');
  }
}

*/
// Функция onOpen() запускается всегда при открытии документа
// https://developers.google.com/apps-script/guides/triggers/#onopen
function onOpen() {

  // Создаём новое меню
  // https://developers.google.com/apps-script/reference/base/ui#createmenucaption
  SpreadsheetApp.getUi()
      .createMenu('Custom Menu')
      .addItem('Show modal dialog', 'showModalDialog') // При нажатии на этот элемент меню откроется модальное окно
      .addItem('Show sidebar', 'showSidebar') // При нажатии на этот элемент меню откроется сайдбар
      .addItem('Show sidebar', 'showSidebar1') // При нажатии на этот элемент меню откроется сайдбар
      .addToUi();
}
// Открытие модального окна
function showModalDialog() {

  var modalHtml = "<code>HTML</code> код - содержимое <i>модального</i> <br> окна";

  // https://developers.google.com/apps-script/reference/html/html-service#createhtmloutputhtml
  var htmlOutput = HtmlService.createHtmlOutput(modalHtml)
        .setWidth(600) // Ширина
        .setHeight(100); // Высота

  // Альтернативный вариант  - создание модального окна с содержимым из файла
  // https://developers.google.com/apps-script/reference/html/html-service#createHtmlOutputFromFile(String)
  // В этом случаем HTML код помещаем в отдельный файл (Файл - Создать - HTML файл)
  // var htmlOutput = HtmlService.createHtmlOutputFromFile(filenameModal);

  // https://developers.google.com/apps-script/reference/base/ui#showModalDialog(Object,String)
  SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Заголовок модального окна');

}
// Открытие сайдбара
function showSidebar() {
 
    // Подключаем Bootstrap
    var sidebarHTML = '<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">';
    // Подключаем jQuery
    sidebarHTML += '<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>';
 
    // Создаём форму
    sidebarHTML += '<form style="padding: 20px;text-align:center;">\
        <div class="form-group">\
            <label for="name">Имя</label>\
            <input type="text" class="form-control" id="name" name="name" value="">\
        </div>\
        <div class="form-group">\
            <label for="abrakadabra">Какая-то абракадабра</label>\
            <textarea class="form-control" id="abrakadabra" name="abrakadabra" rows="3"></textarea> \
        </div>\
        <div class="form-group">\
            <label for="strNum">Номер строки, в которую необходимо внести данные</label>\
            <input type="text" class="form-control" id="strNum" name="strNum" value="">\
        </div>\
        <div class="form-group">\
            <label for="kodu">Номер строки, в которую необходимо дата</label>\
            <input type="date" class="form-control" id="kodu" name="kodu" value="">\
        </div>\
        <br><br><br>\
        <button type="submit" class="btn btn-primary">Записать данные в таблицу</button>\
        <br><br><br>\
        <button type="button" id="sidebarClose" class="btn btn-danger">Закрыть сайдбар</button>\
    </form>';
 
    // Добавляем скрипты
    // При сабмите формы вызываем функцию writeStrInTable() и передаём ей введённые данные
    // https://developers.google.com/apps-script/guides/html/reference/run
    // При клике на кнопку 'Закрыть сайдбар' закрываем его
    // https://developers.google.com/apps-script/guides/html/reference/host#close()
    sidebarHTML += "<script>\
     $(document).on('submit', 'form', function () { \
        google.script.run \
     .withSuccessHandler(function (resultMsg) { \
                  alert(resultMsg);\
         })\
     .writeStrInTable(\
                { name: $('#name').val(), abrakadabra: $('#abrakadabra').val(), strNum: $('#strNum').val() , kodu: $('#kodu').val()}\
     );\
        return false;\
     });\
\
     $('#sidebarClose').on('click', function() {\
        google.script.host.close();\
     });\
     </script>";
 
 
    var htmlOutput = HtmlService
        .createHtmlOutput(sidebarHTML)
        .setTitle('My add-on');
 
// https://developers.google.com/apps-script/reference/base/ui#showsidebaruserinterface
    SpreadsheetApp.getUi().showSidebar(htmlOutput);
 
}
function writeStrInTable(e) {
    var name = e.name;
    var abrakadabra = e.abrakadabra;
    var strNum = parseInt(e.strNum);
    var kodu = e.kodu;
 
    // Получаем объект с активной (открытой в данный момент) таблицей
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
 
    // Записываем полученные данные в таблицу
    sheet.getRange("A" + strNum).setValue(name);
    sheet.getRange("B" + strNum).setValue(abrakadabra);

    sheet.getRange("D" + strNum).setValue(kodu);
 
    return "Всё прошло успешно!";
}
// Открытие сайдбара
function showSidebar1() {

  var htmlOutput = HtmlService
    .createHtmlOutput('<p>A change of speed, a change of style...</p>')
    .setTitle('My add-on');

  // https://developers.google.com/apps-script/reference/base/ui#showsidebaruserinterface
  SpreadsheetApp.getUi().showSidebar(htmlOutput);

}