added ToU display for Invites

git-svn-id: https://svn.research-infrastructures.eu/d4science/gcube/trunk/portlets/user/join-vre@150734 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Massimiliano Assante 2017-07-04 17:05:31 +00:00
parent 278159a4df
commit 1ae3bf20cf
20 changed files with 248 additions and 86 deletions

View File

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/join-vre-3.3.0-SNAPSHOT/WEB-INF/classes" path="src/main/java">
<classpathentry kind="src" output="target/join-vre-3.4.0-SNAPSHOT/WEB-INF/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/join-vre-3.3.0-SNAPSHOT/WEB-INF/classes" path="src/main/resources">
<classpathentry excluding="**" kind="src" output="target/join-vre-3.4.0-SNAPSHOT/WEB-INF/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
@ -34,10 +34,10 @@
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/join-vre-3.3.0-SNAPSHOT/WEB-INF/classes"/>
<classpathentry kind="output" path="target/join-vre-3.4.0-SNAPSHOT/WEB-INF/classes"/>
</classpath>

View File

@ -1,8 +1,8 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.source=1.7
org.eclipse.jdt.core.compiler.source=1.8

View File

@ -4,6 +4,12 @@
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
<dependent-module archiveName="email-templates-library-1.0.1-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/email-templates-library/email-templates-library">
<dependency-type>uses</dependency-type>
</dependent-module>
<dependent-module archiveName="invites-common-library-1.4.0-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/invites-common-library/invites-common-library">
<dependency-type>uses</dependency-type>
</dependent-module>
<property name="java-output-path" value="/${module}/target/www/WEB-INF/classes"/>
<property name="context-root" value="join-vre"/>
</wb-module>

View File

@ -2,7 +2,7 @@
<faceted-project>
<fixed facet="wst.jsdt.web"/>
<installed facet="wst.jsdt.web" version="1.0"/>
<installed facet="java" version="1.7"/>
<installed facet="liferay.portlet" version="6.0"/>
<installed facet="jst.web" version="3.0"/>
<installed facet="java" version="1.8"/>
</faceted-project>

15
pom.xml
View File

@ -13,7 +13,7 @@
<groupId>org.gcube.portlets.user</groupId>
<artifactId>join-vre</artifactId>
<packaging>war</packaging>
<version>3.3.0-SNAPSHOT</version>
<version>3.4.0-SNAPSHOT</version>
<name>gCube Join VRE Portlet</name>
<description>Display the available VRE to Join</description>
<scm>
@ -23,9 +23,9 @@
</scm>
<properties>
<!-- Convenience property to set the GWT version -->
<gwtVersion>2.7.0</gwtVersion>
<gwtVersion>2.8.1</gwtVersion>
<distroDirectory>distro</distroDirectory>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
<liferay.version>6.2.5</liferay.version>
@ -62,10 +62,9 @@
<version>[1.0.0-SNAPSHOT,)</version>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-dev</artifactId>
<version>${gwtVersion}</version>
<scope>provided</scope>
<groupId>org.gcube.portal</groupId>
<artifactId>terms-of-use-library</artifactId>
<version>[1.0.0-SNAPSHOT,)</version>
</dependency>
<dependency>
<groupId>com.google</groupId>
@ -93,7 +92,7 @@
<dependency>
<groupId>org.gcube.core</groupId>
<artifactId>common-scope-maps</artifactId>
<scope>provided</scope>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.gcube.dvos</groupId>

View File

@ -29,5 +29,7 @@ public interface JoinService extends RemoteService {
String isExistingInvite(long siteId);
UserInfo readInvite(String inviteId);
String getTermsOfUse(long siteId);
UserInfo readInvite(String inviteId, long siteId);
}

View File

@ -28,5 +28,7 @@ public interface JoinServiceAsync {
void isExistingInvite(long siteId, AsyncCallback<String> callback);
void readInvite(String inviteId, AsyncCallback<UserInfo> callback);
void readInvite(String inviteId, long siteId, AsyncCallback<UserInfo> callback);
void getTermsOfUse(long siteId, AsyncCallback<String> callback);
}

View File

