This repo just to test if the D387 is working properly in the fedora vm
33
.gitignore
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
HELP.md
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
!**/src/main/**/target/
|
||||
!**/src/test/**/target/
|
||||
|
||||
### STS ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
build/
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
BIN
.mvn/wrapper/maven-wrapper.jar
vendored
Normal file
2
.mvn/wrapper/maven-wrapper.properties
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
|
||||
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
|
||||
9
Dockerfile
Normal file
@ -0,0 +1,9 @@
|
||||
FROM eclipse-temurin:17-jdk-jammy
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY target/*.jar app.jar
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
CMD ["java", "-jar", "app.jar"]
|
||||
29
README.md
Normal file
@ -0,0 +1,29 @@
|
||||
<strong> **DO NOT DISTRIBUTE OR PUBLICLY POST SOLUTIONS TO THESE LABS. MAKE ALL FORKS OF THIS REPOSITORY WITH SOLUTION CODE PRIVATE. PLEASE REFER TO THE STUDENT CODE OF CONDUCT AND ETHICAL EXPECTATIONS FOR COLLEGE OF INFORMATION TECHNOLOGY STUDENTS FOR SPECIFICS. ** </strong>
|
||||
|
||||
# WESTERN GOVERNORS UNIVERSITY
|
||||
## D387 – ADVANCED JAVA
|
||||
Welcome to Advanced Java! This is an opportunity for students to write multithreaded object-oriented code using Java frameworks and determine how to deploy software applications using cloud services.
|
||||
|
||||
FOR SPECIFIC TASK INSTRUCTIONS AND REQUIREMENTS FOR THIS ASSESSMENT, PLEASE REFER TO THE COURSE PAGE.
|
||||
## BASIC INSTRUCTIONS
|
||||
For this assessment, you will modify a Spring application with a Java back end and an Angular front end to include multithreaded language translation, a message at different time zones, and currency exchange. Then, build a Docker image of the current multithreaded Spring application and containerize it using the supporting documents provided in this task.
|
||||
|
||||
|
||||
## SUPPLEMENTAL RESOURCES
|
||||
1. How to clone a project to IntelliJ using Git?
|
||||
|
||||
> Ensure that you have Git installed on your system and that IntelliJ is installed using [Toolbox](https://www.jetbrains.com/toolbox-app/). Make sure that you are using version 2022.3.2. Once this has been confirmed, click the clone button and use the 'IntelliJ IDEA (HTTPS)' button. This will open IntelliJ with a prompt to clone the proejct. Save it in a safe location for the directory and press clone. IntelliJ will prompt you for your credentials. Enter in your WGU Credentials and the project will be cloned onto your local machine.
|
||||
|
||||
2. How to create a branch and start Development?
|
||||
|
||||
- GitLab method
|
||||
> Press the '+' button located near your branch name. In the dropdown list, press the 'New branch' button. This will allow you to create a name for your branch. Once the branch has been named, you can select 'Create Branch' to push the branch to your repository.
|
||||
|
||||
- IntelliJ method
|
||||
> In IntelliJ, Go to the 'Git' button on the top toolbar. Select the new branch option and create a name for the branch. Make sure checkout branch is selected and press create. You can now add a commit message and push the new branch to the local repo.
|
||||
|
||||
## SUPPORT
|
||||
If you need additional support, please navigate to the course page and reach out to your course instructor.
|
||||
## FUTURE USE
|
||||
Take this opportunity to create or add to a simple resume portfolio to highlight and showcase your work for future use in career search, experience, and education!
|
||||
|
||||
316
mvnw
vendored
Executable file
@ -0,0 +1,316 @@
|
||||
#!/bin/sh
|
||||
# ----------------------------------------------------------------------------
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you 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
|
||||
#
|
||||
# https://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.
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Maven Start Up Batch script
|
||||
#
|
||||
# Required ENV vars:
|
||||
# ------------------
|
||||
# JAVA_HOME - location of a JDK home dir
|
||||
#
|
||||
# Optional ENV vars
|
||||
# -----------------
|
||||
# M2_HOME - location of maven2's installed home dir
|
||||
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
|
||||
# e.g. to debug Maven itself, use
|
||||
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
|
||||
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
if [ -z "$MAVEN_SKIP_RC" ] ; then
|
||||
|
||||
if [ -f /usr/local/etc/mavenrc ] ; then
|
||||
. /usr/local/etc/mavenrc
|
||||
fi
|
||||
|
||||
if [ -f /etc/mavenrc ] ; then
|
||||
. /etc/mavenrc
|
||||
fi
|
||||
|
||||
if [ -f "$HOME/.mavenrc" ] ; then
|
||||
. "$HOME/.mavenrc"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# OS specific support. $var _must_ be set to either true or false.
|
||||
cygwin=false;
|
||||
darwin=false;
|
||||
mingw=false
|
||||
case "`uname`" in
|
||||
CYGWIN*) cygwin=true ;;
|
||||
MINGW*) mingw=true;;
|
||||
Darwin*) darwin=true
|
||||
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
|
||||
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
|
||||
if [ -z "$JAVA_HOME" ]; then
|
||||
if [ -x "/usr/libexec/java_home" ]; then
|
||||
export JAVA_HOME="`/usr/libexec/java_home`"
|
||||
else
|
||||
export JAVA_HOME="/Library/Java/Home"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -z "$JAVA_HOME" ] ; then
|
||||
if [ -r /etc/gentoo-release ] ; then
|
||||
JAVA_HOME=`java-config --jre-home`
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$M2_HOME" ] ; then
|
||||
## resolve links - $0 may be a link to maven's home
|
||||
PRG="$0"
|
||||
|
||||
# need this for relative symlinks
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG="`dirname "$PRG"`/$link"
|
||||
fi
|
||||
done
|
||||
|
||||
saveddir=`pwd`
|
||||
|
||||
M2_HOME=`dirname "$PRG"`/..
|
||||
|
||||
# make it fully qualified
|
||||
M2_HOME=`cd "$M2_HOME" && pwd`
|
||||
|
||||
cd "$saveddir"
|
||||
# echo Using m2 at $M2_HOME
|
||||
fi
|
||||
|
||||
# For Cygwin, ensure paths are in UNIX format before anything is touched
|
||||
if $cygwin ; then
|
||||
[ -n "$M2_HOME" ] &&
|
||||
M2_HOME=`cygpath --unix "$M2_HOME"`
|
||||
[ -n "$JAVA_HOME" ] &&
|
||||
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
|
||||
[ -n "$CLASSPATH" ] &&
|
||||
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
|
||||
fi
|
||||
|
||||
# For Mingw, ensure paths are in UNIX format before anything is touched
|
||||
if $mingw ; then
|
||||
[ -n "$M2_HOME" ] &&
|
||||
M2_HOME="`(cd "$M2_HOME"; pwd)`"
|
||||
[ -n "$JAVA_HOME" ] &&
|
||||
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
|
||||
fi
|
||||
|
||||
if [ -z "$JAVA_HOME" ]; then
|
||||
javaExecutable="`which javac`"
|
||||
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
|
||||
# readlink(1) is not available as standard on Solaris 10.
|
||||
readLink=`which readlink`
|
||||
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
|
||||
if $darwin ; then
|
||||
javaHome="`dirname \"$javaExecutable\"`"
|
||||
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
|
||||
else
|
||||
javaExecutable="`readlink -f \"$javaExecutable\"`"
|
||||
fi
|
||||
javaHome="`dirname \"$javaExecutable\"`"
|
||||
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
|
||||
JAVA_HOME="$javaHome"
|
||||
export JAVA_HOME
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$JAVACMD" ] ; then
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
else
|
||||
JAVACMD="`\\unset -f command; \\command -v java`"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
echo "Error: JAVA_HOME is not defined correctly." >&2
|
||||
echo " We cannot execute $JAVACMD" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$JAVA_HOME" ] ; then
|
||||
echo "Warning: JAVA_HOME environment variable is not set."
|
||||
fi
|
||||
|
||||
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
|
||||
|
||||
# traverses directory structure from process work directory to filesystem root
|
||||
# first directory with .mvn subdirectory is considered project base directory
|
||||
find_maven_basedir() {
|
||||
|
||||
if [ -z "$1" ]
|
||||
then
|
||||
echo "Path not specified to find_maven_basedir"
|
||||
return 1
|
||||
fi
|
||||
|
||||
basedir="$1"
|
||||
wdir="$1"
|
||||
while [ "$wdir" != '/' ] ; do
|
||||
if [ -d "$wdir"/.mvn ] ; then
|
||||
basedir=$wdir
|
||||
break
|
||||
fi
|
||||
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
|
||||
if [ -d "${wdir}" ]; then
|
||||
wdir=`cd "$wdir/.."; pwd`
|
||||
fi
|
||||
# end of workaround
|
||||
done
|
||||
echo "${basedir}"
|
||||
}
|
||||
|
||||
# concatenates all lines of a file
|
||||
concat_lines() {
|
||||
if [ -f "$1" ]; then
|
||||
echo "$(tr -s '\n' ' ' < "$1")"
|
||||
fi
|
||||
}
|
||||
|
||||
BASE_DIR=`find_maven_basedir "$(pwd)"`
|
||||
if [ -z "$BASE_DIR" ]; then
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
##########################################################################################
|
||||
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
|
||||
# This allows using the maven wrapper in projects that prohibit checking in binary data.
|
||||
##########################################################################################
|
||||
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Found .mvn/wrapper/maven-wrapper.jar"
|
||||
fi
|
||||
else
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
|
||||
fi
|
||||
if [ -n "$MVNW_REPOURL" ]; then
|
||||
jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
|
||||
else
|
||||
jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
|
||||
fi
|
||||
while IFS="=" read key value; do
|
||||
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
|
||||
esac
|
||||
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Downloading from: $jarUrl"
|
||||
fi
|
||||
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
|
||||
if $cygwin; then
|
||||
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
|
||||
fi
|
||||
|
||||
if command -v wget > /dev/null; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Found wget ... using wget"
|
||||
fi
|
||||
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
|
||||
wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
|
||||
else
|
||||
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
|
||||
fi
|
||||
elif command -v curl > /dev/null; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Found curl ... using curl"
|
||||
fi
|
||||
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
|
||||
curl -o "$wrapperJarPath" "$jarUrl" -f
|
||||
else
|
||||
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
|
||||
fi
|
||||
|
||||
else
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Falling back to using Java to download"
|
||||
fi
|
||||
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
|
||||
# For Cygwin, switch paths to Windows format before running javac
|
||||
if $cygwin; then
|
||||
javaClass=`cygpath --path --windows "$javaClass"`
|
||||
fi
|
||||
if [ -e "$javaClass" ]; then
|
||||
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo " - Compiling MavenWrapperDownloader.java ..."
|
||||
fi
|
||||
# Compiling the Java class
|
||||
("$JAVA_HOME/bin/javac" "$javaClass")
|
||||
fi
|
||||
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
|
||||
# Running the downloader
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo " - Running MavenWrapperDownloader.java ..."
|
||||
fi
|
||||
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
##########################################################################################
|
||||
# End of extension
|
||||
##########################################################################################
|
||||
|
||||
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo $MAVEN_PROJECTBASEDIR
|
||||
fi
|
||||
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin; then
|
||||
[ -n "$M2_HOME" ] &&
|
||||
M2_HOME=`cygpath --path --windows "$M2_HOME"`
|
||||
[ -n "$JAVA_HOME" ] &&
|
||||
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
|
||||
[ -n "$CLASSPATH" ] &&
|
||||
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
|
||||
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
|
||||
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
|
||||
fi
|
||||
|
||||
# Provide a "standardized" way to retrieve the CLI args that will
|
||||
# work with both Windows and non-Windows executions.
|
||||
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
|
||||
export MAVEN_CMD_LINE_ARGS
|
||||
|
||||
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
|
||||
|
||||
exec "$JAVACMD" \
|
||||
$MAVEN_OPTS \
|
||||
$MAVEN_DEBUG_OPTS \
|
||||
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
|
||||
"-Dmaven.home=${M2_HOME}" \
|
||||
"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
|
||||
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
|
||||
188
mvnw.cmd
vendored
Normal file
@ -0,0 +1,188 @@
|
||||
@REM ----------------------------------------------------------------------------
|
||||
@REM Licensed to the Apache Software Foundation (ASF) under one
|
||||
@REM or more contributor license agreements. See the NOTICE file
|
||||
@REM distributed with this work for additional information
|
||||
@REM regarding copyright ownership. The ASF licenses this file
|
||||
@REM to you under the Apache License, Version 2.0 (the
|
||||
@REM "License"); you may not use this file except in compliance
|
||||
@REM with the License. You may obtain a copy of the License at
|
||||
@REM
|
||||
@REM https://www.apache.org/licenses/LICENSE-2.0
|
||||
@REM
|
||||
@REM Unless required by applicable law or agreed to in writing,
|
||||
@REM software distributed under the License is distributed on an
|
||||
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
@REM KIND, either express or implied. See the License for the
|
||||
@REM specific language governing permissions and limitations
|
||||
@REM under the License.
|
||||
@REM ----------------------------------------------------------------------------
|
||||
|
||||
@REM ----------------------------------------------------------------------------
|
||||
@REM Maven Start Up Batch script
|
||||
@REM
|
||||
@REM Required ENV vars:
|
||||
@REM JAVA_HOME - location of a JDK home dir
|
||||
@REM
|
||||
@REM Optional ENV vars
|
||||
@REM M2_HOME - location of maven2's installed home dir
|
||||
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
|
||||
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
|
||||
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
|
||||
@REM e.g. to debug Maven itself, use
|
||||
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
|
||||
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
|
||||
@REM ----------------------------------------------------------------------------
|
||||
|
||||
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
|
||||
@echo off
|
||||
@REM set title of command window
|
||||
title %0
|
||||
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
|
||||
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
|
||||
|
||||
@REM set %HOME% to equivalent of $HOME
|
||||
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
|
||||
|
||||
@REM Execute a user defined script before this one
|
||||
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
|
||||
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
|
||||
if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
|
||||
if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
|
||||
:skipRcPre
|
||||
|
||||
@setlocal
|
||||
|
||||
set ERROR_CODE=0
|
||||
|
||||
@REM To isolate internal variables from possible post scripts, we use another setlocal
|
||||
@setlocal
|
||||
|
||||
@REM ==== START VALIDATION ====
|
||||
if not "%JAVA_HOME%" == "" goto OkJHome
|
||||
|
||||
echo.
|
||||
echo Error: JAVA_HOME not found in your environment. >&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the >&2
|
||||
echo location of your Java installation. >&2
|
||||
echo.
|
||||
goto error
|
||||
|
||||
:OkJHome
|
||||
if exist "%JAVA_HOME%\bin\java.exe" goto init
|
||||
|
||||
echo.
|
||||
echo Error: JAVA_HOME is set to an invalid directory. >&2
|
||||
echo JAVA_HOME = "%JAVA_HOME%" >&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the >&2
|
||||
echo location of your Java installation. >&2
|
||||
echo.
|
||||
goto error
|
||||
|
||||
@REM ==== END VALIDATION ====
|
||||
|
||||
:init
|
||||
|
||||
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
|
||||
@REM Fallback to current working directory if not found.
|
||||
|
||||
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
|
||||
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
|
||||
|
||||
set EXEC_DIR=%CD%
|
||||
set WDIR=%EXEC_DIR%
|
||||
:findBaseDir
|
||||
IF EXIST "%WDIR%"\.mvn goto baseDirFound
|
||||
cd ..
|
||||
IF "%WDIR%"=="%CD%" goto baseDirNotFound
|
||||
set WDIR=%CD%
|
||||
goto findBaseDir
|
||||
|
||||
:baseDirFound
|
||||
set MAVEN_PROJECTBASEDIR=%WDIR%
|
||||
cd "%EXEC_DIR%"
|
||||
goto endDetectBaseDir
|
||||
|
||||
:baseDirNotFound
|
||||
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
|
||||
cd "%EXEC_DIR%"
|
||||
|
||||
:endDetectBaseDir
|
||||
|
||||
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
|
||||
|
||||
@setlocal EnableExtensions EnableDelayedExpansion
|
||||
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
|
||||
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
|
||||
|
||||
:endReadAdditionalConfig
|
||||
|
||||
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
|
||||
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
|
||||
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
|
||||
|
||||
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
|
||||
|
||||
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
|
||||
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
|
||||
)
|
||||
|
||||
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
|
||||
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
|
||||
if exist %WRAPPER_JAR% (
|
||||
if "%MVNW_VERBOSE%" == "true" (
|
||||
echo Found %WRAPPER_JAR%
|
||||
)
|
||||
) else (
|
||||
if not "%MVNW_REPOURL%" == "" (
|
||||
SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
|
||||
)
|
||||
if "%MVNW_VERBOSE%" == "true" (
|
||||
echo Couldn't find %WRAPPER_JAR%, downloading it ...
|
||||
echo Downloading from: %DOWNLOAD_URL%
|
||||
)
|
||||
|
||||
powershell -Command "&{"^
|
||||
"$webclient = new-object System.Net.WebClient;"^
|
||||
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
|
||||
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
|
||||
"}"^
|
||||
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
|
||||
"}"
|
||||
if "%MVNW_VERBOSE%" == "true" (
|
||||
echo Finished downloading %WRAPPER_JAR%
|
||||
)
|
||||
)
|
||||
@REM End of extension
|
||||
|
||||
@REM Provide a "standardized" way to retrieve the CLI args that will
|
||||
@REM work with both Windows and non-Windows executions.
|
||||
set MAVEN_CMD_LINE_ARGS=%*
|
||||
|
||||
%MAVEN_JAVA_EXE% ^
|
||||
%JVM_CONFIG_MAVEN_PROPS% ^
|
||||
%MAVEN_OPTS% ^
|
||||
%MAVEN_DEBUG_OPTS% ^
|
||||
-classpath %WRAPPER_JAR% ^
|
||||
"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
|
||||
%WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
|
||||
if ERRORLEVEL 1 goto error
|
||||
goto end
|
||||
|
||||
:error
|
||||
set ERROR_CODE=1
|
||||
|
||||
:end
|
||||
@endlocal & set ERROR_CODE=%ERROR_CODE%
|
||||
|
||||
if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
|
||||
@REM check for post script, once with legacy .bat ending and once with .cmd ending
|
||||
if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
|
||||
if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
|
||||
:skipRcPost
|
||||
|
||||
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
|
||||
if "%MAVEN_BATCH_PAUSE%"=="on" pause
|
||||
|
||||
if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
|
||||
|
||||
cmd /C exit /B %ERROR_CODE%
|
||||
124
pom.xml
Normal file
@ -0,0 +1,124 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>2.7.2</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
<groupId>edu.wgu</groupId>
|
||||
<artifactId>D387_sample_code</artifactId>
|
||||
<version>0.0.2-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>D387 sample code</name>
|
||||
<description>D387 sample code</description>
|
||||
<properties>
|
||||
<java.version>17</java.version>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<!--
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.datatype</groupId>
|
||||
<artifactId>jackson-datatype-jsr310</artifactId>
|
||||
<version>2.13.4</version>
|
||||
</dependency>
|
||||
-->
|
||||
<dependency>
|
||||
<groupId>com.h2database</groupId>
|
||||
<artifactId>h2</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<!--
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-tomcat</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-validation</artifactId>
|
||||
</dependency>
|
||||
<!--
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>fastjson</artifactId>
|
||||
<version>1.2.56</version>
|
||||
</dependency>
|
||||
-->
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<version>8.0.29</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.xml.bind</groupId>
|
||||
<artifactId>jaxb-api</artifactId>
|
||||
<version>2.3.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins> <plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>exec-maven-plugin</artifactId>
|
||||
<version>1.6.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>validate</phase>
|
||||
<goals>
|
||||
<goal>exec</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<executable>ng</executable>
|
||||
<workingDirectory>src/main/UI</workingDirectory>
|
||||
|
||||
<arguments>
|
||||
<argument>build</argument>
|
||||
</arguments>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
<configuration>
|
||||
<excludes>
|
||||
<exclude>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
16
src/main/UI/.browserslistrc
Normal file
@ -0,0 +1,16 @@
|
||||
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
|
||||
# For additional information regarding the format and rule options, please see:
|
||||
# https://github.com/browserslist/browserslist#queries
|
||||
|
||||
# For the full list of supported browsers by the Angular framework, please see:
|
||||
# https://angular.io/guide/browser-support
|
||||
|
||||
# You can see what browsers were selected by your queries by running:
|
||||
# npx browserslist
|
||||
|
||||
last 1 Chrome version
|
||||
last 1 Firefox version
|
||||
last 2 Edge major versions
|
||||
last 2 Safari major versions
|
||||
last 2 iOS major versions
|
||||
Firefox ESR
|
||||
16
src/main/UI/.editorconfig
Normal file
@ -0,0 +1,16 @@
|
||||
# Editor configuration, see https://editorconfig.org
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.ts]
|
||||
quote_type = single
|
||||
|
||||
[*.md]
|
||||
max_line_length = off
|
||||
trim_trailing_whitespace = false
|
||||
42
src/main/UI/.gitignore
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
# See http://help.github.com/ignore-files/ for more about ignoring files.
|
||||
|
||||
# Compiled output
|
||||
/dist
|
||||
/tmp
|
||||
/out-tsc
|
||||
/bazel-out
|
||||
|
||||
# Node
|
||||
/node_modules
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# IDEs and editors
|
||||
.idea/
|
||||
.project
|
||||
.classpath
|
||||
.c9/
|
||||
*.launch
|
||||
.settings/
|
||||
*.sublime-workspace
|
||||
|
||||
# Visual Studio Code
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
.history/*
|
||||
|
||||
# Miscellaneous
|
||||
/.angular/cache
|
||||
.sass-cache/
|
||||
/connect.lock
|
||||
/coverage
|
||||
/libpeerconnection.log
|
||||
testem.log
|
||||
/typings
|
||||
|
||||
# System files
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
27
src/main/UI/README.md
Normal file
@ -0,0 +1,27 @@
|
||||
# LandonHotelApp
|
||||
|
||||
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.1.3.
|
||||
|
||||
## Development server
|
||||
|
||||
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files.
|
||||
|
||||
## Code scaffolding
|
||||
|
||||
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
|
||||
|
||||
## Build
|
||||
|
||||
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
|
||||
|
||||
## Running unit tests
|
||||
|
||||
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
||||
|
||||
## Running end-to-end tests
|
||||
|
||||
Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.
|
||||
|
||||
## Further help
|
||||
|
||||
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
||||
104
src/main/UI/angular.json
Normal file
@ -0,0 +1,104 @@
|
||||
{
|
||||
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
|
||||
"version": 1,
|
||||
"newProjectRoot": "projects",
|
||||
"projects": {
|
||||
"LandonHotelApp": {
|
||||
"projectType": "application",
|
||||
"schematics": {},
|
||||
"root": "",
|
||||
"sourceRoot": "src",
|
||||
"prefix": "app",
|
||||
"architect": {
|
||||
"build": {
|
||||
"builder": "@angular-devkit/build-angular:browser",
|
||||
"options": {
|
||||
"outputPath": "../resources/static",
|
||||
"index": "src/index.html",
|
||||
"main": "src/main.ts",
|
||||
"polyfills": "src/polyfills.ts",
|
||||
"tsConfig": "tsconfig.app.json",
|
||||
"assets": [
|
||||
"src/favicon.ico",
|
||||
"src/assets"
|
||||
],
|
||||
"styles": [
|
||||
"src/styles.css"
|
||||
],
|
||||
"scripts": []
|
||||
},
|
||||
"configurations": {
|
||||
"production": {
|
||||
"budgets": [
|
||||
{
|
||||
"type": "initial",
|
||||
"maximumWarning": "4mb",
|
||||
"maximumError": "1mb"
|
||||
},
|
||||
{
|
||||
"type": "anyComponentStyle",
|
||||
"maximumWarning": "14kb",
|
||||
"maximumError": "14kb"
|
||||
}
|
||||
],
|
||||
"fileReplacements": [
|
||||
{
|
||||
"replace": "src/environments/environment.ts",
|
||||
"with": "src/environments/environment.prod.ts"
|
||||
}
|
||||
],
|
||||
"outputHashing": "all"
|
||||
},
|
||||
"development": {
|
||||
"buildOptimizer": false,
|
||||
"optimization": false,
|
||||
"vendorChunk": true,
|
||||
"extractLicenses": false,
|
||||
"sourceMap": true,
|
||||
"namedChunks": true
|
||||
}
|
||||
},
|
||||
"defaultConfiguration": "production"
|
||||
},
|
||||
"serve": {
|
||||
"builder": "@angular-devkit/build-angular:dev-server",
|
||||
"configurations": {
|
||||
"production": {
|
||||
"browserTarget": "LandonHotelApp:build:production"
|
||||
},
|
||||
"development": {
|
||||
"browserTarget": "LandonHotelApp:build:development"
|
||||
}
|
||||
},
|
||||
"defaultConfiguration": "development"
|
||||
},
|
||||
"extract-i18n": {
|
||||
"builder": "@angular-devkit/build-angular:extract-i18n",
|
||||
"options": {
|
||||
"browserTarget": "LandonHotelApp:build"
|
||||
}
|
||||
},
|
||||
"test": {
|
||||
"builder": "@angular-devkit/build-angular:karma",
|
||||
"options": {
|
||||
"main": "src/test.ts",
|
||||
"polyfills": "src/polyfills.ts",
|
||||
"tsConfig": "tsconfig.spec.json",
|
||||
"karmaConfig": "karma.conf.js",
|
||||
"assets": [
|
||||
"src/favicon.ico",
|
||||
"src/assets"
|
||||
],
|
||||
"styles": [
|
||||
"src/styles.css"
|
||||
],
|
||||
"scripts": []
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"cli": {
|
||||
"analytics": false
|
||||
}
|
||||
}
|
||||
44
src/main/UI/karma.conf.js
Normal file
@ -0,0 +1,44 @@
|
||||
// Karma configuration file, see link for more information
|
||||
// https://karma-runner.github.io/1.0/config/configuration-file.html
|
||||
|
||||
module.exports = function (config) {
|
||||
config.set({
|
||||
basePath: '',
|
||||
frameworks: ['jasmine', '@angular-devkit/build-angular'],
|
||||
plugins: [
|
||||
require('karma-jasmine'),
|
||||
require('karma-chrome-launcher'),
|
||||
require('karma-jasmine-html-reporter'),
|
||||
require('karma-coverage'),
|
||||
require('@angular-devkit/build-angular/plugins/karma')
|
||||
],
|
||||
client: {
|
||||
jasmine: {
|
||||
// you can add configuration options for Jasmine here
|
||||
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
|
||||
// for example, you can disable the random execution with `random: false`
|
||||
// or set a specific seed with `seed: 4321`
|
||||
},
|
||||
clearContext: false // leave Jasmine Spec Runner output visible in browser
|
||||
},
|
||||
jasmineHtmlReporter: {
|
||||
suppressAll: true // removes the duplicated traces
|
||||
},
|
||||
coverageReporter: {
|
||||
dir: require('path').join(__dirname, './coverage/landon-hotel-app'),
|
||||
subdir: '.',
|
||||
reporters: [
|
||||
{ type: 'html' },
|
||||
{ type: 'text-summary' }
|
||||
]
|
||||
},
|
||||
reporters: ['progress', 'kjhtml'],
|
||||
port: 9876,
|
||||
colors: true,
|
||||
logLevel: config.LOG_INFO,
|
||||
autoWatch: true,
|
||||
browsers: ['Chrome'],
|
||||
singleRun: false,
|
||||
restartOnFileChange: true
|
||||
});
|
||||
};
|
||||
21320
src/main/UI/package-lock.json
generated
Normal file
44
src/main/UI/package.json
Normal file
@ -0,0 +1,44 @@
|
||||
{
|
||||
"name": "landon-hotel-app",
|
||||
"version": "1.2.0",
|
||||
"scripts": {
|
||||
"ng": "ng",
|
||||
"start": "ng serve",
|
||||
"build": "ng build",
|
||||
"watch": "ng build --watch --configuration development",
|
||||
"test": "ng test"
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@angular/animations": "^14.1.0",
|
||||
"@angular/common": "^14.1.0",
|
||||
"@angular/compiler": "^14.1.0",
|
||||
"@angular/core": "^14.1.0",
|
||||
"@angular/forms": "^14.1.0",
|
||||
"@angular/platform-browser": "^14.1.0",
|
||||
"@angular/platform-browser-dynamic": "^14.1.0",
|
||||
"@angular/router": "^14.1.0",
|
||||
"node": "^18.10.0",
|
||||
"rxjs": "~7.5.0",
|
||||
"rxjs-compat": "^6.6.7",
|
||||
"tslib": "^2.3.0",
|
||||
"zone.js": "~0.11.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "^14.1.3",
|
||||
"@angular/cli": "~14.1.3",
|
||||
"@angular/compiler-cli": "^14.1.0",
|
||||
"@types/jasmine": "~4.0.0",
|
||||
"jasmine-core": "~4.2.0",
|
||||
"karma": "~6.4.0",
|
||||
"karma-chrome-launcher": "~3.1.0",
|
||||
"karma-coverage": "~2.2.0",
|
||||
"karma-jasmine": "~5.1.0",
|
||||
"karma-jasmine-html-reporter": "~2.0.0",
|
||||
"typescript": "~4.7.2"
|
||||
},
|
||||
"description": "This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.1.3.",
|
||||
"main": "karma.conf.js",
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
}
|
||||
10
src/main/UI/src/app/app-routing.module.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule, Routes } from '@angular/router';
|
||||
|
||||
const routes: Routes = [];
|
||||
|
||||
@NgModule({
|
||||
imports: [RouterModule.forRoot(routes)],
|
||||
exports: [RouterModule]
|
||||
})
|
||||
export class AppRoutingModule { }
|
||||
943
src/main/UI/src/app/app.component.css
Normal file
@ -0,0 +1,943 @@
|
||||
@import url(http://fonts.googleapis.com/css?family=Exo+2:400,200,600,800);
|
||||
/* line 5, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, u, i, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, embed,
|
||||
figure, figcaption, footer, header,
|
||||
menu, nav, output, ruby, section, summary,
|
||||
time, mark, audio, video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font: inherit;
|
||||
font-size: 100%;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
/* line 22, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
|
||||
html {
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
/* line 24, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
/* line 26, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
/* line 28, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
|
||||
caption, th, td {
|
||||
text-align: left;
|
||||
font-weight: normal;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
/* line 30, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
|
||||
q, blockquote {
|
||||
quotes: none;
|
||||
}
|
||||
|
||||
/* line 103, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
|
||||
q:before, q:after, blockquote:before, blockquote:after {
|
||||
content: "";
|
||||
content: none;
|
||||
}
|
||||
|
||||
/* line 32, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
|
||||
a img {
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* line 116, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
|
||||
article, aside, details, figcaption, figure, footer, header, main, menu, nav, section, summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* line 14, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_box-sizing.scss */
|
||||
*, *:before, *:after {
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* line 1, ../../../components/sass/_base.scss */
|
||||
body {
|
||||
font: 200 1em/1.5em "Exo 2", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
background: #FFFFFF;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
/* line 7, ../../../components/sass/_base.scss */
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font: 200 1.5em/1.5em "Exo 2", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
color: #0e83a0;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* line 13, ../../../components/sass/_base.scss */
|
||||
strong {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* line 17, ../../../components/sass/_base.scss */
|
||||
p {
|
||||
font-weight: 200;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
/* line 1, ../../../components/sass/_layout.scss */
|
||||
body {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
/* line 7, ../../../components/sass/_layout.scss */
|
||||
.scene {
|
||||
position: relative;
|
||||
padding: 20px 0;
|
||||
}
|
||||
|
||||
/* line 11, ../../../components/sass/_layout.scss */
|
||||
.scene article {
|
||||
max-width: 95%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
|
||||
.scene article:after {
|
||||
content: " ";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
/* line 7, ../../../components/sass/_layout.scss */
|
||||
.scene {
|
||||
padding: 40px 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 960px) {
|
||||
/* line 20, ../../../components/sass/_layout.scss */
|
||||
.scene article {
|
||||
max-width: 60em;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
|
||||
.scene article:after {
|
||||
content: " ";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
|
||||
/* line 2, ../../../components/sass/modules/_intro.scss */
|
||||
header .fullheight {
|
||||
background: linear-gradient(to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0)), url("images/hotel/splash_hotelphoto.jpg");
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
-webkit-background-size: cover;
|
||||
-moz-background-size: cover;
|
||||
-o-background-size: cover;
|
||||
background-size: cover;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
-webkit-align-items: center;
|
||||
align-items: center;
|
||||
-webkit-justify-content: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
/* line 9, ../../../components/sass/modules/_intro.scss */
|
||||
header .fullheight .hgroup {
|
||||
padding: 100px 0;
|
||||
}
|
||||
|
||||
/* line 12, ../../../components/sass/modules/_intro.scss */
|
||||
header .fullheight .hgroup h1 {
|
||||
color: #FFFFFF;
|
||||
font-size: 5em;
|
||||
font-weight: 800;
|
||||
line-height: .8em;
|
||||
text-shadow: #000000 0 0 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* line 21, ../../../components/sass/modules/_intro.scss */
|
||||
header .fullheight .hgroup h2 {
|
||||
display: block;
|
||||
color: #FFFFFF;
|
||||
width: 60%;
|
||||
max-width: 200px;
|
||||
text-align: center;
|
||||
border: 1px solid #FFFFFF;
|
||||
margin: 15px auto 0;
|
||||
padding: 10px;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
/* line 35, ../../../components/sass/modules/_intro.scss */
|
||||
header .fullheight .hgroup p {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* line 37, ../../../components/sass/modules/_intro.scss */
|
||||
header .fullheight .hgroup p img {
|
||||
padding-top: 50px;
|
||||
max-width: 50px;
|
||||
}
|
||||
|
||||
/* line 1, ../../../components/sass/modules/_nav.scss */
|
||||
header #nav {
|
||||
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzBhNWM3MSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzA2MzY0MiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
|
||||
background-size: 100%;
|
||||
background-image: -moz-linear-gradient(top, #0a5c71, #063642);
|
||||
background-image: -webkit-linear-gradient(top, #0a5c71, #063642);
|
||||
background-image: linear-gradient(to bottom, #0a5c71, #063642);
|
||||
width: 100%;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
/* line 22, ../../../components/sass/_mixins.scss */
|
||||
header #nav:before, header #nav:after {
|
||||
content: '';
|
||||
display: table;
|
||||
}
|
||||
|
||||
/* line 27, ../../../components/sass/_mixins.scss */
|
||||
header #nav:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* line 7, ../../../components/sass/modules/_nav.scss */
|
||||
header #nav .navbar {
|
||||
max-width: 60em;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
|
||||
header #nav .navbar:after {
|
||||
content: " ";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* line 9, ../../../components/sass/modules/_nav.scss */
|
||||
header #nav .navbar .brand {
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
width: 33.33333%;
|
||||
float: left;
|
||||
padding-left: 0.83333%;
|
||||
padding-right: 0.83333%;
|
||||
float: left;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
text-transform: uppercase;
|
||||
background: #DF4848;
|
||||
}
|
||||
|
||||
/* line 17, ../../../components/sass/modules/_nav.scss */
|
||||
header #nav .navbar .brand a {
|
||||
color: #FFFFFF;
|
||||
text-decoration: none;
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
padding: 10px;
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
/* line 17, ../../../components/sass/modules/_nav.scss */
|
||||
header #nav .navbar .brand a {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
/* line 27, ../../../components/sass/modules/_nav.scss */
|
||||
header #nav .navbar .brand a span {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* line 32, ../../../components/sass/modules/_nav.scss */
|
||||
header #nav .navbar ul {
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
width: 66.66667%;
|
||||
float: left;
|
||||
padding-left: 0.83333%;
|
||||
padding-right: 0.83333%;
|
||||
}
|
||||
|
||||
/* line 34, ../../../components/sass/modules/_nav.scss */
|
||||
header #nav .navbar ul li {
|
||||
float: left;
|
||||
}
|
||||
|
||||
/* line 36, ../../../components/sass/modules/_nav.scss */
|
||||
header #nav .navbar ul li a {
|
||||
color: #FFFFFF;
|
||||
font: 200 1em/1.5em "Exo 2", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
font-size: 1em;
|
||||
display: inline-block;
|
||||
padding: 10px 10px 10px 45px;
|
||||
text-decoration: none;
|
||||
background-size: 35px;
|
||||
background: no-repeat 2px;
|
||||
}
|
||||
|
||||
/* line 55, ../../../components/sass/modules/_nav.scss */
|
||||
header #nav .navbar ul li a:hover {
|
||||
background-color: #EFC94C;
|
||||
color: #063642;
|
||||
}
|
||||
|
||||
@media (min-width: 0) and (max-width: 650px) {
|
||||
/* line 36, ../../../components/sass/modules/_nav.scss */
|
||||
header #nav .navbar ul li a {
|
||||
padding: 10px 18px;
|
||||
}
|
||||
|
||||
/* line 62, ../../../components/sass/modules/_nav.scss */
|
||||
header #nav .navbar ul li a::after {
|
||||
content: '\000a0';
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* line 66, ../../../components/sass/modules/_nav.scss */
|
||||
header #nav .navbar ul li a span {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 650px) and (max-width: 960px) {
|
||||
/* line 36, ../../../components/sass/modules/_nav.scss */
|
||||
header #nav .navbar ul li a {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
/* line 72, ../../../components/sass/modules/_nav.scss */
|
||||
header #nav .navbar ul li a.icon {
|
||||
background-image: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* line 75, ../../../components/sass/modules/_nav.scss */
|
||||
header #nav .navbar ul li a.active {
|
||||
background-color: #DF4848;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
/* line 1, ../../../components/sass/modules/_welcome.scss */
|
||||
#welcome {
|
||||
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VmYzk0YyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2UyN2EzZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
|
||||
background-size: 100%;
|
||||
background-image: -moz-linear-gradient(top, #efc94c, #e27a3f);
|
||||
background-image: -webkit-linear-gradient(top, #efc94c, #e27a3f);
|
||||
background-image: linear-gradient(to bottom, #efc94c, #e27a3f);
|
||||
}
|
||||
|
||||
/* line 4, ../../../components/sass/modules/_welcome.scss */
|
||||
#welcome article {
|
||||
text-align: center;
|
||||
max-width: 70%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
|
||||
#welcome article:after {
|
||||
content: " ";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
@media (min-width: 650px) {
|
||||
/* line 4, ../../../components/sass/modules/_welcome.scss */
|
||||
#welcome article {
|
||||
max-width: 33em;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
padding: 60px 0;
|
||||
}
|
||||
|
||||
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
|
||||
#welcome article:after {
|
||||
content: " ";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
|
||||
/* line 13, ../../../components/sass/modules/_welcome.scss */
|
||||
#welcome h1 {
|
||||
font-weight: normal;
|
||||
line-height: 100%;
|
||||
color: #a24a19;
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
/* line 22, ../../../components/sass/_mixins.scss */
|
||||
#welcome .gallery:before, #welcome .gallery:after {
|
||||
content: '';
|
||||
display: table;
|
||||
}
|
||||
|
||||
/* line 27, ../../../components/sass/_mixins.scss */
|
||||
#welcome .gallery:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* line 22, ../../../components/sass/modules/_welcome.scss */
|
||||
#welcome .gallery img {
|
||||
-moz-border-radius: 20%;
|
||||
-webkit-border-radius: 20%;
|
||||
border-radius: 20%;
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media (min-width: 650px) {
|
||||
/* line 22, ../../../components/sass/modules/_welcome.scss */
|
||||
#welcome .gallery img {
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
width: 25%;
|
||||
float: left;
|
||||
padding-left: 2.5%;
|
||||
padding-right: 2.5%;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
|
||||
#welcome .gallery img:nth-child(4n + 1) {
|
||||
margin-left: 0;
|
||||
margin-right: -100%;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
|
||||
#welcome .gallery img:nth-child(4n + 2) {
|
||||
margin-left: 25%;
|
||||
margin-right: -100%;
|
||||
clear: none;
|
||||
}
|
||||
|
||||
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
|
||||
#welcome .gallery img:nth-child(4n + 3) {
|
||||
margin-left: 50%;
|
||||
margin-right: -100%;
|
||||
clear: none;
|
||||
}
|
||||
|
||||
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
|
||||
#welcome .gallery img:nth-child(4n + 4) {
|
||||
margin-left: 75%;
|
||||
margin-right: -100%;
|
||||
clear: none;
|
||||
}
|
||||
|
||||
/* line 29, ../../../components/sass/modules/_welcome.scss */
|
||||
#welcome .gallery img.hidesm {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 960px) {
|
||||
/* line 22, ../../../components/sass/modules/_welcome.scss */
|
||||
#welcome .gallery img {
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
width: 20%;
|
||||
float: left;
|
||||
padding-left: 2%;
|
||||
padding-right: 2%;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
|
||||
#welcome .gallery img:nth-child(5n + 1) {
|
||||
margin-left: 0;
|
||||
margin-right: -100%;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
|
||||
#welcome .gallery img:nth-child(5n + 2) {
|
||||
margin-left: 20%;
|
||||
margin-right: -100%;
|
||||
clear: none;
|
||||
}
|
||||
|
||||
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
|
||||
#welcome .gallery img:nth-child(5n + 3) {
|
||||
margin-left: 40%;
|
||||
margin-right: -100%;
|
||||
clear: none;
|
||||
}
|
||||
|
||||
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
|
||||
#welcome .gallery img:nth-child(5n + 4) {
|
||||
margin-left: 60%;
|
||||
margin-right: -100%;
|
||||
clear: none;
|
||||
}
|
||||
|
||||
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
|
||||
#welcome .gallery img:nth-child(5n + 5) {
|
||||
margin-left: 80%;
|
||||
margin-right: -100%;
|
||||
clear: none;
|
||||
}
|
||||
|
||||
/* line 35, ../../../components/sass/modules/_welcome.scss */
|
||||
#welcome .gallery img.hidesm {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
|
||||
/* line 1, ../../../components/sass/modules/_events.scss */
|
||||
#events {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* line 22, ../../../components/sass/_mixins.scss */
|
||||
#events:before, #events:after {
|
||||
content: '';
|
||||
display: table;
|
||||
}
|
||||
|
||||
/* line 27, ../../../components/sass/_mixins.scss */
|
||||
#events:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* line 5, ../../../components/sass/modules/_events.scss */
|
||||
#events .event {
|
||||
position: relative;
|
||||
max-width: 100%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
|
||||
#events .event:after {
|
||||
content: " ";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
@media (min-width: 650px) {
|
||||
/* line 5, ../../../components/sass/modules/_events.scss */
|
||||
#events .event {
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
width: 50%;
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
|
||||
/* line 12, ../../../components/sass/modules/_events.scss */
|
||||
#events .event .content {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
background: rgba(0, 0, 0, 0.7);
|
||||
padding: 30px;
|
||||
color: #FFFFFF;
|
||||
font-weight: 200;
|
||||
line-height: 130%;
|
||||
}
|
||||
|
||||
/* line 21, ../../../components/sass/modules/_events.scss */
|
||||
#events .event .content h2 {
|
||||
color: #FFFFFF;
|
||||
line-height: 1em;
|
||||
}
|
||||
|
||||
/* line 26, ../../../components/sass/modules/_events.scss */
|
||||
#events .event .content p {
|
||||
padding: 5px 0;
|
||||
}
|
||||
|
||||
/* line 3, ../../../components/sass/modules/_dining.scss */
|
||||
#dining h1, #dining h2 {
|
||||
color: #DF4848;
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
/* line 8, ../../../components/sass/modules/_dining.scss */
|
||||
#dining img {
|
||||
width: 100%;
|
||||
-moz-border-radius: 10px;
|
||||
-webkit-border-radius: 10px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
@media (min-width: 650px) {
|
||||
/* line 14, ../../../components/sass/modules/_dining.scss */
|
||||
#dining #areadining {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
/* line 17, ../../../components/sass/modules/_dining.scss */
|
||||
#dining #areadining h1 {
|
||||
font-weight: 200;
|
||||
font-size: 2.5em;
|
||||
}
|
||||
|
||||
/* line 21, ../../../components/sass/modules/_dining.scss */
|
||||
#dining #areadining p {
|
||||
font-size: 1.5em;
|
||||
line-height: 140%;
|
||||
}
|
||||
|
||||
/* line 27, ../../../components/sass/modules/_dining.scss */
|
||||
#dining section {
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
width: 33.33333%;
|
||||
float: left;
|
||||
padding-left: 0.83333%;
|
||||
padding-right: 0.83333%;
|
||||
}
|
||||
|
||||
/* line 30, ../../../components/sass/modules/_dining.scss */
|
||||
#dining section h2 {
|
||||
font-size: 1.2em;
|
||||
line-height: 120%;
|
||||
color: #CD0069;
|
||||
}
|
||||
|
||||
/* line 35, ../../../components/sass/modules/_dining.scss */
|
||||
#dining section p {
|
||||
padding-top: 10px;
|
||||
font-size: 1em;
|
||||
line-height: 130%;
|
||||
}
|
||||
}
|
||||
|
||||
/* line 43, ../../../components/sass/modules/_dining.scss */
|
||||
#dining #roomservice {
|
||||
margin-top: 20px;
|
||||
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZlZmFmMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
|
||||
background-size: 100%;
|
||||
background-image: -moz-linear-gradient(top, #ffffff, #fefaf0);
|
||||
background-image: -webkit-linear-gradient(top, #ffffff, #fefaf0);
|
||||
background-image: linear-gradient(to bottom, #ffffff, #fefaf0);
|
||||
padding-left: 9.16667%;
|
||||
padding-right: 9.16667%;
|
||||
text-align: center;
|
||||
border-top: 1px solid #DF4848;
|
||||
border-bottom: 1px solid #DF4848;
|
||||
}
|
||||
|
||||
/* line 1, ../../../components/sass/modules/_hotelinfo.scss */
|
||||
#hotelinfo {
|
||||
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzNhM2Y5MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzQ1YjI5ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
|
||||
background-size: 100%;
|
||||
background-image: -moz-linear-gradient(top, #3a3f90, #45b29d);
|
||||
background-image: -webkit-linear-gradient(top, #3a3f90, #45b29d);
|
||||
background-image: linear-gradient(to bottom, #3a3f90, #45b29d);
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
/* line 5, ../../../components/sass/modules/_hotelinfo.scss */
|
||||
#hotelinfo h1, #hotelinfo h2, #hotelinfo h3, #hotelinfo h4, #hotelinfo h5, #hotelinfo h6 {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
/* line 10, ../../../components/sass/modules/_hotelinfo.scss */
|
||||
#hotelinfo .heading h1 {
|
||||
font-size: 3em;
|
||||
font-weight: 200;
|
||||
}
|
||||
|
||||
/* line 22, ../../../components/sass/_mixins.scss */
|
||||
#hotelinfo #usefulinfo:before, #hotelinfo #usefulinfo:after {
|
||||
content: '';
|
||||
display: table;
|
||||
}
|
||||
|
||||
/* line 27, ../../../components/sass/_mixins.scss */
|
||||
#hotelinfo #usefulinfo:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
@media (min-width: 650px) {
|
||||
/* line 18, ../../../components/sass/modules/_hotelinfo.scss */
|
||||
#hotelinfo #usefulinfo section {
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
width: 33.33333%;
|
||||
float: left;
|
||||
padding-left: 3.33333%;
|
||||
padding-right: 3.33333%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 450px) and (max-width: 650px) {
|
||||
/* line 23, ../../../components/sass/modules/_hotelinfo.scss */
|
||||
#hotelinfo #usefulinfo section.checklist {
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
width: 50%;
|
||||
float: left;
|
||||
padding-left: 5%;
|
||||
padding-right: 5%;
|
||||
}
|
||||
}
|
||||
|
||||
/* line 28, ../../../components/sass/modules/_hotelinfo.scss */
|
||||
#hotelinfo #usefulinfo section h2 {
|
||||
color: #b5b7e1;
|
||||
font-size: 1.3em;
|
||||
line-height: 110%;
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
/* line 35, ../../../components/sass/modules/_hotelinfo.scss */
|
||||
#hotelinfo #usefulinfo section p {
|
||||
font-size: 1em;
|
||||
line-height: 130%;
|
||||
}
|
||||
|
||||
/* line 41, ../../../components/sass/modules/_hotelinfo.scss */
|
||||
#hotelinfo #usefulinfo section ul li {
|
||||
list-style: square;
|
||||
margin-left: 10%;
|
||||
line-height: 115%;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
/* line 51, ../../../components/sass/modules/_hotelinfo.scss */
|
||||
#hotelinfo #usefulinfo section#arrivalinfo ul {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* line 53, ../../../components/sass/modules/_hotelinfo.scss */
|
||||
#hotelinfo #usefulinfo section#arrivalinfo ul li {
|
||||
list-style: none;
|
||||
border-top: 1px solid #FFFFFF;
|
||||
padding: 15px 0;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
/* line 58, ../../../components/sass/modules/_hotelinfo.scss */
|
||||
#hotelinfo #usefulinfo section#arrivalinfo ul li strong {
|
||||
color: #EFC94C;
|
||||
}
|
||||
|
||||
/* line 62, ../../../components/sass/modules/_hotelinfo.scss */
|
||||
#hotelinfo #usefulinfo section#arrivalinfo ul li:first-child {
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
/* line 70, ../../../components/sass/modules/_hotelinfo.scss */
|
||||
#hotelinfo #greenprogram {
|
||||
background-color: rgba(26, 68, 60, 0.5);
|
||||
margin-top: 20px;
|
||||
border: 1px solid #FFFFFF;
|
||||
padding: 20px;
|
||||
-moz-border-radius: 20px;
|
||||
-webkit-border-radius: 20px;
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
/* line 2, ../../../components/sass/modules/_rooms.scss */
|
||||
#rooms header {
|
||||
margin-bottom: 20px;
|
||||
max-width: 90%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
|
||||
#rooms header:after {
|
||||
content: " ";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
@media (min-width: 960px) {
|
||||
/* line 2, ../../../components/sass/modules/_rooms.scss */
|
||||
#rooms header {
|
||||
max-width: 60em;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
padding-left: 9.16667%;
|
||||
padding-right: 9.16667%;
|
||||
}
|
||||
|
||||
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
|
||||
#rooms header:after {
|
||||
content: " ";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
|
||||
/* line 11, ../../../components/sass/modules/_rooms.scss */
|
||||
#rooms .room {
|
||||
max-width: 100%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
-webkit-align-items: center;
|
||||
align-items: center;
|
||||
-webkit-justify-content: center;
|
||||
justify-content: center;
|
||||
padding: 200px 0;
|
||||
}
|
||||
|
||||
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
|
||||
#rooms .room:after {
|
||||
content: " ";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
@media (min-width: 650px) {
|
||||
/* line 11, ../../../components/sass/modules/_rooms.scss */
|
||||
#rooms .room {
|
||||
padding-left: 59.16667%;
|
||||
padding-right: 9.16667%;
|
||||
}
|
||||
}
|
||||
|
||||
/* line 24, ../../../components/sass/modules/_rooms.scss */
|
||||
#rooms .room .content {
|
||||
-moz-border-radius: 10px;
|
||||
-webkit-border-radius: 10px;
|
||||
border-radius: 10px;
|
||||
background: rgba(255, 255, 255, 0.8);
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
/* line 29, ../../../components/sass/modules/_rooms.scss */
|
||||
#rooms .room .content h1 {
|
||||
color: #DF4848;
|
||||
}
|
||||
|
||||
/* line 22, ../../../components/sass/_mixins.scss */
|
||||
#attractions:before, #attractions:after {
|
||||
content: '';
|
||||
display: table;
|
||||
}
|
||||
|
||||
/* line 27, ../../../components/sass/_mixins.scss */
|
||||
#attractions:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
|
||||
#attractions:after {
|
||||
content: " ";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* line 11, ../../../components/sass/modules/_attractions.scss */
|
||||
#attractions article {
|
||||
max-width: 80%;
|
||||
padding: 20px;
|
||||
margin: 200px auto;
|
||||
background: rgba(255, 255, 255, 0.8);
|
||||
-moz-border-radius: 10px;
|
||||
-webkit-border-radius: 10px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
|
||||
#attractions article:after {
|
||||
content: " ";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
@media (min-width: 960px) {
|
||||
/* line 11, ../../../components/sass/modules/_attractions.scss */
|
||||
#attractions article {
|
||||
max-width: 50%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
|
||||
#attractions article:after {
|
||||
content: " ";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
|
||||
/* line 1, ../../../components/sass/modules/_footer.scss */
|
||||
footer {
|
||||
max-width: 100%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
background: #333333;
|
||||
padding: 30px 0;
|
||||
}
|
||||
|
||||
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
|
||||
footer:after {
|
||||
content: " ";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* line 5, ../../../components/sass/modules/_footer.scss */
|
||||
footer #socialmedia {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* line 7, ../../../components/sass/modules/_footer.scss */
|
||||
footer #socialmedia ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
/* line 9, ../../../components/sass/modules/_footer.scss */
|
||||
footer #socialmedia ul li {
|
||||
display: inline-block;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
/* line 12, ../../../components/sass/modules/_footer.scss */
|
||||
footer #socialmedia ul li img {
|
||||
width: 30px;
|
||||
-moz-border-radius: 50%;
|
||||
-webkit-border-radius: 50%;
|
||||
border-radius: 50%;
|
||||
}
|
||||
.live-presentation {
|
||||
max-width: 400px;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
/*# sourceMappingURL=style.css.map */
|
||||
233
src/main/UI/src/app/app.component.html
Normal file
@ -0,0 +1,233 @@
|
||||
|
||||
|
||||
<header id="intro" style="display: block;">
|
||||
<article class="fullheight" style="height: 568px;">
|
||||
<div class="hgroup">
|
||||
<h1>Landon Hotel</h1>
|
||||
<h2>London, Ontario</h2>
|
||||
<!-- Let's display the message-->
|
||||
<h2>{{ welcomeMSGen$ | async }}</h2>
|
||||
<h2>{{ welcomeMSGfr$ | async }}</h2>
|
||||
<p><a href="/#welcome"><img src="assets/images/arrow.png" alt="down arrow"></a></p>
|
||||
</div>
|
||||
</article>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"
|
||||
integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
|
||||
<div class="scrollmagic-pin-spacer"
|
||||
style="display: block; top: auto; left: auto; bottom: auto; right: auto; position: relative; margin: 0 auto auto; box-sizing: content-box; width: 100%; min-height: 44px; height: auto; padding-top: 0; padding-bottom: 0;">
|
||||
<nav id="nav" style="position: relative; top: 0; left: 0; bottom: auto; right: auto; width: 100%;">
|
||||
<div class="navbar">
|
||||
<div class="brand"><a href="/#welcome">Landon <span>Hotel</span></a></div>
|
||||
</div><!-- navbar -->
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
<main id="wrapper">
|
||||
<div class="scene" id="welcome">
|
||||
<article class="content">
|
||||
|
||||
<div class="live-presentation mt-4 p-3 border rounded bg-light shadow-sm">
|
||||
<h3 class="fw-bold">Online Live Presentation:</h3>
|
||||
<p class="lead">{{ livePresentation$ | async }}</p>
|
||||
</div>
|
||||
<br>
|
||||
<div class="row">
|
||||
<div class=""col-12>
|
||||
<div class="gallery">
|
||||
<img src="assets/images/intro_room.jpg" alt="Intro Gallery Room Sample Pictures">
|
||||
<img src="assets/images/intro_pool.jpg" alt="Intro Gallery Pool Sample Pictures">
|
||||
<img src="assets/images/intro_dining.jpg" alt="Intro Gallery Dining Sample Pictures">
|
||||
<img src="assets/images/intro_attractions.jpg" alt="Intro Gallery Attractions Sample Pictures">
|
||||
<img class="hidesm" src="assets/images/intro_wedding.jpg" alt="Intro Gallery Dining Sample Pictures">
|
||||
</div>
|
||||
<h1>Book a Room</h1>
|
||||
<form class="form-horizontal" [formGroup]="roomsearch"
|
||||
(ngSubmit)="onSubmit(roomsearch)">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="checkin" class="col-4">Check-In:</label>
|
||||
<div class="col-12">
|
||||
<input id="checkin" type="date" class="form-control" formControlName="checkin">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="checkout" class="col-4">Check-Out:</label>
|
||||
<div class="col-12">
|
||||
<input id="checkout" type="date" class="form-control" formControlName="checkout">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-offset-2 col-12">
|
||||
<button type="submit" class="btn btn-primary btn-lg"> Submit</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h1>Available Rooms</h1>
|
||||
|
||||
<div class="row" *ngIf="rooms">
|
||||
<div class="col-12">
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr *ngFor="let room of rooms">
|
||||
<td>
|
||||
<img src="assets/images/intro_room.jpg" alt="Intro Gallery Room Sample Pictures">
|
||||
</td>
|
||||
<td>
|
||||
<strong>Room #: {{room.roomNumber}}</strong><br/>
|
||||
<strong>Price:</strong><br/>
|
||||
<strong>${{room.price}}(USD)</strong><br/>
|
||||
<strong>${{room.prixCad}}(CAD)</strong><br/>
|
||||
<strong>€{{room.prixEuro}}(EUR)</strong>
|
||||
</td>
|
||||
<td>
|
||||
<button type="submit" class="btn btn-primary" (click)="reserveRoom(room.id)">Reserve</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
</div><!-- welcome -->
|
||||
<div class="scene" id="hotelinfo">
|
||||
<article class="heading">
|
||||
<h1>Essential Info</h1>
|
||||
</article>
|
||||
<article id="usefulinfo">
|
||||
<section id="arrivalinfo">
|
||||
<h2>Arrival Information</h2>
|
||||
<ul>
|
||||
<li><strong>Check-in:</strong> 3:00 PM</li>
|
||||
<li><strong>Check-out:</strong> 11:00 AM</li>
|
||||
<li><strong>Parking:</strong> Self-parking in the underground garage is CA$15 per day and valet-parking is CA$50
|
||||
per day.
|
||||
</li>
|
||||
<li><strong>Airport Shuttle:</strong> Our complimentary airport shuttles leave every hour on the hour, and
|
||||
make trips to London International Airport. Shuttles to Toronto Pearson are available twice a day for CA$50.
|
||||
</li>
|
||||
<li><strong>Trains:</strong> The nearest train station is at London Station, which is a major interchange for Via Rail trains running from Toronto west to Sarnia and Windsor.</li>
|
||||
<li><strong>Pet Policy:</strong> Pets of all sizes and types are allowed in designated pet rooms, and the
|
||||
specified common areas. Service animals are allowed everywhere.
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="checklist" id="services">
|
||||
<h2>Services and Amenities</h2>
|
||||
<p>Our services and amenities are designed to make your travel easy, your stay comfortable, and your experience
|
||||
one-of-a-kind.</p>
|
||||
<ul>
|
||||
<li>Indoor pool</li>
|
||||
<li>24-hour fitness center</li>
|
||||
<li>Massage therapy</li>
|
||||
<li>Full service spa</li>
|
||||
<li>In-room jacuzzi tubs</li>
|
||||
<li>Rooftop café & smoothie bar</li>
|
||||
<li>Coffee bar & pastry shop</li>
|
||||
<li>Traditional continental breakfast</li>
|
||||
<li>24-hour concierge service</li>
|
||||
<li>Business center</li>
|
||||
<li>Complimentary wireless service</li>
|
||||
<li>Laundry & dry cleaning service</li>
|
||||
<li>Daily paper</li>
|
||||
<li>Certified "green" hotel</li>
|
||||
<li>Pet-friendly rooms & common areas</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="checklist" id="accessibility">
|
||||
<h2>Accessibility</h2>
|
||||
<p>We're committed to maintaining the same quality of service for every individual. We offer the following
|
||||
facilities for those with special needs:</p>
|
||||
<ul>
|
||||
<li>Grab bars on tub walls</li>
|
||||
<li>Shower chairs</li>
|
||||
<li>Hand held shower sprayers</li>
|
||||
<li>Higher toilets & toilet modifiers</li>
|
||||
<li>Lower sink faucet handles</li>
|
||||
<li>Wheelchair clearance under sinks & vanity</li>
|
||||
<li>Lower racks in closet</li>
|
||||
<li>TDD machines</li>
|
||||
<li>Telephone light signalers & smoke alarms</li>
|
||||
<li>Telephone amplification handsets</li>
|
||||
<li>Closed captioned television converters</li>
|
||||
<li>Vibrating alarm clocks</li>
|
||||
<li>Telephones with volume control</li>
|
||||
</ul>
|
||||
</section>
|
||||
</article>
|
||||
<article id="greenprogram">
|
||||
<h2>Landon Green Program</h2>
|
||||
<p><strong>The Landon Hotel - London</strong> was recently renovated, and we considered the impact on the earth
|
||||
the entire way. From green building materials, to solar power, to energy-friendly lighting and appliances
|
||||
throughout the hotel - we’re saving energy in every socket, outlet, and switch. We’ve also initiated a recycling
|
||||
and composting program that reduces the load to local landfills, while providing valuable raw material for use
|
||||
in new products, or in the case of compost, for use in local gardens and landscapes.</p>
|
||||
</article>
|
||||
</div><!-- hotelinfo -->
|
||||
|
||||
<div class="scene" id="dining">
|
||||
<article id="areadining">
|
||||
<h1>Dining in the Area</h1>
|
||||
<p>London, Ontario is a foodie’s paradise, and the Landon Hotel is in the center of it all. With options for
|
||||
traditional English, Italian, Indian, American, Chinese, and French cuisines, all within two blocks of the
|
||||
hotel, and a variety of tasty culinary delights from many other countries, within a half-mile radius, the only
|
||||
trouble you’ll have is choosing! </p>
|
||||
</article>
|
||||
<article id="inhotel">
|
||||
<section id="rooftopcafe">
|
||||
<h2>Rooftop Café</h2>
|
||||
<img src="assets/images/dining_rooftop.jpg" alt="Dining">
|
||||
<p>Landon Rooftop Café is the destination for five star dining. Our master chefs are trained to meet special
|
||||
dietary needs, and we offer a range of vegetarian/vegan, kosher, gluten, and dairy free selections to
|
||||
accommodate our guests. Whether you’re in the mood for our award winning roast beef, fresh select salads,
|
||||
appetizing lunch entrees, or delectable desserts, we have you covered.</p>
|
||||
</section>
|
||||
|
||||
<section id="smoothiebar">
|
||||
<h2>Smoothie Bar</h2>
|
||||
<img src="assets/images/dining_smoothiebar.jpg" alt="Dining">
|
||||
<p>The Rooftop Smoothie Bar gives you panoramic views of the city, where you can have one of our specialty
|
||||
smoothies while you wait for your table. Our top mixologists are constantly bringing new and unique offerings
|
||||
to our smoothie menu. We have a wide range of locally grown, fresh fruit and vegetable choices to make you
|
||||
custom blended drinks. We also have seasonal selections that you won’t find anywhere else.</p>
|
||||
</section>
|
||||
|
||||
<section id="coffeebar">
|
||||
<h2>Breakfast & Coffee Bar</h2>
|
||||
<img src="assets/images/dining_lattes.jpg" alt="Dining">
|
||||
<p>Our traditional breakfast and coffee bar, located adjacent to our lounge, are the perfect way to start your
|
||||
morning. We offer a wide selection of seasonal fresh fruit, a variety of cereals, croissants, crusty sourdough
|
||||
bread, cook-to-order eggs and omelettes, fresh juice, coffee, and teas. Breakfast is served from 7:00 am to
|
||||
10:00 am daily. Our coffee bar is open until 6:30 pm daily.</p>
|
||||
</section>
|
||||
</article><!-- inhotel -->
|
||||
<article id="roomservice">
|
||||
<h1>Room Service</h1>
|
||||
<p>If you’d rather stay in your room and enjoy a quiet evening in, or a relaxing breakfast in bed, room service
|
||||
options are available for all of our dining choices.</p>
|
||||
</article>
|
||||
</div><!-- dining -->
|
||||
|
||||
</main>
|
||||
<footer class="scene">
|
||||
<article class="content">
|
||||
<div id="socialmedia">
|
||||
<ul class="group">
|
||||
<li><a href="https://twitter.com/"><img class="icon" src="assets/images/twitter.png"
|
||||
alt="icon for twitter"></a></li>
|
||||
<li><a href="http://www.facebook.com/"><img class="icon" src="assets/images/facebook.png"
|
||||
alt="icon for facebook"></a></li>
|
||||
<li><a href="http://www.youtube.com/"><img class="icon" src="assets/images/youtube.png" alt="icon for youtube"></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</article>
|
||||
</footer>
|
||||
<script src="src/app/images/script.js"></script>
|
||||
35
src/main/UI/src/app/app.component.spec.ts
Normal file
@ -0,0 +1,35 @@
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
import { RouterTestingModule } from '@angular/router/testing';
|
||||
import { AppComponent } from './app.component';
|
||||
|
||||
describe('AppComponent', () => {
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
imports: [
|
||||
RouterTestingModule
|
||||
],
|
||||
declarations: [
|
||||
AppComponent
|
||||
],
|
||||
}).compileComponents();
|
||||
});
|
||||
|
||||
it('should create the app', () => {
|
||||
const fixture = TestBed.createComponent(AppComponent);
|
||||
const app = fixture.componentInstance;
|
||||
expect(app).toBeTruthy();
|
||||
});
|
||||
|
||||
/* it(`should have as title 'LandonHotelApp'`, () => {
|
||||
const fixture = TestBed.createComponent(AppComponent);
|
||||
const app = fixture.componentInstance;
|
||||
expect(app.title).toEqual('LandonHotelApp');
|
||||
});
|
||||
|
||||
it('should render title', () => {
|
||||
const fixture = TestBed.createComponent(AppComponent);
|
||||
fixture.detectChanges();
|
||||
const compiled = fixture.nativeElement as HTMLElement;
|
||||
expect(compiled.querySelector('.content span')?.textContent).toContain('LandonHotelApp app is running!');
|
||||
});*/
|
||||
});
|
||||
171
src/main/UI/src/app/app.component.ts
Normal file
@ -0,0 +1,171 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import {FormControl, FormGroup} from '@angular/forms';
|
||||
import {HttpClient, HttpResponse,HttpHeaders} from "@angular/common/http";
|
||||
import { Observable } from 'rxjs';
|
||||
import {map} from "rxjs/operators";
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@Component({
|
||||
selector: 'app-root',
|
||||
templateUrl: './app.component.html',
|
||||
styleUrls: ['./app.component.css']
|
||||
})
|
||||
export class AppComponent implements OnInit{
|
||||
// Observables connected to backend endpoints for welcome messages
|
||||
welcomeMSGen$!: Observable<string>
|
||||
welcomeMSGfr$!: Observable<string>
|
||||
livePresentation$!: Observable<string>
|
||||
|
||||
constructor(private httpClient:HttpClient){}
|
||||
|
||||
private baseURL:string='http://localhost:8080';
|
||||
|
||||
private getUrl:string = this.baseURL + '/room/reservation/v1/';
|
||||
private postUrl:string = this.baseURL + '/room/reservation/v1';
|
||||
public submitted!:boolean;
|
||||
roomsearch! : FormGroup;
|
||||
rooms! : Room[];
|
||||
request!:ReserveRoomRequest;
|
||||
currentCheckInVal!:string;
|
||||
currentCheckOutVal!:string;
|
||||
|
||||
ngOnInit(){
|
||||
// Retrieve the English (Canada) welcome message
|
||||
this.welcomeMSGen$ = this.httpClient.get(
|
||||
this.baseURL + "/welcome/?lang=en-US",
|
||||
{ responseType: "text" }
|
||||
);
|
||||
|
||||
// Retrieve the French (Canada) welcome message
|
||||
this.welcomeMSGfr$ = this.httpClient.get(
|
||||
this.baseURL + "/welcome/?lang=fr-CA",
|
||||
{ responseType: "text" }
|
||||
);
|
||||
|
||||
//Live presentation times
|
||||
this.livePresentation$ = this.httpClient.get(this.baseURL + "/live", {responseType: "text"})
|
||||
|
||||
this.roomsearch= new FormGroup({
|
||||
checkin: new FormControl(' '),
|
||||
checkout: new FormControl(' ')
|
||||
});
|
||||
|
||||
// this.rooms=ROOMS;
|
||||
|
||||
|
||||
const roomsearchValueChanges$ = this.roomsearch.valueChanges;
|
||||
|
||||
// subscribe to the stream
|
||||
roomsearchValueChanges$.subscribe(x => {
|
||||
this.currentCheckInVal = x.checkin;
|
||||
this.currentCheckOutVal = x.checkout;
|
||||
});
|
||||
}
|
||||
|
||||
onSubmit({value,valid}:{value:Roomsearch,valid:boolean}){
|
||||
this.getAll().subscribe(
|
||||
rooms => { this.rooms = <Room[]>Object.values(rooms)[0];
|
||||
// these numbers may change by the time they are being evaluated
|
||||
const cadRates = 1.37;
|
||||
const eurRates = 0.85;
|
||||
|
||||
this.rooms.forEach(room => {
|
||||
room.prixCad = (parseFloat(room.price) * cadRates).toFixed(2);
|
||||
room.prixEuro = (parseFloat(room.price) * eurRates).toFixed(2);
|
||||
});
|
||||
},
|
||||
error => {
|
||||
console.error('Error', error);
|
||||
}
|
||||
);
|
||||
}
|
||||
reserveRoom(value:string){
|
||||
this.request = new ReserveRoomRequest(value, this.currentCheckInVal, this.currentCheckOutVal);
|
||||
|
||||
this.createReservation(this.request);
|
||||
}
|
||||
createReservation(body:ReserveRoomRequest) {
|
||||
let bodyString = JSON.stringify(body); // Stringify payload
|
||||
let headers = new Headers({'Content-Type': 'application/json'}); // ... Set content type to JSON
|
||||
// let options = new RequestOptions({headers: headers}); // Create a request option
|
||||
|
||||
const options = {
|
||||
headers: new HttpHeaders().append('key', 'value'),
|
||||
|
||||
}
|
||||
|
||||
this.httpClient.post(this.postUrl, body, options)
|
||||
.subscribe(res => console.log(res));
|
||||
}
|
||||
|
||||
/*mapRoom(response:HttpResponse<any>): Room[]{
|
||||
return response.body;
|
||||
}*/
|
||||
|
||||
getAll(): Observable<any> {
|
||||
|
||||
|
||||
return this.httpClient.get(this.baseURL + '/room/reservation/v1?checkin='+ this.currentCheckInVal + '&checkout='+this.currentCheckOutVal, {responseType: 'json'});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
export interface Roomsearch{
|
||||
checkin:string;
|
||||
checkout:string;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
export interface Room{
|
||||
id:string;
|
||||
roomNumber:string;
|
||||
price:string;
|
||||
links:string;
|
||||
prixCad:string;
|
||||
prixEuro:string;
|
||||
|
||||
}
|
||||
export class ReserveRoomRequest {
|
||||
roomId:string;
|
||||
checkin:string;
|
||||
checkout:string;
|
||||
|
||||
constructor(roomId:string,
|
||||
checkin:string,
|
||||
checkout:string) {
|
||||
|
||||
this.roomId = roomId;
|
||||
this.checkin = checkin;
|
||||
this.checkout = checkout;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
var ROOMS: Room[]=[
|
||||
{
|
||||
"id": "13932123",
|
||||
"roomNumber" : "409",
|
||||
"price" :"20",
|
||||
"links" : ""
|
||||
},
|
||||
{
|
||||
"id": "139324444",
|
||||
"roomNumber" : "509",
|
||||
"price" :"30",
|
||||
"links" : ""
|
||||
},
|
||||
{
|
||||
"id": "139324888",
|
||||
"roomNumber" : "609",
|
||||
"price" :"40",
|
||||
"links" : ""
|
||||
}
|
||||
] */
|
||||
|
||||
26
src/main/UI/src/app/app.module.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { BrowserModule } from '@angular/platform-browser';
|
||||
|
||||
import { AppRoutingModule } from './app-routing.module';
|
||||
import { AppComponent } from './app.component';
|
||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||
import { HttpClientModule} from '@angular/common/http';
|
||||
import {HashLocationStrategy, LocationStrategy} from "@angular/common";
|
||||
|
||||
|
||||
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
AppComponent
|
||||
],
|
||||
imports: [
|
||||
BrowserModule,
|
||||
AppRoutingModule,
|
||||
HttpClientModule,
|
||||
ReactiveFormsModule
|
||||
],
|
||||
providers: [],
|
||||
bootstrap: [AppComponent]
|
||||
})
|
||||
export class AppModule { }
|
||||
74
src/main/UI/src/app/config/service.ts
Normal file
@ -0,0 +1,74 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { HttpErrorResponse, HttpResponse } from '@angular/common/http';
|
||||
|
||||
import { Observable, throwError } from 'rxjs';
|
||||
import { catchError, retry } from 'rxjs/operators';
|
||||
|
||||
export interface Config {
|
||||
|
||||
id:string;
|
||||
roomNumber:string;
|
||||
price:string;
|
||||
links:string;
|
||||
}
|
||||
|
||||
@Injectable()
|
||||
export class ConfigService {
|
||||
configUrl = 'assets/config.json';
|
||||
|
||||
constructor(private http: HttpClient) { }
|
||||
|
||||
getConfig() {
|
||||
return this.http.get<Config>(this.configUrl)
|
||||
.pipe(
|
||||
retry(3), // retry a failed request up to 3 times
|
||||
catchError(this.handleError) // then handle the error
|
||||
);
|
||||
}
|
||||
|
||||
getConfig_1() {
|
||||
return this.http.get<Config>(this.configUrl);
|
||||
}
|
||||
|
||||
getConfig_2() {
|
||||
// now returns an Observable of Config
|
||||
return this.http.get<Config>(this.configUrl);
|
||||
}
|
||||
|
||||
getConfig_3() {
|
||||
return this.http.get<Config>(this.configUrl)
|
||||
.pipe(
|
||||
catchError(this.handleError)
|
||||
);
|
||||
}
|
||||
|
||||
getConfigResponse(): Observable<HttpResponse<Config>> {
|
||||
return this.http.get<Config>(
|
||||
this.configUrl, { observe: 'response' });
|
||||
}
|
||||
|
||||
private handleError(error: HttpErrorResponse) {
|
||||
if (error.status === 0) {
|
||||
// A client-side or network error occurred. Handle it accordingly.
|
||||
console.error('An error occurred:', error.error);
|
||||
} else {
|
||||
// The backend returned an unsuccessful response code.
|
||||
// The response body may contain clues as to what went wrong.
|
||||
console.error(
|
||||
`Backend returned code ${error.status}, body was: `, error.error);
|
||||
}
|
||||
// Return an observable with a user-facing error message.
|
||||
return throwError(() => new Error('Something bad happened; please try again later.'));
|
||||
}
|
||||
|
||||
makeIntentionalError() {
|
||||
return this.http.get('not/a/real/url')
|
||||
.pipe(
|
||||
catchError(this.handleError)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
BIN
src/main/UI/src/app/images/._arrow.png
Normal file
BIN
src/main/UI/src/app/images/._dining_lattes.jpg
Normal file
BIN
src/main/UI/src/app/images/._dining_rooftop.jpg
Normal file
BIN
src/main/UI/src/app/images/._dining_smoothiebar.jpg
Normal file
BIN
src/main/UI/src/app/images/._facebook.png
Normal file
BIN
src/main/UI/src/app/images/._hotel
Normal file
BIN
src/main/UI/src/app/images/._intro_attractions.jpg
Normal file
BIN
src/main/UI/src/app/images/._intro_dining.jpg
Normal file
BIN
src/main/UI/src/app/images/._intro_pool.jpg
Normal file
BIN
src/main/UI/src/app/images/._intro_room.jpg
Normal file
BIN
src/main/UI/src/app/images/._intro_wedding.jpg
Normal file
BIN
src/main/UI/src/app/images/._twitter.png
Normal file
BIN
src/main/UI/src/app/images/._youtube.png
Normal file
BIN
src/main/UI/src/app/images/arrow.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
src/main/UI/src/app/images/dining_lattes.jpg
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
src/main/UI/src/app/images/dining_rooftop.jpg
Normal file
|
After Width: | Height: | Size: 95 KiB |
BIN
src/main/UI/src/app/images/dining_smoothiebar.jpg
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
src/main/UI/src/app/images/facebook.png
Normal file
|
After Width: | Height: | Size: 637 B |
BIN
src/main/UI/src/app/images/hotel/._splash_hotelphoto.jpg
Normal file
BIN
src/main/UI/src/app/images/hotel/splash_hotelphoto.jpg
Normal file
|
After Width: | Height: | Size: 357 KiB |
BIN
src/main/UI/src/app/images/intro_attractions.jpg
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
src/main/UI/src/app/images/intro_dining.jpg
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
src/main/UI/src/app/images/intro_pool.jpg
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
src/main/UI/src/app/images/intro_room.jpg
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
src/main/UI/src/app/images/intro_wedding.jpg
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
src/main/UI/src/app/images/twitter.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
src/main/UI/src/app/images/youtube.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
0
src/main/UI/src/assets/.gitkeep
Normal file
7
src/main/UI/src/assets/config.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
|
||||
"id": "13932123",
|
||||
"roomNumber" : "409",
|
||||
"price" :"20",
|
||||
"links" : ""
|
||||
}
|
||||
BIN
src/main/UI/src/assets/images/._arrow.png
Normal file
BIN
src/main/UI/src/assets/images/._dining_lattes.jpg
Normal file
BIN
src/main/UI/src/assets/images/._dining_rooftop.jpg
Normal file
BIN
src/main/UI/src/assets/images/._dining_smoothiebar.jpg
Normal file
BIN
src/main/UI/src/assets/images/._facebook.png
Normal file
BIN
src/main/UI/src/assets/images/._hotel
Normal file
BIN
src/main/UI/src/assets/images/._intro_attractions.jpg
Normal file
BIN
src/main/UI/src/assets/images/._intro_dining.jpg
Normal file
BIN
src/main/UI/src/assets/images/._intro_pool.jpg
Normal file
BIN
src/main/UI/src/assets/images/._intro_room.jpg
Normal file
BIN
src/main/UI/src/assets/images/._intro_wedding.jpg
Normal file
BIN
src/main/UI/src/assets/images/._twitter.png
Normal file
BIN
src/main/UI/src/assets/images/._youtube.png
Normal file
BIN
src/main/UI/src/assets/images/arrow.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
src/main/UI/src/assets/images/dining_lattes.jpg
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
src/main/UI/src/assets/images/dining_rooftop.jpg
Normal file
|
After Width: | Height: | Size: 95 KiB |
BIN
src/main/UI/src/assets/images/dining_smoothiebar.jpg
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
src/main/UI/src/assets/images/facebook.png
Normal file
|
After Width: | Height: | Size: 637 B |
BIN
src/main/UI/src/assets/images/hotel/._splash_hotelphoto.jpg
Normal file
BIN
src/main/UI/src/assets/images/hotel/splash_hotelphoto.jpg
Normal file
|
After Width: | Height: | Size: 357 KiB |
BIN
src/main/UI/src/assets/images/intro_attractions.jpg
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
src/main/UI/src/assets/images/intro_dining.jpg
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
src/main/UI/src/assets/images/intro_pool.jpg
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
src/main/UI/src/assets/images/intro_room.jpg
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
src/main/UI/src/assets/images/intro_wedding.jpg
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
src/main/UI/src/assets/images/twitter.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
src/main/UI/src/assets/images/youtube.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
3
src/main/UI/src/environments/environment.prod.ts
Normal file
@ -0,0 +1,3 @@
|
||||
export const environment = {
|
||||
production: true
|
||||
};
|
||||
16
src/main/UI/src/environments/environment.ts
Normal file
@ -0,0 +1,16 @@
|
||||
// This file can be replaced during build by using the `fileReplacements` array.
|
||||
// `ng build` replaces `environment.ts` with `environment.prod.ts`.
|
||||
// The list of file replacements can be found in `angular.json`.
|
||||
|
||||
export const environment = {
|
||||
production: false
|
||||
};
|
||||
|
||||
/*
|
||||
* For easier debugging in development mode, you can import the following file
|
||||
* to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.
|
||||
*
|
||||
* This import should be commented out in production mode because it will have a negative impact
|
||||
* on performance if an error is thrown.
|
||||
*/
|
||||
// import 'zone.js/plugins/zone-error'; // Included with Angular CLI.
|
||||
BIN
src/main/UI/src/favicon.ico
Normal file
|
After Width: | Height: | Size: 948 B |
13
src/main/UI/src/index.html
Normal file
@ -0,0 +1,13 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>LandonHotelApp</title>
|
||||
<base href="/">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
||||
</head>
|
||||
<body>
|
||||
<app-root></app-root>
|
||||
</body>
|
||||
</html>
|
||||
12
src/main/UI/src/main.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
53
src/main/UI/src/polyfills.ts
Normal file
@ -0,0 +1,53 @@
|
||||
/**
|
||||
* This file includes polyfills needed by Angular and is loaded before the app.
|
||||
* You can add your own extra polyfills to this file.
|
||||
*
|
||||
* This file is divided into 2 sections:
|
||||
* 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
|
||||
* 2. Application imports. Files imported after ZoneJS that should be loaded before your main
|
||||
* file.
|
||||
*
|
||||
* The current setup is for so-called "evergreen" browsers; the last versions of browsers that
|
||||
* automatically update themselves. This includes recent versions of Safari, Chrome (including
|
||||
* Opera), Edge on the desktop, and iOS and Chrome on mobile.
|
||||
*
|
||||
* Learn more in https://angular.io/guide/browser-support
|
||||
*/
|
||||
|
||||
/***************************************************************************************************
|
||||
* BROWSER POLYFILLS
|
||||
*/
|
||||
|
||||
/**
|
||||
* By default, zone.js will patch all possible macroTask and DomEvents
|
||||
* user can disable parts of macroTask/DomEvents patch by setting following flags
|
||||
* because those flags need to be set before `zone.js` being loaded, and webpack
|
||||
* will put import in the top of bundle, so user need to create a separate file
|
||||
* in this directory (for example: zone-flags.ts), and put the following flags
|
||||
* into that file, and then add the following code before importing zone.js.
|
||||
* import './zone-flags';
|
||||
*
|
||||
* The flags allowed in zone-flags.ts are listed here.
|
||||
*
|
||||
* The following flags will work for all browsers.
|
||||
*
|
||||
* (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
|
||||
* (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
|
||||
* (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
|
||||
*
|
||||
* in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
|
||||
* with the following flag, it will bypass `zone.js` patch for IE/Edge
|
||||
*
|
||||
* (window as any).__Zone_enable_cross_context_check = true;
|
||||
*
|
||||
*/
|
||||
|
||||
/***************************************************************************************************
|
||||
* Zone JS is required by default for Angular itself.
|
||||
*/
|
||||
import 'zone.js'; // Included with Angular CLI.
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
* APPLICATION IMPORTS
|
||||
*/
|
||||
1
src/main/UI/src/styles.css
Normal file
@ -0,0 +1 @@
|
||||
/* You can add global styles to this file, and also import other style files */
|
||||
26
src/main/UI/src/test.ts
Normal file
@ -0,0 +1,26 @@
|
||||
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
|
||||
|
||||
import 'zone.js/testing';
|
||||
import { getTestBed } from '@angular/core/testing';
|
||||
import {
|
||||
BrowserDynamicTestingModule,
|
||||
platformBrowserDynamicTesting
|
||||
} from '@angular/platform-browser-dynamic/testing';
|
||||
|
||||
declare const require: {
|
||||
context(path: string, deep?: boolean, filter?: RegExp): {
|
||||
<T>(id: string): T;
|
||||
keys(): string[];
|
||||
};
|
||||
};
|
||||
|
||||
// First, initialize the Angular testing environment.
|
||||
getTestBed().initTestEnvironment(
|
||||
BrowserDynamicTestingModule,
|
||||
platformBrowserDynamicTesting(),
|
||||
);
|
||||
|
||||
// Then we find all the tests.
|
||||
const context = require.context('./', true, /\.spec\.ts$/);
|
||||
// And load the modules.
|
||||
context.keys().forEach(context);
|
||||
15
src/main/UI/tsconfig.app.json
Normal file
@ -0,0 +1,15 @@
|
||||
/* To learn more about this file see: https://angular.io/config/tsconfig. */
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "./out-tsc/app",
|
||||
"types": []
|
||||
},
|
||||
"files": [
|
||||
"src/main.ts",
|
||||
"src/polyfills.ts"
|
||||
],
|
||||
"include": [
|
||||
"src/**/*.d.ts"
|
||||
]
|
||||
}
|
||||
32
src/main/UI/tsconfig.json
Normal file
@ -0,0 +1,32 @@
|
||||
/* To learn more about this file see: https://angular.io/config/tsconfig. */
|
||||
{
|
||||
"compileOnSave": false,
|
||||
"compilerOptions": {
|
||||
"baseUrl": "./",
|
||||
"outDir": "./dist/out-tsc",
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"noImplicitOverride": true,
|
||||
"noPropertyAccessFromIndexSignature": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"sourceMap": true,
|
||||
"declaration": false,
|
||||
"downlevelIteration": true,
|
||||
"experimentalDecorators": true,
|
||||
"moduleResolution": "node",
|
||||
"importHelpers": true,
|
||||
"target": "es2020",
|
||||
"module": "es2020",
|
||||
"lib": [
|
||||
"es2020",
|
||||
"dom"
|
||||
]
|
||||
},
|
||||
"angularCompilerOptions": {
|
||||
"enableI18nLegacyMessageIdFormat": false,
|
||||
"strictInjectionParameters": true,
|
||||
"strictInputAccessModifiers": true,
|
||||
"strictTemplates": true
|
||||
}
|
||||
}
|
||||
18
src/main/UI/tsconfig.spec.json
Normal file
@ -0,0 +1,18 @@
|
||||
/* To learn more about this file see: https://angular.io/config/tsconfig. */
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "./out-tsc/spec",
|
||||
"types": [
|
||||
"jasmine"
|
||||
]
|
||||
},
|
||||
"files": [
|
||||
"src/test.ts",
|
||||
"src/polyfills.ts"
|
||||
],
|
||||
"include": [
|
||||
"src/**/*.spec.ts",
|
||||
"src/**/*.d.ts"
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
package edu.wgu.d387_sample_code;
|
||||
|
||||
import edu.wgu.d387_sample_code.Messages.WelcomeMessage;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
@SpringBootApplication
|
||||
public class D387SampleCodeApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(D387SampleCodeApplication.class, args);
|
||||
|
||||
//Let's create threads for each welcome MESSAGE!
|
||||
|
||||
//English Message
|
||||
WelcomeMessage englishMessage = new WelcomeMessage(Locale.US);
|
||||
Thread englishThread = new Thread(englishMessage);
|
||||
englishThread.start();
|
||||
|
||||
//French Message
|
||||
WelcomeMessage frenchMessage = new WelcomeMessage(Locale.CANADA_FRENCH);
|
||||
Thread frenchThread = new Thread(frenchMessage);
|
||||
frenchThread.start();
|
||||
}
|
||||
}
|
||||
46
src/main/java/edu/wgu/d387_sample_code/H2Bootstrap.java
Normal file
@ -0,0 +1,46 @@
|
||||
package edu.wgu.d387_sample_code;
|
||||
|
||||
import edu.wgu.d387_sample_code.entity.RoomEntity;
|
||||
import edu.wgu.d387_sample_code.repository.RoomRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
||||
|
||||
@Component
|
||||
public class H2Bootstrap implements CommandLineRunner {
|
||||
|
||||
@Autowired
|
||||
RoomRepository roomRepository;
|
||||
|
||||
@Override
|
||||
public void run(String... args) throws Exception {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
System.out.println("Bootstrapping data: ");
|
||||
RoomEntity room1= new RoomEntity(405, "200");
|
||||
room1.setId(1L);
|
||||
|
||||
roomRepository.save(room1);
|
||||
|
||||
RoomEntity room2= new RoomEntity(406, "220");
|
||||
room2.setId(2L);
|
||||
|
||||
roomRepository.save(room2);
|
||||
|
||||
RoomEntity room3= new RoomEntity(407, "260");
|
||||
room3.setId(3L);
|
||||
|
||||
roomRepository.save(room3);
|
||||
|
||||
|
||||
Iterable<RoomEntity> itr = roomRepository.findAll();
|
||||
|
||||
System.out.println("Printing out data: ");
|
||||
for(RoomEntity room : itr) {
|
||||
System.out.println(room.getRoomNumber());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package edu.wgu.d387_sample_code.Messages;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
public class WelcomeMessage implements Runnable {
|
||||
private Locale locale;
|
||||
|
||||
public WelcomeMessage (Locale locale){
|
||||
this.locale = locale;
|
||||
}
|
||||
|
||||
public String getWelcomeMessage(){
|
||||
ResourceBundle bundle = ResourceBundle.getBundle("messages", locale);
|
||||
return bundle.getString("welcomeMessage");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(){
|
||||
System.out.println(getWelcomeMessage());
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package edu.wgu.d387_sample_code.Messages;
|
||||
|
||||
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
@CrossOrigin(origins = "http://localhost:4200")
|
||||
@RestController
|
||||
public class WelcomeMessageController {
|
||||
@GetMapping("/welcome")
|
||||
public ResponseEntity<String> displayWelcomeMessage(@RequestParam("lang") String lang){
|
||||
Locale locale = Locale.forLanguageTag(lang);
|
||||
WelcomeMessage message = new WelcomeMessage(locale);
|
||||
return new ResponseEntity<String>(message.getWelcomeMessage(), HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
package edu.wgu.d387_sample_code;
|
||||
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
|
||||
|
||||
public class ServletInitializer extends SpringBootServletInitializer {
|
||||
|
||||
@Override
|
||||
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
|
||||
return application.sources(D387SampleCodeApplication.class);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,31 @@
|
||||
package edu.wgu.d387_sample_code.Timezones;
|
||||
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
public class TimeConverter {
|
||||
public static String getTime(){
|
||||
|
||||
//Let's get the current time
|
||||
ZonedDateTime now = ZonedDateTime.now();
|
||||
|
||||
//Now let us covert to NY, UTC and MT
|
||||
|
||||
//Easter Time
|
||||
ZonedDateTime et = now.withZoneSameInstant(ZoneId.of("America/New_York"));
|
||||
|
||||
//Mountain Time
|
||||
ZonedDateTime mt = now.withZoneSameInstant(ZoneId.of("America/Denver"));
|
||||
|
||||
// UTC time
|
||||
ZonedDateTime utc = now.withZoneSameInstant(ZoneId.of("UTC"));
|
||||
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm a");
|
||||
|
||||
// We are going to display this
|
||||
String displayTimes = et.format(formatter) + " ET / " + mt.format(formatter) + " MT / " + utc.format(formatter) + " UTC";
|
||||
|
||||
return displayTimes;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
package edu.wgu.d387_sample_code.Timezones;
|
||||
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@CrossOrigin(origins = "http://localhost:4200")
|
||||
@RestController
|
||||
public class TimeZoneController {
|
||||
|
||||
@GetMapping("/live")
|
||||
public ResponseEntity<String> livePresentation() {
|
||||
String times = "Please join us LIVE for an online presentation starting: " + TimeConverter.getTime();
|
||||
return new ResponseEntity<String>(times, HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
37
src/main/java/edu/wgu/d387_sample_code/config/ApiConfig.java
Normal file
@ -0,0 +1,37 @@
|
||||
package edu.wgu.d387_sample_code.config;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.ObjectWriter;
|
||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
|
||||
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
|
||||
@Configuration
|
||||
public class ApiConfig implements WebMvcConfigurer{
|
||||
|
||||
//Not needing the object member is a change in recent versions of spring.
|
||||
|
||||
// @Bean
|
||||
// public ObjectMapper objectMapper() {
|
||||
// ObjectMapper objectMapper = new ObjectMapper();
|
||||
// objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||
// objectMapper.registerModule(new JavaTimeModule());
|
||||
//
|
||||
//
|
||||
// return new ObjectMapper();
|
||||
// }
|
||||
//
|
||||
// @Bean
|
||||
// public ObjectWriter objectWriter(ObjectMapper objectMapper) {
|
||||
// return objectMapper.writerWithDefaultPrettyPrinter();
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
package edu.wgu.d387_sample_code.config;
|
||||
|
||||
|
||||
import edu.wgu.d387_sample_code.convertor.ReservationEntityToReservationResponseConverter;
|
||||
import edu.wgu.d387_sample_code.convertor.ReservationRequestToReservationEntityConverter;
|
||||
import edu.wgu.d387_sample_code.convertor.RoomEntityToReservableRoomResponseConverter;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.support.ConversionServiceFactoryBean;
|
||||
import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@Configuration public class ConversionConfig {
|
||||
|
||||
@Autowired
|
||||
ApplicationContext context;
|
||||
|
||||
private Set<Converter> getConverters() {
|
||||
Set<Converter> converters = new HashSet<Converter>();
|
||||
converters.add(new RoomEntityToReservableRoomResponseConverter());
|
||||
converters.add(new ReservationRequestToReservationEntityConverter(context));
|
||||
converters.add(new ReservationEntityToReservationResponseConverter());
|
||||
|
||||
return converters;
|
||||
}
|
||||
|
||||
@Bean public ConversionService conversionService() {
|
||||
ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean();
|
||||
bean.setConverters(getConverters());
|
||||
bean.afterPropertiesSet();
|
||||
|
||||
return bean.getObject();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
package edu.wgu.d387_sample_code.config;
|
||||
|
||||
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
|
||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
|
||||
@EnableJpaRepositories("com.linkedin.learning.repository")
|
||||
@EnableTransactionManagement
|
||||
public class DatabaseConfig {
|
||||
|
||||
}
|
||||