@windward/integrations 0.21.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/components/Content/Blocks/ActionPanel/TransformActivity.vue +386 -0
  3. package/components/Content/Blocks/ActionPanel/TransformBlock.vue +402 -59
  4. package/components/Content/Blocks/ExternalIntegration/LtiConsumer.vue +22 -2
  5. package/components/ExternalIntegration/Driver/Lti1p1/ManageConsumer.vue +8 -2
  6. package/components/ExternalIntegration/Driver/Lti1p1/ManageProvider.vue +4 -0
  7. package/components/ExternalIntegration/Driver/Lti1p3/ManageConsumer.vue +2 -2
  8. package/components/Integration/JobTable.vue +35 -3
  9. package/components/Integration/TranslateCourse.vue +574 -0
  10. package/components/Settings/ExternalIntegration/LtiConsumerSettings.vue +27 -0
  11. package/i18n/ar-SA/components/ai_agent/chat.ts +20 -0
  12. package/i18n/ar-SA/components/ai_agent/index.ts +5 -0
  13. package/i18n/ar-SA/components/content/blocks/action_panel/index.ts +5 -0
  14. package/i18n/ar-SA/components/content/blocks/action_panel/transform_block.ts +9 -0
  15. package/i18n/ar-SA/components/content/blocks/external_integration/index.ts +5 -0
  16. package/i18n/ar-SA/components/content/blocks/external_integration/lti_consumer.ts +17 -0
  17. package/i18n/ar-SA/components/content/blocks/index.ts +7 -0
  18. package/i18n/ar-SA/components/content/index.ts +5 -0
  19. package/i18n/ar-SA/components/external_integration/driver/lti1p1.ts +17 -0
  20. package/i18n/ar-SA/components/external_integration/driver/lti1p3.ts +25 -0
  21. package/i18n/ar-SA/components/external_integration/driver/scorm.ts +14 -0
  22. package/i18n/ar-SA/components/external_integration/index.ts +36 -0
  23. package/i18n/ar-SA/components/external_integration/provider_target.ts +9 -0
  24. package/i18n/ar-SA/components/file_import/index.ts +5 -0
  25. package/i18n/ar-SA/components/file_import/resourcespace.ts +4 -0
  26. package/i18n/ar-SA/components/index.ts +19 -0
  27. package/i18n/ar-SA/components/integration/driver.ts +67 -0
  28. package/i18n/ar-SA/components/integration/index.ts +9 -0
  29. package/i18n/ar-SA/components/integration/job.ts +25 -0
  30. package/i18n/ar-SA/components/integration/job_log.ts +24 -0
  31. package/i18n/ar-SA/components/llm/blooms.ts +15 -0
  32. package/i18n/ar-SA/components/llm/content_selector.ts +3 -0
  33. package/i18n/ar-SA/components/llm/generate_content/fake_text_stream.ts +62 -0
  34. package/i18n/ar-SA/components/llm/generate_content/generate_questions.ts +92 -0
  35. package/i18n/ar-SA/components/llm/generate_content/index.ts +8 -0
  36. package/i18n/ar-SA/components/llm/index.ts +10 -0
  37. package/i18n/ar-SA/components/navigation/index.ts +5 -0
  38. package/i18n/ar-SA/components/navigation/integrations.ts +9 -0
  39. package/i18n/ar-SA/components/settings/external_integration/index.ts +5 -0
  40. package/i18n/ar-SA/components/settings/external_integration/lti_consumer.ts +10 -0
  41. package/i18n/ar-SA/components/settings/index.ts +5 -0
  42. package/i18n/ar-SA/index.ts +16 -0
  43. package/i18n/ar-SA/modules/index.ts +5 -0
  44. package/i18n/ar-SA/pages/admin/index.ts +5 -0
  45. package/i18n/ar-SA/pages/admin/translateCourse.ts +68 -0
  46. package/i18n/ar-SA/pages/course/external_integration/index.ts +6 -0
  47. package/i18n/ar-SA/pages/course/index.ts +5 -0
  48. package/i18n/ar-SA/pages/importContent.ts +3 -0
  49. package/i18n/ar-SA/pages/importCourse.ts +13 -0
  50. package/i18n/ar-SA/pages/index.ts +15 -0
  51. package/i18n/ar-SA/pages/login/index.ts +9 -0
  52. package/i18n/ar-SA/pages/login/lti.ts +23 -0
  53. package/i18n/ar-SA/pages/login/saml.ts +7 -0
  54. package/i18n/ar-SA/pages/login/scorm.ts +28 -0
  55. package/i18n/ar-SA/pages/vendor.ts +11 -0
  56. package/i18n/ar-SA/shared/content_blocks.ts +9 -0
  57. package/i18n/ar-SA/shared/error.ts +9 -0
  58. package/i18n/ar-SA/shared/file.ts +5 -0
  59. package/i18n/ar-SA/shared/index.ts +17 -0
  60. package/i18n/ar-SA/shared/menu.ts +3 -0
  61. package/i18n/ar-SA/shared/notification.ts +14 -0
  62. package/i18n/ar-SA/shared/permission.ts +52 -0
  63. package/i18n/ar-SA/shared/settings.ts +9 -0
  64. package/i18n/en-US/components/content/blocks/action_panel/index.ts +2 -0
  65. package/i18n/en-US/components/content/blocks/action_panel/transform_activity.ts +8 -0
  66. package/i18n/en-US/components/content/blocks/action_panel/transform_block.ts +1 -1
  67. package/i18n/en-US/components/content/blocks/external_integration/lti_consumer.ts +1 -0
  68. package/i18n/en-US/components/integration/job.ts +2 -0
  69. package/i18n/en-US/components/navigation/integrations.ts +1 -0
  70. package/i18n/en-US/components/settings/external_integration/lti_consumer.ts +2 -0
  71. package/i18n/en-US/pages/admin/index.ts +5 -0
  72. package/i18n/en-US/pages/admin/translateCourse.ts +68 -0
  73. package/i18n/en-US/pages/index.ts +2 -0
  74. package/i18n/es-ES/components/content/blocks/action_panel/index.ts +2 -0
  75. package/i18n/es-ES/components/content/blocks/action_panel/transform_activity.ts +8 -0
  76. package/i18n/es-ES/components/content/blocks/action_panel/transform_block.ts +1 -1
  77. package/i18n/es-ES/components/content/blocks/external_integration/lti_consumer.ts +8 -7
  78. package/i18n/es-ES/components/integration/job.ts +2 -0
  79. package/i18n/es-ES/components/navigation/integrations.ts +1 -0
  80. package/i18n/es-ES/components/settings/external_integration/lti_consumer.ts +3 -0
  81. package/i18n/es-ES/pages/admin/index.ts +5 -0
  82. package/i18n/es-ES/pages/admin/translateCourse.ts +68 -0
  83. package/i18n/es-ES/pages/index.ts +2 -0
  84. package/i18n/fr-FR/components/ai_agent/chat.ts +20 -0
  85. package/i18n/fr-FR/components/ai_agent/index.ts +5 -0
  86. package/i18n/fr-FR/components/content/blocks/action_panel/index.ts +5 -0
  87. package/i18n/fr-FR/components/content/blocks/action_panel/transform_block.ts +9 -0
  88. package/i18n/fr-FR/components/content/blocks/external_integration/index.ts +5 -0
  89. package/i18n/fr-FR/components/content/blocks/external_integration/lti_consumer.ts +17 -0
  90. package/i18n/fr-FR/components/content/blocks/index.ts +7 -0
  91. package/i18n/fr-FR/components/content/index.ts +5 -0
  92. package/i18n/fr-FR/components/external_integration/driver/lti1p1.ts +17 -0
  93. package/i18n/fr-FR/components/external_integration/driver/lti1p3.ts +25 -0
  94. package/i18n/fr-FR/components/external_integration/driver/scorm.ts +14 -0
  95. package/i18n/fr-FR/components/external_integration/index.ts +36 -0
  96. package/i18n/fr-FR/components/external_integration/provider_target.ts +9 -0
  97. package/i18n/fr-FR/components/file_import/index.ts +5 -0
  98. package/i18n/fr-FR/components/file_import/resourcespace.ts +4 -0
  99. package/i18n/fr-FR/components/index.ts +19 -0
  100. package/i18n/fr-FR/components/integration/driver.ts +67 -0
  101. package/i18n/fr-FR/components/integration/index.ts +9 -0
  102. package/i18n/fr-FR/components/integration/job.ts +25 -0
  103. package/i18n/fr-FR/components/integration/job_log.ts +24 -0
  104. package/i18n/fr-FR/components/llm/blooms.ts +15 -0
  105. package/i18n/fr-FR/components/llm/content_selector.ts +3 -0
  106. package/i18n/fr-FR/components/llm/generate_content/fake_text_stream.ts +62 -0
  107. package/i18n/fr-FR/components/llm/generate_content/generate_questions.ts +92 -0
  108. package/i18n/fr-FR/components/llm/generate_content/index.ts +8 -0
  109. package/i18n/fr-FR/components/llm/index.ts +10 -0
  110. package/i18n/fr-FR/components/navigation/index.ts +5 -0
  111. package/i18n/fr-FR/components/navigation/integrations.ts +9 -0
  112. package/i18n/fr-FR/components/settings/external_integration/index.ts +5 -0
  113. package/i18n/fr-FR/components/settings/external_integration/lti_consumer.ts +10 -0
  114. package/i18n/fr-FR/components/settings/index.ts +5 -0
  115. package/i18n/fr-FR/index.ts +16 -0
  116. package/i18n/fr-FR/modules/index.ts +5 -0
  117. package/i18n/fr-FR/pages/admin/index.ts +5 -0
  118. package/i18n/fr-FR/pages/admin/translateCourse.ts +68 -0
  119. package/i18n/fr-FR/pages/course/external_integration/index.ts +6 -0
  120. package/i18n/fr-FR/pages/course/index.ts +5 -0
  121. package/i18n/fr-FR/pages/importContent.ts +3 -0
  122. package/i18n/fr-FR/pages/importCourse.ts +13 -0
  123. package/i18n/fr-FR/pages/index.ts +15 -0
  124. package/i18n/fr-FR/pages/login/index.ts +9 -0
  125. package/i18n/fr-FR/pages/login/lti.ts +23 -0
  126. package/i18n/fr-FR/pages/login/saml.ts +7 -0
  127. package/i18n/fr-FR/pages/login/scorm.ts +28 -0
  128. package/i18n/fr-FR/pages/vendor.ts +11 -0
  129. package/i18n/fr-FR/shared/content_blocks.ts +9 -0
  130. package/i18n/fr-FR/shared/error.ts +9 -0
  131. package/i18n/fr-FR/shared/file.ts +5 -0
  132. package/i18n/fr-FR/shared/index.ts +17 -0
  133. package/i18n/fr-FR/shared/menu.ts +3 -0
  134. package/i18n/fr-FR/shared/notification.ts +14 -0
  135. package/i18n/fr-FR/shared/permission.ts +52 -0
  136. package/i18n/fr-FR/shared/settings.ts +9 -0
  137. package/i18n/index.ts +4 -0
  138. package/i18n/sv-SE/components/content/blocks/action_panel/index.ts +2 -0
  139. package/i18n/sv-SE/components/content/blocks/action_panel/transform_activity.ts +8 -0
  140. package/i18n/sv-SE/components/content/blocks/action_panel/transform_block.ts +1 -1
  141. package/i18n/sv-SE/components/content/blocks/external_integration/lti_consumer.ts +9 -8
  142. package/i18n/sv-SE/components/integration/job.ts +6 -4
  143. package/i18n/sv-SE/components/navigation/integrations.ts +1 -0
  144. package/i18n/sv-SE/components/settings/external_integration/lti_consumer.ts +3 -0
  145. package/i18n/sv-SE/pages/admin/index.ts +5 -0
  146. package/i18n/sv-SE/pages/admin/translateCourse.ts +68 -0
  147. package/i18n/sv-SE/pages/index.ts +2 -0
  148. package/package.json +1 -1
  149. package/pages/admin/translateCourse.vue +81 -0
  150. package/plugin.js +32 -0