@ -9,13 +9,16 @@ import com.github.gwtbootstrap.client.ui.HelpBlock;
import com.github.gwtbootstrap.client.ui.Icon;
import com.github.gwtbootstrap.client.ui.Modal;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.Window.Location;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Widget;
public class AccessVREDialog extends Composite {
@ -30,25 +33,59 @@ public class AccessVREDialog extends Composite {
@UiField Button close;
@UiField Button confirmRequest;
@UiField HelpBlock helpBlock;
@UiField HelpBlock touGatewayBlock;
@UiField Icon loading;
@UiField HTML touText;
VRE myVRE = null;
public AccessVREDialog(final VRE vre) {
initWidget(uiBinder.createAndBindUi(this));
this.myVRE = vre;
String text = "You are about to enter the " + vre.getName() + ", please confirm your request.";
helpBlock.setText(text);
String buttonText = "Confirm Request";
confirmRequest.setText(buttonText);
}
public void show() {
String headerText = "Join VRE request for " + myVRE.getName();
m.setTitle(headerText);
m.show();
joinService.getTermsOfUse(this.myVRE.getId(), new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
m.setTitle("Ops, an error occurred please check your connection and try again");
confirmRequest.setText("Try again");
confirmRequest.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Location.reload();
}
});
m.show();
}
@Override
public void onSuccess(String result) {
if (result == null) { //no terms of use
String headerText = "Join VRE request for " + myVRE.getName();
String text = "You are about to enter " + myVRE.getName() + ", please confirm your request.";
m.setTitle(headerText);
helpBlock.setHTML(text);
touGatewayBlock.setVisible(true);
String buttonText = "Confirm Request";
confirmRequest.setText(buttonText);
}
else {// terms of use exist
String headerText = "Terms of Use for " + myVRE.getName();
String text = "By using <b>" + myVRE.getName() + "</b> VRE services, you are agreeing to these terms. Please read them carefully:";
m.setTitle(headerText);
helpBlock.setHTML(text);
String buttonText = "Accept Terms of Use";
confirmRequest.setText(buttonText);
m.addStyleName("modal-custom");
((Element)m.getElement().getChildNodes().getItem(1)).addClassName("modal-body-custom");
touText.setHTML(result);
}
m.show();
}
});
}
@UiHandler("close")
void handleClick(ClickEvent e) {
m.hide();
@ -59,12 +96,12 @@ public class AccessVREDialog extends Composite {
loading.setVisible(true);
confirmRequest.setEnabled(false);
joinService.registerUser(myVRE.getinfraScope(), myVRE.getId(), IS_INVITATION, new AsyncCallback<Boolean>() {
@Override
public void onSuccess(Boolean result) {
Location.assign(myVRE.getFriendlyURL());
}
@Override
public void onFailure(Throwable caught) {
confirmRequest.removeFromParent();

View File

@ -8,15 +8,15 @@
<b:HelpBlock ui:field="helpBlock"></b:HelpBlock>
<b:Icon type="COG" size="FOUR_TIMES" spin="true" ui:field="loading"
visible="false" />
<b:HelpBlock>
<b:HelpBlock ui:field="touGatewayBlock" visible="false">
By entering this VRE you agree to the terms indicated in the
<a href="/terms-of-use" target="_blank">Terms of Use</a>
of this gateway.
</b:HelpBlock>
<g:HTML ui:field="touText"></g:HTML>
<b:ModalFooter>
<b:Button type="PRIMARY" ui:field="confirmRequest">Confirm Request</b:Button>
<b:Button type="DEFAULT" ui:field="close">Close</b:Button>
<b:Button type="DEFAULT" ui:field="close">Cancel</b:Button>
</b:ModalFooter>
</b:Modal>
</g:HTMLPanel>

View File

@ -12,6 +12,7 @@ import com.github.gwtbootstrap.client.ui.Image;
import com.github.gwtbootstrap.client.ui.Modal;
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
@ -19,6 +20,7 @@ import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.Window.Location;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Widget;
public class AccessViaInviteDialog extends Composite {
@ -27,11 +29,13 @@ public class AccessViaInviteDialog extends Composite {
private static AccessViaInviteDialogUiBinder uiBinder = GWT.create(AccessViaInviteDialogUiBinder.class);
interface AccessViaInviteDialogUiBinder extends
UiBinder<Widget, AccessViaInviteDialog> {
UiBinder<Widget, AccessViaInviteDialog> {
}
@UiField Modal m;
@UiField Button close;
@UiField Button confirmRequest;
@UiField HelpBlock touGatewayBlock;
@UiField HTML touText;
@UiField HelpBlock helpBlock;
@UiField Icon loading;
@UiField Image avatarImage;
@ -44,18 +48,36 @@ public class AccessViaInviteDialog extends Composite {
helpBlock.setText(text);
String buttonText = "Accept invite";
confirmRequest.setText(buttonText);
joinService.readInvite(inviteId, new AsyncCallback<UserInfo>() {
joinService.readInvite(inviteId, vre.getId(), new AsyncCallback<UserInfo>() {
@Override
public void onSuccess(UserInfo invitingUser) {
helpBlock.setText("You have been invited by " +invitingUser.getFullName() + ", to accept the invite, please click on the accept invite button below.");
avatarImage.setUrl(invitingUser.getAvatarId());
avatarImage.setVisible(true);
confirmRequest.setType(ButtonType.PRIMARY);
confirmRequest.setEnabled(true);
loading.removeFromParent();
if (invitingUser.getAccountURL() == null) { //no terms of use
helpBlock.setText("You have been invited by " +invitingUser.getFullName() + ", to accept the invite, please click on the accept invite button below.");
avatarImage.setUrl(invitingUser.getAvatarId());
avatarImage.setVisible(true);
touGatewayBlock.setVisible(true);
confirmRequest.setType(ButtonType.PRIMARY);
confirmRequest.setEnabled(true);
} else {
helpBlock.setText("You have been invited by " +invitingUser.getFullName() + ", to accept the invite, please click on the accept invite button below.");
avatarImage.setUrl(invitingUser.getAvatarId());
avatarImage.setVisible(true);
String headerText = "Terms of Use for " + myVRE.getName();
String text = "By using <b>" + myVRE.getName() + "</b> VRE services, you are agreeing to these terms. Please read them carefully:";
m.setTitle(headerText);
touGatewayBlock.setHTML(text);
String buttonText = "Accept Terms of Use";
confirmRequest.setText(buttonText);
confirmRequest.setType(ButtonType.PRIMARY);
confirmRequest.setEnabled(true);
m.addStyleName("modal-custom");
((Element)m.getElement().getChildNodes().getItem(1)).addClassName("modal-body-custom");
touText.setHTML(invitingUser.getAccountURL());
}
}
@Override
public void onFailure(Throwable caught) {
loading.removeFromParent();
@ -79,12 +101,12 @@ public class AccessViaInviteDialog extends Composite {
loading.setVisible(true);
confirmRequest.setEnabled(false);
joinService.registerUser(myVRE.getinfraScope(), myVRE.getId(), IS_INVITATION, new AsyncCallback<Boolean>() {
@Override
public void onSuccess(Boolean result) {
Location.assign(myVRE.getFriendlyURL());
}
@Override
public void onFailure(Throwable caught) {
confirmRequest.removeFromParent();

View File

@ -1,19 +1,33 @@
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:b="urn:import:com.github.gwtbootstrap.client.ui">
<ui:style>
.circleImage {
border-radius: 100px;
-webkit-border-radius: 100px;
-moz-border-radius: 100px;
}
.alignCenter {
width: 100%;
text-align: center;
}
</ui:style>
<g:HTMLPanel>
<b:Modal ui:field="m" title="My Modal" backdrop="STATIC"
keyboard="true" animation="true">
<b:HelpBlock ui:field="helpBlock" />
<b:Icon type="COG" size="THREE_TIMES" spin="true" ui:field="loading"
visible="true" />
<b:Image ui:field="avatarImage" visible="false" width="150px"></b:Image>
<b:HelpBlock>
<div style="margin-top: 50px">&nbsp;</div>
<g:SimplePanel addStyleNames="{style.alignCenter}">
<b:Image ui:field="avatarImage" visible="false" width="150px"
addStyleNames="{style.circleImage}"></b:Image>
</g:SimplePanel>
<b:HelpBlock ui:field="touGatewayBlock" visible="false">
By entering this VRE you agree to the terms indicated in the
<a href="/terms-of-use" target="_blank">Terms of Use</a>
of this gateway.
</b:HelpBlock>
<g:HTML ui:field="touText"></g:HTML>
<b:ModalFooter>
<b:Button type="DEFAULT" ui:field="confirmRequest" enabled="false"></b:Button>

View File

@ -15,6 +15,10 @@ import org.gcube.portal.databook.server.DatabookStore;
import org.gcube.portal.databook.shared.Invite;
import org.gcube.portal.databook.shared.InviteStatus;
import org.gcube.portal.databook.shared.UserInfo;
import org.gcube.portal.tou.TermsOfUse;
import org.gcube.portal.tou.TermsOfUseImpl;
import org.gcube.portal.tou.exceptions.ToUNotFoundException;
import org.gcube.portal.tou.model.ToU;
import org.gcube.portlets.user.joinvre.client.JoinService;
import org.gcube.portlets.user.joinvre.shared.UserBelonging;
import org.gcube.portlets.user.joinvre.shared.VRE;
@ -40,6 +44,7 @@ import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.Group;
import com.liferay.portal.model.VirtualHost;
import com.liferay.portal.service.GroupLocalServiceUtil;
@ -49,7 +54,7 @@ import com.liferay.portal.service.VirtualHostLocalServiceUtil;
import com.liferay.portal.util.PortalUtil;
/**
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
* @author Massimiliano Assante, CNR_ISTI
*/
@SuppressWarnings("serial")
public class JoinServiceImpl extends RemoteServiceServlet implements JoinService {
@ -78,6 +83,47 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService
}
return "";
}
@Override
public UserInfo readInvite(final String inviteId, final long siteId) {
initStore();
try {
Invite invite = store.readInvite(inviteId);
GCubeUser inviter = new LiferayUserManager().getUserByUsername(invite.getSenderUserId());
return new UserInfo(
inviter.getUsername(),
inviter.getFullname(),
inviter.getUserAvatarURL(),
"",
getTermsOfUse(siteId), // we use accountURL for the terms of use in this case
true, false, null);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* check if a terms of use exists for the given Site (VRE), returns null is non existent
* @return a String containing the ToU to accept or null if no ToU exists
*/
@Override
public String getTermsOfUse(long siteId) {
TermsOfUse tou = new TermsOfUseImpl();
try {
long groupId = new LiferayGroupManager().getGroup(siteId).getGroupId();
ToU terms = tou.getToUGroup(groupId);
return terms.getContent();
}
catch (ToUNotFoundException ex) {
_log.debug("Terms of Use not found for this VRE id " + siteId);
return null;
}
catch (Exception e) {
_log.error("An error occurred while trying to fetch the ToU for VRE id " + siteId);
return null;
}
}
/**
*
* @param session the Asl Session
@ -244,8 +290,7 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService
@Override
public VRE getSelectedVRE(Long groupId) {
_log.debug("*getting Selected Research Environment from referral, site id = " + groupId);
_log.debug("*getting Selected Research Environment from referral, site id = " + groupId);
VRE toReturn = null;
try {
GroupManager gm = new LiferayGroupManager();
@ -373,6 +418,8 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService
LoginServiceUtil.notifyUserSelfRegistration(currUser.getUsername(), scope, getThreadLocalRequest());
_log.info("notifyUserSelfRegistration sent");
}
new TermsOfUseImpl().hasAcceptedToU(currUser.getUsername(), groupId);
_log.info("hasAcceptedToU OK for " + currUser.getUsername());
}
catch (Exception e) {
e.printStackTrace();
@ -410,23 +457,7 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService
_log.debug("checking if invite exists for " + email + " on " +infraScope);
return store.isExistingInvite(infraScope, email);
}
@Override
public UserInfo readInvite(String inviteId) {
initStore();
try {
Invite invite = store.readInvite(inviteId);
GCubeUser inviter = new LiferayUserManager().getUserByUsername(invite.getSenderUserId());
return new UserInfo(
inviter.getUsername(),
inviter.getFullname(),
inviter.getUserAvatarURL(),
"", "", true, false, null);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
@ -454,4 +485,5 @@ public class JoinServiceImpl extends RemoteServiceServlet implements JoinService
}
return null;
}
}

View File

@ -1,18 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='JoinVRE'>
<module rename-to='explore'>
<inherits name='com.google.gwt.user.User' />
<inherits name="com.google.gwt.logging.Logging" />
<inherits name='com.google.gwt.activity.Activity' />
<inherits name="com.github.gwtbootstrap.Bootstrap" />
<inherits name='org.gcube.portal.databook.GCubeSocialNetworking' />
<!-- <set-property name="user.agent" value="gecko1_8" /> -->
<!-- <set-property name="user.agent" value="gecko1_8" /> -->
<!-- Specify the app entry point class. -->
<entry-point class='org.gcube.portlets.user.joinvre.client.JoinVRE' />
<set-property name="gwt.logging.enabled" value="TRUE" />
<!-- Specify the paths for translatable code -->
<source path='client' />
<source path='shared' />

View File

@ -1,5 +0,0 @@
@media only screen and (min-width: 800px) {
.aui .row-fluid .span3 {
width: 19% !important;
}
}

View File

@ -9,14 +9,12 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!-- -->
<!-- Consider inlining CSS to reduce the number of requested files -->
<!-- -->
<link type="text/css" rel="stylesheet" href="JoinVRE.css">
<title>Join VRE Project</title>
<script type="text/javascript" src="JoinVRE/JoinVRE.nocache.js"></script>
<link type="text/css" rel="stylesheet" href="explore.css">
<script type="text/javascript" src="explore/explore.nocache.js"></script>
</head>
<body>

View File

@ -7,8 +7,8 @@
<portlet:defineObjects />
--%>
<script type="text/javascript" src="<%=request.getContextPath()%>/JoinVRE/js/jquery-1.10.1.min.js"></script>
<script type="text/javascript" src="<%=request.getContextPath()%>/JoinVRE/js/bootstrap.min.js"></script>
<script type="text/javascript" src="<%=request.getContextPath()%>/explore/js/jquery-1.10.1.min.js"></script>
<script type="text/javascript" src="<%=request.getContextPath()%>/explore/js/bootstrap.min.js"></script>
<script type="text/javascript" language="javascript" src="<%=request.getContextPath()%>/JoinVRE/JoinVRE.nocache.js"></script>
<script type="text/javascript" language="javascript" src="<%=request.getContextPath()%>/explore/explore.nocache.js"></script>
<div id="JoinVRE-Container"></div>

View File

@ -1,6 +1,6 @@
name=joinvre
module-group-id=liferay
module-incremental-version=2
module-incremental-version=3
tags=
short-description=
change-log=

View File

@ -13,6 +13,7 @@
<instanceable>false</instanceable>
<ajaxable>false</ajaxable>
<!-- LOCATION CSS HERE -->
<header-portlet-css>/JoinVRE.css</header-portlet-css>
<header-portlet-css>/explore.css</header-portlet-css>
<css-class-wrapper>join-vre-wrapper</css-class-wrapper>
</portlet>
</liferay-portlet-app>

View File

@ -13,7 +13,7 @@
<servlet-mapping>
<servlet-name>JoinVRE</servlet-name>
<url-pattern>/JoinVRE/JoinService</url-pattern>
<url-pattern>/explore/JoinService</url-pattern>
</servlet-mapping>
<!-- Default page to serve -->

View File

@ -0,0 +1,55 @@
body {
border: 5px solid white;
}
@media only screen and (min-width: 800px) {
.aui .row-fluid .span3 {
width: 19% !important;
}
}
@media screen and (min-width: 1024px) {
.modal-custom {
width: 75% !important;
margin-left: -38% !important;
}
.modal-body-custom {
height: 500px !important;
}
.modal-header-custom>.close {
font-size: 40px;
}
}
@media screen and (min-width: 800px) and (max-width: 1024px) {
.modal-custom {
width: 85% !important;
margin-left: -42% !important;
}
.modal-body-custom {
height: 450px !important;
}
}
@media screen and (min-width: 600px) and (max-width: 800px) {
.modal-body-custom {
height: 350px !important;
}
}
@media screen and (min-width: 300px) and (max-width: 600px) {
.modal-body-custom {
height: 300px !important;
}
}
.modal-custom {
min-width: 300px !important;
top: 3% !important;
}
.modal-body-custom {
max-height: 50% !important;
}