diff --git a/zero.Core/Api/PagesApi.cs b/zero.Core/Api/PagesApi.cs
index e7355352..b594bcf3 100644
--- a/zero.Core/Api/PagesApi.cs
+++ b/zero.Core/Api/PagesApi.cs
@@ -36,6 +36,13 @@ namespace zero.Core.Api
}
+ ///
+ public async Task> GetByIds(params string[] ids)
+ {
+ return await GetByIds(ids);
+ }
+
+
///
public IList GetPageTypes()
{
@@ -357,6 +364,11 @@ namespace zero.Core.Api
///
Task GetById(string id);
+ ///
+ /// Get pages by ids
+ ///
+ Task> GetByIds(params string[] ids);
+
///
/// Get all available page types
///
diff --git a/zero.Web.UI/App/components/pickers/pagePicker/overlay.vue b/zero.Web.UI/App/components/pickers/pagePicker/overlay.vue
new file mode 100644
index 00000000..0ca01789
--- /dev/null
+++ b/zero.Web.UI/App/components/pickers/pagePicker/overlay.vue
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zero.Web.UI/App/components/pickers/pagePicker/pagepicker.vue b/zero.Web.UI/App/components/pickers/pagePicker/pagepicker.vue
new file mode 100644
index 00000000..b4d719ff
--- /dev/null
+++ b/zero.Web.UI/App/components/pickers/pagePicker/pagepicker.vue
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zero.Web.UI/App/core/editor-field.js b/zero.Web.UI/App/core/editor-field.js
index ffeb135b..c594e7a6 100644
--- a/zero.Web.UI/App/core/editor-field.js
+++ b/zero.Web.UI/App/core/editor-field.js
@@ -16,6 +16,7 @@ import DatePicker from '../editor/fields/datepicker.vue';
import DateRangePicker from '../editor/fields/daterangepicker.vue';
import IconPicker from '../editor/fields/iconPicker.vue';
import LanguagePicker from '../editor/fields/language.vue';
+import PagePicker from '../editor/fields/pagepicker.vue';
import InputList from '../editor/fields/inputlist.vue';
import Media from '../editor/fields/media.vue';
import Modules from '../editor/fields/modules.vue';
@@ -351,6 +352,18 @@ class EditorField
}
+ /**
+ * Renders a page picker
+ * @param {object} [options] - Custom options
+ * @param {number} [options.limit=1] - Limit of selection
+ * @returns {EditorField}
+ */
+ pagePicker(options)
+ {
+ return this._setComponent(PagePicker, { ...options });
+ }
+
+
/**
* Create a list of strings
* @param {number} [limit=10] - Limit the inputs
diff --git a/zero.Web.UI/App/editor/editor.scss b/zero.Web.UI/App/editor/editor.scss
index d79a6f2e..10491c1d 100644
--- a/zero.Web.UI/App/editor/editor.scss
+++ b/zero.Web.UI/App/editor/editor.scss
@@ -11,6 +11,13 @@
{
padding-top: 0;
}
+
+ .ui-tab > h3
+ {
+ border-bottom: 1px solid var(--color-line);
+ padding-bottom: var(--padding-m);
+ margin-bottom: var(--padding);
+ }
}
.editor-outer
@@ -190,4 +197,9 @@
{
margin-top: 0;
}
+
+ .editor-infos
+ {
+ margin-top: 0;
+ }
}
\ No newline at end of file
diff --git a/zero.Web.UI/App/editor/editor.vue b/zero.Web.UI/App/editor/editor.vue
index 6afec539..8aa9c6b0 100644
--- a/zero.Web.UI/App/editor/editor.vue
+++ b/zero.Web.UI/App/editor/editor.vue
@@ -1,9 +1,9 @@
-
+
-
+
diff --git a/zero.Web.UI/App/editor/fields/pagepicker.vue b/zero.Web.UI/App/editor/fields/pagepicker.vue
new file mode 100644
index 00000000..54c997a6
--- /dev/null
+++ b/zero.Web.UI/App/editor/fields/pagepicker.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zero.Web.UI/App/resources/pages.js b/zero.Web.UI/App/resources/pages.js
index a82b943f..20dd137f 100644
--- a/zero.Web.UI/App/resources/pages.js
+++ b/zero.Web.UI/App/resources/pages.js
@@ -24,6 +24,11 @@ export default {
return Axios.get(base + 'getEmpty', { params: { type, parent } }).then(res => Promise.resolve(res.data));
},
+ getPreviews(ids)
+ {
+ return Axios.get(base + 'getPreviews', { params: { ids } }).then(res => Promise.resolve(res.data));
+ },
+
getRevisions(id, page)
{
return Axios.get(base + 'getRevisions', { params: { id, page } }).then(res => Promise.resolve(res.data));
diff --git a/zero.Web/Controllers/PagesController.cs b/zero.Web/Controllers/PagesController.cs
index 03f41b17..4f81352c 100644
--- a/zero.Web/Controllers/PagesController.cs
+++ b/zero.Web/Controllers/PagesController.cs
@@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
+using System.Linq;
using System.Threading.Tasks;
using zero.Core.Api;
using zero.Core.Entities;
@@ -56,6 +57,25 @@ namespace zero.Web.Controllers
}
+ public async Task> GetPreviews([FromQuery] List ids)
+ {
+ IReadOnlyCollection pageTypes = Options.Pages.GetAllItems();
+
+ return Previews(await Api.GetByIds(ids.ToArray()), item =>
+ {
+ PageType pageType = pageTypes.FirstOrDefault(x => x.Alias == item.PageTypeAlias);
+
+ return new PreviewModel()
+ {
+ Id = item.Id,
+ Icon = pageType?.Icon ?? "fth-folder",
+ Name = item.Name,
+ //Text = item.
+ };
+ });
+ }
+
+
public async Task> GetRevisions([FromQuery] string id, [FromQuery] int page = 1) => await RevisionsApi.GetPaged(id, page);
diff --git a/zero.Web/Defaults/ZeroAssemblyDiscoveryRule.cs b/zero.Web/Defaults/ZeroAssemblyDiscoveryRule.cs
index 0dd3a5e6..66906d28 100644
--- a/zero.Web/Defaults/ZeroAssemblyDiscoveryRule.cs
+++ b/zero.Web/Defaults/ZeroAssemblyDiscoveryRule.cs
@@ -8,7 +8,6 @@ namespace zero.Web.Defaults
{
const string ZERO_PREFIX = "zero.";
-
///
public bool IsValid(RuntimeLibrary library, AssemblyDiscoveryContext context)
{
diff --git a/zero.Web/Resources/Localization/zero.en-us.json b/zero.Web/Resources/Localization/zero.en-us.json
index 35a1c04f..25cf981b 100644
--- a/zero.Web/Resources/Localization/zero.en-us.json
+++ b/zero.Web/Resources/Localization/zero.en-us.json
@@ -374,7 +374,6 @@
"name": "Page",
"type": "Type",
"root": "Root",
-
"info_tab": "Info",
"overview": {
@@ -407,6 +406,10 @@
"preview": {
"title": "Preview"
+ },
+
+ "picker": {
+ "headline": "Select a page"
}
},