@@ -0,0 +1,5 @@
1
+ import externalIntegration from './external_integration'
2
+
3
+ export default {
4
+ external_integration: externalIntegration,
5
+ }
@@ -0,0 +1,3 @@
1
+ export default {
2
+ title: 'Import Content',
3
+ }
@@ -0,0 +1,13 @@
1
+ export default {
2
+ title: 'Import Course',
3
+ recent_import_title: 'Recent Imports',
4
+ select_vendor: 'Select a vendor',
5
+ select_remote_organization: 'Select a remote organization',
6
+ select_remote_course: 'Select a remote course',
7
+ select_remote_content: 'Select individual content pages',
8
+ start_import: 'Start Import',
9
+ import_started: 'Import Started',
10
+ notify: 'Notify me when completed',
11
+ no_vendors:
12
+ 'There are no configured vendors. Please go back and configure an integration vendor',
13
+ }
@@ -0,0 +1,15 @@
1
+ import vendor from './vendor'
2
+ import importCourse from './importCourse'
3
+ import importContent from './importContent'
4
+ import login from './login'
5
+ import admin from './admin'
6
+ import course from './course'
7
+
8
+ export default {
9
+ vendor,
10
+ import_course: importCourse,
11
+ import_content: importContent,
12
+ login,
13
+ course,
14
+ admin,
15
+ }
@@ -0,0 +1,9 @@
1
+ import lti from './lti'
2
+ import saml from './saml'
3
+ import scorm from './scorm'
4
+
5
+ export default {
6
+ lti,
7
+ saml,
8
+ scorm,
9
+ }
@@ -0,0 +1,23 @@
1
+ export default {
2
+ lti_error: 'LTI Errors',
3
+ launch_error: 'LTI link failed to launch',
4
+ missing_title: 'The below fields are missing:',
5
+ error_title: 'The below errors occurred:',
6
+ error: {
7
+ invalid_launch_request: 'The launch request was invalid',
8
+ tool_disabled: 'This LTI package is disabled',
9
+ unknown: 'An unknown communication error occurred',
10
+ organization: 'Invalid organization',
11
+ tool: 'Invalid tool id',
12
+ tool_organization: 'This tool does not belong to this organization',
13
+ oauth: 'Invalid OAuth. Check your key and secret.',
14
+ },
15
+ missing: {
16
+ context_label:
17
+ 'The context label field `context_label` is missing or invalid.',
18
+ resource_link_title:
19
+ 'The resource link title `resource_link_title` is missing or invalid.',
20
+ lis_person_contact_email_primary:
21
+ 'The users email is missing and an anonymous email could not be generated.',
22
+ },
23
+ }
@@ -0,0 +1,7 @@
1
+ export default {
2
+ or: 'OR',
3
+ processing: 'Processing SSO login...',
4
+ success: 'Login successful! Redirecting...',
5
+ failed: 'SSO login failed',
6
+ failed_description: 'SSO login failed. Please try again.',
7
+ }
@@ -0,0 +1,28 @@
1
+ export default {
2
+ scorm_error: 'SCORM Errors',
3
+ email_required: 'Email required to continue',
4
+ launch_error: 'SCORM package failed to launch',
5
+ missing_title: 'The below fields are missing:',
6
+ error_title: 'The below errors occurred:',
7
+ enter_email:
8
+ 'Please enter your email address below to complete your account setup. Your email address will only be used to facilitate course-related communication, such as course content questions and technical support.',
9
+ privacy_policy: 'For more information, please see our privacy policy.',
10
+ error: {
11
+ missing_data:
12
+ 'Could not load due to missing data. Missing student id and/or student name.',
13
+ missing_api: 'Could not access the LMS SCORM API.',
14
+ invalid_launch_request: 'The launch request was invalid',
15
+ tool_disabled: 'This SCORM package is disabled',
16
+ unknown: 'An unknown communication error occurred',
17
+ organization: 'Invalid organization',
18
+ tool: 'Invalid tool id',
19
+ tool_organization: 'This tool does not belong to this organization',
20
+ oauth: 'Invalid OAuth. Check your key and secret.',
21
+ },
22
+ missing: {
23
+ course_id: 'The course id is missing or invalid.',
24
+ course_name: 'The course name is missing.',
25
+ callback: 'The SCORM callback is missing.',
26
+ state: 'The SCORM verification state is missing.',
27
+ },
28
+ }
@@ -0,0 +1,11 @@
1
+ export default {
2
+ title: 'Integrations',
3
+ vendor_disabled: 'This vendor is not available for integrations',
4
+ vendor_not_configured: 'This integration vendor is not configured',
5
+ organization_integration_disabled:
6
+ 'This organization integration is disabled',
7
+ vendor_name: 'Vendor Name',
8
+ configured: 'Integration Configured',
9
+ enabled: 'Integration Enabled',
10
+ manage: 'Manage Integration',
11
+ }
@@ -0,0 +1,9 @@
1
+ export default {
2
+ title: {
3
+ lti_consumer: 'LTI Link',
4
+ scorm_consumer: 'SCORM Package',
5
+ },
6
+ grouping: {
7
+ integrations: 'Integrations',
8
+ },
9
+ }
@@ -0,0 +1,9 @@
1
+ export default {
2
+ save_failed: 'Could not save this configuration',
3
+ load_remote_organization_failed: 'Could not load remote organizations',
4
+ load_remote_course_failed: 'Could not load remote courses',
5
+ load_remote_content_failed: 'Could not load remote content',
6
+ connect_success: 'Successfully connected',
7
+ connect_fail: 'Failed to connect',
8
+ unknown: 'An unknown error occurred when trying to connect',
9
+ }
@@ -0,0 +1,5 @@
1
+ export default {
2
+ import_resourcespace: 'Import from Resourcespace',
3
+ import_google_drive: 'Import from Google Drive',
4
+ import_dropbox: 'Import from Dropbox',
5
+ }
@@ -0,0 +1,17 @@
1
+ import contentBlocks from './content_blocks'
2
+ import settings from './settings'
3
+ import menu from './menu'
4
+ import notification from './notification'
5
+ import permission from './permission'
6
+ import file from './file'
7
+ import error from './error'
8
+
9
+ export default {
10
+ content_blocks: contentBlocks,
11
+ settings,
12
+ menu,
13
+ notification,
14
+ permission,
15
+ file,
16
+ error,
17
+ }
@@ -0,0 +1,3 @@
1
+ export default {
2
+ integrations: 'Integrations',
3
+ }
@@ -0,0 +1,14 @@
1
+ export default {
2
+ event: {
3
+ type_title: {
4
+ 'windward-integrations-import-complete':
5
+ '3rd Party Import Complete',
6
+ 'windward-integrations-import-fail': '3rd Party Import Failed',
7
+ },
8
+
9
+ type_description: {
10
+ 'windward-core-ask-the-expert': '3rd Party Import Complete',
11
+ 'windward-core-contact-support': '3rd Party Import Failed',
12
+ },
13
+ },
14
+ }
@@ -0,0 +1,52 @@
1
+ export default {
2
+ type_title: {
3
+ 'plugin->windward->integrations->vendor': 'Integration Vendors',
4
+ 'plugin->windward->integrations->jobs': 'Integration Jobs',
5
+ 'plugin->windward->integrations->organization->jobs':
6
+ 'Organization Integration Jobs',
7
+ 'plugin->windward->integrations->organization->integration':
8
+ 'Organization Integrations (Read Access Required to use enabled integrations)',
9
+ 'plugin->windward->integrations->organization':
10
+ 'Remote Organization Access',
11
+ 'plugin->windward->integrations->course': 'Remote Course Access',
12
+ 'plugin->windward->integrations->content': 'Remote Content Access',
13
+ 'plugin->windward->integrations->file':
14
+ 'File Integrations View / Manage Remote Files',
15
+ 'plugin->windward->integrations->course->file':
16
+ 'File Integrations Import to Course (Write Access Required to import)',
17
+ 'plugin->windward->integrations->course->externalIntegration':
18
+ 'External Integrations (LTI / SCORM / etc)',
19
+ 'plugin->windward->integrations->ai':
20
+ 'Global Generative AI permissions ',
21
+ 'plugin->windward->integrations->ai->integration':
22
+ 'AI Prompt changing permissions',
23
+ 'plugin->windward->integrations->organization->ai':
24
+ 'Generative AI Permissions in only the users current org',
25
+ 'plugin->windward->integrations->organization->aiAgentChat':
26
+ 'Allow Access To AI Agent',
27
+ 'plugin->windward->integrations->organization->course->ai':
28
+ 'Generative AI Permissions in only the users current org and course for content generation',
29
+ },
30
+
31
+ type_description: {
32
+ 'plugin->windward->integrations->vendor':
33
+ 'Access all integration vendors across the whole system',
34
+ 'plugin->windward->integrations->jobs': 'Access integration jobs',
35
+ 'plugin->windward->integrations->organization->jobs':
36
+ 'Access integration jobs in the current organization',
37
+ 'plugin->windward->integrations->organization->integration':
38
+ 'Access and manage integrations in the current organization',
39
+ 'plugin->windward->integrations->organization':
40
+ 'Access and manage remote organizations for imports',
41
+ 'plugin->windward->integrations->course':
42
+ 'Access and manage course imports',
43
+ 'plugin->windward->integrations->content':
44
+ 'Access and manage content imports',
45
+ 'plugin->windward->integrations->file':
46
+ 'Access and manage remote files via their integration. This permission lets you see the available files on remote services like Google Drive, Dropbox, ResourceSpace, etc.',
47
+ 'plugin->windward->integrations->course->file':
48
+ 'Import files from a remote file integration into a specific course',
49
+ 'plugin->windward->integrations->course->externalIntegration':
50
+ 'Access and manage external integrations such as LTI and SCORM',
51
+ },
52
+ }
@@ -0,0 +1,9 @@
1
+ export default {
2
+ title: {
3
+ block_builder: 'Block Builder',
4
+ ai_chat: 'AI Chat',
5
+ },
6
+ errors: {
7
+ input_limitations: 'Must be less than {0} characters.',
8
+ },
9
+ }
package/i18n/index.ts CHANGED
@@ -1,11 +1,15 @@
1
+ import arSA from './ar-SA'
1
2
  import enUS from './en-US'
