commit e00709b1116662001b04274ccf9052a872f55323 Author: palnet Date: Mon May 16 09:54:22 2022 +0900 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8eae325 --- /dev/null +++ b/.gitignore @@ -0,0 +1,243 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/eclipse,intellij,windows,macos +# Edit at https://www.toptal.com/developers/gitignore?templates=eclipse,intellij,windows,macos + +### Eclipse ### +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders +.classpath +.project +target +*/target/** + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# CDT- autotools +.autotools + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Annotation Processing +.apt_generated/ +.apt_generated_test/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet + +# Uncomment this line if you wish to ignore the project description file. +# Typically, this file would be tracked if it contains build/dependency configurations: +#.project + +### Eclipse Patch ### +# Spring Boot Tooling +.sts4-cache/ + +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.toptal.com/developers/gitignore/api/eclipse,intellij,windows,macos \ No newline at end of file diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000..c1dd12f Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..b7cb93e --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar diff --git a/HELP.md b/HELP.md new file mode 100644 index 0000000..7fc6fc8 --- /dev/null +++ b/HELP.md @@ -0,0 +1,22 @@ +# Getting Started + +### Reference Documentation +For further reference, please consider the following sections: + +* [Official Apache Maven documentation](https://maven.apache.org/guides/index.html) +* [Spring Boot Maven Plugin Reference Guide](https://docs.spring.io/spring-boot/docs/2.6.7/maven-plugin/reference/html/) +* [Create an OCI image](https://docs.spring.io/spring-boot/docs/2.6.7/maven-plugin/reference/html/#build-image) +* [Spring REST Docs](https://docs.spring.io/spring-restdocs/docs/current/reference/html5/) +* [Validation](https://docs.spring.io/spring-boot/docs/2.6.7/reference/htmlsingle/#boot-features-validation) +* [Spring Data JPA](https://docs.spring.io/spring-boot/docs/2.6.7/reference/htmlsingle/#boot-features-jpa-and-spring-data) +* [Spring Web](https://docs.spring.io/spring-boot/docs/2.6.7/reference/htmlsingle/#boot-features-developing-web-applications) + +### Guides +The following guides illustrate how to use some features concretely: + +* [Validation](https://spring.io/guides/gs/validating-form-input/) +* [Accessing Data with JPA](https://spring.io/guides/gs/accessing-data-jpa/) +* [Building a RESTful Web Service](https://spring.io/guides/gs/rest-service/) +* [Serving Web Content with Spring MVC](https://spring.io/guides/gs/serving-web-content/) +* [Building REST services with Spring](https://spring.io/guides/tutorials/bookmarks/) + diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..8a8fb22 --- /dev/null +++ b/mvnw @@ -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 "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..1d8ab01 --- /dev/null +++ b/mvnw.cmd @@ -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% diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..a057331 --- /dev/null +++ b/pom.xml @@ -0,0 +1,143 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.6.7 + + + com.example + pal_framework + 0.0.1-SNAPSHOT + pal_framework + pal_framework + + 11 + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-devtools + + + org.springframework.boot + spring-boot-starter-web + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.restdocs + spring-restdocs-mockmvc + test + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.2.2 + + + org.springframework.boot + spring-boot-starter-data-jdbc + + + javax.servlet + jstl + + + org.apache.tomcat.embed + tomcat-embed-jasper + + + mysql + mysql-connector-java + runtime + + + io.springfox + springfox-boot-starter + 3.0.0 + + + io.springfox + springfox-swagger-ui + 3.0.0 + + + org.modelmapper + modelmapper + 3.1.0 + + + + com.github.pagehelper + pagehelper-spring-boot-starter + 1.4.2 + + + + + + + + + + + org.asciidoctor + asciidoctor-maven-plugin + 1.5.8 + + + generate-docs + prepare-package + + process-asciidoc + + + html + book + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + diff --git a/src/main/java/com/palnet/board/PalFrameworkApplication.java b/src/main/java/com/palnet/board/PalFrameworkApplication.java new file mode 100644 index 0000000..891d38a --- /dev/null +++ b/src/main/java/com/palnet/board/PalFrameworkApplication.java @@ -0,0 +1,13 @@ +package com.palnet.board; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class PalFrameworkApplication { + + public static void main(String[] args) { + SpringApplication.run(PalFrameworkApplication.class, args); + } + +} diff --git a/src/main/java/com/palnet/board/app/controller/BoardController.java b/src/main/java/com/palnet/board/app/controller/BoardController.java new file mode 100644 index 0000000..c8a70f5 --- /dev/null +++ b/src/main/java/com/palnet/board/app/controller/BoardController.java @@ -0,0 +1,21 @@ +package com.palnet.board.app.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class BoardController { + + @GetMapping("/") + public String main() { + + return "main"; + } + + @GetMapping("/board/list") + public String list() { + + return "board/list"; + } + +} diff --git a/src/main/java/com/palnet/board/app/controller/BoardRestController.java b/src/main/java/com/palnet/board/app/controller/BoardRestController.java new file mode 100644 index 0000000..20fcb6f --- /dev/null +++ b/src/main/java/com/palnet/board/app/controller/BoardRestController.java @@ -0,0 +1,32 @@ +package com.palnet.board.app.controller; + +import com.palnet.board.app.dto.RequestBoard; +import com.palnet.board.app.dto.ResponseBoard; +import com.palnet.board.app.sample.service.SampleBoardService; +import com.palnet.board.app.service.BoardService; + +import lombok.RequiredArgsConstructor; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequiredArgsConstructor +@RestController +@RequestMapping("/api/board") +public class BoardRestController { + + private BoardService boardService; + + @GetMapping("/sample") + public ResponseEntity test(@RequestBody RequestBoard requestBoard) throws Exception { + ResponseBoard responseBoard = boardService.test(requestBoard); + return ResponseEntity.status(HttpStatus.OK).body(responseBoard); + } + +} + diff --git a/src/main/java/com/palnet/board/app/dto/BoardDto.java b/src/main/java/com/palnet/board/app/dto/BoardDto.java new file mode 100644 index 0000000..8adcacd --- /dev/null +++ b/src/main/java/com/palnet/board/app/dto/BoardDto.java @@ -0,0 +1,13 @@ +package com.palnet.board.app.dto; + +import lombok.Data; + + +@Data +public class BoardDto { + private int sample_sno; + private String sample1; + private String sample2; + + // 필요한 필드 추가 +} \ No newline at end of file diff --git a/src/main/java/com/palnet/board/app/dto/RequestBoard.java b/src/main/java/com/palnet/board/app/dto/RequestBoard.java new file mode 100644 index 0000000..98ca64e --- /dev/null +++ b/src/main/java/com/palnet/board/app/dto/RequestBoard.java @@ -0,0 +1,10 @@ +package com.palnet.board.app.dto; + +import lombok.Data; + +@Data +public class RequestBoard { + private int sample_sno; + + // 필요한 필드 추가 +} diff --git a/src/main/java/com/palnet/board/app/dto/ResponseBoard.java b/src/main/java/com/palnet/board/app/dto/ResponseBoard.java new file mode 100644 index 0000000..0530444 --- /dev/null +++ b/src/main/java/com/palnet/board/app/dto/ResponseBoard.java @@ -0,0 +1,10 @@ +package com.palnet.board.app.dto; + +import lombok.Data; + +@Data +public class ResponseBoard { + private String sample; + + // 필요한 필드 추가 +} diff --git a/src/main/java/com/palnet/board/app/jh/controller/JunheeBoardController.java b/src/main/java/com/palnet/board/app/jh/controller/JunheeBoardController.java new file mode 100644 index 0000000..27e49ae --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/controller/JunheeBoardController.java @@ -0,0 +1,60 @@ +package com.palnet.board.app.jh.controller; + + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; + +import lombok.extern.log4j.Log4j2; +import lombok.extern.slf4j.Slf4j; + +@Controller +@RequestMapping("/view/jh/board") +@Slf4j +public class JunheeBoardController { + + @GetMapping("/") + public String main() { + return "main"; + } + + @GetMapping("/list") + public String list() { + log.info("list로 이동"); + + return "/jh/board/list"; + } + + @GetMapping("/list/{pageNum}") + public String list(@PathVariable String pageNum, Model model) { + log.info("list로 이동"); + model.addAttribute("pageNum", pageNum); + + return "/jh/board/list"; + } + + @GetMapping("/detailView/{id}") + public String detailView(@PathVariable String id, Model model) { + log.info("detailView로 이동"); + model.addAttribute("id", id); + + return "/jh/board/detailView"; + } + + @GetMapping("/write") + public String write() { + log.info("글쓰기로 이동"); + return "jh/board/write"; + } + + @GetMapping("/modify/{id}") + public String modify(@PathVariable String id, Model model) { + log.info("modify로 이동"); + model.addAttribute("id", id); + + return "/jh/board/modify"; + } + +} diff --git a/src/main/java/com/palnet/board/app/jh/controller/JunheeBoardRestController.java b/src/main/java/com/palnet/board/app/jh/controller/JunheeBoardRestController.java new file mode 100644 index 0000000..2f687fd --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/controller/JunheeBoardRestController.java @@ -0,0 +1,90 @@ +package com.palnet.board.app.jh.controller; + +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.palnet.board.app.jh.dto.JunheePageDto; +import com.palnet.board.app.jh.dto.JunheeRequestBoard; +import com.palnet.board.app.jh.dto.JunheeResponseBoard; +import com.palnet.board.app.jh.dto.JunheeResponsePrevNext; +import com.palnet.board.app.jh.service.JunheeBoardService; + +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@RestController +@RequestMapping("/api/jh/board") +public class JunheeBoardRestController { + + final static Logger log = LoggerFactory.getLogger(JunheeBoardRestController.class); + + private final JunheeBoardService BoardService; + + @GetMapping("/detailView/{id}") + public ResponseEntity detailView(@PathVariable String id) throws Exception { + JunheeResponseBoard responseBoard = BoardService.detailView(id); + + return ResponseEntity.status(HttpStatus.OK).body(responseBoard); + } + + @PostMapping("/write") + public ResponseEntity boardWrite(JunheeRequestBoard requestBoard) throws Exception { + int result = BoardService.boardWrite(requestBoard); + + return ResponseEntity.status(HttpStatus.OK).body(result); + } + + @DeleteMapping("/delete/{id}") + public ResponseEntity boardDelete(@PathVariable String id) throws Exception { + int result = BoardService.boardDelete(id); + + return ResponseEntity.status(HttpStatus.OK).body(result); + } + + @PutMapping("/modify") + public ResponseEntity boardModify(JunheeRequestBoard requestBoard) throws Exception { + int result = BoardService.boardModify(requestBoard); + + return ResponseEntity.status(HttpStatus.OK).body(result); + } + + @GetMapping("/boardMaxId") + public ResponseEntity boardMaxId() throws Exception { + int boardMaxId = BoardService.boardMaxId(); + + return ResponseEntity.status(HttpStatus.OK).body(boardMaxId); + } + + @GetMapping("/page/{pageNum}") + public ResponseEntity> selectListPage(@PathVariable int pageNum) throws Exception { + List responseBoard = BoardService.selectListPage(pageNum); + + return ResponseEntity.status(HttpStatus.OK).body(responseBoard); + } + + @GetMapping("/pageHelp") + public ResponseEntity pageHelp() throws Exception { + JunheePageDto pageDto = BoardService.pageHelp(); + + return ResponseEntity.status(HttpStatus.OK).body(pageDto); + } + + @GetMapping("/boardPrevNext/{id}") + public ResponseEntity> boardPrevNext(@PathVariable int id) throws Exception { + List response = BoardService.boardPrevNext(id); + + return ResponseEntity.status(HttpStatus.OK).body(response); + } + +} diff --git a/src/main/java/com/palnet/board/app/jh/controller/JunheeReplyController.java b/src/main/java/com/palnet/board/app/jh/controller/JunheeReplyController.java new file mode 100644 index 0000000..af630af --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/controller/JunheeReplyController.java @@ -0,0 +1,13 @@ +package com.palnet.board.app.jh.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +import lombok.extern.slf4j.Slf4j; + +@Controller +@RequestMapping("/view/jh/reply") +@Slf4j +public class JunheeReplyController { + +} diff --git a/src/main/java/com/palnet/board/app/jh/controller/JunheeReplyRestController.java b/src/main/java/com/palnet/board/app/jh/controller/JunheeReplyRestController.java new file mode 100644 index 0000000..65c0532 --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/controller/JunheeReplyRestController.java @@ -0,0 +1,36 @@ +package com.palnet.board.app.jh.controller; + +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.palnet.board.app.jh.dto.JunheeReplyDto; +import com.palnet.board.app.jh.dto.JunheeResponseReply; +import com.palnet.board.app.jh.service.JunheeReplyService; + +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@RestController +@RequestMapping("/api/jh/reply") +public class JunheeReplyRestController { + + final static Logger log = LoggerFactory.getLogger(JunheeReplyRestController.class); + + private final JunheeReplyService ReplyService; + + @GetMapping("/boardReply/{boardId}") + public ResponseEntity> viewReply(@PathVariable int boardId) throws Exception { + List responseReply = ReplyService.viewReply(boardId); + + return ResponseEntity.status(HttpStatus.OK).body(responseReply); + } + +} diff --git a/src/main/java/com/palnet/board/app/jh/dto/JunheeBoardDto.java b/src/main/java/com/palnet/board/app/jh/dto/JunheeBoardDto.java new file mode 100644 index 0000000..ea331ef --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/dto/JunheeBoardDto.java @@ -0,0 +1,17 @@ +package com.palnet.board.app.jh.dto; + +import lombok.Data; +import org.apache.ibatis.type.Alias; + +@Data +@Alias("JunheeBoardDto") +public class JunheeBoardDto { + private int id; + private String title; + private String content; + private String password; + private String updUser; + private String updDtm; + private String regUser; + private String regDtm; +} diff --git a/src/main/java/com/palnet/board/app/jh/dto/JunheePageDto.java b/src/main/java/com/palnet/board/app/jh/dto/JunheePageDto.java new file mode 100644 index 0000000..8a48c33 --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/dto/JunheePageDto.java @@ -0,0 +1,11 @@ +package com.palnet.board.app.jh.dto; + +import lombok.Data; +import org.apache.ibatis.type.Alias; + +@Data +@Alias("JunheePageDto") +public class JunheePageDto { + private int maxPageNum; + private int boardCount; +} diff --git a/src/main/java/com/palnet/board/app/jh/dto/JunheeReplyDto.java b/src/main/java/com/palnet/board/app/jh/dto/JunheeReplyDto.java new file mode 100644 index 0000000..7f834dd --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/dto/JunheeReplyDto.java @@ -0,0 +1,22 @@ +package com.palnet.board.app.jh.dto; + +import java.util.List; + +import org.apache.ibatis.type.Alias; + +import lombok.Data; + +@Data +@Alias("JunheeReplyDto") +public class JunheeReplyDto { + private int id; + private int boardId; + private int targetId; + private String content; + private String updUser; + private String updDtm; + private String regUser; + private String regDate; + + private List targetReplys; +} diff --git a/src/main/java/com/palnet/board/app/jh/dto/JunheeRequestBoard.java b/src/main/java/com/palnet/board/app/jh/dto/JunheeRequestBoard.java new file mode 100644 index 0000000..8d36634 --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/dto/JunheeRequestBoard.java @@ -0,0 +1,18 @@ +package com.palnet.board.app.jh.dto; + +import lombok.Data; +import org.apache.ibatis.type.Alias; + +@Data +public class JunheeRequestBoard { + /* 글 작성(insert)시 사용 */ + int id; + String title; + String content; + String password; + String regUser; + String regDtm; + String updUser; + String updDtm; + +} diff --git a/src/main/java/com/palnet/board/app/jh/dto/JunheeResponseBoard.java b/src/main/java/com/palnet/board/app/jh/dto/JunheeResponseBoard.java new file mode 100644 index 0000000..5b033f0 --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/dto/JunheeResponseBoard.java @@ -0,0 +1,15 @@ +package com.palnet.board.app.jh.dto; + +import lombok.Data; + +@Data +public class JunheeResponseBoard { + private int id; + private String password; + private String title; + private String content; + private String regUser; + private String regDtm; + private String updUser; +// private String updDtm; +} diff --git a/src/main/java/com/palnet/board/app/jh/dto/JunheeResponsePrevNext.java b/src/main/java/com/palnet/board/app/jh/dto/JunheeResponsePrevNext.java new file mode 100644 index 0000000..6ad7c3a --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/dto/JunheeResponsePrevNext.java @@ -0,0 +1,9 @@ +package com.palnet.board.app.jh.dto; + +import lombok.Data; + +@Data +public class JunheeResponsePrevNext { + private int id; + private String title; +} diff --git a/src/main/java/com/palnet/board/app/jh/dto/JunheeResponseReply.java b/src/main/java/com/palnet/board/app/jh/dto/JunheeResponseReply.java new file mode 100644 index 0000000..90cbbd8 --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/dto/JunheeResponseReply.java @@ -0,0 +1,18 @@ +package com.palnet.board.app.jh.dto; + +import java.util.ArrayList; +import java.util.List; + +import lombok.Data; + +@Data +public class JunheeResponseReply { + private int id; + private int boardId; + private int targetId; + private String content; + private String regUser; + private String regDate; + + private List targetReplys; +} diff --git a/src/main/java/com/palnet/board/app/jh/mapper/JunheeBoardMapper.java b/src/main/java/com/palnet/board/app/jh/mapper/JunheeBoardMapper.java new file mode 100644 index 0000000..589dd0f --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/mapper/JunheeBoardMapper.java @@ -0,0 +1,31 @@ +package com.palnet.board.app.jh.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import com.palnet.board.app.jh.dto.JunheeBoardDto; +import com.palnet.board.app.jh.dto.JunheeRequestBoard; +import com.palnet.board.app.jh.dto.JunheeResponsePrevNext; + + +@Mapper +public interface JunheeBoardMapper { + + JunheeBoardDto detailView(String id) throws Exception; + + int boardWrite(JunheeRequestBoard requestBoard) throws Exception; + + int boardDelete(String id) throws Exception; + + int boardModify(JunheeRequestBoard requestBoard) throws Exception; + + int boardMaxId() throws Exception; + + List selectListPage(@Param("startNum") int startNum, @Param("endNum") int endNum) throws Exception; + + int boardCount() throws Exception; + + List boardPrevNext(int id) throws Exception; +} diff --git a/src/main/java/com/palnet/board/app/jh/mapper/JunheeBoardMapper.xml b/src/main/java/com/palnet/board/app/jh/mapper/JunheeBoardMapper.xml new file mode 100644 index 0000000..f06d80c --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/mapper/JunheeBoardMapper.xml @@ -0,0 +1,110 @@ + + + + + + + + INSERT INTO TB_COM_BOARD( + ID, + TITLE, + CONTENT, + PASSWORD, + UPD_USER, + UPD_DTM, + REG_USER, + REG_DTM + )VALUES( + #{id}, + #{title}, + #{content}, + #{password}, + null, + null, + #{regUser}, + SYSDATE() + ); + + + + DELETE + FROM TB_COM_BOARD + WHERE ID = #{id} + + + + UPDATE + TB_COM_BOARD + SET + TITLE = #{title}, + CONTENT = #{content}, + PASSWORD = #{password}, + UPD_USER = #{updUser}, + UPD_DTM = SYSDATE() + WHERE + ID = #{id} + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/palnet/board/app/jh/mapper/JunheeReplyMapper.java b/src/main/java/com/palnet/board/app/jh/mapper/JunheeReplyMapper.java new file mode 100644 index 0000000..5e532c3 --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/mapper/JunheeReplyMapper.java @@ -0,0 +1,17 @@ +package com.palnet.board.app.jh.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; + +import com.palnet.board.app.jh.dto.JunheeReplyDto; +import com.palnet.board.app.jh.dto.JunheeResponseReply; + +@Mapper +public interface JunheeReplyMapper { + + List viewReply(int boardId) throws Exception; + + List targetDivide(int id) throws Exception; + +} diff --git a/src/main/java/com/palnet/board/app/jh/mapper/JunheeReplyMapper.xml b/src/main/java/com/palnet/board/app/jh/mapper/JunheeReplyMapper.xml new file mode 100644 index 0000000..7cc6e22 --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/mapper/JunheeReplyMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/palnet/board/app/jh/service/JunheeBoardService.java b/src/main/java/com/palnet/board/app/jh/service/JunheeBoardService.java new file mode 100644 index 0000000..fba1353 --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/service/JunheeBoardService.java @@ -0,0 +1,27 @@ +package com.palnet.board.app.jh.service; + +import java.util.List; + +import com.palnet.board.app.jh.dto.JunheePageDto; +import com.palnet.board.app.jh.dto.JunheeRequestBoard; +import com.palnet.board.app.jh.dto.JunheeResponseBoard; +import com.palnet.board.app.jh.dto.JunheeResponsePrevNext; + +public interface JunheeBoardService { + + JunheeResponseBoard detailView(String id) throws Exception; + + int boardWrite(JunheeRequestBoard requestBoard) throws Exception; + + int boardDelete(String id) throws Exception; + + int boardModify(JunheeRequestBoard requestBoard) throws Exception; + + int boardMaxId() throws Exception; + + List selectListPage(int pageNum) throws Exception; + + JunheePageDto pageHelp() throws Exception; + + List boardPrevNext(int id) throws Exception; +} diff --git a/src/main/java/com/palnet/board/app/jh/service/JunheeBoardServiceImpl.java b/src/main/java/com/palnet/board/app/jh/service/JunheeBoardServiceImpl.java new file mode 100644 index 0000000..754aef0 --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/service/JunheeBoardServiceImpl.java @@ -0,0 +1,137 @@ +package com.palnet.board.app.jh.service; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.stereotype.Service; + +import com.palnet.board.app.jh.dto.JunheeBoardDto; +import com.palnet.board.app.jh.dto.JunheePageDto; +import com.palnet.board.app.jh.dto.JunheeRequestBoard; +import com.palnet.board.app.jh.dto.JunheeResponseBoard; +import com.palnet.board.app.jh.dto.JunheeResponsePrevNext; +import com.palnet.board.app.jh.mapper.JunheeBoardMapper; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + + +@RequiredArgsConstructor +@Service +@Slf4j +public class JunheeBoardServiceImpl implements JunheeBoardService{ + + private final JunheeBoardMapper BoardMapper; + + + /* 글 상세보기 */ + @Override + public JunheeResponseBoard detailView(String id) throws Exception { + JunheeBoardDto boardDto = BoardMapper.detailView(id); + + JunheeResponseBoard responseBoard = new JunheeResponseBoard(); + responseBoard.setId(boardDto.getId()); + responseBoard.setPassword(boardDto.getPassword()); + responseBoard.setTitle(boardDto.getTitle()); + responseBoard.setContent(boardDto.getContent()); + responseBoard.setRegUser(boardDto.getRegUser()); + responseBoard.setRegDtm(boardDto.getRegDtm()); + responseBoard.setUpdUser(boardDto.getUpdUser()); + + return responseBoard; + } + + /* 글 작성하기 */ + @Override + public int boardWrite(JunheeRequestBoard requestBoard) throws Exception { + int result = BoardMapper.boardWrite(requestBoard); + return result; + } + + /* 글 삭제하기 */ + @Override + public int boardDelete(String id) throws Exception { + int result = BoardMapper.boardDelete(id); + return result; + } + + /* 글 수정하기 */ + @Override + public int boardModify(JunheeRequestBoard requestBoard) throws Exception { + int result = BoardMapper.boardModify(requestBoard); + return result; + } + + /* 글 번호 자동부여 */ + @Override + public int boardMaxId() throws Exception{ + int boardId = BoardMapper.boardMaxId(); + return boardId; + } + + + /* 쿼리문으로 페이징하기 */ + @Override + public List selectListPage(int pageNum) throws Exception { + + int endNum = 7; + int startNum = (pageNum * endNum) - endNum; + + List boardDto = BoardMapper.selectListPage(startNum, endNum); + List boardList = new ArrayList(); + + for(JunheeBoardDto board : boardDto) { + JunheeResponseBoard responseBoard = new JunheeResponseBoard(); + + responseBoard.setId(board.getId()); + responseBoard.setTitle(board.getTitle()); + responseBoard.setRegUser(board.getRegUser()); + responseBoard.setRegDtm(board.getRegDtm()); + responseBoard.setUpdUser(board.getUpdUser()); + + boardList.add(responseBoard); + } + + return boardList; + } + + /* 전체 게시글 수 & 마지막 페이지 숫자 */ + @Override + public JunheePageDto pageHelp() throws Exception { + int boardCount = BoardMapper.boardCount(); + int boardViewCount = 7; //화면에 보여지는 게시글 수 + int maxPageNum = 0; + + if((boardCount % boardViewCount) == 0) { + maxPageNum = boardCount/boardViewCount; + } else { + maxPageNum = (boardCount/boardViewCount) + 1; + } + + JunheePageDto pageDto = new JunheePageDto(); + pageDto.setBoardCount(boardCount); + pageDto.setMaxPageNum(maxPageNum); + + return pageDto; + } + + /* 이전글 / 다음글 id, title */ + @Override + public List boardPrevNext(int id) throws Exception { + List boardPrevNext = BoardMapper.boardPrevNext(id); + List boardList = new ArrayList(); + + for(JunheeResponsePrevNext board : boardPrevNext) { + JunheeResponsePrevNext responseBoard = new JunheeResponsePrevNext(); + + responseBoard.setId(board.getId()); + responseBoard.setTitle(board.getTitle()); + + boardList.add(responseBoard); + } + + return boardList; + } + + +} diff --git a/src/main/java/com/palnet/board/app/jh/service/JunheeReplyService.java b/src/main/java/com/palnet/board/app/jh/service/JunheeReplyService.java new file mode 100644 index 0000000..18ec430 --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/service/JunheeReplyService.java @@ -0,0 +1,12 @@ +package com.palnet.board.app.jh.service; + +import java.util.List; + +import com.palnet.board.app.jh.dto.JunheeReplyDto; +import com.palnet.board.app.jh.dto.JunheeResponseReply; + +public interface JunheeReplyService { + + List viewReply(int boardId) throws Exception; + +} diff --git a/src/main/java/com/palnet/board/app/jh/service/JunheeReplyServiceImpl.java b/src/main/java/com/palnet/board/app/jh/service/JunheeReplyServiceImpl.java new file mode 100644 index 0000000..023bf47 --- /dev/null +++ b/src/main/java/com/palnet/board/app/jh/service/JunheeReplyServiceImpl.java @@ -0,0 +1,43 @@ +package com.palnet.board.app.jh.service; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import org.modelmapper.ModelMapper; +import org.springframework.stereotype.Service; + +import com.palnet.board.app.jh.dto.JunheeReplyDto; +import com.palnet.board.app.jh.dto.JunheeResponseReply; +import com.palnet.board.app.jh.mapper.JunheeReplyMapper; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RequiredArgsConstructor +@Service +@Slf4j +public class JunheeReplyServiceImpl implements JunheeReplyService { + + private final JunheeReplyMapper ReplyMapper; + + @Override + public List viewReply(int boardId) throws Exception { + List replyParent = ReplyMapper.viewReply(boardId); //전체 댓글 + + List targetReply = new ArrayList<>(); //자식 댓글 담을 곳 + for(JunheeReplyDto reply : replyParent) { + targetReply = ReplyMapper.targetDivide(reply.getId()); //자식 댓글 담기~ + + reply.setTargetReplys(targetReply); + } + + List responseReply = new ArrayList(); //최종 담을 객체 + + /* 자식까지 담은 부모를 response로 한번에 담기! */ + responseReply = replyParent.stream().map(reply -> + new ModelMapper().map(reply, JunheeResponseReply.class)).collect(Collectors.toList()); + + return responseReply; + } +} diff --git a/src/main/java/com/palnet/board/app/jw/controller/JwBoardController.java b/src/main/java/com/palnet/board/app/jw/controller/JwBoardController.java new file mode 100644 index 0000000..cc50f40 --- /dev/null +++ b/src/main/java/com/palnet/board/app/jw/controller/JwBoardController.java @@ -0,0 +1,48 @@ +package com.palnet.board.app.jw.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.palnet.board.app.dto.BoardDto; +import com.palnet.board.app.service.BoardService; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Controller +@RequestMapping("/view/jw/board") +public class JwBoardController { + + + @GetMapping("/list") + public String list() { + + return "jw/board/list"; + } + + @GetMapping("/detail/{id}") + public String detail(@PathVariable String id, Model model) { + model.addAttribute("id", id); + log.info(">> {}", id); + return "jw/board/detail"; + } + @GetMapping("/write") + public String write() { + + return "jw/board/write"; + } + @GetMapping("/modify/{id}") + public String update(@PathVariable String id, Model model) { + model.addAttribute("id", id); + return "jw/board/modify"; + } + + +} diff --git a/src/main/java/com/palnet/board/app/jw/controller/JwBoardRestController.java b/src/main/java/com/palnet/board/app/jw/controller/JwBoardRestController.java new file mode 100644 index 0000000..48b285a --- /dev/null +++ b/src/main/java/com/palnet/board/app/jw/controller/JwBoardRestController.java @@ -0,0 +1,116 @@ +package com.palnet.board.app.jw.controller; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.palnet.board.app.jw.dto.JwBoardDto; +import com.palnet.board.app.jw.service.JwBoardService; + +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@RestController +@RequestMapping("/api/jw/board") +public class JwBoardRestController { + + final static Logger log = LoggerFactory.getLogger(JwBoardRestController.class); + + private final JwBoardService BoardService; + + // 글 목록 조회 + @GetMapping("/list") + public List list() { + return BoardService.list(); + } + + // 글 상세 조회 + @GetMapping("/detail/{id}") + public JwBoardDto detail(@PathVariable Integer id) { + + return BoardService.detail(id); + } + + // 글 등록 + @PostMapping("/create") + public Map create(@RequestBody JwBoardDto rq) { + Map res = new HashMap<>(); + try { + int cnt = BoardService.create(rq); + if (cnt > 0) { + res.put("result", "success"); + } else { + res.put("result", "fail"); + } + } catch (Exception e) { + log.error("{}", e); + res.put("result", "fail"); + } + return res; + } + + // 글 수정 + @PutMapping("/modify/{id}") + public Map update(@RequestBody JwBoardDto rq) { + Map res = new HashMap<>(); + try { + int cnt = BoardService.update(rq); + if (cnt > 0) { + res.put("result", "success"); + } else { + res.put("result", "fail"); + } + } catch (Exception e) { + log.error("{}", e); + res.put("result", "fail"); + } + return res; + } + + // 글 삭제 + @DeleteMapping("/delete/{id}") + public Map delete(@PathVariable Integer id) { + Map res = new HashMap<>(); + try { + int cnt = BoardService.delete(id); + if (cnt > 0) { + res.put("result", "success"); + } else { + res.put("result", "fail"); + } + } catch (Exception e) { + log.error("{}", e); + res.put("result", "fail"); + } + return res; + } + + @PostMapping("/post") + public String post(@RequestBody JwBoardDto boardDto) { + log.debug(">> {}", boardDto); + log.info(">> {}", boardDto); + BoardService.create(boardDto); + return "{}"; + } + + @GetMapping("/index") + public ResponseEntity index() throws Exception{ + int index = BoardService.index(); + return ResponseEntity.status(HttpStatus.OK).body(index); + } + + +} diff --git a/src/main/java/com/palnet/board/app/jw/dto/JwBoardDto.java b/src/main/java/com/palnet/board/app/jw/dto/JwBoardDto.java new file mode 100644 index 0000000..6dd4dc7 --- /dev/null +++ b/src/main/java/com/palnet/board/app/jw/dto/JwBoardDto.java @@ -0,0 +1,21 @@ +package com.palnet.board.app.jw.dto; + +import org.apache.ibatis.type.Alias; + +import lombok.Data; + + +@Data +@Alias("JwBoardDto") +public class JwBoardDto { + private String id; + private String title; + private String content; + private String password; + private String updUser; + private String updDtm; + private String regUser; + private String regDtm; + + // 필요한 필드 추가 +} \ No newline at end of file diff --git a/src/main/java/com/palnet/board/app/jw/mapper/JwBoardMapper.java b/src/main/java/com/palnet/board/app/jw/mapper/JwBoardMapper.java new file mode 100644 index 0000000..fc524f1 --- /dev/null +++ b/src/main/java/com/palnet/board/app/jw/mapper/JwBoardMapper.java @@ -0,0 +1,17 @@ +package com.palnet.board.app.jw.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; + +import com.palnet.board.app.jw.dto.JwBoardDto; + +@Mapper +public interface JwBoardMapper { + public List list(); + public JwBoardDto detail(Integer id); + public int insert(JwBoardDto rq); + public int update(JwBoardDto rq); + public int delete(Integer id); + public int index() throws Exception; +} \ No newline at end of file diff --git a/src/main/java/com/palnet/board/app/jw/mapper/JwBoardMapper.xml b/src/main/java/com/palnet/board/app/jw/mapper/JwBoardMapper.xml new file mode 100644 index 0000000..93a5ec9 --- /dev/null +++ b/src/main/java/com/palnet/board/app/jw/mapper/JwBoardMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + INSERT INTO TB_COM_BOARD + ( + + TITLE, + CONTENT, + PASSWORD, + REG_USER, + REG_DTM + ) VALUES ( + + #{title}, + #{content}, + #{password}, + #{regUser}, + now() + ) + + + + + UPDATE + TB_COM_BOARD + SET + + TITLE = #{title}, + + + CONTENT = #{content}, + + + PASSWORD = #{password}, + + + UPD_USER = #{updUser}, + + UPD_DTM = now() + WHERE + ID = #{id} + + + + + DELETE FROM TB_COM_BOARD + WHERE ID = #{id} + + + + \ No newline at end of file diff --git a/src/main/java/com/palnet/board/app/jw/service/JwBoardService.java b/src/main/java/com/palnet/board/app/jw/service/JwBoardService.java new file mode 100644 index 0000000..ca9ecde --- /dev/null +++ b/src/main/java/com/palnet/board/app/jw/service/JwBoardService.java @@ -0,0 +1,16 @@ +package com.palnet.board.app.jw.service; + +import java.util.List; + +import com.palnet.board.app.jw.dto.JwBoardDto; + + +public interface JwBoardService { + public List list(); + public JwBoardDto detail(Integer id); + public int create(JwBoardDto rq); + public int update(JwBoardDto rq); + public int delete(Integer id); + public int index() throws Exception; + + } diff --git a/src/main/java/com/palnet/board/app/jw/service/JwBoardServiceImpl.java b/src/main/java/com/palnet/board/app/jw/service/JwBoardServiceImpl.java new file mode 100644 index 0000000..4f01c12 --- /dev/null +++ b/src/main/java/com/palnet/board/app/jw/service/JwBoardServiceImpl.java @@ -0,0 +1,51 @@ +package com.palnet.board.app.jw.service; + +import java.util.List; + +import org.springframework.stereotype.Service; + +import com.palnet.board.app.jw.dto.JwBoardDto; +import com.palnet.board.app.jw.mapper.JwBoardMapper; +import com.palnet.board.app.mapper.BoardMapper; + +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Service +public class JwBoardServiceImpl implements JwBoardService { + + private final JwBoardMapper BoardMapper; + + @Override + public List list() { + return BoardMapper.list(); + } + + @Override + public JwBoardDto detail(Integer id) { + return BoardMapper.detail(id); + } + + @Override + public int create(JwBoardDto rq) { + return BoardMapper.insert(rq); + } + + @Override + public int update(JwBoardDto rq) { + + return BoardMapper.update(rq); + } + + @Override + public int delete(Integer id) { + return BoardMapper.delete(id); + } + @Override + public int index() throws Exception { + int boardId = BoardMapper.index(); + return boardId; + } + + + } diff --git a/src/main/java/com/palnet/board/app/mapper/BoardMapper.java b/src/main/java/com/palnet/board/app/mapper/BoardMapper.java new file mode 100644 index 0000000..3ee5743 --- /dev/null +++ b/src/main/java/com/palnet/board/app/mapper/BoardMapper.java @@ -0,0 +1,11 @@ +package com.palnet.board.app.mapper; + +import com.palnet.board.app.dto.BoardDto; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface BoardMapper { + + BoardDto selectSample(int sample_sno) throws Exception; + +} diff --git a/src/main/java/com/palnet/board/app/mapper/BoardMapper.xml b/src/main/java/com/palnet/board/app/mapper/BoardMapper.xml new file mode 100644 index 0000000..05a3662 --- /dev/null +++ b/src/main/java/com/palnet/board/app/mapper/BoardMapper.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/palnet/board/app/sample/controller/SampleBoardController.java b/src/main/java/com/palnet/board/app/sample/controller/SampleBoardController.java new file mode 100644 index 0000000..b8bac1e --- /dev/null +++ b/src/main/java/com/palnet/board/app/sample/controller/SampleBoardController.java @@ -0,0 +1,26 @@ +package com.palnet.board.app.sample.controller; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; + +@Slf4j +@Controller +@RequestMapping("/view/sample/board") +public class SampleBoardController { + + @GetMapping("/list") + public String list(){ + return "/sample/board/list"; + } + + @GetMapping("/detail/{id}") + public String detail(@PathVariable Integer id, Model model){ + model.addAttribute("boardId", id); + return "/sample/board/detail"; + } + +} diff --git a/src/main/java/com/palnet/board/app/sample/controller/SampleBoardRestController.java b/src/main/java/com/palnet/board/app/sample/controller/SampleBoardRestController.java new file mode 100644 index 0000000..6d36e14 --- /dev/null +++ b/src/main/java/com/palnet/board/app/sample/controller/SampleBoardRestController.java @@ -0,0 +1,93 @@ +package com.palnet.board.app.sample.controller; + +import com.palnet.board.app.sample.dto.SampleBoardDto; +import com.palnet.board.app.sample.service.SampleBoardService; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@RequiredArgsConstructor +@RestController +@RequestMapping("/api/sample/board") +public class SampleBoardRestController { + + final static Logger log = LoggerFactory.getLogger(SampleBoardRestController.class); + + private final SampleBoardService sampleBoardService; + + // 글 목록 조회 + @GetMapping("/list") + public List list(){ + return sampleBoardService.list(); + } + + // 글 상세 조회 + @GetMapping("/detail/{id}") + public SampleBoardDto detail(@PathVariable Integer id){ + return sampleBoardService.detail(id); + } + + // 글 등록 + @PostMapping("/create") + public Map create(@RequestBody SampleBoardDto rq){ + Map res = new HashMap<>(); + try { + int cnt = sampleBoardService.create(rq); + if(cnt > 0){ + res.put("result", "success"); + } else { + res.put("result", "fail"); + } + } catch (Exception e){ + log.error("{}", e); + res.put("result", "fail"); + } + return res; + } + + + // 글 수정 + @PutMapping("/update") + public Map update(@RequestBody SampleBoardDto rq){ + Map res = new HashMap<>(); + try { + int cnt = sampleBoardService.update(rq); + if(cnt > 0){ + res.put("result", "success"); + } else { + res.put("result", "fail"); + } + } catch (Exception e){ + log.error("{}", e); + res.put("result", "fail"); + } + return res; + } + + + // 글 삭제 + @DeleteMapping("/delete/{id}") + public Map delete(@PathVariable Integer id){ + Map res = new HashMap<>(); + try { + int cnt = sampleBoardService.delete(id); + if(cnt > 0){ + res.put("result", "success"); + } else { + res.put("result", "fail"); + } + } catch (Exception e){ + log.error("{}", e); + res.put("result", "fail"); + } + return res; + } + + +} diff --git a/src/main/java/com/palnet/board/app/sample/dto/SampleBoardDto.java b/src/main/java/com/palnet/board/app/sample/dto/SampleBoardDto.java new file mode 100644 index 0000000..6a4e4c1 --- /dev/null +++ b/src/main/java/com/palnet/board/app/sample/dto/SampleBoardDto.java @@ -0,0 +1,17 @@ +package com.palnet.board.app.sample.dto; + +import lombok.Data; +import org.apache.ibatis.type.Alias; + +@Data +@Alias("sampleBoardDto") +public class SampleBoardDto { + private String id; + private String title; + private String content; + private String password; + private String updUser; + private String updDtm; + private String regUser; + private String regDtm; +} diff --git a/src/main/java/com/palnet/board/app/sample/dto/SampleBoardDto2.java b/src/main/java/com/palnet/board/app/sample/dto/SampleBoardDto2.java new file mode 100644 index 0000000..4926dca --- /dev/null +++ b/src/main/java/com/palnet/board/app/sample/dto/SampleBoardDto2.java @@ -0,0 +1,18 @@ +package com.palnet.board.app.sample.dto; + +import lombok.Data; +import org.apache.ibatis.type.Alias; + +@Data +@Alias("sampleBoardDto2") +public class SampleBoardDto2 { + private String etc; + private String id; + private String title; + private String content; + private String password; + private String updUser; + private String updDtm; + private String regUser; + private String regDtm; +} diff --git a/src/main/java/com/palnet/board/app/sample/mapper/SampleBoardMapper.java b/src/main/java/com/palnet/board/app/sample/mapper/SampleBoardMapper.java new file mode 100644 index 0000000..58d94ca --- /dev/null +++ b/src/main/java/com/palnet/board/app/sample/mapper/SampleBoardMapper.java @@ -0,0 +1,15 @@ +package com.palnet.board.app.sample.mapper; + +import com.palnet.board.app.sample.dto.SampleBoardDto; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface SampleBoardMapper { + public List list(); + public SampleBoardDto detail(Integer id); + public int insert(SampleBoardDto rq); + public int update(SampleBoardDto rq); + public int delete(Integer id); +} diff --git a/src/main/java/com/palnet/board/app/sample/mapper/SampleBoardMapper.xml b/src/main/java/com/palnet/board/app/sample/mapper/SampleBoardMapper.xml new file mode 100644 index 0000000..1a78790 --- /dev/null +++ b/src/main/java/com/palnet/board/app/sample/mapper/SampleBoardMapper.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + INSERT INTO TB_COM_BOARD + ( + TITLE, + CONTENT, + PASSWORD, + REG_USER, + REG_DTM + ) VALUES ( + #{title}, + #{content}, + #{password}, + #{regUser}, + now() + ) + + + + + UPDATE + TB_COM_BOARD + SET + + TITLE = #{title}, + + + CONTENT = #{content}, + + + PASSWORD = #{password}, + + + UPD_USER = #{updUser}, + + UPD_DTM = now() + WHERE + ID = #{id} + + + + + DELETE FROM TB_COM_BOARD + WHERE ID = #{id} + + + \ No newline at end of file diff --git a/src/main/java/com/palnet/board/app/sample/service/SampleBoardService.java b/src/main/java/com/palnet/board/app/sample/service/SampleBoardService.java new file mode 100644 index 0000000..068b2e2 --- /dev/null +++ b/src/main/java/com/palnet/board/app/sample/service/SampleBoardService.java @@ -0,0 +1,13 @@ +package com.palnet.board.app.sample.service; + +import com.palnet.board.app.sample.dto.SampleBoardDto; + +import java.util.List; + +public interface SampleBoardService { + public List list(); + public SampleBoardDto detail(Integer id); + public int create(SampleBoardDto rq); + public int update(SampleBoardDto rq); + public int delete(Integer id); +} diff --git a/src/main/java/com/palnet/board/app/sample/service/SampleBoardServiceImpl.java b/src/main/java/com/palnet/board/app/sample/service/SampleBoardServiceImpl.java new file mode 100644 index 0000000..57105ef --- /dev/null +++ b/src/main/java/com/palnet/board/app/sample/service/SampleBoardServiceImpl.java @@ -0,0 +1,41 @@ +package com.palnet.board.app.sample.service; + +import com.palnet.board.app.sample.dto.SampleBoardDto; +import com.palnet.board.app.sample.mapper.SampleBoardMapper; +import lombok.RequiredArgsConstructor; +import org.modelmapper.ModelMapper; +import org.springframework.stereotype.Service; + +import java.util.List; + +@RequiredArgsConstructor +@Service +public class SampleBoardServiceImpl implements SampleBoardService{ + + private final SampleBoardMapper sampleBoardMapper; + + @Override + public List list() { + return sampleBoardMapper.list(); + } + + @Override + public SampleBoardDto detail(Integer id) { + return sampleBoardMapper.detail(id); + } + + @Override + public int create(SampleBoardDto rq) { + return sampleBoardMapper.insert(rq); + } + + @Override + public int update(SampleBoardDto rq) { + return sampleBoardMapper.update(rq); + } + + @Override + public int delete(Integer id) { + return sampleBoardMapper.delete(id); + } +} diff --git a/src/main/java/com/palnet/board/app/service/BoardService.java b/src/main/java/com/palnet/board/app/service/BoardService.java new file mode 100644 index 0000000..3d01943 --- /dev/null +++ b/src/main/java/com/palnet/board/app/service/BoardService.java @@ -0,0 +1,8 @@ +package com.palnet.board.app.service; + +import com.palnet.board.app.dto.RequestBoard; +import com.palnet.board.app.dto.ResponseBoard; + +public interface BoardService { + ResponseBoard test(RequestBoard requestBoard) throws Exception; +} diff --git a/src/main/java/com/palnet/board/app/service/BoardServiceImpl.java b/src/main/java/com/palnet/board/app/service/BoardServiceImpl.java new file mode 100644 index 0000000..9a31314 --- /dev/null +++ b/src/main/java/com/palnet/board/app/service/BoardServiceImpl.java @@ -0,0 +1,27 @@ +package com.palnet.board.app.service; + +import com.palnet.board.app.dto.BoardDto; +import com.palnet.board.app.dto.RequestBoard; +import com.palnet.board.app.dto.ResponseBoard; +import com.palnet.board.app.mapper.BoardMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class BoardServiceImpl implements BoardService { + + @Autowired + BoardMapper boardMapper; + + @Override + public ResponseBoard test(RequestBoard requestBoard) throws Exception { + + BoardDto boardDto = boardMapper.selectSample(requestBoard.getSample_sno()); + + ResponseBoard responseBoard = new ResponseBoard(); + String result = boardDto.getSample2() + boardDto.getSample2(); + responseBoard.setSample(result); + + return responseBoard; + } +} diff --git a/src/main/java/com/palnet/board/config/SwaggerConfig.java b/src/main/java/com/palnet/board/config/SwaggerConfig.java new file mode 100644 index 0000000..5567876 --- /dev/null +++ b/src/main/java/com/palnet/board/config/SwaggerConfig.java @@ -0,0 +1,23 @@ +package com.palnet.board.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; + +@Configuration +public class SwaggerConfig { + + @Bean + public Docket api(){ + Docket doc = new Docket(DocumentationType.OAS_30) + .select() + .apis(RequestHandlerSelectors.any()) + .paths(PathSelectors.ant("/api/**")) + .build(); + return doc; + } + +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..f9843ac --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,33 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://13.125.97.21:3306/PAL_TEST?characterEncoding=UTF-8&autoReconnect=true&useSSL=false + username: pal_test + password: pal1234 + mvc: + pathmatch: + matching-strategy: ant_path_matcher + view: + prefix: /WEB-INF/view/ + suffix: .jsp + devtoos: + livereload: + enabled: true + +mybatis: + mapper-locations: classpath:com.palnet.board.**.mapper.*.xml + type-aliases-package: com.palnet.board.**.dto + configuration: + map-underscore-to-camel-case: true + +pagehelper: + helper-dialect: mysql + auto-dialect: true + page-size-zero: false + reasonable: true #pageNum을 가능한 값으로 변경해줌 + offset-as-page-num: false + row-bounds-with-count: false + auto-runtime-dialect: false + close-conn: true + support-methods-arguments: true + default-count: true diff --git a/src/main/webapp/WEB-INF/view/board/list.jsp b/src/main/webapp/WEB-INF/view/board/list.jsp new file mode 100644 index 0000000..2c7d901 --- /dev/null +++ b/src/main/webapp/WEB-INF/view/board/list.jsp @@ -0,0 +1,11 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + + + Main + + +board List + + diff --git a/src/main/webapp/WEB-INF/view/jh/board/detailView.jsp b/src/main/webapp/WEB-INF/view/jh/board/detailView.jsp new file mode 100644 index 0000000..6f1069e --- /dev/null +++ b/src/main/webapp/WEB-INF/view/jh/board/detailView.jsp @@ -0,0 +1,284 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> + + +<% //Model로 넘겨받은 객체 불러오는 법ㅠㅠㅠㅠ + String boardId = (String) request.getAttribute("id"); +%> + + + + + + + + + + + + + + View-팔네트웍스 + + + + +
+
+
+ 글쓴이 + +
+
+ 비밀번호 + + +
+
+
+
+ 번호 + +
+
+ 작성일 + +
+
+
+
+ 제목 + +
+
+
+
+ +
+
+ +
+ +
+ + +
+ +
+ 익명305.02 13:00 여기는 댓글 + 정보3333! + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + + + diff --git a/src/main/webapp/WEB-INF/view/jh/board/list.jsp b/src/main/webapp/WEB-INF/view/jh/board/list.jsp new file mode 100644 index 0000000..040f272 --- /dev/null +++ b/src/main/webapp/WEB-INF/view/jh/board/list.jsp @@ -0,0 +1,191 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> + + +<% //Model로 넘겨받은 객체 불러오는 법ㅠㅠㅠㅠ + String pageNum = (String) request.getAttribute("pageNum"); +%> + + + + + + + + + + + + + + + + + List-팔네트웍스 + + + + +
+
+

