Skip to content

Commit

Permalink
Add custom content to Snackbar nomad helper warning when nomad_helper…
Browse files Browse the repository at this point in the history
…_url doesn't exists

- Window contains more detailed instruction how to configure nomad_helper_url (reference #54)
  • Loading branch information
piotrzarzycki21 committed May 16, 2024
1 parent d9c749b commit b7fae26
Show file tree
Hide file tree
Showing 6 changed files with 266 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,16 @@ package controller
{
import mediator.MediatorMainContentView;

import model.proxy.login.ProxyLogin;

import org.apache.royale.html.elements.Iframe;
import org.puremvc.as3.multicore.interfaces.INotification;
import org.puremvc.as3.multicore.patterns.command.SimpleCommand;
import org.apache.royale.jewel.Snackbar;
import model.proxy.login.ProxyLogin;
import org.apache.royale.net.navigateToURL;
import org.apache.royale.net.URLRequest;
import constants.ApplicationConstants;
import org.apache.royale.net.navigateToURL;
import org.puremvc.as3.multicore.interfaces.INotification;
import org.puremvc.as3.multicore.patterns.command.SimpleCommand;

import view.controls.snackbarNomadHelperUrl.SnackbarNomadHelperUrl;

/**
* 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 @@ -50,8 +52,10 @@ package controller
if (!loginProxy.isNomadHelperUrlExists() && nomadWarningLink == false)
{
window["Cookies"].set("SuperHumanPortalNomadHelperUrlLinkWarning", true, { sameSite: 'strict' });
Snackbar.show("This link is currently configured to open in a separate HCL Nomad Web window. For the best user experience, please ensure that your administrator has configured the server to open *.nsf database links in non separate HCL Nomad Web windows.",
0, "Close");

SnackbarNomadHelperUrl.show(loginProxy.config.config.domino_data_directory,
loginProxy.config.config.nomad_base_url,
loginProxy.config.config.configuration_link.nomadURL);
}

try
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package view.controls.snackbarNomadHelperUrl
{
import org.apache.royale.jewel.Snackbar;
import view.controls.snackbarNomadHelperUrl.beads.SnackbarNomadHelperUrlModel;

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

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

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

snackbar.show(parent);
return snackbar;
}

public function get dataDirectory():String
{
return SnackbarNomadHelperUrlModel(model).dataDirectory;
}

public function set dataDirectory(value:String):void
{
SnackbarNomadHelperUrlModel(model).dataDirectory = value;
}

public function get nomadBaseUrl():String
{
return SnackbarNomadHelperUrlModel(model).nomadBaseUrl;
}

public function set nomadBaseUrl(value:String):void
{
SnackbarNomadHelperUrlModel(model).nomadBaseUrl = value;
}

public function get configurationNomadUrl():String
{
return SnackbarNomadHelperUrlModel(model).configurationNomadUrl;
}

public function set configurationNomadUrl(value:String):void
{
SnackbarNomadHelperUrlModel(model).configurationNomadUrl = value;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
<?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"
initComplete="snackbarContentInitComplete(event)" percentWidth="100">
<j:beads>
<js:ContainerDataBinding />
</j:beads>
<fx:Script>
<![CDATA[
import utils.ClipboardText;
import org.apache.royale.net.navigateToURL;
import org.apache.royale.net.URLRequest;
public var dataDirectory:String = "";
public var nomadBaseUrl:String = "";
[Bindable]
public var configurationNomadUrl:String = "";
private function snackbarContentInitComplete(event:Event):void
{
firstMessage.html = "Copy " + dataDirectory + "/domino/html/Super.Human.Portal/js-release/resources/nomadhelper.html to /opt/hcl/domino/notes/latest/linux/nomad-files";
secondMessage.html = "Update nomad_helper_url to " + nomadBaseUrl + "/nomadhelper.html in SuperHumanPortal.nsf";
}
private function onFirstMessageCopyClick(event:MouseEvent):void
{
ClipboardText.copyToClipboard(dataDirectory + "/domino/html/Super.Human.Portal/js-release/resources/nomadhelper.html to /opt/hcl/domino/notes/latest/linux/nomad-files");
}
private function onSecondMessageCopyClick(event:MouseEvent):void
{
ClipboardText.copyToClipboard(nomadBaseUrl + "/nomadhelper.html");
}
private function onOpenInNomadClick(event:MouseEvent):void
{
if (!configurationNomadUrl) return;
navigateToURL(new URLRequest(configurationNomadUrl), "_blank");
}
]]>
</fx:Script>
<j:Label multiline="true"
text="This link is currently configured to open in a separate HCL Nomad Web window. For the best user experience, the administrator needs to setup nomadhelper.nsf like this:"/>
<html:Ul percentWidth="100">
<html:Li>
<html:style>
<js:SimpleCSSStyles paddingBottom="5"/>
</html:style>
<j:HGroup percentWidth="100" itemsVerticalAlign="itemsCenter">
<j:Label localId="firstMessage"
multiline="true"/>
<j:IconButton localId="firstMessageCopyToClipboard" click="onFirstMessageCopyClick(event)">
<j:icon>
<js:MaterialIcon text="{MaterialIconType.CONTENT_COPY}">
<js:style>
<js:SimpleCSSStyles fontSize="16"/>
</js:style>
</js:MaterialIcon>
</j:icon>
</j:IconButton>
</j:HGroup>
</html:Li>
<html:Li>
<j:VGroup percentWidth="100" itemsHorizontalAlign="itemsRight">
<j:HGroup percentWidth="100" itemsVerticalAlign="itemsCenter">
<j:Label localId="secondMessage" multiline="true"/>
<j:IconButton localId="secondMessageCopyToClipboard" click="onSecondMessageCopyClick(event)">
<j:icon>
<js:MaterialIcon text="{MaterialIconType.CONTENT_COPY}">
<js:style>
<js:SimpleCSSStyles fontSize="16"/>
</js:style>
</js:MaterialIcon>
</j:icon>
</j:IconButton>
</j:HGroup>
<html:Div text="Open in Nomad" click="onOpenInNomadClick(event)" className="jewel snackbar-action">
<html:beads>
<j:Disabled disabled="{configurationNomadUrl == null || configurationNomadUrl == ''}"/>
</html:beads>
</html:Div>
</j:VGroup>
</html:Li>
</html:Ul>
</j:VGroup>
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package view.controls.snackbarNomadHelperUrl.beads
{
import org.apache.royale.jewel.beads.models.SnackbarModel;

public class SnackbarNomadHelperUrlModel extends SnackbarModel
{
public function SnackbarNomadHelperUrlModel()
{
super();
}

public var dataDirectory:String;
public var nomadBaseUrl:String;
public var configurationNomadUrl:String;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package view.controls.snackbarNomadHelperUrl.beads
{
import org.apache.royale.jewel.beads.views.SnackbarView;
import org.apache.royale.core.IStrand;
import org.apache.royale.html.elements.Div;
import org.apache.royale.jewel.beads.models.SnackbarModel;
import org.apache.royale.jewel.Snackbar;
import view.controls.snackbarNomadHelperUrl.SnackbarNomadHelperUrlContent;

public class SnackbarNomadHelperUrlView extends SnackbarView
{
public function SnackbarNomadHelperUrlView()
{
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:SnackbarNomadHelperUrlContent = new SnackbarNomadHelperUrlContent();
snackbarMessage.className = "jewel snackbar-message";
snackbarMessage.nomadBaseUrl = model.nomadBaseUrl;
snackbarMessage.dataDirectory = model.dataDirectory;
snackbarMessage.configurationNomadUrl = model.configurationNomadUrl;

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.
*/
protected function messageChangeHandler(event:Event):void {
COMPILE::JS
{
// HTMLElement(host.element.firstChild.firstChild).innerHTML = SnackbarModel(host.model).message;
}
}

/**
* Show the action element or remove it, based on action text.
*/
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.
*/
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
}
}
}
7 changes: 7 additions & 0 deletions Super.Human.Portal_Royale/src/resources/app-styles.css
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
@namespace "http://www.w3.org/1999/xhtml";
@namespace j "library://ns.apache.org/royale/jewel";
@namespace controlsSnackbarNomad "view.controls.snackbarNomadHelperUrl.*";

global {
IStatesImpl: ClassReference("org.apache.royale.core.SimpleStatesImpl");
Expand Down Expand Up @@ -254,6 +255,12 @@ a:hover {
zIndex: auto;
}

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

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

0 comments on commit b7fae26

Please sign in to comment.