2
3
  import esES from './es-ES'
4
+ import frFR from './fr-FR'
3
5
  import svSE from './sv-SE'
4
6
 
5
7
  export default {
6
8
  messages: {
9
+ 'ar-SA': arSA,
7
10
  'en-US': enUS,
8
11
  'es-ES': esES,
12
+ 'fr-FR': frFR,
9
13
  'sv-SE': svSE,
10
14
  },
11
15
  }
@@ -1,5 +1,7 @@
1
1
  import transformBlock from './transform_block'
2
+ import transformActivity from './transform_activity'
2
3
 
3
4
  export default {
4
5
  transform_block: transformBlock,
6
+ transform_activity: transformActivity,
5
7
  }
@@ -0,0 +1,8 @@
1
+ export default {
2
+ change_block_type: 'Ändra blocktyp',
3
+ change_block_type_insufficient_items:
4
+ 'Ändra blocktyp är tillgängligt när aktiviteten har minst två objekt.',
5
+ change_block_type_error:
6
+ 'Kunde inte byta blocktyp. Försök igen eller ändra manuellt.',
7
+ }
8
+
@@ -1,7 +1,7 @@
1
1
  export default {
2
2
  change_block_type: 'Ändra blocktyp',
3
3
  change_block_type_insufficient_paragraphs:
4
- 'Ändra blocktyp är tillgängligt när texten har minst två stycken.',
4
+ 'Ändra blocktyp är tillgängligt när texten har minst fyra meningar.',
5
5
  change_block_type_insufficient_items:
6
6
  'Ändra blocktyp är tillgängligt när blocket har minst två objekt.',
7
7
  change_block_type_error:
@@ -3,15 +3,16 @@ export default {
3
3
  instructions:
4
4
  'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam fringilla ipsum eget ante tempus blandit. Maecenas vel massa\n' +
5
5
  'nec tellus vestibulum porttitor non a enim.',
6
- launch: 'Launch',
7
- goodbye: 'goodbye',
8
- launch_in_new_window: 'launch {0} in new tab',
9
- launch_in_modal: 'launch {0} in modal',
6
+ launch: 'Lansera',
7
+ goodbye: 'hej då',
8
+ launch_in_new_window: 'starta {0} i ny flik',
9
+ launch_in_modal: 'starta {0} i modal',
10
10
  configure_warning:
11
11
  'Välj en tillgänglig LTI-länk för att komma igång. Konfigurera sedan önskad starttyp.',
12
12
  no_access:
13
- 'You do not have permissions to launch this link. Please contact your system administrator.',
14
- missing_tool: 'The tool id {0} is missing',
15
- unknown_error: 'Something went wrong! Could not launch this link!',
16
- link_disabled: 'Link disabled',
13
+ 'Du har inte behörighet att öppna den här länken. Kontakta din systemadministratör.',
14
+ missing_tool: 'Verktygs-ID {0} saknas',
15
+ unknown_error: 'Något gick fel! Det gick inte att öppna den här länken!',
16
+ link_disabled: 'Länk inaktiverad',
17
+ try_again: 'Försök igen',
17
18
  }
@@ -3,7 +3,8 @@ export default {
3
3
  job_completed: 'Jobb slutfört',
4
4
  no_recent_jobs: 'Inga nya jobb',
5
5
  job_id: 'Jobb-ID',
6
- vendor_name: 'Vendor Name',
6
+ vendor_name: 'Leverantörsnamn',
7
+ vendor_name_translation: 'Översättning',
7
8
  status: 'Status',
8
9
  progress: 'Framsteg',
9
10
  created: 'Skapat',
@@ -12,12 +13,13 @@ export default {
12
13
  job_details: {
13
14
  none: 'Inga detaljer tillgängliga',
14
15
  import_course: "Importerar kurs-ID {0} '{1}'",
16
+ translate_course: 'Översätter kurs {0} till språk {1}',
15
17
  },
16
18
  job_status: {
17
19
  not_started: 'Inte startat',
18
- started: 'Started',
20
+ started: 'Startad',
19
21
  in_progress: 'Pågår',
20
- failed: 'Failed',
21
- completed: 'Completed',
22
+ failed: 'Misslyckades',
23
+ completed: 'Slutförd',
22
24
  },
23
25
  }
@@ -2,6 +2,7 @@ export default {
2
2
  title: 'Integrationer',
3
3
  manage_integrations: 'Manage Integration Vendors',
4
4
  import_course: 'Importera kurser',
5
+ translate_course: 'Översätt kurs',
5
6
  import_content: 'Importera innehåll och filer',
6
7
  manage_lti: 'Hantera LTI-anslutningar',
7
8
  manage_lti_links: 'Hantera LTI-länkar',
@@ -7,4 +7,7 @@ export default {
7
7
  launch_type_modal: 'Modal',
8
8
  link_select: 'Välj en länk:',
9
9
  link_disabled: 'Länk inaktiverad',
10
+ no_links: 'Inga länkar tillgängliga.',
11
+ create_link:
12
+ 'Gå till sidan för externa integrationer för att skapa länkar.',
10
13
  }
@@ -0,0 +1,5 @@
1
+ import translateCourse from './translateCourse'
2
+
3
+ export default {
4
+ translateCourse,
5
+ }
@@ -0,0 +1,68 @@
1
+ export default {
2
+ tab_title: 'Translate Course',
3
+ recent_jobs_tab_title: 'Recent Translation Jobs',
4
+ title: 'Translate Course',
5
+ subtitle: 'Select a source language, course, and target language to create a translated version',
6
+ source_language: 'Source Language',
7
+ course: 'Course',
8
+ target_language: 'Target Language',
9
+ send_email_notification: 'Send email notification on completion',
10
+ summary_title: 'Translation Summary',
11
+ source_course: 'Source Course:',
12
+ source_language_label: 'Source Language:',
13
+ target_language_label: 'Target Language:',
14
+ reset_button: 'Reset',
15
+ start_translation_button: 'Start Translation',
16
+ no_courses_found: 'No courses found in {0}',
17
+ no_owner: 'No owner',
18
+
19
+ // Success/Error messages
20
+ translation_queued: 'Translation job queued! Check Recent Translations for progress.',
21
+ translation_failed: 'Failed to start translation. Please try again.',
22
+ locale_load_failed: 'Failed to load available languages',
23
+ courses_load_failed: 'Failed to load courses for selected language',
24
+
25
+ // Retranslation Mode Dialog
26
+ retranslation_dialog: {
27
+ title: 'Translation Already Exists',
28
+ existing_translation_info: 'A translation for <strong>{0}</strong> already exists.',
29
+ choose_how_to_proceed: 'Choose how to proceed:',
30
+
31
+ // Incremental mode
32
+ incremental_title: '✓ Update Changed Blocks Only',
33
+ incremental_subtitle: '(Recommended)',
34
+ incremental_description: 'Only retranslate blocks that have been modified since the last translation.',
35
+ incremental_safe_note: 'Safe: Preserves existing course and translations.',
36
+
37
+ // Full mode
38
+ full_title: '⚠️ Delete & Retranslate Everything',
39
+ full_warning: 'Warning:',
40
+ full_description: 'This will permanently delete the existing translated course. Use only if you have made major restructuring changes.',
41
+
42
+ cancel_button: 'Cancel',
43
+ continue_button: 'Continue',
44
+ },
45
+
46
+ // Delete Confirmation Dialog
47
+ delete_confirm_dialog: {
48
+ title: 'Confirm Course Deletion',
49
+ cannot_undo: 'This action cannot be undone!',
50
+ about_to_delete: 'You are about to permanently delete the following course:',
51
+ course_id: 'Course ID:',
52
+ will_delete_title: 'This will delete:',
53
+ will_delete_content: 'All course content and blocks',
54
+ will_delete_assessments: 'All assessments and questions',
55
+ will_delete_files: 'File assets and media',
56
+ will_delete_progress: 'User progress and state data',
57
+ are_you_sure: 'Are you absolutely sure you want to proceed?',
58
+ type_delete_to_confirm: "Type 'DELETE' to confirm",
59
+ type_exactly_delete: 'Type exactly: DELETE',
60
+ cancel_button: 'Cancel',
61
+ confirm_button: 'Yes, Delete & Retranslate',
62
+ },
63
+
64
+ // Success messages for retranslation
65
+ full_retranslation_queued: 'Full retranslation queued! Existing translation will be deleted and recreated. Check Recent Translations for progress.',
66
+ incremental_retranslation_queued: 'Incremental retranslation queued! Only changed blocks will be updated. Check Recent Translations for progress.',
67
+ retranslation_failed: 'Failed to start retranslation. Please try again.',
68
+ }
@@ -2,6 +2,7 @@ import vendor from './vendor'
2
2
  import importCourse from './importCourse'
3
3
  import importContent from './importContent'
4
4
  import login from './login'
5
+ import admin from './admin'
5
6
  import course from './course'
6
7
 
7
8
  export default {
@@ -10,4 +11,5 @@ export default {
10
11
  import_content: importContent,
11
12
  login,
12
13
  course,
14
+ admin,
13
15
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@windward/integrations",
3
- "version": "0.21.0",
3
+ "version": "0.23.0",
4
4
  "description": "Windward UI Plugin Integrations for 3rd Party Systems",
5
5
  "main": "plugin.js",
6
6
  "scripts": {
@@ -0,0 +1,81 @@
1
+ <template>
2
+ <div>
3
+ <v-tabs v-model="tab" class="mb-5">
4
+ <v-tabs-slider></v-tabs-slider>
5
+
6
+ <v-tab>
7
+ {{ $t('windward.integrations.pages.admin.translateCourse.tab_title') }}
8
+ </v-tab>
9
+
10
+ <v-tab>
11
+ {{ $t('windward.integrations.pages.admin.translateCourse.recent_jobs_tab_title') }}
12
+ </v-tab>
13
+ </v-tabs>
14
+ <v-tabs-items v-model="tab">
15
+ <v-tab-item>
16
+ <TranslateCourse @translation-started="onTranslationStarted" />
17
+ </v-tab-item>
18
+ <v-tab-item>
19
+ <h2 tabindex="0">
20
+ {{ $t('windward.integrations.pages.admin.translateCourse.recent_jobs_tab_title') }}
21
+ </h2>
22
+ <IntegrationJobTable
23
+ ref="integrationJobTable"
24
+ :channel="'integrations.organizations.' + organization.id"
25
+ :event="'.Windward\\Integrations\\App\\Events\\CourseTranslationProgressEvent'"
26
+ job-type="translation"
27
+ ></IntegrationJobTable>
28
+ </v-tab-item>
29
+ </v-tabs-items>
30
+ </div>
31
+ </template>
32
+
33
+ <script>
34
+ import { mapGetters } from 'vuex'
35
+ import TranslateCourse from '../../components/Integration/TranslateCourse.vue'
36
+ import IntegrationJobTable from '../../components/Integration/JobTable.vue'
37
+
38
+ export default {
39
+ name: 'PluginIntegrationsAdminTranslateCoursePage',
40
+ components: {
41
+ TranslateCourse,
42
+ IntegrationJobTable,
43
+ },
44
+ layout: 'authenticated',
45
+ meta: {
46
+ privilege: {
47
+ 'plugin.windward.integrations.course': {
48
+ writable: true,
49
+ },
50
+ },
51
+ },
52
+ data() {
53
+ return {
54
+ tab: 0,
55
+ }
56
+ },
57
+ computed: {
58
+ ...mapGetters({
59
+ organization: 'organization/get',
60
+ }),
61
+ },
62
+ watch: {
63
+ // Refresh jobs list when "Recent Translation Jobs" tab is selected
64
+ tab(newTab) {
65
+ if (newTab === 1 && this.$refs.integrationJobTable) {
66
+ this.$refs.integrationJobTable.loadJobs()
67
+ }
68
+ },
69
+ },
70
+ methods: {
71
+ onTranslationStarted() {
72
+ // Reload the jobs table when a new translation is started
73
+ if (this.$refs.integrationJobTable) {
74
+ this.$refs.integrationJobTable.loadJobs()
75
+ }
76
+ // Switch to the jobs tab to show the new job
77
+ this.tab = 1
78
+ },
79
+ },
80
+ }
81
+ </script>
package/plugin.js CHANGED
@@ -3,6 +3,7 @@ import locales from './i18n'
3
3
 
4
4
  import AdminVendorsPage from './pages/admin/vendors.vue'
5
5
  import AdminImportCoursePage from './pages/admin/importCourse.vue'
6
+ import AdminTranslateCoursePage from './pages/admin/translateCourse.vue'
6
7
  import ExternalIntegrationIndexPage from './pages/course/externalIntegration/index.vue'
7
8
  import LoginLtiErrorPage from './pages/login/lti/error.vue'
8
9
  import LoginScormErrorPage from './pages/login/scorm/error.vue'
@@ -18,6 +19,7 @@ import LtiConsumerBlockSettings from './components/Settings/ExternalIntegration/
18
19
  import ScormConsumerBlockSettings from './components/Settings/ExternalIntegration/ScormConsumerSettings'
19
20
 
20
21
  import ActionPanelTransformBlock from './components/Content/Blocks/ActionPanel/TransformBlock.vue'
22
+ import ActionPanelTransformActivity from './components/Content/Blocks/ActionPanel/TransformActivity.vue'
21
23
 
22
24
  import ManageCourseIntegrationSettings from './components/Settings/ExternalIntegration/ManageCourseIntegrationSettings'
23
25
 
@@ -124,6 +126,13 @@ export default {
124
126
  name: 'PluginIntegrationsAdminImportCoursePage',
125
127
  template: AdminImportCoursePage,
126
128
  },
129
+ {
130
+ page: 'admin-integrations',
131
+ path: '/admin/integrations/translate-course',
132
+ i18n: 'windward.integrations.components.navigation.integrations.translate_course',
133
+ name: 'PluginIntegrationsAdminTranslateCoursePage',
134
+ template: AdminTranslateCoursePage,
135
+ },
127
136
  {
128
137
  page: 'admin-integrations',
129
138
  path: '/course/:course/integrations/external',
@@ -194,6 +203,16 @@ export default {
194
203
  },
195
204
  },
196
205
  },
206
+ {
207
+ i18n: 'windward.integrations.components.navigation.integrations.translate_course',
208
+ path: '/admin/integrations/translate-course',
209
+ context: ['home'],
210
+ permissions: {
211
+ 'plugin.windward.integrations.course': {
212
+ writable: true,
213
+ },
214
+ },
215
+ },
197
216
  {
198
217
  i18n: 'windward.integrations.pages.course.external_integration.title',
199
218
  path: '/course/{course.id}/integrations/external',
@@ -325,6 +344,19 @@ export default {
325
344
  'block.core-clickable-icons',
326
345
  ],
327
346
  },
347
+ {
348
+ tag: 'windward-integrations-action-panel-transform-activity',
349
+ template: ActionPanelTransformActivity,
350
+ context: [
351
+ 'block.games-flash-card',
352
+ 'block.games-matching-game',
353
+ 'block.games-bucket',
354
+ 'block.games-seven-strikes-game',
355
+ 'block.games-wordjumble-game',
356
+ 'block.games-crossword-puzzle-game',
357
+ 'block.games-multiple-choice',
358
+ ],
359
+ },
328
360
  ],
329
361
  courseSetting: [
330
362
  {