From 78be0ec068869f658246063b2b07b3cc866611b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ian=20Ramirez=20Espa=C3=B1a?= Date: Sat, 10 Jul 2021 10:01:15 -0500 Subject: [PATCH 1/5] Updated the BBB plugin to accept any URL Now we just make sure said URL ends with /api/ --- app/models/big_blue_button_conference.rb | 4 ++-- app/views/plugins/_big_blue_button_fallback_settings.html.erb | 2 +- app/views/plugins/_big_blue_button_settings.html.erb | 2 +- config/locales/ar.yml | 4 ++-- config/locales/cy.yml | 4 ++-- config/locales/de.yml | 4 ++-- config/locales/el.yml | 4 ++-- config/locales/en-AU.yml | 4 ++-- config/locales/en-CA.yml | 4 ++-- config/locales/en-GB.yml | 4 ++-- config/locales/es.yml | 2 +- config/locales/fa.yml | 4 ++-- config/locales/fi.yml | 4 ++-- config/locales/he.yml | 4 ++-- config/locales/ht.yml | 4 ++-- config/locales/hu.yml | 4 ++-- config/locales/hy.yml | 4 ++-- config/locales/is.yml | 4 ++-- config/locales/it.yml | 4 ++-- config/locales/ja.yml | 4 ++-- config/locales/ko.yml | 4 ++-- config/locales/mi.yml | 4 ++-- config/locales/nn.yml | 4 ++-- config/locales/pl.yml | 4 ++-- config/locales/pt-BR.yml | 4 ++-- config/locales/pt.yml | 4 ++-- config/locales/ru.yml | 4 ++-- config/locales/sv-x-k12.yml | 4 ++-- config/locales/sv.yml | 4 ++-- config/locales/tr.yml | 4 ++-- config/locales/uk.yml | 4 ++-- config/locales/zh-Hans.yml | 4 ++-- config/locales/zh-Hant.yml | 4 ++-- 33 files changed, 63 insertions(+), 63 deletions(-) diff --git a/app/models/big_blue_button_conference.rb b/app/models/big_blue_button_conference.rb index 2f2d2c686829..3113ab8e0af2 100644 --- a/app/models/big_blue_button_conference.rb +++ b/app/models/big_blue_button_conference.rb @@ -242,7 +242,7 @@ def self.generate_request(action, options, use_fallback_config: false) config_to_use = (use_fallback_config && fallback_config.presence) || config query_string = options.to_query query_string << ("&checksum=" + Digest::SHA1.hexdigest(action.to_s + query_string + config_to_use[:secret_dec])) - "https://#{config_to_use[:domain]}/bigbluebutton/api/#{action}?#{query_string}" + "#{config_to_use[:domain].sub(/(\/api)?\/?$/, '/api/')}#{action}?#{query_string}" end def send_request(action, options) @@ -311,4 +311,4 @@ def filter_duration(recording_formats) return recording_format[:length].to_i if recording_format[:length].present? end end -end +end \ No newline at end of file diff --git a/app/views/plugins/_big_blue_button_fallback_settings.html.erb b/app/views/plugins/_big_blue_button_fallback_settings.html.erb index a93edc063c0e..b80bc7112709 100644 --- a/app/views/plugins/_big_blue_button_fallback_settings.html.erb +++ b/app/views/plugins/_big_blue_button_fallback_settings.html.erb @@ -27,7 +27,7 @@ <%= f.blabel :domain, :en => "Domain" %> <%= f.text_field :domain %>
- <%= mt :domain_description, "**hostname** or **ip address** of your BigBlueButton installation (e.g. bigbluebutton.mycompany.com)" %> + <%= mt :domain_description, "**hostname** or **ip address** of your BigBlueButton installation (e.g. https://bigbluebutton.mycompany.com/bigbluebutton/)" %> diff --git a/app/views/plugins/_big_blue_button_settings.html.erb b/app/views/plugins/_big_blue_button_settings.html.erb index 4536066cd91e..928c9ada9eb9 100644 --- a/app/views/plugins/_big_blue_button_settings.html.erb +++ b/app/views/plugins/_big_blue_button_settings.html.erb @@ -27,7 +27,7 @@ <%= f.blabel :domain, :en => "Domain" %> <%= f.text_field :domain %>
- <%= mt :domain_description, "**hostname** or **ip address** of your BigBlueButton installation (e.g. bigbluebutton.mycompany.com)" %> + <%= mt :domain_description, "**hostname** or **ip address** of your BigBlueButton installation (e.g. https://bigbluebutton.mycompany.com/bigbluebutton/)" %> diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 4f838d85b9f5..becf07c0e84d 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -18898,14 +18898,14 @@ ar: name: "احتياطي BigBlueButton للترحيل" big_blue_button_fallback_settings: description: "عند تكوين المكون الإضافي BigBlueButton لاستخدام إعدادات الاحتياطي، هذه هي الإعدادات المستخدمة. لا يُستخدم الاحتياطي إلا للبحث عن تسجيلات المؤتمرات غير المنشأة بتكوين المكون الإضافي لـ BigBlueButton." - domain_description: "**اسم المضيف** أو **عنوان ip** لتثبيت BigBlueButton (مثل bigbluebutton.mycompany.com)" + domain_description: "**اسم المضيف** أو **عنوان ip** لتثبيت BigBlueButton (مثل https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: المجال secret: "كلمة السر" secret_description: "هذه هي معلمة %{parameter_name} التي يمكن العثور عليها في ملف التكوين %{filename}." big_blue_button_settings: description: "سيلزم الوصول إلى مثيل [BigBlueButton](%{url})." - domain_description: "**اسم المضيف** أو **عنوان ip** لتثبيت BigBlueButton (مثل bigbluebutton.mycompany.com)" + domain_description: "**اسم المضيف** أو **عنوان ip** لتثبيت BigBlueButton (مثل https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: المجال free_trial: "تمييز مثيل BigBlueButton هذا كإصدار تجريبي مجاني" diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 9ad9a6636d07..34f09f739dae 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -16083,14 +16083,14 @@ cy: name: "BigBlueButton Wrth Gefn ar gyfer Mudo" big_blue_button_fallback_settings: description: "Pan fyddwch chi wedi ffurfweddu eich Ategyn BigBlueButton er mwyn defnyddio gosodiadau wrth gefn, dyma’r gosodiadau mae’n eu defnyddio. Dydy’r gosodiadau wrth gefn ddim ond yn cael eu defnyddio i chwilio am recordiadau o gynadleddau na chawsant eu creu gyda’r ffufrweddiad o’ch Ategyn BigBlueButton." - domain_description: "**enw lletywr** neu **gyfeiriad ip** eich gosodiad BigBlueButton (e.e. bigbluebutton.mycompany.com)" + domain_description: "**enw lletywr** neu **gyfeiriad ip** eich gosodiad BigBlueButton (e.e. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Parth secret: Cyfrinach secret_description: "Dyma baramedr %{parameter_name} mae modd ei weld yn ffeil ffurfweddu %{filename}." big_blue_button_settings: description: "Bydd angen mynediad arnoch chi i enghraifft o [BigBlueButton](%{url})." - domain_description: "**enw lletywr** neu **gyfeiriad ip** eich BigBlueButton gosodiad (e.e. bigbluebutton.mycompany.com)" + domain_description: "**enw lletywr** neu **gyfeiriad ip** eich BigBlueButton gosodiad (e.e. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Parth free_trial: "Marcio’r achos hwn o BigBlueButton fel treial am ddim" diff --git a/config/locales/de.yml b/config/locales/de.yml index e98a6b4e078d..e153f3b5c044 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -18162,14 +18162,14 @@ de: name: "BigBlueButton Fallback für Migration" big_blue_button_fallback_settings: description: "Wenn Sie Ihr BigBlueButton-Plugin so konfiguriert haben, dass es Fallback-Einstellungen verwendet, wird es diese Einstellungen verwenden. Das Fallback wird nur verwendet, um nach Aufzeichnungen von Konferenzen zu suchen, die nicht mit der Konfiguration für Ihr BigBlueButton-Plugin erstellt wurden." - domain_description: "**Hostname** oder **IP-Adresse** Ihrer BigBlueButton-Installation (z. B. bigbluebutton.mycompany.com)" + domain_description: "**Hostname** oder **IP-Adresse** Ihrer BigBlueButton-Installation (z. B. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domäne secret: Schlüssel secret_description: "Dies ist der Parameter %{parameter_name}-, der in der Konfigurationsdatei %{filename} definiert ist." big_blue_button_settings: description: "Sie müssen Zugang zu einer [BigBlueButton](%{url})-Instanz haben." - domain_description: "**Hostname** oder **IP-Adresse** Ihrer BigBlueButton-Installation (z. B. bigbluebutton.mycompany.com)" + domain_description: "**Hostname** oder **IP-Adresse** Ihrer BigBlueButton-Installation (z. B. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domäne free_trial: "Markieren Sie diese BigBlueButton-Instanz als kostenlose Testversion" diff --git a/config/locales/el.yml b/config/locales/el.yml index 151acc43c7ee..4a68e4c977fa 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -10202,14 +10202,14 @@ el: description: "Υποστήριξη συνεδρίας μέσω διαδικτύου BigBlueButton" name: BigBlueButton big_blue_button_fallback_settings: - domain_description: "**όνομα υπολογιστή** ή **διεύθυνση ip** της εγκατάστασής σας BigBlueButton (π.χ. bigbluebutton.mycompany.com)" + domain_description: "**όνομα υπολογιστή** ή **διεύθυνση ip** της εγκατάστασής σας BigBlueButton (π.χ. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domain secret: Μυστικό secret_description: "Αυτή είναι η παράμετρος %{parameter_name} που μπορεί να βρεθεί στο αρχείο ρύθμισης %{filename}" big_blue_button_settings: description: "Πρέπει να έχετε πρόσβαση σε σύνδεση [BigBlueButton](%{url})." - domain_description: "**όνομα υπολογιστή** ή **διεύθυνση ip** της εγκατάστασής σας BigBlueButton (π.χ. bigbluebutton.mycompany.com)" + domain_description: "**όνομα υπολογιστή** ή **διεύθυνση ip** της εγκατάστασής σας BigBlueButton (π.χ. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domain recording_enabled: "Να επιτρέπεται η ηχογράφηση των συνεδριών." diff --git a/config/locales/en-AU.yml b/config/locales/en-AU.yml index 8dda76fac294..f11ad115ebb1 100644 --- a/config/locales/en-AU.yml +++ b/config/locales/en-AU.yml @@ -18288,14 +18288,14 @@ en-AU: name: "BigBlueButton Fallback For Migration" big_blue_button_fallback_settings: description: "When you have your BigBlueButton Plugin configured to use fallback settings, these are the settings it uses. The fallback is only used to look for recordings of conferences that were not created with the configuration for your BigBlueButton Plugin." - domain_description: "**hostname** or **ip address** of your BigBlueButton installation (e.g. bigbluebutton.mycompany.com)" + domain_description: "**hostname** or **ip address** of your BigBlueButton installation (e.g. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domain secret: Secret secret_description: "This is the %{parameter_name} parameter that can be found in the %{filename} config file." big_blue_button_settings: description: "You will need access to a [BigBlueButton](%{url}) instance." - domain_description: "**hostname** or **ip address** of your BigBlueButton installation (e.g. bigbluebutton.mycompany.com)" + domain_description: "**hostname** or **ip address** of your BigBlueButton installation (e.g. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domain free_trial: "Mark this BigBlueButton instance as a free trial" diff --git a/config/locales/en-CA.yml b/config/locales/en-CA.yml index b516c45126b7..00f911d26840 100644 --- a/config/locales/en-CA.yml +++ b/config/locales/en-CA.yml @@ -16246,14 +16246,14 @@ en-CA: name: "BigBlueButton Fallback For Migration" big_blue_button_fallback_settings: description: "When you have your BigBlueButton Plugin configured to use fallback settings, these are the settings it uses. The fallback is only used to look for recordings of conferences that were not created with the configuration for your BigBlueButton Plugin." - domain_description: "**hostname** or **ip address** of your BigBlueButton installation (e.g. bigbluebutton.mycompany.com)" + domain_description: "**hostname** or **ip address** of your BigBlueButton installation (e.g. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domain secret: Secret secret_description: "This is the %{parameter_name} parameter that can be found in the %{filename} config file." big_blue_button_settings: description: "You will need access to a [BigBlueButton](%{url}) instance." - domain_description: "**hostname** or **ip address** of your BigBlueButton installation (e.g. bigbluebutton.mycompany.com)" + domain_description: "**hostname** or **ip address** of your BigBlueButton installation (e.g. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domain free_trial: "Mark this BigBlueButton instance as a free trial" diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index a0e40dc1f3b3..0ef3d3bab25f 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -18286,14 +18286,14 @@ en-GB: name: "BigBlueButton Fallback For Migration" big_blue_button_fallback_settings: description: "When you have your BigBlueButton Plugin configured to use fallback settings, these are the settings it uses. The fallback is only used to look for recordings of conferences that were not created with the configuration for your BigBlueButton Plugin." - domain_description: "**hostname** or **IP address** of your BigBlueButton installation (e.g. bigbluebutton.mycompany.com)" + domain_description: "**hostname** or **IP address** of your BigBlueButton installation (e.g. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domain secret: Secret secret_description: "This is the %{parameter_name} parameter that can be found in the %{filename} config file." big_blue_button_settings: description: "You will need access to a [BigBlueButton](%{url}) instance." - domain_description: "**hostname** or **ip address** of your BigBlueButton installation (e.g. bigbluebutton.mycompany.com)" + domain_description: "**hostname** or **ip address** of your BigBlueButton installation (e.g. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domain free_trial: "Mark this BigBlueButton instance as a free trial" diff --git a/config/locales/es.yml b/config/locales/es.yml index 108ccc20f47c..0d377d027f68 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -18241,7 +18241,7 @@ es: secret_description: "Este es el parámetro %{parameter_name} que puede encontrarse en el archivo de configuración %{filename}." big_blue_button_settings: description: "Necesitará acceso a [BigBlueButton](%{url})." - domain_description: "**nombre del huésped** o **dirección ip** de su instalación BigBlueButton (p. ej., bigbluebutton.mycompany.com)" + domain_description: "**nombre del huésped** o **dirección ip** de su instalación BigBlueButton (p. ej., https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Dominio free_trial: "Marque esta instancia de BigBlueButton como prueba gratuita" diff --git a/config/locales/fa.yml b/config/locales/fa.yml index cb3f2477882c..a2b2875e500c 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -15477,14 +15477,14 @@ fa: description: "پشتیبانی از برگزاری کنفرانس مجازی BigBlueButton" name: BigBlueButton big_blue_button_fallback_settings: - domain_description: "**نام میزبان** یا **نشانی آی پی** برای نصب BigBlueButton شما (برای مثال، bigbluebutton.mycompany.com)" + domain_description: "**نام میزبان** یا **نشانی آی پی** برای نصب BigBlueButton شما (برای مثال، https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: دامنه secret: رمز secret_description: "این پارامتر %{parameter_name} است که می توان آن را در فایل پیکربندی %{filename} یافت." big_blue_button_settings: description: "نیاز به دسترسی به یک نمونه ی [BigBlueButton](%{url}) خواهید داشت." - domain_description: "**نام میزبان** یا **نشانی آی پی** برای نصب BigBlueButton شما (برای مثال، bigbluebutton.mycompany.com)" + domain_description: "**نام میزبان** یا **نشانی آی پی** برای نصب BigBlueButton شما (برای مثال، https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: دامنه recording_enabled: "به کنفرانس ها اجازه ضبط شدن بدهید." diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 0ac186765282..209e99352a10 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -14512,14 +14512,14 @@ fi: name: "BigBlueButton-varasuunnitelma siirtoon" big_blue_button_fallback_settings: description: "kun BigBlueButton-lisäosa on konfiguroitu käyttämään vara-asetuksia, nämä ovat sen käyttämät asetukset. Vara-asetuksia käytetään vain sellaisten konferenssien nauhoitusten etsimiseen, joita ei luotu konfiguroinnin kanssa BiBlueButton-lisäosalle." - domain_description: "BigBlueButton-sovelluksen **isäntänimi** tai **ip-osoite** (esim. bigbluebutton.mycompany.com)" + domain_description: "BigBlueButton-sovelluksen **isäntänimi** tai **ip-osoite** (esim. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Verkkotunnus secret: Salaisuus secret_description: "Tämä on %{parameter_name} parametri, joka löytyy %{filename} konfigurointitiedostosta." big_blue_button_settings: description: "Tarvitset pääsyn [BigBlueButton](%{url})-esiintymään." - domain_description: "BigBlueButton-sovelluksen **isäntänimi** tai **ip-osoite** (esim. bigbluebutton.mycompany.com)" + domain_description: "BigBlueButton-sovelluksen **isäntänimi** tai **ip-osoite** (esim. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Verkkotunnus free_trial: "Merkitse tämä BigBlueButton- esiintymä ilmaiseksi kokeiluksi" diff --git a/config/locales/he.yml b/config/locales/he.yml index d229573c5003..66de5eee8203 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -13596,14 +13596,14 @@ he: description: "תמיכת שיחות ועידה אינטרנטיות של BigBlueButton" name: BigBlueButton big_blue_button_fallback_settings: - domain_description: "**שם השרת המארח** או **כתובת ה IP** של התקנת BigBlueButton שלך (למשל bigbluebutton.mycompany.com)" + domain_description: "**שם השרת המארח** או **כתובת ה IP** של התקנת BigBlueButton שלך (למשל https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: דומיין secret: סודי/ת secret_description: "זהו הפרמטר %{parameter_name} אשר ניתן למצוא בקובץ הקונפיגורציה %{filename}." big_blue_button_settings: description: "יש צורך להכנס אל מופע [BigBlueButton](%{url}) ." - domain_description: "**שם השרת המארח** או **כתובת ה IP** של התקנת BigBlueButton שלך (למשל bigbluebutton.mycompany.com)" + domain_description: "**שם השרת המארח** או **כתובת ה IP** של התקנת BigBlueButton שלך (למשל https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: דומיין recording_enabled: "מתן אפשרות להקלטת שיחות ועידה" diff --git a/config/locales/ht.yml b/config/locales/ht.yml index 107f01ab7119..75c07cfa9b01 100644 --- a/config/locales/ht.yml +++ b/config/locales/ht.yml @@ -16744,14 +16744,14 @@ ht: name: "BigBlueButton Retou pou Migrasyon" big_blue_button_fallback_settings: description: "Lè plugin BigBlueButton ou an konfigire pou li itilize paramèt rechanj yo, se paramèt sa yo li itilize. Yo itilize rechanj lan sèlman pou chèche anrejistreman konferans ki pa t kreye anvan konfigirasyon Plugin BigBlueButton ou an." - domain_description: "**Non hôte** oswa **adrès IP** enstalasyon BigBlueButton ou an (egzanp. bigbluebutton.mycompany.com)" + domain_description: "**Non hôte** oswa **adrès IP** enstalasyon BigBlueButton ou an (egzanp. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domèn secret: Sekrè secret_description: "Se paramèt %{parameter_name} nou ka jwenn nan fichye konfigirasyon %{filename} ." big_blue_button_settings: description: "W ap bezwen ale sou yon enstans [BigBlueButton](%{url})." - domain_description: "**hostname** oswa **ip address** enstalasyon BigBlueButton ou an (e.g. bigbluebutton.mycompany.com)" + domain_description: "**hostname** oswa **ip address** enstalasyon BigBlueButton ou an (e.g. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domèn free_trial: "Make enstans BigBlueButton sa kòm tès gratis" diff --git a/config/locales/hu.yml b/config/locales/hu.yml index fde8122922d8..b0fbda011aff 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -12102,14 +12102,14 @@ hu: description: "BigBlueButton webkonferencia támogatás" name: BigBlueButton big_blue_button_fallback_settings: - domain_description: "BigBlueButton telepítéshez (pl. bigbluebutton.mycompany.com) tartozó **host név** vagy **ip cím**" + domain_description: "BigBlueButton telepítéshez (pl. https://bigbluebutton.mycompany.com/bigbluebutton/) tartozó **host név** vagy **ip cím**" labels: domain: Tartomány secret: Titkos secret_description: "Ez a/az %{parameter_name} paraméter, ami a/az %{filename} konfigurációs fájlban található." big_blue_button_settings: description: "Hozzáférés szükséges egy [BigBlueButton](%{url}) példányhoz." - domain_description: "BigBlueButton telepítéshez (pl. bigbluebutton.mycompany.com) tartozó **host név** vagy **ip cím**" + domain_description: "BigBlueButton telepítéshez (pl. https://bigbluebutton.mycompany.com/bigbluebutton/) tartozó **host név** vagy **ip cím**" labels: domain: Tartomány recording_enabled: "Konferenciák rögzítésének engedélyezése." diff --git a/config/locales/hy.yml b/config/locales/hy.yml index 5d4e97bfff71..45d65b4b67ec 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -11410,14 +11410,14 @@ hy: description: "Վեբ-կոնֆերանսների BigBlueButton աջակցություն" name: BigBlueButton big_blue_button_fallback_settings: - domain_description: "Ձեր BigBlueButton-ի տեղադրման **հանգույցի անունը** կամ **ip հասցեն** (օր.՝ bigbluebutton.mycompany.com)" + domain_description: "Ձեր BigBlueButton-ի տեղադրման **հանգույցի անունը** կամ **ip հասցեն** (օր.՝ https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Դոմեն secret: Գաղտնի secret_description: "Սա %{parameter_name} պարամետրն է, որը կարելի է գտնել %{filename} կարգաբերման ֆայլում:" big_blue_button_settings: description: "Ձեզ պետք կլինի մուտք գործել դեպի [BigBlueButton](%{url}) օրինակ" - domain_description: "Ձեր BigBlueButton-ի տեղադրման **հանգույցի անունը** կամ **ip հասցեն** (օր.՝ bigbluebutton.mycompany.com)" + domain_description: "Ձեր BigBlueButton-ի տեղադրման **հանգույցի անունը** կամ **ip հասցեն** (օր.՝ https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Դոմեն recording_enabled: "Թույլ տալ կոնֆերանսների ձայնագրումը" diff --git a/config/locales/is.yml b/config/locales/is.yml index 3df9291f82c0..ffb48b50ea1d 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -16349,14 +16349,14 @@ is: name: "BigBlueButton til vara fyrir flutning" big_blue_button_fallback_settings: description: "Þegar búið er að setja inn til vara stillingar BigBlueButton innbótarinnar eru þær stillingar notaðar. Til vara stillingarnar eru aðeins notaðar til að leita að upptökum af ráðstefnum sem voru ekki gerðar með stillingu fyrir BigBlueButton innbótina." - domain_description: "**hýsilnafn** eða **IP-tala** BigBlueButton uppsetningarinnar (t.d. bigbluebutton.mycompany.com)" + domain_description: "**hýsilnafn** eða **IP-tala** BigBlueButton uppsetningarinnar (t.d. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Lén secret: Lykill secret_description: "Þetta er %{parameter_name} breytan sem má finna í %{filename} stillingarskránni." big_blue_button_settings: description: "Þú þarft aðgang að [BigBlueButton](%{url}) tilviki." - domain_description: "**hýsitölvunafn** eða **vistfang** BigBlueButton-uppsetningarinnar, (t.d. bigbluebutton.mycompany.com)." + domain_description: "**hýsitölvunafn** eða **vistfang** BigBlueButton-uppsetningarinnar, (t.d. https://bigbluebutton.mycompany.com/bigbluebutton/)." labels: domain: Lén free_trial: "Merkja þetta BigBlueButton tilvik sem ókeypis prufu" diff --git a/config/locales/it.yml b/config/locales/it.yml index 224d858f5785..aa37ceb8f8c4 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -16202,14 +16202,14 @@ it: name: "Fallback BigBlueButton per la migrazione" big_blue_button_fallback_settings: description: "Quando hai configurato il tuo BigBlueButton Plugin per l’uso delle impostazioni di fallback, queste saranno le impostazioni che utilizza. Il fallback viene usato solo per cercare le registrazioni di conferenze che non sono state create con la configurazione per il tuo BigBlueButton Plugin." - domain_description: "**nome host** o **indirizzo ip** della tua installazione BigBlueButton (ad es. bigbluebutton.mycompany.com)" + domain_description: "**nome host** o **indirizzo ip** della tua installazione BigBlueButton (ad es. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Dominio secret: Segreto secret_description: "Questo è il parametro %{parameter_name} che puoi trovare nel file di configurazione %{filename}." big_blue_button_settings: description: "Devi accedere a una istanza [BigBlueButton](%{url})." - domain_description: "**nome host** o **indirizzo ip** della tua installazione BigBlueButton (es. bigbluebutton.mycompany.com)" + domain_description: "**nome host** o **indirizzo ip** della tua installazione BigBlueButton (es. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Dominio free_trial: "Contrassegna questa istanza BigBlueButton come prova gratuita" diff --git a/config/locales/ja.yml b/config/locales/ja.yml index bb7b615c3aa5..bd90bc223d7b 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -18232,14 +18232,14 @@ ja: name: "移行のための BigBlueButton フォールバック" big_blue_button_fallback_settings: description: これらは、BigBlueButtonプラグインがフォールバック設定を使用するように構成されている場合にプラグインが使用する設定です。フォールバックは、BigBlueButtonプラグインの構成で作成されなかった会議の記録を探すためにのみ使用されます。 - domain_description: "BigBlueButtonインストールの**ホスト名**または**IPアドレス** (bigbluebutton.mycompany.comなど)" + domain_description: "BigBlueButtonインストールの**ホスト名**または**IPアドレス** (https://bigbluebutton.mycompany.com/bigbluebutton/など)" labels: domain: ドメイン secret: シークレット secret_description: "これは、%{parameter_name}構成ファイル%{filename}にあるパラメータです。" big_blue_button_settings: description: "[BigBlueButton](%{url}) インスタンスへのアクセスが必要になります。" - domain_description: "BigBlueButton をインストールする **ホスト名** または **IP アドレス** (例: bigbluebutton.mycompany.com)" + domain_description: "BigBlueButton をインストールする **ホスト名** または **IP アドレス** (例: https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: ドメイン free_trial: "この BigBlueButton インスタンスを無料トライアルとしてマークする" diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 04987187098f..4ce2ab9a73de 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -9594,14 +9594,14 @@ ko: description: "BigBlueButton 웹 회의 지원" name: BigBlueButton big_blue_button_fallback_settings: - domain_description: "설치된 BigBlueButton의 **hostname** 또는 **ip address** (e.g. bigbluebutton.mycompany.com)" + domain_description: "설치된 BigBlueButton의 **hostname** 또는 **ip address** (e.g. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: 도메인 secret: 시크릿 secret_description: "이는 %{filename} 구성 파일에서 찾을 수 있는 %{parameter_name} 매개 변수입니다." big_blue_button_settings: description: "[BigBlueButton](%{url}) 인스턴스에 대한 액세스가 필요합니다." - domain_description: "설치된 BigBlueButton의 **hostname** 또는 **ip address** (e.g. bigbluebutton.mycompany.com)" + domain_description: "설치된 BigBlueButton의 **hostname** 또는 **ip address** (e.g. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: 도메인 recording_enabled: "회의 녹음/녹화를 허용합니다." diff --git a/config/locales/mi.yml b/config/locales/mi.yml index 0a66425bfb99..d6cef7658c40 100644 --- a/config/locales/mi.yml +++ b/config/locales/mi.yml @@ -18165,14 +18165,14 @@ mi: name: "BigBlueButton Takamuri mo te Haerenga" big_blue_button_fallback_settings: description: "I te wā e taea ai e koete mahi i tō BigBlueButton Plugin ki te mahi i te taka ki muri tautuhinga koinei ngā tautuhinga e whakamahiatia. Te taka ki muri ka mahi noaiho ki te kimi i ngā tuhinga o ngā huinga kaore he hangaia me te whakamahi mō tō BigBlueButton Plugin." - domain_description: "**ingoa ope** rānei **IP wāhitau** o tō whakurutanga BigBlueButton(hei tauira bigbluebutton.mycompany.com)" + domain_description: "**ingoa ope** rānei **IP wāhitau** o tō whakurutanga BigBlueButton(hei tauira https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Rohe secret: Huna secret_description: "Ko tēnei te %{parameter_name} tawhā e taea te kitea i roto i te %{filename} whirihora kōnae." big_blue_button_settings: description: "Ka hiahia koe i te uru ki tētahi [BigBlueButton](%{url}).tauira" - domain_description: "** ingoa ope **rānei ** p wāhitaui ** o tō BigBlueButtonwhakurutanga (hei tauira bigbluebutton.mycompany.com)" + domain_description: "** ingoa ope **rānei ** p wāhitaui ** o tō BigBlueButtonwhakurutanga (hei tauira https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: rohe free_trial: "Tohu i tēnei BigBlueButton wāhanga hei whakamahi kore utu" diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 4c371f5f3bf4..8251b893b3f1 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -15416,14 +15416,14 @@ nn: description: "Støtte for BigBlueButton-webkonferanse" name: BigBlueButton big_blue_button_fallback_settings: - domain_description: "**hostname** eller **ip address** til BigBlueButton-installasjonen din (e.g. bigbluebutton.mycompany.com)" + domain_description: "**hostname** eller **ip address** til BigBlueButton-installasjonen din (e.g. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domene secret: Hemmelegheit secret_description: "Dette er %{parameter_name}-parameteren som du finn i konfigurasjonsfila %{filename}." big_blue_button_settings: description: "Du må ha tilgang til ein [BigBlueButton](%{url})-førekomst." - domain_description: "**hostname** eller **ip address** til BigBlueButton-installasjonen din (e.g. bigbluebutton.mycompany.com)" + domain_description: "**hostname** eller **ip address** til BigBlueButton-installasjonen din (e.g. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domene free_trial: "Marker BigBlueButton-instansen som ein gratis test" diff --git a/config/locales/pl.yml b/config/locales/pl.yml index d34af0b75bfc..ec2ec591917c 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -18575,14 +18575,14 @@ pl: name: "Cofnięcie ustawień BigBlueButton podczas migracji" big_blue_button_fallback_settings: description: "Jeśli w konfiguracji dodatku BigBlueButton wybrano ustawienia awaryjne, tych ustawień będzie używać. Funkcja awaryjna jest używana tylko do wyszukania nagrań konferencji, których nie utworzono z konfiguracją dla dodatku BigBlueButton." - domain_description: "**nazwa hosta** lub **adres IP** do instalacji dodatku BigBlueButton (np. bigbluebutton.mycompany.com)" + domain_description: "**nazwa hosta** lub **adres IP** do instalacji dodatku BigBlueButton (np. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domena secret: "Klucz tajny" secret_description: "Jest to parametr %{parameter_name}, który można znaleźć w pliku konfiguracji %{filename}." big_blue_button_settings: description: "Wymagany jest dostęp do wersji systemu [BigBlueButton](%{url})." - domain_description: "**nazwa hosta**lub **adres IP** do instalacji użytkownika w systemie BigBlueButton (np. bigbluebutton.mycompany.com)" + domain_description: "**nazwa hosta**lub **adres IP** do instalacji użytkownika w systemie BigBlueButton (np. https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domena free_trial: "Oznacz tę instancję BigBlueButton jako bezpłatną wersję próbną" diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 41b2348f9f55..29d52ea15d2e 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -18230,14 +18230,14 @@ pt-BR: name: "Fallback de BigBlueButton para migração" big_blue_button_fallback_settings: description: "Há configurações que que o plugin BigBlueButton usa, como configurações de fallback. O fallback só é usado para buscar registros de conferências que não foram criadas com a configuração para o seu plugin BigBlueButton." - domain_description: "**nome do host** ou **endereço ip** da sua instalação do BigBlueButton (por exemplo, bigbluebutton.mycompany.com)" + domain_description: "**nome do host** ou **endereço ip** da sua instalação do BigBlueButton (por exemplo, https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domínio secret: Segredo secret_description: "Este é o parâmetro %{parameter_name} que pode ser encontrado no arquivo config %{filename}." big_blue_button_settings: description: "Será necessário acessar uma instância do [BigBlueButton](%{url})." - domain_description: "**nome do host** ou **endereço ip** da sua instalação do BigBlueButton (por exemplo, bigbluebutton.mycompany.com)" + domain_description: "**nome do host** ou **endereço ip** da sua instalação do BigBlueButton (por exemplo, https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domínio free_trial: "Marcar esta instância BigBlueButton como uma avaliação grátis" diff --git a/config/locales/pt.yml b/config/locales/pt.yml index da8e745c1d8e..c5289ce9c9c9 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -18257,14 +18257,14 @@ pt: name: "BigBlueButton Fallback Para Migração" big_blue_button_fallback_settings: description: "Quando você tem seu BigBlueButton Plugin configurado para usar configurações de fallback, estas são as configurações que ele usa. O fallback é apenas usado para procurar gravações de conferências que não foram criadas com a configuração do seu BigBlueButton Plugin." - domain_description: "**nome do host** ou **endereço ip** da sua instalação do BigBlueButton (por exemplo, bigbluebutton.mycompany.com)" + domain_description: "**nome do host** ou **endereço ip** da sua instalação do BigBlueButton (por exemplo, https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domínio secret: Segredo secret_description: "Este é o parâmetro %{parameter_name} que pode ser encontrado no ficheiro config %{filename}." big_blue_button_settings: description: "Será necessário acessar uma instância do [BigBlueButton](%{url})." - domain_description: "**nome do host** ou **endereço ip** da sua instalação do BigBlueButton (por exemplo, bigbluebutton.mycompany.com)" + domain_description: "**nome do host** ou **endereço ip** da sua instalação do BigBlueButton (por exemplo, https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domínio free_trial: "Marcar esta instância BigBlueButton como um teste gratuito" diff --git a/config/locales/ru.yml b/config/locales/ru.yml index aa4c99f98118..c2cc9465c3ed 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -18594,14 +18594,14 @@ ru: name: "Возврат BigBlueButton для миграции" big_blue_button_fallback_settings: description: "Если вы сконфигурировали свой плагин BigBlueButton на использование возврата в исходный режим, он будет использовать эти настройки. Возврат в исходное положение используется только для просмотра записей конференций, которые не были созданы путем конфигурирования вашего плагина BigBlueButton." - domain_description: "**имя хоста** или **ip-адрес** вашей инсталляции BigBlueButton (например, bigbluebutton.mycompany.com)" + domain_description: "**имя хоста** или **ip-адрес** вашей инсталляции BigBlueButton (например, https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Домен secret: Секретная secret_description: "Это параметр %{parameter_name}, который можно найти в файле конфигурации %{filename}." big_blue_button_settings: description: "Потребуется доступ к экземпляру [BigBlueButton](%{url})." - domain_description: "**Имя хоста** или **ip-адрес** установки BigBlueButton (например, bigbluebutton.mycompany.com)" + domain_description: "**Имя хоста** или **ip-адрес** установки BigBlueButton (например, https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Домен free_trial: "Помечает данную копию BigBlueButton как бесплатную демонстрационную версию" diff --git a/config/locales/sv-x-k12.yml b/config/locales/sv-x-k12.yml index e31b0e37c4b7..af82d8ee68b0 100644 --- a/config/locales/sv-x-k12.yml +++ b/config/locales/sv-x-k12.yml @@ -15799,14 +15799,14 @@ sv-x-k12: name: "BigBlueButton-reservlösning för migrering" big_blue_button_fallback_settings: description: "När du har konfigurerat ditt BigBlueButton-pluginprogram för användning av reservinställningar är det dessa inställningar som används. Reservinställningarna används endast för att söka efter inspelade konferenser som inte skapats med konfigurationen för ditt BigBlueButton-pluginprogram." - domain_description: "**värdnamn** eller **ip-adress** för din BigBlueButton-installation (t.ex bigbluebutton.mycompany.com)" + domain_description: "**värdnamn** eller **ip-adress** för din BigBlueButton-installation (t.ex https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domän secret: Hemlighet secret_description: "Det här är den %{parameter_name} parameter som finns i %{filename} konfig-filen." big_blue_button_settings: description: "Du behöver åtkomst till en [BigBlueButton](%{url})-instans." - domain_description: "**värdnamn** eller **ip-adress** för din BigBlueButton-installation (t.ex bigbluebutton.mycompany.com)" + domain_description: "**värdnamn** eller **ip-adress** för din BigBlueButton-installation (t.ex https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domän free_trial: "Markera den här BigBlueButton-instansen som en kostnadsfri testversion" diff --git a/config/locales/sv.yml b/config/locales/sv.yml index bf1ab4959b6d..ca2dcfeedd40 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -18262,14 +18262,14 @@ sv: name: "BigBlueButton-reservlösning för migrering" big_blue_button_fallback_settings: description: "När du har konfigurerat ditt BigBlueButton-pluginprogram för användning av reservinställningar är det dessa inställningar som används. Reservinställningarna används endast för att söka efter inspelade konferenser som inte skapats med konfigurationen för ditt BigBlueButton-pluginprogram." - domain_description: "**värdnamn** eller **ip-adress** för din BigBlueButton-installation (t.ex bigbluebutton.mycompany.com)" + domain_description: "**värdnamn** eller **ip-adress** för din BigBlueButton-installation (t.ex https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domän secret: Hemlighet secret_description: "Det här är den %{parameter_name} parameter som finns i %{filename} konfig-filen." big_blue_button_settings: description: "Du behöver åtkomst till en [BigBlueButton](%{url})-instans." - domain_description: "**värdnamn** eller **ip-adress** för din BigBlueButton-installation (t.ex bigbluebutton.mycompany.com)" + domain_description: "**värdnamn** eller **ip-adress** för din BigBlueButton-installation (t.ex https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Domän free_trial: "Markera den här BigBlueButton-instansen som en kostnadsfri testversion" diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 68297cfbe505..0bd2a3f14c5b 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -13567,14 +13567,14 @@ tr: description: "BigBlueButton web konferans desteği" name: BigBlueButton big_blue_button_fallback_settings: - domain_description: "BigblueButton kurulumunuzun **hostname** veya **ip address** (örneğin bigbluebutton.mycompany.com)" + domain_description: "BigblueButton kurulumunuzun **hostname** veya **ip address** (örneğin https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: "Alan Adı" secret: Secret secret_description: "%{parameter_name} parametresi %{filename} ayar dosyasında bulundu." big_blue_button_settings: description: "[BigBlueButton](%{url}) sunucusuna erişim gerekiyor." - domain_description: "BigblueButton kurulumunuzun **hostname** veya **ip address** (örneğin bigbluebutton.mycompany.com)" + domain_description: "BigblueButton kurulumunuzun **hostname** veya **ip address** (örneğin https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Alan recording_enabled: "Canlı derslerin kaydedilmesine izin ver." diff --git a/config/locales/uk.yml b/config/locales/uk.yml index e6693957a514..2e9e6d44b057 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -12140,14 +12140,14 @@ uk: description: "Підтримка веб-конференції BigBlueButton" name: BigBlueButton big_blue_button_fallback_settings: - domain_description: "**назва хоста** або **ip-адреса** вашої установки BigBlueButton (наприклад, bigbluebutton.mycompany.com)" + domain_description: "**назва хоста** або **ip-адреса** вашої установки BigBlueButton (наприклад, https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Домен secret: Таємно secret_description: "Це параметр %{parameter_name}, який може бути знайдений в конфігураційному файлі %{filename}." big_blue_button_settings: description: "Вам буде потрібен доступ до екземляра [BigBlueButton](%{url})." - domain_description: "**назва хоста** або **ip-адреса** вашої установки BigBlueButton (наприклад, bigbluebutton.mycompany.com)" + domain_description: "**назва хоста** або **ip-адреса** вашої установки BigBlueButton (наприклад, https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: Домен recording_enabled: "Дозволити запис конференцій." diff --git a/config/locales/zh-Hans.yml b/config/locales/zh-Hans.yml index 840036f39ffe..ac769b684cbc 100644 --- a/config/locales/zh-Hans.yml +++ b/config/locales/zh-Hans.yml @@ -18216,14 +18216,14 @@ zh-Hans: name: "BigBlueButton 迁移回退" big_blue_button_fallback_settings: description: "将 BigBlueButton 插件配置为使用回滚设置后,它会使用这些设置。回滚仅用于查找未使用 BigBlueButton 插件配置创建的会议的录制文件。" - domain_description: "BigBlueButton 安装的**主机名**或** IP 地址**(例如,bigbluebutton.mycompany.com)" + domain_description: "BigBlueButton 安装的**主机名**或** IP 地址**(例如,https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: 域 secret: 加密 secret_description: "这是 %{parameter_name} 参数,可在 %{filename} 配置文件中找到。" big_blue_button_settings: description: "您将需要访问 [BigBlueButton](%{url}) 实例。" - domain_description: "BigBlueButton 安装的**主机名**或 **ip 地址**(例如,bigbluebutton.mycompany.com)" + domain_description: "BigBlueButton 安装的**主机名**或 **ip 地址**(例如,https://bigbluebutton.mycompany.com/bigbluebutton/)" labels: domain: 域 free_trial: "将此 BigBlueButton 实例标记为免费试用" diff --git a/config/locales/zh-Hant.yml b/config/locales/zh-Hant.yml index 57ca0bfe64e9..c32970c3f2a7 100644 --- a/config/locales/zh-Hant.yml +++ b/config/locales/zh-Hant.yml @@ -18229,14 +18229,14 @@ zh-Hant: name: "BigBlueButton 遷移後援" big_blue_button_fallback_settings: description: "如果您已設置 BigBlueButton 插件以使用後援設定,則會使用這些設定。後援僅用於尋找並非使用您的 BigBlueButton 插件設置創建的會議錄影記錄。" - domain_description: "您的 BigBlueButton 安裝(如 bigbluebutton.mycompany.com)的**主機名稱**或**IP 地址**" + domain_description: "您的 BigBlueButton 安裝(如 https://bigbluebutton.mycompany.com/bigbluebutton/)的**主機名稱**或**IP 地址**" labels: domain: 網域 secret: 加密資料 secret_description: "這些是可以在 %{filename} 配置文檔中找到的 %{parameter_name} 參數。" big_blue_button_settings: description: "您將需要訪問 [BigBlueButton](%{url})實例。" - domain_description: "您的 BigBlueButton 安裝(如 bigbluebutton.mycompany.com)的**主機名稱**或**IP 地址**" + domain_description: "您的 BigBlueButton 安裝(如 https://bigbluebutton.mycompany.com/bigbluebutton/)的**主機名稱**或**IP 地址**" labels: domain: 網域 free_trial: "標記此 BigBlueButton 為免費試用" From 1bc3f6c94a32e8b2683e3c43a5c0d7bf7628d345 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ian=20Ramirez-Espa=C3=B1a?= Date: Sat, 10 Jul 2021 14:05:35 -0500 Subject: [PATCH 2/5] Revert "Merge branch 'instructure:master' into master" This reverts commit d7ff21366c6ee16b080698703d429f5e6d4c712f, reversing changes made to 78be0ec068869f658246063b2b07b3cc866611b1. --- jest.config.js | 5 +- jest/jest-setup.js | 8 +- packages/canvas-rce/demo/app.js | 14 +- .../src/rce/{RCE.js => CanvasRce.js} | 38 +++- packages/canvas-rce/src/rce/RCEWrapper.js | 54 ++--- packages/canvas-rce/src/rce/StatusBar.js | 7 +- .../src/rce/__mocks__/tinymceReact.js | 7 +- .../{RCE.test.js => CanvasRce.test.js} | 10 +- .../canvas-rce/test/module/RCEWrapper.test.js | 3 +- ui/shared/rce/react/CanvasRce.js | 16 +- .../rce/react/__tests__/CanvasRce.test.js | 201 ------------------ ui/shared/rce/tinymce.config.js | 26 +-- 12 files changed, 83 insertions(+), 306 deletions(-) rename packages/canvas-rce/src/rce/{RCE.js => CanvasRce.js} (85%) rename packages/canvas-rce/src/rce/__tests__/{RCE.test.js => CanvasRce.test.js} (86%) delete mode 100644 ui/shared/rce/react/__tests__/CanvasRce.test.js diff --git a/jest.config.js b/jest.config.js index 6c1fde3de2bd..61105a656b47 100644 --- a/jest.config.js +++ b/jest.config.js @@ -27,9 +27,10 @@ module.exports = { '^Backbone$': '/public/javascripts/Backbone.js', // jest can't import the icons '@instructure/ui-icons/es/svg': '/packages/canvas-rce/src/rce/__tests__/_mockIcons.js', - // redirect imports from es/rce to lib + // redirect import from es/rce/CanvasRce to lib + '@instructure/canvas-rce/es/rce/CanvasRce': + '/packages/canvas-rce/lib/rce/CanvasRce.js', '@instructure/canvas-rce/es/rce/tinyRCE': '/packages/canvas-rce/lib/rce/tinyRCE.js', - '@instructure/canvas-rce/es/rce/RCE': '/packages/canvas-rce/lib/rce/RCE.js', // mock the tinymce-react Editor react component '@tinymce/tinymce-react': '/packages/canvas-rce/src/rce/__mocks__/tinymceReact.js' }, diff --git a/jest/jest-setup.js b/jest/jest-setup.js index 9ff6380412bf..6545324c49be 100644 --- a/jest/jest-setup.js +++ b/jest/jest-setup.js @@ -25,9 +25,7 @@ filterUselessConsoleMessages(console) require('jest-fetch-mock').enableFetchMocks() window.scroll = () => {} -window.ENV = { - use_rce_enhancements: true -} +window.ENV = {} Enzyme.configure({adapter: new Adapter()}) @@ -77,8 +75,8 @@ if (process.env.DEPRECATION_SENTRY_DSN) { } }).install() - const setupRavenConsoleLoggingPlugin = - require('../ui/boot/initializers/setupRavenConsoleLoggingPlugin').default + const setupRavenConsoleLoggingPlugin = require('../app/jsx/shared/helpers/setupRavenConsoleLoggingPlugin') + .default setupRavenConsoleLoggingPlugin(Raven, {loggerName: 'console-jest'}) } diff --git a/packages/canvas-rce/demo/app.js b/packages/canvas-rce/demo/app.js index 4df0e2e75d73..a827c4ded100 100644 --- a/packages/canvas-rce/demo/app.js +++ b/packages/canvas-rce/demo/app.js @@ -18,7 +18,7 @@ import React, {useEffect, useRef, useState} from 'react' import ReactDOM from 'react-dom' -import RCE from '../src/rce/RCE' +import CanvasRce from '../src/rce/CanvasRce' import DemoOptions from './DemoOptions' import {Button} from '@instructure/ui-buttons' import {View} from '@instructure/ui-view' @@ -183,20 +183,18 @@ function Demo() { return ( <>
- { setCurrentContent(editor.getContent()) }} diff --git a/packages/canvas-rce/src/rce/RCE.js b/packages/canvas-rce/src/rce/CanvasRce.js similarity index 85% rename from packages/canvas-rce/src/rce/RCE.js rename to packages/canvas-rce/src/rce/CanvasRce.js index f6216590752d..9d3b1fd8ec5b 100644 --- a/packages/canvas-rce/src/rce/RCE.js +++ b/packages/canvas-rce/src/rce/CanvasRce.js @@ -17,9 +17,9 @@ */ import React, {forwardRef, useState} from 'react' -import {arrayOf, bool, func, number, objectOf, oneOfType, shape, string} from 'prop-types' +import {arrayOf, bool, func, number, object, objectOf, oneOfType, shape, string} from 'prop-types' import formatMessage from '../format-message' -import RCEWrapper, {editorOptionsPropType, ltiToolsPropType} from './RCEWrapper' +import RCEWrapper, {toolbarPropType, menuPropType, ltiToolsPropType} from './RCEWrapper' import {trayPropTypes} from './plugins/shared/CanvasContentTray' import editorLanguage from './editorLanguage' import normalizeLocale from './normalizeLocale' @@ -40,7 +40,7 @@ if (!process?.env?.BUILD_LOCALE) { // forward rceRef to it refs the RCEWrapper where clients can call getCode etc. on it. // You probably shouldn't use it until onInit has been called. Until then tinymce // is not initialized. -const RCE = forwardRef(function RCE(props, rceRef) { +const CanvasRce = forwardRef(function CanvasRce(props, rceRef) { const { autosave, defaultContent, @@ -51,10 +51,13 @@ const RCE = forwardRef(function RCE(props, rceRef) { language, liveRegion, mirroredAttrs, // attributes to transfer from the original textarea to the one created by tinymce + menu, + plugins, readOnly, textareaId, textareaClassName, rcsProps, + toolbar, use_rce_pretty_html_editor, use_rce_buttons_and_icons, onFocus, @@ -93,15 +96,23 @@ const RCE = forwardRef(function RCE(props, rceRef) { instRecordDisabled, language: normalizeLocale(language), liveRegion, + menu, + plugins, textareaId, textareaClassName, trayProps: rcsProps, + toolbar, use_rce_pretty_html_editor, use_rce_buttons_and_icons, editorOptions: Object.assign(editorOptions, editorOptions, { selector: `#${textareaId}`, height, - language: editorLanguage(props.language) + language: editorLanguage(props.language), + toolbar: props.toolbar, + menu: props.menu, + menubar: props.menu ? Object.keys(props.menu).join(' ') : undefined, + plugins: props.plugins, + readonly: readOnly }) } wrapInitCb(mirroredAttrs, iProps.editorOptions) @@ -128,9 +139,9 @@ const RCE = forwardRef(function RCE(props, rceRef) { } }) -export default RCE +export default CanvasRce -RCE.propTypes = { +CanvasRce.propTypes = { // do you want the rce to autosave content to localStorage, and // how long should it be until it's deleted. // If autosave is enabled, call yourRef.RCEClosed() if the user @@ -138,9 +149,8 @@ RCE.propTypes = { autosave: shape({enabled: bool, maxAge: number}), // the initial content defaultContent: string, - // tinymce configuration. See defaultTinymceConfig for all the defaults - // and RCEWrapper.editorOptionsPropType for stuff you may want to include - editorOptions: editorOptionsPropType, + // tinymce configuration. See defaultTinymceConfig for the basics + editorOptions: object, // height of the RCE. if a number, in px height: oneOfType([number, string]), // array of URLs to high-contrast css @@ -169,6 +179,10 @@ RCE.propTypes = { // name:value pairs of attributes to add to the textarea // tinymce creates as the backing store of the RCE mirroredAttrs: objectOf(string), + // additional menu items that get merged into the default menubar + menu: menuPropType, + // additional plugins that get merged into the default list of plugins + plugins: arrayOf(string), // is this RCE readonly? readOnly: bool, // id put on the generated textarea @@ -178,6 +192,8 @@ RCE.propTypes = { // properties necessary for the RCE to us the RCS // if missing, RCE features that require the RCS are omitted rcsProps: trayPropTypes, + // additional toolbar items that get merged into the default toolbars + toolbar: toolbarPropType, // enable the pretty html editor (temporary until the feature is forced on) use_rce_pretty_html_editor: bool, // enable the custom buttons feature (temporary until the feature is forced on) @@ -186,10 +202,10 @@ RCE.propTypes = { onFocus: func, // f(RCEWrapper component) onBlur: func, // f(event) onInit: func, // f(tinymce_editor) - onContentChange: func // f(content), don't mistake this as an indication RCE is a controlled component + onContentChange: func // f(content), don't mistake this as an indication CanvasRce is a controlled component } -RCE.defaultProps = { +CanvasRce.defaultProps = { autosave: {enabled: false, maxAge: 3600000}, defaultContent: '', editorOptions: {...defaultTinymceConfig}, diff --git a/packages/canvas-rce/src/rce/RCEWrapper.js b/packages/canvas-rce/src/rce/RCEWrapper.js index 97b80d33ec67..4c2bbb0c592b 100644 --- a/packages/canvas-rce/src/rce/RCEWrapper.js +++ b/packages/canvas-rce/src/rce/RCEWrapper.js @@ -61,10 +61,6 @@ const toolbarPropType = PropTypes.arrayOf( PropTypes.shape({ // name of the toolbar the items are added to // if this toolbar doesn't exist, it is created - // tinymce toolbar config does not - // include a key to identify the individual toolbars, just a name - // which is translated. This toolbar's name must be translated - // in order to be merged correctly. name: PropTypes.string.isRequired, // items added to the toolbar // each is the name of the button some plugin has @@ -74,11 +70,10 @@ const toolbarPropType = PropTypes.arrayOf( ) const menuPropType = PropTypes.objectOf( - // the key is the name of the menu item a plugin has - // registered with tinymce. If it does not exist in the - // default menubar, it will be added. + // the key is the name of the menu item some plugin has + // registered with tinymce PropTypes.shape({ - // if this is a new menu in the menubar, title is it's label. + // if this is a new menu in the menubar,title it's label. // if these are items being merged into an existing menu, title is ignored title: PropTypes.string, // items is a space separated list it menu_items @@ -95,26 +90,6 @@ const ltiToolsPropType = PropTypes.arrayOf( }) ) -export const editorOptionsPropType = PropTypes.shape({ - // height of the RCE. - // if a number interpreted as pixels. - // if a string as a CSS value. - height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), - // entries you want merged into the toolbar. See toolBarPropType above. - toolbar: toolbarPropType, - // entries you want merged into to the menus. See menuPropType above. - // If an entry defines a new menu, tinymce's menubar config option will - // be updated for you. In fact, if you provide an editorOptions.menubar value - // it will be overwritten. - menu: menuPropType, - // additional plugins that get merged into the default list of plugins - // it is up to you to import the plugin's definition which will - // register it and any related toolbar or menu entries with tinymce. - plugins: PropTypes.arrayOf(PropTypes.string), - // is this RCE readonly? - readonly: PropTypes.bool -}) - // we `require` instead of `import` because the ui-themeable babel require hook only works with `require` // 2021-04-21: This is no longer true, but I didn't want to make a gratutious change when I found this out. // see https://gerrit.instructure.com/c/canvas-lms/+/263299/2/packages/canvas-rce/src/rce/RCEWrapper.js#50 @@ -241,7 +216,7 @@ class RCEWrapper extends React.Component { maxAge: PropTypes.number }), defaultContent: PropTypes.string, - editorOptions: editorOptionsPropType, + editorOptions: PropTypes.object, handleUnmount: PropTypes.func, editorView: PropTypes.oneOf([WYSIWYG_VIEW, PRETTY_HTML_EDITOR_VIEW, RAW_HTML_EDITOR_VIEW]), id: PropTypes.string, @@ -966,10 +941,6 @@ class RCEWrapper extends React.Component { // first view this.setEditorView(this.state.editorView) - // readonly should have been handled via the init property passed - // to , but it's not. - editor.mode.set(this.props.readOnly ? 'readonly' : 'design') - this.props.onInitted?.(editor) } @@ -1332,15 +1303,9 @@ class RCEWrapper extends React.Component { canvasPlugins.push('instructure_buttons') } - const possibleNewMenubarItems = this.props.editorOptions.menu - ? Object.keys(this.props.editorOptions.menu).join(' ') - : undefined - const wrappedOpts = { ...options, - readonly: this.props.readOnly, - theme: 'silver', // some older code specified 'modern', which doesn't exist any more height: options.height || DEFAULT_RCE_HEIGHT, @@ -1378,7 +1343,7 @@ class RCEWrapper extends React.Component { content_css: options.content_css || [], content_style: contentCSS, - menubar: mergeMenuItems('edit view insert format tools table', possibleNewMenubarItems), + menubar: mergeMenuItems('edit view insert format tools table', options.menubar), // default menu options listed at https://www.tiny.cloud/docs/configure/editor-appearance/#menu // tinymce's default edit and table menus are fine // we include all the canvas specific items in the menu and toolbar @@ -1468,13 +1433,14 @@ class RCEWrapper extends React.Component { 'instructure_media_embed', 'instructure_external_tools', 'a11y_checker', - 'wordcount', - ...canvasPlugins + 'wordcount' ], sanitizePlugins(options.plugins) ) } + wrappedOpts.plugins.splice(wrappedOpts.plugins.length, 0, ...canvasPlugins) + if (this.props.trayProps) { wrappedOpts.canvas_rce_user_context = { type: this.props.trayProps.contextType, @@ -1774,6 +1740,10 @@ function mergeMenu(standard, custom) { // returns: the merged result by mutating the incoming standard arg. // It will add commands to existing toolbars, or add a new toolbar // if the custom one does not exist +// This is a little awkward in that tinymce toolbar config does not +// include a key to identify the individual toolbars, just a name +// which is translated. The custom toolbar's name must be translated +// in order to be merged correctly. function mergeToolbar(standard, custom) { if (!custom) return standard // merge given toolbar data into the default toolbar diff --git a/packages/canvas-rce/src/rce/StatusBar.js b/packages/canvas-rce/src/rce/StatusBar.js index 730c0cb1dad3..20e1b7a0a2bc 100644 --- a/packages/canvas-rce/src/rce/StatusBar.js +++ b/packages/canvas-rce/src/rce/StatusBar.js @@ -21,9 +21,10 @@ import ReactDOM from 'react-dom' import {arrayOf, bool, func, number, oneOf, string} from 'prop-types' import {StyleSheet, css} from 'aphrodite' import keycode from 'keycode' -import {CondensedButton, IconButton} from '@instructure/ui-buttons' +import {Button, CondensedButton, IconButton} from '@instructure/ui-buttons' import {Flex} from '@instructure/ui-flex' import {View} from '@instructure/ui-view' +import {ScreenReaderContent} from '@instructure/ui-a11y-content' import {Text} from '@instructure/ui-text' import {SVGIcon} from '@instructure/ui-svg-images' @@ -111,11 +112,9 @@ export default function StatusBar(props) { } // adding a delay before including the HTML Editor description to wait the focus moves to the RCE // and prevent JAWS from reading the aria-describedby element when switching back to RCE view - const timerid = setTimeout(() => { + setTimeout(() => { setIncludeEdtrDesc(props.use_rce_pretty_html_editor && !isHtmlView()) }, 100) - - return () => clearTimeout(timerid) }, [props.editorView]) // eslint-disable-line react-hooks/exhaustive-deps function preferredHtmlEditor() { diff --git a/packages/canvas-rce/src/rce/__mocks__/tinymceReact.js b/packages/canvas-rce/src/rce/__mocks__/tinymceReact.js index 720c3960325b..8bd4cc612636 100644 --- a/packages/canvas-rce/src/rce/__mocks__/tinymceReact.js +++ b/packages/canvas-rce/src/rce/__mocks__/tinymceReact.js @@ -28,10 +28,9 @@ import React, {useEffect, useRef} from 'react' class FakeEditor { - constructor(props) { - this.props = props + constructor(textareaId) { this.hidden = true - this._textareaId = props.id + this._textareaId = textareaId this.readonly = undefined this._eventHandlers = {} } @@ -95,7 +94,7 @@ class FakeEditor { export function Editor(props) { const editorRef = useRef(null) const textareaRef = useRef(null) - const tinymceEditor = useRef(new FakeEditor(props)) + const tinymceEditor = useRef(new FakeEditor(props.id)) useEffect(() => { window.tinymce.editors[0] = tinymceEditor.current diff --git a/packages/canvas-rce/src/rce/__tests__/RCE.test.js b/packages/canvas-rce/src/rce/__tests__/CanvasRce.test.js similarity index 86% rename from packages/canvas-rce/src/rce/__tests__/RCE.test.js rename to packages/canvas-rce/src/rce/__tests__/CanvasRce.test.js index 491cf5c47b2d..c49b874f5783 100644 --- a/packages/canvas-rce/src/rce/__tests__/RCE.test.js +++ b/packages/canvas-rce/src/rce/__tests__/CanvasRce.test.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 - present Instructure, Inc. + * Copyright (C) 2018 - present Instructure, Inc. * * This file is part of Canvas. * @@ -18,10 +18,10 @@ import React, {createRef} from 'react' import {render, waitFor} from '@testing-library/react' -import RCE from '../RCE' +import CanvasRce from '../CanvasRce' import bridge from '../../bridge' -describe('RCE', () => { +describe('CanvasRce', () => { let target beforeEach(() => { @@ -38,13 +38,13 @@ describe('RCE', () => { }) it('bridges newly rendered editors', async () => { - render(, target) + render(, target) await waitFor(() => expect(bridge.activeEditor().constructor.displayName).toEqual('RCEWrapper')) }) it('supports getCode() and setCode() on its ref', async () => { const rceRef = createRef(null) - render(, target) + render(, target) await waitFor(() => expect(rceRef.current).not.toBeNull()) diff --git a/packages/canvas-rce/test/module/RCEWrapper.test.js b/packages/canvas-rce/test/module/RCEWrapper.test.js index c65363fb1f72..0388b9eef59c 100644 --- a/packages/canvas-rce/test/module/RCEWrapper.test.js +++ b/packages/canvas-rce/test/module/RCEWrapper.test.js @@ -91,8 +91,7 @@ function defaultProps() { highContrastCSS: [], languages: [{id: 'en', label: 'English'}], autosave: {enabled: false}, - ltiTools: [], - editorOptions: {} + ltiTools: [] } } diff --git a/ui/shared/rce/react/CanvasRce.js b/ui/shared/rce/react/CanvasRce.js index 673a8d5fed96..e046378b85b2 100644 --- a/ui/shared/rce/react/CanvasRce.js +++ b/ui/shared/rce/react/CanvasRce.js @@ -19,7 +19,7 @@ import React, {forwardRef, useEffect, useState} from 'react' import {bool, func, number, object, objectOf, oneOfType, string} from 'prop-types' import {createChainedFunction} from '@instructure/ui-utils' -import RCE from '@instructure/canvas-rce/es/rce/RCE' +import TheRealRce from '@instructure/canvas-rce/es/rce/CanvasRce' import getRCSProps from '../getRCSProps' import closedCaptionLanguages from '@canvas/util/closedCaptionLanguages' import EditorConfig from '../tinymce.config' @@ -67,12 +67,10 @@ const CanvasRce = forwardRef(function CanvasRce(props, rceRef) { // tinymce is a global by now via import of CanvasRce importing tinyRCE const editorConfig = new EditorConfig(tinymce, window.INST, textareaId) const config = {...editorConfig.defaultConfig(), ...editorOptions} - if (editorOptions.init_instance_callback) { - config.init_instance_callback = createChainedFunction( - config.init_instance_callback, - editorOptions.init_instance_callback - ) - } + config.init_instance_callback = createChainedFunction( + config.init_instance_callback, + editorOptions.init_instance_callback + ) return config }) const [autosave_] = useState({ @@ -88,7 +86,7 @@ const CanvasRce = forwardRef(function CanvasRce(props, rceRef) { }, [rceRef]) return ( - . - */ - -import React, {createRef} from 'react' -import {render, waitFor} from '@testing-library/react' -import CanvasRce from '../CanvasRce' - -describe('CanvasRce', () => { - let target - - beforeEach(() => { - const div = document.createElement('div') - div.id = 'fixture' - div.innerHTML = '