maglevcms 1.8.0 → 2.0.0.beta1

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 (156) hide show
  1. checksums.yaml +4 -4
  2. data/.yarn/install-state.gz +0 -0
  3. data/README.md +4 -4
  4. data/Rakefile +2 -1
  5. data/app/components/maglev/block_component.rb +1 -1
  6. data/app/components/maglev/content/base.rb +1 -1
  7. data/app/components/maglev/content/link.rb +4 -0
  8. data/app/components/maglev/section_component.rb +2 -2
  9. data/app/controllers/concerns/maglev/fetchers_concern.rb +3 -1
  10. data/app/controllers/concerns/maglev/resource_id_concern.rb +10 -0
  11. data/app/controllers/concerns/maglev/standalone_sections_concern.rb +6 -0
  12. data/app/controllers/concerns/maglev/{ui_locale_concern.rb → user_interface_locale_concern.rb} +1 -1
  13. data/app/controllers/maglev/api/collection_items_controller.rb +7 -0
  14. data/app/controllers/maglev/api/page_clones_controller.rb +1 -2
  15. data/app/controllers/maglev/api_controller.rb +1 -1
  16. data/app/controllers/maglev/application_controller.rb +1 -5
  17. data/app/controllers/maglev/assets/active_storage_proxy_controller.rb +17 -0
  18. data/app/controllers/maglev/assets/proxy_controller.rb +21 -0
  19. data/app/controllers/maglev/editor_controller.rb +1 -1
  20. data/app/controllers/maglev/page_preview_controller.rb +3 -3
  21. data/app/frontend/admin/controllers/screenshot_controller.js +29 -1
  22. data/app/frontend/editor/assets/remixicons/clipboard-line.svg +1 -0
  23. data/app/frontend/editor/assets/remixicons/ri-draggable.svg +1 -0
  24. data/app/frontend/editor/assets/remixicons/ri-folders-line.svg +1 -0
  25. data/app/frontend/editor/assets/remixicons/ri-more-fill.svg +1 -0
  26. data/app/frontend/editor/assets/remixicons/ri-shadow-line.svg +1 -0
  27. data/app/frontend/editor/components/errors/forbidden.vue +24 -0
  28. data/app/frontend/editor/components/errors/stale-record.vue +2 -2
  29. data/app/frontend/editor/components/header-nav/device-toggler.vue +6 -3
  30. data/app/frontend/editor/components/header-nav/index.vue +13 -42
  31. data/app/frontend/editor/components/header-nav/locale-toggler/index.vue +1 -1
  32. data/app/frontend/editor/components/header-nav/page-info.vue +41 -0
  33. data/app/frontend/editor/components/header-nav/preview-button.vue +6 -1
  34. data/app/frontend/editor/components/header-nav/separator.vue +1 -1
  35. data/app/frontend/editor/components/image-library/index.vue +26 -29
  36. data/app/frontend/editor/components/kit/collection-item-input.vue +9 -0
  37. data/app/frontend/editor/components/kit/copy-paste-button.vue +26 -0
  38. data/app/frontend/editor/components/kit/dropdown.vue +5 -0
  39. data/app/frontend/editor/components/kit/icon-button.vue +24 -0
  40. data/app/frontend/editor/components/kit/icon.vue +2 -3
  41. data/app/frontend/editor/components/kit/index.js +4 -2
  42. data/app/frontend/editor/components/kit/link-input.vue +1 -1
  43. data/app/frontend/editor/components/kit/modal.vue +1 -1
  44. data/app/frontend/editor/components/kit/page-icon.vue +1 -1
  45. data/app/frontend/editor/components/kit/rich-text-input/link-buttons.vue +1 -1
  46. data/app/frontend/editor/components/kit/select-input.vue +4 -2
  47. data/app/frontend/editor/components/link-picker/actions.vue +1 -1
  48. data/app/frontend/editor/components/link-picker/index.vue +1 -1
  49. data/app/frontend/editor/components/link-picker/page.vue +2 -0
  50. data/app/frontend/editor/components/page/form/main.vue +1 -1
  51. data/app/frontend/editor/components/page/list/actions-button.vue +159 -0
  52. data/app/frontend/editor/components/page/list/index.vue +15 -24
  53. data/app/frontend/editor/components/page/list/list-item.vue +10 -61
  54. data/app/frontend/editor/components/section-highlighter/index.vue +47 -46
  55. data/app/frontend/editor/components/section-list/add-button.vue +39 -0
  56. data/app/frontend/editor/components/section-list/index.vue +30 -15
  57. data/app/frontend/editor/components/section-list/list-item.vue +23 -8
  58. data/app/frontend/editor/components/section-pane/block-list/index.vue +1 -0
  59. data/app/frontend/editor/components/section-pane/block-list/list-item.vue +9 -6
  60. data/app/frontend/editor/components/section-pane/block-tree/new-nested-block-button.vue +2 -2
  61. data/app/frontend/editor/components/section-pane/block-tree/tree-node.vue +2 -2
  62. data/app/frontend/editor/components/sidebar-nav/index.vue +102 -0
  63. data/app/frontend/editor/components/sidebar-nav/link.vue +60 -0
  64. data/app/frontend/editor/components/theme-section-list/category.vue +47 -0
  65. data/app/frontend/editor/components/theme-section-list/index.vue +7 -31
  66. data/app/frontend/editor/components/theme-section-list/list-item.vue +10 -3
  67. data/app/frontend/editor/design/components/modal.scss +1 -1
  68. data/app/frontend/editor/design/components/tooltip.scss +6 -0
  69. data/app/frontend/editor/design/transitions.scss +1 -1
  70. data/app/frontend/editor/layouts/app.vue +1 -1
  71. data/app/frontend/editor/layouts/default.vue +2 -2
  72. data/app/frontend/editor/layouts/slide-pane.vue +1 -1
  73. data/app/frontend/editor/locales/editor.ar.json +265 -0
  74. data/app/frontend/editor/locales/editor.en.json +23 -15
  75. data/app/frontend/editor/locales/editor.es.json +18 -10
  76. data/app/frontend/editor/locales/editor.fr.json +28 -13
  77. data/app/frontend/editor/locales/editor.pt-BR.json +18 -10
  78. data/app/frontend/editor/locales/index.js +3 -0
  79. data/app/frontend/editor/mixins/error-modal.js +7 -2
  80. data/app/frontend/editor/mixins/preview-transformation.js +0 -1
  81. data/app/frontend/editor/plugins/i18n.js +2 -17
  82. data/app/frontend/editor/services/__tests__/section.spec.js +6 -0
  83. data/app/frontend/editor/services/collection-item.js +8 -0
  84. data/app/frontend/editor/services/page.js +1 -1
  85. data/app/frontend/editor/services/section.js +30 -0
  86. data/app/frontend/editor/services/site.js +4 -4
  87. data/app/frontend/editor/services/theme.js +1 -0
  88. data/app/frontend/editor/spec/__mocks__/page.js +3 -1
  89. data/app/frontend/editor/spec/__mocks__/services.js +1 -0
  90. data/app/frontend/editor/store/__tests__/getters.spec.js +56 -1
  91. data/app/frontend/editor/store/actions/index.js +1 -0
  92. data/app/frontend/editor/store/actions/site.js +8 -4
  93. data/app/frontend/editor/store/getters.js +11 -0
  94. data/app/frontend/editor/views/page-preview.vue +2 -1
  95. data/app/frontend/images/favicon.svg +11 -0
  96. data/app/frontend/images/logo.svg +14 -0
  97. data/app/frontend/live-preview-client/iframe-decorator.js +17 -15
  98. data/app/frontend/live-preview-client/rails.js +1 -1
  99. data/app/helpers/maglev/application_helper.rb +7 -2
  100. data/app/helpers/maglev/editor_helper.rb +12 -5
  101. data/app/models/concerns/maglev/sections_concern.rb +4 -0
  102. data/app/models/maglev/asset.rb +13 -14
  103. data/app/models/maglev/page/path_concern.rb +23 -8
  104. data/app/models/maglev/page.rb +17 -18
  105. data/app/models/maglev/page_path.rb +18 -18
  106. data/app/models/maglev/section/setting.rb +1 -1
  107. data/app/models/maglev/section.rb +18 -9
  108. data/app/models/maglev/setting_types/link.rb +1 -1
  109. data/app/models/maglev/site.rb +13 -24
  110. data/app/services/maglev/app_container.rb +2 -2
  111. data/app/services/maglev/extract_locale.rb +3 -2
  112. data/app/services/maglev/fetch_page.rb +2 -0
  113. data/app/services/maglev/fetch_theme_layout.rb +2 -0
  114. data/app/services/maglev/get_page_fullpath.rb +1 -2
  115. data/app/services/maglev/remove_section_type.rb +50 -0
  116. data/app/services/maglev/rename_section_type.rb +57 -0
  117. data/app/services/maglev/search_pages.rb +2 -1
  118. data/app/views/layouts/maglev/admin/application.html.erb +1 -1
  119. data/app/views/maglev/admin/sections/previews/show.html.erb +16 -1
  120. data/app/views/maglev/api/collection_items/show.json.jbuilder +7 -0
  121. data/app/views/maglev/api/page_clones/create.json.jbuilder +3 -0
  122. data/app/views/maglev/editor/show.html.erb +6 -5
  123. data/config/locales/activerecord.ar.yml +13 -0
  124. data/config/locales/activerecord.en.yml +8 -2
  125. data/config/locales/activerecord.es.yml +4 -0
  126. data/config/locales/activerecord.fr.yml +6 -2
  127. data/config/locales/activerecord.pt-BR.yml +13 -0
  128. data/config/routes.rb +3 -4
  129. data/db/migrate/20200831101942_create_maglev_section_content.rb +10 -2
  130. data/db/migrate/20210819092740_switch_to_localized_page_fields.rb +13 -3
  131. data/db/migrate/20211008064437_add_locales_to_sites.rb +7 -1
  132. data/db/migrate/20211013210954_translate_section_content.rb +16 -2
  133. data/db/migrate/20211203224112_add_open_graph_tags_to_pages.rb +9 -3
  134. data/db/migrate/20220612092235_add_style_to_sites.rb +5 -1
  135. data/lib/commands/maglev/change_site_locales_command.rb +61 -0
  136. data/lib/commands/maglev/create_site_command.rb +28 -0
  137. data/lib/commands/maglev/sections/remove_command.rb +48 -0
  138. data/lib/commands/maglev/sections/rename_command.rb +49 -0
  139. data/lib/generators/maglev/templates/install/config/initializers/maglev.rb +4 -1
  140. data/lib/generators/maglev/templates/theme/app/views/theme/layout.html.erb.tt +8 -2
  141. data/lib/maglev/errors.rb +1 -0
  142. data/lib/maglev/preview_constraint.rb +5 -1
  143. data/lib/maglev/theme_filesystem_loader.rb +7 -0
  144. data/lib/maglev/version.rb +1 -1
  145. data/lib/maglev.rb +13 -3
  146. data/lib/tasks/maglev/icons.rake +123 -0
  147. data/lib/tasks/maglev/vite.rake +62 -0
  148. data/lib/tasks/maglev_tasks.rake +9 -107
  149. data/tailwind.config.js +1 -0
  150. metadata +48 -33
  151. data/app/controllers/maglev/assets_controller.rb +0 -10
  152. data/app/frontend/editor/components/kit/list-item-button.vue +0 -16
  153. data/app/frontend/editor/components/sidebar-nav.vue +0 -125
  154. data/app/frontend/editor/plugins/maglev_dummy.js +0 -2
  155. data/app/frontend/images/favicon.png +0 -0
  156. data/app/frontend/images/logo.png +0 -0
