Skip to content

Commit

Permalink
Displaying message to the user when popup is blocked during opening n…
Browse files Browse the repository at this point in the history
…omad link

(reference #53)
  • Loading branch information
piotrzarzycki21 committed May 27, 2024
1 parent 80bade2 commit fe52f41
Show file tree
Hide file tree
Showing 5 changed files with 163 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ package controller
import org.puremvc.as3.multicore.patterns.command.SimpleCommand;

import view.controls.snackbarNomadHelperUrl.SnackbarNomadHelperUrl;
import view.controls.snackbarNomadHelperUrl.SnackbarNomadPopupBlocked;

/**
* This is a workaround to open a Nomad link directly in an existing Nomad tab by using the Nomad service worker.
Expand Down Expand Up @@ -65,7 +66,7 @@ package controller
}
catch(error:Error)
{

SnackbarNomadPopupBlocked.show();
}

data = null;
Expand All @@ -80,6 +81,7 @@ package controller
// Retrieve the configred nomadhelper.html URL
var loginProxy:ProxyLogin = facade.retrieveProxy(ProxyLogin.NAME) as ProxyLogin;
var nomadHelperUrl:String = loginProxy.config.config.nomad_helper_url;
var nomadBaseUrl:String = loginProxy.config.config.nomad_base_url;

// Cancel any later messages - not expected
window["onmessage"] = null;
Expand All @@ -105,9 +107,9 @@ package controller
{
navigateToURL(new URLRequest(data.link), "_blank");
}
catch(e:Error)
catch(error:Error)
{

SnackbarNomadPopupBlocked.show();
}
}
else if (successIndex > -1)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package view.controls.snackbarNomadHelperUrl
{
import org.apache.royale.jewel.Snackbar;

public class SnackbarNomadPopupBlocked extends Snackbar
{
public function SnackbarNomadPopupBlocked()
{
super();

this.typeNames = "jewel snackbar layout SnackbarNomadPopupBlocked";
}

public static function show(message:String = "", parent:Object = null):SnackbarNomadPopupBlocked
{
var snackbar:SnackbarNomadPopupBlocked = new SnackbarNomadPopupBlocked();
snackbar.message = message;
snackbar.duration = 0;
snackbar.action = "Close";

snackbar.show(parent);
return snackbar;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<j:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:j="library://ns.apache.org/royale/jewel" xmlns:html="library://ns.apache.org/royale/html" xmlns:js="library://ns.apache.org/royale/basic"
percentWidth="100" initComplete="onSnackbarInitComplete(event)">
<fx:Script>
<![CDATA[
private function onSnackbarInitComplete(event:Event):void
{
this.refreshAllowMessage();
}
private function refreshAllowMessage():void
{
var allowUrl:String = window['link'].baseURI;
var domainPattern:RegExp = new RegExp(/^(?:https?:\/\/)?([^\/:?#]+)(?:[\/:?#]|$)/, "i");
var result:Object = domainPattern.exec(allowUrl);
if (result)
{
allowMessage.html = 'Allow popups for <code>' + result.pop() + '</code>';
}
else
{
allowMessage.text = "Always allow pop-ups from this site.";
}
}
]]>
</fx:Script>
<j:Label multiline="true"
text="It looks like your browser has blocked a pop-up window. To proceed, please enable pop-ups for this site in your browser settings. If you need assistance, follow these steps:"/>
<html:Ol percentWidth="100">
<html:Li>
<j:Label multiline="true" text="Click on the pop-up blocker icon in the address bar."/>
</html:Li>
<html:Li>
<j:Label localId="allowMessage" multiline="true" />
</html:Li>
<html:Li>
<j:Label multiline="true" text="Reload the page."/>
</html:Li>
</html:Ol>
</j:VGroup>
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package view.controls.snackbarNomadHelperUrl.beads
{
import org.apache.royale.core.IStrand;
import org.apache.royale.events.Event;
import org.apache.royale.html.elements.Div;
import org.apache.royale.jewel.Snackbar;
import org.apache.royale.jewel.beads.models.SnackbarModel;
import org.apache.royale.jewel.beads.views.SnackbarView;

import view.controls.snackbarNomadHelperUrl.SnackbarNomadPopupBlockedContent;

public class SnackbarNomadPopupBlockedView extends SnackbarView
{
public function SnackbarNomadPopupBlockedView()
{
super();
}

override public function set strand(value:IStrand):void
{
super.strand = value;

var model:SnackbarNomadHelperUrlModel = host.model as SnackbarNomadHelperUrlModel;
model.addEventListener("messageChange", messageChangeHandler);
model.addEventListener("actionChange", actionChangeHandler);

var content:NodeList = host.element.getElementsByClassName("snackbar-content");
host.element.removeChild(content.item(0));

var snackbarMessage:SnackbarNomadPopupBlockedContent = new SnackbarNomadPopupBlockedContent();
snackbarMessage.className = "jewel snackbar-message";

var snackbarContent:Div = new Div();
snackbarContent.className = "jewel snackbar-content";
snackbarContent.addElement(snackbarMessage);
host.addElement(snackbarContent);

this.actionElement = null;
if (model.action)
{
actionChangeHandler(null);
}
}

/**
* Update the text when message changed.
*/
override protected function messageChangeHandler(event:Event):void {

}

/**
* Show the action element or remove it, based on action text.
*/
override protected function actionChangeHandler(event:Event):void {
var model:SnackbarModel = host.model as SnackbarModel;

if (model.action) {
if (!actionElement) {
actionElement = document.createElement("div");
actionElement.className = "jewel snackbar-action";
actionElement.addEventListener("click", actionClickHandler);
host.element.firstChild.appendChild(actionElement);
}
actionElement.innerText = model.action;
} else {
if (actionElement) {
actionElement.removeEventListener("click", actionClickHandler);
host.element.firstChild.removeChild(actionElement);
actionElement = null;
}
}
}

/**
* Trigger event and dismiss the host when action clicked.
*/
override protected function actionClickHandler(event:Event):void {
actionElement.removeEventListener("click", actionClickHandler);
host.dispatchEvent(new Event(Snackbar.ACTION));
SnackbarModel(host.model).duration = -1; // set -1 to dismiss
}
}
}
6 changes: 6 additions & 0 deletions Super.Human.Portal_Royale/src/resources/app-styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,12 @@ controlsSnackbarNomad|SnackbarNomadHelperUrl {
IBeadView: ClassReference("view.controls.snackbarNomadHelperUrl.beads.SnackbarNomadHelperUrlView");
}

controlsSnackbarNomad|SnackbarNomadPopupBlocked {
IBeadModel: ClassReference("view.controls.snackbarNomadHelperUrl.beads.SnackbarNomadHelperUrlModel");
IBeadController: ClassReference("org.apache.royale.jewel.beads.controllers.SnackbarController");
IBeadView: ClassReference("view.controls.snackbarNomadHelperUrl.beads.SnackbarNomadPopupBlockedView");
}

.jewel.slider.noSliderInput input {
visibility: hidden;
margin: 0px !important;
Expand Down

0 comments on commit fe52f41

Please sign in to comment.