From 9719559b432fde336bfd8637dc692212ebebd4b2 Mon Sep 17 00:00:00 2001 From: javalikescript Date: Sat, 1 Feb 2025 08:29:24 +0100 Subject: [PATCH] Update page registration --- extensions/hue-v2/hue-v2.js | 2 +- extensions/owm/owm.js | 2 +- extensions/share/share.js | 2 +- extensions/web-base/manifest.json | 11 +++++-- extensions/web-base/www/app.html | 2 +- extensions/web-base/www/app/app.js | 39 +++++++++++++---------- extensions/web-base/www/app/boot.js | 3 ++ extensions/web-base/www/app/extensions.js | 2 +- extensions/web-base/www/app/properties.js | 2 +- extensions/web-base/www/app/things.js | 2 +- extensions/web-chart/web-chart.js | 2 +- extensions/web-dashboard/web-dashboard.js | 2 +- extensions/web-example/web-example.js | 2 +- extensions/web-notes/web-notes.js | 2 +- extensions/web-scripts/view-loader.js | 2 +- extensions/web-scripts/view-schema.json | 13 +++++++- extensions/web-scripts/web-scripts.js | 2 +- extensions/web-time/web-time.js | 2 +- extensions/web-tools/web-tools.js | 2 +- 19 files changed, 60 insertions(+), 36 deletions(-) diff --git a/extensions/hue-v2/hue-v2.js b/extensions/hue-v2/hue-v2.js index 79f2562..d2ff580 100644 --- a/extensions/hue-v2/hue-v2.js +++ b/extensions/hue-v2/hue-v2.js @@ -15,6 +15,6 @@ define(['./hue-v2.xml'], function(aPageTemplate) { } }); - addPageComponent(aVue, true); + addPageComponent(aVue); }); diff --git a/extensions/owm/owm.js b/extensions/owm/owm.js index 1b46fbd..a5dfeb2 100644 --- a/extensions/owm/owm.js +++ b/extensions/owm/owm.js @@ -94,6 +94,6 @@ define(['./owm.xml'], function(owmTemplate) { } }); - addPageComponent(owmVue, 'umbrella'); + addPageComponent(owmVue, 'umbrella', true); }); diff --git a/extensions/share/share.js b/extensions/share/share.js index fcaad77..bb49059 100644 --- a/extensions/share/share.js +++ b/extensions/share/share.js @@ -7,6 +7,6 @@ define(['./share.xml', 'engine/configuration/extensions/share/'], function(share } }); - addPageComponent(shareVue, 'share'); + addPageComponent(shareVue, 'share', true); }); diff --git a/extensions/web-base/manifest.json b/extensions/web-base/manifest.json index 53435dd..a341205 100644 --- a/extensions/web-base/manifest.json +++ b/extensions/web-base/manifest.json @@ -48,14 +48,19 @@ "title": "URL", "type": "string" }, + "open": { + "title": "Open in a new tab", + "type": "boolean", + "default": false + }, "icon": { "title": "Tile icon", "type": "string", "enumValues": [ - {"const": "fa-link", "title": "Link"}, - {"const": "fa-bookmark", "title": "Bookmark"} + {"const": "link", "title": "Link"}, + {"const": "bookmark", "title": "Bookmark"} ], - "default": "fa-link" + "default": "link" } } } diff --git a/extensions/web-base/www/app.html b/extensions/web-base/www/app.html index c01a5e5..4809023 100644 --- a/extensions/web-base/www/app.html +++ b/extensions/web-base/www/app.html @@ -331,7 +331,7 @@
{{ tile.name }} -

+