@@ -1,47 +1,23 @@
1
1
  <template>
2
2
  <div>
3
- <uikit-accordion
3
+ <category
4
4
  v-for="(category, index) in categories"
5
- :key="index"
6
- headerClass="px-3 py-3 mb-3 bg-editor-primary text-white rounded-sm"
7
- >
8
- <div slot="header" class="flex items-center">
9
- <div class="capitalize-first">{{ category.name }}</div>
10
- <div class="ml-2 px-3 bg-white bg-opacity-25 text-xs rounded-full">
11
- {{ category.children.length }}
12
- </div>
13
- </div>
14
- <div class="pt-1">
15
- <list-item
16
- v-for="section in category.children"
17
- :key="section.id"
18
- :section="section"
19
- :insertAfter="insertAfter"
20
- />
21
-
22
- <div
23
- class="text-center pt-2 pb-6"
24
- v-if="category.children.length === 0"
25
- >
26
- {{ $t('themeSectionList.emptyCategory') }}
27
- </div>
28
- </div>
29
- </uikit-accordion>
5
+ :index="index"
6
+ :category="category"
7
+ :insert-after="insertAfter"
8
+ />
30
9
  </div>
31
10
  </template>
32
11
 
33
12
  <script>
34
- import ListItem from './list-item.vue'
13
+ import Category from './category.vue'
35
14
 
