From 14ce5e159b587a48d7295076155f387e7cd27bb0 Mon Sep 17 00:00:00 2001 From: Deep Tailor Date: Mon, 2 Dec 2019 18:55:08 -0800 Subject: [PATCH] Webpage plugin vue (#2440) * Move table cell selection to table cell component * move webpage from angular to vue * make review requested changes * fix npm install error * change cache version * change cache version * rename view provider * rename file to WebPageViewProvider * change webpage vue file * change webpage vue file --- platform/features/pages/res/iframe.html | 26 -------- .../pages/test/EmbeddedPageControllerSpec.js | 56 ----------------- src/MCT.js | 2 + src/installDefaultBundles.js | 6 +- src/plugins/plugins.js | 7 ++- src/plugins/webPage/WebPageViewProvider.js | 61 +++++++++++++++++++ src/plugins/webPage/components/WebPage.vue | 16 +++++ .../plugins/webPage/plugin.js | 52 +++++++--------- 8 files changed, 106 insertions(+), 120 deletions(-) delete mode 100644 platform/features/pages/res/iframe.html delete mode 100644 platform/features/pages/test/EmbeddedPageControllerSpec.js create mode 100644 src/plugins/webPage/WebPageViewProvider.js create mode 100644 src/plugins/webPage/components/WebPage.vue rename platform/features/pages/src/EmbeddedPageController.js => src/plugins/webPage/plugin.js (58%) diff --git a/platform/features/pages/res/iframe.html b/platform/features/pages/res/iframe.html deleted file mode 100644 index 3475f3a6d6..0000000000 --- a/platform/features/pages/res/iframe.html +++ /dev/null @@ -1,26 +0,0 @@ - -
- -
diff --git a/platform/features/pages/test/EmbeddedPageControllerSpec.js b/platform/features/pages/test/EmbeddedPageControllerSpec.js deleted file mode 100644 index e561786b49..0000000000 --- a/platform/features/pages/test/EmbeddedPageControllerSpec.js +++ /dev/null @@ -1,56 +0,0 @@ -/***************************************************************************** - * Open MCT, Copyright (c) 2014-2018, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - -define( - ["../src/EmbeddedPageController"], - function (EmbeddedPageController) { - - describe("The controller for embedded pages", function () { - var mockSCE, - controller; - - beforeEach(function () { - mockSCE = jasmine.createSpyObj( - '$sce', - ["trustAsResourceUrl"] - ); - - mockSCE.trustAsResourceUrl.and.callFake(function (v) { - return v; - }); - - controller = new EmbeddedPageController(mockSCE); - }); - - it("allows URLs to be marked as trusted", function () { - var testURL = "http://www.nasa.gov"; - - expect(controller.trust(testURL)) - .toEqual(testURL); - - expect(mockSCE.trustAsResourceUrl) - .toHaveBeenCalledWith(testURL); - }); - - }); - } -); diff --git a/src/MCT.js b/src/MCT.js index 9d8459ddd3..404153ab5a 100644 --- a/src/MCT.js +++ b/src/MCT.js @@ -263,6 +263,8 @@ define([ this.install(this.plugins.Tabs()); this.install(this.plugins.FlexibleLayout()); this.install(this.plugins.GoToOriginalAction()); + this.install(this.plugins.ImportExport()); + this.install(this.plugins.WebPage()); } MCT.prototype = Object.create(EventEmitter.prototype); diff --git a/src/installDefaultBundles.js b/src/installDefaultBundles.js index 35c0024b94..6f0e07f02b 100644 --- a/src/installDefaultBundles.js +++ b/src/installDefaultBundles.js @@ -39,7 +39,6 @@ const DEFAULTS = [ 'platform/telemetry', 'platform/features/clock', 'platform/features/imagery', - 'platform/features/pages', 'platform/features/hyperlink', 'platform/features/timeline', 'platform/forms', @@ -55,7 +54,6 @@ const DEFAULTS = [ define([ '../src/adapter/bundle', - '../example/eventGenerator/bundle', '../example/export/bundle', '../example/forms/bundle', @@ -68,7 +66,6 @@ define([ '../example/profiling/bundle', '../example/scratchpad/bundle', '../example/styleguide/bundle', - '../platform/commonUI/about/bundle', '../platform/commonUI/browse/bundle', '../platform/commonUI/dialog/bundle', @@ -87,7 +84,6 @@ define([ '../platform/features/clock/bundle', '../platform/features/imagery/bundle', '../platform/features/my-items/bundle', - '../platform/features/pages/bundle', '../platform/features/hyperlink/bundle', '../platform/features/static-markup/bundle', '../platform/features/timeline/bundle', @@ -123,5 +119,5 @@ define([ bundleRegistry.enable(bundlePath); }); } - } + }; }); diff --git a/src/plugins/plugins.js b/src/plugins/plugins.js index a1f9fd747a..cb64e4005b 100644 --- a/src/plugins/plugins.js +++ b/src/plugins/plugins.js @@ -44,7 +44,8 @@ define([ './filters/plugin', './objectMigration/plugin', './goToOriginalAction/plugin', - './clearData/plugin' + './clearData/plugin', + './webPage/plugin' ], function ( _, UTCTimeSystem, @@ -69,7 +70,8 @@ define([ Filters, ObjectMigration, GoToOriginalAction, - ClearData + ClearData, + WebPagePlugin ) { var bundleMap = { LocalStorage: 'platform/persistence/local', @@ -170,6 +172,7 @@ define([ plugins.ObjectMigration = ObjectMigration.default; plugins.GoToOriginalAction = GoToOriginalAction.default; plugins.ClearData = ClearData; + plugins.WebPage = WebPagePlugin.default; return plugins; }); diff --git a/src/plugins/webPage/WebPageViewProvider.js b/src/plugins/webPage/WebPageViewProvider.js new file mode 100644 index 0000000000..2e07103a7f --- /dev/null +++ b/src/plugins/webPage/WebPageViewProvider.js @@ -0,0 +1,61 @@ +/***************************************************************************** + * Open MCT, Copyright (c) 2014-2019, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ + +import WebPageComponent from './components/WebPage.vue'; +import Vue from 'vue'; + +export default function WebPage(openmct) { + return { + key: 'webPage', + name: 'Web Page', + cssClass: 'icon-page', + canView: function (domainObject) { + return domainObject.type === 'webPage'; + }, + view: function (domainObject) { + let component; + + return { + show: function (element) { + component = new Vue({ + components: { + WebPageComponent: WebPageComponent + }, + provide: { + openmct, + domainObject + }, + el: element, + template: '' + }); + }, + destroy: function (element) { + component.$destroy(); + component = undefined; + } + }; + }, + priority: function () { + return 1; + } + }; +} diff --git a/src/plugins/webPage/components/WebPage.vue b/src/plugins/webPage/components/WebPage.vue new file mode 100644 index 0000000000..290eea35d7 --- /dev/null +++ b/src/plugins/webPage/components/WebPage.vue @@ -0,0 +1,16 @@ + + + diff --git a/platform/features/pages/src/EmbeddedPageController.js b/src/plugins/webPage/plugin.js similarity index 58% rename from platform/features/pages/src/EmbeddedPageController.js rename to src/plugins/webPage/plugin.js index 52bd8d09fb..0001ae0204 100644 --- a/platform/features/pages/src/EmbeddedPageController.js +++ b/src/plugins/webPage/plugin.js @@ -20,36 +20,26 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -/** - * This bundle adds the Web Page object type, which can be used to embed - * other web pages with layouts. - * @namespace platform/features/pages - */ -define( - [], - function () { +import WebPageViewProvider from './WebPageViewProvider.js'; - /** - * Controller for embedded web pages; serves simply as a - * wrapper for `$sce` to mark pages as trusted. - * @constructor - * @memberof platform/features/pages - */ - function EmbeddedPageController($sce) { - this.$sce = $sce; - } +export default function plugin() { + return function install(openmct) { + openmct.objectViews.addProvider(new WebPageViewProvider(openmct)); - /** - * Alias of `$sce.trustAsResourceUrl`. - * @param {string} url the URL to trust - * @returns {string} the trusted URL - */ - EmbeddedPageController.prototype.trust = function (url) { - return this.$sce.trustAsResourceUrl(url); - }; - - - return EmbeddedPageController; - } - -); + openmct.types.addType('webPage', { + name: "Web Page", + description: "Embed a web page or web-based image in a resizeable window component. Note that the URL being embedded must allow iframing.", + creatable: true, + cssClass: 'icon-page', + form: [ + { + "key": "url", + "name": "URL", + "control": "textfield", + "required": true, + "cssClass": "l-input-lg" + } + ] + }); + }; +}