list

+
+
+ + +
+ + + + + + + + + +
번호제목작성일글쓴이
+
+
+ +
+
+ 글쓰기 +
+
+
+ + + + + diff --git a/src/main/webapp/WEB-INF/view/jh/board/modify.jsp b/src/main/webapp/WEB-INF/view/jh/board/modify.jsp new file mode 100644 index 0000000..e1f277a --- /dev/null +++ b/src/main/webapp/WEB-INF/view/jh/board/modify.jsp @@ -0,0 +1,178 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> + + +<% //Model로 넘겨받은 객체 불러오는 법ㅠㅠㅠㅠ + String boardId = (String) request.getAttribute("id"); +%> + + + + + + + + + + + + + + Write-팔네트웍스 + + + + +
+
+
+ 글쓴이 + + +
+
+ 비밀번호 + + +
+
+
+
+ 번호 + +
+
+ 작성일 + + +
+
+
+
+ 제목 + +
+
+
+
+ + + +
+
+ +
+ 목록 + 수정 +
+
+ + + diff --git a/src/main/webapp/WEB-INF/view/jh/board/write.jsp b/src/main/webapp/WEB-INF/view/jh/board/write.jsp new file mode 100644 index 0000000..22835db --- /dev/null +++ b/src/main/webapp/WEB-INF/view/jh/board/write.jsp @@ -0,0 +1,156 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> + + + + + + + + + + + + + + + + + + + Write-팔네트웍스 + + + + +
+
+
+ 글쓴이 + + +
+
+ 비밀번호 + +
+
+
+
+ 번호 + +
+
+ 작성일 + + +
+
+
+
+ 제목 + +
+
+
+
+ + + +
+
+ +
+ 목록 + 저장 +
+
+ + + diff --git a/src/main/webapp/WEB-INF/view/jw/board/detail.jsp b/src/main/webapp/WEB-INF/view/jw/board/detail.jsp new file mode 100644 index 0000000..7727b25 --- /dev/null +++ b/src/main/webapp/WEB-INF/view/jw/board/detail.jsp @@ -0,0 +1,182 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + + + + + + + + + + + + + + +글 상세 + + + + + +
+
+
+ 글쓴이 +
+
+ 비밀번호 +
+
+
+
+ 번호 +
+
+ 작성일 +
+
+
+
+ 제목 +
+
+
+
+ +
+
+
+ 댓글 39 +
+ + +
+
+ 123pal***05.02 13:00 여기는 댓글 + 정보! +
+
+ 123pal***05.02 13:00 여기는 댓글 + 정보!2222 +
+
+ 123pal***05.02 13:00 여기는 댓글 + 정보3333! +
+ +
+ + +
+
+ 123pal***05.02 13:00 여기는 댓글의 + 댓글(답글)정보! +
+
+ 123pal***05.02 13:00 여기는 댓글의 + 댓글(답글)정보!2222 +
+
+ 123pal***05.02 13:00 여기는 댓글의 + 댓글(답글)정보!3333 +
+
+
+
+ +
+ + + +
+
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/view/jw/board/list.jsp b/src/main/webapp/WEB-INF/view/jw/board/list.jsp new file mode 100644 index 0000000..79872c0 --- /dev/null +++ b/src/main/webapp/WEB-INF/view/jw/board/list.jsp @@ -0,0 +1,94 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + + + + + + + + + + + + + 글 목록 + + + +
+
+ +
+
+ + + + + + + + + + + +
번호제목작성일글쓴이
+
+ << + < + 1 + 2 + 3 + 4 + 5 + > + >> + +
+ + + + + + diff --git a/src/main/webapp/WEB-INF/view/jw/board/modify.jsp b/src/main/webapp/WEB-INF/view/jw/board/modify.jsp new file mode 100644 index 0000000..fe27683 --- /dev/null +++ b/src/main/webapp/WEB-INF/view/jw/board/modify.jsp @@ -0,0 +1,181 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ 글쓴이 +
+
+ 비밀번호 +
+
+
+
+ 번호 +
+
+ 작성일 +
+
+
+
+ 제목 +
+
+
+
+ + +
+
+ + +
+
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/view/jw/board/write.jsp b/src/main/webapp/WEB-INF/view/jw/board/write.jsp new file mode 100644 index 0000000..18e6034 --- /dev/null +++ b/src/main/webapp/WEB-INF/view/jw/board/write.jsp @@ -0,0 +1,134 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + + + + + + + + + + + + + + + + + +
+
+
+
+ 글쓴이 +
+
+ 비밀번호 +
+
+
+
+ 번호 +
+
+ 작성일 +
+
+
+
+ 제목 +
+
+
+
+ + +
+
+ + +
+
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/view/main.jsp b/src/main/webapp/WEB-INF/view/main.jsp new file mode 100644 index 0000000..4f18084 --- /dev/null +++ b/src/main/webapp/WEB-INF/view/main.jsp @@ -0,0 +1,11 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + + + Main + + + board main + + diff --git a/src/main/webapp/WEB-INF/view/sample/board/detail.jsp b/src/main/webapp/WEB-INF/view/sample/board/detail.jsp new file mode 100644 index 0000000..e557f7a --- /dev/null +++ b/src/main/webapp/WEB-INF/view/sample/board/detail.jsp @@ -0,0 +1,124 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + + + + + + + + + + + + View-팔네트웍스 + + + + + +
+
+
+ 글쓴이 + +
+
+ 비밀번호 + +
+
+
+
+ 번호 + 20 +
+
+ 작성일 + 2022/05/02 +
+
+
+
+ 제목 + 다리가 아파요 +
+
+
+
+ + 반깁스 너무 불편하네요. + +
+
+
+ 댓글 39 +
+ + +
+
+ 123pal***05.02 13:00 + 여기는 댓글 정보! +
+
+ 123pal***05.02 13:00 + 여기는 댓글 정보!2222 +
+
+ 123pal***05.02 13:00 + 여기는 댓글 정보3333! +
+ +
+ + +
+
+ 123pal***05.02 13:00 + 여기는 댓글의 댓글(답글)정보! +
+
+ 123pal***05.02 13:00 + 여기는 댓글의 댓글(답글)정보!2222 +
+
+ 123pal***05.02 13:00 + 여기는 댓글의 댓글(답글)정보!3333 +
+
+
+
+ +
+ + +
+
+ + + + diff --git a/src/main/webapp/WEB-INF/view/sample/board/list.jsp b/src/main/webapp/WEB-INF/view/sample/board/list.jsp new file mode 100644 index 0000000..765db54 --- /dev/null +++ b/src/main/webapp/WEB-INF/view/sample/board/list.jsp @@ -0,0 +1,88 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + + + + + + + + + + + + List-팔네트웍스 + + + +
+
+
0
+
+
+ + + + + + + + + + + +
번호제목작성일글쓴이
+
+ << + < + 1 + 2 + 3 + 4 + 5 + > + >> +
+
+ + + + diff --git a/src/main/webapp/web/css/common.css b/src/main/webapp/web/css/common.css new file mode 100644 index 0000000..5f9542f --- /dev/null +++ b/src/main/webapp/web/css/common.css @@ -0,0 +1,61 @@ +@charset "utf-8"; +.notice{max-width:1280px;margin:100px auto;} +table{width:100%;} +table tr th{background:#f4f4f4;} +table tr th, table tr td{padding:12px 10px;text-align:center;border:1px solid #ddd;} +table tbody tr td:nth-child(1){} +table tbody tr td:nth-child(2){text-overflow: ellipsis;white-space: nowrap;overflow: hidden;max-width:700px;} +.page_list{display: flex;align-items: center;justify-content: flex-start;padding:40px 0;} +.page_list a{display:inline-flex;flex-direction:row;justify-content: center;align-items: center;width:35px;height:35px;border:1px solid #ddd;} +.page_list a.page_num{border:0; text-decoration: underline;} + +.page_list a.page_num_un{border:0;} + + +.pg_btn + .pg_btn{margin-left:10px;} +.table_header{display:flex; justify-content: space-between;margin-bottom:20px;} +.notice input{border:1px solid #ddd;} +.row{display:flex;} +.row + .row{margin-top:-1px;} +.row .box{flex:1;display:flex;align-items: center;border:1px solid #ccc;} +.row .box + .box{border-left:0;} +.ti{width:150px;height:60px;background:#f4f4f4;border-right:1px solid #ddd;display:flex;align-items: center;justify-content: center;text-align: center;font-weight:500;} +.box-input{width:calc(100% - 150px);padding:0 20px;} +.box-input input{min-height:40px;width:100%;padding:0 10px;font-size:1rem;} +.box-input.box-textarea{padding:20px 20px 16px 20px;width:100%;} +.box-input.view{cursor:default;} +.box-textarea textarea{border:0;resize:none;width:100%;height:250px;font-size:1rem;border:1px solid #fff;} +nput[type="number"]::-webkit-outer-spin-button, +input[type="number"]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0;} +input:focus{outline:0;border:1px solid #cc9eff;} +textarea:focus{outline:0;border:0;} +button{background:none;border:0;background:#fff;} +button:hover{cursor:pointer;} +.btn-box{display:flex;justify-content: center;margin:40px 0;} +.btn-box .btn + .btn{margin-left:20px;} +.btn{display:flex;align-items: center;justify-content: center;text-align: center;width:150px;height:50px;font-size:1rem;} +.btn.gray{background:#ddd;} +.btn.black{background:#333;color:#fff;} +.page-link{display:flex;flex-direction: column;margin:0 0 40px 0;border-top:1px solid #ddd;padding-top:20px;} +.page-link a + a{margin-top:20px;} +.page-link a{display: flex;align-items: center;border-bottom:1px solid #ddd;padding-bottom:20px;} +.page-link a span{margin-left:40px;max-width: 1000px;display: inline-block;text-overflow: ellipsis;white-space: nowrap;overflow: hidden;} +.page-link a span:hover{text-decoration: underline;} +.comment-box{margin-top:40px;font-size:0.875rem;} +.comment-box .total{font-weight:600;} +.comment-input{display:flex;justify-content:space-between;margin-top:10px;} +.comment-input textarea{border:0;resize:none;width:calc(100% - 130px);height:100px;border:1px solid #333;border-radius:4px;padding:14px;} +.comment-input button{width:120px;height:100px;background:#333;color:#fff;font-weight:500;border-radius:4px;} +.comment-view{border-top:1px solid #ddd;padding-bottom:20px;} +.comment-view .user, .comment-view .text{display:block;} +.comment-view .user{margin:20px 0 10px 0;} +.comment-view .user span.id{font-weight:500;color:#a917d9;} +.comment-view .user span.date{font-size:0.75rem;} +.comment-view .user span{display: inline-block;position: relative;} +.comment-view .user span + span::before {content: '';width: 1px;height: 12px;background-color: #cbcbcb;display: inline-block;margin: 0 10px;} +.reply-box > button{border:1px solid #ddd;margin-top:10px;} +.reply-input{display:flex;justify-content:space-between;margin-top:10px;} +.reply-input textarea{border:0;resize:none;width:calc(100% - 130px);height:42px;border:1px solid #999;border-radius:4px;padding:10px;} +.reply-input button{width:120px;height:42px;background:#333;color:#fff;font-weight:500;border-radius:4px;} +.reply-view{background:#f4f4f4;padding:14px;border-radius:4px;margin:14px 10px 0 10px;} +.reply-view .user{margin:0 0 10px 0;} diff --git a/src/main/webapp/web/css/font.css b/src/main/webapp/web/css/font.css new file mode 100644 index 0000000..bad7743 --- /dev/null +++ b/src/main/webapp/web/css/font.css @@ -0,0 +1,101 @@ +@charset "utf-8"; + +/* 에스코어드림 */ +@font-face { + font-family: 'score'; + font-style: normal; + font-weight: 100; + src:url('font/S-CoreDream-1Thin.eot'); + src:url('font/S-CoreDream-1Thin.eot?#iefix') format('embedded-opentype'), + url('font/S-CoreDream-1Thin.woff') format('woff'), + url('font/S-CoreDream-1Thin.woff2') format('woff2'), + url('font/S-CoreDream-1Thin.ttf') format('truetype'); +} + +@font-face { + font-family: 'score'; + font-style: normal; + font-weight: 200; + src:url('font/S-CoreDream-2ExtraLight.eot'); + src:url('font/S-CoreDream-2ExtraLight.eot?#iefix') format('embedded-opentype'), + url('font/S-CoreDream-2ExtraLight.woff') format('woff'), + url('font/S-CoreDream-2ExtraLight.woff2') format('woff2'), + url('font/S-CoreDream-2ExtraLight.ttf') format('truetype'); +} + +@font-face { + font-family: 'score'; + font-style: normal; + font-weight: 300; + src:url('font/S-CoreDream-3Light.eot'); + src:url('font/S-CoreDream-3Light.eot?#iefix') format('embedded-opentype'), + url('font/S-CoreDream-3Light.woff') format('woff'), + url('font/S-CoreDream-3Light.woff2') format('woff2'), + url('font/S-CoreDream-3Light.ttf') format('truetype'); +} + +@font-face { + font-family: 'score'; + font-style: normal; + font-weight: 400; + src:url('font/S-CoreDream-4Regular.eot'); + src:url('font/S-CoreDream-4Regular.eot?#iefix') format('embedded-opentype'), + url('font/S-CoreDream-4Regular.woff') format('woff'), + url('font/S-CoreDream-4Regular.woff2') format('woff2'), + url('font/S-CoreDream-4Regular.ttf') format('truetype'); +} + +@font-face { + font-family: 'score'; + font-style: normal; + font-weight: 500; + src:url('font/S-CoreDream-5Medium.eot'); + src:url('font/S-CoreDream-5Medium.eot?#iefix') format('embedded-opentype'), + url('font/S-CoreDream-5Medium.woff') format('woff'), + url('font/S-CoreDream-5Medium.woff2') format('woff2'), + url('font/S-CoreDream-5Medium.ttf') format('truetype'); +} + +@font-face { + font-family: 'score'; + font-style: normal; + font-weight: 600; + src:url('font/S-CoreDream-6Bold.eot'); + src:url('font/S-CoreDream-6Bold.eot?#iefix') format('embedded-opentype'), + url('font/S-CoreDream-6Bold.woff') format('woff'), + url('font/S-CoreDream-6Bold.woff2') format('woff2'), + url('font/S-CoreDream-6Bold.ttf') format('truetype'); +} + +@font-face { + font-family: 'score'; + font-style: normal; + font-weight: 700; + src:url('font/S-CoreDream-7ExtraBold.eot'); + src:url('font/S-CoreDream-7ExtraBold.eot?#iefix') format('embedded-opentype'), + url('font/S-CoreDream-7ExtraBold.woff') format('woff'), + url('font/S-CoreDream-7ExtraBold.woff2') format('woff2'), + url('font/S-CoreDream-7ExtraBold.ttf') format('truetype'); +} + +@font-face { + font-family: 'score'; + font-style: normal; + font-weight: 800; + src:url('font/S-CoreDream-8Heavy.eot'); + src:url('font/S-CoreDream-8Heavy.eot?#iefix') format('embedded-opentype'), + url('font/S-CoreDream-8Heavy.woff') format('woff'), + url('font/S-CoreDream-8Heavy.woff2') format('woff2'), + url('font/S-CoreDream-8Heavy.ttf') format('truetype'); +} + +@font-face { + font-family: 'score'; + font-style: normal; + font-weight: 900; + src:url('font/S-CoreDream-9Black.eot'); + src:url('font/S-CoreDream-9Black.eot?#iefix') format('embedded-opentype'), + url('font/S-CoreDream-9Black.woff') format('woff'), + url('font/S-CoreDream-9Black.woff2') format('woff2'), + url('font/S-CoreDream-9Black.ttf') format('truetype'); +} diff --git a/src/main/webapp/web/css/font/NotoSansKR-Black.otf b/src/main/webapp/web/css/font/NotoSansKR-Black.otf new file mode 100644 index 0000000..2b54d19 Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Black.otf differ diff --git a/src/main/webapp/web/css/font/NotoSansKR-Black.woff b/src/main/webapp/web/css/font/NotoSansKR-Black.woff new file mode 100644 index 0000000..90ef003 Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Black.woff differ diff --git a/src/main/webapp/web/css/font/NotoSansKR-Black.woff2 b/src/main/webapp/web/css/font/NotoSansKR-Black.woff2 new file mode 100644 index 0000000..8953c8f Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Black.woff2 differ diff --git a/src/main/webapp/web/css/font/NotoSansKR-Bold.otf b/src/main/webapp/web/css/font/NotoSansKR-Bold.otf new file mode 100644 index 0000000..2b78dd8 Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Bold.otf differ diff --git a/src/main/webapp/web/css/font/NotoSansKR-Bold.woff b/src/main/webapp/web/css/font/NotoSansKR-Bold.woff new file mode 100644 index 0000000..74b20d4 Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Bold.woff differ diff --git a/src/main/webapp/web/css/font/NotoSansKR-Bold.woff2 b/src/main/webapp/web/css/font/NotoSansKR-Bold.woff2 new file mode 100644 index 0000000..216f94d Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Bold.woff2 differ diff --git a/src/main/webapp/web/css/font/NotoSansKR-Light.otf b/src/main/webapp/web/css/font/NotoSansKR-Light.otf new file mode 100644 index 0000000..ecab31a Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Light.otf differ diff --git a/src/main/webapp/web/css/font/NotoSansKR-Light.woff b/src/main/webapp/web/css/font/NotoSansKR-Light.woff new file mode 100644 index 0000000..40aabd2 Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Light.woff differ diff --git a/src/main/webapp/web/css/font/NotoSansKR-Light.woff2 b/src/main/webapp/web/css/font/NotoSansKR-Light.woff2 new file mode 100644 index 0000000..6b7cd13 Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Light.woff2 differ diff --git a/src/main/webapp/web/css/font/NotoSansKR-Medium.otf b/src/main/webapp/web/css/font/NotoSansKR-Medium.otf new file mode 100644 index 0000000..371959d Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Medium.otf differ diff --git a/src/main/webapp/web/css/font/NotoSansKR-Medium.woff b/src/main/webapp/web/css/font/NotoSansKR-Medium.woff new file mode 100644 index 0000000..e15aae0 Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Medium.woff differ diff --git a/src/main/webapp/web/css/font/NotoSansKR-Medium.woff2 b/src/main/webapp/web/css/font/NotoSansKR-Medium.woff2 new file mode 100644 index 0000000..b976680 Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Medium.woff2 differ diff --git a/src/main/webapp/web/css/font/NotoSansKR-Regular.otf b/src/main/webapp/web/css/font/NotoSansKR-Regular.otf new file mode 100644 index 0000000..7ba76b4 Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Regular.otf differ diff --git a/src/main/webapp/web/css/font/NotoSansKR-Regular.woff b/src/main/webapp/web/css/font/NotoSansKR-Regular.woff new file mode 100644 index 0000000..40fab25 Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Regular.woff differ diff --git a/src/main/webapp/web/css/font/NotoSansKR-Regular.woff2 b/src/main/webapp/web/css/font/NotoSansKR-Regular.woff2 new file mode 100644 index 0000000..61d0646 Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Regular.woff2 differ diff --git a/src/main/webapp/web/css/font/NotoSansKR-Thin.otf b/src/main/webapp/web/css/font/NotoSansKR-Thin.otf new file mode 100644 index 0000000..06c5662 Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Thin.otf differ diff --git a/src/main/webapp/web/css/font/NotoSansKR-Thin.woff b/src/main/webapp/web/css/font/NotoSansKR-Thin.woff new file mode 100644 index 0000000..4072373 Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Thin.woff differ diff --git a/src/main/webapp/web/css/font/NotoSansKR-Thin.woff2 b/src/main/webapp/web/css/font/NotoSansKR-Thin.woff2 new file mode 100644 index 0000000..7835c23 Binary files /dev/null and b/src/main/webapp/web/css/font/NotoSansKR-Thin.woff2 differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-1Thin.eot b/src/main/webapp/web/css/font/S-CoreDream-1Thin.eot new file mode 100644 index 0000000..96934b6 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-1Thin.eot differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-1Thin.ttf b/src/main/webapp/web/css/font/S-CoreDream-1Thin.ttf new file mode 100644 index 0000000..6a8b575 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-1Thin.ttf differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-1Thin.woff b/src/main/webapp/web/css/font/S-CoreDream-1Thin.woff new file mode 100644 index 0000000..a2aefdf Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-1Thin.woff differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-1Thin.woff2 b/src/main/webapp/web/css/font/S-CoreDream-1Thin.woff2 new file mode 100644 index 0000000..ac7e132 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-1Thin.woff2 differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-2ExtraLight.eot b/src/main/webapp/web/css/font/S-CoreDream-2ExtraLight.eot new file mode 100644 index 0000000..ffa137b Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-2ExtraLight.eot differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-2ExtraLight.ttf b/src/main/webapp/web/css/font/S-CoreDream-2ExtraLight.ttf new file mode 100644 index 0000000..19452ba Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-2ExtraLight.ttf differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-2ExtraLight.woff b/src/main/webapp/web/css/font/S-CoreDream-2ExtraLight.woff new file mode 100644 index 0000000..894fbf0 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-2ExtraLight.woff differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-2ExtraLight.woff2 b/src/main/webapp/web/css/font/S-CoreDream-2ExtraLight.woff2 new file mode 100644 index 0000000..cdc886f Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-2ExtraLight.woff2 differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-3Light.eot b/src/main/webapp/web/css/font/S-CoreDream-3Light.eot new file mode 100644 index 0000000..2208a28 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-3Light.eot differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-3Light.ttf b/src/main/webapp/web/css/font/S-CoreDream-3Light.ttf new file mode 100644 index 0000000..3c81df7 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-3Light.ttf differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-3Light.woff b/src/main/webapp/web/css/font/S-CoreDream-3Light.woff new file mode 100644 index 0000000..260ecac Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-3Light.woff differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-3Light.woff2 b/src/main/webapp/web/css/font/S-CoreDream-3Light.woff2 new file mode 100644 index 0000000..fa6f0aa Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-3Light.woff2 differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-4Regular.eot b/src/main/webapp/web/css/font/S-CoreDream-4Regular.eot new file mode 100644 index 0000000..5c317a0 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-4Regular.eot differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-4Regular.ttf b/src/main/webapp/web/css/font/S-CoreDream-4Regular.ttf new file mode 100644 index 0000000..4e592d8 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-4Regular.ttf differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-4Regular.woff b/src/main/webapp/web/css/font/S-CoreDream-4Regular.woff new file mode 100644 index 0000000..1150cfc Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-4Regular.woff differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-4Regular.woff2 b/src/main/webapp/web/css/font/S-CoreDream-4Regular.woff2 new file mode 100644 index 0000000..8f4b578 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-4Regular.woff2 differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-5Medium.eot b/src/main/webapp/web/css/font/S-CoreDream-5Medium.eot new file mode 100644 index 0000000..f317b1c Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-5Medium.eot differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-5Medium.ttf b/src/main/webapp/web/css/font/S-CoreDream-5Medium.ttf new file mode 100644 index 0000000..91eb406 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-5Medium.ttf differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-5Medium.woff b/src/main/webapp/web/css/font/S-CoreDream-5Medium.woff new file mode 100644 index 0000000..53f6691 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-5Medium.woff differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-5Medium.woff2 b/src/main/webapp/web/css/font/S-CoreDream-5Medium.woff2 new file mode 100644 index 0000000..7be4dcb Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-5Medium.woff2 differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-6Bold.eot b/src/main/webapp/web/css/font/S-CoreDream-6Bold.eot new file mode 100644 index 0000000..47281f3 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-6Bold.eot differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-6Bold.ttf b/src/main/webapp/web/css/font/S-CoreDream-6Bold.ttf new file mode 100644 index 0000000..413a51d Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-6Bold.ttf differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-6Bold.woff b/src/main/webapp/web/css/font/S-CoreDream-6Bold.woff new file mode 100644 index 0000000..19f4e38 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-6Bold.woff differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-6Bold.woff2 b/src/main/webapp/web/css/font/S-CoreDream-6Bold.woff2 new file mode 100644 index 0000000..8fc53a7 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-6Bold.woff2 differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-7ExtraBold.eot b/src/main/webapp/web/css/font/S-CoreDream-7ExtraBold.eot new file mode 100644 index 0000000..e51d546 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-7ExtraBold.eot differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-7ExtraBold.ttf b/src/main/webapp/web/css/font/S-CoreDream-7ExtraBold.ttf new file mode 100644 index 0000000..ace547d Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-7ExtraBold.ttf differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-7ExtraBold.woff b/src/main/webapp/web/css/font/S-CoreDream-7ExtraBold.woff new file mode 100644 index 0000000..bb3234d Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-7ExtraBold.woff differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-7ExtraBold.woff2 b/src/main/webapp/web/css/font/S-CoreDream-7ExtraBold.woff2 new file mode 100644 index 0000000..f61ffab Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-7ExtraBold.woff2 differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-8Heavy.eot b/src/main/webapp/web/css/font/S-CoreDream-8Heavy.eot new file mode 100644 index 0000000..664ce19 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-8Heavy.eot differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-8Heavy.ttf b/src/main/webapp/web/css/font/S-CoreDream-8Heavy.ttf new file mode 100644 index 0000000..8c0d4ca Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-8Heavy.ttf differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-8Heavy.woff b/src/main/webapp/web/css/font/S-CoreDream-8Heavy.woff new file mode 100644 index 0000000..8e14f23 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-8Heavy.woff differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-8Heavy.woff2 b/src/main/webapp/web/css/font/S-CoreDream-8Heavy.woff2 new file mode 100644 index 0000000..f15625b Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-8Heavy.woff2 differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-9Black.eot b/src/main/webapp/web/css/font/S-CoreDream-9Black.eot new file mode 100644 index 0000000..a2bd7ec Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-9Black.eot differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-9Black.ttf b/src/main/webapp/web/css/font/S-CoreDream-9Black.ttf new file mode 100644 index 0000000..0fa3610 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-9Black.ttf differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-9Black.woff b/src/main/webapp/web/css/font/S-CoreDream-9Black.woff new file mode 100644 index 0000000..73205a5 Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-9Black.woff differ diff --git a/src/main/webapp/web/css/font/S-CoreDream-9Black.woff2 b/src/main/webapp/web/css/font/S-CoreDream-9Black.woff2 new file mode 100644 index 0000000..b3e0c0f Binary files /dev/null and b/src/main/webapp/web/css/font/S-CoreDream-9Black.woff2 differ diff --git a/src/main/webapp/web/css/reset.css b/src/main/webapp/web/css/reset.css new file mode 100644 index 0000000..4507251 --- /dev/null +++ b/src/main/webapp/web/css/reset.css @@ -0,0 +1,279 @@ +@charset "utf-8"; +@font-face { + font-family:"NotoSansKR"; + src: + url('../font/NotoSansKR-Thin.otf') format('opentype'), + url('../font/NotoSansKR-Thin.woff') format('woff'), + url('../font/NotoSansKR-Thin.woff2') format('woff2'); + font-weight:100; + font-style:normal; +} +@font-face { + font-family:"NotoSansKR"; + src: + url('../font/NotoSansKR-Light.otf') format('opentype'), + url('../font/NotoSansKR-Light.woff') format('woff'), + url('../font/NotoSansKR-Light.woff2') format('woff2'); + font-weight:300; + font-style:normal; +} +@font-face { + font-family:"NotoSansKR"; + src: + url('../font/NotoSansKR-Regular.otf') format('opentype'), + url('../font/NotoSansKR-Regular.woff') format('woff'), + url('../font/NotoSansKR-Regular.woff2') format('woff2'); + font-weight:400; + font-style:normal; +} +@font-face { + font-family:"NotoSansKR"; + src: + url('../font/NotoSansKR-Medium.otf') format('opentype'), + url('../font/NotoSansKR-Medium.woff') format('woff'), + url('../font/NotoSansKR-Medium.woff2') format('woff2'); + font-weight:500; + font-style:normal; +} +@font-face { + font-family:"NotoSansKR"; + src: + url('../font/NotoSansKR-Bold.otf') format('opentype'), + url('../font/NotoSansKR-Bold.woff') format('woff'), + url('../font/NotoSansKR-Bold.woff2') format('woff2'); + font-weight:900; + font-style:normal; +} + +@font-face {font-family:"NanumSquareRound", 맑은고딕, Arial,sans-serif, Dotum, 돋움, "Apple SD Gothic Neo", arial;} +@font-face { + font-family: 'NanumSquareRound'; + src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_two@1.0/NanumSquareRound.woff') format('woff'); + font-weight: normal; + font-style: normal; +} +/* v2.0 | 20110126 + http://meyerweb.com/eric/tools/css/reset/ + License: none (public domain) +*/ +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, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font-family:"score", 맑은고딕, Arial,sans-serif, Dotum, 돋움, "Apple SD Gothic Neo", arial; + /* font-family:"NotoSansKR", 맑은고딕, Arial,sans-serif, Dotum, 돋움, "Apple SD Gothic Neo", arial; */ + font-style: normal; + /* font-weight:300; */ + vertical-align: baseline; +} +select, input, textarea, button{ + font-family:"score", 맑은고딕, Arial,sans-serif, Dotum, 돋움, "Apple SD Gothic Neo", arial; + /* font-family:"NotoSansKR", 맑은고딕, Arial,sans-serif, Dotum, 돋움, "Apple SD Gothic Neo", arial; */ +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1.4; +} +ol, ul { + list-style: none; +} +blockquote, q + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +*, :after, :before { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +/*margin*/ +.m-0{margin:0px !important;} +.m-10{margin:10px !important;} +.m-20{margin:20px !important;} +.m-30{margin:30px !important;} +.m-40{margin:40px !important;} +.m-50{margin:50px !important;} +.m-60{margin:60px !important;} +.m-70{margin:70px !important;} +.m-80{margin:80px !important;} +.m-90{margin:90px !important;} +.m-100{margin:100px !important;} + +.mt-0{margin-top:0px !important;} +.mt-10{margin-top:10px !important;} +.mt-20{margin-top:20px !important;} +.mt-30{margin-top:30px !important;} +.mt-40{margin-top:40px !important;} +.mt-50{margin-top:50px !important;} +.mt-60{margin-top:60px !important;} +.mt-70{margin-top:70px !important;} +.mt-80{margin-top:80px !important;} +.mt-90{margin-top:90px !important;} +.mt-100{margin-top:100px !important;} + +.mb-0{margin-bottom:0px !important;} +.mb-10{margin-bottom:10px !important;} +.mb-20{margin-bottom:20px !important;} +.mb-30{margin-bottom:30px !important;} +.mb-40{margin-bottom:40px !important;} +.mb-50{margin-bottom:50px !important;} +.mb-60{margin-bottom:60px !important;} +.mb-70{margin-bottom:70px !important;} +.mb-80{margin-bottom:80px !important;} +.mb-90{margin-bottom:90px !important;} +.mb-100{margin-bottom:100px !important;} + +.ml-0{margin-left:0px !important;} +.ml-10{margin-left:10px !important;} +.ml-20{margin-left:20px !important;} +.ml-30{margin-left:30px !important;} +.ml-40{margin-left:40px !important;} +.ml-50{margin-left:50px !important;} +.ml-60{margin-left:60px !important;} +.ml-70{margin-left:70px !important;} +.ml-80{margin-left:80px !important;} +.ml-90{margin-left:90px !important;} +.ml-100{margin-left:10px !important;} + +.mr-0{margin-right:0px !important;} +.mr-10{margin-right:10px !important;} +.mr-20{margin-right:20px !important;} +.mr-30{margin-right:30px !important;} +.mr-40{margin-right:40px !important;} +.mr-50{margin-right:50px !important;} +.mr-60{margin-right:60px !important;} +.mr-70{margin-right:70px !important;} +.mr-80{margin-right:80px !important;} +.mr-90{margin-right:90px !important;} +.mr-100{margin-right:100px !important;} + +/*padding*/ +.p-0{padding:0px !important;} +.p-10{padding:10px!important;} +.p-20{padding:20px!important;} +.p-30{padding:30px!important;} +.p-40{padding:40px!important;} +.p-50{padding:50px!important;} +.p-60{padding:60px!important;} +.p-70{padding:70px!important;} +.p-80{padding:80px!important;} +.p-90{padding:90px!important;} +.p-100{padding:100px!important;} + +.pt-0{padding-top:0px !important;} +.pt-10{padding-top:10px !important;} +.pt-20{padding-top:20px !important;} +.pt-30{padding-top:30px !important;} +.pt-40{padding-top:40px !important;} +.pt-50{padding-top:50px !important;} +.pt-60{padding-top:60px !important;} +.pt-70{padding-top:70px !important;} +.pt-80{padding-top:80px !important;} +.pt-90{padding-top:90px !important;} +.pt-100{padding-top:100px !important;} + +.pb-0{padding-bottom:0px !important;} +.pb-10{padding-bottom:10px !important;} +.pb-20{padding-bottom:20px !important;} +.pb-30{padding-bottom:30px !important;} +.pb-40{padding-bottom:40px !important;} +.pb-50{padding-bottom:50px !important;} +.pb-60{padding-bottom:60px !important;} +.pb-70{padding-bottom:70px !important;} +.pb-80{padding-bottom:80px !important;} +.pb-90{padding-bottom:90px !important;} +.pb-100{padding-bottom:100px !important;} + +.pl-0{padding-left:0px !important;} +.pl-10{padding-left:10px !important;} +.pl-20{padding-left:20px !important;} +.pl-30{padding-left:30px !important;} +.pl-40{padding-left:40px !important;} +.pl-50{padding-left:50px !important;} +.pl-60{padding-left:60px !important;} +.pl-70{padding-left:70px !important;} +.pl-80{padding-left:80px !important;} +.pl-90{padding-left:90px !important;} +.pl-100{padding-left:120px !important;} + +.pr-0{padding-right:0px !important;} +.pr-10{padding-right:10px !important;} +.pr-20{padding-right:20px !important;} +.pr-30{padding-right:30px !important;} +.pr-40{padding-right:40px !important;} +.pr-50{padding-right:50px !important;} +.pr-60{padding-right:60px !important;} +.pr-70{padding-right:70px !important;} +.pr-80{padding-right:80px !important;} +.pr-90{padding-right:90px !important;} +.pr-100{padding-right:100px !important;} + + +[class*=width_] {float:left;} +.width_100 {width:100% !important;} +.width_90 {width:90% !important;} +.width_80 {width:80% !important;} +.width_70 {width:70% !important;} +.width_60 {width:60% !important;} +.width_50 {width:50% !important;} +.width_40 {width:40% !important;} +.width_30 {width:30% !important;} +.width_20 {width:20% !important;} +.width_10 {width:10% !important;} + +.width_2n {width:50% !important;} +.width_3n {width:33.333333333% !important;} +.width_4n {width:25% !important;} +.width_5n {width:20% !important;} +.width_6n {width:16.6666666666666666667% !important;} +.width_7n {width:14.2857142857143% !important;} +.width_8n {width:12.5% !important;} +.width_9n {width:11.111111111111111111111% !important;} +.width_10n {width:10% !important;} + + +a{color:#000;text-decoration:none;cursor: pointer;} +img{vertical-align:middle;} +/* .container{width:1280px;height:100%;margin:0px auto;} */ + + +/* select { +font-family: inherit; +background: url('../img/icon/arrow_bk.png') no-repeat 90% 50%; +-webkit-appearance: none; +-moz-appearance: none; +appearance: none; +} +select::-ms-expand { + display: none; +} */ + +.on{display:block!important;} + +/* .list-txt > li {position: relative;padding-left: 14px;} +.list-txt > li:before {content: "- ";display: inline-block;position: absolute;top: 0;left: 0;} */ diff --git a/src/main/webapp/web/js/lib/jquery-3.6.0.min.js b/src/main/webapp/web/js/lib/jquery-3.6.0.min.js new file mode 100644 index 0000000..c4c6022 --- /dev/null +++ b/src/main/webapp/web/js/lib/jquery-3.6.0.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0