36
15
  export default {
37
16
  name: 'ThemeSectionList',
38
- components: { ListItem },
17
+ components: { Category },
39
18
  props: {
40
19
  insertAfter: { type: String },
41
20
  },
42
- data() {
43
- return { activeCategory: null }
44
- },
45
21
  computed: {
46
22
  categories() {
47
23
  return this.services.theme.buildCategories(this.currentTheme)
@@ -30,7 +30,7 @@
30
30
  <div
31
31
  class="flex items-center px-2 bg-editor-primary bg-opacity-5 py-4 w-full font-bold text-sm"
32
32
  >
33
- <p class="capitalize-first">{{ section.name }}</p>
33
+ <p class="capitalize-first">{{ name }}</p>
34
34
  </div>
35
35
  </div>
36
36
  </template>
@@ -48,6 +48,13 @@ export default {
48
48
  return { hovered: false, isImageLoaded: false, isImageNotFound: false }
49
49
  },
50
50
  computed: {
51
+ name() {
52
+ return (
53
+ this.$st(
54
+ `${this.currentI18nScope}.sections.${this.section.id}.name`,
55
+ ) || this.section.name
56
+ )
57
+ },
51
58
  hasScreenshot() {
52
59
  return this.section.screenshotPath
53
60
  },
@@ -65,8 +72,8 @@ export default {
65
72
  this.addSection({
66
73
  sectionDefinition: this.section,
67
74
  insertAt: this.insertAfter,
68
- }).then(() => {
69
- this.$router.push({ name: 'editPage' })
75
+ }).then(section => {
76
+ this.$router.push({ name: 'editSection', params: { sectionId: section.id } })
70
77
  })
71
78
  },
72
79
  imageLoaded() {
@@ -20,7 +20,7 @@
20
20
  }
21
21
 
22
22
  .modal-body {
23
- @apply flex flex-col flex-1 overflow-y-hidden pt-4;
23
+ @apply flex flex-col flex-1 overflow-y-auto pt-4;
24
24
  }
25
25
 
26
26
  /*
@@ -1,5 +1,6 @@
1
1
  .v-popover {
2
2
  & > .trigger {
3
+ @apply w-full;
3
4
  display: flex !important;
4
5
  }
5
6
  }
@@ -24,6 +25,11 @@
24
25
  .tooltip-inner {
25
26
  @apply shadow-lg rounded py-2 px-3 text-sm bg-white;
26
27
  }
28
+
29
+ &.tooltip-menu .tooltip-inner {
30
+ @apply p-1;
31
+ }
32
+
27
33
  .tooltip-arrow {
28
34
  display: none;
29
35
  width: 0;
@@ -1,6 +1,6 @@
1
1
  .fade-enter-active,
2
2
  .fade-leave-active {
3
- transition-duration: 0.3s;
3
+ transition-duration: 0.2s;
4
4
  transition-property: opacity;
5
5
  transition-timing-function: ease;
6
6
  }
@@ -21,7 +21,7 @@
21
21
  <script>
22
22
  import Layout from '@/layouts/default.vue'
23
23
  import HeaderNav from '@/components/header-nav/index.vue'
24
- import SidebarNav from '@/components/sidebar-nav.vue'
24
+ import SidebarNav from '@/components/sidebar-nav/index.vue'
25
25
 
26
26
  export default {
27
27
  name: 'AppLayout',
@@ -7,12 +7,12 @@
7
7
  name: 'editPage',
8
8
  params: { locale: currentLocale, pageId: pageId },
9
9
  }"
10
- class="w-16 h-full flex justify-center items-center border-r border-gray-200"
10
+ class="w-16 h-full flex justify-center items-center border-r border-gray-200 shrink-0"
11
11
  >
12
12
  <img v-bind:src="logoUrl" class="w-2/4" />
13
13
  </router-link>
14
14
  <div
15
- class="w-16 h-full flex justify-center items-center border-r border-gray-200"
15
+ class="w-16 h-full flex justify-center items-center border-r border-gray-200 shrink-0"
16
16
  v-else
17
17
  >
18
18
  <img v-bind:src="logoUrl" class="w-2/4" />
@@ -31,7 +31,7 @@
31
31
 
32
32
  <div class="ml-auto">
33
33
  <router-link :to="{ name: 'editPage' }">
34
- <uikit-icon name="ri-close-circle-line" />
34
+ <uikit-icon-button iconName="ri-close-line" class="relative -right-2" />
35
35
  </router-link>
36
36
  </div>
37
37
  </div>
@@ -0,0 +1,265 @@
1
+ {
2
+ "headerNav": {
3
+ "pages": "الصفحات:",
4
+ "pageSettings": "إعدادات الصفحة",
5
+ "previewSite": "معاينة الموقع",
6
+ "previewToggler": {
7
+ "button": "معاينة الموقع",
8
+ "draftLink": "النسخة المسودة",
9
+ "liveLink": "النسخة المباشرة"
10
+ },
11
+ "publishButton": {
12
+ "default": "نشر الموقع",
13
+ "inProgress": "جاري النشر...",
14
+ "success": "تم النشر!",
15
+ "fail": "فشل!"
16
+ },
17
+ "saveButton": {
18
+ "default": "حفظ",
19
+ "inProgress": "جاري الحفظ...",
20
+ "success": "تم الحفظ!",
21
+ "fail": "فشل!"
22
+ }
23
+ },
24
+ "sidebarNav": {
25
+ "listPagesTooltip": "إدارة صفحات موقعك",
26
+ "managePageSectionsTooltip": "إعادة ترتيب / حذف أقسام الصفحة",
27
+ "editStyleTooltip": "تغيير نمط موقعك",
28
+ "openImageLibraryTooltip": "فتح معرض الصور",
29
+ "leaveEditorTooltip": "العودة إلى التطبيق الرئيسي"
30
+ },
31
+ "pagePreview": {
32
+ "loading": "جاري التحميل...",
33
+ "empty": {
34
+ "title": {
35
+ "withoutLocale": "صفحتك فارغة",
36
+ "withLocale": "صفحتك باللغة %{localeName} فارغة"
37
+ },
38
+ "message": "الرجاء إضافة القسم الأول بالنقر على زر {icon} في الشريط الجانبي الأيسر."
39
+ }
40
+ },
41
+ "page": {
42
+ "list": {
43
+ "title": "قائمة الصفحات",
44
+ "subTitle": "إدارة صفحات موقعك",
45
+ "newButton": "صفحة جديدة",
46
+ "searchPlaceholder": "اكتب استعلامك هنا..."
47
+ },
48
+ "actions": {
49
+ "edit": "تعديل الإعدادات",
50
+ "clone": "نسخ الصفحة",
51
+ "hide": "إخفاء الصفحة",
52
+ "show": "إظهار الصفحة",
53
+ "delete": "حذف الصفحة",
54
+ "copyUrlToClipboard": "نسخ الرابط",
55
+ "copyUrlToClipboardSuccess": "تم النسخ إلى الحافظة!"
56
+ },
57
+ "new": {
58
+ "title": "إنشاء صفحة جديدة",
59
+ "submitButton": {
60
+ "default": "إنشاء صفحة",
61
+ "inProgress": "جاري الإنشاء...",
62
+ "success": "تم الإنشاء!",
63
+ "fail": "فشل!"
64
+ },
65
+ "cancelButton": "إلغاء"
66
+ },
67
+ "edit": {
68
+ "title": "تعديل صفحة",
69
+ "currentPage": {
70
+ "title": "تعديل الصفحة الحالية"
71
+ },
72
+ "submitButton": {
73
+ "default": "تحديث الصفحة",
74
+ "inProgress": "جاري التحديث...",
75
+ "success": "تم التحديث!",
76
+ "fail": "فشل!"
77
+ },
78
+ "cancelButton": "إلغاء"
79
+ },
80
+ "form": {
81
+ "tabs": {
82
+ "main": "الرئيسية",
83
+ "seo": "تحسين محركات البحث"
84
+ },
85
+ "title": "العنوان",
86
+ "path": "المسار",
87
+ "visible": "مرئي",
88
+ "visiblePlaceholder": "إظهار/إخفاء الصفحة",
89
+ "seoTitle": "عنوان الميتا",
90
+ "metaDescription": "وصف الميتا",
91
+ "ogTitle": "عنوان og",
92
+ "ogDescription": "وصف og",
93
+ "ogImageUrl": "صورة og"
94
+ }
95
+ },
96
+ "sections": {
97
+ "addPane": {
98
+ "title": "إضافة قسم"
99
+ },
100
+ "listPane": {
101
+ "title": "تنظيم الأقسام",
102
+ "empty": "لا توجد أقسام.",
103
+ "addButton": "إضافة قسم جديد"
104
+ }
105
+ },
106
+ "sectionPane": {
107
+ "tabs": {
108
+ "settings": "المحتوى",
109
+ "blocks": "الكتل",
110
+ "advanced": "متقدم"
111
+ },
112
+ "blockList": {
113
+ "add": "إضافة عنصر جديد"
114
+ }
115
+ },
116
+ "sectionBlockPane": {
117
+ "tabs": {
118
+ "settings": "المحتوى",
119
+ "blocks": "الكتل",
120
+ "advanced": "متقدم"
121
+ }
122
+ },
123
+ "themeSectionList": {
124
+ "emptyCategory": "لا توجد أقسام"
125
+ },
126
+ "style": {
127
+ "edit": {
128
+ "title": "تنسيق موقعك",
129
+ "submitButton": {
130
+ "default": "تحديث النمط",
131
+ "inProgress": "جاري التحديث...",
132
+ "success": "تم التحديث!",
133
+ "fail": "فشل!"
134
+ }
135
+ }
136
+ },
137
+ "imageInput": {
138
+ "addButton": "إضافة صورة",
139
+ "replaceButton": "استبدال الصورة",
140
+ "clearButton": "مسح",
141
+ "altTextPlaceholder": "نص بديل لمساعدة محركات البحث"
142
+ },
143
+ "imageLibrary": {
144
+ "title": "قائمة الصور",
145
+ "pickerTitle": "اختيار صورة",
146
+ "none": "لم يتم رفع أي صور بعد",
147
+ "searchPlaceholder": "البحث عن اسم ملف",
148
+ "pagination": {
149
+ "label": "%{start} - %{end} من %{totalItems} صورة",
150
+ "noItems": "لا توجد صور"
151
+ },
152
+ "destroy": {
153
+ "text": "هل أنت متأكد؟",
154
+ "ok": "نعم، احذفها",
155
+ "cancel": "إلغاء"
156
+ },
157
+ "uploader": {
158
+ "wrongFiles": "تأكد من أن حجم كل صورة لا يتجاوز %{limit}.",
159
+ "uploadButton": {
160
+ "default": "رفع الصور",
161
+ "inProgress": "جاري الرفع...",
162
+ "success": "تم الرفع!",
163
+ "fail": "فشل!"
164
+ }
165
+ }
166
+ },
167
+ "iconInput": {
168
+ "addButton": "إضافة أيقونة",
169
+ "replaceButton": "استبدال الأيقونة",
170
+ "clearButton": "مسح"
171
+ },
172
+ "iconLibrary": {
173
+ "title": "الأيقونات",
174
+ "pickerTitle": "اختيار أيقونة"
175
+ },
176
+ "linkInput": {
177
+ "placeholder": "انقر هنا لاختيار رابط",
178
+ "withNestedTextLabel": "تمكين النص",
179
+ "nestedTextPlaceholder": "النص"
180
+ },
181
+ "linkPicker": {
182
+ "title": "اختيار رابط",
183
+ "insertTitle": "إدراج رابط",
184
+ "page": {
185
+ "name": "صفحة",
186
+ "input": {
187
+ "label": "صفحة",
188
+ "placeholder": "اختر صفحة",
189
+ "searchPlaceholder": "بحث...",
190
+ "emptyLabel": "لم يتم العثور على صفحات"
191
+ },
192
+ "sectionInput": {
193
+ "label": "قسم",
194
+ "placeholder": "اختر قسماً",
195
+ "emptyLabel": "لم يتم اختيار قسم"
196
+ }
197
+ },
198
+ "url": {
199
+ "name": "رابط",
200
+ "input": {
201
+ "label": "رابط"
202
+ }
203
+ },
204
+ "email": {
205
+ "name": "بريد إلكتروني",
206
+ "input": {
207
+ "label": "بريد إلكتروني"
208
+ }
209
+ },
210
+ "shared": {
211
+ "mainButton": {
212
+ "select": "اختيار",
213
+ "insert": "إضافة"
214
+ },
215
+ "cancelButton": "إلغاء",
216
+ "newWindowInput": {
217
+ "label": "فتح في نافذة جديدة"
218
+ }
219
+ }
220
+ },
221
+ "collectionItemInput": {
222
+ "select": {
223
+ "placeholder": "اختر عنصراً",
224
+ "searchPlaceholder": "بحث...",
225
+ "emptyLabel": "لم يتم العثور على عناصر"
226
+ }
227
+ },
228
+ "pagination": {
229
+ "defaultLabel": "%{start} - %{end} من %{totalItems} عنصر",
230
+ "defaultNoItems": "لا يوجد"
231
+ },
232
+ "confirmationButton": {
233
+ "text": "هل أنت متأكد من تنفيذ هذا الإجراء؟",
234
+ "confirmButtonLabel": "نعم",
235
+ "cancelButtonLabel": "لا"
236
+ },
237
+ "errorModals": {
238
+ "staleRecord": {
239
+ "title": "نأسف 🙇",
240
+ "message": "لم نتمكن من حفظ تغييراتك لأن شخصاً آخر قام بتحديث المحتوى في هذه الأثناء.",
241
+ "button": "يرجى إعادة تحميل الصفحة"
242
+ },
243
+ "forbidden": {
244
+ "title": "نأسف 🙇",
245
+ "message": "غير مسموح لك بالقيام بذلك. تحقق مع المسؤول.",
246
+ "button": "إغلاق"
247
+ }
248
+ },
249
+ "support": {
250
+ "human": {
251
+ "storageUnits": {
252
+ "format": "%{number} %{unit}",
253
+ "units": {
254
+ "byte": {
255
+ "one": "بايت",
256
+ "other": "بايت"
257
+ },
258
+ "kb": "كيلوبايت",
259
+ "mb": "ميجابايت",
260
+ "gb": "جيجابايت"
261
+ }
262
+ }
263
+ }
264
+ }
265
+ }
@@ -2,7 +2,7 @@
2
2
  "headerNav": {
3
3
  "pages": "Pages:",
4
4
  "pageSettings": "Page settings",
5
- "previewSite": "Preview site",
5
+ "previewSite": "Preview",
6
6
  "previewToggler": {
7
7
  "button": "Preview site",
8
8
  "draftLink": "Draft version",
@@ -19,10 +19,10 @@
19
19
  "inProgress": "Saving...",
20
20
  "success": "Saved!",
21
21
  "fail": "Fail!"
22
- }
22
+ }
23
23
  },
24
24
  "sidebarNav": {
25
- "addNewSectionTooltip": "Add a new section at the bottom of the page",
25
+ "listPagesTooltip": "Manage the pages of your site",
26
26
  "managePageSectionsTooltip": "Re-order / delete the sections of the page",
27
27
  "editStyleTooltip": "Change the style of your site",
28
28
  "openImageLibraryTooltip": "Open the gallery of images",
@@ -43,14 +43,16 @@
43
43
  "title": "List of pages",
44
44
  "subTitle": "Manage the pages of your site",
45
45
  "newButton": "New page",
46
- "searchPlaceholder": "Type your query here...",
47
- "item": {
48
- "edit": "Edit page settings",
49
- "clone": "Clone page",
50
- "hide": "Hide page",
51
- "show": "Show page",
52
- "delete": "Delete page"
53
- }
46
+ "searchPlaceholder": "Type your query here..."
47
+ },
48
+ "actions": {
49
+ "edit": "Edit settings",
50
+ "clone": "Clone page",
51
+ "hide": "Hide page",
52
+ "show": "Show page",
53
+ "delete": "Delete page",
54
+ "copyUrlToClipboard": "Copy URL",
55
+ "copyUrlToClipboardSuccess": "Copied to clipboard!"
54
56
  },
55
57
  "new": {
56
58
  "title": "Create a new page",
@@ -97,7 +99,8 @@
97
99
  },
98
100
  "listPane": {
99
101
  "title": "Organize sections",
100
- "empty": "There are no sections."
102
+ "empty": "There are no sections.",
103
+ "addButton": "Add a new section"
101
104
  }
102
105
  },
103
106
  "sectionPane": {
@@ -116,7 +119,7 @@
116
119
  "blocks": "Blocks",
117
120
  "advanced": "Advanced"
118
121
  }
119
- },
122
+ },
120
123
  "themeSectionList": {
121
124
  "emptyCategory": "No sections"
122
125
  },
@@ -160,7 +163,7 @@
160
163
  "fail": "Fail!"
161
164
  }
162
165
  }
163
- },
166
+ },
164
167
  "iconInput": {
165
168
  "addButton": "Add icon",
166
169
  "replaceButton": "Replace icon",
@@ -236,6 +239,11 @@
236
239
  "title": "We are sorry 🙇",
237
240
  "message": "We couldn't persist your changes because someone else has updated the content in the meantime.",
238
241
  "button": "Please reload your page"
242
+ },
243
+ "forbidden": {
244
+ "title": "We are sorry 🙇",
245
+ "message": "You're not permitted to do this. Check with your administrator.",
246
+ "button": "Close"
239
247
  }
240
248
  },
241
249
  "support": {
@@ -254,4 +262,4 @@
254
262
  }
255
263
  }
256
264
  }
257
- }
265
+ }
@@ -22,7 +22,7 @@
22
22
  }
23
23
  },
24
24
  "sidebarNav": {
25
- "addNewSectionTooltip": "Añadir una nueva sección al final de la página",
25
+ "listPagesTooltip": "Gestionar las páginas de tu sitio",
26
26
  "managePageSectionsTooltip": "Reordenar / eliminar las secciones de la página",
27
27
  "editStyleTooltip": "Cambiar el diseño de tu sitio",
28
28
  "openImageLibraryTooltip": "Abrir la galería de imágenes",
@@ -43,14 +43,16 @@
43
43
  "title": "Lista de páginas",
44
44
  "subTitle": "Gestiona las páginas de tu sitio",
45
45
  "newButton": "Nueva página",
46
- "searchPlaceholder": "Escribe tu consulta aquí...",
47
- "item": {
48
- "edit": "Editar la configuración de la página",
49
- "clone": "Clonar página",
50
- "hide": "Esconder",
51
- "show": "Mostrar",
52
- "delete": "Eliminar"
53
- }
46
+ "searchPlaceholder": "Escribe tu consulta aquí..."
47
+ },
48
+ "actions": {
49
+ "edit": "Editar configuración",
50
+ "clone": "Clonar",
51
+ "hide": "Ocultar",
52
+ "show": "Mostrar",
53
+ "delete": "Eliminar",
54
+ "copyUrlToClipboard": "Copiar URL",
55
+ "copyUrlToClipboardSuccess": "¡Copiado!"
54
56
  },
55
57
  "new": {
56
58
  "title": "Crear una nueva página",
@@ -97,7 +99,8 @@
97
99
  },
98
100
  "listPane": {
99
101
  "title": "Organizar secciones",
100
- "empty": "No hay secciones."
102
+ "empty": "No hay secciones.",
103
+ "addButton": "Añadir una nueva sección"
101
104
  }
102
105
  },
103
106
  "sectionPane": {
@@ -236,6 +239,11 @@
236
239
  "title": "Lo sentimos 🙇",
237
240
  "message": "No hemos podido guardar tus cambios porque alguien más actualizó el contenido mientras se editaba.",
238
241
  "button": "Por favor, recarga la página"
242
+ },
243
+ "forbidden": {
244
+ "title": "Lo sentimos 🙇",
245
+ "message": "No tienes permiso para realizar esta acción. Consulta con tu administrador.",
246
+ "button": "Cerrar"
239
247
  }
240
248
  },
241
249
  "support": {
@@ -2,7 +2,7 @@
2
2
  "headerNav": {
3
3
  "pages": "Pages :",
4
4
  "pageSettings": "Paramètres page",
5
- "previewSite": "Prévisualiser site",
5
+ "previewSite": "Prévisualiser",
6
6
  "previewToggler": {
7
7
  "button": "Voir site",
8
8
  "draftLink": "Version brouillon",
@@ -22,7 +22,7 @@
22
22
  }
23
23
  },
24
24
  "sidebarNav": {
25
- "addNewSectionTooltip": "Ajouter une nouvelle section au bas de la page",
25
+ "listPagesTooltip": "Gérer les pages de votre site",
26
26
  "managePageSectionsTooltip": "Gérer les sections de la page",
27
27
  "editStyleTooltip": "Modifier le style du site",
28
28
  "openImageLibraryTooltip": "Ouvrir la galerie d'images",
@@ -43,14 +43,16 @@
43
43
  "title": "Liste des pages",
44
44
  "subTitle": "Gérer les pages de votre site",
45
45
  "newButton": "Nouvelle page",
46
- "searchPlaceholder": "Tapez un titre de page...",
47
- "item": {
48
- "edit": "Éditer les paramètres",
49
- "clone": "Dupliquer",
50
- "hide": "Cacher",
51
- "show": "Montrer",
52
- "delete": "Supprimer"
53
- }
46
+ "searchPlaceholder": "Tapez votre recherche ici..."
47
+ },
48
+ "actions": {
49
+ "edit": "Modifier les paramètres",
50
+ "clone": "Dupliquer",
51
+ "hide": "Masquer",
52
+ "show": "Afficher",
53
+ "delete": "Supprimer",
54
+ "copyUrlToClipboard": "Copier l'URL",
55
+ "copyUrlToClipboardSuccess": "Copié !"
54
56
  },
55
57
  "new": {
56
58
  "title": "Créer une nouvelle page",
@@ -97,7 +99,8 @@
97
99
  },
98
100
  "listPane": {
99
101
  "title": "Organiser les sections",
100
- "empty": "Vous n'avez aucune section."
102
+ "empty": "Vous n'avez aucune section.",
103
+ "addButton": "Ajouter une nouvelle section"
101
104
  }
102
105
  },
103
106
  "sectionPane": {
@@ -113,6 +116,7 @@
113
116
  "sectionBlockPane": {
114
117
  "tabs": {
115
118
  "settings": "Contenu",
119
+ "blocks": "Blocs",
116
120
  "advanced": "Paramètres"
117
121
  }
118
122
  },
@@ -121,7 +125,13 @@
121
125
  },
122
126
  "style": {
123
127
  "edit": {
124
- "title": "Styler site"
128
+ "title": "Styler votre site",
129
+ "submitButton": {
130
+ "default": "Mettre à jour le style",
131
+ "inProgress": "Mise à jour...",
132
+ "success": "Style mis à jour !",
133
+ "fail": "Échec !"
134
+ }
125
135
  }
126
136
  },
127
137
  "imageInput": {
@@ -228,7 +238,12 @@
228
238
  "staleRecord": {
229
239
  "title": "Nous sommes désolés 🙇",
230
240
  "message": "Nous n'avons pu sauvegarder vos modifications car de plus récentes viennent d'être effectuées par une autre personne.",
231
- "button": "Recharger la page"
241
+ "button": "Veuillez recharger votre page"
242
+ },
243
+ "forbidden": {
244
+ "title": "Nous sommes désolés 🙇",
245
+ "message": "Vous n'êtes pas autorisé à effectuer cette action. Veuillez contacter votre administrateur.",
246
+ "button": "Fermer"
232
247
  }
233
248
  },
234
249
  "support": {