diff --git a/extensions/web-base/www/app/app.js b/extensions/web-base/www/app/app.js index 9ec0da5..e0e1a19 100644 --- a/extensions/web-base/www/app/app.js +++ b/extensions/web-base/www/app/app.js @@ -513,7 +513,11 @@ var homePage = new Vue({ if (tile.id) { app.toPage(tile.id); } else if (tile.url) { - window.open(tile.url, '_blank'); + if (tile.open) { + window.open(tile.url); + } else { + window.location.assign(tile.url); + } } } }, @@ -527,9 +531,6 @@ var homePage = new Vue({ computed: { sortedTiles: function() { var tiles = [].concat(this.tiles); - if ((typeof webBaseConfig === 'object') && Array.isArray(webBaseConfig.links)) { - tiles = tiles.concat(webBaseConfig.links); - } tiles.sort(compareByName); return tiles; } @@ -652,25 +653,29 @@ new Vue({ el: '#pages' }); -function registerPageVue(vue, icon) { +function registerPageVue(vue, icon, showTile, showMenu) { var page = getPageFromVue(vue); if (page) { - menu.pages.push({ - id: page.id, - name: page.title - }); - homePage.tiles.push({ - id: page.id, - name: page.title, - icon: icon - }); + if (showTile) { + homePage.tiles.push({ + id: page.id, + name: page.title, + icon: icon + }); + } + if (showMenu) { + menu.pages.push({ + id: page.id, + name: page.title + }); + } } } -function addPageComponent(vue, menuIcon) { +function addPageComponent(vue, icon, showTile, showMenu) { var component = vue.$mount(); document.getElementById('pages').appendChild(component.$el); - if (menuIcon) { - registerPageVue(vue, ((typeof menuIcon === 'string') && (menuIcon !== '')) ? 'fa-' + menuIcon : undefined); + if (icon !== undefined) { + registerPageVue(vue, icon, showTile, showMenu); } } diff --git a/extensions/web-base/www/app/boot.js b/extensions/web-base/www/app/boot.js index 6734982..19ec903 100644 --- a/extensions/web-base/www/app/boot.js +++ b/extensions/web-base/www/app/boot.js @@ -84,6 +84,9 @@ Promise.all([ document.title = webBaseConfig.title; homePage.title = webBaseConfig.title; } + if (Array.isArray(webBaseConfig.links)) { + homePage.tiles = homePage.tiles.concat(webBaseConfig.links); + } app.user = user; if (Array.isArray(addons)) { return Promise.all(addons.map(function(addon) { diff --git a/extensions/web-base/www/app/extensions.js b/extensions/web-base/www/app/extensions.js index 9759bd2..29710d4 100644 --- a/extensions/web-base/www/app/extensions.js +++ b/extensions/web-base/www/app/extensions.js @@ -39,7 +39,7 @@ registerPageVue(new Vue({ } } } -}), 'fa-plus-circle'); +}), 'plus-circle', true, true); function buildExtensionSchema(manifest, enumsById) { if (manifest && manifest.schema) { diff --git a/extensions/web-base/www/app/properties.js b/extensions/web-base/www/app/properties.js index 9428a3e..e919fc9 100644 --- a/extensions/web-base/www/app/properties.js +++ b/extensions/web-base/www/app/properties.js @@ -54,4 +54,4 @@ registerPageVue(new Vue({ } } } -}), 'fa-list'); +}), 'list', true, true); diff --git a/extensions/web-base/www/app/things.js b/extensions/web-base/www/app/things.js index 19b81da..4ff9d18 100644 --- a/extensions/web-base/www/app/things.js +++ b/extensions/web-base/www/app/things.js @@ -98,7 +98,7 @@ registerPageVue(new Vue({ } } } -}), 'fa-circle'); +}), 'circle', true, true); new Vue({ el: '#thing', diff --git a/extensions/web-chart/web-chart.js b/extensions/web-chart/web-chart.js index e7de767..625eec0 100644 --- a/extensions/web-chart/web-chart.js +++ b/extensions/web-chart/web-chart.js @@ -342,6 +342,6 @@ define(['./web-chart.xml'], function(pageXml) { } }); - addPageComponent(vue, 'chart-line'); + addPageComponent(vue, 'chart-line', true); }); diff --git a/extensions/web-dashboard/web-dashboard.js b/extensions/web-dashboard/web-dashboard.js index 6494ed5..0fe8766 100644 --- a/extensions/web-dashboard/web-dashboard.js +++ b/extensions/web-dashboard/web-dashboard.js @@ -290,6 +290,6 @@ define(['./web-dashboard.xml'], function(dashboardTemplate) { } }); - addPageComponent(dashboardVue, 'columns'); + addPageComponent(dashboardVue, 'columns', true); }); diff --git a/extensions/web-example/web-example.js b/extensions/web-example/web-example.js index 8a3a389..189ed3a 100644 --- a/extensions/web-example/web-example.js +++ b/extensions/web-example/web-example.js @@ -4,6 +4,6 @@ define(['./web-example.xml'], function(aPageTemplate) { template: aPageTemplate }); - addPageComponent(aVue, true); + addPageComponent(aVue, 'flask', true); }); diff --git a/extensions/web-notes/web-notes.js b/extensions/web-notes/web-notes.js index 5198ca4..f27888a 100644 --- a/extensions/web-notes/web-notes.js +++ b/extensions/web-notes/web-notes.js @@ -202,7 +202,7 @@ define(['./web-notes.xml', './web-note.xml', './web-draw.xml'], function(notesTe } }); - addPageComponent(notesVue, 'sticky-note'); + addPageComponent(notesVue, 'sticky-note', true, true); addPageComponent(noteVue); addPageComponent(drawVue); diff --git a/extensions/web-scripts/view-loader.js b/extensions/web-scripts/view-loader.js index 0d2faab..bc02d25 100644 --- a/extensions/web-scripts/view-loader.js +++ b/extensions/web-scripts/view-loader.js @@ -110,7 +110,7 @@ define(function() { fn.call(this, options, config); } var vue = new Vue(options); - addPageComponent(vue, config.icon); + addPageComponent(vue, config.icon || undefined, config.tile, config.menu); } return { diff --git a/extensions/web-scripts/view-schema.json b/extensions/web-scripts/view-schema.json index a73f517..abffb0b 100644 --- a/extensions/web-scripts/view-schema.json +++ b/extensions/web-scripts/view-schema.json @@ -15,9 +15,20 @@ }, "icon": { "title": "Icon", - "description": "The fontawesome icon to use for the view tile and menu entry, such as 'home'", + "description": "The icon to use for the view tile, such as 'home'", + "default": "flask", "type": "string" }, + "tile": { + "title": "Show in the tiles", + "type": "boolean", + "default": false + }, + "menu": { + "title": "Show in the menu", + "type": "boolean", + "default": false + }, "properties": { "title": "Properties", "type": "array", diff --git a/extensions/web-scripts/web-scripts.js b/extensions/web-scripts/web-scripts.js index 3339eef..9a2bacc 100644 --- a/extensions/web-scripts/web-scripts.js +++ b/extensions/web-scripts/web-scripts.js @@ -524,6 +524,6 @@ define(['./scripts.xml', './scripts-add.xml', addPageComponent(scriptsViewVue); addPageComponent(scriptsViewConfigVue); addPageComponent(scriptsEditorVue); - addPageComponent(scriptsVue, 'scroll'); + addPageComponent(scriptsVue, 'scroll', true, true); }); diff --git a/extensions/web-time/web-time.js b/extensions/web-time/web-time.js index 726c905..6a0abfe 100644 --- a/extensions/web-time/web-time.js +++ b/extensions/web-time/web-time.js @@ -46,6 +46,6 @@ define(['./web-time.xml'], function(timeTemplate) { } }); - addPageComponent(timeVue, 'clock'); + addPageComponent(timeVue, 'clock', true); }); diff --git a/extensions/web-tools/web-tools.js b/extensions/web-tools/web-tools.js index c7a56ca..3f47a6d 100644 --- a/extensions/web-tools/web-tools.js +++ b/extensions/web-tools/web-tools.js @@ -111,7 +111,7 @@ define(['./web-tools.xml'], function(toolsTemplate) { }); if (app.canAdminister) { - addPageComponent(toolsVue, 'tools'); + addPageComponent(toolsVue, 'tools', true); } });