Added support for Iframe-based extension interfaces

This commit is contained in:
Joel Collins 2020-05-12 14:28:50 +01:00
parent d79580d44d
commit 744ded1d9e
5 changed files with 41 additions and 1 deletions

17
package-lock.json generated
View file

@ -16198,6 +16198,23 @@
} }
} }
}, },
"vue-friendly-iframe": {
"version": "0.17.0",
"resolved": "https://registry.npmjs.org/vue-friendly-iframe/-/vue-friendly-iframe-0.17.0.tgz",
"integrity": "sha512-2IEHRpz2KIZ7wSXd3h1n6EEQ9HEU6GRC4DNdQ7w5Dm31Udf/xGjWfHErXJUsUw3Qal0fga8SrA6aOPTOX7mg+Q==",
"dev": true,
"requires": {
"uuid": "3.1.0"
},
"dependencies": {
"uuid": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
"integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==",
"dev": true
}
}
},
"vue-hot-reload-api": { "vue-hot-reload-api": {
"version": "2.3.4", "version": "2.3.4",
"resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",

View file

@ -53,6 +53,7 @@
"mdns-js": "^1.0.3", "mdns-js": "^1.0.3",
"uikit": "^3.4.2", "uikit": "^3.4.2",
"vue": "^2.6.11", "vue": "^2.6.11",
"vue-friendly-iframe": "^0.17.0",
"vue-plugin-load-script": "^1.2.0", "vue-plugin-load-script": "^1.2.0",
"vue-template-compiler": "^2.6.11", "vue-template-compiler": "^2.6.11",
"vue-tour": "^1.3.0", "vue-tour": "^1.3.0",

View file

@ -141,6 +141,7 @@
> >
<extensionContent <extensionContent
:forms="plugin.forms" :forms="plugin.forms"
:frame="plugin.frame"
:web-component="plugin.wc" :web-component="plugin.wc"
:view-panel="plugin.viewPanel" :view-panel="plugin.viewPanel"
@reloadForms="updatePlugins()" @reloadForms="updatePlugins()"

View file

@ -2,7 +2,8 @@
<!-- Grid managing tab content --> <!-- Grid managing tab content -->
<div uk-grid class="uk-height-1-1 uk-margin-remove uk-padding-remove"> <div uk-grid class="uk-height-1-1 uk-margin-remove uk-padding-remove">
<div class="control-component"> <div class="control-component">
<div v-if="webComponent"> <vue-friendly-iframe v-if="frame" :src="frame.href"></vue-friendly-iframe>
<div v-else-if="webComponent">
<WebComponentLoader <WebComponentLoader
:component-u-r-l="webComponent.href" :component-u-r-l="webComponent.href"
:component-name="webComponent.name" :component-name="webComponent.name"
@ -11,6 +12,7 @@
<!-- Handle OpenFlexure eV Forms --> <!-- Handle OpenFlexure eV Forms -->
<div <div
v-for="form in forms" v-for="form in forms"
v-else-if="forms"
:key="`${form.route}/${form.name}`.replace(/\s+/g, '-').toLowerCase()" :key="`${form.route}/${form.name}`.replace(/\s+/g, '-').toLowerCase()"
class="uk-height-1-1 uk-width-1-1" class="uk-height-1-1 uk-width-1-1"
> >
@ -62,6 +64,11 @@ export default {
required: false, required: false,
default: null default: null
}, },
frame: {
type: Object,
required: false,
default: null
},
viewPanel: { viewPanel: {
type: String, type: String,
required: false, required: false,
@ -70,3 +77,13 @@ export default {
} }
}; };
</script> </script>
<style>
.vue-friendly-iframe {
height: 100%;
}
.vue-friendly-iframe iframe {
height: 100%;
}
</style>

View file

@ -4,6 +4,7 @@ import store from "./store";
import UIkit from "uikit"; import UIkit from "uikit";
import VueTour from "vue-tour"; import VueTour from "vue-tour";
import LoadScript from "vue-plugin-load-script"; import LoadScript from "vue-plugin-load-script";
import VueFriendlyIframe from "vue-friendly-iframe";
require("vue-tour/dist/vue-tour.css"); require("vue-tour/dist/vue-tour.css");
@ -16,6 +17,9 @@ Vue.use(LoadScript);
// Use vue-tour module // Use vue-tour module
Vue.use(VueTour); Vue.use(VueTour);
// Use Friendly Iframe module
Vue.use(VueFriendlyIframe);
Vue.config.productionTip = false; Vue.config.productionTip = false;
Vue.mixin({ Vue.mixin({