mirror of
https://github.com/nasa/openmct.git
synced 2025-05-11 13:03:03 +00:00
Merge pull request #375 from nasa/open137
Show warning for unsupported browsers
This commit is contained in:
commit
2a48c25453
@ -19,6 +19,10 @@
|
|||||||
{
|
{
|
||||||
"implementation": "StyleSheetLoader.js",
|
"implementation": "StyleSheetLoader.js",
|
||||||
"depends": [ "stylesheets[]", "$document", "THEME" ]
|
"depends": [ "stylesheets[]", "$document", "THEME" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"implementation": "UnsupportedBrowserWarning.js",
|
||||||
|
"depends": [ "notificationService", "agentService" ]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"stylesheets": [
|
"stylesheets": [
|
||||||
|
64
platform/commonUI/general/src/UnsupportedBrowserWarning.js
Normal file
64
platform/commonUI/general/src/UnsupportedBrowserWarning.js
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT Web 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 Web 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.
|
||||||
|
*****************************************************************************/
|
||||||
|
/*global define*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This bundle provides various general-purpose UI elements, including
|
||||||
|
* platform styling.
|
||||||
|
* @namespace platform/commonUI/general
|
||||||
|
*/
|
||||||
|
define(
|
||||||
|
[],
|
||||||
|
function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var WARNING_TITLE = "Unsupported browser",
|
||||||
|
WARNING_DESCRIPTION = [
|
||||||
|
"This software has been developed and tested",
|
||||||
|
"using the latest Google Chrome,",
|
||||||
|
"and may be unstable in other browsers."
|
||||||
|
].join(" "),
|
||||||
|
MOBILE_BROWSER = "Safari",
|
||||||
|
DESKTOP_BROWSER = "Chrome";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shows a warning if a user's browser is unsupported.
|
||||||
|
* @memberof platform/commonUI/general
|
||||||
|
* @constructor
|
||||||
|
* @param {NotificationService} notificationService the notification
|
||||||
|
* service
|
||||||
|
*/
|
||||||
|
function UnsupportedBrowserWarning(notificationService, agentService) {
|
||||||
|
var testToBrowser = agentService.isMobile() ?
|
||||||
|
MOBILE_BROWSER : DESKTOP_BROWSER;
|
||||||
|
|
||||||
|
if (!agentService.isBrowser(testToBrowser)) {
|
||||||
|
notificationService.alert({
|
||||||
|
title: WARNING_TITLE,
|
||||||
|
actionText: WARNING_DESCRIPTION
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return UnsupportedBrowserWarning;
|
||||||
|
}
|
||||||
|
);
|
@ -0,0 +1,98 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT Web 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 Web 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.
|
||||||
|
*****************************************************************************/
|
||||||
|
/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/
|
||||||
|
|
||||||
|
define(
|
||||||
|
["../src/UnsupportedBrowserWarning"],
|
||||||
|
function (UnsupportedBrowserWarning) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var MOBILE_BROWSER = "Safari",
|
||||||
|
DESKTOP_BROWSER = "Chrome",
|
||||||
|
UNSUPPORTED_BROWSERS = [
|
||||||
|
"Firefox",
|
||||||
|
"IE",
|
||||||
|
"Opera",
|
||||||
|
"Iceweasel"
|
||||||
|
];
|
||||||
|
|
||||||
|
describe("The unsupported browser warning", function () {
|
||||||
|
var mockNotificationService,
|
||||||
|
mockAgentService,
|
||||||
|
testAgent;
|
||||||
|
|
||||||
|
function instantiateWith(browser) {
|
||||||
|
testAgent = "Mozilla/5.0 " + browser + "/12.34.56";
|
||||||
|
return new UnsupportedBrowserWarning(
|
||||||
|
mockNotificationService,
|
||||||
|
mockAgentService
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
beforeEach(function () {
|
||||||
|
testAgent = "chrome";
|
||||||
|
mockNotificationService = jasmine.createSpyObj(
|
||||||
|
"notificationService",
|
||||||
|
[ "alert" ]
|
||||||
|
);
|
||||||
|
mockAgentService = jasmine.createSpyObj(
|
||||||
|
"agentService",
|
||||||
|
[ "isMobile", "isBrowser" ]
|
||||||
|
);
|
||||||
|
mockAgentService.isBrowser.andCallFake(function (substr) {
|
||||||
|
substr = substr.toLowerCase();
|
||||||
|
return testAgent.toLowerCase().indexOf(substr) !== -1;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
[ false, true ].forEach(function (isMobile) {
|
||||||
|
var deviceType = isMobile ? "mobile" : "desktop",
|
||||||
|
goodBrowser = isMobile ? MOBILE_BROWSER : DESKTOP_BROWSER,
|
||||||
|
badBrowsers = UNSUPPORTED_BROWSERS.concat([
|
||||||
|
isMobile ? DESKTOP_BROWSER : MOBILE_BROWSER
|
||||||
|
]);
|
||||||
|
|
||||||
|
describe("on " + deviceType + " devices", function () {
|
||||||
|
beforeEach(function () {
|
||||||
|
mockAgentService.isMobile.andReturn(isMobile);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("is not shown for " + goodBrowser, function () {
|
||||||
|
instantiateWith(goodBrowser);
|
||||||
|
expect(mockNotificationService.alert)
|
||||||
|
.not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
badBrowsers.forEach(function (badBrowser) {
|
||||||
|
it("is shown for " + badBrowser, function () {
|
||||||
|
instantiateWith(badBrowser);
|
||||||
|
expect(mockNotificationService.alert)
|
||||||
|
.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
@ -23,5 +23,6 @@
|
|||||||
"services/Popup",
|
"services/Popup",
|
||||||
"services/PopupService",
|
"services/PopupService",
|
||||||
"services/UrlService",
|
"services/UrlService",
|
||||||
"StyleSheetLoader"
|
"StyleSheetLoader",
|
||||||
|
"UnsupportedBrowserWarning"
|
||||||
]
|
]
|
||||||
|
@ -43,6 +43,7 @@ define(
|
|||||||
var userAgent = $window.navigator.userAgent,
|
var userAgent = $window.navigator.userAgent,
|
||||||
matches = userAgent.match(/iPad|iPhone|Android/i) || [];
|
matches = userAgent.match(/iPad|iPhone|Android/i) || [];
|
||||||
|
|
||||||
|
this.userAgent = userAgent;
|
||||||
this.mobileName = matches[0];
|
this.mobileName = matches[0];
|
||||||
this.$window = $window;
|
this.$window = $window;
|
||||||
}
|
}
|
||||||
@ -91,6 +92,18 @@ define(
|
|||||||
return !this.isPortrait();
|
return !this.isPortrait();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the user agent matches a certain named device,
|
||||||
|
* as indicated by checking for a case-insensitive substring
|
||||||
|
* match.
|
||||||
|
* @param {string} name the name to check for
|
||||||
|
* @returns {boolean} true if the user agent includes that name
|
||||||
|
*/
|
||||||
|
AgentService.prototype.isBrowser = function (name) {
|
||||||
|
name = name.toLowerCase();
|
||||||
|
return this.userAgent.toLowerCase().indexOf(name) !== -1;
|
||||||
|
};
|
||||||
|
|
||||||
return AgentService;
|
return AgentService;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -81,6 +81,13 @@ define(
|
|||||||
expect(agentService.isPortrait()).toBeTruthy();
|
expect(agentService.isPortrait()).toBeTruthy();
|
||||||
expect(agentService.isLandscape()).toBeFalsy();
|
expect(agentService.isLandscape()).toBeFalsy();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("allows for checking browser type", function () {
|
||||||
|
testWindow.navigator.userAgent = "Chromezilla Safarifox";
|
||||||
|
agentService = new AgentService(testWindow);
|
||||||
|
expect(agentService.isBrowser("Chrome")).toBe(true);
|
||||||
|
expect(agentService.isBrowser("Firefox")).toBe(false);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user