diff --git a/.checkstyle b/.checkstyle new file mode 100644 index 0000000..c559342 --- /dev/null +++ b/.checkstyle @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.pmd b/.pmd new file mode 100644 index 0000000..fa05070 --- /dev/null +++ b/.pmd @@ -0,0 +1,1258 @@ + + + false + .ruleset + + + CallSuperFirst + Android + + + CallSuperLast + Android + + + DoNotHardCodeSDCard + Android + + + AvoidBranchingStatementAsLastInLoop + Basic + + + AvoidDecimalLiteralsInBigDecimalConstructor + Basic + + + AvoidMultipleUnaryOperators + Basic + + + AvoidThreadGroup + Basic + + + AvoidUsingHardCodedIP + Basic + + + AvoidUsingOctalValues + Basic + + + BigIntegerInstantiation + Basic + + + BooleanInstantiation + Basic + + + BrokenNullCheck + Basic + + + CheckResultSet + Basic + + + CheckSkipResult + Basic + + + ClassCastExceptionWithToArray + Basic + + + DontCallThreadRun + Basic + + + DontUseFloatTypeForLoopIndices + Basic + + + DoubleCheckedLocking + Basic + + + ExtendsObject + Basic + + + ForLoopShouldBeWhileLoop + Basic + + + JumbledIncrementer + Basic + + + MisplacedNullCheck + Basic + + + OverrideBothEqualsAndHashcode + Basic + + + ReturnFromFinallyBlock + Basic + + + UnconditionalIfStatement + Basic + + + AssignmentInOperand + Basic Ecmascript + + + AvoidTrailingComma + Basic Ecmascript + + + ConsistentReturn + Basic Ecmascript + + + EqualComparison + Basic Ecmascript + + + GlobalVariable + Basic Ecmascript + + + InnaccurateNumericLiteral + Basic Ecmascript + + + ScopeForInVariable + Basic Ecmascript + + + UnreachableCode + Basic Ecmascript + + + UseBaseWithParseInt + Basic Ecmascript + + + DontNestJsfInJstlIteration + Basic JSF + + + DuplicateJspImports + Basic JSP + + + IframeMissingSrcAttribute + Basic JSP + + + JspEncoding + Basic JSP + + + NoClassAttribute + Basic JSP + + + NoHtmlComments + Basic JSP + + + NoInlineScript + Basic JSP + + + NoInlineStyleInformation + Basic JSP + + + NoJspForward + Basic JSP + + + NoLongScripts + Basic JSP + + + NoScriptlets + Basic JSP + + + NoUnsanitizedJSPExpression + Basic JSP + + + AvoidDeeplyNestedIfStmts + Basic Velocity + + + AvoidReassigningParameters + Basic Velocity + + + CollapsibleIfStatements + Basic Velocity + + + EmptyForeachStmt + Basic Velocity + + + EmptyIfStmt + Basic Velocity + + + ExcessiveTemplateLength + Basic Velocity + + + NoInlineJavaScript + Basic Velocity + + + NoInlineStyles + Basic Velocity + + + UnusedMacroParameter + Basic Velocity + + + MistypedCDATASection + Basic XML + + + ForLoopsMustUseBraces + Braces + + + IfElseStmtsMustUseBraces + Braces + + + IfStmtsMustUseBraces + Braces + + + WhileLoopsMustUseBraces + Braces + + + CloneMethodMustImplementCloneable + Clone Implementation + + + CloneThrowsCloneNotSupportedException + Clone Implementation + + + ProperCloneImplementation + Clone Implementation + + + CyclomaticComplexity + Code Size + + + ExcessiveClassLength + Code Size + + + ExcessiveMethodLength + Code Size + + + ExcessiveObjectLength + Code Size + + + ExcessivePackageBodyLength + Code Size + + + ExcessivePackageSpecificationLength + Code Size + + + ExcessiveParameterList + Code Size + + + ExcessivePublicCount + Code Size + + + ExcessiveTypeLength + Code Size + + + ModifiedCyclomaticComplexity + Code Size + + + NcssConstructorCount + Code Size + + + NcssMethodCount + Code Size + + + NcssObjectCount + Code Size + + + NcssTypeCount + Code Size + + + NPathComplexity + Code Size + + + StdCyclomaticComplexity + Code Size + + + TooManyFields + Code Size + + + TooManyMethods + Code Size + + + CommentContent + Comments + + + CommentRequired + Comments + + + CommentSize + Comments + + + AtLeastOneConstructor + Controversial + + + AvoidAccessibilityAlteration + Controversial + + + AvoidFinalLocalVariable + Controversial + + + AvoidLiteralsInIfCondition + Controversial + + + AvoidPrefixingMethodParameters + Controversial + + + AvoidUsingNativeCode + Controversial + + + AvoidUsingShortType + Controversial + + + AvoidUsingVolatile + Controversial + + + BooleanInversion + Controversial + + + CallSuperInConstructor + Controversial + + + DataflowAnomalyAnalysis + Controversial + + + DefaultPackage + Controversial + + + DoNotCallGarbageCollectionExplicitly + Controversial + + + DontImportSun + Controversial + + + NullAssignment + Controversial + + + OneDeclarationPerLine + Controversial + + + OnlyOneReturn + Controversial + + + SuspiciousOctalEscape + Controversial + + + UnnecessaryConstructor + Controversial + + + UseConcurrentHashMap + Controversial + + + UseObjectForClearerAPI + Controversial + + + CouplingBetweenObjects + Coupling + + + ExcessiveImports + Coupling + + + LawOfDemeter + Coupling + + + LooseCoupling + Coupling + + + LoosePackageCoupling + Coupling + + + AbstractClassWithoutAbstractMethod + Design + + + AbstractClassWithoutAnyMethod + Design + + + AccessorClassGeneration + Design + + + AssignmentToNonFinalStatic + Design + + + AvoidConstantsInterface + Design + + + AvoidInstanceofChecksInCatchClause + Design + + + AvoidProtectedFieldInFinalClass + Design + + + AvoidProtectedMethodInFinalClassNotExtending + Design + + + AvoidSynchronizedAtMethodLevel + Design + + + BadComparison + Design + + + ClassWithOnlyPrivateConstructorsShouldBeFinal + Design + + + CloseResource + Design + + + CompareObjectsWithEquals + Design + + + ConfusingTernary + Design + + + ConstructorCallsOverridableMethod + Design + + + DefaultLabelNotLastInSwitchStmt + Design + + + EmptyMethodInAbstractClassShouldBeAbstract + Design + + + EqualsNull + Design + + + FieldDeclarationsShouldBeAtStartOfClass + Design + + + FinalFieldCouldBeStatic + Design + + + GodClass + Design + + + IdempotentOperations + Design + + + ImmutableField + Design + + + InstantiationToGetClass + Design + + + LogicInversion + Design + + + MissingBreakInSwitch + Design + + + MissingStaticMethodInNonInstantiatableClass + Design + + + NonCaseLabelInSwitchStatement + Design + + + NonStaticInitializer + Design + + + NonThreadSafeSingleton + Design + + + OptimizableToArrayCall + Design + + + PositionLiteralsFirstInCaseInsensitiveComparisons + Design + + + PositionLiteralsFirstInComparisons + Design + + + PreserveStackTrace + Design + + + ReturnEmptyArrayRatherThanNull + Design + + + SimpleDateFormatNeedsLocale + Design + + + SimplifyBooleanExpressions + Design + + + SimplifyBooleanReturns + Design + + + SimplifyConditional + Design + + + SingularField + Design + + + SwitchDensity + Design + + + SwitchStmtsShouldHaveDefault + Design + + + TooFewBranchesForASwitchStatement + Design + + + UncommentedEmptyConstructor + Design + + + UncommentedEmptyMethodBody + Design + + + UnnecessaryLocalBeforeReturn + Design + + + UnsynchronizedStaticDateFormatter + Design + + + UseCollectionIsEmpty + Design + + + UseLocaleWithCaseConversions + Design + + + UseNotifyAllInsteadOfNotify + Design + + + UseUtilityClass + Design + + + UseVarargs + Design + + + EmptyCatchBlock + Empty Code + + + EmptyFinallyBlock + Empty Code + + + EmptyInitializer + Empty Code + + + EmptyStatementBlock + Empty Code + + + EmptyStatementNotInLoop + Empty Code + + + EmptyStaticInitializer + Empty Code + + + EmptySwitchStatements + Empty Code + + + EmptySynchronizedBlock + Empty Code + + + EmptyTryBlock + Empty Code + + + EmptyWhileStmt + Empty Code + + + AvoidCallingFinalize + Finalizer + + + EmptyFinalizer + Finalizer + + + FinalizeDoesNotCallSuperFinalize + Finalizer + + + FinalizeOnlyCallsSuperFinalize + Finalizer + + + FinalizeOverloaded + Finalizer + + + FinalizeShouldBeProtected + Finalizer + + + DontImportJavaLang + Import Statements + + + DuplicateImports + Import Statements + + + ImportFromSamePackage + Import Statements + + + TooManyStaticImports + Import Statements + + + UnnecessaryFullyQualifiedName + Import Statements + + + UnusedImports + Import Statements + + + DoNotCallSystemExit + J2EE + + + DoNotUseThreads + J2EE + + + LocalHomeNamingConvention + J2EE + + + LocalInterfaceSessionNamingConvention + J2EE + + + MDBAndSessionBeanNamingConvention + J2EE + + + RemoteInterfaceNamingConvention + J2EE + + + RemoteSessionInterfaceNamingConvention + J2EE + + + StaticEJBFieldShouldBeFinal + J2EE + + + UseProperClassLoader + J2EE + + + GuardDebugLogging + Jakarta Commons Logging + + + GuardLogStatement + Jakarta Commons Logging + + + ProperLogger + Jakarta Commons Logging + + + UseCorrectExceptionLogging + Jakarta Commons Logging + + + AvoidPrintStackTrace + Java Logging + + + GuardLogStatementJavaUtil + Java Logging + + + LoggerIsNotStaticFinal + Java Logging + + + MoreThanOneLogger + Java Logging + + + SystemPrintln + Java Logging + + + BeanMembersShouldSerialize + JavaBeans + + + MissingSerialVersionUID + JavaBeans + + + JUnitAssertionsShouldIncludeMessage + JUnit + + + JUnitSpelling + JUnit + + + JUnitStaticSuite + JUnit + + + JUnitTestContainsTooManyAsserts + JUnit + + + JUnitTestsShouldIncludeAssert + JUnit + + + SimplifyBooleanAssertion + JUnit + + + TestClassWithoutTestCases + JUnit + + + UnnecessaryBooleanAssertion + JUnit + + + UseAssertEqualsInsteadOfAssertTrue + JUnit + + + UseAssertNullInsteadOfAssertTrue + JUnit + + + UseAssertSameInsteadOfAssertTrue + JUnit + + + UseAssertTrueInsteadOfAssertEquals + JUnit + + + AvoidAssertAsIdentifier + Migration + + + AvoidEnumAsIdentifier + Migration + + + ByteInstantiation + Migration + + + IntegerInstantiation + Migration + + + JUnit4SuitesShouldUseSuiteAnnotation + Migration + + + JUnit4TestShouldUseAfterAnnotation + Migration + + + JUnit4TestShouldUseBeforeAnnotation + Migration + + + JUnit4TestShouldUseTestAnnotation + Migration + + + JUnitUseExpected + Migration + + + LongInstantiation + Migration + + + ReplaceEnumerationWithIterator + Migration + + + ReplaceHashtableWithMap + Migration + + + ReplaceVectorWithList + Migration + + + ShortInstantiation + Migration + + + AbstractNaming + Naming + + + AvoidDollarSigns + Naming + + + AvoidFieldNameMatchingMethodName + Naming + + + AvoidFieldNameMatchingTypeName + Naming + + + BooleanGetMethodName + Naming + + + ClassNamingConventions + Naming + + + GenericsNaming + Naming + + + LongVariable + Naming + + + MethodNamingConventions + Naming + + + MethodWithSameNameAsEnclosingClass + Naming + + + MisleadingVariableName + Naming + + + NoPackage + Naming + + + PackageCase + Naming + + + ShortClassName + Naming + + + ShortMethodName + Naming + + + ShortVariable + Naming + + + SuspiciousConstantFieldName + Naming + + + SuspiciousEqualsMethodName + Naming + + + SuspiciousHashcodeMethodName + Naming + + + VariableNamingConventions + Naming + + + AddEmptyString + Optimization + + + AvoidArrayLoops + Optimization + + + AvoidInstantiatingObjectsInLoops + Optimization + + + LocalVariableCouldBeFinal + Optimization + + + MethodArgumentCouldBeFinal + Optimization + + + PrematureDeclaration + Optimization + + + RedundantFieldInitializer + Optimization + + + SimplifyStartsWith + Optimization + + + UnnecessaryWrapperObjectCreation + Optimization + + + UseArrayListInsteadOfVector + Optimization + + + UseArraysAsList + Optimization + + + UseStringBufferForStringAppends + Optimization + + + TO_DATEWithoutDateFormat + PLSQL DATETIME + + + TO_DATE_TO_CHAR + PLSQL DATETIME + + + TO_TIMESTAMPWithoutDateFormat + PLSQL DATETIME + + + ArrayIsStoredDirectly + Security Code Guidelines + + + MethodReturnsInternalArray + Security Code Guidelines + + + AvoidCatchingGenericException + Strict Exceptions + + + AvoidCatchingNPE + Strict Exceptions + + + AvoidCatchingThrowable + Strict Exceptions + + + AvoidLosingExceptionInformation + Strict Exceptions + + + AvoidRethrowingException + Strict Exceptions + + + AvoidThrowingNewInstanceOfSameException + Strict Exceptions + + + AvoidThrowingNullPointerException + Strict Exceptions + + + AvoidThrowingRawExceptionTypes + Strict Exceptions + + + DoNotExtendJavaLangError + Strict Exceptions + + + DoNotThrowExceptionInFinally + Strict Exceptions + + + ExceptionAsFlowControl + Strict Exceptions + + + SignatureDeclareThrowsException + Strict Exceptions + + + AppendCharacterWithChar + String and StringBuffer + + + AvoidDuplicateLiterals + String and StringBuffer + + + AvoidStringBufferField + String and StringBuffer + + + ConsecutiveAppendsShouldReuse + String and StringBuffer + + + ConsecutiveLiteralAppends + String and StringBuffer + + + InefficientEmptyStringCheck + String and StringBuffer + + + InefficientStringBuffering + String and StringBuffer + + + InsufficientStringBufferDeclaration + String and StringBuffer + + + StringBufferInstantiationWithChar + String and StringBuffer + + + StringInstantiation + String and StringBuffer + + + StringToString + String and StringBuffer + + + UnnecessaryCaseChange + String and StringBuffer + + + UseEqualsToCompareStrings + String and StringBuffer + + + UseIndexOfChar + String and StringBuffer + + + UselessStringValueOf + String and StringBuffer + + + UseStringBufferLength + String and StringBuffer + + + TomKytesDespair + Tom Kyte's Despair + + + UnnecessaryBlock + Unnecessary + + + UnnecessaryConversionTemporary + Unnecessary + + + UnnecessaryFinalModifier + Unnecessary + + + UnnecessaryParentheses + Unnecessary + + + UnnecessaryReturn + Unnecessary + + + UnusedNullCheckInEquals + Unnecessary + + + UselessOperationOnImmutable + Unnecessary + + + UselessOverridingMethod + Unnecessary + + + UselessParentheses + Unnecessary + + + UnusedFormalParameter + Unused Code + + + UnusedLocalVariable + Unused Code + + + UnusedModifier + Unused Code + + + UnusedPrivateField + Unused Code + + + UnusedPrivateMethod + Unused Code + + + AvoidAxisNavigation + XPath in XSL + + + UseConcatOnce + XPath in XSL + + + false + true + true + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..f1bab86 --- /dev/null +++ b/pom.xml @@ -0,0 +1,432 @@ + + + 4.0.0 + kcg + faics + war + 1.0.0 + http://maven.apache.org + + + 4.0.9.RELEASE + 3.5.0 + 3.0.5 + UTF-8 + UTF-8 + + + + + mvn2 + http://repo1.maven.org/maven2/ + + true + + + true + + + + egovframe + http://www.egovframe.go.kr/maven/ + + true + + + false + + + + + + + + + egovframework.rte + egovframework.rte.psl.dataaccess + ${egovframework.rte.version} + + + + egovframework.rte + egovframework.rte.ptl.mvc + ${egovframework.rte.version} + + + + egovframework.rte + egovframework.rte.fdl.property + ${egovframework.rte.version} + + + + egovframework.rte + egovframework.rte.fdl.excel + ${egovframework.rte.version} + + + + egovframework.rte + egovframework.rte.fdl.crypto + ${egovframework.rte.version} + + + + egovframework.rte + egovframework.rte.fdl.string + ${egovframework.rte.version} + + + slf4j-api + org.slf4j + + + + + + egovframework.rte + egovframework.rte.fdl.security + ${egovframework.rte.version} + + + slf4j-api + org.slf4j + + + + + + + + commons-dbcp + commons-dbcp + 1.3 + + + + org.aspectj + aspectjrt + 1.8.0 + + + + org.aspectj + aspectjweaver + 1.8.0 + + + + org.aspectj + aspectjtools + 1.8.0 + + + + + javax.validation + validation-api + 1.0.0.GA + + + + net.sf + log4jdbc3 + 1.1 + + + + + org.springmodules + spring-modules-validation + 0.9 + + + + commons-validator + commons-validator + 1.3.1 + + + + org.antlr + antlr + 3.0.1 + + + + + + + ojdbc + ojdbc + 14 + system + ${basedir}/src/main/webapp/WEB-INF/lib/ojdbc-14.jar + + + + + + javax.servlet + jstl + 1.2 + + + taglibs + standard + 1.1.2 + + + + javax.servlet + servlet-api + 2.5 + provided + + + + + + org.apache.tiles + tiles-extras + ${org.apache.tiles.version} + + + org.apache.tiles + tiles-jsp + ${org.apache.tiles.version} + + + org.apache.tiles + tiles-servlet + ${org.apache.tiles.version} + + + + + + com.fasterxml.jackson.core + jackson-databind + 2.8.3 + + + + net.sf.json-lib + json-lib + 2.4 + jdk15 + + + + + + com.ckeditor + ckeditor-java-core + 3.5.3 + + + + + commons-fileupload + commons-fileupload + 1.3.1 + + + + commons-io + commons-io + 2.5 + + + + junit + junit + 4.11 + test + + + + org.springframework + spring-test + ${spring.maven.artifact.version} + test + + + + + com.navercorp.lucy + lucy-xss-servlet + 2.0.0 + + + + + commons-codec + commons-codec + 1.10 + + + + + + install + ${basedir}/target + faics + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.7 + 1.7 + UTF-8 + + + + org.codehaus.mojo + hibernate3-maven-plugin + 2.1 + + + + hbm2ddl + annotationconfiguration + + + + + + hsqldb + hsqldb + 1.8.0.7 + + + + + + org.codehaus.mojo + emma-maven-plugin + 1.0-alpha-1 + + + + org.apache.maven.plugins + maven-pmd-plugin + 2.4 + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + + org.apache.maven.plugins + + + maven-compiler-plugin + + + [2.5.1,) + + + testCompile + compile + + + + + + + + + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + false + true + once + xml + + **/Abstract*.java + **/*Suite.java + + + **/*Test.java + + + + + org.codehaus.mojo + emma-maven-plugin + true + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 2.17 + + ${basedir}\src\main\resources\config\KGI_Checks.xml + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + + ${basedir}/target/site + + + + org.codehaus.mojo + findbugs-maven-plugin + 3.0.4 + + + + org.apache.maven.plugins + maven-javadoc-plugin + + 128m + 512m + ${encoding} + ${encoding} + ${encoding} + -Xdoclint:none + + + + + maven-jxr-plugin + + ${encoding} + ${encoding} + true + apidocs + + + + + \ No newline at end of file diff --git a/src/main/java/kcg/faics/admin/vo/LogSearchVO.java b/src/main/java/kcg/faics/admin/vo/LogSearchVO.java new file mode 100644 index 0000000..5d2415a --- /dev/null +++ b/src/main/java/kcg/faics/admin/vo/LogSearchVO.java @@ -0,0 +1,100 @@ +package kcg.faics.admin.vo; + +import kcg.faics.cmmn.bbs.BaseSearchVO; + +/** + * LogVO.java + * @author 임새미 + * @since 2016. 11. 10. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 11. 10. 임새미 최초생성 + * + */ +public class LogSearchVO extends BaseSearchVO { + + public LogSearchVO() { + super(); + } + + private int type = 0; + private String sdate; + private String edate; + private String place1; + private String name; + private String order; + /** + * @return the type + */ + public int getType() { + return type; + } + /** + * @param type the type to set + */ + public void setType(int type) { + this.type = type; + } + /** + * @return the sdate + */ + public String getSdate() { + return sdate; + } + /** + * @param sdate the sdate to set + */ + public void setSdate(String sdate) { + this.sdate = sdate; + } + /** + * @return the edate + */ + public String getEdate() { + return edate; + } + /** + * @param edate the edate to set + */ + public void setEdate(String edate) { + this.edate = edate; + } + /** + * @return the place1 + */ + public String getPlace1() { + return place1; + } + /** + * @param place1 the place1 to set + */ + public void setPlace1(String place1) { + this.place1 = place1; + } + /** + * @return the name + */ + public String getName() { + return name; + } + /** + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + /** + * @return the order + */ + public String getOrder() { + return order; + } + /** + * @param order the order to set + */ + public void setOrder(String order) { + this.order = order; + } + +} diff --git a/src/main/java/kcg/faics/admin/vo/LogVO.java b/src/main/java/kcg/faics/admin/vo/LogVO.java new file mode 100644 index 0000000..7d640af --- /dev/null +++ b/src/main/java/kcg/faics/admin/vo/LogVO.java @@ -0,0 +1,147 @@ +package kcg.faics.admin.vo; + +/** + * LogVO.java + * @author 임새미 + * @since 2016. 11. 10. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 11. 10. 임새미 최초생성 + * + */ +public class LogVO { + + + private int rnum; + private String userid; + private int type; + private String regdate; + private String position; + private String name; + private String location1; + private String location2; + private String location3; + private String ip; + /** + * @return the seq + */ + public int getRnum() { + return rnum; + } + /** + * @param seq the seq to set + */ + public void setRnum(int rnum) { + this.rnum = rnum; + } + /** + * @return the userid + */ + public String getUserid() { + return userid; + } + /** + * @param userid the userid to set + */ + public void setUserid(String userid) { + this.userid = userid; + } + /** + * @return the type + */ + public int getType() { + return type; + } + /** + * @param type the type to set + */ + public void setType(int type) { + this.type = type; + } + /** + * @return the regdate + */ + public String getRegdate() { + return regdate; + } + /** + * @param regdate the regdate to set + */ + public void setRegdate(String regdate) { + this.regdate = regdate; + } + /** + * @return the position + */ + public String getPosition() { + return position; + } + /** + * @param position the position to set + */ + public void setPosition(String position) { + this.position = position; + } + /** + * @return the name + */ + public String getName() { + return name; + } + /** + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + /** + * @return the location1 + */ + public String getLocation1() { + return location1; + } + /** + * @param location1 the location1 to set + */ + public void setLocation1(String location1) { + this.location1 = location1; + } + /** + * @return the location2 + */ + public String getLocation2() { + return location2; + } + /** + * @param location2 the location2 to set + */ + public void setLocation2(String location2) { + this.location2 = location2; + } + /** + * @return the location3 + */ + public String getLocation3() { + return location3; + } + /** + * @param location3 the location3 to set + */ + public void setLocation3(String location3) { + this.location3 = location3; + } + /** + * @return the ip + */ + public String getIp() { + return ip; + } + /** + * @param ip the ip to set + */ + public void setIp(String ip) { + this.ip = ip; + } + +} diff --git a/src/main/java/kcg/faics/admin/web/AdminController.java b/src/main/java/kcg/faics/admin/web/AdminController.java new file mode 100644 index 0000000..4562679 --- /dev/null +++ b/src/main/java/kcg/faics/admin/web/AdminController.java @@ -0,0 +1,940 @@ +/** + * AdminController.java + * @author 임새미 + * @since 2016. 10. 27. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 27. 임새미 최초생성 + * + */ +package kcg.faics.admin.web; + +import java.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import kcg.faics.admin.vo.LogSearchVO; +import kcg.faics.cmmn.excel.ExcelExporter; +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.cmmn.service.LogService; +import kcg.faics.cmmn.vo.CodeVO; +import kcg.faics.member.UserType; +import kcg.faics.member.service.MemberAuthService; +import kcg.faics.member.service.MemberService; +import kcg.faics.member.vo.MemberSearchVO; +import kcg.faics.member.vo.MemberVO; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.UserUtil; +import kcg.faics.sec.service.impl.SecurityMapper; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.session.SessionInformation; +import org.springframework.security.core.session.SessionRegistry; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.web.authentication.AuthenticationSuccessHandler; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.fdl.security.userdetails.EgovUserDetails; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +/** + * AdminController.java + * @author 임새미 + * @since 2016. 10. 27. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 27. 임새미 최초생성 + * + */ +@Controller +@RequestMapping("/admin") +public class AdminController { + + @Resource(name = "propertiesService") + private EgovPropertyService propertiesService; + + @Resource(name = "codeService") + CodeService codeService; + + @Resource(name = "memberService") + MemberService memberService; + + @Resource(name = "memberAuthService") + MemberAuthService memberAuthService; + + @Resource(name = "logService") + LogService logService; + + + /** + * 외사경찰 등록화면을 반환한다. + * + * @param memberVO modelAttribute 객체 + * @param model 모델 객체 + * @return 외사경찰 등록화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/faMemberAdd.do", method=RequestMethod.GET) + public String faMemberAddView(@ModelAttribute("memberVO") final MemberVO memberVO, Model model) throws Exception { + /* 외사경찰 */ + memberVO.setUsertype(UserType.FA); + + model.addAttribute("memberVO", new MemberVO()); + model.addAttribute("place1List", codeService.getPlace1List(false)); + model.addAttribute("positionList", codeService.getPositionList()); + model.addAttribute("dutiesList", codeService.getDutiesList()); + model.addAttribute("jobTypeList", codeService.getJobTypeList()); + model.addAttribute("scholarshipList", codeService.getScholarshipList()); + + /* create or modify 플래그 */ + model.addAttribute("registerFlag", "create"); + + return "admin/faMemberAdd.tiles"; + } + + /** + * 외사경찰을 등록한다. + * + * @param multiRequest multpart타입의 요청 객체 + * @param memberVO 외사경찰 정보 객체 + * @param bindingResult 바인딩 객체 + * @param model 모델 객체 + * @param status 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/faMemberAdd.do", method=RequestMethod.POST) + public String faMemberAdd(final MultipartHttpServletRequest multiRequest, @ModelAttribute("memberVO") final MemberVO memberVO, + final BindingResult bindingResult, final Model model, final SessionStatus status) throws Exception { + /* 외사경찰 */ + memberVO.setUsertype(UserType.FA); + + HashMap result = new HashMap(); + try { + /* 유효성 검사 */ + MemberVO vo = memberService.select(memberVO); + if (vo != null || bindingResult.hasErrors()) { + + if (vo != null) { + bindingResult.rejectValue("userid", "member.msg.duplicate"); + } + + model.addAttribute("memberVO", memberVO); + model.addAttribute("place1List", codeService.getPlace1List(false)); + model.addAttribute("positionList", codeService.getPositionList()); + model.addAttribute("dutiesList", codeService.getDutiesList()); + model.addAttribute("jobTypeList", codeService.getJobTypeList()); + model.addAttribute("scholarshipList", codeService.getScholarshipList()); + + /* create or modify 플래그 */ + model.addAttribute("registerFlag", "create"); + + return "admin/faMemberAdd.tiles"; + } + + result = memberService.insert(memberVO, multiRequest.getFileMap()); + } catch (Exception e) { + e.printStackTrace(); + } + + if ((Integer) result.get("result") != 1) { + return "redirect:/admin/faMemberAdd.do"; + } + + String newUserId = (String) result.get("userid"); + newUserId = URLEncoder.encode(newUserId, "UTF-8"); + return "redirect:/admin/faMemberInfo.do?userid=" + newUserId; + } + + /** + * 외사경찰 정보를 반환한다. + * + * @param memberVO 외사경찰 정보 객체 + * @param model 모델 객체 + * @return 외사경찰 정보 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/faMemberInfo.do") + public String faMemberInfo(final MemberVO memberVO, final Model model) throws Exception { + try { + /* 외사경찰 */ + memberVO.setUsertype(UserType.FA); + model.addAttribute("memberVO", memberService.select(memberVO)); + model.addAttribute("isAdmin", UserUtil.isAdmin()); + model.addAttribute("isSysAdmin", UserUtil.isSysAdmin()); + } catch (Exception e) { + e.printStackTrace(); + } + + return "admin/faMemberInfo.tiles"; + } + + + + /** + * 외사경찰 목록을 반환한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @param model 모델 객체 + * @return 외사경찰 정보 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/faMemberList.do") + public String faMemberList(@ModelAttribute("memberSearchVO") final MemberSearchVO searchVO, final Model model) throws Exception { + try { + /* 페이징 처리 정보 */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("pageSize")); + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + int totSearchCnt = memberService.selectListCnt(searchVO); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + + /* 게시판 상단 페이지 및 게시물 정보 표현을 위한 데이터 */ + int totCnt = memberService.selectTotalCnt(searchVO); + model.addAttribute("totalCnt", totCnt); + + model.addAttribute("resultList", memberService.selectList(searchVO)); + model.addAttribute("place1List", codeService.getPlace1List(false)); + } catch (Exception e) { + e.printStackTrace(); + } + + return "admin/faMemberList.tiles"; + + } + + /** + * 외사경찰 목록을 반환한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @param model 모델 객체 + * @return 외사경찰 정보 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/faMemberCmmnList.do") + public String faMemberCmmnList(@ModelAttribute("memberSearchVO") final MemberSearchVO searchVO, final Model model) throws Exception { + try { + if (searchVO.getPlace1() == null || searchVO.getPlace1().length() == 0) { + searchVO.setPlace1("PS00"); + } + /* 페이징 처리 정보 */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("pageSize")); + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + int totSearchCnt = memberService.selectListCnt(searchVO); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + + /* 게시판 상단 페이지 및 게시물 정보 표현을 위한 데이터 */ + int totCnt = memberService.selectTotalCnt(searchVO); + model.addAttribute("totalCnt", totCnt); + + model.addAttribute("resultList", memberService.selectList(searchVO)); + model.addAttribute("place1List", codeService.getPlace1List(false)); + } catch (Exception e) { + e.printStackTrace(); + } + + return "admin/faMemberCmmnList.tiles"; + } + + /** + * 외사 경찰의 현황을 엑셀로 출력한다. + * + * @param searchVO + * 검색조건 VO + * @param model + * Model객체 + * @return 외사장비현황 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping("/faMemberListExcel.do") + public String faMemberListExcel(@ModelAttribute("memberSearchVO") final MemberSearchVO searchVO, final Model model) throws Exception { + + String title = "외사경찰현황"; + + List memberList = memberService.getFaListAll(searchVO); + + LinkedHashMap header = new LinkedHashMap(); + header.put("place1N2Str", "소속"); + header.put("positionStr", "계급"); + header.put("name", "성명"); + header.put("userid", "아이디"); + header.put("inoutStr", "근무형태"); + header.put("jobtypeStr", "직별"); + header.put("usegrade", "등급"); + + model.addAttribute("excel", new ExcelExporter(header, memberList, title)); + model.addAttribute("filename", title); + + return "excelView"; + } + + /** + * 외사경찰 정보수정 화면을 반환한다. + * + * "/faMemberUpdateView.do" = 관리자-외사경찰현황 + * "/cmmnMemberUpdateView.do" = 외사경찰-일반현황 + * + * @param memberVO 외사경찰 정보 + * @param model 모델 객체 + * @param request 리퀘스트 객체 + * @return 외사경찰 정보 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = {"/faMemberUpdateView.do", "/cmmnMemberUpdateView.do"}, method = RequestMethod.POST) + public String faMemberUpdateView(@ModelAttribute("memberVO") final MemberVO memberVO, final Model model, + final HttpServletRequest request) throws Exception { + /* 외사경찰 */ + memberVO.setUsertype(UserType.FA); + + model.addAttribute("memberVO", memberService.select(memberVO)); + model.addAttribute("place1List", codeService.getPlace1List(false)); + model.addAttribute("positionList", codeService.getPositionList()); + model.addAttribute("dutiesList", codeService.getDutiesList()); + model.addAttribute("jobTypeList", codeService.getJobTypeList()); + model.addAttribute("scholarshipList", codeService.getScholarshipList()); + + /* create or modify 플래그 */ + model.addAttribute("registerFlag", "modify"); + + /* 요청한 url에 따라 돌아갈 목록 타입을 설정한다. */ + String requestUrl = request.getRequestURL().toString(); + if (requestUrl.indexOf("/faMemberUpdateView.do") > 0) { + model.addAttribute("listType", "fa"); + } else { + model.addAttribute("listType", "cmmn"); + } + + return "admin/faMemberAdd.tiles"; + } + + /** + * 외사경찰 정보를 수정한다. + * + * @param multiRequest + * multpart타입의 요청 객체 + * @param memberVO + * 외사경찰 정보 객체 + * @param bindingResult + * 바인딩 객체 + * @param model + * 모델 객체 + * @param status + * 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = {"/faMemberUpdate.do", "/cmmnMemberUpdate.do"}, method = RequestMethod.POST) + public String faMemberUpdate(final MultipartHttpServletRequest multiRequest, @ModelAttribute("memberVO") final MemberVO memberVO, + final BindingResult bindingResult, final Model model, final SessionStatus status) throws Exception { + + HashMap result = new HashMap(); + + try { + /* 유효성 검사 */ + if (bindingResult.hasErrors()) { + model.addAttribute("memberVO", memberVO); + model.addAttribute("place1List", codeService.getPlace1List(false)); + model.addAttribute("positionList", codeService.getPositionList()); + model.addAttribute("dutiesList", codeService.getDutiesList()); + model.addAttribute("jobTypeList", codeService.getJobTypeList()); + model.addAttribute("scholarshipList", codeService.getScholarshipList()); + return "admin/faMemberAdd.tiles"; + } + + String [] deleteFiles = null; + result = memberService.updateFaMember(memberVO, multiRequest.getFileMap(), deleteFiles); + + if ((Integer) result.get("result") != 1) { + return "redirect:/admin/faMemberAdd.do"; + } + + } catch (Exception e) { + e.printStackTrace(); + } + + + /* 요청한 url에 따라 돌아갈 목록url을 반환한다. */ + String requestUrl = multiRequest.getRequestURL().toString(); + if (requestUrl.indexOf("/faMemberUpdate.do") > 0) { + return "redirect:/admin/faMemberList.do"; + } else { + return "redirect:/admin/faMemberCmmnList.do"; + } + } + + + + + /** + * 외사경찰 권한설정 화면을 반환한다. + * + * @param searchVO searchVO 객체 + * @param model 모델 객체 + * @return 외사경찰 권한설정 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/memberAuth.do") + public String memberAuth(final MemberSearchVO searchVO, final Model model) throws Exception { + + LoginUserVO user = UserUtil.getMemberInfo(); + if (StringUtils.isBlank(searchVO.getPlace1())) { + searchVO.setPlace1(user.getPlace1()); + } + + /* 페이징 처리 정보 */ + searchVO.setPageUnit(20); + searchVO.setPageSize(propertiesService.getInt("pageSize")); + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + int totSearchCnt = memberAuthService.getMemberListByPlace1Cnt(searchVO); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + + HashMap result = memberAuthService.getMemberListByPlace1(searchVO); + model.addAttribute("head", result.get("head")); + model.addAttribute("section", result.get("section")); + model.addAttribute("resultList", result.get("resultList")); + model.addAttribute("loginUserVO", user); + + String targetPlace1 = searchVO.getPlace1(); + if (StringUtils.isBlank(targetPlace1)) { + targetPlace1 = user.getPlace1(); + } + model.addAttribute("targetPlace1", targetPlace1); + + + + List placeList = codeService.getPlace1List(true); + model.addAttribute("placeList", placeList); + + return "admin/faMemberAuth.tiles"; + } + + /** + * 외사경찰의 권한을 설정한다. + * + * @param memberVO userid, usegrade 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @ResponseBody + @RequestMapping(value = "/memberAuth.json") + public HashMap memberAuth(final MemberVO memberVO) throws Exception { + HashMap results = new HashMap(); + int result = memberAuthService.updateMemberAuth(memberVO); + results.put("result", result); + return results; + } + + /** + * 외사경찰의 견문권한을 설정한다. + * + * @param memberVO userid, usegrade 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @ResponseBody + @RequestMapping(value = "/memberRpt.json") + public HashMap memberRpt(final MemberVO memberVO) throws Exception { + HashMap results = new HashMap(); + int result = memberAuthService.updateMemberRpt(memberVO); + results.put("result", result); + return results; + } + + /** + * 외사경찰 부서 계장 권한을 설정한다. + * + * @param memberVO userid 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @ResponseBody + @RequestMapping(value = "/updateSection.json") + public HashMap updateSection(final MemberVO memberVO) throws Exception { + HashMap results = new HashMap(); + int result = memberAuthService.updateSection(memberVO); + results.put("result", result); + return results; + } + + /** + * 외사경찰 부서 과장 권한을 설정한다. + * + * @param memberVO userid 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @ResponseBody + @RequestMapping(value = "/updateHead.json") + public HashMap updateHead(final MemberVO memberVO) throws Exception { + HashMap results = new HashMap(); + int result = memberAuthService.updateHead(memberVO); + results.put("result", result); + return results; + } + + + + /** + * 일반경찰 목록을 반환한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @param model 모델 객체 + * @return 외사경찰 정보 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/cmmnMemberList.do") + public String memberList(@ModelAttribute("memberSearchVO") final MemberSearchVO searchVO, final Model model) throws Exception { + try { + /* 일반 경찰 */ + searchVO.setUsertype(UserType.CM); + + /* 페이징 처리 정보 */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("pageSize")); + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + int totSearchCnt = memberService.selectListCnt(searchVO); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + + /* 게시판 상단 페이지 및 게시물 정보 표현을 위한 데이터 */ + int totCnt = memberService.selectTotalCnt(searchVO); + model.addAttribute("totalCnt", totCnt); + List resultList = memberService.selectList(searchVO); + model.addAttribute("resultList", resultList); + model.addAttribute("place1List", codeService.getPlace1List(false)); + } catch (Exception e) { + e.printStackTrace(); + } + + return "admin/cmmnMemberList.tiles"; + } + + /** + * 외사 경찰의 현황을 엑셀로 출력한다. + * + * @param model Model객체 + * @return 엑셀 + */ + @RequestMapping("/cmmnMemberListExcel.do") + public String memberListExcel(@ModelAttribute("memberSearchVO") final MemberSearchVO searchVO, final Model model) throws Exception { + + /* 일반 경찰 */ + searchVO.setUsertype(UserType.CM); + + String title = "일반경찰현황"; + + searchVO.setUsertype(""); + List memberList = memberService.selectListAll(searchVO); + + LinkedHashMap header = new LinkedHashMap(); + header.put("place3Str", "소속"); + header.put("positionStr", "계급"); + header.put("useridStr", "아이디"); + header.put("name", "성명"); + + model.addAttribute("excel", new ExcelExporter(header, memberList, title)); + model.addAttribute("filename", title); + + return "excelView"; + } + + + + /** + * 사용자 로그 통계를 반환한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @param model 모델 객체 + * @return 사용자 로그 통계 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/userLogStatistics.do") + public String userLogStatistics(@ModelAttribute("logSearchVO") final LogSearchVO searchVO, final Model model) throws Exception { + try { + /* 페이징 처리 정보 */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("pageSize")); + + if (StringUtils.isEmpty(searchVO.getSdate()) && StringUtils.isEmpty(searchVO.getEdate())) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Calendar day = Calendar.getInstance(); + day.add(Calendar.MONTH, -1); + searchVO.setSdate(sdf.format(day.getTime())); + + searchVO.setEdate(sdf.format(new Date())); + } + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + int totSearchCnt = logService.selectListCnt(searchVO); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + + /* 게시판 상단 페이지 및 게시물 정보 표현을 위한 데이터 */ + int totCnt = logService.selectTotalCnt(searchVO); + model.addAttribute("totalCnt", totCnt); + + model.addAttribute("resultList", logService.getUserLogList(searchVO)); + model.addAttribute("place1List", codeService.getPlace1List(false)); + } catch (Exception e) { + e.printStackTrace(); + } + + return "admin/logStatistics.tiles"; + } + + /** + * 접속설정 화면 반환한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @param model 모델 객체 + * @return 접속설정 정보 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/memberManage.do") + public String memberManage(@ModelAttribute("memberSearchVO") final MemberSearchVO searchVO, final Model model) throws Exception { + try { + /* 페이징 처리 정보 */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("pageSize")); + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + int totSearchCnt = memberService.selectListCnt(searchVO); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + + /* 게시판 상단 페이지 및 게시물 정보 표현을 위한 데이터 */ + int totCnt = memberService.selectTotalCnt(searchVO); + model.addAttribute("totalCnt", totCnt); + + List memberList = memberService.selectList(searchVO); + model.addAttribute("resultList", memberList); + model.addAttribute("place1List", codeService.getPlace1List(false)); + } catch (Exception e) { + e.printStackTrace(); + } + + return "admin/memberManage.tiles"; + } + + + /** + * 접속설정 화면 반환한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @param model 모델 객체 + * @return 접속설정 정보 화면 + * @throws Exception 기본 예외 처리 + */ + @ResponseBody + @RequestMapping("/initPw.json") + public HashMap initPw(final MemberVO memberVO, final String[] targetId) throws Exception { + HashMap resultMap = new HashMap(); + try { + resultMap = memberService.initPassword(memberVO, targetId); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + @Autowired + private SessionRegistry sessionRegistry; + @Resource(name="securityMapper") + private SecurityMapper securityMapper; + @Resource(name="userService") + private UserDetailsService securityService; + @Resource(name="loginSuccessHandler") + private AuthenticationSuccessHandler successHandler; + /** + * 사용자 접속을 해지한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @param model 모델 객체 + * @return 접속설정 정보 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/loginUser.do") + public void loginUser(final HttpServletRequest request, final HttpServletResponse response, final String userid) throws Exception { + Authentication authentication = null; + if (userid != null) { + authentication = login(userid); + } else { + authentication = UserUtil.getCurrentAuthentication(); + } + successHandler.onAuthenticationSuccess(request, response, authentication); + } + + /** + * 사용자 접속을 해지한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @param model 모델 객체 + * @return 접속설정 정보 화면 + * @throws Exception 기본 예외 처리 + */ + @ResponseBody + @RequestMapping("/releaseConnection.json") + public HashMap releaseConnection(final MemberVO memberVO) throws Exception { + HashMap resultMap = new HashMap(); + resultMap.put("result", logout(memberVO.getUserid())); + return resultMap; + } + + /** + * 접속 제한을 해지한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @param model 모델 객체 + * @return 접속설정 정보 화면 + * @throws Exception 기본 예외 처리 + */ + @ResponseBody + @RequestMapping("/releaseRestriction.json") + public HashMap releaseRestriction(final MemberVO memberVO) throws Exception { + HashMap resultMap = new HashMap(); + resultMap.put("result", 0); + + try { + resultMap = memberService.initChkcnt(memberVO); + logout(memberVO.getUserid()); + } catch (Exception e) { + e.printStackTrace(); + } + + return resultMap; + } + + /** + * 해당 아이디를 세션에서 로그아웃 시킨다. + * + * @param userid 로그아웃 대상 아이디 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + private final int logout(final String userid) { + int result = 0; + EgovUserDetails target = null; + List principals = sessionRegistry.getAllPrincipals(); + for (Object principal: principals) { + if (principal instanceof EgovUserDetails) { + EgovUserDetails details = (EgovUserDetails) principal; + LoginUserVO vo = (LoginUserVO) details.getEgovUserVO(); + if (userid.equals(vo.getUserid())) { + for (final SessionInformation session : sessionRegistry.getAllSessions(principal, false)) { + session.expireNow(); + vo.setLoginchk("N"); + result = securityMapper.updateLoginInfo(vo); + } + break; + } + } + } + return result; + } + + /** + * 해당 아이디로 로그인한다. + * + * @param userid 로그인 대상 아이디 + * @return Authentication 인증정보객체 + * @throws Exception 기본 예외 처리 + */ + private final Authentication login(final String userid) { + Authentication auth = null; + try { + UserDetails user = securityService.loadUserByUsername(userid); + auth = new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities()); + SecurityContextHolder.getContext().setAuthentication(auth); + } catch (Exception e) { + e.printStackTrace(); + } + return auth; + } + + + + /** + * 코드관리 페이지를 반환한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @param model 모델 객체 + * @return 코드관리 페이지 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/codeManage.do") + public String codeManage(final CodeVO codeVO, final Model model) throws Exception { + + if (codeVO.getCode1() != null) { + model.addAttribute("code", codeService.getCodeValue("C000", codeVO.getCode1())); + } + model.addAttribute("code1List", codeService.getCodeValues("C000", null)); + + return "admin/codeManage.tiles"; + } + + /** + * 세부코드 리스트를 반환한다. + * + * @param code1 대분류코드 + * @param model 모델 객체 + * @return 세부코드 리스트 + * @throws Exception 기본 예외 처리 + */ + @ResponseBody + @RequestMapping("/getCode2List.json") + public HashMap getCode2List(final String code1) throws Exception { + HashMap resultMap = new HashMap(); + try { + resultMap.put("code2List", codeService.getCodeValues(code1, null)); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + /** + * 코드를 추가한다. + * + * @param codeVO CodeVO 객체 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @ResponseBody + @RequestMapping("/insertCode.json") + public HashMap insertCode(final CodeVO codeVO) throws Exception { + HashMap resultMap = new HashMap(); + try { + resultMap.put("result", codeService.insertCode(codeVO)); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + /** + * 코드를 수정한다. + * + * @param codeVO CodeVO 객체 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @ResponseBody + @RequestMapping("/updateCode.json") + public HashMap updateCode(final CodeVO codeVO) throws Exception { + HashMap resultMap = new HashMap(); + try { + resultMap.put("result", codeService.updateCode(codeVO)); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + /** + * 코드를 삭제한다. + * + * @param codeVO CodeVO 객체 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @ResponseBody + @RequestMapping("/deleteCode.json") + public HashMap deleteCode(final CodeVO codeVO) throws Exception { + HashMap resultMap = new HashMap(); + try { + resultMap.put("result", codeService.deleteCode(codeVO)); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } +} diff --git a/src/main/java/kcg/faics/arrest/service/ArrestService.java b/src/main/java/kcg/faics/arrest/service/ArrestService.java new file mode 100644 index 0000000..bdb5912 --- /dev/null +++ b/src/main/java/kcg/faics/arrest/service/ArrestService.java @@ -0,0 +1,143 @@ +package kcg.faics.arrest.service; + +/** + * ArrestService.java + * @author 이영호 + * @since 2017. 3. 17. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2017. 3. 17. 이영호 최초생성 + * + */ + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.arrest.vo.ArrestCountVO; +import kcg.faics.arrest.vo.ArrestSearchVO; +import kcg.faics.arrest.vo.ArrestVO; +import kcg.faics.cmmn.vo.CodeVO; + +public interface ArrestService { + + /** + * 주소 대분류를 반환한다. + * + * @param + * @return 소속 1 목록 + * @throws Exception + * 기본 예외 처리 + */ + List getAddressAreaList(String area) throws Exception; + + /** + * 중국어선 나포정보를 등록한다. + * + * @param arrestVO + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + HashMap insert(ArrestVO arrestVO) throws Exception; + + /** + * 중국어선 나포정보를 수정한다. + * + * @param arrestVO + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + HashMap update(ArrestVO arrestVO) throws Exception; + + /** + * 중국어선 나포정보를 삭제한다. + * + * @param arrestVO + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + HashMap delete(ArrestVO arrestVO) throws Exception; + + /** + * 중국어선 나포정보를 조회한다. + * + * @param arrestVO + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + ArrestVO select(ArrestVO arrestVO) throws Exception; + + /** + * 중국어선 나포정보 목록을 전체조회한다. + * + * @param arrestVO + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + List getArrestListAll(ArrestSearchVO arrestSearchVO) throws Exception; + + /** + * 중국어선 나포정보 목록을 조회(검색)한다. + * + * @param arrestVO + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + List getArrestList(ArrestSearchVO arrestSearchVO) throws Exception; + + /** + * 중국어선 나포정보 목록을 조회(검색)한다. + * + * @param arrestVO + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + List getArrestListExcel(ArrestSearchVO arrestSearchVO) throws Exception; + + /** + * 중국어선 나포정보 목록을 조회(검색)한다. + * + * @param arrestVO + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + List> getArrestListExcelHashMap(ArrestSearchVO arrestSearchVO) throws Exception; + + /** + * 중국어선 나포정보 목록 집계정보를 조회한다. + * + * @param arrestVO + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + ArrestVO getArrestListCount(ArrestSearchVO arrestSearchVO) throws Exception; + + /** + * 중국어선 나포정보 목록 집계정보를 조회한다. + * + * @param arrestVO + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + ArrestVO getArrestListCountExcel(ArrestSearchVO arrestSearchVO) throws Exception; + + /** + * 중국어선 나포정보 목록 전체 집계정보를 조회한다. + * + * @param arrestVO + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + ArrestCountVO getArrestListAllCount(ArrestSearchVO arrestSearchVO) throws Exception; +} diff --git a/src/main/java/kcg/faics/arrest/service/impl/ArrestMapper.java b/src/main/java/kcg/faics/arrest/service/impl/ArrestMapper.java new file mode 100644 index 0000000..1164334 --- /dev/null +++ b/src/main/java/kcg/faics/arrest/service/impl/ArrestMapper.java @@ -0,0 +1,218 @@ + package kcg.faics.arrest.service.impl; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.arrest.vo.ArrestCountVO; +import kcg.faics.arrest.vo.ArrestSearchVO; +import kcg.faics.arrest.vo.ArrestVO; +import kcg.faics.board.vo.BoardSearchVO; +import kcg.faics.board.vo.BoardVO; +import kcg.faics.cmmn.vo.CodeVO; +import kcg.faics.member.vo.MemberSearchVO; +import kcg.faics.member.vo.MemberVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + + +/** + * ArrestMapper.java + * @author 이영호 + * @since 2017. 3. 14. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2017. 3. 16. 이영호 최초생성 + * + */ +@Repository("arrestMapper") +public class ArrestMapper extends EgovAbstractMapper { + + + + + + /** + * 중국어선 나포정보를 등록한다. + * + * @param arrestVO 게시판 내용 구성 객체 + * @return 글 총 갯수 + * @throws Exception 기본 예외 처리 + */ + public HashMap insertArrest(final ArrestVO arrestVO) throws Exception { + + HashMap resultMap = new HashMap(); + + int result = 0; + try { + result = insert("Arrest.insertArrest", arrestVO); + resultMap.put("result", result); + resultMap.put("id", ""); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + }; + + /** + * 중국어선 나포정보를 수정한다. + * + * @param arrestVO 나포정보 객체 + * @return 글 총 갯수 + * @throws Exception 기본 예외 처리 + */ + public HashMap updateArrest(final ArrestVO arrestVO) throws Exception { + + HashMap resultMap = new HashMap(); + + int result = 0; + try { + result = insert("Arrest.updateArrest", arrestVO); + resultMap.put("result", result); + resultMap.put("id", arrestVO.getArrestId()); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + /** + * 중국어선 나포정보를 삭제한다. + * + * @param boardVO 게시판 내용 구성 객체 + * @return 글 총 갯수 + * @throws Exception 기본 예외 처리 + */ + public HashMap deleteArrest(final ArrestVO arrestVO) throws Exception { + + HashMap resultMap = new HashMap(); + + int result = 0; + try { + result = insert("Arrest.deleteArrest", arrestVO); + resultMap.put("result", result); + resultMap.put("arrestId", arrestVO.getArrestId()); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + }; + + /** + * 주소지 시군구 명을 반환한다. + * + * @param onlyCentral + * 중앙부처만 반환 - true, 모든 목록반환 - false + * @return 소속 1 목록 + * @throws Exception 기본 예외 처리 + */ + public List getAddressAreaList(String area) throws Exception { + List tempList = selectList("Arrest.getAddressAreaList", area); + return tempList; + } + + /** + * 중국어선 나포정보를 반환한다. + * + * @param dataVO + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + public ArrestVO getArrest(final ArrestVO dataVO) { + ArrestVO result = selectOne("Arrest.getArrest", dataVO); + return result; + } + + /** + * 중국어선 나포정보 목록(no paging)을 반환한다. + * + * @param arrestSearchVO + * 검색정보 객체 + * @return 게시물 리스트 + * @throws Exception + * 기본 예외 처리 + */ + public List getArrestListAll(final ArrestSearchVO arrestSearchVO) throws Exception { + return selectList("Arrest.getArrestListAll", arrestSearchVO); + } + + /** + * 중국어선 나포정보 목록조회 + * + * @param arrestSearchVO + * 검색정보 객체 + * @return 게시물 리스트 + * @throws Exception + * 기본 예외 처리 + */ + public List getArrestList(final ArrestSearchVO arrestSearchVO) throws Exception { + return selectList("Arrest.getArrestList", arrestSearchVO); + } + /** + * 중국어선 나포정보 집계정보조회 + * + * @param arrestSearchVO + * 검색정보 객체 + * @return 게시물 리스트 + * @throws Exception + * 기본 예외 처리 + */ + public ArrestVO getArrestListCount(final ArrestSearchVO arrestSearchVO) throws Exception { + return selectOne("Arrest.getArrestListCount", arrestSearchVO); + } + + /** + * 중국어선 나포정보 집계정보조회 + * + * @param arrestSearchVO + * 검색정보 객체 + * @return 게시물 리스트 + * @throws Exception + * 기본 예외 처리 + */ + public ArrestVO getArrestListCountExcel(final ArrestSearchVO arrestSearchVO) throws Exception { + return selectOne("Arrest.getArrestListCountExcel", arrestSearchVO); + } + + /** + * 중국어선 나포정보 집계정보조회 + * + * @param arrestSearchVO + * 검색정보 객체 + * @return 게시물 리스트 + * @throws Exception + * 기본 예외 처리 + */ + public ArrestCountVO getArrestListAllCount(final ArrestSearchVO arrestSearchVO) throws Exception { + return selectOne("Arrest.getArrestListAllCount", arrestSearchVO); + } + + /** + * 중국어선 나포정보 집계정보조회 + * + * @param arrestSearchVO + * 검색정보 객체 + * @return 게시물 리스트 + * @throws Exception + * 기본 예외 처리 + */ + public List getArrestListExcel(final ArrestSearchVO arrestSearchVO) throws Exception { + return selectList("Arrest.getArrestListExcel", arrestSearchVO); + } + + /** + * 중국어선 나포정보 집계정보조회 + * + * @param arrestSearchVO + * 검색정보 객체 + * @return 게시물 리스트 + * @throws Exception + * 기본 예외 처리 + */ + public List> getArrestListExcelHashMap(final ArrestSearchVO arrestSearchVO) { + return selectList("Arrest.getArrestListExcelHashMap", arrestSearchVO); + } +} + diff --git a/src/main/java/kcg/faics/arrest/service/impl/ArrestServiceImpl.java b/src/main/java/kcg/faics/arrest/service/impl/ArrestServiceImpl.java new file mode 100644 index 0000000..9cb4f3c --- /dev/null +++ b/src/main/java/kcg/faics/arrest/service/impl/ArrestServiceImpl.java @@ -0,0 +1,247 @@ +/** + * CommonService.java + * @author 임새미 + * @since 2016. 10. 13. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 13. 임새미 최초생성 + * + */ +package kcg.faics.arrest.service.impl; + +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; + +import kcg.faics.arrest.service.ArrestService; +import kcg.faics.arrest.vo.ArrestCountVO; +import kcg.faics.arrest.vo.ArrestSearchVO; +import kcg.faics.arrest.vo.ArrestVO; +import kcg.faics.cmmn.vo.CodeVO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + + +/** + * ArrestServiceImpl.java + * @author 이영호 + * @since 2016. 3. 17. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2017. 3. 17. 이영호 최초생성 + * + */ +@Service("arrestService") +public class ArrestServiceImpl implements ArrestService { + + /** + * ArrestMapper. + */ + @Resource(name = "arrestMapper") + private ArrestMapper arrestMapper; + + + /** + * 주소목록을 조회한다. + * + * @param String area + * @param String area + * @return List 특별광역시도 목록 + * @exception Exception 기본 예외 처리 + */ + @Override + public List getAddressAreaList(String area) throws Exception { + List codeVOList = arrestMapper.getAddressAreaList(area); + return codeVOList; + } + + /** + * 중국어선 나포정보를 추가한다. + * + * @param dataVO 사용자 정보 객체 + * @param fileMap 업로드 파일정보 + * @return HashMap/ seq : 게시물 , result : 성공 - 1, 실패 - 0 + * @exception Exception 기본 예외 처리 + */ + @Override + @Transactional + public HashMap insert(final ArrestVO arrestVO) throws Exception { + + HashMap result = new HashMap(); + + // + if(!arrestVO.getShipProcType().equals("01")){ + arrestVO.setCommissionCost(""); + } + + if(arrestVO.getMarginPaymentYn().equals("N")){ + arrestVO.setMarginPaymentDate(""); + } + + result = arrestMapper.insertArrest(arrestVO); + + return result; + } + + /** + * 중국어선 나포정보를 수정한다. + * + * @param dataVO 사용자 정보 객체 + * @param fileMap 업로드 파일정보 + * @return HashMap/ seq : 게시물 , result : 성공 - 1, 실패 - 0 + * @exception Exception 기본 예외 처리 + */ + @Override + @Transactional + public HashMap update(final ArrestVO arrestVO) throws Exception { + + HashMap result = new HashMap(); + + if(!arrestVO.getShipProcType().equals("01")){ + arrestVO.setCommissionCost(""); + } + + if(arrestVO.getMarginPaymentYn().equals("N")){ + arrestVO.setMarginPaymentDate(""); + } + + + result = arrestMapper.updateArrest(arrestVO); + + + + return result; + } + + /** + * 중국어선 나포정보를 삭제한다. + * + * @param dataVO 사용자 정보 객체 + * @param fileMap 업로드 파일정보 + * @return HashMap/ seq : 게시물 , result : 성공 - 1, 실패 - 0 + * @exception Exception 기본 예외 처리 + */ + @Override + @Transactional + public HashMap delete(final ArrestVO arrestVO) throws Exception { + + HashMap result = new HashMap(); + result = arrestMapper.deleteArrest(arrestVO); + + + + return result; + } + + /** + * 중국어선 나포정보 단건 조회 + * + * @param dataVO userid + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public ArrestVO select(final ArrestVO dataVO) throws Exception { + + ArrestVO result = arrestMapper.getArrest(dataVO); + + return result; + } + + /** + * 중국어선 나포정보 목록 전체 조회 + * + * @param dataVO userid + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public List getArrestListAll(final ArrestSearchVO arrestSearchVO) throws Exception { + + return arrestMapper.getArrestListAll(arrestSearchVO); + } + + /** + * 중국어선 나포정보 목록 전체 조회 + * + * @param dataVO userid + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public ArrestCountVO getArrestListAllCount(final ArrestSearchVO arrestSearchVO) throws Exception { + + return arrestMapper.getArrestListAllCount(arrestSearchVO); + } + + /** + * 중국어선 나포정보 목록 조회 + * + * @param dataVO arrestSearchVO + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public List getArrestList(final ArrestSearchVO arrestSearchVO) throws Exception { + + return arrestMapper.getArrestList(arrestSearchVO); + } + + /** + * 중국어선 나포정보 목록 조회 (엑셀) + * + * @param dataVO arrestSearchVO + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public List getArrestListExcel(final ArrestSearchVO arrestSearchVO) throws Exception { + + return arrestMapper.getArrestListExcel(arrestSearchVO); + } + + /** + * 중국어선 나포정보 집계정보 조회 + * + * @param dataVO userid + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public ArrestVO getArrestListCount(final ArrestSearchVO arrestSearchVO) throws Exception { + + return arrestMapper.getArrestListCount(arrestSearchVO); + } + + /** + * 중국어선 나포정보 집계정보 조회 + * + * @param dataVO arrestSearchVO + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public ArrestVO getArrestListCountExcel(final ArrestSearchVO arrestSearchVO) + throws Exception { + + return arrestMapper.getArrestListCountExcel(arrestSearchVO); + } + + /** + * 중국어선 나포정보 목록 조회 (엑셀) + * + * @param dataVO arrestSearchVO + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public List> getArrestListExcelHashMap(final ArrestSearchVO arrestSearchVO) throws Exception { + + return arrestMapper.getArrestListExcelHashMap(arrestSearchVO); + } + + +} diff --git a/src/main/java/kcg/faics/arrest/vo/ArrestCountVO.java b/src/main/java/kcg/faics/arrest/vo/ArrestCountVO.java new file mode 100644 index 0000000..916c7d1 --- /dev/null +++ b/src/main/java/kcg/faics/arrest/vo/ArrestCountVO.java @@ -0,0 +1,455 @@ +package kcg.faics.arrest.vo; + + +public class ArrestCountVO { + /** + * 특정금지 + */ + private int particularBanCnt = 0; + /** + * 무허가 + */ + private int withoutLicenseCnt = 0; + /** + * 영해 + */ + private int territWatersCnt = 0; + /** + * EEZ + */ + private int eezCnt = 0; + /** + * 특공방 + */ + private int specBatlCnt = 0; + /** + * NLL + */ + private int nllCnt = 0; + /** + * 선박제원선원수 + */ + private int shipCrewCnt = 0; + /** + * 범칙수량 + */ + private int vioCnt = 0; + /** + * 위판금액 + */ + private int priatedAmt = 0; + /** + * 조사중 + */ + private int procContNCnt = 0; // + /** + * 완료 + */ + private int procContYCnt = 0; // + /** + * 납부액 + */ + private int paymentAmt = 0; // + /** + * 미납 + */ + private int noPaymentCnt = 0; // + /** + * 미납액 + */ + private int noPaymentAmt = 0; // + /** + * 위탁관리 + */ + private int shipProcTypeACnt = 0; // + /** + * 퇴거 + */ + private int shipProcTypeBCnt = 0; // + /** + * 직접인계 + */ + private int shipProcTypeCCnt = 0; // + /** + * 폐기 + */ + private int shipProcTypeDCnt = 0; // + /** + * 몰수 + */ + private int shipProcTypeECnt = 0; // + /** + * 구속 선장수 + */ + private int captainCount = 0; // + /** + * 구속 기관장수 + */ + private int engineerCount = 0; // + /** + * 구속 항해사수 + */ + private int mateCount = 0; // + /** + * 구속 선원수 + */ + private int crewCount = 0; // + /** + * 위탁관리비 + */ + private int commissionCost = 0; // + /** + * 어구압수 틀 + */ + private int gearCast = 0; // + /** + * 어구압수 폭 + */ + private int gearWidth = 0; // + /** + * 현장조사 건수 + */ + private int fieldCnt = 0; // + /** + * 전체 건수 + */ + private int totalCnt = 0; + + + /** + * @return the noPaymentAmt + */ + public int getNoPaymentAmt() { + return noPaymentAmt; + } + /** + * @param noPaymentAmt the noPaymentAmt to set + */ + public void setNoPaymentAmt(int noPaymentAmt) { + this.noPaymentAmt = noPaymentAmt; + } + /** + * @return the totalCnt + */ + public int getTotalCnt() { + return totalCnt; + } + /** + * @param totalCnt the totalCnt to set + */ + public void setTotalCnt(int totalCnt) { + this.totalCnt = totalCnt; + } + /** + * @return the fieldCnt + */ + public int getFieldCnt() { + return fieldCnt; + } + /** + * @param fieldCnt the fieldCnt to set + */ + public void setFieldCnt(int fieldCnt) { + this.fieldCnt = fieldCnt; + } + /** + * @return the particularBanCnt + */ + public int getParticularBanCnt() { + return particularBanCnt; + } + /** + * @param particularBanCnt the particularBanCnt to set + */ + public void setParticularBanCnt(int particularBanCnt) { + this.particularBanCnt = particularBanCnt; + } + /** + * @return the withoutLicenseCnt + */ + public int getWithoutLicenseCnt() { + return withoutLicenseCnt; + } + /** + * @param withoutLicenseCnt the withoutLicenseCnt to set + */ + public void setWithoutLicenseCnt(int withoutLicenseCnt) { + this.withoutLicenseCnt = withoutLicenseCnt; + } + /** + * @return the territWatersCnt + */ + public int getTerritWatersCnt() { + return territWatersCnt; + } + /** + * @param territWatersCnt the territWatersCnt to set + */ + public void setTerritWatersCnt(int territWatersCnt) { + this.territWatersCnt = territWatersCnt; + } + /** + * @return the eezCnt + */ + public int getEezCnt() { + return eezCnt; + } + /** + * @param eezCnt the eezCnt to set + */ + public void setEezCnt(int eezCnt) { + this.eezCnt = eezCnt; + } + /** + * @return the specBatlCnt + */ + public int getSpecBatlCnt() { + return specBatlCnt; + } + /** + * @param specBatlCnt the specBatlCnt to set + */ + public void setSpecBatlCnt(int specBatlCnt) { + this.specBatlCnt = specBatlCnt; + } + /** + * @return the nllCnt + */ + public int getNllCnt() { + return nllCnt; + } + /** + * @param nllCnt the nllCnt to set + */ + public void setNllCnt(int nllCnt) { + this.nllCnt = nllCnt; + } + /** + * @return the shipCrewCnt + */ + public int getShipCrewCnt() { + return shipCrewCnt; + } + /** + * @param shipCrewCnt the shipCrewCnt to set + */ + public void setShipCrewCnt(int shipCrewCnt) { + this.shipCrewCnt = shipCrewCnt; + } + /** + * @return the vioCnt + */ + public int getVioCnt() { + return vioCnt; + } + /** + * @param vioCnt the vioCnt to set + */ + public void setVioCnt(int vioCnt) { + this.vioCnt = vioCnt; + } + /** + * @return the priatedAmt + */ + public int getPriatedAmt() { + return priatedAmt; + } + /** + * @param priatedAmt the priatedAmt to set + */ + public void setPriatedAmt(int priatedAmt) { + this.priatedAmt = priatedAmt; + } + /** + * @return the procContNCnt + */ + public int getProcContNCnt() { + return procContNCnt; + } + /** + * @param procContNCnt the procContNCnt to set + */ + public void setProcContNCnt(int procContNCnt) { + this.procContNCnt = procContNCnt; + } + /** + * @return the procContYCnt + */ + public int getProcContYCnt() { + return procContYCnt; + } + /** + * @param procContYCnt the procContYCnt to set + */ + public void setProcContYCnt(int procContYCnt) { + this.procContYCnt = procContYCnt; + } + /** + * @return the paymentAmt + */ + public int getPaymentAmt() { + return paymentAmt; + } + /** + * @param paymentAmt the paymentAmt to set + */ + public void setPaymentAmt(int paymentAmt) { + this.paymentAmt = paymentAmt; + } + /** + * @return the noPaymentCnt + */ + public int getNoPaymentCnt() { + return noPaymentCnt; + } + /** + * @param noPaymentCnt the noPaymentCnt to set + */ + public void setNoPaymentCnt(int noPaymentCnt) { + this.noPaymentCnt = noPaymentCnt; + } + /** + * @return the shipProcTypeACnt + */ + public int getShipProcTypeACnt() { + return shipProcTypeACnt; + } + /** + * @param shipProcTypeACnt the shipProcTypeACnt to set + */ + public void setShipProcTypeACnt(int shipProcTypeACnt) { + this.shipProcTypeACnt = shipProcTypeACnt; + } + /** + * @return the shipProcTypeBCnt + */ + public int getShipProcTypeBCnt() { + return shipProcTypeBCnt; + } + /** + * @param shipProcTypeBCnt the shipProcTypeBCnt to set + */ + public void setShipProcTypeBCnt(int shipProcTypeBCnt) { + this.shipProcTypeBCnt = shipProcTypeBCnt; + } + /** + * @return the shipProcTypeCCnt + */ + public int getShipProcTypeCCnt() { + return shipProcTypeCCnt; + } + /** + * @param shipProcTypeCCnt the shipProcTypeCCnt to set + */ + public void setShipProcTypeCCnt(int shipProcTypeCCnt) { + this.shipProcTypeCCnt = shipProcTypeCCnt; + } + /** + * @return the shipProcTypeDCnt + */ + public int getShipProcTypeDCnt() { + return shipProcTypeDCnt; + } + /** + * @param shipProcTypeDCnt the shipProcTypeDCnt to set + */ + public void setShipProcTypeDCnt(int shipProcTypeDCnt) { + this.shipProcTypeDCnt = shipProcTypeDCnt; + } + /** + * @return the shipProcTypeECnt + */ + public int getShipProcTypeECnt() { + return shipProcTypeECnt; + } + /** + * @param shipProcTypeECnt the shipProcTypeECnt to set + */ + public void setShipProcTypeECnt(int shipProcTypeECnt) { + this.shipProcTypeECnt = shipProcTypeECnt; + } + /** + * @return the captainCount + */ + public int getCaptainCount() { + return captainCount; + } + /** + * @param captainCount the captainCount to set + */ + public void setCaptainCount(int captainCount) { + this.captainCount = captainCount; + } + /** + * @return the engineerCount + */ + public int getEngineerCount() { + return engineerCount; + } + /** + * @param engineerCount the engineerCount to set + */ + public void setEngineerCount(int engineerCount) { + this.engineerCount = engineerCount; + } + /** + * @return the mateCount + */ + public int getMateCount() { + return mateCount; + } + /** + * @param mateCount the mateCount to set + */ + public void setMateCount(int mateCount) { + this.mateCount = mateCount; + } + /** + * @return the crewCount + */ + public int getCrewCount() { + return crewCount; + } + /** + * @param crewCount the crewCount to set + */ + public void setCrewCount(int crewCount) { + this.crewCount = crewCount; + } + /** + * @return the commissionCost + */ + public int getCommissionCost() { + return commissionCost; + } + /** + * @param commissionCost the commissionCost to set + */ + public void setCommissionCost(int commissionCost) { + this.commissionCost = commissionCost; + } + /** + * @return the gearCast + */ + public int getGearCast() { + return gearCast; + } + /** + * @param gearCast the gearCast to set + */ + public void setGearCast(int gearCast) { + this.gearCast = gearCast; + } + /** + * @return the gearWidth + */ + public int getGearWidth() { + return gearWidth; + } + /** + * @param gearWidth the gearWidth to set + */ + public void setGearWidth(int gearWidth) { + this.gearWidth = gearWidth; + } +} diff --git a/src/main/java/kcg/faics/arrest/vo/ArrestSearchVO.java b/src/main/java/kcg/faics/arrest/vo/ArrestSearchVO.java new file mode 100644 index 0000000..894af7e --- /dev/null +++ b/src/main/java/kcg/faics/arrest/vo/ArrestSearchVO.java @@ -0,0 +1,349 @@ +/* + * Copyright 2014 MOPAS(Ministry of Public Administration and Security). + * + * Licensed 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 + * + * http://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. + */ +package kcg.faics.arrest.vo; + +import kcg.faics.cmmn.bbs.BaseSearchVO; + + +/** + * ArrestSearchVO.java + * @author 이영호 + * @since 2017. 3. 15. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2017. 3. 15. 이영호 최초생성 + * + */ +public class ArrestSearchVO extends BaseSearchVO { + + /** + * 시작일자 + */ + private String startDate = ""; + /** + * 종료일자 + */ + private String endDate = ""; + /** + * 검거기관(대분류) + */ + private String agencyType = ""; + /** + * 검거기관 + */ + private String agencyGuard = ""; + /** + * 검거기관(함정) + */ + private String agencyVessel = ""; + /** + * 선종 + */ + private String addrArea = ""; + /** + * 선종 + */ + private String addrCity = ""; + /** + * 선종 + */ + private String violateType = ""; + /** + * 선종 + */ + private String shipName = ""; + + /** + * 기간 처음 invasionType + */ + private String[] invasionType = null; + + /** + * 선종 + */ + private String[] shipType = null; + /** + * 처리현황 + */ + private String[] procCondition = null; + /** + * 톤수 + */ + private String[] arrShipTonnage = null; + + /** + * 담보금 납부 + */ + private String[] marginPayment = null; + /** + * 선박처리구분 + */ + private String[] shipProcType = null; + /** + * 선질 + */ + private String[] shipQuality = null; + /** + * 선적 + */ + private String[] shipMent = null; + /** + * NLL여부 + */ + private String[] nllYn = null; + /** + * 특수공무집행방해여부(특공방) + */ + private String[] specBatlYn = null; + + /** + * @return the agencyType + */ + public String getAgencyType() { + return agencyType; + } + /** + * @param agencyType the agencyType to set + */ + public void setAgencyType(String agencyType) { + this.agencyType = agencyType; + } + /** + * @return the agencyGuard + */ + public String getAgencyGuard() { + return agencyGuard; + } + /** + * @param agencyGuard the agencyGuard to set + */ + public void setAgencyGuard(String agencyGuard) { + this.agencyGuard = agencyGuard; + } + /** + * @return the agencyVessel + */ + public String getAgencyVessel() { + return agencyVessel; + } + /** + * @param agencyVessel the agencyVessel to set + */ + public void setAgencyVessel(String agencyVessel) { + this.agencyVessel = agencyVessel; + } + /** + * @return the nllYn + */ + public String[] getNllYn() { + return nllYn; + } + /** + * @param nllYn the nllYn to set + */ + public void setNllYn(String[] nllYn) { + this.nllYn = nllYn; + } + /** + * @return the specBatlYn + */ + public String[] getSpecBatlYn() { + return specBatlYn; + } + /** + * @param specBatlYn the specBatlYn to set + */ + public void setSpecBatlYn(String[] specBatlYn) { + this.specBatlYn = specBatlYn; + } + /** + * @return the shipProcType + */ + public String[] getShipProcType() { + return shipProcType; + } + /** + * @param shipProcType the shipProcType to set + */ + public void setShipProcType(String[] shipProcType) { + this.shipProcType = shipProcType; + } + /** + * @return the shipQuality + */ + public String[] getShipQuality() { + return shipQuality; + } + /** + * @param shipQuality the shipQuality to set + */ + public void setShipQuality(String[] shipQuality) { + this.shipQuality = shipQuality; + } + /** + * @return the shipMent + */ + public String[] getShipMent() { + return shipMent; + } + /** + * @param shipMent the shipMent to set + */ + public void setShipMent(String[] shipMent) { + this.shipMent = shipMent; + } + /** + * @return the startDate + */ + public String getStartDate() { + return startDate; + } + /** + * @param startDate the startDate to set + */ + public void setStartDate(String startDate) { + this.startDate = startDate; + } + /** + * @return the endDate + */ + public String getEndDate() { + return endDate; + } + /** + * @param endDate the endDate to set + */ + public void setEndDate(String endDate) { + this.endDate = endDate; + } + /** + * @return the addrArea + */ + public String getAddrArea() { + return addrArea; + } + /** + * @param addrArea the addrArea to set + */ + public void setAddrArea(String addrArea) { + this.addrArea = addrArea; + } + /** + * @return the addrCity + */ + public String getAddrCity() { + return addrCity; + } + /** + * @param addrCity the addrCity to set + */ + public void setAddrCity(String addrCity) { + this.addrCity = addrCity; + } + /** + * @return the violateType + */ + public String getViolateType() { + return violateType; + } + /** + * @param violateType the violateType to set + */ + public void setViolateType(String violateType) { + this.violateType = violateType; + } + /** + * @return the invasionType + */ + public String getShipName() { + return shipName; + } + /** + * @param shipName the shipName to set + */ + public void setShipName(String shipName) { + this.shipName = shipName; + } + /** + * @return the invasionType + */ + public String[] getInvasionType() { + return invasionType; + } + /** + * @param invasionType the invasionType to set + */ + public void setInvasionType(String[] invasionType) { + this.invasionType = invasionType; + } + /** + * @return the shipType + */ + public String[] getShipType() { + return shipType; + } + /** + * @param shipType the shipType to set + */ + public void setShipType(String[] shipType) { + this.shipType = shipType; + } + /** + * @return the procCondition + */ + public String[] getProcCondition() { + return procCondition; + } + /** + * @param procCondition the procCondition to set + */ + public void setProcCondition(String[] procCondition) { + this.procCondition = procCondition; + } + /** + * @return the arrShipTonnage + */ + public String[] getArrShipTonnage() { + return arrShipTonnage; + } + /** + * @param arrShipTonnage the arrShipTonnage to set + */ + public void setArrShipTonnage(String[] arrShipTonnage) { + this.arrShipTonnage = arrShipTonnage; + } + /** + * @return the marginPayment + */ + public String[] getMarginPayment() { + return marginPayment; + } + /** + * @param marginPayment the marginPayment to set + */ + public void setMarginPayment(String[] marginPayment) { + this.marginPayment = marginPayment; + } + /** + * @return the obj.length + */ + public static int length(String[] obj){ + return obj.length; + } + +} + \ No newline at end of file diff --git a/src/main/java/kcg/faics/arrest/vo/ArrestVO.java b/src/main/java/kcg/faics/arrest/vo/ArrestVO.java new file mode 100644 index 0000000..cc76cab --- /dev/null +++ b/src/main/java/kcg/faics/arrest/vo/ArrestVO.java @@ -0,0 +1,1914 @@ +package kcg.faics.arrest.vo; + +/** + * ArrestVO.java + * @author 이영호 + * @since 2017. 3. 13. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2017. 3. 13. 이영호 최초생성 + * + */ +public class ArrestVO { + /** + * 중국어선 나포정보 ID. + */ + private String arrestId = ""; + /** + * 나포일시 + */ + private String arrestDate = ""; // 나포일시 + /** + * 중국어선 나포정보 ID. + */ + private String agencyType = ""; // 검거기관(종류) + /** + * 검거기관(종류) + */ + private String agencyGuard = ""; // 검거기관(안전서) + /** + * 검거기관(안전서) + */ + private String agencyVessel = ""; // 검거기관(함정) + /** + * 검거기관(함정) + */ + private String procCondition = ""; // 처리현황 + /** + * 처리현황 + */ + private String violateType = ""; // 위반내용구분 + /** + * 위반내용구분 + */ + private String violateDetail = ""; // 위반내용상세 + /** + * 위반내용상세 + */ + private String invasionType = ""; // 침범유형 + /** + * 침범유형(특정금지) + */ + private String invasion1 = ""; + /** + * 침범유형(무허가) + */ + private String invasion2 = ""; + /** + * 침범유형(영해) + */ + private String invasion3 = ""; + /** + * 침범유형(EEZ) + */ + private String invasion4 = ""; + /** + * 처리현황(완료) + */ + private String procCondY = ""; + /** + * 처리현황(조사중) + */ + private String procCondN = ""; + /** + * 처리현황(조사중)건수 + */ + private int procCondNCnt = 0; + /** + * 처리현황(완료)건수 + */ + private int procCondYCnt = 0; + /** + * 미납금액 + */ + private String noMarginPaymentAmt = ""; + /** + * 선박처리(위탁관리) + */ + private String shipProcTypeA = ""; + /** + * 선박처리(퇴거) + */ + private String shipProcTypeB = ""; + /** + * 선박처리(직접인계) + */ + private String shipProcTypeC = ""; + /** + * 선박처리(폐기) + */ + private String shipProcTypeD = ""; + /** + * 선박처리(몰수) + */ + private String shipProcTypeE = ""; + /** + * 구속인원수(전체) + */ + private String detentionTotalCnt = ""; + /** + * 침범유형1 + */ + private int invasionType1 = 0; + /** + * 침범유형2 + */ + private int invasionType2 = 0; + /** + * 침범유형3 + */ + private int invasionType3 = 0; + /** + * 침범유형4 + */ + private int invasionType4 = 0; + /** + * 침범유형5 + */ + private int invasionType5 = 0; + /** + * 선박처리유형(위탁관리) + */ + private String shipProcType1 = ""; + /** + * 선박처리유형(퇴거) + */ + private String shipProcType2 = ""; + /** + * 선박처리유형(직접인계) + */ + private String shipProcType3 = ""; + /** + * 선박처리유형(폐기) + */ + private String shipProcType4 = ""; + /** + * 선박처리유형(몰수) + */ + private String shipProcType5 = ""; + /** + * 선박처리유형(현장조사건수) + */ + private String fieldCnt = ""; + /** + * 특공방여부 + */ + private String specBatlYn = ""; + /** + * NLL여부 + */ + private String nllYn = ""; + /** + * 무혐의불구속구분 + */ + private String woDetentionType = ""; + /** + * 현장조사나포일시 + */ + private String fieldArrestDate = ""; + /** + * 현장조사석방일시 + */ + private String fieldReleaseDate = ""; + /** + * 거리 + */ + private String leadDistance = ""; + /** + * 소요시간 + */ + private String leadHour = ""; + /** + * 분 + */ + private String leadMinute = ""; + /** + * 선장인원 + */ + private int captainCount = 0; + /** + * 항해사인원 + */ + private int mateCount = 0; + /** + * 기관장인원 + */ + private int engineerCount = 0; + /** + * 선원인원 + */ + private int crewCount = 0; + /** + * 선박처리구분 + */ + private String shipProcType = ""; + /** + * 위탁관리비 + */ + private String commissionCost = ""; + /** + * 어구압수-틀 + */ + private String gearCast = ""; + /** + * 어구압수-폭 + */ + private String gearWidth = ""; + /** + * 어구압수-기타 + */ + private String gearEtc = ""; + /** + * 위반장소(도) + */ + private String addrArea = ""; + /** + * 위반장소(시) + */ + private String addrCity = ""; // + /** + * 상세주소 + */ + private String addrDetail = ""; // + /** + * 위도 도 + */ + private int latD = 0; // + /** + * 위도 분 + */ + private int latM = 0; + /** + * 위도 초 + */ + private double latS = 0; + /** + * 경도 도 + */ + private int lonD = 0; + /** + * 경도 분 + */ + private int lonM = 0; + /** + * 경도 초 + */ + private double lonS = 0; + /** + * 선박제원-선명 + */ + private String shipName = ""; + /** + * 선박제원-톤수 + */ + private String shipTonnage = ""; + /** + * 선박제원-선원수 + */ + private String shipCrewCnt = ""; + /** + * 선박제원-선질 + */ + private String shipQuality = ""; + /** + * 선박제원-선질 String + */ + private String shipQualityStr = ""; + /** + * 미납금액 + */ + private String noPaymentCnt = ""; + /** + * 선적 + */ + private String shipMent = ""; + /** + * 항구명 + */ + private String shipPortName = ""; + /** + * 선종 + */ + private String shipType = ""; // 선종 + /** + * 선장명 + */ + private String capName = ""; // 선장명 + /** + * 선장한자명 + */ + private String capChnName = ""; // 선장한자명 + /** + * 선장나이 + */ + private int capAge = 0; // 선장나이 + /** + * 범칙어종 + */ + private String vioFish = ""; // 범칙어종 + /** + * 범칙수량 + */ + private int vioCnt = 0; + /** + * 위판금액 + */ + private int vioPriatedAmt = 0; + /** + * 담보금납부여부 + */ + private String marginPaymentYn = ""; + /** + * 담보금납부금액 + */ + private int marginPaymentAmt = 0; + /** + * 납부일시 + */ + private String marginPaymentDate = ""; + /** + * 저장상태 ( 01 : 임시저장 / 02 : 제출 ) + */ + private String status = ""; + /** + * 삭제여부 + */ + private String delYn = ""; + /** + * 등록일시 + */ + private String regDate = ""; + /** + * 등록자 + */ + private String regUser = ""; // + /** + * 등록기관 + */ + private String regAgency = ""; // + /** + * 선적 명칭 + */ + private String shipMentStr = ""; + /** + * 선박처리명칭 + */ + private String shipTypeStr = ""; + /** + * 무혐의불구속 명칭 + */ + private String woDetentionStr = ""; + /** + * 검거기관(안전서) 명칭 + */ + private String agencyGuardStr = ""; + /** + * 주소 명칭 + */ + private String addrStr = ""; + /** + * 미납 + */ + private String notPayment = ""; + /** + * 특별광역시도명 + */ + private String addrAreaStr = ""; + /** + * 건수 + */ + private int totalCnt = 0; + + /** + * 특공방건수 + */ + private int specBatlCnt = 0; + /** + * NLL건수 + */ + private int nllCnt = 0; + + + /** + * @return the specBatlCnt + */ + public int getSpecBatlCnt() { + return specBatlCnt; + } + /** + * @param specBatlCnt the specBatlCnt to set + */ + public void setSpecBatlCnt(int specBatlCnt) { + this.specBatlCnt = specBatlCnt; + } + /** + * @return the procCondNCnt + */ + public int getNllCnt() { + return nllCnt; + } + /** + * @param nllCnt the nllCnt to set + */ + public void setNllCnt(int nllCnt) { + this.nllCnt = nllCnt; + } + /** + * @return the procCondNCnt + */ + public int getProcCondNCnt() { + return procCondNCnt; + } + /** + * @param procCondNCnt the procCondNCnt to set + */ + public void setProcCondNCnt(int procCondNCnt) { + this.procCondNCnt = procCondNCnt; + } + /** + * @return the procCondYCnt + */ + public int getProcCondYCnt() { + return procCondYCnt; + } + /** + * @param procCondYCnt the procCondYCnt to set + */ + public void setProcCondYCnt(int procCondYCnt) { + this.procCondYCnt = procCondYCnt; + } + /** + * @return the totalCnt + */ + public int getTotalCnt() { + return totalCnt; + } + /** + * @param totalCnt the totalCnt to set + */ + public void setTotalCnt(int totalCnt) { + this.totalCnt = totalCnt; + } + /** + * @return the addrAreaStr + */ + public String getAddrAreaStr() { + return addrAreaStr; + } + /** + * @param addrAreaStr the addrAreaStr to set + */ + public void setAddrAreaStr(String addrAreaStr) { + this.addrAreaStr = addrAreaStr; + } + + /** + * @return the notPayment + */ + public String getNotPayment() { + return notPayment; + } + + /** + * @param notPayment the notPayment to set + */ + public void setNotPayment(String notPayment) { + this.notPayment = notPayment; + } + /** + * @return the arrestId + */ + public String getArrestId() { + return arrestId; + } + + /** + * @param arrestId the arrestId to set + */ + public void setArrestId(String arrestId) { + this.arrestId = arrestId; + } + + + /** + * @return the arrestDate + */ + public String getArrestDate() { + return arrestDate; + } + + + /** + * @param arrestDate the arrestDate to set + */ + public void setArrestDate(String arrestDate) { + this.arrestDate = arrestDate; + } + + + /** + * @return the agencyType + */ + public String getAgencyType() { + return agencyType; + } + + + /** + * @param agencyType the agencyType to set + */ + public void setAgencyType(String agencyType) { + this.agencyType = agencyType; + } + + + /** + * @return the agencyGuard + */ + public String getAgencyGuard() { + return agencyGuard; + } + + + /** + * @param arrestId the arrestId to set + */ + public void setAgencyGuard(String agencyGuard) { + this.agencyGuard = agencyGuard; + } + + + /** + * @return the agencyVessel + */ + public String getAgencyVessel() { + return agencyVessel; + } + + + /** + * @param agencyVessel the agencyVessel to set + */ + public void setAgencyVessel(String agencyVessel) { + this.agencyVessel = agencyVessel; + } + + + /** + * @return the procCondition + */ + public String getProcCondition() { + return procCondition; + } + + + /** + * @param procCondition the procCondition to set + */ + public void setProcCondition(String procCondition) { + this.procCondition = procCondition; + } + + + /** + * @return the violateType + */ + public String getViolateType() { + return violateType; + } + + + /** + * @param violateType the violateType to set + */ + public void setViolateType(String violateType) { + this.violateType = violateType; + } + + + /** + * @return the agencyType + */ + public String getViolateDetail() { + return violateDetail; + } + + + /** + * @param violateDetail the violateDetail to set + */ + public void setViolateDetail(String violateDetail) { + this.violateDetail = violateDetail; + } + + + /** + * @return the invasionType + */ + public String getInvasionType() { + return invasionType; + } + + + /** + * @param invasionType the invasionType to set + */ + public void setInvasionType(String invasionType) { + this.invasionType = invasionType; + } + + + /** + * @return the invasion1 + */ + public String getInvasion1() { + return invasion1; + } + + + /** + * @param invasion1 the invasion1 to set + */ + public void setInvasion1(String invasion1) { + this.invasion1 = invasion1; + } + + + /** + * @return the invasion2 + */ + public String getInvasion2() { + return invasion2; + } + + + /** + * @param invasion2 the invasion2 to set + */ + public void setInvasion2(String invasion2) { + this.invasion2 = invasion2; + } + + + /** + * @return the invasion3 + */ + public String getInvasion3() { + return invasion3; + } + + + /** + * @param invasion3 the invasion3 to set + */ + public void setInvasion3(String invasion3) { + this.invasion3 = invasion3; + } + + + /** + * @return the invasion4 + */ + public String getInvasion4() { + return invasion4; + } + + + /** + * @param invasion4 the invasion4 to set + */ + public void setInvasion4(String invasion4) { + this.invasion4 = invasion4; + } + + + /** + * @return the procCondY + */ + public String getProcCondY() { + return procCondY; + } + + + /** + * @param procCondY the procCondY to set + */ + public void setProcCondY(String procCondY) { + this.procCondY = procCondY; + } + + + /** + * @return the procCondN + */ + public String getProcCondN() { + return procCondN; + } + + + /** + * @param procCondN the procCondN to set + */ + public void setProcCondN(String procCondN) { + this.procCondN = procCondN; + } + + + /** + * @return the noMarginPaymentAmt + */ + public String getNoMarginPaymentAmt() { + return noMarginPaymentAmt; + } + + + /** + * @param noMarginPaymentAmt the noMarginPaymentAmt to set + */ + public void setNoMarginPaymentAmt(String noMarginPaymentAmt) { + this.noMarginPaymentAmt = noMarginPaymentAmt; + } + + + /** + * @return the shipProcTypeA + */ + public String getShipProcTypeA() { + return shipProcTypeA; + } + + + /** + * @param shipProcTypeA the shipProcTypeA to set + */ + public void setShipProcTypeA(String shipProcTypeA) { + this.shipProcTypeA = shipProcTypeA; + } + + + /** + * @return the shipProcTypeB + */ + public String getShipProcTypeB() { + return shipProcTypeB; + } + + + /** + * @param shipProcTypeB the shipProcTypeB to set + */ + public void setShipProcTypeB(String shipProcTypeB) { + this.shipProcTypeB = shipProcTypeB; + } + + + /** + * @return the shipProcTypeC + */ + public String getShipProcTypeC() { + return shipProcTypeC; + } + + + /** + * @param shipProcTypeC the shipProcTypeC to set + */ + public void setShipProcTypeC(String shipProcTypeC) { + this.shipProcTypeC = shipProcTypeC; + } + + + /** + * @return the shipProcTypeD + */ + public String getShipProcTypeD() { + return shipProcTypeD; + } + + + /** + * @param shipProcTypeD the shipProcTypeD to set + */ + public void setShipProcTypeD(String shipProcTypeD) { + this.shipProcTypeD = shipProcTypeD; + } + + + /** + * @return the shipProcTypeE + */ + public String getShipProcTypeE() { + return shipProcTypeE; + } + + + /** + * @param shipProcTypeE the shipProcTypeE to set + */ + public void setShipProcTypeE(String shipProcTypeE) { + this.shipProcTypeE = shipProcTypeE; + } + + + /** + * @return the detentionTotalCnt + */ + public String getDetentionTotalCnt() { + return detentionTotalCnt; + } + + + /** + * @param detentionTotalCnt the detentionTotalCnt to set + */ + public void setDetentionTotalCnt(String detentionTotalCnt) { + this.detentionTotalCnt = detentionTotalCnt; + } + + + /** + * @return the invasionType1 + */ + public int getInvasionType1() { + return invasionType1; + } + + + /** + * @param invasionType1 the invasionType1 to set + */ + public void setInvasionType1(int invasionType1) { + this.invasionType1 = invasionType1; + } + + + /** + * @return the invasionType2 + */ + public int getInvasionType2() { + return invasionType2; + } + + + /** + * @param invasionType2 the invasionType2 to set + */ + public void setInvasionType2(int invasionType2) { + this.invasionType2 = invasionType2; + } + + + /** + * @return the invasionType3 + */ + public int getInvasionType3() { + return invasionType3; + } + + + /** + * @param invasionType3 the invasionType3 to set + */ + public void setInvasionType3(int invasionType3) { + this.invasionType3 = invasionType3; + } + + + /** + * @return the invasionType4 + */ + public int getInvasionType4() { + return invasionType4; + } + + + /** + * @param invasionType4 the invasionType4 to set + */ + public void setInvasionType4(int invasionType4) { + this.invasionType4 = invasionType4; + } + + + /** + * @return the invasionType5 + */ + public int getInvasionType5() { + return invasionType5; + } + + + /** + * @param invasionType5 the invasionType5 to set + */ + public void setInvasionType5(int invasionType5) { + this.invasionType5 = invasionType5; + } + + + /** + * @return the shipProcType1 + */ + public String getShipProcType1() { + return shipProcType1; + } + + + /** + * @param shipProcType1 the shipProcType1 to set + */ + public void setShipProcType1(String shipProcType1) { + this.shipProcType1 = shipProcType1; + } + + + /** + * @return the shipProcType2 + */ + public String getShipProcType2() { + return shipProcType2; + } + + + /** + * @param shipProcType2 the shipProcType2 to set + */ + public void setShipProcType2(String shipProcType2) { + this.shipProcType2 = shipProcType2; + } + + + /** + * @return the shipProcType3 + */ + public String getShipProcType3() { + return shipProcType3; + } + + + /** + * @param shipProcType3 the shipProcType3 to set + */ + public void setShipProcType3(String shipProcType3) { + this.shipProcType3 = shipProcType3; + } + + + /** + * @return the shipProcType4 + */ + public String getShipProcType4() { + return shipProcType4; + } + + + /** + * @param shipProcType4 the shipProcType4 to set + */ + public void setShipProcType4(String shipProcType4) { + this.shipProcType4 = shipProcType4; + } + + + /** + * @return the shipProcType5 + */ + public String getShipProcType5() { + return shipProcType5; + } + + + /** + * @param shipProcType5 the shipProcType5 to set + */ + public void setShipProcType5(String shipProcType5) { + this.shipProcType5 = shipProcType5; + } + + + /** + * @return the fieldCnt + */ + public String getFieldCnt() { + return fieldCnt; + } + + + /** + * @param fieldCnt the fieldCnt to set + */ + public void setFieldCnt(String fieldCnt) { + this.fieldCnt = fieldCnt; + } + + + /** + * @return the specBatlYn + */ + public String getSpecBatlYn() { + return specBatlYn; + } + + + /** + * @param specBatlYn the specBatlYn to set + */ + public void setSpecBatlYn(String specBatlYn) { + this.specBatlYn = specBatlYn; + } + + + /** + * @return the nllYn + */ + public String getNllYn() { + return nllYn; + } + + + /** + * @param nllYn the nllYn to set + */ + public void setNllYn(String nllYn) { + this.nllYn = nllYn; + } + + + /** + * @return the woDetentionType + */ + public String getWoDetentionType() { + return woDetentionType; + } + + + /** + * @param woDetentionType the woDetentionType to set + */ + public void setWoDetentionType(String woDetentionType) { + this.woDetentionType = woDetentionType; + } + + + /** + * @return the fieldArrestDate + */ + public String getFieldArrestDate() { + return fieldArrestDate; + } + + + /** + * @param fieldArrestDate the fieldArrestDate to set + */ + public void setFieldArrestDate(String fieldArrestDate) { + this.fieldArrestDate = fieldArrestDate; + } + + + /** + * @return the fieldReleaseDate + */ + public String getFieldReleaseDate() { + return fieldReleaseDate; + } + + + /** + * @param fieldReleaseDate the fieldReleaseDate to set + */ + public void setFieldReleaseDate(String fieldReleaseDate) { + this.fieldReleaseDate = fieldReleaseDate; + } + + + /** + * @return the leadDistance + */ + public String getLeadDistance() { + return leadDistance; + } + + + /** + * @param leadDistance the leadDistance to set + */ + public void setLeadDistance(String leadDistance) { + this.leadDistance = leadDistance; + } + + + /** + * @return the leadHour + */ + public String getLeadHour() { + return leadHour; + } + + + /** + * @param leadHour the leadHour to set + */ + public void setLeadHour(String leadHour) { + this.leadHour = leadHour; + } + + + /** + * @return the leadMinute + */ + public String getLeadMinute() { + return leadMinute; + } + + + /** + * @param leadMinute the leadMinute to set + */ + public void setLeadMinute(String leadMinute) { + this.leadMinute = leadMinute; + } + + + /** + * @return the captainCount + */ + public int getCaptainCount() { + return captainCount; + } + + + /** + * @param captainCount the captainCount to set + */ + public void setCaptainCount(int captainCount) { + this.captainCount = captainCount; + } + + + /** + * @return the mateCount + */ + public int getMateCount() { + return mateCount; + } + + + /** + * @param mateCount the mateCount to set + */ + public void setMateCount(int mateCount) { + this.mateCount = mateCount; + } + + + /** + * @return the engineerCount + */ + public int getEngineerCount() { + return engineerCount; + } + + + /** + * @param engineerCount the engineerCount to set + */ + public void setEngineerCount(int engineerCount) { + this.engineerCount = engineerCount; + } + + + /** + * @return the crewCount + */ + public int getCrewCount() { + return crewCount; + } + + + /** + * @param crewCount the crewCount to set + */ + public void setCrewCount(int crewCount) { + this.crewCount = crewCount; + } + + + /** + * @return the shipProcType + */ + public String getShipProcType() { + return shipProcType; + } + + + /** + * @param shipProcType the shipProcType to set + */ + public void setShipProcType(String shipProcType) { + this.shipProcType = shipProcType; + } + + + /** + * @return the commissionCost + */ + public String getCommissionCost() { + return commissionCost; + } + + + /** + * @param commissionCost the commissionCost to set + */ + public void setCommissionCost(String commissionCost) { + this.commissionCost = commissionCost; + } + + + /** + * @return the gearCast + */ + public String getGearCast() { + return gearCast; + } + + + /** + * @param gearCast the gearCast to set + */ + public void setGearCast(String gearCast) { + this.gearCast = gearCast; + } + + + /** + * @return the gearWidth + */ + public String getGearWidth() { + return gearWidth; + } + + + /** + * @param gearWidth the gearWidth to set + */ + public void setGearWidth(String gearWidth) { + this.gearWidth = gearWidth; + } + + + /** + * @return the gearEtc + */ + public String getGearEtc() { + return gearEtc; + } + + + /** + * @param gearEtc the gearEtc to set + */ + public void setGearEtc(String gearEtc) { + this.gearEtc = gearEtc; + } + + + /** + * @return the addrArea + */ + public String getAddrArea() { + return addrArea; + } + + + /** + * @param addrArea the addrArea to set + */ + public void setAddrArea(String addrArea) { + this.addrArea = addrArea; + } + + + /** + * @return the addrCity + */ + public String getAddrCity() { + return addrCity; + } + + + /** + * @param addrCity the addrCity to set + */ + public void setAddrCity(String addrCity) { + this.addrCity = addrCity; + } + + + /** + * @return the addrDetail + */ + public String getAddrDetail() { + return addrDetail; + } + + + /** + * @param addrDetail the addrDetail to set + */ + public void setAddrDetail(String addrDetail) { + this.addrDetail = addrDetail; + } + + + /** + * @return the latD + */ + public int getLatD() { + return latD; + } + + + /** + * @param latD the latD to set + */ + public void setLatD(int latD) { + this.latD = latD; + } + + + /** + * @return the latM + */ + public int getLatM() { + return latM; + } + + + /** + * @param latM the latM to set + */ + public void setLatM(int latM) { + this.latM = latM; + } + + + /** + * @return the latS + */ + public double getLatS() { + return latS; + } + + + /** + * @param latS the latS to set + */ + public void setLatS(double latS) { + this.latS = latS; + } + + + /** + * @return the lonD + */ + public int getLonD() { + return lonD; + } + + + /** + * @param lonD the lonD to set + */ + public void setLonD(int lonD) { + this.lonD = lonD; + } + + + /** + * @return the lonM + */ + public int getLonM() { + return lonM; + } + + + /** + * @param lonM the lonM to set + */ + public void setLonM(int lonM) { + this.lonM = lonM; + } + + + /** + * @return the lonS + */ + public double getLonS() { + return lonS; + } + + + /** + * @param lonS the lonS to set + */ + public void setLonS(double lonS) { + this.lonS = lonS; + } + + + /** + * @return the shipName + */ + public String getShipName() { + return shipName; + } + + + /** + * @param shipName the shipName to set + */ + public void setShipName(String shipName) { + this.shipName = shipName; + } + + + /** + * @return the shipTonnage + */ + public String getShipTonnage() { + return shipTonnage; + } + + + /** + * @param shipTonnage the shipTonnage to set + */ + public void setShipTonnage(String shipTonnage) { + this.shipTonnage = shipTonnage; + } + + + /** + * @return the shipCrewCnt + */ + public String getShipCrewCnt() { + return shipCrewCnt; + } + + + /** + * @param shipCrewCnt the shipCrewCnt to set + */ + public void setShipCrewCnt(String shipCrewCnt) { + this.shipCrewCnt = shipCrewCnt; + } + + + /** + * @return the shipQuality + */ + public String getShipQuality() { + return shipQuality; + } + + + /** + * @param setShipQuality the setShipQuality to set + */ + public void setShipQuality(String shipQuality) { + this.shipQuality = shipQuality; + } + + + /** + * @return the shipQualityStr + */ + public String getShipQualityStr() { + return shipQualityStr; + } + + + /** + * @param shipQualityStr the shipQualityStr to set + */ + public void setShipQualityStr(String shipQualityStr) { + this.shipQualityStr = shipQualityStr; + } + + + /** + * @return the agencyType + */ + public String getNoPaymentCnt() { + return noPaymentCnt; + } + + + /** + * @param invasionType the invasionType to set + */ + public void setNoPaymentCnt(String noPaymentCnt) { + this.noPaymentCnt = noPaymentCnt; + } + + + /** + * @return the shipMent + */ + public String getShipMent() { + return shipMent; + } + + + /** + * @param shipMent the shipMent to set + */ + public void setShipMent(String shipMent) { + this.shipMent = shipMent; + } + + + /** + * @return the shipPortName + */ + public String getShipPortName() { + return shipPortName; + } + + + /** + * @param shipPortName the shipPortName to set + */ + public void setShipPortName(String shipPortName) { + this.shipPortName = shipPortName; + } + + + /** + * @return the shipType + */ + public String getShipType() { + return shipType; + } + + + /** + * @param shipType the shipType to set + */ + public void setShipType(String shipType) { + this.shipType = shipType; + } + + + /** + * @return the capName + */ + public String getCapName() { + return capName; + } + + + /** + * @param capName the capName to set + */ + public void setCapName(String capName) { + this.capName = capName; + } + + + /** + * @return the capChnName + */ + public String getCapChnName() { + return capChnName; + } + + + /** + * @param capChnName the capChnName to set + */ + public void setCapChnName(String capChnName) { + this.capChnName = capChnName; + } + + + /** + * @return the capAge + */ + public int getCapAge() { + return capAge; + } + + + /** + * @param capAge the capAge to set + */ + public void setCapAge(int capAge) { + this.capAge = capAge; + } + + + /** + * @return the vioFish + */ + public String getVioFish() { + return vioFish; + } + + + /** + * @param vioFish the vioFish to set + */ + public void setVioFish(String vioFish) { + this.vioFish = vioFish; + } + + + /** + * @return the vioCnt + */ + public int getVioCnt() { + return vioCnt; + } + + + /** + * @param vioCnt the vioCnt to set + */ + public void setVioCnt(int vioCnt) { + this.vioCnt = vioCnt; + } + + + /** + * @return the vioPriatedAmt + */ + public int getVioPriatedAmt() { + return vioPriatedAmt; + } + + + /** + * @param vioPriatedAmt the vioPriatedAmt to set + */ + public void setVioPriatedAmt(int vioPriatedAmt) { + this.vioPriatedAmt = vioPriatedAmt; + } + + + /** + * @return the marginPaymentYn + */ + public String getMarginPaymentYn() { + return marginPaymentYn; + } + + + /** + * @param marginPaymentYn the marginPaymentYn to set + */ + public void setMarginPaymentYn(String marginPaymentYn) { + this.marginPaymentYn = marginPaymentYn; + } + + + /** + * @return the marginPaymentAmt + */ + public int getMarginPaymentAmt() { + return marginPaymentAmt; + } + + + /** + * @param marginPaymentAmt the marginPaymentAmt to set + */ + public void setMarginPaymentAmt(int marginPaymentAmt) { + this.marginPaymentAmt = marginPaymentAmt; + } + + + /** + * @return the marginPaymentDate + */ + public String getMarginPaymentDate() { + return marginPaymentDate; + } + + + /** + * @param marginPaymentDate the marginPaymentDate to set + */ + public void setMarginPaymentDate(String marginPaymentDate) { + this.marginPaymentDate = marginPaymentDate; + } + + + /** + * @return the status + */ + public String getStatus() { + return status; + } + + + /** + * @param status the status to set + */ + public void setStatus(String status) { + this.status = status; + } + + + /** + * @return the delYn + */ + public String getDelYn() { + return delYn; + } + + + /** + * @param delYn the delYn to set + */ + public void setDelYn(String delYn) { + this.delYn = delYn; + } + + + /** + * @return the regDate + */ + public String getRegDate() { + return regDate; + } + + + /** + * @param regDate the regDate to set + */ + public void setRegDate(String regDate) { + this.regDate = regDate; + } + + + /** + * @return the regUser + */ + public String getRegUser() { + return regUser; + } + + + /** + * @param regUser the regUser to set + */ + public void setRegUser(String regUser) { + this.regUser = regUser; + } + + + /** + * @return the regAgency + */ + public String getRegAgency() { + return regAgency; + } + + /** + * @param regAgency the regAgency to set + */ + public void setRegAgency(String regAgency) { + this.regAgency = regAgency; + } + + + /** + * @return the shipMentStr + */ + public String getShipMentStr() { + return shipMentStr; + } + + + /** + * @param shipMentStr the shipMentStr to set + */ + public void setShipMentStr(String shipMentStr) { + this.shipMentStr = shipMentStr; + } + + + /** + * @return the shipTypeStr + */ + public String getShipTypeStr() { + return shipTypeStr; + } + + + /** + * @param shipTypeStr the shipTypeStr to set + */ + public void setShipTypeStr(String shipTypeStr) { + this.shipTypeStr = shipTypeStr; + } + + + /** + * @return the woDetentionStr + */ + public String getWoDetentionStr() { + return woDetentionStr; + } + + + /** + * @param woDetentionStr the woDetentionStr to set + */ + public void setWoDetentionStr(String woDetentionStr) { + this.woDetentionStr = woDetentionStr; + } + + + /** + * @return the marginPaymentDate + */ + public String getAgencyGuardStr() { + return agencyGuardStr; + } + + + /** + * @param marginPaymentAmt the marginPaymentAmt to set + */ + public void setAgencyGuardStr(String agencyGuardStr) { + this.agencyGuardStr = agencyGuardStr; + } + + + /** + * @return the addrStr + */ + public String getAddrStr() { + return addrStr; + } + + + /** + * @param addrStr the addrStr to set + */ + public void setAddrStr(String addrStr) { + this.addrStr = addrStr; + } + + + + @Override + public String toString() { + return "BoardVO [arrestId=" + arrestId + ", arrestDate=" + arrestDate + + ", agencyType=" + agencyType + ", agencyGuard=" + agencyGuard + + ", agencyVessel=" + agencyVessel + ", procCondition=" + + procCondition + ", violateType=" + violateType + + ", violateDetail=" + violateDetail + ", invasionType=" + + invasionType + ", specBatlYn=" + specBatlYn + ", nllYn=" + + nllYn + ", woDetentionType=" + woDetentionType + + ", fieldArrestDate=" + fieldArrestDate + + ", fieldReleaseDate=" + fieldReleaseDate + ", leadDistance=" + + leadDistance + ", leadHour=" + leadHour + ", leadMinute=" + + leadMinute + ", captainCount=" + captainCount + + ", mateCount=" + mateCount + ", engineerCount=" + + engineerCount + ", crewCount=" + crewCount + + ", shipProcType=" + shipProcType + ", commissionCost=" + + commissionCost + ", gearCast=" + gearCast + ", gearWidth=" + + gearWidth + ", gearEtc=" + gearEtc + ", addrArea=" + addrArea + + ", addrCity=" + addrCity + ", addrDetail=" + addrDetail + + ", latD=" + + latD + + ", latM=" + + latM + + ", latS=" + + latS + + ", lonD=" + + lonD + + ", lonM=" + + lonM + + ", lonS=" + + lonS // 위경도 + + ", shipName=" + shipName + ", shipTonnage=" + shipTonnage + + ", shipType=" + shipType + ", shipCrewCnt=" + shipCrewCnt + + ", shipQuality=" + shipQuality + ", shipMent=" + shipMent + + ", shipPortName=" + shipPortName + ", capName=" + capName + + ", capChnName=" + capChnName + ", capAge=" + capAge + + ", vioFish=" + vioFish + ", vioCnt=" + vioCnt + + ", vioPriatedAmt=" + vioPriatedAmt + ", marginPaymentYn=" + + marginPaymentYn + ", marginPaymentAmt=" + marginPaymentAmt + + ", marginPaymentDate=" + marginPaymentDate + ", status=" + + status + ", delYn=" + delYn + ", regDate=" + regDate + + ", regUser=" + regUser + ", regAgency=" + regAgency + "]"; + } + +} diff --git a/src/main/java/kcg/faics/arrest/web/ArrestController.java b/src/main/java/kcg/faics/arrest/web/ArrestController.java new file mode 100644 index 0000000..0979f7b --- /dev/null +++ b/src/main/java/kcg/faics/arrest/web/ArrestController.java @@ -0,0 +1,508 @@ +package kcg.faics.arrest.web; + + +import java.util.Calendar; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; + +import javax.annotation.Resource; + +import kcg.faics.arrest.service.ArrestService; +import kcg.faics.arrest.vo.ArrestCountVO; +import kcg.faics.arrest.vo.ArrestSearchVO; +import kcg.faics.arrest.vo.ArrestVO; +import kcg.faics.cmmn.excel.ExcelExporter; +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.cmmn.vo.CodeVO; +import kcg.faics.sec.AuthType; +import kcg.faics.sec.LoginUserVO; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +/** + * ArrestController.java + * @author 이영호 + * @since 2017. 3. 12. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2017. 3. 12. 이영호 최초생성 + * + */ +@Controller +@RequestMapping("/arrest") +public class ArrestController { + + /** + * 코드관련 정보 인터페이스. + */ + @Resource(name = "codeService") + private CodeService codeService; + /** + * 나포정보 인터페이스. + */ + @Resource(name = "arrestService") + private ArrestService arrestService; + + + /** + * 중국어선 나포정보 목록화면을 반환한다. + * @param arrestSearchVo 나포정보검색객체 + * @param model 모델객체 + * @return 중국어선 검거현황 목록화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/arrestListView.do") + public String arrestListView(final ArrestSearchVO arrestSearchVo, Model model) throws Exception { + + try { + // 공통코드 조회 + model = getCommonCode(model); + + // 중국어선 나포정보 목록 조회 + //arrestList = arrestService.getArrestListAll(arrestSearchVo); + + // 중국어선 나포정보 목록 집계정보 조회(단건) + //arrestCntList = arrestService.getArrestListAllCount(arrestSearchVo); + + + //model.addAttribute("arrestList", arrestList); + //model.addAttribute("arrestCntList", arrestCntList); + model.addAttribute("listFlag", "init"); + } catch (Exception e) { + e.printStackTrace(); + } + return "/arrest/arrestList.tiles"; + } + + + + /** + * 중국어선 나포정보 목록 검색결과를 반환한다. + * + * @param arrestSearchVO 견문 검색 객체 + * @param model 모델객체 + * @return 견문검색결과화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/arrestList.do") + public String arrestList(@ModelAttribute final ArrestSearchVO arrestSearchVO, Model model) throws Exception { + + List arrestList = null; // 중국어선나포정보목록 + ArrestVO arrestCntList = null; // 중국어선나포정보 집계건수 + HashMap resultMap = new HashMap(); + + + try { + // 공통코드 조회 + // model = getCommonCode(model); + + model.addAttribute("arrestList", null); + model.addAttribute("arrestCntList", null); + + + + // 중국어선 나포정보 목록 조회 + arrestList = arrestService.getArrestList(arrestSearchVO); + + if (arrestList.size() > 0) { + // 중국어선 나포정보 집계정보 조회 + arrestCntList = arrestService.getArrestListCount(arrestSearchVO); + } else { + arrestCntList = null; + } + model.addAttribute("arrestList", arrestList); + model.addAttribute("arrestCntList", arrestCntList); + model.addAttribute("arrestSearchVO", arrestSearchVO); + + resultMap.put("msg", "정상으로 조회되었습니다."); + resultMap.put("code", 0); + } catch (Exception e) { + e.printStackTrace(); + } + return "/arrest/arrestResult"; + } + + + + /** + * 중국어선 나포정보 화면에서 필요한 공통코드를 조회한다. + * + * @param model 화면에 넘길 Model 객체 + + * @return model 객체 + * @throws Exception 기본예외처리 + */ + public Model getCommonCode(final Model model) throws Exception { + List agencyTypeList = null; // 기관종류 + List placeList = null; // 소속 + List addressList = null; // 주소 + List violateTypeList = null; // 위반내용구분 + List shipTypeList = null; // 선종 + List shipMentList = null; // 선적 + List shipQualityList = null; // 선질 + List shipProcTypeList = null; // 선박처리 + List invasionTypeList = null; // 침범유형 + List woDetentionTypeList = null; // 무혐의불구속 + List marginPaymentYnList = null; // 담보금납부여부 + + LoginUserVO loginUserVo = new LoginUserVO(); + + try { + if (AuthType.LOCAL_HEADQUARTERS == loginUserVo.getAuthType()) { + placeList = codeService.getPlace1SubList(loginUserVo.getPlace1()); + } else { + placeList = codeService.getPlace1List(false); + } + + agencyTypeList = codeService.getCodeValues("T002", ""); /* 검거기관대분류 */ + addressList = arrestService.getAddressAreaList("0000"); /* 주소(특별광역시도) */ + violateTypeList = codeService.getCodeValues("T003", ""); /* 위반내용구분 */ + shipTypeList = codeService.getCodeValues("FA81", ""); /* 선종 조회 */ + shipMentList = codeService.getCodeValues("SSRR", ""); /* 선적 */ + shipQualityList = codeService.getCodeValues("T004", ""); /* 선질 */ + shipProcTypeList = codeService.getCodeValues("T007", ""); /* 선박처리 */ + invasionTypeList = codeService.getCodeValues("T006", ""); /* 선박처리 */ + woDetentionTypeList = codeService.getCodeValues("T005", ""); /* 선박처리 */ + marginPaymentYnList = codeService.getCodeValues("T008", ""); /* 담보금납부여부 */ + + Collections.reverse(marginPaymentYnList); + //Collections.sort(marginPaymentYnList, comparator); + //CodeVO codeVO = marginPaymentYnList.get(1); + //marginPaymentYnList.set(1, marginPaymentYnList.get(0)); + //marginPaymentYnList.set(0, codeVO); + + model.addAttribute("placeList", placeList); + model.addAttribute("addressList", addressList); + model.addAttribute("shipQualityList", shipQualityList); + model.addAttribute("shipMentList", shipMentList); + model.addAttribute("shipTypeList", shipTypeList); + model.addAttribute("violateTypeList", violateTypeList); + model.addAttribute("agencyTypeList", agencyTypeList); + model.addAttribute("shipProcTypeList", shipProcTypeList); + model.addAttribute("invasionTypeList", invasionTypeList); + model.addAttribute("woDetentionTypeList", woDetentionTypeList); + model.addAttribute("marginPaymentYnList", marginPaymentYnList); + } catch (Exception e) { + e.printStackTrace(); + } + + return model; + } + + /** + * 중국어선 나포정보 등록/수정화면을 반환한다. + * + * @param arrestVo 견문 검색 객체 + * @param model 모델객체 + * @return 견문검색결과화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/arrestAdd.do") + public String arrestAdd(final ArrestVO arrestVo, Model model) throws Exception { + + try { + // 공통코드 조회 + model = getCommonCode(model); + model.addAttribute("regFlag", "create"); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "/arrest/arrestAdd.tiles"; + } + + /** + * 중국어선 나포정보 목록화면을 반환한다. + * + * @param area 특별광역시도 코드 + * @param arrestVo 나포정보검색객체 + * @param model 모델객체 + * @return 중국어선 검거현황 목록화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/getAddressAreaList.do") + public String getAddressAreaList(@RequestParam("area") final String area, + final ArrestVO arrestVo, final Model model) throws Exception { + HashMap result = new HashMap(); + List addressCityList = null; + try { + + /* 특별광역시&도청 목록조회 */ + addressCityList = arrestService.getAddressAreaList(area); + model.addAttribute("addressCityList", addressCityList); + + result.put("result", "OK"); + result.put("msg", "시목록 조회성공"); + } catch (Exception e) { + e.printStackTrace(); + } + + return "/arrest/arrestAdd.tiles"; + } + + /** + * 하위소속 코드 리스트를 반환한다. + * + * @param codeVO + * 코드VO + * @return 소속 코드 리스트 + * @throws Exception + * 기본 예외 처리 + */ + @ResponseBody + @RequestMapping("/getAddressList.json") + public HashMap getAddressList(final CodeVO codeVO) + throws Exception { + HashMap result = new HashMap(); + List addressCityList = null; + String area = codeVO.getCode1(); + + + /* 특별광역시&도청 목록조회 */ + addressCityList = arrestService.getAddressAreaList(area); + result.put("data", addressCityList); + // model.addAttribute("addressCityList", addressCityList); + return result; + } + + /** + * 중국어선 나포정보를 등록한다. + * + * @param arrestVO + * 중국어선나포정보 객체 + * @param bindingResult + * 바인딩 객체 + * @param model + * 모델 객체 + * @param status + * 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/arrestInsert.do", method = RequestMethod.POST) + public String arrestTempInsert( + @ModelAttribute("arrestVO") final ArrestVO arrestVO, + final BindingResult bindingResult, final Model model, + final SessionStatus status) throws Exception { + + HashMap result = new HashMap(); + try { + + arrestVO.setDelYn("N"); // 삭제여부 + + + /* 중국어선 나포정보 등록 */ + result = arrestService.insert(arrestVO); + + } catch (Exception e) { + e.printStackTrace(); + } + + if ((Integer) result.get("result") != 1) { + return "redirect:/arrest/arrestAdd.do"; + } + + return "redirect:/arrest/arrestListView.do"; + } + + + /** + * 중국어선 나포정보를 수정한다. + * @param arrestVO + * 나포정보 객체 + * @param bindingResult + * 바인딩 객체 + * @param model + * 모델 객체 + * @param status + * 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/arrestUpdate.do", method = RequestMethod.POST) + public String arrestUpdate(@ModelAttribute("arrestVO") final ArrestVO arrestVO, + final BindingResult bindingResult, final Model model, final SessionStatus status) throws Exception { + + HashMap result = new HashMap(); + try { + + arrestVO.setDelYn("N"); // 삭제여부 + + result = arrestService.update(arrestVO); + + } catch (Exception e) { + e.printStackTrace(); + } + + if ((Integer) result.get("result") != 1) { + return "redirect:/arrest/arrestAdd.do"; + } + + return "redirect:/arrest/arrestListView.do"; + } + + /** + * 중국어선 나포정보를 삭제한다. + * @param arrestVO + * 외사경찰 정보 객체 + * @param bindingResult + * 바인딩 객체 + * @param model + * 모델 객체 + * @param status + * 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/arrestDelete.do", method = RequestMethod.POST) + public String arrestDelete(@ModelAttribute("arrestVO") final ArrestVO arrestVO, + final BindingResult bindingResult, final Model model, final SessionStatus status) throws Exception { + + HashMap result = new HashMap(); + try { + + arrestVO.setDelYn("Y"); // 삭제여부 + + result = arrestService.delete(arrestVO); + + } catch (Exception e) { + e.printStackTrace(); + } + + if ((Integer) result.get("result") != 1) { + return "redirect:/arrest/arrestAdd.do"; + } + + return "redirect:/arrest/arrestListView.do"; + } + + /** + * 중국어선 나포정보를 반환한다. + * + * @param arrestVO + * @param model 모델 객체 + * @return 중국어선나포정보 수정화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/arrestView.do") + public String arrestView(final ArrestVO arrestVO, Model model) throws Exception { + + try { + // 중국어선 나포정보 단건조회 + ArrestVO result = arrestService.select(arrestVO); + + // 공통코드 조회 + model = getCommonCode(model); + + model.addAttribute("arrestVO", result); + model.addAttribute("regFlag", "modify"); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "/arrest/arrestAdd.tiles"; + } + + /** + * 중국어선 나포처리현황 엑셀 다운로드 + * @param searchVO + * @param model Model객체 + * @return 외사장비 사용실적 현황 + */ + @RequestMapping("/arrestExcelDownload.do") + public String arrestExcelDownload(final ArrestSearchVO searchVO, final Model model) throws Exception { + Calendar cal = Calendar.getInstance(); + ArrestVO arrestCntList = null; + + String title = cal.get(cal.YEAR) + "년 중국어선 나포처리현황"; + + List arrestList = arrestService.getArrestListExcel(searchVO); + + if (arrestList.size() > 0) { + arrestCntList = arrestService.getArrestListCount(searchVO); + LinkedHashMap header = new LinkedHashMap(); + header.put("arrestDate", "나포일시"); + header.put("addrStr", "위반장소"); + header.put("violateDetail", "위반내용"); + header.put("invasion3", "침범유형(영해)"); + header.put("invasion4", "침범유형(EEZ)"); + header.put("invasion1", "침범유형(특정금지)"); + header.put("invasion2", "침범유형(무허가)"); + header.put("specBatlYn", "침범유형(특공방)"); + header.put("nllYn", "NLL"); + header.put("agencyGuardStr", "검거기관"); + header.put("agencyVessel", "서별(함정)"); + header.put("shipName", "선박제원(선명)"); + header.put("shipTonnage", "선박제원(톤수)"); + header.put("shipCrewCnt", "선박제원(선원)"); + header.put("shipQualityStr", "선박제원(선질)"); + header.put("shipMentStr", "선박제원(선적)"); + header.put("capName", "선장(나이)"); + header.put("shipTypeStr", "선종"); + header.put("vioFish", "범칙어종"); + header.put("vioCnt", "범칙수량"); + header.put("vioPriatedAmt", "위판금액"); + header.put("procCondN", "조사중"); + header.put("procCondY", "완료"); + header.put("marginPaymentAmt", "납부액(만원)"); + header.put("marginPaymentDate", "납부일시"); + header.put("notPayment", "미납"); + header.put("noMarginPaymentAmt", "미납금액(만원)"); + header.put("shipProcTypeA", "위탁관리"); + header.put("shipProcTypeB", "퇴거"); + header.put("shipProcTypeC", "직접인계"); + header.put("shipProcTypeD", "폐기"); + header.put("shipProcTypeE", "몰수"); + header.put("detentionTotalCnt", "구속(계)"); + + header.put("captainCount", "구속선장"); + header.put("mateCount", "구속항해사"); + header.put("engineerCount", "구속기관장"); + header.put("crewCount", "구속선원"); + header.put("woDetentionStr", "무혐의불구속"); + header.put("fieldCnt", "현장조사건수"); + header.put("fieldArrestDate", "나포일시"); + header.put("fieldReleaseDate", "석방일시"); + header.put("leadDistance", "거리(해리)"); + header.put("commissionCost", "위탁금(원)"); + header.put("gearCast", "틀"); + header.put("gearWidth", "폭"); + header.put("gearEtc", "기타"); + + arrestCntList.setDetentionTotalCnt(String.valueOf(arrestCntList.getCaptainCount() + + arrestCntList.getMateCount() + + arrestCntList.getEngineerCount() + + arrestCntList.getCrewCount())); + arrestCntList.setSpecBatlYn(String.valueOf(arrestCntList.getSpecBatlCnt())); + arrestCntList.setNllYn(String.valueOf(arrestCntList.getNllCnt())); + arrestCntList.setNoPaymentCnt(String.valueOf(arrestCntList.getNotPayment())); + + + arrestList.add(0, arrestCntList); + + model.addAttribute("excel", new ExcelExporter(header, arrestList, title)); + model.addAttribute("filename", title); + + return "excelView"; + } else { + return ""; + } + } +} diff --git a/src/main/java/kcg/faics/board/aop/BoardPreventSqlInjectionAop.java b/src/main/java/kcg/faics/board/aop/BoardPreventSqlInjectionAop.java new file mode 100644 index 0000000..0f84bde --- /dev/null +++ b/src/main/java/kcg/faics/board/aop/BoardPreventSqlInjectionAop.java @@ -0,0 +1,60 @@ +/** + * BoardPreventSqlInjectionAop.java + * @author 임새미 + * @since 2016. 10. 19. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 19. 임새미 최초생성 + * + */ +package kcg.faics.board.aop; + +import java.lang.reflect.Field; + +import kcg.faics.cmmn.CommonsUtils; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.springframework.stereotype.Component; + +/** + * BoardPreventSqlInjectionAop.java + * @author 임새미 + * @since 2016. 10. 19. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 19. 임새미 최초생성 + * + */ +@Aspect +@Component +public class BoardPreventSqlInjectionAop { + + // id를 필드로 가지고 있는 객체를 파라미터로 받는 메소드만 걸림 + @Before("execution(public * kcg.faics.board.service.impl.*Mapper.*(kcg.faics.board.vo.BoardSearchVO))" + + "|| execution(public * kcg.faics.board.service.impl.*Mapper.*(kcg.faics.board.vo.BoardVO))" + + "|| execution(public * kcg.faics.board.service.impl.*Mapper.*(kcg.faics.board.vo.BoardFileVO))" + + "|| execution(public * kcg.faics.board.service.impl.*Mapper.*(kcg.faics.board.vo.BoardCommentVO))") + public void beforeTargetMethod(JoinPoint thisJoinPoint) { + Object[] signatureArgs = thisJoinPoint.getArgs(); + for (Object signatureArg: signatureArgs) { + + Class clz = signatureArg.getClass(); + try { + Field field = clz.getDeclaredField("id"); + field.setAccessible(true); + + String id = (String) field.get(signatureArg); + id = CommonsUtils.sqlInjectionFilter(id); + + field.set(signatureArg, id); + + } catch (Exception e) { + e.printStackTrace(); + } + } + } +} diff --git a/src/main/java/kcg/faics/board/service/BoardService.java b/src/main/java/kcg/faics/board/service/BoardService.java new file mode 100644 index 0000000..6b289b9 --- /dev/null +++ b/src/main/java/kcg/faics/board/service/BoardService.java @@ -0,0 +1,30 @@ +/** + * BoardService.java + * @author 임새미 + * @since 2016. 10. 25. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 25. 임새미 최초생성 + * + */ +package kcg.faics.board.service; + +import kcg.faics.board.vo.BoardSearchVO; +import kcg.faics.board.vo.BoardVO; +import kcg.faics.cmmn.bbs.BaseBbsExService; +import kcg.faics.cmmn.bbs.BaseBbsService; + +/** + * BoardService.java + * @author 임새미 + * @since 2016. 10. 25. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 25. 임새미 최초생성 + * + */ +public interface BoardService extends BaseBbsService, BaseBbsExService { + +} diff --git a/src/main/java/kcg/faics/board/service/impl/BoardCommentMapper.java b/src/main/java/kcg/faics/board/service/impl/BoardCommentMapper.java new file mode 100644 index 0000000..7c44e19 --- /dev/null +++ b/src/main/java/kcg/faics/board/service/impl/BoardCommentMapper.java @@ -0,0 +1,90 @@ +package kcg.faics.board.service.impl; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.board.vo.BoardCommentVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +/** + * BoardCommentMapper.java + * @author 임새미 + * @since 2016. 9. 29. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 9. 29. 임새미 최초생성 + * + */ +@Repository("boardCommentMapper") +public class BoardCommentMapper extends EgovAbstractMapper { + + /** + * throws Exception {한 게시물의 덧글 리스트를 반환한다. + * + * @param boardCommentVO 게시판 아이디 + * @return 선택한 게시물의 덧글 리스트 + * @throws Exception 기본 예외 처리 + */ + public List selectCommentList(final BoardCommentVO boardCommentVO) throws Exception { + return selectList("BoardComment.selectCommentList", boardCommentVO); + } + + + /** + * 선택한 덧글을 반환한다. + * + * @param boardCommentVO 덧글 아이디 + * @return 선택한 덧글의 상세 내용 + * @throws Exception 기본 예외 처리 + */ + public BoardCommentVO selectBoardComment(final BoardCommentVO boardCommentVO) throws Exception { + return selectOne("BoardComment.selectBoardComment", boardCommentVO); + } + + + /** + * 덧글을 추가한다. + * + * @param boardCommentVO 덧글 데이터 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public HashMap insertBoardComment(final BoardCommentVO boardCommentVO) throws Exception { + HashMap map = new HashMap(); + int result = 0; + result = insert("BoardComment.insertBoardComment", boardCommentVO); + + map.put("seq", boardCommentVO.getSeq()); + map.put("result", result); + return map; + } + + + /** + * 선택한 덧글을 삭제한다. + * + * @param boardCommentVO 덧글 아이디 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int deleteBoardComment(final BoardCommentVO boardCommentVO) throws Exception { + return delete("BoardComment.deleteBoardComment", boardCommentVO); + } + + + /** + * 선택한 게시물의 모든 덧글을 삭제한다. + * + * @param boardCommentVO 선택한 게시물 아이디 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int deleteBoardCommentAll(final BoardCommentVO boardCommentVO) throws Exception { + return delete("BoardComment.deleteBoardCommentAll", boardCommentVO); + } + +} diff --git a/src/main/java/kcg/faics/board/service/impl/BoardCommentServiceImpl.java b/src/main/java/kcg/faics/board/service/impl/BoardCommentServiceImpl.java new file mode 100644 index 0000000..bfb28dd --- /dev/null +++ b/src/main/java/kcg/faics/board/service/impl/BoardCommentServiceImpl.java @@ -0,0 +1,108 @@ +/** + * + */ +package kcg.faics.board.service.impl; + +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; + +import kcg.faics.board.vo.BoardCommentVO; +import kcg.faics.cmmn.bbs.BaseCommentService; + +import org.springframework.stereotype.Service; + + +/** + * BoardCommentServiceImpl.java + * @author 임새미 + * @since 2016. 9. 29. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 9. 29. 임새미 최초생성 + * + */ +@Service("boardCommentService") +public class BoardCommentServiceImpl implements BaseCommentService { + + /** + * BoardMapper - 게시판 덧글 데이터처리에 관한 Mapper 클래스 + **/ + @Resource(name = "boardCommentMapper") + private BoardCommentMapper boardCommentMapper; + + + /** + * 선택한 게시물의 덧글 리스트를 반환한다. + * + * @param bdSeq 게시판 아이디 + * @return 선택한 게시물의 덧글 리스트 + * @throws Exception 기본 예외 처리 + */ + @Override + public List selectList(final BoardCommentVO boardCommentVO) throws Exception { + return boardCommentMapper.selectCommentList(boardCommentVO); + } + + /** + * 선택한 덧글을 반환한다. + * + * @param bcBdSeq 덧글 아이디 + * @return 선택한 덧글의 상세 내용 + * @throws Exception 기본 예외 처리 + */ + @Override + public BoardCommentVO select(final BoardCommentVO boardCommentVO) throws Exception { + return boardCommentMapper.selectBoardComment(boardCommentVO); + } + + + /** + * 덧글을 추가한다. + * + * @param boardCommentVO 덧글 데이터 + * @return 선택한 덧글의 상세 내용 + * @throws Exception 기본 예외 처리 + */ + @Override + public HashMap insert(final BoardCommentVO boardCommentVO) throws Exception { + + HashMap map = new HashMap(); + try { + map = boardCommentMapper.insertBoardComment(boardCommentVO); + } catch (Exception e) { + e.printStackTrace(); + map.put("result", 0); + } + return map; + } + + + /** + * 선택한 덧글을 삭제한다. + * + * @param bcBdSeq 덧글 아이디 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @Override + public int delete(final BoardCommentVO boardCommentVO) throws Exception { + return boardCommentMapper.deleteBoardComment(boardCommentVO); + } + + + /** + * 선택한 게시물의 모든 덧글을 삭제한다. + * + * @param bdSeq 선택한 게시물 아이디 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @Override + public int deleteAll(final BoardCommentVO boardCommentVO) throws Exception { + return boardCommentMapper.deleteBoardCommentAll(boardCommentVO); + } + +} diff --git a/src/main/java/kcg/faics/board/service/impl/BoardFileMapper.java b/src/main/java/kcg/faics/board/service/impl/BoardFileMapper.java new file mode 100644 index 0000000..19d4edb --- /dev/null +++ b/src/main/java/kcg/faics/board/service/impl/BoardFileMapper.java @@ -0,0 +1,74 @@ +/** + * + */ +package kcg.faics.board.service.impl; + +import java.util.List; + +import kcg.faics.board.vo.BoardFileVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +/** + * 게시판에 관한 인터페이스클래스를 정의한다. + * @author 임새미 + * @since 2016. 9. 22. + * @version 1.0 + * @see + *
+ *     수정일               수정자            수정내용
+ *  ----------  --------  -------------------------
+ *  2016.09.22    임새미           최초 생성
+ * 
+ */ +@Repository("boardFileMapper") +public class BoardFileMapper extends EgovAbstractMapper { + + /** + * 게시물의 첨부파일을 DB에 추가한다. + * + * @param boardFileVO 업로드 파일 정보 객체 + * @return 성공 - 1, 실패 - 0 + * @exception Exception 기본 예외 처리 + */ + public int insertFile(final BoardFileVO boardFileVO) throws Exception { + return insert("BoardFile.insertBoardFile", boardFileVO); + } + + /** + * 선택한 게시물의 파일 리스트를 반환한다. + * + * @param boardFileVO 게시판 아이디 + * @return 선택한 게시물의 덧글 리스트 + * @throws Exception 기본 예외 처리 + */ + public List selectFiles(final BoardFileVO boardFileVO) throws Exception { + return selectList("BoardFile.selectBoardFiles", boardFileVO); + } + + /** + * 선택한 파일정보를 반환한다. + * + * @param boardFileVO 덧글 아이디 + * @return 선택한 덧글의 상세 내용 + * @throws Exception 기본 예외 처리 + */ + public BoardFileVO selectFile(final BoardFileVO boardFileVO) throws Exception { + return selectOne("BoardFile.selectBoardFile", boardFileVO); + } + + /** + * DB에서 파일정보를 삭제한다. + * + * @param bfSeq 덧글 아이디 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int deleteFile(final BoardFileVO boardFileVO) throws Exception { + return delete("BoardFile.deleteBoardFile", boardFileVO); + } + + +} diff --git a/src/main/java/kcg/faics/board/service/impl/BoardFileServiceImpl.java b/src/main/java/kcg/faics/board/service/impl/BoardFileServiceImpl.java new file mode 100644 index 0000000..30643ad --- /dev/null +++ b/src/main/java/kcg/faics/board/service/impl/BoardFileServiceImpl.java @@ -0,0 +1,207 @@ +package kcg.faics.board.service.impl; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import kcg.faics.board.util.BoardUtils; +import kcg.faics.board.util.BoardVOHandler; +import kcg.faics.board.vo.BoardFileVO; +import kcg.faics.cmmn.bbs.BaseFileService; +import kcg.faics.cmmn.egov.file.EgovFileMngUtil; +import kcg.faics.cmmn.egov.vo.FileVO; + +import org.apache.commons.lang.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + + +/** + * BoardFileServiceImpl.java + * @author 임새미 + * @since 2016. 9. 28. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 9. 28. 임새미 최초생성 + * + */ +@Service("boardFileService") +public class BoardFileServiceImpl implements BaseFileService { + + /** + * BoardFileMapper - 게시판 파일 데이터 처리에 관한 Mapper 클래스 + **/ + @Resource(name = "boardFileMapper") + private BoardFileMapper boardFileMapper; + + /** + * EgovFileMngUtil - 파일 업로드 처리에 관한 Util 클래스 + **/ + @Resource(name = "EgovFileMngUtil") + private EgovFileMngUtil fileUtil; + + + /** + * 선택한 게시물의 파일 리스트를 반환한다. + * + * @param bfBdSeq 게시판 아이디 + * @return 선택한 게시물의 덧글 리스트 + * @throws Exception 기본 예외 처리 + */ + @Override + public List selectList(final BoardFileVO boardFileVO) throws Exception { + return (List) boardFileMapper.selectFiles(boardFileVO); + } + + + /** + * 선택한 파일정보를 반환한다. + * + * @param bfSeq 덧글 아이디 + * @return 선택한 덧글의 상세 내용 + * @throws Exception 기본 예외 처리 + */ + @Override + public BoardFileVO select(final BoardFileVO boardFileVO) throws Exception { + return boardFileMapper.selectFile(boardFileVO); + } + + + /** + * 게시물의 첨부파일을 DB에 추가한다. + * + * @param bfBdSeq 게시물 아이디 + * @param fileVO 파일 정보 객체 + * @return 성공 - 1, 실패 - 0 + * @exception Exception 기본 예외 처리 + */ + @Override + public int insert(final BoardFileVO boardFileVO) throws Exception { + return boardFileMapper.insertFile(boardFileVO); + } + + /** + * 게시물의 첨부파일들을 업로드한다. + * + * @param bfBdSeq 게시물 아이디 + * @param fileMap 검색, 페이지 정보 객체 + * @return 성공 - 1, 실패 - 0 + * @exception Exception 기본 예외 처리 + */ + @Override + @Transactional + public int insertAndSaveFiles(BoardFileVO boardFileVO, final Map fileMap) throws Exception { + int result = 1; + String storePathKey = ""; + String boardId = ""; + + /* 파일쓰기 */ + if (!fileMap.isEmpty()) { + if (boardFileVO != null) { + boardId = boardFileVO.getId(); + boardId = StringUtils.lowerCase(boardId); + } + storePathKey = BoardUtils.getStorePathKey(boardId); + + List uploadedFile = fileUtil.parseFileInf(fileMap, "_", 0, "", storePathKey); + + /* DB에 업로드한 첨부파일 레코드를 추가한다. */ + Iterator itr = uploadedFile.iterator(); + while (itr.hasNext()) { + FileVO fileVO = itr.next(); + boardFileVO.setOrgName(fileVO.getOrignlFileNm()); + boardFileVO.setSaveName(fileVO.getStreFileNm()); + boardFileVO.setOrders(Integer.parseInt(fileVO.getFileSn().replace("file", ""))); + result = insert(boardFileVO); + if (result != 1) { + throw new Exception(); + } + } + } + + return result; + } + + /** + * 파일을 삭제한다. + * + * @param boardFileVO 파일정보 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @Override + public int deleteAndRemoveFile(final BoardFileVO boardFileVO) throws Exception { + int result = boardFileMapper.deleteFile(boardFileVO); + String storePathKey = ""; + if (result == 1) { + /* DB에서 파일 데이터 삭제 후 실제 파일 삭제 여부는 보장하지 않는다. */ + try { + storePathKey = BoardUtils.getStorePathKey(boardFileVO.getId()); + fileUtil.deleteFile(boardFileVO.getSaveName(), storePathKey); + } catch (Exception e) { + e.printStackTrace(); + } + } + return result; + } + + /** + * 선택한 파일을 삭제한다. + * + * @param bfBdSeq 선택한 게시물 아이디 + * @param deleteFiles 선택한 게시물 아이디 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @Override + @Transactional + public int delete(final BoardFileVO boardFileVO) throws Exception { + int result = 1; + if (boardFileVO.getDeleteFiles() != null) { + for (String fileSeq : boardFileVO.getDeleteFiles()) { + BoardFileVO deleteFile = BoardVOHandler.getBFileVO(boardFileVO); + deleteFile.setSeq(Integer.parseInt(fileSeq)); + deleteFile = select(deleteFile); + result = deleteAndRemoveFile(deleteFile); + + if (result != 1) { + throw new Exception(); + } + } + } + return result; + } + + + /** + * 게시물 내의 모든 파일을 삭제한다. + * + * @param bfBdSeq 선택한 게시물 아이디 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @Override + @Transactional + public int deleteAndRemoveFiles(final BoardFileVO boardFileVO) throws Exception { + + int result = 1; + + List fileList = boardFileMapper.selectFiles(boardFileVO); + + if (fileList != null) { + for (BoardFileVO file : fileList) { + result = deleteAndRemoveFile(file); + if (result != 1) { + throw new Exception(); + } + } + } + return result; + } + + +} diff --git a/src/main/java/kcg/faics/board/service/impl/BoardMapper.java b/src/main/java/kcg/faics/board/service/impl/BoardMapper.java new file mode 100644 index 0000000..f28cef1 --- /dev/null +++ b/src/main/java/kcg/faics/board/service/impl/BoardMapper.java @@ -0,0 +1,163 @@ +package kcg.faics.board.service.impl; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.board.vo.BoardSearchVO; +import kcg.faics.board.vo.BoardVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + + +/** + * BoardMapper.java + * @author 임새미 + * @since 2016. 9. 29. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 9. 29. 임새미 최초생성 + * + */ +@Repository("boardMapper") +public class BoardMapper extends EgovAbstractMapper { + + + /** + * 게시판 목록 화면을 반환한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @return 게시물 리스트 + * @throws Exception 기본 예외 처리 + */ + public List selectBoardList(final BoardSearchVO searchVO) throws Exception { + return selectList("Board.selectBoardList", searchVO); + } + + + /** + * 검색 키워드에 따른 총 게시물 개수를 조회한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @return 게시물 개수 + * @exception Exception 기본 예외 처리 + */ + public int selectBoardListTotCnt(final BoardSearchVO searchVO) throws Exception { + return (Integer) selectOne("Board.selectBoardListTotCnt", searchVO); + } + + /** + * 전체 게시물 개수를 가져온다. + * @param searchVO + * + * @return 게시물 개수 + * @throws Exception 기본 예외 처리 + */ + public int selectBoardTotalCnt(final BoardSearchVO searchVO) throws Exception { + return (Integer) selectOne("Board.selectBoardTotalCnt", searchVO); + } + + /** + * 답글 추가에 따른 group seq를 수정한다 + * + * @param boardVO BoardVO 객체 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int updateGrpStep(final BoardVO boardVO) throws Exception { + return update("Board.updateGrpStep", boardVO); + } + + /** + * group seq에 해당되는 게시물 개수를 반환한다 + * + * @param boardVO BoardVO 객체 + * @return 그룹에 해당되는 게시물 개수 + * @throws Exception 기본 예외 처리 + */ + public BoardVO selectPrevBoard(final BoardVO boardVO) throws Exception { + return selectOne("Board.selectPrevBoard", boardVO); + } + + /** + * prevSeq, nextSeq를 업데이트한다. + * + * @param boardVO BoardVO 객체 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int updatePrevNextSeq(final BoardVO boardVO) throws Exception { + return update("Board.updatePrevNextSeq", boardVO); + } + + /** + * 게시물을 추가한다. + * + * @param boardVO 게시판 내용 구성 객체 + * @return 글 총 갯수 + * @throws Exception 기본 예외 처리 + */ + public HashMap insertBoard(final BoardVO boardVO) throws Exception { + + HashMap map = new HashMap(); + + int result = 0; + try { + result = insert("Board.insertBoard", boardVO); + + map.put("result", result); + map.put("seq", boardVO.getSeq()); + } catch (Exception e) { + e.printStackTrace(); + } + return map; + }; + + /** + * 선택한 게시물의 내용을 반환한다. + * + * @param boardVO 게시물 VO + * @return 선택한 게시물 내용 반환 + * @throws Exception 기본 예외 처리 + */ + public BoardVO selectBoard(final BoardVO boardVO) throws Exception { + return selectOne("Board.selectBoard", boardVO); + } + + /** + * 새 게시물의 group 시퀀스를 업데이트한다. + * + * @param boardVO 게시물 VO + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int updateGrpSeq(final BoardVO boardVO) throws Exception { + return update("Board.updateGrpSeq", boardVO); + } + + /** + * 게시물을 DB에 업데이트 한다. + * + * @param boardVO 게시물 VO + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int updateBoard(final BoardVO boardVO) throws Exception { + return update("Board.updateBoard", boardVO); + } + + /** + * 게시물을 삭제한다. + * + * @param boardVO 게시물 VO + * @return HashMap/ seq : 게시물 번호 , result : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int deleteBoard(final BoardVO boardVO) throws Exception { + return delete("Board.deleteBoard", boardVO); + } + + +} diff --git a/src/main/java/kcg/faics/board/service/impl/BoardServiceImpl.java b/src/main/java/kcg/faics/board/service/impl/BoardServiceImpl.java new file mode 100644 index 0000000..13c8c5a --- /dev/null +++ b/src/main/java/kcg/faics/board/service/impl/BoardServiceImpl.java @@ -0,0 +1,363 @@ +package kcg.faics.board.service.impl; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import kcg.faics.board.service.BoardService; +import kcg.faics.board.util.BoardVOHandler; +import kcg.faics.board.vo.BoardCommentVO; +import kcg.faics.board.vo.BoardFileVO; +import kcg.faics.board.vo.BoardSearchVO; +import kcg.faics.board.vo.BoardVO; +import kcg.faics.cmmn.bbs.BaseCommentService; +import kcg.faics.cmmn.bbs.BaseFileService; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + + +/** + * BoardServiceImpl.java + * @author 임새미 + * @since 2016. 9. 28. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 9. 28. 임새미 최초생성 + * + */ +@Service("boardService") +public class BoardServiceImpl extends EgovAbstractServiceImpl implements BoardService { + + /** + * BoardMapper - 게시판 데이터처리에 관한 Mapper 클래스 + **/ + @Resource(name = "boardMapper") + private BoardMapper boardMapper; + + /** + * BoardFileService - 게시판 파일에 관한 인터페이스 + **/ + @Resource(name = "boardFileService") + private BaseFileService boardFileService; + + /** + * BoardCommentService - 게시판 덧글에 관한 인터페이스 + **/ + @Resource(name = "boardCommentService") + private BaseCommentService boardCommentService; + + + /** + * 게시판 목록 화면을 반환한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @return 게시물 리스트 + * @throws Exception 기본 예외 처리 + */ + @Override + public List selectList(final BoardSearchVO searchVO) throws Exception { + return boardMapper.selectBoardList(searchVO); + } + + /** + * 검색 키워드에 따른 총 게시물 개수를 조회한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @return 게시물 개수 + * @exception Exception 기본 예외 처리 + */ + @Override + public int selectListCnt(final BoardSearchVO searchVO) throws Exception { + return boardMapper.selectBoardListTotCnt(searchVO); + } + + /** + * 전체 게시물 개수를 가져온다. + * + * @return 게시물 개수 + * @throws Exception 기본 예외 처리 + */ + @Override + public int selectTotalCnt(final BoardSearchVO searchVO) throws Exception { + return boardMapper.selectBoardTotalCnt(searchVO); + } + + + /** + * 선택한 게시물의 내용을 반환한다. + * + * @param bdSeq 게시판 + * @return 선택한 게시물 내용 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public BoardVO select(final BoardVO boardVO) throws Exception { + return boardMapper.selectBoard(boardVO); + } + + + /** + * 이전 글 or 다음 글의 시퀀스 번호를 업데이트한다. + * + * @param bdSeq 업데이트 대상 게시물 시퀀스 + * @param prevNextChar 이전(P) or 다음{N) + * @param seqValue 시퀀스 값 + * @return 1-성공, 0-실패 + */ + private int updatePrevNextSeq(final BoardVO boardVO, final String prevNextChar, final int seqValue) { + int result = 0; + boolean isContinue = false; + try { + BoardVO updateBoard = boardMapper.selectBoard(boardVO); + + if ("P".equals(prevNextChar)) { + updateBoard.setPrevSeq(seqValue); + isContinue = true; + } else if ("N".equals(prevNextChar)) { + updateBoard.setNextSeq(seqValue); + isContinue = true; + } + if (isContinue) { + result = boardMapper.updatePrevNextSeq(updateBoard); + } + } catch (Exception e) { + e.printStackTrace(); + return result; + } + return result; + } + + /** + * 게시물을 추가한다. + * + * @param boardVO 게시판 내용 구성 객체 + * @return HashMap/ seq : 게시물 , result : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + private HashMap insert(final BoardVO boardVO) throws Exception { + + HashMap map = new HashMap(); + + /* 답글인 경우 */ + if (boardVO.getIsReply() > 0) { + boardVO.setDepth(boardVO.getDepth() + 1); + boardVO.setStep(boardVO.getStep() + 1); + boardVO.setNextSeq(boardVO.getParentSeq()); + } + + /* seq 및 insert 결과 */ + map = boardMapper.insertBoard(boardVO); + + int seq = (Integer) map.get("seq"); + int result = (Integer) map.get("result"); + + if (seq > 0 && result > 0) { + boardVO.setSeq(seq); + + /* 답글인 경우 */ + if (boardVO.getIsReply() > 0) { + // 스텝순서 변경 + boardMapper.updateGrpStep(boardVO); + // 추가된 글의 다음글의 prevSeq 변경 + BoardVO nextBoard = BoardVOHandler.getBoardVO(boardVO.getId(), boardVO.getParentSeq()); + this.updatePrevNextSeq(nextBoard, "P", seq); + + } else { + /* 새 게시글 추가의 경우 추가한 게시물의 group seq를 자기 자신으로 설정한다. */ + boardMapper.updateGrpSeq(boardVO); + } + + // 이전글 정보를 가져온다 + BoardVO prevBoard = boardMapper.selectPrevBoard(boardVO); + if (prevBoard != null) { + /* 이전 글의 next_seq 설정 */ + this.updatePrevNextSeq(prevBoard, "N", seq); + /* 현재 글의 prev_seq 설정 */ + this.updatePrevNextSeq(boardVO, "P", prevBoard.getSeq()); + } else { + this.updatePrevNextSeq(boardVO, "P", 0); + } + + } else { + throw new Exception(); + } + + return map; + } + + /** + * 게시물을 추가한다. + * + * @param boardVO 게시판 내용 구성 객체 + * @param fileMap 업로드 파일정보체 + * @return HashMap/ seq : 게시물 , result : 성공 - 1, 실패 - 0 + * @exception Exception 기본 예외 처리 + */ + @Override + @Transactional + public HashMap insert(final BoardVO boardVO, final Map fileMap) throws Exception { + + HashMap map = new HashMap(); + + /* seq 획득 */ + map = insert(boardVO); + + int seq = (Integer) map.get("seq"); + int result = (Integer) map.get("result"); + + /* 파일 업로드 */ + BoardFileVO boardFileVO = BoardVOHandler.getBFileVO(boardVO.getId(), seq, 0); + + result = boardFileService.insertAndSaveFiles(boardFileVO, fileMap); + + if (result != 1) { + throw new Exception(); + } else { + map.put("result", result); + } + + return map; + } + + + /** + * 게시물을 DB에 업데이트 한다. + * + * @param boardVO 게시물 VO + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + private int updateBoard(final BoardVO boardVO) throws Exception { + return boardMapper.updateBoard(boardVO); + }; + + /** + * 게시물을 업데이트 한다. + * + * @param boardVO 게시물 VO + * @param fileMap MultipartFile형태의 파일정보 + * @param deleteFiles 삭제할 파일리스트 + * @return HashMap/ seq : 게시물 번호 , result : 성공 - 1, 실패 - 0 + */ + @Override + @Transactional + public HashMap update(final BoardVO boardVO, final Map fileMap, final String[] deleteFiles) throws Exception { + + HashMap map = new HashMap(); + int result = 0; + + BoardFileVO boardFileVO= BoardVOHandler.getBFileVO(boardVO); + boardFileVO.setDeleteFiles(deleteFiles); + boardFileService.delete(boardFileVO); + boardFileService.insertAndSaveFiles(boardFileVO, fileMap); + + result = this.updateBoard(boardVO); + + if (result != 1) { + throw new Exception(); + } else { + map.put("result", result); + map.put("seq", boardVO.getSeq()); + } + + return map; + } + + + /** + * 게시물을 삭제한다. + * + * @param bdSeq 게시물 번호 + * @return HashMap/ seq : 게시물 번호 , result : 성공 - 1, 실패 - 0 + */ + @Transactional + @Override + public HashMap delete(final BoardVO boardVO) throws Exception { + + HashMap map = new HashMap(); + int result = 0; + + /* 삭제 후 처리를 위해 데이터 캐싱 */ + BoardVO delBoard = boardMapper.selectBoard(boardVO); + + result = boardMapper.deleteBoard(delBoard); + + if (result == 1) { + /* 이전 글, 다음 글의 이전/다음 시퀀스 재조정 */ + int prevSeq = boardVO.getPrevSeq(); + int nextSeq = boardVO.getNextSeq(); + if (prevSeq > 0) { + this.updatePrevNextSeq(BoardVOHandler.getBoardVO(boardVO.getId(), prevSeq), "N", nextSeq); + } + if (nextSeq > 0) { + this.updatePrevNextSeq(BoardVOHandler.getBoardVO(boardVO.getId(), nextSeq), "P", prevSeq); + } + + /* 파일을 삭제한다. */ + boardFileService.deleteAndRemoveFiles(BoardVOHandler.getBFileVO(delBoard)); + + /* 댓글을 삭제한다. */ + boardCommentService.deleteAll(BoardVOHandler.getBCommentVO(delBoard)); + + map.put("result", result); + } else { + throw new Exception(); + } + + return map; + }; + + /** + * 선택한 게시물들을 삭제한다. + * + * @param bdSeqs 선택한 게시물 아이디 목록 + * @return 성공 - 1, 실패 - 0 + */ + @Override + public HashMap selectAndDelete(final BoardVO boardVO, final int[] boardList) throws Exception { + + HashMap map = new HashMap(); + int result = 0; + + if (boardList != null) { + for (int seq : boardList) { + boardVO.setSeq(seq); + map = delete(boardVO); + result = (Integer) map.get("result"); + if (result != 1) { + throw new Exception(); + } + } + } + + map.put("result", result); + + return map; + }; + + /** + * 조회수를 1 증가시킨다. + * + * @param boardVO 게시물 VO + * @return 1-성공, 0-실패 + */ + @Override + public int incHit(final BoardVO boardVO) throws Exception { + int result = 0; + boardVO.incHit(); + result = this.updateBoard(boardVO); + return result; + } + + @Override + public List selectListAll(BoardSearchVO searchVO) throws Exception { + return null; + } +} diff --git a/src/main/java/kcg/faics/board/util/BoardUtils.java b/src/main/java/kcg/faics/board/util/BoardUtils.java new file mode 100644 index 0000000..3fd22e3 --- /dev/null +++ b/src/main/java/kcg/faics/board/util/BoardUtils.java @@ -0,0 +1,67 @@ +package kcg.faics.board.util; + +import org.apache.commons.lang3.StringUtils; + +/** + * 게시판 관련 유틸리티. + * + * @author kimnomin + * + */ +public final class BoardUtils { + + /** + * 생성자. + */ + private BoardUtils() { + + } + + /** + * 파일을 저장할 경로의 프로퍼티 키를 반환한다. + * + * @param boardId + * 게시판ID + * @return 파일을 저장할 경로의 프로퍼티 키 + */ + public static String getStorePathKey(final String boardId) { + String storePathKey = ""; + String boardIdLower = ""; + + if (StringUtils.isNotBlank(boardId)) { + boardIdLower = StringUtils.lowerCase(boardId); + } + + switch (boardIdLower) { + case "bbs": + storePathKey = "Bbs.bbs.fileStorePath"; + break; + case "data": + storePathKey = "Bbs.data.fileStorePath"; + break; + case "fa_arrest_rpt": + storePathKey = "Bbs.faArrestReport.fileStorePath"; + break; + case "fa_info_rpt": + storePathKey = "Bbs.faInfoReport.fileStorePath"; + break; + case "fa_target": + storePathKey = "Bbs.faTarget.fileStorePath"; + break; + case "guard_info": + storePathKey = "Bbs.guardInfo.fileStorePath"; + break; + case "notice": + storePathKey = "Bbs.notice.fileStorePath"; + break; + case "stat_bbs": + storePathKey = "Bbs.statBbs.fileStorePath"; + break; + default: + storePathKey = ""; + break; + } + + return storePathKey; + } +} diff --git a/src/main/java/kcg/faics/board/util/BoardVOHandler.java b/src/main/java/kcg/faics/board/util/BoardVOHandler.java new file mode 100644 index 0000000..30bbc71 --- /dev/null +++ b/src/main/java/kcg/faics/board/util/BoardVOHandler.java @@ -0,0 +1,74 @@ +/** + * ValueObjectHandler.java + * @author 임새미 + * @since 2016. 10. 17. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 17. 임새미 최초생성 + * + */ +package kcg.faics.board.util; + +import kcg.faics.board.vo.BoardCommentVO; +import kcg.faics.board.vo.BoardFileVO; +import kcg.faics.board.vo.BoardVO; + +/** + * ValueObjectHandler.java + * @author 임새미 + * @since 2016. 10. 17. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 17. 임새미 최초생성 + * + */ +public class BoardVOHandler { + + public static BoardVO getBoardVO(final BoardVO boardVO) { + BoardVO vo = new BoardVO(); + vo.setId(boardVO.getId()); + vo.setSeq(boardVO.getSeq()); + return vo; + } + + public static BoardVO getBoardVO(final String bdId, final int bdSeq) { + BoardVO vo = new BoardVO(); + vo.setId(bdId); + vo.setSeq(bdSeq); + return vo; + } + + public static BoardFileVO getBFileVO(final BoardVO boardVO) { + BoardFileVO vo = new BoardFileVO(); + vo.setId(boardVO.getId()); + vo.setParentSeq(boardVO.getSeq()); + return vo; + } + + public static BoardFileVO getBFileVO(final String bdId, final int bdSeq, final int bfSeq) { + BoardFileVO vo = new BoardFileVO(); + vo.setId(bdId); + vo.setParentSeq(bdSeq); + vo.setSeq(bfSeq); + return vo; + } + + public static BoardFileVO getBFileVO(BoardFileVO boardFileVO) { + BoardFileVO vo = new BoardFileVO(); + vo.setId(boardFileVO.getId()); + vo.setParentSeq(boardFileVO.getParentSeq()); + return vo; + } + + public static BoardCommentVO getBCommentVO(final BoardVO boardVO) { + BoardCommentVO vo = new BoardCommentVO(); + vo.setId(boardVO.getId()); + vo.setParentSeq(boardVO.getSeq()); + return vo; + } + + + +} diff --git a/src/main/java/kcg/faics/board/vo/BoardCommentVO.java b/src/main/java/kcg/faics/board/vo/BoardCommentVO.java new file mode 100644 index 0000000..7ab98cc --- /dev/null +++ b/src/main/java/kcg/faics/board/vo/BoardCommentVO.java @@ -0,0 +1,36 @@ +package kcg.faics.board.vo; + +import kcg.faics.cmmn.bbs.BaseCommentVO; + +/** + * BoardCommentVO.java + * @author 임새미 + * @since 2016. 9. 29. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 9. 29. 임새미 최초생성 + * + */ +public class BoardCommentVO extends BaseCommentVO { + + /** + * 게시판 아이디 + */ + private String id; + + /** + * @return 게시판 아이디 + */ + public String getId() { + return id; + } + + /** + * @param 게시판 아이디 + */ + public void setId(String id) { + this.id = id; + } + +} diff --git a/src/main/java/kcg/faics/board/vo/BoardFileVO.java b/src/main/java/kcg/faics/board/vo/BoardFileVO.java new file mode 100644 index 0000000..fb712db --- /dev/null +++ b/src/main/java/kcg/faics/board/vo/BoardFileVO.java @@ -0,0 +1,42 @@ +package kcg.faics.board.vo; + +import kcg.faics.cmmn.bbs.BaseFileVO; + +public class BoardFileVO extends BaseFileVO{ + + private String id; + private String[] deleteFiles; + + public BoardFileVO() { + super(); + } + + /** + * @return the id + */ + public String getId() { + return id; + } + + /** + * @param id the id to set + */ + public void setId(String id) { + this.id = id; + } + + /** + * @return the deleteFiles + */ + public String[] getDeleteFiles() { + return deleteFiles; + } + + /** + * @param deleteFiles the deleteFiles to set + */ + public void setDeleteFiles(String[] deleteFiles) { + this.deleteFiles = deleteFiles; + } + +} diff --git a/src/main/java/kcg/faics/board/vo/BoardSearchVO.java b/src/main/java/kcg/faics/board/vo/BoardSearchVO.java new file mode 100644 index 0000000..b5e810e --- /dev/null +++ b/src/main/java/kcg/faics/board/vo/BoardSearchVO.java @@ -0,0 +1,96 @@ +/* + * Copyright 2014 MOPAS(Ministry of Public Administration and Security). + * + * Licensed 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 + * + * http://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. + */ +package kcg.faics.board.vo; + +import kcg.faics.cmmn.bbs.BaseSearchVO; + + +/** + * BoardSearchVO.java + * @author 임새미 + * @since 2016. 10. 24. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 24. 임새미 최초생성 + * + */ +public class BoardSearchVO extends BaseSearchVO { + + /** 테이블 이름 */ + private String id = ""; + + /** 카테고리 이름 */ + private String category = " "; + + /** 카테고리 이름 */ + private String searchCondition = ""; + + public BoardSearchVO() { + super(); + } + + /** + * 게시판 아이디를 반환한다. + * @return 게시판 아이디 + */ + public String getId() { + return id; + } + + /** + * 게시판 아이디를 설정한다. + * @param id 를 설정한다. + */ + public void setId(String id) { + this.id = id; + } + + /** + * 카테고리 아이디를 반환한다. + * @return 게시판 아이디 + */ + public String getCategory() { + return category; + } + + /** + * 카테고리 아이디를 설정한다. + * @param id 를 설정한다. + */ + public void setCategory(String category) { + if (category == null || category.equals("")) { + category = " "; + } + this.category = category; + } + + /** + * @return 검색 조건을 반환한다. + */ + public String getSearchCondition() { + return searchCondition; + } + + /** + * @param 검색 조건을 설정한다. + */ + public void setSearchCondition(String searchCondition) { + this.searchCondition = searchCondition; + } + +} + \ No newline at end of file diff --git a/src/main/java/kcg/faics/board/vo/BoardVO.java b/src/main/java/kcg/faics/board/vo/BoardVO.java new file mode 100644 index 0000000..f723e19 --- /dev/null +++ b/src/main/java/kcg/faics/board/vo/BoardVO.java @@ -0,0 +1,431 @@ +package kcg.faics.board.vo; + +import java.util.Date; + +public class BoardVO { + + /** 테이블 이름*/ + private String id; + + /** 게시글번호*/ + private int seq; + /** 회원id*/ + private String userId; + /** 그룹seq*/ + private int groupSeq = 0; + /** 카테고리id*/ + private String category = " "; + /** 회원이름*/ + private String userName; + /** 게시글내용*/ + private String content; + /** 게시글제목*/ + private String subject; + /** ?0 */ + private int parentSeq = 0; + /** + * 이전 글 시퀀스 번호. + */ + private int prevSeq = 0; + /** + * 다음 글 시퀀스 번호. + */ + private int nextSeq = 0; + /** ?3 */ + private int step = 0; + /** ?4 */ + private int depth = 0; + /** 등록날짜*/ + private Date regdate; + /** 조회수*/ + private int hit; + /** 추천수*/ + private int recommend; + /** 등록자ip*/ + private String ip = "0.0.0.0"; + /** ?5 */ + private int notice; + /** ?6 */ + private int html; + /** ?7 */ + private int num1; + /** ?8 */ + private int num2; + /** 소속기관명*/ + private String data1 = ""; + /** 직급*/ + private String data2 = ""; + /** 소속기관id*/ + private String place1 = ""; + /** 직급id*/ + private String position = ""; + + private int isReply; + + /** + * 첨부파일 개수. + */ + private int fileCnt = 0; + + + /** + * @return the id + */ + public String getId() { + return id; + } + /** + * @param id the id to set + */ + public void setId(String id) { + this.id = id; + } + /** + * @return the seq + */ + public int getSeq() { + return seq; + } + /** + * @param seq the seq to set + */ + public void setSeq(int seq) { + this.seq = seq; + } + + /** + * @return the category + */ + public String getCategory() { + return category; + } + /** + * @return the userId + */ + public String getUserId() { + return userId; + } + /** + * @param userId the userId to set + */ + public void setUserId(String userId) { + this.userId = userId; + } + /** + * @return the groupSeq + */ + public int getGroupSeq() { + return groupSeq; + } + /** + * @param groupSeq the groupSeq to set + */ + public void setGroupSeq(int groupSeq) { + this.groupSeq = groupSeq; + } + /** + * @return the userName + */ + public String getUserName() { + return userName; + } + /** + * @param userName the userName to set + */ + public void setUserName(String userName) { + this.userName = userName; + } + /** + * @return the parentSeq + */ + public int getParentSeq() { + return parentSeq; + } + /** + * @param parentSeq the parentSeq to set + */ + public void setParentSeq(int parentSeq) { + this.parentSeq = parentSeq; + } + /** + * @return the prevSeq + */ + public int getPrevSeq() { + return prevSeq; + } + /** + * @param prevSeq the prevSeq to set + */ + public void setPrevSeq(int prevSeq) { + this.prevSeq = prevSeq; + } + /** + * @return the nextSeq + */ + public int getNextSeq() { + return nextSeq; + } + /** + * @param nextSeq the nextSeq to set + */ + public void setNextSeq(int nextSeq) { + this.nextSeq = nextSeq; + } + /** + * @param category the category to set + */ + public void setCategory(String category) { + if (category == null || category.equals("")) { + category = " "; + } + this.category = category; + } + /** + * @return the content + */ + public String getContent() { + return content; + } + /** + * @param content the content to set + */ + public void setContent(String content) { + this.content = content; + } + /** + * @return the subject + */ + public String getSubject() { + return subject; + } + /** + * @param subject the subject to set + */ + public void setSubject(String subject) { + this.subject = subject; + } + /** + * @return the step + */ + public int getStep() { + return step; + } + /** + * @param step the step to set + */ + public void setStep(int step) { + this.step = step; + } + /** + * @return the depth + */ + public int getDepth() { + return depth; + } + /** + * @param depth the depth to set + */ + public void setDepth(int depth) { + this.depth = depth; + } + /** + * @return the regdate + */ + public Date getRegdate() { + return regdate; + } + /** + * @param regdate the regdate to set + */ + public void setRegdate(Date regdate) { + this.regdate = regdate; + } + /** + * @return the hit + */ + public int getHit() { + return hit; + } + /** + * @param hit the hit to set + */ + public void setHit(int hit) { + this.hit = hit; + } + /** + * @return the recommend + */ + public int getRecommend() { + return recommend; + } + /** + * @param recommend the recommend to set + */ + public void setRecommend(int recommend) { + this.recommend = recommend; + } + /** + * @return the ip + */ + public String getIp() { + return ip; + } + /** + * @param ip the ip to set + */ + public void setIp(String ip) { + this.ip = ip; + } + /** + * @return the notice + */ + public int getNotice() { + return notice; + } + /** + * @param notice the notice to set + */ + public void setNotice(int notice) { + this.notice = notice; + } + /** + * @return the html + */ + public int getHtml() { + return html; + } + /** + * @param html the html to set + */ + public void setHtml(int html) { + this.html = html; + } + /** + * @return the num1 + */ + public int getNum1() { + return num1; + } + /** + * @param num1 the num1 to set + */ + public void setNum1(int num1) { + this.num1 = num1; + } + /** + * @return the num2 + */ + public int getNum2() { + return num2; + } + /** + * @param num2 the num2 to set + */ + public void setNum2(int num2) { + this.num2 = num2; + } + /** + * @return the data1 + */ + public String getData1() { + return data1; + } + /** + * @param data1 the data1 to set + */ + public void setData1(String data1) { + this.data1 = data1; + } + /** + * @return the data2 + */ + public String getData2() { + return data2; + } + /** + * @param data2 the data2 to set + */ + public void setData2(String data2) { + this.data2 = data2; + } + /** + * @return the place1 + */ + public String getPlace1() { + return place1; + } + /** + * @param place1 the place1 to set + */ + public void setPlace1(String place1) { + this.place1 = place1; + } + /** + * @return the position + */ + public String getPosition() { + return position; + } + /** + * @param position the position to set + */ + public void setPosition(String position) { + this.position = position; + } + + /** + * 조회수를 1 증가시킨다. + */ + public void incHit() { + this.hit += 1; + } + /** + * 조회수를 1 감소시킨다. + */ + public void decHit() { + this.hit -= 1; + } + /** + * @return the isReply + */ + public int getIsReply() { + return isReply; + } + /** + * @param isReply the isReply to set + */ + public void setIsReply(int isReply) { + this.isReply = isReply; + } + + /** + * @return the fileCnt + */ + public final int getFileCnt() { + return fileCnt; + } + /** + * @param fileCnt the fileCnt to set + */ + public final void setFileCnt(int fileCnt) { + this.fileCnt = fileCnt; + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return "BoardVO [id=" + id + ", seq=" + seq + ", userId=" + userId + + ", groupSeq=" + groupSeq + ", category=" + category + + ", userName=" + userName + ", content=" + content + + ", subject=" + subject + ", parentSeq=" + parentSeq + + ", prevSeq=" + prevSeq + ", nextSeq=" + nextSeq + ", step=" + + step + ", depth=" + depth + ", regdate=" + regdate + ", hit=" + + hit + ", recommend=" + recommend + ", ip=" + ip + ", notice=" + + notice + ", html=" + html + ", num1=" + num1 + ", num2=" + + num2 + ", data1=" + data1 + ", data2=" + data2 + ", place1=" + + place1 + ", position=" + position + ", isReply=" + isReply + + "]"; + } +} diff --git a/src/main/java/kcg/faics/board/web/BoardController.java b/src/main/java/kcg/faics/board/web/BoardController.java new file mode 100644 index 0000000..d1130dc --- /dev/null +++ b/src/main/java/kcg/faics/board/web/BoardController.java @@ -0,0 +1,576 @@ +package kcg.faics.board.web; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import kcg.faics.board.service.BoardService; +import kcg.faics.board.util.BoardUtils; +import kcg.faics.board.util.BoardVOHandler; +import kcg.faics.board.vo.BoardCommentVO; +import kcg.faics.board.vo.BoardFileVO; +import kcg.faics.board.vo.BoardSearchVO; +import kcg.faics.board.vo.BoardVO; +import kcg.faics.cmmn.bbs.BaseCommentService; +import kcg.faics.cmmn.bbs.BaseFileService; +import kcg.faics.cmmn.file.FileResponser; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.UserUtil; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.util.FileCopyUtils; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.SessionAttributes; +import org.springframework.web.bind.support.SessionStatus; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +/** + * 게시판 관련 컨트롤러. + * + * BoardController.java + * @author 임새미 + * @since 2016. 9. 28. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 9. 28. 임새미 최초생성 + * + */ +@Controller +@SessionAttributes(types = BoardVO.class) +@RequestMapping("/bbs") +public class BoardController { + + /** + * EgovPropertyService - properties값을 가져오는 인터페이스. + **/ + @Resource(name = "propertiesService") + private EgovPropertyService propertiesService; + + /** + * Validator - 유효성 검사. + **/ + @Resource(name = "beanValidator") + private DefaultBeanValidator beanValidator; + + /** + * BoardService - 게시판 데이터처리에 관한 인터페이스. + **/ + @Resource(name = "boardService") + private BoardService boardService; + + /** + * BoardFileService - 게시판 파일에 관한 인터페이스. + **/ + @Resource(name = "boardFileService") + private BaseFileService boardFileService; + + /** + * BoardCommentService - 게시판 덧글에 관한 인터페이스. + **/ + @Resource(name = "boardCommentService") + private BaseCommentService boardCommentService; + + /** + * 게시판 목록 화면을 반환한다. + * + * @param req Request 객체 + * @param searchVO 검색, 페이지 정보 객체 + * @param model 모델 객체 + * @return 게시판 목록 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/list.do") + public String boardList(final HttpServletRequest req, @ModelAttribute("searchVO") final BoardSearchVO searchVO, final Model model) throws Exception { + try { + /* 페이징 처리 정보 */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("pageSize")); + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + int totSearchCnt = boardService.selectListCnt(searchVO); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + + + /* 게시판 리스트 */ + List boardList = boardService.selectList(searchVO); + model.addAttribute("resultList", boardList); + + /* 게시판 상단 페이지 및 게시물 정보 표현을 위한 데이터 */ + int totCnt = boardService.selectTotalCnt(searchVO); + model.addAttribute("totalCnt", totCnt); + + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + + return "board/boardList.tiles"; + } + + /** + * 게시물의 내용을 확인하는 페이지를 반환한다. + * + * @param boardVO 게시판 VO + * @param model 모델 객체 + * @return 게시물 조회 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/view.do", method = RequestMethod.GET) + public String boardView(final BoardVO boardVO, final Model model) throws Exception { + + try { + /* 작성자와 조회자가 다른 경우 조회수 증가 */ + BoardVO board = boardService.select(boardVO); + if (!UserUtil.isEqualMember(board.getUserId())) { + boardService.incHit(board); + } + /* 게시판 내용 */ + model.addAttribute("boardVO", boardService.select(boardVO)); + /* 게시판 파일내용 */ + model.addAttribute("boardFileVO", boardFileService.selectList(BoardVOHandler.getBFileVO(boardVO))); + /* 게시판 덧글내용 */ + model.addAttribute("boardCommentVOList", boardCommentService.selectList(BoardVOHandler.getBCommentVO(boardVO))); + + /* 덧글 ModelAttribute */ + model.addAttribute("boardCommentVO", BoardVOHandler.getBCommentVO(boardVO)); + + /* 세션 사용자 정보 */ + model.addAttribute("loginUserVO", UserUtil.getMemberInfo()); + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + + return "board/boardView.tiles"; + } + + /** + * 게시물 추가 화면을 반환한다. + * + * @param model 모델 객체 + * @param boardVO 게시판 VO + * @return 게시물 조회 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/addView.do", method = RequestMethod.GET) + public String boardAddView(final Model model, final BoardVO boardVO) throws Exception { + + BoardVO modelAttr = new BoardVO(); + modelAttr.setId(boardVO.getId()); + modelAttr.setCategory(boardVO.getCategory()); + + /* 게시물 입력 Form ModelAttribute */ + model.addAttribute("boardVO", modelAttr); + /* create or modify 플래그 */ + model.addAttribute("registerFlag", "create"); + + return "board/boardAdd.tiles"; + } + + /** + * 게시물을 추가한 후 추가한 게시물 화면으로 이동한다. + * + * @param multiRequest multpart타입의 요청 객체 + * @param boardVO 게시물 정보 객체 + * @param bindingResult 바인딩 객체 + * @param model 모델 객체 + * @param status 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/add.do", method = RequestMethod.POST) + public String boardAdd(final MultipartHttpServletRequest multiRequest, @ModelAttribute("boardVO") final BoardVO boardVO, + final BindingResult bindingResult, final Model model, final SessionStatus status) throws Exception { + + HashMap map = new HashMap(); + + /* 인증된 사용자인지 확인 */ + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (isAuthenticated) { + try { + /* 유효성 검사 */ +// beanValidator.validate(boardVO, bindingResult); + if (bindingResult.hasErrors()) { + model.addAttribute("boardVO", boardVO); + return "board/boardAdd.tiles"; + } + + final Map fileMap = multiRequest.getFileMap(); + + /* 사용자 정보 입력 */ + LoginUserVO user = UserUtil.getMemberInfo(); + boardVO.setUserId(user.getUserid()); + boardVO.setUserName(user.getName()); + boardVO.setPosition(user.getPosition()); + boardVO.setPlace1(user.getPlace1()); + boardVO.setData1(user.getPlace1Yak()); + boardVO.setData2(user.getPositionStr()); + boardVO.setIsReply(-1); + map = boardService.insert(boardVO, fileMap); + + status.setComplete(); + + int result = (Integer) map.get("result"); + int seq = (Integer) map.get("seq"); + if (result > 0 && seq > 0) { + return "redirect:/bbs/view.do?seq=" + seq + "&id=" + boardVO.getId(); + } + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + } + + return "error/bizError"; + } + + /** + * 게시물을 추가한 후 추가한 게시물 화면으로 이동한다. + * + * @param boardVO 게시판VO 객체 + * @param model 모델 객체 + * @return 게시물 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/updateView.do", method = RequestMethod.POST) + public String updateView(final BoardVO boardVO, final Model model) throws Exception { + + BoardVO updateBoard = boardService.select(boardVO); + try { + /* 글 작성자와 세션 사용자의 아이디를 비교하여 본인여부를 판단한다 */ + if (updateBoard == null || !UserUtil.isEqualMember(updateBoard.getUserId()) && !UserUtil.isSysAdmin()) { + return "redirect:/bbs/view.do?seq=" + boardVO.getSeq() + "&id=" + boardVO.getId(); + } + + model.addAttribute("boardVO", updateBoard); + model.addAttribute("registerFlag", "modify"); + model.addAttribute("boardFileVO", boardFileService.selectList(BoardVOHandler.getBFileVO(updateBoard))); + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + + return "board/boardAdd.tiles"; + } + + /** + * 게시물을 수정한다. + * + * @param multiRequest multpart타입의 요청 객체 + * @param boardVO 게시물 정보 객체 + * @param bindingResult 바인딩 객체 + * @param model 모델 객체 + * @param status 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/update.do", method = RequestMethod.POST) + public String update(final MultipartHttpServletRequest multiRequest, @ModelAttribute("boardVO") final BoardVO boardVO, + final BindingResult bindingResult, final Model model, final SessionStatus status) throws Exception { + + try { + /* 글 작성자와 세션 사용자의 아이디를 비교하여 본인여부를 판단한다 */ + if (!UserUtil.isEqualMember(boardVO.getUserId()) && !UserUtil.isSysAdmin()) { + return "redirect:/bbs/view.do?seq=" + boardVO.getSeq() + "&id=" + boardVO.getId(); + } + + /* 유효성 검사 */ +// beanValidator.validate(boardVO, bindingResult); + if (bindingResult.hasErrors()) { + model.addAttribute("boardVO", boardVO); + model.addAttribute("registerFlag", "modify"); + return "board/boardAdd.tiles"; + } + + HashMap map = new HashMap(); + + String[] deleteFiles = multiRequest.getParameterValues("deleteFile"); + final Map fileMap = multiRequest.getFileMap(); + map = boardService.update(boardVO, fileMap, deleteFiles); + + status.setComplete(); + + int result = (Integer) map.get("result"); + int seq = (Integer) map.get("seq"); + + if (result > 0 && seq > 0) { + return "redirect:/bbs/view.do?seq=" + seq + "&id=" + boardVO.getId(); + } + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + + return "redirect:/bbs/list.do?id=" + boardVO.getId(); + } + + /** + * 게시물을 삭제한다. + * + * @param boardVO 게시판 VO + * @param model 모델 객체 + * @param status 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/delete.do", method = RequestMethod.POST) + public String delete(final BoardVO boardVO, final Model model, final SessionStatus status) throws Exception { + + try { + BoardVO deleteBoard = boardService.select(boardVO); + + if (deleteBoard == null || (!UserUtil.isEqualMember(deleteBoard.getUserId()) && !UserUtil.isSysAdmin())) { + return "redirect:/bbs/view.do?seq=" + boardVO.getSeq() + "&id=" + boardVO.getId(); + } + + HashMap map = new HashMap(); + + map = boardService.delete(boardVO); + + status.setComplete(); + + if ((Integer) map.get("result") > 0) { + return "redirect:/bbs/list.do?id=" + boardVO.getId(); + } + + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + + return "redirect:/bbs/view.do?seq=" + boardVO.getSeq() + "&id=" + boardVO.getId(); + } + + /** + * 게시물을 삭제한다. + * + * @param bdId 삭제할 게시판 ID + * @param deleteBoard 모델 객체 + * @param status 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/selectedDelete.do", method = RequestMethod.POST) + public String deleteSelected(@RequestParam("id") final String bdId, final int[] deleteBoard, final SessionStatus status) throws Exception { + /* 관리자만 가능 */ + if (UserUtil.isAdmin()) { + try { + BoardVO boardVO = BoardVOHandler.getBoardVO(bdId, 0); + if (deleteBoard != null) { + boardService.selectAndDelete(boardVO, deleteBoard); + } + } catch (Exception e) { + e.printStackTrace(); + } + status.setComplete(); + } + return "redirect:/bbs/list.do?id=" + bdId; + } + + /** + * 답글쓰기 화면을 반환한다. + * + * @param boardVO 게시판 VO + * @param model 모델 객체 + * @param status SessionStatus + * @return 답글쓰기 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/replyView.do", method = RequestMethod.POST) + public String replyView(final BoardVO boardVO, final Model model, final SessionStatus status) throws Exception { + BoardVO replyVO = BoardVOHandler.getBoardVO(boardVO); + replyVO.setStep(boardVO.getStep()); + replyVO.setGroupSeq(boardVO.getGroupSeq()); + replyVO.setDepth(boardVO.getDepth()); + model.addAttribute("boardVO", replyVO); + model.addAttribute("registerFlag", "reply"); + return "board/boardAdd.tiles"; + } + + /** + * 답글을 등록하고 조회 화면을 반환한다. + * + * @param boardVO 게시물 VO + * @param bindingResult BindingResult + * @param model 모델 객체 + * @param status SessionStatus + * @param multiRequest MultipartHttpServletRequest + * @return 조회 화면 + */ + @RequestMapping(value = "/reply.do", method = RequestMethod.POST) + public String replyAdd(@ModelAttribute("boardVO") final BoardVO boardVO, + final BindingResult bindingResult, final Model model, final SessionStatus status, final MultipartHttpServletRequest multiRequest) { + + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (isAuthenticated) { + try { +// beanValidator.validate(boardVO, bindingResult); + if (bindingResult.hasErrors()) { + model.addAttribute("boardVO", boardVO); + return "board/boardAdd.tiles"; + } + + HashMap map = new HashMap(); + + final Map fileMap = multiRequest.getFileMap(); + + /* 사용자 정보 입력 */ + LoginUserVO user = UserUtil.getMemberInfo(); + boardVO.setUserId(user.getUserid()); + boardVO.setUserName(user.getName()); + boardVO.setPosition(user.getPosition()); + boardVO.setPlace1(user.getPlace1()); + boardVO.setData1(user.getPlace1Yak()); + boardVO.setData2(user.getPositionStr()); + boardVO.setIsReply(1); + map = boardService.insert(boardVO, fileMap); + + status.setComplete(); + + int result = (Integer) map.get("result"); + int seq = (Integer) map.get("seq"); + if (result > 0 && seq > 0) { + return "redirect:/bbs/view.do?seq=" + seq + "&id=" + boardVO.getId(); + } + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + + } + + return "redirect:/bbs/list.do?id=" + boardVO.getId(); + } + + /** + * 덧글을 등록한다. + * + * @param boardCommentVO 덧글 데이터 + * @param status SessionStatus + * @return json 객체 + */ + @ResponseBody + @RequestMapping(value = "/commentAdd.json", method = RequestMethod.POST) + public Object comment(@ModelAttribute("boardCommentVO") final BoardCommentVO boardCommentVO, final SessionStatus status) { + + HashMap ret = new HashMap(); + + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (isAuthenticated) { + try { + LoginUserVO user = UserUtil.getMemberInfo(); + boardCommentVO.setUserId(user.getUserid()); + boardCommentVO.setUserName(user.getName()); + + + ret = boardCommentService.insert(boardCommentVO); + if ((Integer) ret.get("result") > 0) { + ret.put("comment", boardCommentService.select(boardCommentVO)); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + status.setComplete(); + + return ret; + } + + /** + * 댓글을 삭제한다. + * + * @param boardCommentVO 댓글 VO + * @param status SessionStatus + * @return json 객체 + */ + @ResponseBody + @RequestMapping("/commentDelete.json") + public Object commentDelete(final BoardCommentVO boardCommentVO, final SessionStatus status) { + + HashMap ret = new HashMap(); + int result = 0; + try { + BoardCommentVO commentVO = boardCommentService.select(boardCommentVO); + if (UserUtil.isEqualMember(commentVO.getUserId()) || UserUtil.isSysAdmin()) { + result = boardCommentService.delete(boardCommentVO); + } + } catch (Exception e) { + e.printStackTrace(); + } + + status.setComplete(); + + ret.put("result", result); + + return ret; + } + + /** + * 첨부파일로 등록된 파일에 대하여 다운로드를 제공한다. + * + * @param boardFileVO 게시판 파일 VO + * @param request Request 객체 + * @param response Response 객체 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/download.do") + public void cvplFileDownload(final BoardFileVO boardFileVO, final HttpServletRequest request, final HttpServletResponse response) throws Exception { + + BoardFileVO vo = boardFileService.select(boardFileVO); + String fileOrgName = vo.getOrgName(); + String storePathKey = BoardUtils.getStorePathKey(boardFileVO.getId()); + String fileFullPath = propertiesService.getString(storePathKey) + vo.getSaveName(); + + File file = new File(fileFullPath); + if (file.exists()) { + FileResponser.setResponse(file, fileOrgName, request, response); + BufferedInputStream in = null; + try { + in = new BufferedInputStream(new FileInputStream(file)); + FileCopyUtils.copy(in, response.getOutputStream()); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (in != null) { + try { + in.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + + } +} diff --git a/src/main/java/kcg/faics/cmmn/CommonsUtils.java b/src/main/java/kcg/faics/cmmn/CommonsUtils.java new file mode 100644 index 0000000..2c30e47 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/CommonsUtils.java @@ -0,0 +1,105 @@ +/** + * CommonsUtils.java + * @author 임새미 + * @since 2016. 10. 14. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 14. 임새미 최초생성 + * + */ +package kcg.faics.cmmn; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.regex.Pattern; + +import javax.servlet.http.HttpServletRequest; + +/** + * CommonsUtils.java + * @author 임새미 + * @since 2016. 10. 14. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 14. 임새미 최초생성 + * 2016. 12. 14. 하영지 isEmpty 생성 + * + */ +public class CommonsUtils { + + public static String sqlInjectionFilter(String str){ + Pattern evilChars = Pattern.compile("\\[\'-#()@;=*/+%\\]"); + str = evilChars.matcher(str).replaceAll(""); + + String lowerStr = str.toLowerCase(); + + if (lowerStr.contains("union") || lowerStr.contains("select") || lowerStr.contains("insert") || lowerStr.contains("drop") + || lowerStr.contains("update") || lowerStr.contains("delete") || lowerStr.contains("join") || lowerStr.contains("from") + || lowerStr.contains("where") || lowerStr.contains("substr") || lowerStr.contains("user_tables") || lowerStr.contains("user_tab_columns")) { + + str = lowerStr; + str = str.replaceAll("union", "q-union"); + str = str.replaceAll("select", "q-select"); + str = str.replaceAll("insert", "q-insert"); + str = str.replaceAll("drop", "q-drop"); + str = str.replaceAll("update", "q-update"); + str = str.replaceAll("delete", "q-delete"); + str = str.replaceAll("join", "q-join"); + str = str.replaceAll("from", "q-from"); + str = str.replaceAll("where", "q-where"); + str = str.replaceAll("substr", "q-substr"); + str = str.replaceAll("user_tables", "q-user_tables"); + str = str.replaceAll("user_tab_columns", "q-user_tab_columns"); + } + return str; + } + + public static HashMap getParameterMap(HttpServletRequest request){ + + @SuppressWarnings("unchecked") + Map paramMap = request.getParameterMap(); + HashMap newMap = new HashMap(); + + Set keySet = paramMap.keySet(); + Iterator it = keySet.iterator(); + while (it.hasNext()) { + String key = it.next(); + if (paramMap.get(key) instanceof String[]) { + newMap.put(key, ((String[]) paramMap.get(key))[0]); + } else { + newMap.put(key, paramMap.get(key)); + } + } + return newMap; + } + + /** + * 객체가 비어있는지 체크 + * + * @param s 체크할 객체 + * @return 비어있음:true + */ + public static boolean isEmpty(final Object s) { + if (s == null) { + return true; + } + if ((s instanceof String) && ((String.valueOf(s)).trim().length() == 0)) { + return true; + } + if (s instanceof Map) { + return ((Map)s).isEmpty(); + } + if (s instanceof List) { + return ((List)s).isEmpty(); + } + if (s instanceof Object[]) { + return (((Object[])s).length == 0); + } + return false; + } +} diff --git a/src/main/java/kcg/faics/cmmn/ImagePaginationRenderer.java b/src/main/java/kcg/faics/cmmn/ImagePaginationRenderer.java new file mode 100644 index 0000000..60e3b72 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/ImagePaginationRenderer.java @@ -0,0 +1,68 @@ +/* + * Copyright 2008-2009 the original author or authors. + * + * Licensed 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 + * + * http://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. + */ +package kcg.faics.cmmn; + +import javax.servlet.ServletContext; + +import org.springframework.web.context.ServletContextAware; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.AbstractPaginationRenderer; + +/** + * @Class Name : ImagePaginationRenderer.java + * @Description : ImagePaginationRenderer Class + * @Modification Information + * @ + * @ 수정일 수정자 수정내용 + * @ --------- --------- ------------------------------- + * @ 2009.03.16 최초생성 + * + * @author 개발프레임웍크 실행환경 개발팀 + * @since 2009. 03.16 + * @version 1.0 + * @see + * + * Copyright (C) by MOPAS All right reserved. + */ +public class ImagePaginationRenderer extends AbstractPaginationRenderer implements ServletContextAware { + + private ServletContext servletContext; + + public ImagePaginationRenderer() { + // no-op + } + + /** + * PaginationRenderer + * + * @see 개발프레임웍크 실행환경 개발팀 + */ + public void initVariables() { + + firstPageLabel = "" + " "; + previousPageLabel = "" + " "; + currentPageLabel = "{0} "; + otherPageLabel = "{2} "; + nextPageLabel = "" + " "; + lastPageLabel = "" + " "; + } + + @Override + public void setServletContext(ServletContext servletContext) { + this.servletContext = servletContext; + initVariables(); + } +} diff --git a/src/main/java/kcg/faics/cmmn/MenuPosition.java b/src/main/java/kcg/faics/cmmn/MenuPosition.java new file mode 100644 index 0000000..b024f58 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/MenuPosition.java @@ -0,0 +1,24 @@ +package kcg.faics.cmmn; + +/** + * 메뉴 위치. + * + * @author kimnomin + * + */ +public final class MenuPosition { + /** + * 상단메뉴. (메인메뉴) + */ + public static final String TOP = "T"; + /** + * 상단 보조메뉴. + */ + public static final String TOP_SUB = "TS"; + + /** + * 생성자. + */ + private MenuPosition() { + } +} diff --git a/src/main/java/kcg/faics/cmmn/aop/CommonAop.java b/src/main/java/kcg/faics/cmmn/aop/CommonAop.java new file mode 100644 index 0000000..f0bec64 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/aop/CommonAop.java @@ -0,0 +1,188 @@ +/** + * BoardPreventSqlInjectionAop.java + * @author 임새미 + * @since 2016. 10. 19. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 19. 임새미 최초생성 + * + */ +package kcg.faics.cmmn.aop; + +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import kcg.faics.cmmn.service.LogService; +import kcg.faics.cmmn.service.MenuService; +import kcg.faics.cmmn.vo.MenuVO; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.UserUtil; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.stereotype.Component; +import org.springframework.ui.Model; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.servlet.ModelAndView; + +/** + * CommonAop.java + * + * @author 임새미 + * @since 2016. 10. 19. + * + * 수정일 수정자 수정내용 ------------- -------- --------------------------- 2016. + * 10. 19. 임새미 최초생성 2016. 11. 10. 임새미 사용자 로그 생성 부분 추가 + * + */ +@Aspect +@Component +public class CommonAop { + + @Resource(name = "menuService") + MenuService menuService; + + @Resource(name = "logService") + LogService logService; + + @Around("execution(* kcg.faics..*Controller.*(..))") + public Object menuGenerator(final ProceedingJoinPoint thisJoinPoint) + throws Throwable { + + HttpServletRequest req = ((ServletRequestAttributes) RequestContextHolder + .getRequestAttributes()).getRequest(); + String loginUrl = "/loginView.do"; + String url = req.getRequestURI(); + + if (loginUrl.equals(url)) { + return thisJoinPoint.proceed(); + } + + LoginUserVO loginUserVO = null; + try { + loginUserVO = UserUtil.getMemberInfo(); + } catch (Exception e) { + //세션정보가 없을 경우 로그인 페이지로 이동. + if (loginUserVO == null) { + return "redirect:" + loginUrl; + } + } + try { + for (Object obj : thisJoinPoint.getArgs()) { + if (obj instanceof Model) { + Model model = (Model) obj; + + MenuVO menuVO = new MenuVO(); + menuVO.setUserId(loginUserVO.getUserid()); + menuVO.setUserType(loginUserVO.getType()); + List mainMenuList = menuService + .selectMainMenuList(menuVO); + model.addAttribute("mainMenuList", mainMenuList); + + List topSubMenuList = menuService + .selectTopSubMenuList(menuVO); + + model.addAttribute("topSubMenuList", topSubMenuList); + + HashMap menu = new HashMap(); + + String subStr = url.substring(1); + String boardId = ""; + String group = subStr.split("/")[0]; + String onlyUrl = subStr; + String qryCate = ""; + if (onlyUrl.indexOf("/") > -1) { + onlyUrl = subStr.substring(onlyUrl.indexOf("/")); + } else { + return thisJoinPoint.proceed(); + } + url = onlyUrl; + + if (req.getParameter("id") != null) { + boardId = req.getParameter("id"); + + switch (boardId) { + // 외사통계-통계월보는 타이틀을 같이 쓸것이므로 카테고리를 나누지않는다. + case "stat_bbs": + break; + + default: + if (req.getParameter("category") != null + && !req.getParameter("category") + .equals(" ")) { + qryCate = "category=" + + req.getParameter("category"); + // url = url + "/" + + // req.getParameter("category"); + } + break; + } + } + + menu.put("url", url); + menu.put("group", group); + menu.put("boardId", boardId); + menu.put("query", qryCate); + + HashMap menuInfo = menuService + .getMenuInfo(menu); + menuVO.setId(Integer + .parseInt(menuInfo.get("ID").toString())); + menuInfo.put("userId", loginUserVO.getUserid()); + + List currAndHigherMenuList = menuService + .selectListWithHigher(menuVO); + model.addAttribute("currAndHigherMenuList", + currAndHigherMenuList); + model.addAttribute("menu", menuInfo); + model.addAttribute("subMenu", + menuService.getSubmenu(menuInfo)); + + addUserLog(req, menu); + } + } + } catch (Exception e) { + // e.printStackTrace(); + } + + Object proc = thisJoinPoint.proceed(); + return proc; + } + + /** + * 사용자 로그를 기록한다. + * + * @param req + * Request 객체 + * @param menu + * 메뉴 Map 객체 + */ + private void addUserLog(final HttpServletRequest req, + final HashMap menu) { + LoginUserVO user = (LoginUserVO) req.getSession() + .getAttribute("userVO"); + + HashMap paramMap = new HashMap(); + paramMap.put("userid", user.getUserid()); + paramMap.put("name", user.getName()); + paramMap.put("userip", user.getIp()); + paramMap.put("place1", user.getPlace1()); + paramMap.put("position", user.getPosition()); + + paramMap.put("location1", menu.get("group")); + paramMap.put("location2", menu.get("url")); + paramMap.put("location3", req.getRequestURI()); + + try { + logService.insertUserLog(paramMap); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/kcg/faics/cmmn/bbs/BaseBbsExService.java b/src/main/java/kcg/faics/cmmn/bbs/BaseBbsExService.java new file mode 100644 index 0000000..d11c4c8 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/bbs/BaseBbsExService.java @@ -0,0 +1,40 @@ +package kcg.faics.cmmn.bbs; + +import java.util.HashMap; + +/** + * 확장형 게시판 비지니스 로직 인터페이스. + * + * @author kimnomin + * + * @param + * 페이징 및 검색조건 VO + * @param + * 실제 데이터 VO + */ +public interface BaseBbsExService extends BaseBbsService { + + /** + * seq배열을 받아 해당되는 게시판을 삭제한다. + * + * @param dataVO + * 제네릭 타입의 data 관련 VO + * @param seq + * 시퀀스 배열 + * @return 맵 객체 { result: 1-성공 0-실패, idx: 수정된 게시물 idx } + * @throws Exception + * 기본 예외 처리 + */ + HashMap selectAndDelete(DataT dataVO, int[] seq) throws Exception; + + /** + * 조회수를 1 증가시킨다. + * + * @param dataVO + * 제네릭 타입의 data 관련 VO + * @return 성공 - 1, 실패 - 0 + * @throws Exception + * 기본 예외 처리 + */ + int incHit(DataT dataVO) throws Exception; +} diff --git a/src/main/java/kcg/faics/cmmn/bbs/BaseBbsService.java b/src/main/java/kcg/faics/cmmn/bbs/BaseBbsService.java new file mode 100644 index 0000000..22cf607 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/bbs/BaseBbsService.java @@ -0,0 +1,115 @@ +package kcg.faics.cmmn.bbs; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.web.multipart.MultipartFile; + +/** + * 기본형 게시판 비지니스 로직 인터페이스. + * 기본적인 CRUD를 지원한다. + * + * @author kimnomin + * + * @param + * 페이징 및 검색조건 VO + * @param + * 실제 데이터 VO + */ +public interface BaseBbsService { + /** + * 데이터 한 건을 반환한다. + * + * @param dataVO + * 조회할 VO (대부분 PK의 값으로 조회한다.) + * @return 데이터 한 건 + * @throws Exception + * 기본 예외 처리 + */ + DataT select(DataT dataVO) throws Exception; + + /** + * 페이징 처리없이 데이터 전체 목록을 반환한다. + * + * @param searchVO 검색정보 객체 + * @return 데이터 목록 + * @throws Exception 기본 예외 처리 + */ + List selectListAll(SearchT searchVO) throws Exception; + + /** + * 데이터 목록을 반환한다. + * + * @param searchVO + * 검색, 페이지 정보 객체 + * @return 데이터 목록 + * @throws Exception + * 기본 예외 처리 + */ + List selectList(SearchT searchVO) throws Exception; + + /** + * 데이터 목록 개수를 반환한다. + * + * @param searchVO + * 검색, 페이지 정보 객체 + * @return 데이터 목록 갯수 + * @throws Exception + * 기본 예외 처리 + */ + int selectListCnt(SearchT searchVO) throws Exception; + + /** + * 데이터 총 개수를 반환한다. + * + * @param searchVO + * 검색, 페이지 정보 객체 + * @return 데이터 총 개수 + * @throws Exception + * 기본 예외 처리 + */ + int selectTotalCnt(SearchT searchVO) throws Exception; + + /** + * 데이터를 입력한다. + * + * @param dataVO + * 입력할 VO + * @param fileMap + * 파일이 담긴 Map 객체 + * @return 맵 객체 { result: 1-성공 0-실패, idx: 등록된 게시물 idx } + * + * @throws Exception + * 기본 예외 처리 + */ + HashMap insert(DataT dataVO, + Map fileMap) throws Exception; + + /** + * 데이터를 수정한다. + * + * @param dataVO + * 수정할 VO + * @param fileMap + * 파일이 담긴 Map 객체 + * @param deleteFiles + * 삭제할 파일리스트 + * @return 맵 객체 { result: 1-성공 0-실패, idx: 수정된 게시물 idx } + * @throws Exception + * 기본 예외 처리 + */ + HashMap update(DataT dataVO, + Map fileMap, String[] deleteFiles) throws Exception; + + /** + * 데이터를 삭제한다. + * + * @param dataVO + * 삭제할 VO + * @return 맵 객체 { result: 1-성공 0-실패, idx: 삭제된 게시물 idx } + * @throws Exception + * 기본 예외 처리 + */ + HashMap delete(DataT dataVO) throws Exception; +} diff --git a/src/main/java/kcg/faics/cmmn/bbs/BaseCommentService.java b/src/main/java/kcg/faics/cmmn/bbs/BaseCommentService.java new file mode 100644 index 0000000..a5ebcaa --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/bbs/BaseCommentService.java @@ -0,0 +1,81 @@ +/** + * BaseCommentService.java + * @author 임새미 + * @since 2016. 10. 26. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 26. 임새미 최초생성 + * + */ +package kcg.faics.cmmn.bbs; + +import java.util.HashMap; +import java.util.List; + +/** + * BaseCommentService.java + * @author 임새미 + * @since 2016. 10. 26. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 26. 임새미 최초생성 + * + */ +public interface BaseCommentService { + /** + * 댓글 정보를 반환한다. + * + * @param commentVO + * 제네릭 타입의 댓글 관련 VO + * @return 제네릭 타입의 댓글 정보 + * @throws Exception + * 기본 예외 처리 + */ + T select(T commentVO) throws Exception; + + /** + * 댓글 목록을 반환한다. + * + * @param commentVO + * 제네릭 타입의 댓글 관련 VO + * @return 제네릭 타입의 댓글 목록 + * @throws Exception + * 기본 예외 처리 + */ + List selectList(T commentVO) throws Exception; + + /** + * 댓글 정보를 입력한다. + * + * @param commentVO + * 제네릭 타입의 댓글 관련 VO + * @return map 형태의 결과. result : 1-성공, 0-실패, seq : 추가된 댓글 아이디 + * @throws Exception + * 기본 예외 처리 + */ + HashMap insert(T commentVO) throws Exception; + + /** + * 댓글 정보를 삭제한다. + * + * @param commentVO + * 제네릭 타입의 File 관련 VO + * @return 1-성공, 0-실패 + * @throws Exception + * 기본 예외 처리 + */ + int delete(T commentVO) throws Exception; + + /** + * commentVO의 parentSeq인 모든 댓글을 삭제한다. + * + * @param commentVO + * 제네릭 타입의 File 관련 VO + * @return 1-성공, 0-실패 + * @throws Exception + * 기본 예외 처리 + */ + int deleteAll(T commentVO) throws Exception; +} diff --git a/src/main/java/kcg/faics/cmmn/bbs/BaseCommentVO.java b/src/main/java/kcg/faics/cmmn/bbs/BaseCommentVO.java new file mode 100644 index 0000000..5f86a32 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/bbs/BaseCommentVO.java @@ -0,0 +1,142 @@ +/** + * BaseCommentVO.java + * @author 임새미 + * @since 2016. 10. 26. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 26. 임새미 최초생성 + * + */ +package kcg.faics.cmmn.bbs; + +import java.util.Date; + +/** + * BaseCommentVO.java + * @author 임새미 + * @since 2016. 10. 26. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 26. 임새미 최초생성 + * + */ +public class BaseCommentVO { + + /** + * 댓글 번호 + */ + private int seq; + /** + * 댓글 등록자 이름 + */ + private String userName; + /** + * 댓글 내용 + */ + private String content; + /** + * 댓글 등록 시간 + */ + private Date regdate; + /** + * 댓글 등록자 IP + */ + private String ip; + /** + * 댓글 등록자 아이디 + */ + private String userId; + /** + * 댓글이 달린 대상의 아이디 + */ + private int parentSeq; + + /** + * @return 댓글 번호 + */ + public int getSeq() { + return seq; + } + /** + * @param 댓글 번호 + */ + public void setSeq(int seq) { + this.seq = seq; + } + + /** + * @return 댓글 등록자 이름 + */ + public String getUserName() { + return userName; + } + /** + * @param 댓글 등록자 이름 + */ + public void setUserName(String userName) { + this.userName = userName; + } + /** + * @return 댓글 내용 + */ + public String getContent() { + return content; + } + /** + * @param 댓글 내용 + */ + public void setContent(String content) { + this.content = content; + } + /** + * @return 댓글 등록 시간 + */ + public Date getRegdate() { + return regdate; + } + /** + * @param 댓글 등록 시간 + */ + public void setRegdate(Date regdate) { + this.regdate = regdate; + } + /** + * @return 댓글 등록자 IP + */ + public String getIp() { + return ip; + } + /** + * @param 댓글 등록자 IP + */ + public void setIp(String ip) { + this.ip = ip; + } + /** + * @return 댓글 등록자 아이디 + */ + public String getUserId() { + return userId; + } + /** + * @param 댓글 등록자 아이디 + */ + public void setUserId(String userId) { + this.userId = userId; + } + /** + * @return 댓글이 달린 대상의 아이디 + */ + public int getParentSeq() { + return parentSeq; + } + /** + * @param 댓글이 달린 대상의 아이디 + */ + public void setParentSeq(int parentSeq) { + this.parentSeq = parentSeq; + } + +} diff --git a/src/main/java/kcg/faics/cmmn/bbs/BaseFileService.java b/src/main/java/kcg/faics/cmmn/bbs/BaseFileService.java new file mode 100644 index 0000000..16c5b9b --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/bbs/BaseFileService.java @@ -0,0 +1,97 @@ +package kcg.faics.cmmn.bbs; + +import java.util.List; +import java.util.Map; + +import org.springframework.web.multipart.MultipartFile; + +/** + * 게시판 공용 첨부파일 관련 서비스 Interface. + * + * @author kimnomin + * + * @param + * 제네릭 타입. + */ +public interface BaseFileService { + + /** + * 파일 정보를 반환한다. + * + * @param fileVO + * 제네릭 타입의 파일 관련 VO + * @return 제네릭 타입의 파일 정보 + * @throws Exception + * 기본 예외 처리 + */ + T select(T fileVO) throws Exception; + + /** + * 파일 목록을 반환한다. + * + * @param fileVO + * 제네릭 타입의 파일 관련 VO + * @return 제네릭 타입의 파일 목록 + * @throws Exception + * 기본 예외 처리 + */ + List selectList(T fileVO) throws Exception; + + /** + * 파일 정보를 입력한다. + * + * @param fileVO + * 제네릭 타입의 File 관련 VO + * @return 1-성공, 0-실패 + * @throws Exception + * 기본 예외 처리 + */ + int insert(T fileVO) throws Exception; + + /** + * 파일 정보를 삭제한다. + * + * @param fileVO + * 제네릭 타입의 File 관련 VO + * @return 1-성공, 0-실패 + * @throws Exception + * 기본 예외 처리 + */ + int delete(T fileVO) throws Exception; + + /** + * 파일을 폴더에 저장하고 파일 정보를 입력한다. + * + * @param fileVO + * 제네릭 타입의 File 관련 VO + * @param fileMap + * 파일 객가 담긴 Map 객체 + * @return 1-성공, 0-실패 + * @throws Exception + * 기본 예외 처리 + */ + int insertAndSaveFiles(T fileVO, Map fileMap) + throws Exception; + + /** + * 한 건의 파일을 폴더에서 제거하고 파일 정보를 삭제한다. + * + * @param fileVO + * 제네릭 타입의 File 관련 VO + * @return 1-성공, 0-실패 + * @throws Exception + * 기본 예외 처리 + */ + int deleteAndRemoveFile(T fileVO) throws Exception; + + /** + * fileVO의 parentSeq인 모든 파일을 폴더에서 제거하고 파일 정보를 삭제한다. + * + * @param fileVO + * 제네릭 타입의 File 관련 VO + * @return 1-성공, 0-실패 + * @throws Exception + * 기본 예외 처리 + */ + int deleteAndRemoveFiles(T fileVO) throws Exception; +} diff --git a/src/main/java/kcg/faics/cmmn/bbs/BaseFileVO.java b/src/main/java/kcg/faics/cmmn/bbs/BaseFileVO.java new file mode 100644 index 0000000..91bcfb0 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/bbs/BaseFileVO.java @@ -0,0 +1,114 @@ +package kcg.faics.cmmn.bbs; + +/** + * 게시판형 공용 첨부파일 VO. + * + * 1. 모든 게시판형 첨부파일은 해당 VO를 상속받아 사용한다. + * 2. 필드명이 다른 경우 Data처리 라이브러리(현재 MyBatis)의 Alias 기능을 활용하여 매칭시킨다. + * + * @author kimnomin + * + */ +public class BaseFileVO { + /** + * 파일 번호. + */ + private int seq; + /** + * 파일 순서 번호. + */ + private int orders; + /** + * 파일 이름. + */ + private String orgName; + /** + * 파일 저장 이름. + */ + private String saveName; + /** + * 게시글 번호. + */ + private int parentSeq; + + /** + * 파일 번호를 반환한다. + * + * @return 파일 번호 + */ + public final int getSeq() { + return seq; + } + /** + * 파일 번호를 설정한다. + * + * @param seq 파일 번호 + */ + public final void setSeq(final int seq) { + this.seq = seq; + } + /** + * 파일 순서 번호를 반환한다. + * + * @return 파일 순서 번호 + */ + public final int getOrders() { + return orders; + } + /** + * 파일 순서 번호를 설정한다. + * + * @param order 파일 순서 번호 + */ + public final void setOrders(final int order) { + this.orders = order; + } + /** + * 파일 이름을 반환한다. + * + * @return 파일 이름 + */ + public final String getOrgName() { + return orgName; + } + /** + * 파일 이름을 설정한다. + * + * @param orgName 파일 이름 + */ + public final void setOrgName(final String orgName) { + this.orgName = orgName; + } + /** + * 파일 저장 이름을 반환한다. + * + * @return 파일 저장 이름 + */ + public final String getSaveName() { + return saveName; + } + /** + * 파일 저장 이름을 설정한다. + * + * @param saveName 파일 저장 이름 + */ + public final void setSaveName(final String saveName) { + this.saveName = saveName; + } + /** + * 게시글 번호를 반환한다. + * + * @return 게시글 번호 + */ + public final int getParentSeq() { + return parentSeq; + } + /** + * 게시글 번호를 설정한다. + * + * @param parentSeq 게시글 번호 + */ + public final void setParentSeq(final int parentSeq) { + this.parentSeq = parentSeq; + } +} diff --git a/src/main/java/kcg/faics/cmmn/bbs/BaseSearchVO.java b/src/main/java/kcg/faics/cmmn/bbs/BaseSearchVO.java new file mode 100644 index 0000000..0141e98 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/bbs/BaseSearchVO.java @@ -0,0 +1,197 @@ +package kcg.faics.cmmn.bbs; + +/** + * 게시판형 기능에서 검색조건을 저장하는 부모 Value Object. + * + * 각 기능에서 검색조건을 지정할때는 해당 VO를 상속받아 사용하는 것을 원칙으로 한다. + * + * @author kimnomin + * + */ +public class BaseSearchVO { + /** + * 현재 페이지. + */ + private int pageIndex = 1; + + /** + * 페이지 개수. + */ + private int pageUnit; // properties에서 설정 + + /** + * 페이지 사이즈. + */ + private int pageSize; // properties에서 설정 + + /** + * 시작 인덱스. + */ + private int firstIndex = 0; + + /** + * 끝 인덱스. + */ + private int lastIndex = 1; + + /** + * 페이지별 레코드 개수. + */ + private int recordCountPerPage = 10; + + /** + * 검색 키워드. + */ + private String searchKeyword = ""; + /** + * 검색 조건. + */ + private String searchCondition = ""; + + /** + * 현재 페이지를 반환한다. + * + * @return 현재 페이지 + */ + public final int getPageIndex() { + return pageIndex; + } + + /** + * 현재 페이지를 설정한다. + * + * @param pageIndex + * 현재 페이지 + */ + public final void setPageIndex(final int pageIndex) { + this.pageIndex = pageIndex; + } + + /** + * 페이지 개수를 반환한다. + * + * @return 페이지 개수 + */ + public final int getPageUnit() { + return pageUnit; + } + + /** + * 페이지 개수를 설정한다. + * + * @param pageUnit + * 페이지 개수 + */ + public final void setPageUnit(final int pageUnit) { + this.pageUnit = pageUnit; + } + + /** + * 페이지 사이즈를 반환한다. + * + * @return 페이지 사이즈 + */ + public final int getPageSize() { + return pageSize; + } + + /** + * 페이지 사이즈를 설정한다. + * + * @param pageSize + * 페이지 사이즈 + */ + public final void setPageSize(final int pageSize) { + this.pageSize = pageSize; + } + + /** + * 시작 인덱스를 반환한다. + * + * @return 시작 인덱스 + */ + public final int getFirstIndex() { + return firstIndex; + } + + /** + * 시작 인덱스를 설정한다. + * + * @param firstIndex + * 시작 인덱스 + */ + public final void setFirstIndex(final int firstIndex) { + this.firstIndex = firstIndex; + } + + /** + * 끝 인덱스를 반환한다. + * + * @return 끝 인덱스 + */ + public final int getLastIndex() { + return lastIndex; + } + + /** + * 끝 인덱스를 설정한다. + * + * @param lastIndex + * 끝 인덱스 + */ + public final void setLastIndex(final int lastIndex) { + this.lastIndex = lastIndex; + } + + /** + * 페이지별 레코드 수를 반환한다. + * + * @return 페이지별 레코드 수 + */ + public final int getRecordCountPerPage() { + return recordCountPerPage; + } + + /** + * 페이지별 레코드 수를 설정한다. + * + * @param recordCountPerPage + * 페이지별 레코드 수 + */ + public final void setRecordCountPerPage(final int recordCountPerPage) { + this.recordCountPerPage = recordCountPerPage; + } + + /** + * 검색 키워드를 반환한다. + * + * @return 검색 키워드 + */ + public final String getSearchKeyword() { + return searchKeyword; + } + + /** + * 검색 키워드를 설정한다. + * + * @param searchKeyword + * 검색 키워드 + */ + public final void setSearchKeyword(final String searchKeyword) { + this.searchKeyword = searchKeyword; + } + + /** + * @return 검색 조건을 반환한다. + */ + public String getSearchCondition() { + return searchCondition; + } + + /** + * @param 검색 조건을 설정한다. + */ + public void setSearchCondition(String searchCondition) { + this.searchCondition = searchCondition; + } +} diff --git a/src/main/java/kcg/faics/cmmn/bbs/PageType.java b/src/main/java/kcg/faics/cmmn/bbs/PageType.java new file mode 100644 index 0000000..9963a05 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/bbs/PageType.java @@ -0,0 +1,34 @@ +package kcg.faics.cmmn.bbs; + +/** + * 페이지 화면 구분. + * + * @author kimnomin + * + */ +public enum PageType { + /** + * 목록화면. + */ + List, + /** + * 정보조회화면. + */ + View, + /** + * 입력화면. + */ + Add, + /** + * 수정화면. + */ + Upd, + /** + * 삭제화면. + */ + Del, + /** + * 통계현황화면. + */ + Stats +} diff --git a/src/main/java/kcg/faics/cmmn/bbs/package-info.java b/src/main/java/kcg/faics/cmmn/bbs/package-info.java new file mode 100644 index 0000000..fda7f66 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/bbs/package-info.java @@ -0,0 +1,8 @@ +/** + * 게시판 관련 공용 패키지. + */ +/** + * @author kimnomin + * + */ +package kcg.faics.cmmn.bbs; \ No newline at end of file diff --git a/src/main/java/kcg/faics/cmmn/ckeditor/CkFilter.java b/src/main/java/kcg/faics/cmmn/ckeditor/CkFilter.java new file mode 100644 index 0000000..e71794e --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/ckeditor/CkFilter.java @@ -0,0 +1,104 @@ +/* + * CKEditor image upload module for Java. + * Copyright guavatak (https://github.com/guavatak/ckeditor-upload-filter-java) + * + * Licensed 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 + * + * http://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. + * + * @author guavatak (https://github.com/guavatak/ckeditor-upload-filter-java) + */ +package kcg.faics.cmmn.ckeditor; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Filter class + * @author guavatak + * @since 2014.12.04 + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ *   
+ *   수정일        수정자       수정내용
+ *  -------       --------    ---------------------------
+ *   2014.12.04	표준프레임워크	최초 적용 (패키지 변경 및 소스 정리)
+ * 
+ */ +public class CkFilter implements Filter { + private static final Log log = LogFactory.getLog(CkFilter.class); + + private static final String IMAGE_BASE_DIR_KEY = "ck.image.dir"; + private static final String IMAGE_BASE_URL_KEY = "ck.image.url"; + private static final String IMAGE_ALLOW_TYPE_KEY = "ck.image.type.allow"; + private static final String IMAGE_SAVE_CLASS_KEY = "ck.image.save.class"; + + private CkImageSaver ckImageSaver; + + public void init(FilterConfig filterConfig) throws ServletException { + String properties = filterConfig.getInitParameter("properties"); + InputStream inStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(properties); + Properties props = new Properties(); + try { + props.load(inStream); + } catch (IOException e) { + log.error(e); + } + + String imageBaseDir = (String) props.get(IMAGE_BASE_DIR_KEY); + String imageDomain = (String) props.get(IMAGE_BASE_URL_KEY); + + String[] allowFileTypeArr = null; + String allowFileType = (String) props.get(IMAGE_ALLOW_TYPE_KEY); + if (StringUtils.isNotBlank(allowFileType)) { + allowFileTypeArr = StringUtils.split(allowFileType, ","); + } + + String saveManagerClass = (String) props.get(IMAGE_SAVE_CLASS_KEY); + + ckImageSaver = new CkImageSaver(imageBaseDir, imageDomain, allowFileTypeArr, saveManagerClass); + + } + + public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { + HttpServletRequest request = (HttpServletRequest) req; + HttpServletResponse response = (HttpServletResponse) res; + + if (request.getContentType() == null || request.getContentType().indexOf("multipart") == -1) { + // contentType 이 multipart 가 아니라면 스킵한다. + chain.doFilter(request, response); + } else { + ckImageSaver.saveAndReturnUrlToClient(request, response); + + } + } + + public void destroy() { + // no-op + } +} diff --git a/src/main/java/kcg/faics/cmmn/ckeditor/CkImageSaver.java b/src/main/java/kcg/faics/cmmn/ckeditor/CkImageSaver.java new file mode 100644 index 0000000..f7ad4cd --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/ckeditor/CkImageSaver.java @@ -0,0 +1,158 @@ +/* + * CKEditor image upload module for Java. + * Copyright guavatak (https://github.com/guavatak/ckeditor-upload-filter-java) + * + * Licensed 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 + * + * http://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. + * + * @author guavatak (https://github.com/guavatak/ckeditor-upload-filter-java) + */ +package kcg.faics.cmmn.ckeditor; + +import java.io.IOException; +import java.io.PrintWriter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartRequest; + +/** + * Created by guava on 1/20/14. + * 이미지 저장 처리 클래스 + * @author guavatak + * @since 2014.12.04 + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ *
+ *   수정일        수정자       수정내용
+ *  -------       --------    ---------------------------
+ *   2014.12.04	표준프레임워크	최초 적용 (패키지 변경 및 소스 정리)
+ * 
+ */ +public class CkImageSaver { + private static final Log log = LogFactory.getLog(CkFilter.class); + + private static final String FUNC_NO = "CKEditorFuncNum"; + + private String imageBaseDir; + private String imageDomain; + private String[] allowFileTypeArr; + + private FileSaveManager fileSaveManager; + + public CkImageSaver(String imageBaseDir, String imageDomain, String[] allowFileTypeArr, String saveManagerClass) { + this.imageBaseDir = imageBaseDir; + if (imageBaseDir.endsWith("/")) { + StringUtils.removeEnd(imageBaseDir, "/"); + } + if (imageBaseDir.endsWith("\\")) { + StringUtils.removeEnd(imageBaseDir, "\\"); + } + + this.imageDomain = imageDomain; + if (imageDomain.endsWith("/")) { + StringUtils.removeEnd(imageDomain, "/"); + } + + this.allowFileTypeArr = allowFileTypeArr; + + if (StringUtils.isBlank(saveManagerClass)) { + fileSaveManager = new DefaultFileSaveManager(); + } else { + try { + Class klass = Class.forName(saveManagerClass); + fileSaveManager = (FileSaveManager) klass.newInstance(); + } catch (ClassNotFoundException e) { + log.error(e); + throw new RuntimeException(e); + } catch (InstantiationException e) { + log.error(e); + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + log.error(e); + throw new RuntimeException(e); + } + } + } + + /** + * ckEditor로부터 넘어온 파일을 저장한다. + * 원래 소스는 Request 내의 데이터를 FileItem으로 파싱하여 파일을 저장하였으나, + * 파싱하지 못하는 버그가 발생하여 MultipartRequest로 변형하였다. + * + * @param request Request 객체 + * @param response Response 객체 + * @throws IOException IO 예외처리 + */ + public void saveAndReturnUrlToClient(final HttpServletRequest request, final HttpServletResponse response) throws IOException { + // Parse the request + try { + MultipartRequest req = (MultipartRequest) request; + MultipartFile f = req.getFile("upload"); + + String errorMessage = null; + String relUrl = null; + + if (isAllowFileType(FilenameUtils.getName(f.getOriginalFilename()))) { + relUrl = fileSaveManager.saveFile(f, imageBaseDir, imageDomain); + + } else { + errorMessage = "Restricted Image Format"; + } + + StringBuffer sb = new StringBuffer(); + sb.append(""); + + response.setContentType("text/html"); + response.setHeader("Cache-Control", "no-cache"); + PrintWriter out = response.getWriter(); + + out.print(sb.toString()); + out.flush(); + out.close(); + + } catch (Exception e) { + log.error(e); + } + } + + protected boolean isAllowFileType(String fileName) { + boolean isAllow = false; + if (allowFileTypeArr != null && allowFileTypeArr.length > 0) { + for (String allowFileType : allowFileTypeArr) { + if (StringUtils.equalsIgnoreCase(allowFileType, StringUtils.substringAfterLast(fileName, "."))) { + isAllow = true; + break; + } + } + } else { + isAllow = true; + } + + return isAllow; + } +} diff --git a/src/main/java/kcg/faics/cmmn/ckeditor/DefaultFileSaveManager.java b/src/main/java/kcg/faics/cmmn/ckeditor/DefaultFileSaveManager.java new file mode 100644 index 0000000..0fe045d --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/ckeditor/DefaultFileSaveManager.java @@ -0,0 +1,94 @@ +/* + * CKEditor image upload module for Java. + * Copyright guavatak (https://github.com/guavatak/ckeditor-upload-filter-java) + * + * Licensed 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 + * + * http://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. + * + * @author guavatak (https://github.com/guavatak/ckeditor-upload-filter-java) + */ +package kcg.faics.cmmn.ckeditor; + +import java.io.File; +import java.io.IOException; + +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +/** + * Created by guava on 1/20/14. + * 이미지 저장 처리 클래스 + * @author guavatak + * @since 2014.12.04 + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ *
+ *   수정일        수정자       수정내용
+ *  -------       --------    ---------------------------
+ *   2014.12.04	표준프레임워크	최초 적용 (패키지 변경 및 소스 정리)
+ * 
+ */ +public class DefaultFileSaveManager implements FileSaveManager { + + @Override + public String saveFile(FileItem fileItem, String imageBaseDir, String imageDomain) { + String originalFileName = FilenameUtils.getName(fileItem.getName()); + String relUrl; + // filename + String subDir = File.separator + DirectoryPathManager.getDirectoryPathByDateType(DirectoryPathManager.DIR_DATE_TYPE.DATE_POLICY_YYYY_MM); + String fileName = RandomStringUtils.randomAlphanumeric(20) + "." + StringUtils.lowerCase(StringUtils.substringAfterLast(originalFileName, ".")); + + File newFile = new File(imageBaseDir + subDir + fileName); + File fileToSave = DirectoryPathManager.getUniqueFile(newFile.getAbsoluteFile()); + + try { + FileUtils.writeByteArrayToFile(fileToSave, fileItem.get()); + } catch (IOException e) { + e.printStackTrace(); + } + + String savedFileName = FilenameUtils.getName(fileToSave.getAbsolutePath()); + relUrl = StringUtils.replace(subDir, "\\", "/") + savedFileName; + + return imageDomain + relUrl; + } + + @Override + public String saveFile(final MultipartFile file, final String imageBaseDir, final String imageDomain) { + String originalFileName = FilenameUtils.getName(file.getOriginalFilename()); + String relUrl; + // filename + String subDir = File.separator + DirectoryPathManager.getDirectoryPathByDateType(DirectoryPathManager.DIR_DATE_TYPE.DATE_POLICY_YYYY_MM); + String fileName = RandomStringUtils.randomAlphanumeric(20) + "." + StringUtils.lowerCase(StringUtils.substringAfterLast(originalFileName, ".")); + + File newFile = new File(imageBaseDir + subDir + fileName); + File fileToSave = DirectoryPathManager.getUniqueFile(newFile.getAbsoluteFile()); + + try { + FileUtils.writeByteArrayToFile(fileToSave, file.getBytes()); + } catch (IOException e) { + e.printStackTrace(); + } + + String savedFileName = FilenameUtils.getName(fileToSave.getAbsolutePath()); + relUrl = StringUtils.replace(subDir, "\\", "/") + savedFileName; + + return imageDomain + relUrl; + } +} diff --git a/src/main/java/kcg/faics/cmmn/ckeditor/DirectoryPathManager.java b/src/main/java/kcg/faics/cmmn/ckeditor/DirectoryPathManager.java new file mode 100644 index 0000000..6304560 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/ckeditor/DirectoryPathManager.java @@ -0,0 +1,83 @@ +/* + * CKEditor image upload module for Java. + * Copyright guavatak (https://github.com/guavatak/ckeditor-upload-filter-java) + * + * Licensed 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 + * + * http://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. + * + * @author guavatak (https://github.com/guavatak/ckeditor-upload-filter-java) + */ +package kcg.faics.cmmn.ckeditor; + +import java.io.File; +import java.util.Calendar; + +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang3.StringUtils; + +/** + * 이미지 저장 처리 클래스 + * @author guavatak + * @since 2014.12.04 + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ *
+ *   수정일        수정자       수정내용
+ *  -------       --------    ---------------------------
+ *   2014.12.04	표준프레임워크	최초 적용 (패키지 변경 및 소스 정리)
+ * 
+ */ +public class DirectoryPathManager { + public enum DIR_DATE_TYPE { + DATE_POLICY_YYYY_MM_DD, DATE_POLICY_YYYY_MM, DATE_POLICY_YYYY + }; + + /** + * 2012/12/22/ + * @param dateType + * @return + * @throws InvalidArgumentException + */ + public static String getDirectoryPathByDateType(DIR_DATE_TYPE policy) { + + Calendar calendar = Calendar.getInstance(); + StringBuffer sb = new StringBuffer(); + sb.append(calendar.get(Calendar.YEAR)).append(File.separator); + if (policy.ordinal() <= DIR_DATE_TYPE.DATE_POLICY_YYYY_MM.ordinal()) { + sb.append(StringUtils.leftPad(String.valueOf(calendar.get(Calendar.MONTH)), 2, '0')).append(File.separator); + } + if (policy.ordinal() <= DIR_DATE_TYPE.DATE_POLICY_YYYY_MM_DD.ordinal()) { + sb.append(StringUtils.leftPad(String.valueOf(calendar.get(Calendar.DATE)), 2, '0')).append(File.separator); + } + + return sb.toString(); + } + + public static File getUniqueFile(final File file) { + if (!file.exists()) + return file; + + File tmpFile = new File(file.getAbsolutePath()); + File parentDir = tmpFile.getParentFile(); + int count = 1; + String extension = FilenameUtils.getExtension(tmpFile.getName()); + String baseName = FilenameUtils.getBaseName(tmpFile.getName()); + do { + tmpFile = new File(parentDir, baseName + "_" + count++ + "_." + extension); + } while (tmpFile.exists()); + return tmpFile; + } + +} diff --git a/src/main/java/kcg/faics/cmmn/ckeditor/FileSaveManager.java b/src/main/java/kcg/faics/cmmn/ckeditor/FileSaveManager.java new file mode 100644 index 0000000..6d54e9a --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/ckeditor/FileSaveManager.java @@ -0,0 +1,63 @@ +/* + * CKEditor image upload module for Java. + * Copyright guavatak (https://github.com/guavatak/ckeditor-upload-filter-java) + * + * Licensed 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 + * + * http://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. + * + * @author guavatak (https://github.com/guavatak/ckeditor-upload-filter-java) + */ +package kcg.faics.cmmn.ckeditor; + +import org.apache.commons.fileupload.FileItem; +import org.springframework.web.multipart.MultipartFile; + +/** + * Created by guava on 1/20/14. + * 이미지 저장 처리 클래스 + * @author guavatak + * @since 2014.12.04 + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ *   
+ *   수정일        수정자       수정내용
+ *  -------       --------    ---------------------------
+ *   2014.12.04	표준프레임워크	최초 적용 (패키지 변경 및 소스 정리)
+ * 
+ */ +public interface FileSaveManager { + /** + * + * @param fileItem FileItem 객체 + * @param imageBaseDir 기본 이미지 저장 디렉토리. 이 디렉토리 아래로 모든 파일을 넣어도 되고, 폴더를 구분하여 넣어도 된다. 이 파라미터에는 마지막 디렉토리 구분자는 포함되지 않는다. + * @param imageDomain 이미지 태그에 들어갈 기본이 되는 URL. + * "http://image.my.com" 과 같은 도메인이 들어갈 수도 있고, "/ckimage" 같은 상대 경로가 들어갈 수도 있다. + * 이 파라미터는 생략해도 된다. + * @return 이미지 파일을 액세스 할 수 있는 URL 을 반환한다. 반환된 URL 은 ckeditor 에게 전달되어 즉시 사용자 브라우져에 이미지가 나타나게 된다. + */ + String saveFile(FileItem fileItem, String imageBaseDir, String imageDomain); + + /** + * + * @param file MultipartFile 객체 + * @param imageBaseDir 기본 이미지 저장 디렉토리. 이 디렉토리 아래로 모든 파일을 넣어도 되고, 폴더를 구분하여 넣어도 된다. 이 파라미터에는 마지막 디렉토리 구분자는 포함되지 않는다. + * @param imageDomain 이미지 태그에 들어갈 기본이 되는 URL. + * "http://image.my.com" 과 같은 도메인이 들어갈 수도 있고, "/ckimage" 같은 상대 경로가 들어갈 수도 있다. + * 이 파라미터는 생략해도 된다. + * @return 이미지 파일을 액세스 할 수 있는 URL 을 반환한다. 반환된 URL 은 ckeditor 에게 전달되어 즉시 사용자 브라우져에 이미지가 나타나게 된다. + */ + String saveFile(MultipartFile file, String imageBaseDir, String imageDomain); +} + diff --git a/src/main/java/kcg/faics/cmmn/egov/EgovBasicLogger.java b/src/main/java/kcg/faics/cmmn/egov/EgovBasicLogger.java new file mode 100644 index 0000000..42f0f0f --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/egov/EgovBasicLogger.java @@ -0,0 +1,83 @@ +package kcg.faics.cmmn.egov; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Utility class to support to logging information + * @author Vincent Han + * @since 2014.09.18 + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ *   
+ *   수정일        수정자       수정내용
+ *  -------       --------    ---------------------------
+ *   2014.09.18	표준프레임워크센터	최초 생성
+ *
+ * 
+ */ +public class EgovBasicLogger { + private static final Level IGNORE_INFO_LEVEL = Level.OFF; + private static final Level DEBUG_INFO_LEVEL = Level.FINEST; + private static final Level INFO_INFO_LEVEL = Level.INFO; + + private static final Logger ignoreLogger = Logger.getLogger("ignore"); + private static final Logger debugLogger = Logger.getLogger("debug"); + private static final Logger infoLogger = Logger.getLogger("info"); + + /** + * 기록이나 처리가 불필요한 경우 사용. + * @param message + * @param exception + */ + public static void ignore(String message, Exception exception) { + if (exception == null) { + ignoreLogger.log(IGNORE_INFO_LEVEL, message); + } else { + ignoreLogger.log(IGNORE_INFO_LEVEL, message, exception); + } + } + + /** + * 기록이나 처리가 불필요한 경우 사용. + * @param message + * @param exception + */ + public static void ignore(String message) { + ignore(message, null); + } + + /** + * 디버그 정보를 기록하는 경우 사용. + * @param message + * @param exception + */ + public static void debug(String message, Exception exception) { + if (exception == null) { + debugLogger.log(DEBUG_INFO_LEVEL, message); + } else { + debugLogger.log(DEBUG_INFO_LEVEL, message, exception); + } + } + + /** + * 디버그 정보를 기록하는 경우 사용. + * @param message + * @param exception + */ + public static void debug(String message) { + debug(message, null); + } + + /** + * 일반적이 정보를 기록하는 경우 사용. + * @param message + * @param exception + */ + public static void info(String message) { + infoLogger.log(INFO_INFO_LEVEL, message); + } +} diff --git a/src/main/java/kcg/faics/cmmn/egov/EgovProperties.java b/src/main/java/kcg/faics/cmmn/egov/EgovProperties.java new file mode 100644 index 0000000..607fcf4 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/egov/EgovProperties.java @@ -0,0 +1,220 @@ +package kcg.faics.cmmn.egov; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import kcg.faics.cmmn.egov.util.EgovWebUtil; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Class Name : EgovProperties.java + * Description : properties값들을 파일로부터 읽어와 Globals클래스의 정적변수로 로드시켜주는 클래스로 + * 문자열 정보 기준으로 사용할 전역변수를 시스템 재시작으로 반영할 수 있도록 한다. + * Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.01.19 박지욱 최초 생성 + * 2011.07.20 서준식 Globals파일의 상대경로를 읽은 메서드 추가 + * 2014.10.13 이기하 Globals.properties 값이 null일 경우 오류처리 + * 2016.09.22 임새미 폴더 path값 변경 + * @author 공통 서비스 개발팀 박지욱 + * @since 2009. 01. 19 + * @version 1.0 + * @see + * + */ + +public class EgovProperties { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovProperties.class); + + //파일구분자 + final static String FILE_SEPARATOR = System.getProperty("file.separator"); + + //프로퍼티 파일의 물리적 위치 + //public static final String GLOBALS_PROPERTIES_FILE = System.getProperty("user.home") + FILE_SEPARATOR + "egovProps" +FILE_SEPARATOR + "globals.properties"; + + //public static final String RELATIVE_PATH_PREFIX = EgovProperties.class.getResource("").getPath() + FILE_SEPARATOR+ ".." + FILE_SEPARATOR + ".." + FILE_SEPARATOR; + + public static final String RELATIVE_PATH_PREFIX = EgovProperties.class.getResource("").getPath().substring(0, EgovProperties.class.getResource("").getPath().lastIndexOf("kcg")); + + public static final String GLOBALS_PROPERTIES_FILE = RELATIVE_PATH_PREFIX + "property" + FILE_SEPARATOR + "globals.properties"; + + /** + * 인자로 주어진 문자열을 Key값으로 하는 상대경로 프로퍼티 값을 절대경로로 반환한다(Globals.java 전용) + * @param keyName String + * @return String + */ + public static String getPathProperty(String keyName) { + String value = ""; + + LOGGER.debug("getPathProperty : {} = {}", GLOBALS_PROPERTIES_FILE, keyName); + + FileInputStream fis = null; + try { + Properties props = new Properties(); + + fis = new FileInputStream(EgovWebUtil.filePathBlackList(GLOBALS_PROPERTIES_FILE)); + props.load(new BufferedInputStream(fis)); + + value = props.getProperty(keyName).trim(); + value = RELATIVE_PATH_PREFIX + "property" + System.getProperty("file.separator") + value; + } catch (FileNotFoundException fne) { + LOGGER.debug("Property file not found.", fne); + throw new RuntimeException("Property file not found", fne); + } catch (IOException ioe) { + LOGGER.debug("Property file IO exception", ioe); + throw new RuntimeException("Property file IO exception", ioe); + } finally { + EgovResourceCloseHelper.close(fis); + } + + return value; + } + + /** + * 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 값을 반환한다(Globals.java 전용) + * @param keyName String + * @return String + */ + public static String getProperty(String keyName) { + String value = ""; + + LOGGER.debug("getProperty : {} = {}", GLOBALS_PROPERTIES_FILE, keyName); + + FileInputStream fis = null; + try { + Properties props = new Properties(); + + fis = new FileInputStream(EgovWebUtil.filePathBlackList(GLOBALS_PROPERTIES_FILE)); + + props.load(new BufferedInputStream(fis)); + if (props.getProperty(keyName) == null) { + return ""; + } + value = props.getProperty(keyName).trim(); + } catch (FileNotFoundException fne) { + LOGGER.debug("Property file not found.", fne); + throw new RuntimeException("Property file not found", fne); + } catch (IOException ioe) { + LOGGER.debug("Property file IO exception", ioe); + throw new RuntimeException("Property file IO exception", ioe); + } finally { + EgovResourceCloseHelper.close(fis); + } + + return value; + } + + /** + * 주어진 파일에서 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 상대 경로값을 절대 경로값으로 반환한다 + * @param fileName String + * @param key String + * @return String + */ + public static String getPathProperty(String fileName, String key) { + FileInputStream fis = null; + try { + Properties props = new Properties(); + + fis = new FileInputStream(EgovWebUtil.filePathBlackList(fileName)); + props.load(new BufferedInputStream(fis)); + fis.close(); + + String value = props.getProperty(key); + value = RELATIVE_PATH_PREFIX + "property" + System.getProperty("file.separator") + value; + + return value; + } catch (FileNotFoundException fne) { + LOGGER.debug("Property file not found.", fne); + throw new RuntimeException("Property file not found", fne); + } catch (IOException ioe) { + LOGGER.debug("Property file IO exception", ioe); + throw new RuntimeException("Property file IO exception", ioe); + } finally { + EgovResourceCloseHelper.close(fis); + } + } + + /** + * 주어진 파일에서 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 값을 반환한다 + * @param fileName String + * @param key String + * @return String + */ + public static String getProperty(String fileName, String key) { + FileInputStream fis = null; + try { + Properties props = new Properties(); + + fis = new FileInputStream(EgovWebUtil.filePathBlackList(fileName)); + props.load(new BufferedInputStream(fis)); + fis.close(); + + String value = props.getProperty(key); + + return value; + } catch (FileNotFoundException fne) { + LOGGER.debug("Property file not found.", fne); + throw new RuntimeException("Property file not found", fne); + } catch (IOException ioe) { + LOGGER.debug("Property file IO exception", ioe); + throw new RuntimeException("Property file IO exception", ioe); + } finally { + EgovResourceCloseHelper.close(fis); + } + } + + /** + * 주어진 프로파일의 내용을 파싱하여 (key-value) 형태의 구조체 배열을 반환한다. + * @param property String + * @return ArrayList + */ + public static ArrayList> loadPropertyFile(String property) { + + // key - value 형태로 된 배열 결과 + ArrayList> keyList = new ArrayList>(); + + String src = property.replace('\\', File.separatorChar).replace('/', File.separatorChar); + FileInputStream fis = null; + try { + + File srcFile = new File(EgovWebUtil.filePathBlackList(src)); + if (srcFile.exists()) { + + Properties props = new Properties(); + fis = new FileInputStream(src); + props.load(new BufferedInputStream(fis)); + fis.close(); + + Enumeration plist = props.propertyNames(); + if (plist != null) { + while (plist.hasMoreElements()) { + Map map = new HashMap(); + String key = (String) plist.nextElement(); + map.put(key, props.getProperty(key)); + keyList.add(map); + } + } + } + } catch (IOException ex) { + LOGGER.debug("IO Exception", ex); + throw new RuntimeException(ex); + } finally { + EgovResourceCloseHelper.close(fis); + } + + return keyList; + } +} diff --git a/src/main/java/kcg/faics/cmmn/egov/EgovResourceCloseHelper.java b/src/main/java/kcg/faics/cmmn/egov/EgovResourceCloseHelper.java new file mode 100644 index 0000000..27268d5 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/egov/EgovResourceCloseHelper.java @@ -0,0 +1,126 @@ +package kcg.faics.cmmn.egov; + +import java.io.Closeable; +import java.net.ServerSocket; +import java.net.Socket; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; +import java.sql.Wrapper; + +/** + * Utility class to support to close resources + * @author Vincent Han + * @since 2014.09.18 + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ *   
+ *   수정일        수정자       수정내용
+ *  -------       --------    ---------------------------
+ *   2014.09.18	표준프레임워크센터	최초 생성
+ *
+ * 
+ */ +public class EgovResourceCloseHelper { + /** + * Resource close 처리. + * @param resources + */ + public static void close(Closeable ... resources) { + for (Closeable resource : resources) { + if (resource != null) { + try { + resource.close(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!"); + } + } + } + } + + /** + * JDBC 관련 resource 객체 close 처리 + * @param objects + */ + public static void closeDBObjects(Wrapper ... objects) { + for (Object object : objects) { + if (object != null) { + if (object instanceof ResultSet) { + try { + ((ResultSet)object).close(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!"); + } + } else if (object instanceof Statement) { + try { + ((Statement)object).close(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!"); + } + } else if (object instanceof Connection) { + try { + ((Connection)object).close(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!"); + } + } else { + throw new IllegalArgumentException("Wrapper type is not found : " + object.toString()); + } + } + } + } + + /** + * Socket 관련 resource 객체 close 처리 + * @param objects + */ + public static void closeSocketObjects(Socket socket, ServerSocket server) { + if (socket != null) { + try { + socket.shutdownOutput(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to shutdown ouput is ignored!!"); + } + + try { + socket.close(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to close resource is ignored!!"); + } + } + + if (server != null) { + try { + server.close(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to close resource is ignored!!"); + } + } + } + + /** + * Socket 관련 resource 객체 close 처리 + * + * @param sockets + */ + public static void closeSockets(Socket ... sockets) { + for (Socket socket : sockets) { + if (socket != null) { + try { + socket.shutdownOutput(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to shutdown ouput is ignored!!"); + } + + try { + socket.close(); + } catch (Exception ignore) { + EgovBasicLogger.ignore("Occurred Exception to close resource is ignored!!"); + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/kcg/faics/cmmn/egov/file/EgovFileMngUtil.java b/src/main/java/kcg/faics/cmmn/egov/file/EgovFileMngUtil.java new file mode 100644 index 0000000..7fd66ff --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/egov/file/EgovFileMngUtil.java @@ -0,0 +1,727 @@ +package kcg.faics.cmmn.egov.file; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import kcg.faics.cmmn.egov.util.EgovStringUtil; +import kcg.faics.cmmn.egov.util.EgovWebUtil; +import kcg.faics.cmmn.egov.vo.FileVO; + +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.multipart.MultipartFile; + +import egovframework.rte.fdl.property.EgovPropertyService; + +/** + * @Class Name : EgovFileMngUtil.java + * @Description : 메시지 처리 관련 유틸리티 + * @Modification Information + * + * 수정일 수정자 수정내용 ------- -------- --------------------------- + * 2009.02.13 이삼섭 최초 생성 2011.08.31 JJY 경량환경 템플릿 커스터마이징버전 생성 + * 2016.09.22 임새미 라인 83~85, 126~136 + * 2016.10.21 하영지 동적으로 폴더를 생성하는 경우가 있어서 폴더명 파라미터 추가parseFileInf Override, deleteFile Override + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 02. 13 + * @version 1.0 + * @see + * + */ +@Component("EgovFileMngUtil") +public class EgovFileMngUtil { + + public static final int BUFF_SIZE = 2048; + + @Resource(name = "propertiesService") + protected EgovPropertyService propertyService; + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovFileMngUtil.class); + + /** + * 파일이 존재하면 규칙에 의해 파일명을 수정한다. + * + *
+	 * 규칙 : {파일명}_{숫자}.{확장자}
+	 * 
+ * + * @param filePath 파일경로 + * @param fileNameExt (확장자를 포함한) 파일명 + * @return 파일명 + */ + public String makeNewFileName(final String filePath, final String fileNameExt) { + int idx = 0; + String fileExt = ""; + String fileName = ""; + String newFileName = ""; + String filePathName = filePath + fileNameExt; + String newFileNameExt = fileNameExt; + + if (!StringUtils.isBlank(filePathName)) { + fileExt = FilenameUtils.getExtension(fileNameExt); + fileName = FilenameUtils.getName(fileNameExt); + fileName = FilenameUtils.removeExtension(fileName); + newFileName = fileName; + while (true) { + File f = new File(filePathName); + if (f.isFile()) { + newFileName = String.format("%s_%d", fileName, ++idx); + filePathName = String.format("%s%s.%s", filePath, newFileName, fileExt); + } else { + break; + } + } + + newFileNameExt = newFileName; + if (!StringUtils.isBlank(fileExt)) { + newFileNameExt += "." + fileExt; + } + + } + + return newFileNameExt; + } + + /** + * 파일을 저장하고 저장된 파일정보 목록을 취득한다. + * + * @param files + * 파일객체 + * @param keyStr + * 구분 값 + * @param fileKeyParam + * 파일순번 + * @param atchFileId + * 파일ID + * @param storePath + * 저장경로 + * @return 저장된 파일정보 List + * @throws Exception + * 기본 예외 처리 + */ + public List parseFileInf(final Map files, + final String keyStr, final int fileKeyParam, + final String atchFileId, final String storePath) throws Exception { + int fileKey = fileKeyParam; + + String storePathString = ""; + String atchFileIdString = ""; + + if (StringUtils.isBlank(storePath)) { + storePathString = propertyService.getString("Globals.fileStorePath"); + } else { + storePathString = propertyService.getString(storePath); + } + + if (StringUtils.isBlank(atchFileId)) { +// atchFileIdString = idgenService.getNextStringId(); + atchFileIdString = atchFileId; + } else { + atchFileIdString = atchFileId; + } + + File saveFolder = new File(storePathString); + + if (!saveFolder.exists() || saveFolder.isFile()) { + saveFolder.mkdirs(); + } + + List result = new ArrayList(); + if (files != null) { + Iterator> itr = files.entrySet().iterator(); + MultipartFile file; + String filePath = ""; + FileVO fvo; + while (itr.hasNext()) { + Entry entry = itr.next(); + + file = entry.getValue(); + String orginFileName = file.getOriginalFilename(); + + // -------------------------------------- + // 원 파일명이 없는 경우 처리 + // (첨부가 되지 않은 input file type) + // -------------------------------------- + if ("".equals(orginFileName)) { + continue; + } + // //------------------------------------ + + int index = orginFileName.lastIndexOf("."); + // String fileName = orginFileName.substring(0, index); + String fileExt = orginFileName.substring(index + 1); + String newName = orginFileName; + // KeyStr이 없으면 원래 파일명을 사용한다. by KNM + if (!StringUtils.isBlank(keyStr)) { + newName = keyStr + EgovStringUtil.getTimeStamp() + fileKey; + } + + long fileSize = file.getSize(); + // 같은 경로에 파일이 존재하면 파일 명을 수정한다. + String tempFileName = makeNewFileName(storePathString, newName); + if (!newName.equalsIgnoreCase(tempFileName)) { + newName = tempFileName; + } + + if (StringUtils.isNotBlank(orginFileName)) { + filePath = storePathString + File.separator + newName; + file.transferTo(new File(filePath)); + } + + fvo = new FileVO(); + fvo.setFileExtsn(fileExt); + fvo.setFileStreCours(storePathString); + fvo.setFileMg(Long.toString(fileSize)); + fvo.setOrignlFileNm(orginFileName); + fvo.setStreFileNm(newName); + fvo.setAtchFileId(atchFileIdString); + fvo.setFileSn(entry.getKey()); + // fvo.setFileSn(String.valueOf(fileKey)); + + writeFile(file, newName, storePathString); + result.add(fvo); + + fileKey++; + } + } + + return result; + } + + /** + * 첨부파일을 서버에 저장한다. + * + * @param file + * @param newName + * @param stordFilePath + * @throws Exception + */ + protected void writeUploadedFile(MultipartFile file, String newName, String stordFilePath) throws Exception { + InputStream stream = null; + OutputStream bos = null; + String stordFilePathReal = (stordFilePath == null ? "" : stordFilePath).replaceAll("..", ""); + try { + stream = file.getInputStream(); + File cFile = new File(stordFilePathReal); + + if (!cFile.isDirectory()) { + boolean flag = cFile.mkdir(); + if (!flag) { + throw new IOException("Directory creation Failed "); + } + } + + bos = new FileOutputStream(stordFilePathReal + File.separator + newName); + + int bytesRead = 0; + byte[] buffer = new byte[BUFF_SIZE]; + + while ((bytesRead = stream.read(buffer, 0, BUFF_SIZE)) != -1) { + bos.write(buffer, 0, bytesRead); + } + } catch (FileNotFoundException fnfe) { + LOGGER.debug("fnfe: {}", fnfe); + } catch (IOException ioe) { + LOGGER.debug("ioe: {}", ioe); + } catch (Exception e) { + LOGGER.debug("e: {}", e); + } finally { + if (bos != null) { + try { + bos.close(); + } catch (Exception ignore) { + LOGGER.debug("IGNORED: {}", ignore.getMessage()); + } + } + if (stream != null) { + try { + stream.close(); + } catch (Exception ignore) { + LOGGER.debug("IGNORED: {}", ignore.getMessage()); + } + } + } + } + + /** + * 서버의 파일을 다운로드한다. + * + * @param request + * @param response + * @throws Exception + */ + public static void downFile(HttpServletRequest request, HttpServletResponse response) throws Exception { + + String downFileName = EgovStringUtil.isNullToString(request.getAttribute("downFile")).replaceAll("..", ""); + String orgFileName = EgovStringUtil.isNullToString(request.getAttribute("orgFileName")).replaceAll("..", ""); + + /* + * if ((String)request.getAttribute("downFile") == null) { downFileName + * = ""; } else { downFileName = + * EgovStringUtil.isNullToString(request.getAttribute("downFile")); } + */ + + /* + * if ((String)request.getAttribute("orgFileName") == null) { + * orgFileName = ""; } else { orgFileName = + * (String)request.getAttribute("orginFile"); } + */ + + File file = new File(downFileName); + + if (!file.exists()) { + throw new FileNotFoundException(downFileName); + } + + if (!file.isFile()) { + throw new FileNotFoundException(downFileName); + } + + byte[] b = new byte[BUFF_SIZE]; // buffer size 2K. + String fName = (new String(orgFileName.getBytes(), "UTF-8")).replaceAll("\r\n", ""); + response.setContentType("application/x-msdownload"); + response.setHeader("Content-Disposition:", "attachment; filename=" + fName); + response.setHeader("Content-Transfer-Encoding", "binary"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Expires", "0"); + + BufferedInputStream fin = null; + BufferedOutputStream outs = null; + + try { + fin = new BufferedInputStream(new FileInputStream(file)); + outs = new BufferedOutputStream(response.getOutputStream()); + int read = 0; + + while ((read = fin.read(b)) != -1) { + outs.write(b, 0, read); + } + } finally { + if (outs != null) { + try { + outs.close(); + } catch (Exception ignore) { + LOGGER.debug("IGNORED: {}", ignore.getMessage()); + } + } + if (fin != null) { + try { + fin.close(); + } catch (Exception ignore) { + LOGGER.debug("IGNORED: {}", ignore.getMessage()); + } + } + } + } + + /** + * 첨부로 등록된 파일을 서버에 업로드한다. + * + * @param file + * @return + * @throws Exception + * + * public static HashMap + * uploadFile(MultipartFile file) throws Exception { + * + * HashMap map = new HashMap(); + * //Write File 이후 Move File???? String newName = ""; String + * stordFilePath = + * EgovProperties.getProperty("Globals.fileStorePath"); String + * orginFileName = file.getOriginalFilename(); + * + * int index = orginFileName.lastIndexOf("."); //String fileName + * = orginFileName.substring(0, _index); String fileExt = + * orginFileName.substring(index + 1); long size = + * file.getSize(); + * + * //newName 은 Naming Convention에 의해서 생성 newName = + * EgovStringUtil.getTimeStamp() + "." + fileExt; + * writeFile(file, newName, stordFilePath); //storedFilePath는 지정 + * map.put(Globals.ORIGIN_FILE_NM, orginFileName); + * map.put(Globals.UPLOAD_FILE_NM, newName); + * map.put(Globals.FILE_EXT, fileExt); + * map.put(Globals.FILE_PATH, stordFilePath); + * map.put(Globals.FILE_SIZE, String.valueOf(size)); + * + * return map; } + */ + /** + * 파일을 실제 물리적인 경로에 생성한다. + * + * @param file + * @param newName + * @param stordFilePath + * @throws Exception + */ + protected static void writeFile(MultipartFile file, String newName, String stordFilePath) throws Exception { + InputStream stream = null; + OutputStream bos = null; + newName = EgovWebUtil.filePathBlackList(newName); + stordFilePath = EgovWebUtil.filePathBlackList(stordFilePath); + try { + stream = file.getInputStream(); + File cFile = new File(stordFilePath); + + if (!cFile.isDirectory()) { + cFile.mkdir(); + } + + bos = new FileOutputStream(stordFilePath + File.separator + newName); + + int bytesRead = 0; + byte[] buffer = new byte[BUFF_SIZE]; + + while ((bytesRead = stream.read(buffer, 0, BUFF_SIZE)) != -1) { + bos.write(buffer, 0, bytesRead); + } + } catch (FileNotFoundException fnfe) { + LOGGER.debug("fnfe: {}", fnfe); + } catch (IOException ioe) { + LOGGER.debug("ioe: {}", ioe); + } catch (Exception e) { + LOGGER.debug("e: {}", e); + } finally { + if (bos != null) { + try { + bos.close(); + } catch (Exception ignore) { + LOGGER.debug("IGNORED: {}", ignore.getMessage()); + } + } + if (stream != null) { + try { + stream.close(); + } catch (Exception ignore) { + LOGGER.debug("IGNORED: {}", ignore.getMessage()); + } + } + } + } + + /** + * 서버 파일에 대하여 다운로드를 처리한다. + * + * @param response + * @param streFileNm + * : 파일저장 경로가 포함된 형태 + * @param orignFileNm + * @throws Exception + */ + public void downFile(HttpServletResponse response, String streFileNm, String orignFileNm) throws Exception { + // String downFileName = + // EgovStringUtil.isNullToString(request.getAttribute("downFile")).replaceAll("..",""); + // String orgFileName = + // EgovStringUtil.isNullToString(request.getAttribute("orgFileName")).replaceAll("..",""); + String downFileName = EgovStringUtil.isNullToString(streFileNm).replaceAll("..", ""); + String orgFileName = EgovStringUtil.isNullToString(orignFileNm).replaceAll("..", ""); + + File file = new File(downFileName); + // log.debug(this.getClass().getName()+" downFile downFileName "+downFileName); + // log.debug(this.getClass().getName()+" downFile orgFileName "+orgFileName); + + if (!file.exists()) { + throw new FileNotFoundException(downFileName); + } + + if (!file.isFile()) { + throw new FileNotFoundException(downFileName); + } + + // byte[] b = new byte[BUFF_SIZE]; //buffer size 2K. + int fSize = (int) file.length(); + if (fSize > 0) { + BufferedInputStream in = null; + + try { + in = new BufferedInputStream(new FileInputStream(file)); + + String mimetype = "text/html"; // "application/x-msdownload" + + response.setBufferSize(fSize); + response.setContentType(mimetype); + response.setHeader("Content-Disposition:", "attachment; filename=" + orgFileName); + response.setContentLength(fSize); + // response.setHeader("Content-Transfer-Encoding","binary"); + // response.setHeader("Pragma","no-cache"); + // response.setHeader("Expires","0"); + FileCopyUtils.copy(in, response.getOutputStream()); + } finally { + if (in != null) { + try { + in.close(); + } catch (Exception ignore) { + LOGGER.debug("IGNORED: {}", ignore.getMessage()); + } + } + } + response.getOutputStream().flush(); + response.getOutputStream().close(); + } + + /* + * String uploadPath = propertiesService.getString("fileDir"); + * + * File uFile = new File(uploadPath, requestedFile); int fSize = (int) + * uFile.length(); + * + * if (fSize > 0) { BufferedInputStream in = new BufferedInputStream(new + * FileInputStream(uFile)); + * + * String mimetype = "text/html"; + * + * response.setBufferSize(fSize); response.setContentType(mimetype); + * response.setHeader("Content-Disposition", "attachment; filename=\"" + + * requestedFile + "\""); response.setContentLength(fSize); + * + * FileCopyUtils.copy(in, response.getOutputStream()); in.close(); + * response.getOutputStream().flush(); + * response.getOutputStream().close(); } else { + * response.setContentType("text/html"); PrintWriter printwriter = + * response.getWriter(); printwriter.println(""); + * printwriter.println("


Could not get file name:
" + + * requestedFile + "

"); printwriter.println( + * "


Back

" + * ); printwriter.println("


© webAccess"); + * printwriter.println(""); printwriter.flush(); + * printwriter.close(); } // + */ + + /* + * response.setContentType("application/x-msdownload"); + * response.setHeader("Content-Disposition:", "attachment; filename=" + + * new String(orgFileName.getBytes(),"UTF-8" )); + * response.setHeader("Content-Transfer-Encoding","binary"); + * response.setHeader("Pragma","no-cache"); + * response.setHeader("Expires","0"); + * + * BufferedInputStream fin = new BufferedInputStream(new + * FileInputStream(file)); BufferedOutputStream outs = new + * BufferedOutputStream(response.getOutputStream()); int read = 0; + * + * while ((read = fin.read(b)) != -1) { outs.write(b,0,read); } + * log.debug + * (this.getClass().getName()+" BufferedOutputStream Write Complete!!! " + * ); + * + * outs.close(); fin.close(); // + */ + } + + /** + * 곹오컴포넌트 EgovFileTool 일부 발췌&변경 + * + *
+	 * Comment : 파일을 삭제한다.
+	 * 
+ * + * @param savedFile 삭제할 파일명 + * @param storePath 파일위치 + * @return 성공하면 삭제된 파일의 절대경로, 아니면블랭크 + */ + public String deleteFile(final String savedFile, final String storePath) { + if (StringUtils.isBlank(savedFile)) { + return ""; + } + + String storePathString = ""; + if (StringUtils.isBlank(storePath)) { + storePathString = propertyService.getString("Globals.fileStorePath"); + } else { + storePathString = propertyService.getString(storePath); + } + String fileDeletePath = storePathString + File.separator + savedFile; + // 인자값 유효하지 않은 경우 블랭크 리턴 + if (fileDeletePath == null || fileDeletePath.equals("")) { + return ""; + } + String result = ""; + File file = new File(EgovWebUtil.filePathBlackList(fileDeletePath)); + if (file.isFile()) { + result = deletePath(file); + } else { + result = ""; + } + + return result; + } + + private String deletePath(File file) { + String result = ""; + if (file.exists()) { + result = file.getAbsolutePath(); + if (!file.delete()) { + result = ""; + } + } + return result; + } + + /** + * 파일을 저장하고 저장된 파일정보 목록을 취득한다. + * + * @param files + * 파일객체 + * @param keyStr + * 구분 값 + * @param fileKeyParam + * 파일순번 + * @param atchFileId + * 파일ID + * @param storePath + * 저장경로 + * @param folderNm + * 폴더명 + * @return 저장된 파일정보 List + * @throws Exception + * 기본 예외 처리 + */ + public List parseFileInf(final Map files, + final String keyStr, final int fileKeyParam, + final String atchFileId, final String storePath, final String folderNm) throws Exception { + int fileKey = fileKeyParam; + + String storePathString = ""; + String atchFileIdString = ""; + + if (StringUtils.isBlank(storePath)) { + storePathString = propertyService.getString(storePath, "Globals.fileStorePath"); + } else { + storePathString = propertyService.getString(storePath); + } + storePathString = storePathString + folderNm + File.separator; + + if (StringUtils.isBlank(atchFileId)) { + atchFileIdString = atchFileId; + } else { + atchFileIdString = atchFileId; + } + + File saveFolder = new File(storePathString); + + if (!saveFolder.exists() || saveFolder.isFile()) { + saveFolder.mkdirs(); + } + + List result = new ArrayList(); + if (files != null) { + Iterator> itr = files.entrySet().iterator(); + MultipartFile file; + String filePath = ""; + FileVO fvo; + while (itr.hasNext()) { + Entry entry = itr.next(); + + file = entry.getValue(); + String orginFileName = file.getOriginalFilename(); + + // -------------------------------------- + // 원 파일명이 없는 경우 처리 + // (첨부가 되지 않은 input file type) + // -------------------------------------- + if ("".equals(orginFileName)) { + continue; + } + // //------------------------------------ + + int index = orginFileName.lastIndexOf("."); + String fileExt = orginFileName.substring(index + 1); + String newName = orginFileName; + // KeyStr이 없으면 원래 파일명을 사용한다. by KNM + if (!StringUtils.isBlank(keyStr)) { + newName = keyStr + EgovStringUtil.getTimeStamp() + fileKey; + } + + long fileSize = file.getSize(); + // 같은 경로에 파일이 존재하면 파일 명을 수정한다. + String tempFileName = makeNewFileName(storePathString, newName); + if (!newName.equalsIgnoreCase(tempFileName)) { + newName = tempFileName; + } + + if (StringUtils.isNotBlank(orginFileName)) { + filePath = storePathString + File.separator + newName; + file.transferTo(new File(filePath)); + } + + fvo = new FileVO(); + fvo.setFileExtsn(fileExt); + fvo.setFileStreCours(storePathString); + fvo.setFileMg(Long.toString(fileSize)); + fvo.setOrignlFileNm(orginFileName); + fvo.setStreFileNm(newName); + fvo.setAtchFileId(atchFileIdString); + fvo.setFileSn(entry.getKey()); + + writeFile(file, newName, storePathString); + result.add(fvo); + + fileKey++; + } + } + + return result; + } + + /** + * 공통컴포넌트 EgovFileTool 일부 발췌&변경 + * + *
+	 * Comment : 파일을 삭제한다.
+	 * 
+ * + * @param savedFile 삭제할 파일명 + * @param storePath 루트 디렉토리 + * @param folderNm 폴더명 + * @return 성공하면 삭제된 파일의 절대경로, 아니면블랭크 + */ + public String deleteFile(final String savedFile, final String storePath, final String folderNm) { + if (StringUtils.isBlank(savedFile)) { + return ""; + } + + String storePathString = ""; + if (StringUtils.isBlank(storePath)) { + storePathString = propertyService.getString("Globals.fileStorePath"); + } else { + storePathString = propertyService.getString(storePath); + } + + String fileDeletePath = storePathString + File.separator + folderNm + File.separator + savedFile; + // 인자값 유효하지 않은 경우 블랭크 리턴 + if (fileDeletePath == null || fileDeletePath.equals("")) { + return ""; + } + String result = ""; + File file = new File(EgovWebUtil.filePathBlackList(fileDeletePath)); + if (file.isFile()) { + result = deletePath(file); + } else { + result = ""; + } + + return result; + } + +} diff --git a/src/main/java/kcg/faics/cmmn/egov/file/EgovFileUploadUtil.java b/src/main/java/kcg/faics/cmmn/egov/file/EgovFileUploadUtil.java new file mode 100644 index 0000000..ef798f5 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/egov/file/EgovFileUploadUtil.java @@ -0,0 +1,86 @@ +package kcg.faics.cmmn.egov.file; + +import java.io.File; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +import kcg.faics.cmmn.egov.file.EgovFormBasedFileUtil; +import kcg.faics.cmmn.egov.file.EgovFormBasedFileVo; +import kcg.faics.cmmn.egov.util.EgovWebUtil; + +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +/** + * @Class Name : EgovFileUploadUtil.java + * @Description : Spring 기반 File Upload 유틸리티 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.08.26 한성곤 최초 생성 + * + * @author 공통컴포넌트 개발팀 한성곤 + * @since 2009.08.26 + * @version 1.0 + * @see + */ +public class EgovFileUploadUtil extends EgovFormBasedFileUtil { + /** + * 파일을 Upload 처리한다. + * + * @param request + * @param where + * @param maxFileSize + * @return + * @throws Exception + */ + public static List uploadFiles(HttpServletRequest request, String where, long maxFileSize) throws Exception { + List list = new ArrayList(); + + MultipartHttpServletRequest mptRequest = (MultipartHttpServletRequest) request; + Iterator fileIter = mptRequest.getFileNames(); + + while (fileIter.hasNext()) { + MultipartFile mFile = mptRequest.getFile((String) fileIter.next()); + + EgovFormBasedFileVo vo = new EgovFormBasedFileVo(); + + String tmp = mFile.getOriginalFilename(); + + if (tmp.lastIndexOf("\\") >= 0) { + tmp = tmp.substring(tmp.lastIndexOf("\\") + 1); + } + + vo.setFileName(tmp); + vo.setContentType(mFile.getContentType()); + vo.setServerSubPath(getTodayString()); + vo.setPhysicalName(getPhysicalFileName()); + vo.setSize(mFile.getSize()); + + if (tmp.lastIndexOf(".") >= 0) { + vo.setPhysicalName(vo.getPhysicalName()); // 2012.11 KISA 보안조치 + } + + if (mFile.getSize() > 0) { + InputStream is = null; + + try { + is = mFile.getInputStream(); + saveFile(is, new File(EgovWebUtil.filePathBlackList(where + SEPERATOR + vo.getServerSubPath() + SEPERATOR + vo.getPhysicalName()))); + } finally { + if (is != null) { + is.close(); + } + } + list.add(vo); + } + } + + return list; + } +} diff --git a/src/main/java/kcg/faics/cmmn/egov/file/EgovFormBasedFileUtil.java b/src/main/java/kcg/faics/cmmn/egov/file/EgovFormBasedFileUtil.java new file mode 100644 index 0000000..7415d4c --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/egov/file/EgovFormBasedFileUtil.java @@ -0,0 +1,283 @@ +package kcg.faics.cmmn.egov.file; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import kcg.faics.cmmn.egov.EgovResourceCloseHelper; +import kcg.faics.cmmn.egov.util.EgovWebUtil; + +import org.apache.commons.fileupload.FileItemIterator; +import org.apache.commons.fileupload.FileItemStream; +import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.fileupload.util.Streams; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @Class Name : EgovFormBasedFileUtil.java + * @Description : Form-based File Upload 유틸리티 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.08.26 한성곤 최초 생성 + * + * @author 공통컴포넌트 개발팀 한성곤 + * @since 2009.08.26 + * @version 1.0 + * @see + */ +public class EgovFormBasedFileUtil { + /** Buffer size */ + public static final int BUFFER_SIZE = 8192; + + public static final String SEPERATOR = File.separator; + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovFormBasedFileUtil.class); + + /** + * 오늘 날짜 문자열 취득. + * ex) 20090101 + * @return + */ + public static String getTodayString() { + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd", Locale.getDefault()); + + return format.format(new Date()); + } + + /** + * 물리적 파일명 생성. + * @return + */ + public static String getPhysicalFileName() { + return EgovFormBasedUUID.randomUUID().toString().replaceAll("-", "").toUpperCase(); + } + + /** + * 파일명 변환. + * @param filename String + * @return + * @throws Exception + */ + protected static String convert(String filename) throws Exception { + //return java.net.URLEncoder.encode(filename, "utf-8"); + return filename; + } + + /** + * Stream으로부터 파일을 저장함. + * @param is InputStream + * @param file File + * @throws IOException + */ + public static long saveFile(InputStream is, File file) throws IOException { + // 디렉토리 생성 + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + + OutputStream os = null; + long size = 0L; + + try { + os = new FileOutputStream(file); + + int bytesRead = 0; + byte[] buffer = new byte[BUFFER_SIZE]; + + while ((bytesRead = is.read(buffer, 0, BUFFER_SIZE)) != -1) { + size += bytesRead; + os.write(buffer, 0, bytesRead); + } + } finally { + EgovResourceCloseHelper.close(os); + } + + return size; + } + + /** + * 파일을 Upload 처리한다. + * + * @param request + * @param where + * @param maxFileSize + * @return + * @throws Exception + */ + public static List uploadFiles(HttpServletRequest request, String where, long maxFileSize) throws Exception { + List list = new ArrayList(); + + // Check that we have a file upload request + boolean isMultipart = ServletFileUpload.isMultipartContent(request); + + if (isMultipart) { + // Create a new file upload handler + ServletFileUpload upload = new ServletFileUpload(); + upload.setFileSizeMax(maxFileSize); // SizeLimitExceededException + + // Parse the request + FileItemIterator iter = upload.getItemIterator(request); + while (iter.hasNext()) { + FileItemStream item = iter.next(); + String name = item.getFieldName(); + InputStream stream = item.openStream(); + if (item.isFormField()) { + LOGGER.info("Form field '{}' with value '{}' detected.", name, Streams.asString(stream)); + } else { + LOGGER.info("File field '{}' with file name '{}' detected.", name, item.getName()); + + if ("".equals(item.getName())) { + continue; + } + + // Process the input stream + EgovFormBasedFileVo vo = new EgovFormBasedFileVo(); + + String tmp = item.getName(); + + if (tmp.lastIndexOf("\\") >= 0) { + tmp = tmp.substring(tmp.lastIndexOf("\\") + 1); + } + + vo.setFileName(tmp); + vo.setContentType(item.getContentType()); + vo.setServerSubPath(getTodayString()); + vo.setPhysicalName(getPhysicalFileName()); + + if (tmp.lastIndexOf(".") >= 0) { + vo.setPhysicalName(vo.getPhysicalName() + tmp.substring(tmp.lastIndexOf("."))); + } + + long size = saveFile(stream, new File(EgovWebUtil.filePathBlackList(where) + SEPERATOR + vo.getServerSubPath() + SEPERATOR + vo.getPhysicalName())); + + vo.setSize(size); + + list.add(vo); + } + } + } else { + throw new IOException("form's 'enctype' attribute have to be 'multipart/form-data'"); + } + + return list; + } + + /** + * 파일을 Download 처리한다. + * + * @param response + * @param where + * @param serverSubPath + * @param physicalName + * @param original + * @throws Exception + */ + public static void downloadFile(HttpServletResponse response, String where, String serverSubPath, String physicalName, String original) throws Exception { + String downFileName = where + SEPERATOR + serverSubPath + SEPERATOR + physicalName; + + File file = new File(EgovWebUtil.filePathBlackList(downFileName)); + + if (!file.exists()) { + throw new FileNotFoundException(downFileName); + } + + if (!file.isFile()) { + throw new FileNotFoundException(downFileName); + } + + byte[] b = new byte[BUFFER_SIZE]; + + original = original.replaceAll("\r", "").replaceAll("\n", ""); + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment; filename=\"" + convert(original) + "\";"); + response.setHeader("Content-Transfer-Encoding", "binary"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Expires", "0"); + + BufferedInputStream fin = null; + BufferedOutputStream outs = null; + + try { + fin = new BufferedInputStream(new FileInputStream(file)); + outs = new BufferedOutputStream(response.getOutputStream()); + + int read = 0; + + while ((read = fin.read(b)) != -1) { + outs.write(b, 0, read); + } + } finally { + EgovResourceCloseHelper.close(outs, fin); + } + } + + /** + * 이미지에 대한 미리보기 기능을 제공한다. + * + * mimeType의 경우는 JSP 상에서 다음과 같이 얻을 수 있다. + * getServletConfig().getServletContext().getMimeType(name); + * + * @param response + * @param where + * @param serverSubPath + * @param physicalName + * @param mimeType + * @throws Exception + */ + public static void viewFile(HttpServletResponse response, String where, String serverSubPath, String physicalName, String mimeTypeParam) throws Exception { + String mimeType = mimeTypeParam; + String downFileName = where + SEPERATOR + serverSubPath + SEPERATOR + physicalName; + + File file = new File(EgovWebUtil.filePathBlackList(downFileName)); + + if (!file.exists()) { + throw new FileNotFoundException(downFileName); + } + + if (!file.isFile()) { + throw new FileNotFoundException(downFileName); + } + + byte[] b = new byte[BUFFER_SIZE]; + + if (mimeType == null) { + mimeType = "application/octet-stream;"; + } + + response.setContentType(EgovWebUtil.removeCRLF(mimeType)); + response.setHeader("Content-Disposition", "filename=image;"); + + BufferedInputStream fin = null; + BufferedOutputStream outs = null; + + try { + fin = new BufferedInputStream(new FileInputStream(file)); + outs = new BufferedOutputStream(response.getOutputStream()); + + int read = 0; + + while ((read = fin.read(b)) != -1) { + outs.write(b, 0, read); + } + } finally { + EgovResourceCloseHelper.close(outs, fin); + } + } +} diff --git a/src/main/java/kcg/faics/cmmn/egov/file/EgovFormBasedFileVo.java b/src/main/java/kcg/faics/cmmn/egov/file/EgovFormBasedFileVo.java new file mode 100644 index 0000000..fe03ce5 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/egov/file/EgovFormBasedFileVo.java @@ -0,0 +1,104 @@ +package kcg.faics.cmmn.egov.file; + +import java.io.Serializable; + +/** + * @Class Name : EgovFormBasedFileVo.java + * @Description : Form-based File Upload VO + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.08.26 한성곤 최초 생성 + * + * @author 공통컴포넌트 개발팀 한성곤 + * @since 2009.08.26 + * @version 1.0 + * @see + * + * Copyright (C) 2008 by MOPAS All right reserved. + */ +@SuppressWarnings("serial") +public class EgovFormBasedFileVo implements Serializable { + /** 파일명 */ + private String fileName = ""; + /** ContextType */ + private String contentType = ""; + /** 하위 디렉토리 지정 */ + private String serverSubPath = ""; + /** 물리적 파일명 */ + private String physicalName = ""; + /** 파일 사이즈 */ + private long size = 0L; + + /** + * fileName attribute를 리턴한다. + * @return the fileName + */ + public String getFileName() { + return fileName; + } + /** + * fileName attribute 값을 설정한다. + * @param fileName the fileName to set + */ + public void setFileName(String fileName) { + this.fileName = fileName; + } + /** + * contentType attribute를 리턴한다. + * @return the contentType + */ + public String getContentType() { + return contentType; + } + /** + * contentType attribute 값을 설정한다. + * @param contentType the contentType to set + */ + public void setContentType(String contentType) { + this.contentType = contentType; + } + /** + * serverSubPath attribute를 리턴한다. + * @return the serverSubPath + */ + public String getServerSubPath() { + return serverSubPath; + } + /** + * serverSubPath attribute 값을 설정한다. + * @param serverSubPath the serverSubPath to set + */ + public void setServerSubPath(String serverSubPath) { + this.serverSubPath = serverSubPath; + } + /** + * physicalName attribute를 리턴한다. + * @return the physicalName + */ + public String getPhysicalName() { + return physicalName; + } + /** + * physicalName attribute 값을 설정한다. + * @param physicalName the physicalName to set + */ + public void setPhysicalName(String physicalName) { + this.physicalName = physicalName; + } + /** + * size attribute를 리턴한다. + * @return the size + */ + public long getSize() { + return size; + } + /** + * size attribute 값을 설정한다. + * @param size the size to set + */ + public void setSize(long size) { + this.size = size; + } +} diff --git a/src/main/java/kcg/faics/cmmn/egov/file/EgovFormBasedUUID.java b/src/main/java/kcg/faics/cmmn/egov/file/EgovFormBasedUUID.java new file mode 100644 index 0000000..29f0ae0 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/egov/file/EgovFormBasedUUID.java @@ -0,0 +1,529 @@ +package kcg.faics.cmmn.egov.file; + +import java.io.Serializable; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; + +/** + * + * A class that represents an immutable universally unique identifier (UUID). A + * UUID represents a 128-bit value. + * + *

+ * There exist different variants of these global identifiers. The methods of + * this class are for manipulating the Leach-Salz variant, although the + * constructors allow the creation of any variant of UUID (described below). + * + *

+ * The layout of a variant 2 (Leach-Salz) UUID is as follows: + * + * The most significant long consists of the following unsigned fields: + * + *

+ *   0xFFFFFFFF00000000 time_low
+ *   0x00000000FFFF0000 time_mid
+ *   0x000000000000F000 version
+ *   0x0000000000000FFF time_hi
+ * 
+ * + * The least significant long consists of the following unsigned fields: + * + *
+ *   0xC000000000000000 variant
+ *   0x3FFF000000000000 clock_seq
+ *   0x0000FFFFFFFFFFFF node
+ * 
+ * + *

+ * The variant field contains a value which identifies the layout of the + * UUID. The bit layout described above is valid only for a + * UUID with a variant value of 2, which indicates the Leach-Salz + * variant. + * + *

+ * The version field holds a value that describes the type of this UUID. + * There are four different basic types of UUIDs: time-based, DCE security, + * name-based, and randomly generated UUIDs. These types have a version value of + * 1, 2, 3 and 4, respectively. + * + *

+ * For more information including algorithms used to create UUIDs, + * see the Internet-Draft UUIDs + * and GUIDs or the standards body definition at ISO/IEC 11578:1996. + * + * @version 1.14, 07/12/04 + * @since 1.5 + */ +@SuppressWarnings("serial") +public class EgovFormBasedUUID implements Serializable { + /* + * The most significant 64 bits of this UUID. + * + * @serial + */ + private final long mostSigBits; + + /* + * The least significant 64 bits of this UUID. + * + * @serial + */ + private final long leastSigBits; + + /* + * The version number associated with this UUID. Computed on demand. + */ + private transient int version = -1; + + /* + * The variant number associated with this UUID. Computed on demand. + */ + private transient int variant = -1; + + /* + * The timestamp associated with this UUID. Computed on demand. + */ + private transient volatile long timestamp = -1; + + /* + * The clock sequence associated with this UUID. Computed on demand. + */ + private transient int sequence = -1; + + /* + * The node number associated with this UUID. Computed on demand. + */ + private transient long node = -1; + + /* + * The hashcode of this UUID. Computed on demand. + */ + private transient int hashCode = -1; + + /* + * The random number generator used by this class to create random based + * UUIDs. + */ + private static volatile SecureRandom numberGenerator = null; + + // Constructors and Factories + + /* + * Private constructor which uses a byte array to construct the new UUID. + */ + private EgovFormBasedUUID(byte[] data) { + long msb = 0; + long lsb = 0; + for (int i = 0; i < 8; i++) + msb = (msb << 8) | (data[i] & 0xff); + for (int i = 8; i < 16; i++) + lsb = (lsb << 8) | (data[i] & 0xff); + this.mostSigBits = msb; + this.leastSigBits = lsb; + } + + /** + * Constructs a new UUID using the specified data. + * mostSigBits is used for the most significant 64 bits of the + * UUID and leastSigBits becomes the least significant + * 64 bits of the UUID. + * + * @param mostSigBits + * @param leastSigBits + */ + public EgovFormBasedUUID(long mostSigBits, long leastSigBits) { + this.mostSigBits = mostSigBits; + this.leastSigBits = leastSigBits; + } + + /** + * Static factory to retrieve a type 4 (pseudo randomly generated) UUID. + * + * The UUID is generated using a cryptographically strong + * pseudo random number generator. + * + * @return a randomly generated UUID. + */ + public static EgovFormBasedUUID randomUUID() { + SecureRandom ng = numberGenerator; + if (ng == null) { + numberGenerator = ng = new SecureRandom(); + } + + byte[] randomBytes = new byte[16]; + ng.nextBytes(randomBytes); + randomBytes[6] &= 0x0f; /* clear version */ + randomBytes[6] |= 0x40; /* set to version 4 */ + randomBytes[8] &= 0x3f; /* clear variant */ + randomBytes[8] |= 0x80; /* set to IETF variant */ + + return new EgovFormBasedUUID(randomBytes); + } + + /** + * Static factory to retrieve a type 3 (name based) UUID based on + * the specified byte array. + * + * @param name + * a byte array to be used to construct a UUID. + * @return a UUID generated from the specified array. + */ + public static EgovFormBasedUUID nameUUIDFromBytes(byte[] name) { + return null; + +/* + * 2106.11.18 김노민 + * FindBugs에서 Array index is out of bounds. 문제를 제시한다. + * 어차피 사용하지 않으니 해당 메소드를 수정하지 않고 모두 주석처리한다. + * + * + MessageDigest md; + try { + // 2011.10.10 보안점검 후속조치 암호화 알고리즘 변경(MD5 -> SHA-256) + //md = MessageDigest.getInstance("MD5"); + md = MessageDigest.getInstance("SHA-256"); + } catch (NoSuchAlgorithmException nsae) { + //throw new InternalError("MD5 not supported"); + throw new InternalError("SHA-256 not supported"); + } + // 2011.10.10 보안점검 후속조치 + if (md == null) { + throw new RuntimeException("MessageDigest is null!!"); + } + // 2014.09.20 보안점검 후속 조치 + // Random 방식의 salt 추가 + SecureRandom ng = new SecureRandom(); + byte[] randomBytes = new byte[16]; + ng.nextBytes(randomBytes); + + md.reset(); + md.update(randomBytes); + byte[] sha = md.digest(name); + + + byte[] md5Bytes = new byte[8]; + System.arraycopy(sha, 0, md5Bytes, 0, 8); + //2011.10.10 보안점검 후속조치 끝 + + md5Bytes[6] &= 0x0f; clear version + md5Bytes[6] |= 0x30; set to version 3 + md5Bytes[8] &= 0x3f; clear variant + md5Bytes[8] |= 0x80; set to IETF variant + + return new EgovFormBasedUUID(md5Bytes);*/ + } + + /** + * Creates a UUID from the string standard representation as + * described in the {@link #toString} method. + * + * @param name + * a string that specifies a UUID. + * @return a UUID with the specified value. + * @throws IllegalArgumentException + * if name does not conform to the string representation as + * described in {@link #toString}. + */ + public static EgovFormBasedUUID fromString(String name) { + String[] components = name.split("-"); + if (components.length != 5) + throw new IllegalArgumentException("Invalid UUID string: " + name); + for (int i = 0; i < 5; i++) + components[i] = "0x" + components[i]; + + long mostSigBits = Long.decode(components[0]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[1]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[2]).longValue(); + + long leastSigBits = Long.decode(components[3]).longValue(); + leastSigBits <<= 48; + leastSigBits |= Long.decode(components[4]).longValue(); + + return new EgovFormBasedUUID(mostSigBits, leastSigBits); + } + + // Field Accessor Methods + + /** + * Returns the least significant 64 bits of this UUID's 128 bit value. + * + * @return the least significant 64 bits of this UUID's 128 bit value. + */ + public long getLeastSignificantBits() { + return leastSigBits; + } + + /** + * Returns the most significant 64 bits of this UUID's 128 bit value. + * + * @return the most significant 64 bits of this UUID's 128 bit value. + */ + public long getMostSignificantBits() { + return mostSigBits; + } + + /** + * The version number associated with this UUID. The version + * number describes how this UUID was generated. + * + * The version number has the following meaning: + *

+ *

    + *
  • 1 Time-based UUID + *
  • 2 DCE security UUID + *
  • 3 Name-based UUID + *
  • 4 Randomly generated UUID + *
+ * + * @return the version number of this UUID. + */ + public int version() { + if (version < 0) { + // Version is bits masked by 0x000000000000F000 in MS long + version = (int) ((mostSigBits >> 12) & 0x0f); + } + return version; + } + + /** + * The variant number associated with this UUID. The variant + * number describes the layout of the UUID. + * + * The variant number has the following meaning: + *

+ *

    + *
  • 0 Reserved for NCS backward compatibility + *
  • 2 The Leach-Salz variant (used by this class) + *
  • 6 Reserved, Microsoft Corporation backward compatibility + *
  • 7 Reserved for future definition + *
+ * + * @return the variant number of this UUID. + */ + public int variant() { + if (variant < 0) { + // This field is composed of a varying number of bits + if ((leastSigBits >>> 63) == 0) { + variant = 0; + } else if ((leastSigBits >>> 62) == 2) { + variant = 2; + } else { + variant = (int) (leastSigBits >>> 61); + } + } + return variant; + } + + /** + * The timestamp value associated with this UUID. + * + *

+ * The 60 bit timestamp value is constructed from the time_low, time_mid, + * and time_hi fields of this UUID. The resulting timestamp is + * measured in 100-nanosecond units since midnight, October 15, 1582 UTC. + *

+ * + * The timestamp value is only meaningful in a time-based UUID, which has + * version type 1. If this UUID is not a time-based UUID then + * this method throws UnsupportedOperationException. + * + * @throws UnsupportedOperationException + * if this UUID is not a version 1 UUID. + */ + public long timestamp() { + if (version() != 1) { + throw new UnsupportedOperationException("Not a time-based UUID"); + } + long result = timestamp; + if (result < 0) { + result = (mostSigBits & 0x0000000000000FFFL) << 48; + result |= ((mostSigBits >> 16) & 0xFFFFL) << 32; + result |= mostSigBits >>> 32; + timestamp = result; + } + return result; + } + + /** + * The clock sequence value associated with this UUID. + * + *

+ * The 14 bit clock sequence value is constructed from the clock sequence + * field of this UUID. The clock sequence field is used to guarantee + * temporal uniqueness in a time-based UUID. + *

+ * + * The clockSequence value is only meaningful in a time-based UUID, which + * has version type 1. If this UUID is not a time-based UUID then this + * method throws UnsupportedOperationException. + * + * @return the clock sequence of this UUID. + * @throws UnsupportedOperationException + * if this UUID is not a version 1 UUID. + */ + public int clockSequence() { + if (version() != 1) { + throw new UnsupportedOperationException("Not a time-based UUID"); + } + if (sequence < 0) { + sequence = (int) ((leastSigBits & 0x3FFF000000000000L) >>> 48); + } + return sequence; + } + + /** + * The node value associated with this UUID. + * + *

+ * The 48 bit node value is constructed from the node field of this UUID. + * This field is intended to hold the IEEE 802 address of the machine that + * generated this UUID to guarantee spatial uniqueness. + *

+ * + * The node value is only meaningful in a time-based UUID, which has version + * type 1. If this UUID is not a time-based UUID then this method throws + * UnsupportedOperationException. + * + * @return the node value of this UUID. + * @throws UnsupportedOperationException + * if this UUID is not a version 1 UUID. + */ + public long node() { + if (version() != 1) { + throw new UnsupportedOperationException("Not a time-based UUID"); + } + if (node < 0) { + node = leastSigBits & 0x0000FFFFFFFFFFFFL; + } + return node; + } + + // Object Inherited Methods + + /** + * Returns a String object representing this + * UUID. + * + *

+ * The UUID string representation is as described by this BNF : + * + *

+     *    UUID                   = <time_low> "-" <time_mid> "-"
+     *                             <time_high_and_version> "-"
+     *                             <variant_and_sequence> "-"
+     *                             <node>
+     *    time_low               = 4*<hexOctet>
+     *    time_mid               = 2*<hexOctet>
+     *    time_high_and_version  = 2*<hexOctet>
+     *    variant_and_sequence   = 2*<hexOctet>
+     *    node                   = 6*<hexOctet>
+     *    hexOctet               = <hexDigit><hexDigit>
+     *    hexDigit               =
+     *          "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
+     *          | "a" | "b" | "c" | "d" | "e" | "f"
+     *          | "A" | "B" | "C" | "D" | "E" | "F"
+     * 
+ * + * @return a string representation of this UUID. + */ + @Override + public String toString() { + return (digits(mostSigBits >> 32, 8) + "-" + + digits(mostSigBits >> 16, 4) + "-" + digits(mostSigBits, 4) + + "-" + digits(leastSigBits >> 48, 4) + "-" + digits( + leastSigBits, 12)); + } + + /** Returns val represented by the specified number of hex digits. */ + private static String digits(long val, int digits) { + long hi = 1L << (digits * 4); + return Long.toHexString(hi | (val & (hi - 1))).substring(1); + } + + /** + * Returns a hash code for this UUID. + * + * @return a hash code value for this UUID. + */ + @Override + public int hashCode() { + if (hashCode == -1) { + hashCode = (int) ((mostSigBits >> 32) ^ mostSigBits + ^ (leastSigBits >> 32) ^ leastSigBits); + } + return hashCode; + } + + /** + * Compares this object to the specified object. The result is true + * if and only if the argument is not null, is a UUID + * object, has the same variant, and contains the same value, bit for bit, + * as this UUID. + * + * @param obj + * the object to compare with. + * @return true if the objects are the same; + * false otherwise. + */ + @Override + public boolean equals(Object obj) { + // 보안 취약점 점검 지적사항 반영 시작 + if (obj == null) + return false; + // 보안 취약점 점검 지적사항 반영 시작 끝 + if (!(obj instanceof EgovFormBasedUUID)) + return false; + if (((EgovFormBasedUUID) obj).variant() != this.variant()) + return false; + EgovFormBasedUUID id = (EgovFormBasedUUID) obj; + return (mostSigBits == id.mostSigBits && leastSigBits == id.leastSigBits); + } + + // Comparison Operations + + /** + * Compares this UUID with the specified UUID. + * + *

+ * The first of two UUIDs follows the second if the most significant field + * in which the UUIDs differ is greater for the first UUID. + * + * @param val + * UUID to which this UUID is to be + * compared. + * @return -1, 0 or 1 as this UUID is less than, equal to, or + * greater than val. + */ + public int compareTo(EgovFormBasedUUID val) { + // The ordering is intentionally set up so that the UUIDs + // can simply be numerically compared as two numbers + return (this.mostSigBits < val.mostSigBits ? -1 + : (this.mostSigBits > val.mostSigBits ? 1 + : (this.leastSigBits < val.leastSigBits ? -1 + : (this.leastSigBits > val.leastSigBits ? 1 : 0)))); + } + + /** + * Reconstitute the UUID instance from a stream (that is, + * deserialize it). This is necessary to set the transient fields to their + * correct uninitialized value so they will be recomputed on demand. + */ + private void readObject(java.io.ObjectInputStream in) + throws java.io.IOException, ClassNotFoundException { + + in.defaultReadObject(); + + // Set "cached computation" fields to their initial values + version = -1; + variant = -1; + timestamp = -1; + sequence = -1; + node = -1; + hashCode = -1; + } +} \ No newline at end of file diff --git a/src/main/java/kcg/faics/cmmn/egov/filter/HTMLTagFilter.java b/src/main/java/kcg/faics/cmmn/egov/filter/HTMLTagFilter.java new file mode 100644 index 0000000..48d6d45 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/egov/filter/HTMLTagFilter.java @@ -0,0 +1,48 @@ +/* + * Copyright 2008-2009 MOPAS(Ministry of Public Administration and Security). + * + * Licensed 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 + * + * http://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. + */ +package kcg.faics.cmmn.egov.filter; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; + +public class HTMLTagFilter implements Filter{ + + @SuppressWarnings("unused") + private FilterConfig config; + + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException, ServletException { + + // 2016 12 21 뿌릴때 안되서 막음. +// chain.doFilter(new HTMLTagFilterRequestWrapper((HttpServletRequest)request), response); + chain.doFilter(request, response); + } + + public void init(FilterConfig config) throws ServletException { + this.config = config; + } + + public void destroy() { + + } +} diff --git a/src/main/java/kcg/faics/cmmn/egov/filter/HTMLTagFilterRequestWrapper.java b/src/main/java/kcg/faics/cmmn/egov/filter/HTMLTagFilterRequestWrapper.java new file mode 100644 index 0000000..d815c92 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/egov/filter/HTMLTagFilterRequestWrapper.java @@ -0,0 +1,109 @@ +/* + * Copyright 2008-2009 MOPAS(Ministry of Public Administration and Security). + * + * Licensed 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 + * + * http://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. + */ +package kcg.faics.cmmn.egov.filter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; + +public class HTMLTagFilterRequestWrapper extends HttpServletRequestWrapper { + + public HTMLTagFilterRequestWrapper(HttpServletRequest request) { + super(request); + } + + public String[] getParameterValues(String parameter) { + + String[] values = super.getParameterValues(parameter); + + if(values==null){ + return null; + } + + for (int i = 0; i < values.length; i++) { + if (values[i] != null) { + StringBuffer strBuff = new StringBuffer(); + for (int j = 0; j < values[i].length(); j++) { + char c = values[i].charAt(j); + switch (c) { + case '<': + strBuff.append("<"); + break; + case '>': + strBuff.append(">"); + break; + //case '&': + //strBuff.append("&"); + //break; + case '"': + strBuff.append("""); + break; + case '\'': + strBuff.append("'"); + break; + default: + strBuff.append(c); + break; + } + } + values[i] = strBuff.toString(); + } else { + values[i] = null; + } + } + + return values; + } + + public String getParameter(String parameter) { + + String value = super.getParameter(parameter); + + if(value==null){ + return null; + } + + StringBuffer strBuff = new StringBuffer(); + + for (int i = 0; i < value.length(); i++) { + char c = value.charAt(i); + switch (c) { + case '<': + strBuff.append("<"); + break; + case '>': + strBuff.append(">"); + break; + case '&': + strBuff.append("&"); + break; + case '"': + strBuff.append("""); + break; + case '\'': + strBuff.append("'"); + break; + default: + strBuff.append(c); + break; + } + } + + value = strBuff.toString(); + + return value; + } + +} \ No newline at end of file diff --git a/src/main/java/kcg/faics/cmmn/egov/filter/RequestBodyXSSFilter.java b/src/main/java/kcg/faics/cmmn/egov/filter/RequestBodyXSSFilter.java new file mode 100644 index 0000000..b7fed0d --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/egov/filter/RequestBodyXSSFilter.java @@ -0,0 +1,36 @@ +package kcg.faics.cmmn.egov.filter; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class RequestBodyXSSFilter implements Filter { + + @Override + public void destroy() {} + @Override + public void init(FilterConfig filterConfig) throws ServletException { + // TODO Auto-generated method stub + + } + @Override + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException, ServletException { + HttpServletRequest req = (HttpServletRequest)request; + HttpServletResponse res = (HttpServletResponse)response; +// RequestWrapper requestWrapper = null; + try{ +// requestWrapper = new RequestWrapper(req); + }catch(Exception e){ + e.printStackTrace(); + } + chain.doFilter(req, res); + } +} diff --git a/src/main/java/kcg/faics/cmmn/egov/util/EgovStringUtil.java b/src/main/java/kcg/faics/cmmn/egov/util/EgovStringUtil.java new file mode 100644 index 0000000..38ced1b --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/egov/util/EgovStringUtil.java @@ -0,0 +1,895 @@ +/** + * @Class Name : EgovStringUtil.java + * @Description : 문자열 데이터 처리 관련 유틸리티 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.01.13 박정규 최초 생성 + * 2009.02.13 이삼섭 내용 추가 + * + * @author 공통 서비스 개발팀 박정규 + * @since 2009. 01. 13 + * @version 1.0 + * @see + * + */ + +package kcg.faics.cmmn.egov.util; + +/* + * Copyright 2001-2006 The Apache Software Foundation. + * + * Licensed 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 + * + * http://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. + */ +import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; +import java.security.SecureRandom; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.Locale; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class EgovStringUtil { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovStringUtil.class); + + /** + * 빈 문자열 "". + */ + public static final String EMPTY = ""; + + /** + *

Padding을 할 수 있는 최대 수치

+ */ + // private static final int PAD_LIMIT = 8192; + /** + *

An array of Strings used for padding.

+ *

Used for efficient space padding. The length of each String expands as needed.

+ */ + /* + private static final String[] PADDING = new String[Character.MAX_VALUE]; + + static { + // space padding is most common, start with 64 chars + PADDING[32] = " "; + } + */ + + /** + * 문자열이 지정한 길이를 초과했을때 지정한길이에다가 해당 문자열을 붙여주는 메서드. + * @param source 원본 문자열 배열 + * @param output 더할문자열 + * @param slength 지정길이 + * @return 지정길이로 잘라서 더할분자열 합친 문자열 + */ + public static String cutString(String source, String output, int slength) { + String returnVal = null; + if (source != null) { + if (source.length() > slength) { + returnVal = source.substring(0, slength) + output; + } else + returnVal = source; + } + return returnVal; + } + + /** + * 문자열이 지정한 길이를 초과했을때 해당 문자열을 삭제하는 메서드 + * @param source 원본 문자열 배열 + * @param slength 지정길이 + * @return 지정길이로 잘라서 더할분자열 합친 문자열 + */ + public static String cutString(String source, int slength) { + String result = null; + if (source != null) { + if (source.length() > slength) { + result = source.substring(0, slength); + } else + result = source; + } + return result; + } + + /** + *

+ * String이 비었거나("") 혹은 null 인지 검증한다. + *

+ * + *
+	 *  StringUtil.isEmpty(null)      = true
+	 *  StringUtil.isEmpty("")        = true
+	 *  StringUtil.isEmpty(" ")       = false
+	 *  StringUtil.isEmpty("bob")     = false
+	 *  StringUtil.isEmpty("  bob  ") = false
+	 * 
+ * + * @param str - 체크 대상 스트링오브젝트이며 null을 허용함 + * @return true - 입력받은 String 이 빈 문자열 또는 null인 경우 + */ + public static boolean isEmpty(String str) { + return str == null || str.length() == 0; + } + + /** + *

기준 문자열에 포함된 모든 대상 문자(char)를 제거한다.

+ * + *
+	 * StringUtil.remove(null, *)       = null
+	 * StringUtil.remove("", *)         = ""
+	 * StringUtil.remove("queued", 'u') = "qeed"
+	 * StringUtil.remove("queued", 'z') = "queued"
+	 * 
+ * + * @param str 입력받는 기준 문자열 + * @param remove 입력받는 문자열에서 제거할 대상 문자열 + * @return 제거대상 문자열이 제거된 입력문자열. 입력문자열이 null인 경우 출력문자열은 null + */ + public static String remove(String str, char remove) { + if (isEmpty(str) || str.indexOf(remove) == -1) { + return str; + } + char[] chars = str.toCharArray(); + int pos = 0; + for (int i = 0; i < chars.length; i++) { + if (chars[i] != remove) { + chars[pos++] = chars[i]; + } + } + return new String(chars, 0, pos); + } + + /** + *

문자열 내부의 콤마 character(,)를 모두 제거한다.

+ * + *
+	 * StringUtil.removeCommaChar(null)       = null
+	 * StringUtil.removeCommaChar("")         = ""
+	 * StringUtil.removeCommaChar("asdfg,qweqe") = "asdfgqweqe"
+	 * 
+ * + * @param str 입력받는 기준 문자열 + * @return " , "가 제거된 입력문자열 + * 입력문자열이 null인 경우 출력문자열은 null + */ + public static String removeCommaChar(String str) { + return remove(str, ','); + } + + /** + *

문자열 내부의 마이너스 character(-)를 모두 제거한다.

+ * + *
+	 * StringUtil.removeMinusChar(null)       = null
+	 * StringUtil.removeMinusChar("")         = ""
+	 * StringUtil.removeMinusChar("a-sdfg-qweqe") = "asdfgqweqe"
+	 * 
+ * + * @param str 입력받는 기준 문자열 + * @return " - "가 제거된 입력문자열 + * 입력문자열이 null인 경우 출력문자열은 null + */ + public static String removeMinusChar(String str) { + return remove(str, '-'); + } + + /** + * 원본 문자열의 포함된 특정 문자열을 새로운 문자열로 변환하는 메서드 + * @param source 원본 문자열 + * @param subject 원본 문자열에 포함된 특정 문자열 + * @param object 변환할 문자열 + * @return sb.toString() 새로운 문자열로 변환된 문자열 + */ + public static String replace(String source, String subject, String object) { + StringBuffer rtnStr = new StringBuffer(); + String preStr = ""; + String nextStr = source; + String srcStr = source; + + while (srcStr.indexOf(subject) >= 0) { + preStr = srcStr.substring(0, srcStr.indexOf(subject)); + nextStr = srcStr.substring(srcStr.indexOf(subject) + subject.length(), srcStr.length()); + srcStr = nextStr; + rtnStr.append(preStr).append(object); + } + rtnStr.append(nextStr); + return rtnStr.toString(); + } + + /** + * 원본 문자열의 포함된 특정 문자열 첫번째 한개만 새로운 문자열로 변환하는 메서드 + * @param source 원본 문자열 + * @param subject 원본 문자열에 포함된 특정 문자열 + * @param object 변환할 문자열 + * @return sb.toString() 새로운 문자열로 변환된 문자열 / source 특정문자열이 없는 경우 원본 문자열 + */ + public static String replaceOnce(String source, String subject, String object) { + StringBuffer rtnStr = new StringBuffer(); + String preStr = ""; + String nextStr = source; + if (source.indexOf(subject) >= 0) { + preStr = source.substring(0, source.indexOf(subject)); + nextStr = source.substring(source.indexOf(subject) + subject.length(), source.length()); + rtnStr.append(preStr).append(object).append(nextStr); + return rtnStr.toString(); + } else { + return source; + } + } + + /** + * subject에 포함된 각각의 문자를 object로 변환한다. + * + * @param source 원본 문자열 + * @param subject 원본 문자열에 포함된 특정 문자열 + * @param object 변환할 문자열 + * @return sb.toString() 새로운 문자열로 변환된 문자열 + */ + public static String replaceChar(String source, String subject, String object) { + StringBuffer rtnStr = new StringBuffer(); + String preStr = ""; + String nextStr = source; + String srcStr = source; + + char chA; + + for (int i = 0; i < subject.length(); i++) { + chA = subject.charAt(i); + + if (srcStr.indexOf(chA) >= 0) { + preStr = srcStr.substring(0, srcStr.indexOf(chA)); + nextStr = srcStr.substring(srcStr.indexOf(chA) + 1, srcStr.length()); + srcStr = rtnStr.append(preStr).append(object).append(nextStr).toString(); + } + } + + return srcStr; + } + + /** + *

strsearchStr의 시작(index) 위치를 반환.

+ * + *

입력값 중 null이 있을 경우 -1을 반환.

+ * + *
+	 * StringUtil.indexOf(null, *)          = -1
+	 * StringUtil.indexOf(*, null)          = -1
+	 * StringUtil.indexOf("", "")           = 0
+	 * StringUtil.indexOf("aabaabaa", "a")  = 0
+	 * StringUtil.indexOf("aabaabaa", "b")  = 2
+	 * StringUtil.indexOf("aabaabaa", "ab") = 1
+	 * StringUtil.indexOf("aabaabaa", "")   = 0
+	 * 
+ * + * @param str 검색 문자열 + * @param searchStr 검색 대상문자열 + * @return 검색 문자열 중 검색 대상문자열이 있는 시작 위치 검색대상 문자열이 없거나 null인 경우 -1 + */ + public static int indexOf(String str, String searchStr) { + if (str == null || searchStr == null) { + return -1; + } + return str.indexOf(searchStr); + } + + /** + *

오라클의 decode 함수와 동일한 기능을 가진 메서드이다. + * sourStrcompareStr의 값이 같으면 + * returStr을 반환하며, 다르면 defaultStr을 반환한다. + *

+ * + *
+	 * StringUtil.decode(null, null, "foo", "bar")= "foo"
+	 * StringUtil.decode("", null, "foo", "bar") = "bar"
+	 * StringUtil.decode(null, "", "foo", "bar") = "bar"
+	 * StringUtil.decode("하이", "하이", null, "bar") = null
+	 * StringUtil.decode("하이", "하이  ", "foo", null) = null
+	 * StringUtil.decode("하이", "하이", "foo", "bar") = "foo"
+	 * StringUtil.decode("하이", "하이  ", "foo", "bar") = "bar"
+	 * 
+ * + * @param sourceStr 비교할 문자열 + * @param compareStr 비교 대상 문자열 + * @param returnStr sourceStr와 compareStr의 값이 같을 때 반환할 문자열 + * @param defaultStr sourceStr와 compareStr의 값이 다를 때 반환할 문자열 + * @return sourceStr과 compareStr의 값이 동일(equal)할 때 returnStr을 반환하며, + *
다르면 defaultStr을 반환한다. + */ + public static String decode(String sourceStr, String compareStr, String returnStr, String defaultStr) { + if (sourceStr == null && compareStr == null) { + return returnStr; + } + + if (sourceStr == null && compareStr != null) { + return defaultStr; + } + + if (sourceStr != null && sourceStr.trim().equals(compareStr)) { + return returnStr; + } + + return defaultStr; + } + + /** + *

오라클의 decode 함수와 동일한 기능을 가진 메서드이다. + * sourStrcompareStr의 값이 같으면 + * returStr을 반환하며, 다르면 sourceStr을 반환한다. + *

+ * + *
+	 * StringUtil.decode(null, null, "foo") = "foo"
+	 * StringUtil.decode("", null, "foo") = ""
+	 * StringUtil.decode(null, "", "foo") = null
+	 * StringUtil.decode("하이", "하이", "foo") = "foo"
+	 * StringUtil.decode("하이", "하이 ", "foo") = "하이"
+	 * StringUtil.decode("하이", "바이", "foo") = "하이"
+	 * 
+ * + * @param sourceStr 비교할 문자열 + * @param compareStr 비교 대상 문자열 + * @param returnStr sourceStr와 compareStr의 값이 같을 때 반환할 문자열 + * @return sourceStr과 compareStr의 값이 동일(equal)할 때 returnStr을 반환하며, + *
다르면 sourceStr을 반환한다. + */ + public static String decode(String sourceStr, String compareStr, String returnStr) { + return decode(sourceStr, compareStr, returnStr, sourceStr); + } + + /** + * 객체가 null인지 확인하고 null인 경우 "" 로 바꾸는 메서드 + * @param object 원본 객체 + * @return resultVal 문자열 + */ + public static String isNullToString(Object object) { + String string = ""; + + if (object != null) { + string = object.toString().trim(); + } + + return string; + } + + /** + *
+	 * 인자로 받은 String이 null일 경우 ""로 리턴한다.
+	 * @param src null값일 가능성이 있는 String 값.
+	 * @return 만약 String이 null 값일 경우 ""로 바꾼 String 값.
+	 *
+ */ + public static String nullConvert(Object src) { + //if (src != null && src.getClass().getName().equals("java.math.BigDecimal")) { + if (src != null && src instanceof java.math.BigDecimal) { + return ((BigDecimal) src).toString(); + } + + if (src == null || src.equals("null")) { + return ""; + } else { + return ((String) src).trim(); + } + } + + /** + *
+	 * 인자로 받은 String이 null일 경우 ""로 리턴한다.
+	 * @param src null값일 가능성이 있는 String 값.
+	 * @return 만약 String이 null 값일 경우 ""로 바꾼 String 값.
+	 *
+ */ + public static String nullConvert(String src) { + + if (src == null || src.equals("null") || "".equals(src) || " ".equals(src)) { + return ""; + } else { + return src.trim(); + } + } + + /** + *
+	 * 인자로 받은 String이 null일 경우 "0"로 리턴한다.
+	 * @param src null값일 가능성이 있는 String 값.
+	 * @return 만약 String이 null 값일 경우 "0"로 바꾼 String 값.
+	 *
+ */ + public static int zeroConvert(Object src) { + + if (src == null || src.equals("null")) { + return 0; + } else { + return Integer.parseInt(((String) src).trim()); + } + } + + /** + *
+	 * 인자로 받은 String이 null일 경우 ""로 리턴한다.
+	 * @param src null값일 가능성이 있는 String 값.
+	 * @return 만약 String이 null 값일 경우 ""로 바꾼 String 값.
+	 *
+ */ + public static int zeroConvert(String src) { + + if (src == null || src.equals("null") || "".equals(src) || " ".equals(src)) { + return 0; + } else { + return Integer.parseInt(src.trim()); + } + } + + /** + *

문자열에서 {@link Character#isWhitespace(char)}에 정의된 + * 모든 공백문자를 제거한다.

+ * + *
+	 * StringUtil.removeWhitespace(null)         = null
+	 * StringUtil.removeWhitespace("")           = ""
+	 * StringUtil.removeWhitespace("abc")        = "abc"
+	 * StringUtil.removeWhitespace("   ab  c  ") = "abc"
+	 * 
+ * + * @param str 공백문자가 제거도어야 할 문자열 + * @return the 공백문자가 제거된 문자열, null이 입력되면 null이 리턴 + */ + public static String removeWhitespace(String str) { + if (isEmpty(str)) { + return str; + } + int sz = str.length(); + char[] chs = new char[sz]; + int count = 0; + for (int i = 0; i < sz; i++) { + if (!Character.isWhitespace(str.charAt(i))) { + chs[count++] = str.charAt(i); + } + } + if (count == sz) { + return str; + } + + return new String(chs, 0, count); + } + + /** + * Html 코드가 들어간 문서를 표시할때 태그에 손상없이 보이기 위한 메서드 + * + * @param strString + * @return HTML 태그를 치환한 문자열 + */ + public static String checkHtmlView(String strString) { + String strNew = ""; + + StringBuffer strTxt = new StringBuffer(""); + + char chrBuff; + int len = strString.length(); + + for (int i = 0; i < len; i++) { + chrBuff = (char) strString.charAt(i); + + switch (chrBuff) { + case '<': + strTxt.append("<"); + break; + case '>': + strTxt.append(">"); + break; + case '"': + strTxt.append("""); + break; + case 10: + strTxt.append("
"); + break; + case ' ': + strTxt.append(" "); + break; + //case '&' : + //strTxt.append("&"); + //break; + default: + strTxt.append(chrBuff); + } + } + + strNew = strTxt.toString(); + + return strNew; + } + + /** + * 문자열을 지정한 분리자에 의해 배열로 리턴하는 메서드. + * @param source 원본 문자열 + * @param separator 분리자 + * @return result 분리자로 나뉘어진 문자열 배열 + */ + public static String[] split(String source, String separator) throws NullPointerException { + String[] returnVal = null; + int cnt = 1; + + int index = source.indexOf(separator); + int index0 = 0; + while (index >= 0) { + cnt++; + index = source.indexOf(separator, index + 1); + } + returnVal = new String[cnt]; + cnt = 0; + index = source.indexOf(separator); + while (index >= 0) { + returnVal[cnt] = source.substring(index0, index); + index0 = index + 1; + index = source.indexOf(separator, index + 1); + cnt++; + } + returnVal[cnt] = source.substring(index0); + + return returnVal; + } + + /** + *

{@link String#toLowerCase()}를 이용하여 소문자로 변환한다.

+ * + *
+	 * StringUtil.lowerCase(null)  = null
+	 * StringUtil.lowerCase("")    = ""
+	 * StringUtil.lowerCase("aBc") = "abc"
+	 * 
+ * + * @param str 소문자로 변환되어야 할 문자열 + * @return 소문자로 변환된 문자열, null이 입력되면 null 리턴 + */ + public static String lowerCase(String str) { + if (str == null) { + return null; + } + + return str.toLowerCase(); + } + + /** + *

{@link String#toUpperCase()}를 이용하여 대문자로 변환한다.

+ * + *
+	 * StringUtil.upperCase(null)  = null
+	 * StringUtil.upperCase("")    = ""
+	 * StringUtil.upperCase("aBc") = "ABC"
+	 * 
+ * + * @param str 대문자로 변환되어야 할 문자열 + * @return 대문자로 변환된 문자열, null이 입력되면 null 리턴 + */ + public static String upperCase(String str) { + if (str == null) { + return null; + } + + return str.toUpperCase(); + } + + /** + *

입력된 String의 앞쪽에서 두번째 인자로 전달된 문자(stripChars)를 모두 제거한다.

+ * + *
+	 * StringUtil.stripStart(null, *)          = null
+	 * StringUtil.stripStart("", *)            = ""
+	 * StringUtil.stripStart("abc", "")        = "abc"
+	 * StringUtil.stripStart("abc", null)      = "abc"
+	 * StringUtil.stripStart("  abc", null)    = "abc"
+	 * StringUtil.stripStart("abc  ", null)    = "abc  "
+	 * StringUtil.stripStart(" abc ", null)    = "abc "
+	 * StringUtil.stripStart("yxabc  ", "xyz") = "abc  "
+	 * 
+ * + * @param str 지정된 문자가 제거되어야 할 문자열 + * @param stripChars 제거대상 문자열 + * @return 지정된 문자가 제거된 문자열, null이 입력되면 null 리턴 + */ + public static String stripStart(String str, String stripChars) { + int strLen; + if (str == null || (strLen = str.length()) == 0) { + return str; + } + int start = 0; + if (stripChars == null) { + while ((start != strLen) && Character.isWhitespace(str.charAt(start))) { + start++; + } + } else if (stripChars.length() == 0) { + return str; + } else { + while ((start != strLen) && (stripChars.indexOf(str.charAt(start)) != -1)) { + start++; + } + } + + return str.substring(start); + } + + /** + *

입력된 String의 뒤쪽에서 두번째 인자로 전달된 문자(stripChars)를 모두 제거한다.

+ * + *
+	 * StringUtil.stripEnd(null, *)          = null
+	 * StringUtil.stripEnd("", *)            = ""
+	 * StringUtil.stripEnd("abc", "")        = "abc"
+	 * StringUtil.stripEnd("abc", null)      = "abc"
+	 * StringUtil.stripEnd("  abc", null)    = "  abc"
+	 * StringUtil.stripEnd("abc  ", null)    = "abc"
+	 * StringUtil.stripEnd(" abc ", null)    = " abc"
+	 * StringUtil.stripEnd("  abcyx", "xyz") = "  abc"
+	 * 
+ * + * @param str 지정된 문자가 제거되어야 할 문자열 + * @param stripChars 제거대상 문자열 + * @return 지정된 문자가 제거된 문자열, null이 입력되면 null 리턴 + */ + public static String stripEnd(String str, String stripChars) { + int end; + if (str == null || (end = str.length()) == 0) { + return str; + } + + if (stripChars == null) { + while ((end != 0) && Character.isWhitespace(str.charAt(end - 1))) { + end--; + } + } else if (stripChars.length() == 0) { + return str; + } else { + while ((end != 0) && (stripChars.indexOf(str.charAt(end - 1)) != -1)) { + end--; + } + } + + return str.substring(0, end); + } + + /** + *

입력된 String의 앞, 뒤에서 두번째 인자로 전달된 문자(stripChars)를 모두 제거한다.

+ * + *
+	 * StringUtil.strip(null, *)          = null
+	 * StringUtil.strip("", *)            = ""
+	 * StringUtil.strip("abc", null)      = "abc"
+	 * StringUtil.strip("  abc", null)    = "abc"
+	 * StringUtil.strip("abc  ", null)    = "abc"
+	 * StringUtil.strip(" abc ", null)    = "abc"
+	 * StringUtil.strip("  abcyx", "xyz") = "  abc"
+	 * 
+ * + * @param str 지정된 문자가 제거되어야 할 문자열 + * @param stripChars 제거대상 문자열 + * @return 지정된 문자가 제거된 문자열, null이 입력되면 null 리턴 + */ + public static String strip(String str, String stripChars) { + if (isEmpty(str)) { + return str; + } + + String srcStr = str; + srcStr = stripStart(srcStr, stripChars); + + return stripEnd(srcStr, stripChars); + } + + /** + * 문자열을 지정한 분리자에 의해 지정된 길이의 배열로 리턴하는 메서드. + * @param source 원본 문자열 + * @param separator 분리자 + * @param arraylength 배열 길이 + * @return 분리자로 나뉘어진 문자열 배열 + */ + public static String[] split(String source, String separator, int arraylength) throws NullPointerException { + String[] returnVal = new String[arraylength]; + int cnt = 0; + int index0 = 0; + int index = source.indexOf(separator); + while (index >= 0 && cnt < (arraylength - 1)) { + returnVal[cnt] = source.substring(index0, index); + index0 = index + 1; + index = source.indexOf(separator, index + 1); + cnt++; + } + returnVal[cnt] = source.substring(index0); + if (cnt < (arraylength - 1)) { + for (int i = cnt + 1; i < arraylength; i++) { + returnVal[i] = ""; + } + } + + return returnVal; + } + + /** + * 문자열 A에서 Z사이의 랜덤 문자열을 구하는 기능을 제공 시작문자열과 종료문자열 사이의 랜덤 문자열을 구하는 기능 + * + * @param startChr + * - 첫 문자 + * @param endChr + * - 마지막문자 + * @return 랜덤문자 + * @exception MyException + * @see + */ + public static String getRandomStr(char startChr, char endChr) { + + int randomInt; + String randomStr = null; + + // 시작문자 및 종료문자를 아스키숫자로 변환한다. + int startInt = Integer.valueOf(startChr); + int endInt = Integer.valueOf(endChr); + + // 시작문자열이 종료문자열보가 클경우 + if (startInt > endInt) { + throw new IllegalArgumentException("Start String: " + startChr + " End String: " + endChr); + } + + // 랜덤 객체 생성 + SecureRandom rnd = new SecureRandom(); + + do { + // 시작문자 및 종료문자 중에서 랜덤 숫자를 발생시킨다. + randomInt = rnd.nextInt(endInt + 1); + } while (randomInt < startInt); // 입력받은 문자 'A'(65)보다 작으면 다시 랜덤 숫자 발생. + + // 랜덤 숫자를 문자로 변환 후 스트링으로 다시 변환 + randomStr = (char) randomInt + ""; + + // 랜덤문자열를 리턴 + return randomStr; + } + + /** + * 문자열을 다양한 문자셋(EUC-KR[KSC5601],UTF-8..)을 사용하여 인코딩하는 기능 역으로 디코딩하여 원래의 문자열을 + * 복원하는 기능을 제공함 String temp = new String(문자열.getBytes("바꾸기전 인코딩"),"바꿀 인코딩"); + * String temp = new String(문자열.getBytes("8859_1"),"KSC5601"); => UTF-8 에서 + * EUC-KR + * + * @param srcString + * - 문자열 + * @param srcCharsetNm + * - 원래 CharsetNm + * @param charsetNm + * - CharsetNm + * @return 인(디)코딩 문자열 + * @exception MyException + * @see + */ + public static String getEncdDcd(String srcString, String srcCharsetNm, String cnvrCharsetNm) { + + String rtnStr = null; + + if (srcString == null) + return null; + + try { + rtnStr = new String(srcString.getBytes(srcCharsetNm), cnvrCharsetNm); + } catch (UnsupportedEncodingException e) { + rtnStr = null; + } + + return rtnStr; + } + + /** + * 특수문자를 웹 브라우저에서 정상적으로 보이기 위해 특수문자를 처리('<' -> & lT)하는 기능이다 + * @param srcString - '<' + * @return 변환문자열('<' -> "<" + * @exception MyException + * @see + */ + public static String getSpclStrCnvr(String srcString) { + + String rtnStr = null; + + try { + StringBuffer strTxt = new StringBuffer(""); + + char chrBuff; + int len = srcString.length(); + + for (int i = 0; i < len; i++) { + chrBuff = (char) srcString.charAt(i); + + switch (chrBuff) { + case '<': + strTxt.append("<"); + break; + case '>': + strTxt.append(">"); + break; + case '&': + strTxt.append("&"); + break; + default: + strTxt.append(chrBuff); + } + } + + rtnStr = strTxt.toString(); + + } catch (Exception e) { + LOGGER.debug("{}", e); + } + + return rtnStr; + } + + /** + * 응용어플리케이션에서 고유값을 사용하기 위해 시스템에서17자리의TIMESTAMP값을 구하는 기능 + * + * @param + * @return Timestamp 값 + * @exception MyException + * @see + */ + public static String getTimeStamp() { + + String rtnStr = null; + + // 문자열로 변환하기 위한 패턴 설정(년도-월-일 시:분:초:초(자정이후 초)) + String pattern = "yyyyMMddhhmmssSSS"; + + SimpleDateFormat sdfCurrent = new SimpleDateFormat(pattern, Locale.KOREA); + Timestamp ts = new Timestamp(System.currentTimeMillis()); + + rtnStr = sdfCurrent.format(ts.getTime()); + + return rtnStr; + } + + /** + * html의 특수문자를 표현하기 위해 + * + * @param srcString + * @return String + * @exception Exception + * @see + */ + public static String getHtmlStrCnvr(String srcString) { + + String tmpString = srcString; + + tmpString = tmpString.replaceAll("<", "<"); + tmpString = tmpString.replaceAll(">", ">"); + tmpString = tmpString.replaceAll("&", "&"); + tmpString = tmpString.replaceAll(" ", " "); + tmpString = tmpString.replaceAll("'", "\'"); + tmpString = tmpString.replaceAll(""", "\""); + + return tmpString; + + } + + /** + *

날짜 형식의 문자열 내부에 마이너스 character(-)를 추가한다.

+ * + *
+	 *   StringUtil.addMinusChar("20100901") = "2010-09-01"
+	 * 
+ * + * @param date 입력받는 문자열 + * @return " - "가 추가된 입력문자열 + */ + public static String addMinusChar(String date) { + if (date.length() == 8) + return date.substring(0, 4).concat("-").concat(date.substring(4, 6)).concat("-").concat(date.substring(6, 8)); + else + return ""; + } +} diff --git a/src/main/java/kcg/faics/cmmn/egov/util/EgovWebUtil.java b/src/main/java/kcg/faics/cmmn/egov/util/EgovWebUtil.java new file mode 100644 index 0000000..649e74c --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/egov/util/EgovWebUtil.java @@ -0,0 +1,111 @@ +package kcg.faics.cmmn.egov.util; + +import java.util.regex.Pattern; + +/** + * 교차접속 스크립트 공격 취약성 방지(파라미터 문자열 교체) + * + *
+ * << 개정이력(Modification Information) >>
+ *
+ *   수정일      수정자           수정내용
+ *  -------    	--------    ---------------------------
+ *   2011.10.10  한성곤          최초 생성
+ *
+ * 
+ */ + +public class EgovWebUtil { + public static String clearXSSMinimum(String value) { + if (value == null || value.trim().equals("")) { + return ""; + } + + String returnValue = value; + + returnValue = returnValue.replaceAll("&", "&"); + returnValue = returnValue.replaceAll("<", "<"); + returnValue = returnValue.replaceAll(">", ">"); + returnValue = returnValue.replaceAll("\"", """); + returnValue = returnValue.replaceAll("\'", "'"); + returnValue = returnValue.replaceAll("[.]", "."); + returnValue = returnValue.replaceAll("%2E", "."); + returnValue = returnValue.replaceAll("%2F", "/"); + return returnValue; + } + + public static String clearXSSMaximum(String value) { + String returnValue = value; + returnValue = clearXSSMinimum(returnValue); + + returnValue = returnValue.replaceAll("%00", null); + + returnValue = returnValue.replaceAll("%", "%"); + + // \\. => . + + returnValue = returnValue.replaceAll("\\.\\./", ""); // ../ + returnValue = returnValue.replaceAll("\\.\\.\\\\", ""); // ..\ + returnValue = returnValue.replaceAll("\\./", ""); // ./ + returnValue = returnValue.replaceAll("%2F", ""); + + return returnValue; + } + + public static String filePathBlackList(String value) { + String returnValue = value; + if (returnValue == null || returnValue.trim().equals("")) { + return ""; + } + + returnValue = returnValue.replaceAll("\\.\\./", ""); // ../ + returnValue = returnValue.replaceAll("\\.\\.\\\\", ""); // ..\ + returnValue = returnValue.replaceAll("\\.\\.", ""); // .. + + return returnValue; + } + + /** + * 행안부 보안취약점 점검 조치 방안. + * + * @param value + * @return + */ + public static String filePathReplaceAll(String value) { + String returnValue = value; + if (returnValue == null || returnValue.trim().equals("")) { + return ""; + } + + returnValue = returnValue.replaceAll("/", ""); + // Findbugs 수정 : replaceAll은 첫 번째 인자값을 정규식으로 취급하기때문에 역슬래쉬 1개를 표현하기 위해 4개를 입력해야 한다. + returnValue = returnValue.replaceAll("\\\\", ""); + returnValue = returnValue.replaceAll("\\.\\.", ""); // .. + returnValue = returnValue.replaceAll("&", ""); + + return returnValue; + } + + public static String filePathWhiteList(String value) { + return value; + } + + public static boolean isIPAddress(String str) { + Pattern ipPattern = Pattern.compile("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"); + + return ipPattern.matcher(str).matches(); + } + + public static String removeCRLF(String parameter) { + return parameter.replaceAll("\r", "").replaceAll("\n", ""); + } + + public static String removeSQLInjectionRisk(String parameter) { + return parameter.replaceAll("\\p{Space}", "").replaceAll("\\*", "").replaceAll("%", "").replaceAll(";", "").replaceAll("-", "").replaceAll("\\+", "").replaceAll(",", ""); + } + + public static String removeOSCmdRisk(String parameter) { + return parameter.replaceAll("\\p{Space}", "").replaceAll("\\*", "").replaceAll("[|]", "").replaceAll(";", ""); + } + +} \ No newline at end of file diff --git a/src/main/java/kcg/faics/cmmn/egov/vo/FileVO.java b/src/main/java/kcg/faics/cmmn/egov/vo/FileVO.java new file mode 100644 index 0000000..a9553d0 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/egov/vo/FileVO.java @@ -0,0 +1,242 @@ +package kcg.faics.cmmn.egov.vo; + +import java.io.Serializable; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +/** + * @Class Name : FileVO.java + * @Description : 파일정보 처리를 위한 VO 클래스 + * @Modification Information + * + * 수정일 수정자 수정내용 ------- ------- ------------------- 2009. 3. 25. + * 이삼섭 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 3. 25. + * @version + * @see + * + */ +public class FileVO implements Serializable { + + /** + * serialVersion UID + */ + private static final long serialVersionUID = -287950405903719128L; + /** + * 첨부파일 아이디 + */ + public String atchFileId = ""; + /** + * 생성일자 + */ + public String creatDt = ""; + /** + * 파일내용 + */ + public String fileCn = ""; + /** + * 파일확장자 + */ + public String fileExtsn = ""; + /** + * 파일크기 + */ + public String fileMg = ""; + /** + * 파일연번 + */ + public String fileSn = ""; + /** + * 파일저장경로 + */ + public String fileStreCours = ""; + /** + * 원파일명 + */ + public String orignlFileNm = ""; + /** + * 저장파일명 + */ + public String streFileNm = ""; + + /** + * atchFileId attribute를 리턴한다. + * + * @return the atchFileId + */ + public String getAtchFileId() { + return atchFileId; + } + + /** + * atchFileId attribute 값을 설정한다. + * + * @param atchFileId + * the atchFileId to set + */ + public void setAtchFileId(String atchFileId) { + this.atchFileId = atchFileId; + } + + /** + * creatDt attribute를 리턴한다. + * + * @return the creatDt + */ + public String getCreatDt() { + return creatDt; + } + + /** + * creatDt attribute 값을 설정한다. + * + * @param creatDt + * the creatDt to set + */ + public void setCreatDt(String creatDt) { + this.creatDt = creatDt; + } + + /** + * fileCn attribute를 리턴한다. + * + * @return the fileCn + */ + public String getFileCn() { + return fileCn; + } + + /** + * fileCn attribute 값을 설정한다. + * + * @param fileCn + * the fileCn to set + */ + public void setFileCn(String fileCn) { + this.fileCn = fileCn; + } + + /** + * fileExtsn attribute를 리턴한다. + * + * @return the fileExtsn + */ + public String getFileExtsn() { + return fileExtsn; + } + + /** + * fileExtsn attribute 값을 설정한다. + * + * @param fileExtsn + * the fileExtsn to set + */ + public void setFileExtsn(String fileExtsn) { + this.fileExtsn = fileExtsn; + } + + /** + * fileMg attribute를 리턴한다. + * + * @return the fileMg + */ + public String getFileMg() { + return fileMg; + } + + /** + * fileMg attribute 값을 설정한다. + * + * @param fileMg + * the fileMg to set + */ + public void setFileMg(String fileMg) { + this.fileMg = fileMg; + } + + /** + * fileSn attribute를 리턴한다. + * + * @return the fileSn + */ + public String getFileSn() { + return fileSn; + } + + /** + * fileSn attribute 값을 설정한다. + * + * @param fileSn + * the fileSn to set + */ + public void setFileSn(String fileSn) { + this.fileSn = fileSn; + } + + /** + * fileStreCours attribute를 리턴한다. + * + * @return the fileStreCours + */ + public String getFileStreCours() { + return fileStreCours; + } + + /** + * fileStreCours attribute 값을 설정한다. + * + * @param fileStreCours + * the fileStreCours to set + */ + public void setFileStreCours(String fileStreCours) { + this.fileStreCours = fileStreCours; + } + + /** + * orignlFileNm attribute를 리턴한다. + * + * @return the orignlFileNm + */ + public String getOrignlFileNm() { + return orignlFileNm; + } + + /** + * orignlFileNm attribute 값을 설정한다. + * + * @param orignlFileNm + * the orignlFileNm to set + */ + public void setOrignlFileNm(String orignlFileNm) { + this.orignlFileNm = orignlFileNm; + } + + /** + * streFileNm attribute를 리턴한다. + * + * @return the streFileNm + */ + public String getStreFileNm() { + return streFileNm; + } + + /** + * streFileNm attribute 값을 설정한다. + * + * @param streFileNm + * the streFileNm to set + */ + public void setStreFileNm(String streFileNm) { + this.streFileNm = streFileNm; + } + + /** + * toString 메소드를 대치한다. + */ + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + +} diff --git a/src/main/java/kcg/faics/cmmn/excel/AbstractExcelExport.java b/src/main/java/kcg/faics/cmmn/excel/AbstractExcelExport.java new file mode 100644 index 0000000..ac16972 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/excel/AbstractExcelExport.java @@ -0,0 +1,67 @@ +/** + * AbstractExcelGenerator.java + * @author 임새미 + * @since 2016. 10. 14. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 14. 임새미 최초생성 + * + */ +package kcg.faics.cmmn.excel; + +import java.util.Map; + +import org.apache.poi.xssf.usermodel.XSSFCell; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +/** + * AbstractExcelGenerator.java + * @author 임새미 + * @since 2016. 10. 14. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 14. 임새미 최초생성 + * + */ +public abstract class AbstractExcelExport implements ExcelExport { + + /* 기본적으로 3번 라인이 시작라인 */ + protected int firstRow = 2; + protected String template = null; + + /* 파라미터 맵 */ + protected Map document = null; + + + /** + * 엑셀을 생성한다. + * + * @param document 엑셀 파일을 생성하기 위한 데이터셋 + * @return Workbook 객체 + */ + public abstract XSSFWorkbook makeExcel(XSSFWorkbook wb); + + /** + * 타이틀을 설정한다. + * + * @param 파라미터 파라미터설명 + */ + protected void setTitleRow(XSSFSheet sheet, XSSFCellStyle style, String title) { + + XSSFRow row = sheet.createRow(0); + XSSFCell cell = row.createCell(0); + + cell.setCellValue(title); + if (style != null) { + + } + cell.setCellStyle(style); + + } + +} diff --git a/src/main/java/kcg/faics/cmmn/excel/ExcelExport.java b/src/main/java/kcg/faics/cmmn/excel/ExcelExport.java new file mode 100644 index 0000000..24a3976 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/excel/ExcelExport.java @@ -0,0 +1,27 @@ +/** + * ExcelExport.java + * @author 임새미 + * @since 2016. 10. 17. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 17. 임새미 최초생성 + * + */ +package kcg.faics.cmmn.excel; + +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +/** + * ExcelExport.java + * @author 임새미 + * @since 2016. 10. 17. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 17. 임새미 최초생성 + * + */ +public interface ExcelExport { + public abstract XSSFWorkbook makeExcel(XSSFWorkbook wb); +} diff --git a/src/main/java/kcg/faics/cmmn/excel/ExcelExporter.java b/src/main/java/kcg/faics/cmmn/excel/ExcelExporter.java new file mode 100644 index 0000000..d49e974 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/excel/ExcelExporter.java @@ -0,0 +1,132 @@ +package kcg.faics.cmmn.excel; + +import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.poi.xssf.usermodel.XSSFCell; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +/** + * 엑셀 변환 클래스. + * + * @author kimnomin + * + * @param 데이터 VO + */ +public class ExcelExporter extends AbstractExcelExport { + + /** + * 헤더 맵 객체. + * <해당 VO의 멤버변수명, 값> 형태 + * ex) {title: 제목} + * + * 해당 맵 객체에 입력된 순서대로 엑셀이 생성된다. + * + * !! 주의 !! 해당 맵 객체의 key가 데이터 VO의 멤버변수명과 동일해야 한다. + */ + private LinkedHashMap headers; + /** + * 데이터 VO List. + */ + private List list; + /** + * 엑셀 내 표현될 제목. + */ + private String title; + + /** + * 생성자. + * + * @param headers 헤더 맵 객체. + * @param list 데이터 VO List. + * @param title 엑셀 내 표현될 제목. + */ + public ExcelExporter(final LinkedHashMap headers, final List list, + final String title) { + super(); + this.headers = headers; + this.list = list; + this.title = title; + } + + @Override + public XSSFWorkbook makeExcel(final XSSFWorkbook wb) { + if (list.size() <= 0 || headers.size() <= 0) { + return null; + } + + XSSFSheet sheet = null; + XSSFRow row = null; + XSSFCell cell = null; + + ExcelStyle style = new ExcelStyle(wb); + sheet = wb.createSheet(title); + setTitleRow(sheet, style.titleStyle, title); + + Set keySet = headers.keySet(); + + // 헤더 + int loopIdx = 0; + row = sheet.createRow(firstRow); + cell = row.createCell(loopIdx); + cell.setCellValue("번호"); + cell.setCellStyle(style.headerStyle); + loopIdx++; + for (String key : keySet) { + cell = row.createCell(loopIdx); + cell.setCellValue(headers.get(key)); + cell.setCellStyle(style.headerStyle); + loopIdx++; + } + + // 값 + for (int i = 0; i < list.size(); i++) { + T t = list.get(i); + row = sheet.createRow(firstRow + 1 + i); + + loopIdx = 0; + cell = row.createCell(loopIdx); + cell.setCellValue(i + 1); + cell.setCellStyle(style.normalTextStyle); + loopIdx++; + for (String key : keySet) { + String value = ""; + + try { + if (t instanceof Map) { + Object o = ((Map) t).get(key); + if (o instanceof String) { + value = o.toString(); + } else if (o instanceof Integer || o instanceof Double) { + value = String.valueOf(o); + } else if (o instanceof BigDecimal) { + value = ((BigDecimal) o).toString(); + } + } else { + Field f = t.getClass().getDeclaredField(key); + f.setAccessible(true); + Object val = f.get(t); + if (val != null) { + value = val.toString(); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + cell = row.createCell(loopIdx); + cell.setCellValue(value); + cell.setCellStyle(style.normalTextStyle); + loopIdx++; + } + } + + return wb; + } +} diff --git a/src/main/java/kcg/faics/cmmn/excel/ExcelStyle.java b/src/main/java/kcg/faics/cmmn/excel/ExcelStyle.java new file mode 100644 index 0000000..8358ddd --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/excel/ExcelStyle.java @@ -0,0 +1,128 @@ +package kcg.faics.cmmn.excel; + +import org.apache.poi.ss.usermodel.BorderStyle; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.DataFormat; +import org.apache.poi.ss.usermodel.Font; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFColor; +import org.apache.poi.xssf.usermodel.XSSFFont; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +/** + * ExcelStyle.java + * @author 임새미 + * @since 2016. 10. 14. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 14. 임새미 최초생성 + * + */ +public class ExcelStyle { + + private XSSFFont normalFont; + private XSSFFont boldFont; + private XSSFFont titleFont; + + private XSSFColor yellowColor = new XSSFColor(new java.awt.Color(255, 255, 238)); + private XSSFColor grayColor = new XSSFColor(new java.awt.Color(238, 238, 238)); + private XSSFColor cyanColor = new XSSFColor(new java.awt.Color(238, 255, 255)); + + private DataFormat numericFormat; + + public XSSFCellStyle titleStyle; + public XSSFCellStyle headerStyle; + public XSSFCellStyle firstRowTextStyle; + public XSSFCellStyle firstRowNumericStyle; + public XSSFCellStyle normalTextStyle; + public XSSFCellStyle normalLeftBoldTextStyle; + public XSSFCellStyle normalNumericStyle; + + + public ExcelStyle(XSSFWorkbook wb) { + defindeStyle(wb); + } + + private void defindeStyle(XSSFWorkbook wb) { + + numericFormat = wb.createDataFormat(); + + titleStyle = (XSSFCellStyle) wb.createCellStyle(); + headerStyle = (XSSFCellStyle) wb.createCellStyle(); + firstRowTextStyle = (XSSFCellStyle) wb.createCellStyle(); + firstRowNumericStyle = (XSSFCellStyle) wb.createCellStyle(); + normalTextStyle = (XSSFCellStyle) wb.createCellStyle(); + normalLeftBoldTextStyle = (XSSFCellStyle) wb.createCellStyle(); + normalNumericStyle = (XSSFCellStyle) wb.createCellStyle(); + + normalFont = (XSSFFont) wb.createFont(); + normalFont.setFontName("돋음"); + normalFont.setFontHeightInPoints((short) 9); + normalFont.setBoldweight(Font.BOLDWEIGHT_NORMAL); + + boldFont = (XSSFFont) wb.createFont(); + boldFont.setFontName("돋음"); + boldFont.setFontHeightInPoints((short) 9); + boldFont.setBoldweight(Font.BOLDWEIGHT_BOLD); + + titleFont = (XSSFFont) wb.createFont(); + titleFont.setFontName("돋음"); + titleFont.setFontHeightInPoints((short) 12); + titleFont.setBoldweight(Font.BOLDWEIGHT_BOLD); + + titleStyle.setFont(titleFont); + titleStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + + headerStyle.setAlignment(CellStyle.ALIGN_CENTER); + headerStyle.setFont(boldFont); + headerStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + headerStyle.setBorderTop(BorderStyle.HAIR); + headerStyle.setBorderLeft(BorderStyle.HAIR); + headerStyle.setBorderRight(BorderStyle.HAIR); + headerStyle.setBorderBottom(BorderStyle.HAIR); + headerStyle.setFillForegroundColor(grayColor); + headerStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); + + firstRowTextStyle.setAlignment(CellStyle.ALIGN_CENTER); + firstRowTextStyle.setFont(normalFont); + firstRowTextStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + firstRowTextStyle.setBorderTop(BorderStyle.HAIR); + firstRowTextStyle.setBorderLeft(BorderStyle.HAIR); + firstRowTextStyle.setBorderRight(BorderStyle.HAIR); + firstRowTextStyle.setBorderBottom(BorderStyle.HAIR); + firstRowTextStyle.setFillForegroundColor(yellowColor); + firstRowTextStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); + + firstRowNumericStyle.setAlignment(CellStyle.ALIGN_CENTER); + firstRowNumericStyle.setFont(normalFont); + firstRowNumericStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + firstRowNumericStyle.setBorderTop(BorderStyle.HAIR); + firstRowNumericStyle.setBorderLeft(BorderStyle.HAIR); + firstRowNumericStyle.setBorderRight(BorderStyle.HAIR); + firstRowNumericStyle.setBorderBottom(BorderStyle.HAIR); + firstRowNumericStyle.setFillForegroundColor(yellowColor); + firstRowNumericStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); + firstRowNumericStyle.setDataFormat(numericFormat.getFormat("#,###")); + + normalTextStyle.setAlignment(CellStyle.ALIGN_CENTER); + normalTextStyle.setFont(normalFont); + normalTextStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + normalTextStyle.setBorderTop(BorderStyle.HAIR); + normalTextStyle.setBorderLeft(BorderStyle.HAIR); + normalTextStyle.setBorderRight(BorderStyle.HAIR); + normalTextStyle.setBorderBottom(BorderStyle.HAIR); + + + normalNumericStyle.setAlignment(CellStyle.ALIGN_CENTER); + normalNumericStyle.setFont(normalFont); + normalNumericStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + normalNumericStyle.setBorderTop(BorderStyle.HAIR); + normalNumericStyle.setBorderLeft(BorderStyle.HAIR); + normalNumericStyle.setBorderRight(BorderStyle.HAIR); + normalNumericStyle.setBorderBottom(BorderStyle.HAIR); + normalNumericStyle.setDataFormat(numericFormat.getFormat("#,###")); + + } + +} diff --git a/src/main/java/kcg/faics/cmmn/excel/ExcelView.java b/src/main/java/kcg/faics/cmmn/excel/ExcelView.java new file mode 100644 index 0000000..10ff330 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/excel/ExcelView.java @@ -0,0 +1,70 @@ +/** + * ExcelView.java + * @author 임새미 + * @since 2016. 10. 14. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 14. 임새미 최초생성 + * + */ +package kcg.faics.cmmn.excel; + +import java.net.URLEncoder; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.poi.xssf.usermodel.XSSFCell; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import egovframework.rte.fdl.excel.util.AbstractPOIExcelView; + +/** + * ExcelView.java + * @author 임새미 + * @since 2016. 10. 14. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 14. 임새미 최초생성 + * + */ +public class ExcelView extends AbstractPOIExcelView { + + /** + * 엑셀파일을 다운로드한다. + * + * @param model Model객체 + * @param model Model객체 + * @param model Model객체 + * @param model Model객체 + */ + @Override + protected void buildExcelDocument(Map model, XSSFWorkbook wb, HttpServletRequest req, HttpServletResponse res) throws Exception { + + if(model.get("filename") != null){ + String userAgent = req.getHeader("User-Agent"); + String fileName = (String)model.get("filename"); + if(userAgent.indexOf("MSIE") > -1){ + fileName = URLEncoder.encode(fileName, "utf-8"); + }else{ + fileName = new String(fileName.getBytes("utf-8"), "iso-8859-1"); + } + model.put("filename", fileName); + } + + ExcelExport export = (ExcelExport) model.get("excel"); + try { + export.makeExcel(wb); + } catch (Exception e) { + e.printStackTrace(); + XSSFSheet sheet = wb.createSheet("sheet1"); + XSSFCell cell = getCell(sheet, 0, 0); + setText(cell, "Error"); + } + + } +} diff --git a/src/main/java/kcg/faics/cmmn/excel/package-info.java b/src/main/java/kcg/faics/cmmn/excel/package-info.java new file mode 100644 index 0000000..89fa9cf --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/excel/package-info.java @@ -0,0 +1,8 @@ +/** + * 엑셀 Export 관련 패키지. + */ +/** + * @author kimnomin + * + */ +package kcg.faics.cmmn.excel; \ No newline at end of file diff --git a/src/main/java/kcg/faics/cmmn/file/FileResponser.java b/src/main/java/kcg/faics/cmmn/file/FileResponser.java new file mode 100644 index 0000000..1ddccb9 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/file/FileResponser.java @@ -0,0 +1,123 @@ +package kcg.faics.cmmn.file; + +import java.io.File; +import java.io.IOException; +import java.net.URLEncoder; + +import javax.activation.MimetypesFileTypeMap; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 파일 반환 관련 클래스. + * + * @author kimnomin + * + */ +public final class FileResponser { + + /** + * 생성자. + */ + private FileResponser() { + + } + + /** + * 브라우저 구분을 반환한다. + * + * @param request + * HttpServletRequest 객체 + * @return 브라우저 구분 + */ + private static String getBrowser(final HttpServletRequest request) { + String header = request.getHeader("User-Agent"); + if (header.indexOf("MSIE") > -1) { + return "MSIE"; + } else if (header.indexOf("Trident") > -1) { // IE11 문자열 깨짐 방지 + return "Trident"; + } else if (header.indexOf("Chrome") > -1) { + return "Chrome"; + } else if (header.indexOf("Opera") > -1) { + return "Opera"; + } + return "Firefox"; + } + + /** + * Disposition 지정하기. + * + * @param filename + * 파일명 + * @param request + * HttpServletRequest 객체 + * @param response + * HttpServletResponse 객체 + * @throws Exception + * 기본 예외 처리 + */ + private static void setDisposition(final String filename, + final HttpServletRequest request, final HttpServletResponse response) + throws Exception { + String browser = getBrowser(request); + + String dispositionPrefix = "inline; filename="; + String encodedFilename = null; + + if (browser.equals("MSIE")) { + encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20"); + } else if (browser.equals("Trident")) { // IE11 문자열 깨짐 방지 + encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20"); + } else if (browser.equals("Firefox")) { + encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; + } else if (browser.equals("Opera")) { + encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; + } else if (browser.equals("Chrome")) { + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < filename.length(); i++) { + char c = filename.charAt(i); + if (c > '~') { + sb.append(URLEncoder.encode("" + c, "UTF-8")); + } else { + sb.append(c); + } + } + encodedFilename = sb.toString(); + } else { + // throw new RuntimeException("Not supported browser"); + throw new IOException("Not supported browser"); + } + + response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename); + + if ("Opera".equals(browser)) { + response.setContentType("application/octet-stream;charset=UTF-8"); + } + } + + /** + * 파일 반환을 위해 Response 객체를 설정한다. + * + * @param file 파일 객체 + * @param fileOrgName 실제 파일명 + * @param request HttpServletRequest 객체 + * @param response HttpServletResponse 객체 + */ + public static void setResponse(final File file, + final String fileOrgName, + final HttpServletRequest request, final HttpServletResponse response) { + if (file == null || request == null || response == null) { + return; + } + + MimetypesFileTypeMap mimeUtil = new MimetypesFileTypeMap(); + String mimeType = mimeUtil.getContentType(fileOrgName); + response.setContentType(mimeType); + response.setContentLength((int) file.length()); + try { + setDisposition(fileOrgName, request, response); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/kcg/faics/cmmn/file/FileUploadUtil.java b/src/main/java/kcg/faics/cmmn/file/FileUploadUtil.java new file mode 100644 index 0000000..43624fc --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/file/FileUploadUtil.java @@ -0,0 +1,135 @@ +/** + * FileUploadUtil.java + * @author 임새미 + * @since 2016. 10. 28. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 28. 임새미 최초생성 + * + */ +package kcg.faics.cmmn.file; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import javax.annotation.Resource; + +import kcg.faics.cmmn.egov.EgovResourceCloseHelper; +import kcg.faics.cmmn.egov.file.EgovFileMngUtil; +import kcg.faics.cmmn.egov.util.EgovStringUtil; +import kcg.faics.cmmn.egov.util.EgovWebUtil; + +import org.apache.commons.io.FilenameUtils; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import egovframework.rte.fdl.property.EgovPropertyService; + +/** + * FileUploadUtil.java + * @author 임새미 + * @since 2016. 10. 28. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 28. 임새미 최초생성 + * + */ +@Component("fileUploadUtil") +public class FileUploadUtil extends EgovFileMngUtil { + + /** + * 프로퍼티 서비스. + */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertyService; + + /** Buffer size */ + public static final int BUFFER_SIZE = 8192; + + /** + * 파일 분리 문자. + */ + public static final String SEPERATOR = File.separator; + + /** + * MultipartFile을 서버에 저장한다. + * + * @param mFile + * 파일 객체 + * @param path + * 파일이 저장될 경로 Global Property명 + * @return 저장된 파일명 + * @throws Exception + * 기본 예외 처리 + */ + public String uploadWithExt(final MultipartFile mFile, final String path) throws Exception { + String storePathString = ""; + if ("".equals(path) || path == null) { + storePathString = propertyService.getString("Globals.fileStorePath"); + } else { + storePathString = propertyService.getString(path); + } + + String tmp = mFile.getOriginalFilename(); + + if (tmp.lastIndexOf("\\") >= 0) { + tmp = tmp.substring(tmp.lastIndexOf("\\") + 1); + } + + //String ext = "." + tmp.substring(tmp.lastIndexOf(".") + 1, tmp.length()).toLowerCase(); + String ext = FilenameUtils.getExtension(tmp); + String saveName = EgovStringUtil.getTimeStamp() + "." + ext; + saveName = super.makeNewFileName(storePathString, saveName); + //saveName = saveName.substring(0, saveName.length() - 3) + ext; + + if (mFile.getSize() > 0) { + InputStream is = null; + try { + is = mFile.getInputStream(); + saveFile(is, new File(EgovWebUtil.filePathBlackList(storePathString + saveName))); + } finally { + if (is != null) { + is.close(); + } + } + } + return saveName; + } + + /** + * Stream으로부터 파일을 저장함. + * @param is InputStream + * @param file File + * @throws IOException + */ + private long saveFile(final InputStream is, final File file) throws IOException { + // 디렉토리 생성 + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + + OutputStream os = null; + long size = 0L; + + try { + os = new FileOutputStream(file); + + int bytesRead = 0; + byte[] buffer = new byte[BUFFER_SIZE]; + + while ((bytesRead = is.read(buffer, 0, BUFFER_SIZE)) != -1) { + size += bytesRead; + os.write(buffer, 0, bytesRead); + } + } finally { + EgovResourceCloseHelper.close(os); + } + + return size; + } +} diff --git a/src/main/java/kcg/faics/cmmn/file/package-info.java b/src/main/java/kcg/faics/cmmn/file/package-info.java new file mode 100644 index 0000000..fef89cf --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/file/package-info.java @@ -0,0 +1,8 @@ +/** + * 파일관련 Package. + */ +/** + * @author kimnomin + * + */ +package kcg.faics.cmmn.file; \ No newline at end of file diff --git a/src/main/java/kcg/faics/cmmn/json/CustomObjectMapper.java b/src/main/java/kcg/faics/cmmn/json/CustomObjectMapper.java new file mode 100644 index 0000000..3a36019 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/json/CustomObjectMapper.java @@ -0,0 +1,29 @@ +/** + * + */ +package kcg.faics.cmmn.json; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ser.DefaultSerializerProvider; + + +/** + * CustomObjectMapper.java + * @author 임새미 + * @since 2016. 9. 29. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 9. 29. 임새미 최초생성 + * + */ +public class CustomObjectMapper extends ObjectMapper { + + private static final long serialVersionUID = 1L; + + public CustomObjectMapper() { + DefaultSerializerProvider.Impl sp = new DefaultSerializerProvider.Impl(); + sp.setNullValueSerializer(new NullSerializer()); + this.setSerializerProvider(sp); + } +} \ No newline at end of file diff --git a/src/main/java/kcg/faics/cmmn/json/NullSerializer.java b/src/main/java/kcg/faics/cmmn/json/NullSerializer.java new file mode 100644 index 0000000..03eadf8 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/json/NullSerializer.java @@ -0,0 +1,29 @@ +/** + * + */ +package kcg.faics.cmmn.json; + +import java.io.IOException; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + + +/** + * NullSerializer.java + * @author 임새미 + * @since 2016. 9. 29. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 9. 29. 임새미 최초생성 + * + */ +public class NullSerializer extends JsonSerializer { + @Override + public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { + jsonGenerator.writeString(""); + } +} diff --git a/src/main/java/kcg/faics/cmmn/service/CodeService.java b/src/main/java/kcg/faics/cmmn/service/CodeService.java new file mode 100644 index 0000000..2f57322 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/service/CodeService.java @@ -0,0 +1,369 @@ +/** + * CommonService.java + * @author 임새미 + * @since 2016. 10. 13. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 13. 임새미 최초생성 + * + */ +package kcg.faics.cmmn.service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import kcg.faics.cmmn.vo.CodeVO; + +/** + * 코드 관련 Service Interface. + * + * @author kimnomin + * + */ +public interface CodeService { + /** + * 목록 중 전체를 표현하는 값. + */ + String LIST_ALL_VAL = "ALL"; + /** + * 목록 중 전체를 표현하는 문자열. + */ + String LIST_ALL_STR = "전체"; + /** + * 권한 대분류코드. + */ + String CODE1_AUTH = "AUTH"; + /** + * 소속 대분류코드. + */ + String CODE1_PLACE1 = "C001"; + /** + * 계급 대분류 코드. + */ + String CODE1_POSITION = "C002"; + /** + * 치안대상 업종 대분류코드. + */ + String CODE1_COPR = "CORP"; + /** + * 교육과정 대분류 코드. + */ + String CODE1_EDU_COURSE = "EDUC"; + /** + * 교육기관 대분류 코드. + */ + String CODE1_EDU_PLACE = "EDUP"; + + /** + * 소속 구조. + */ + Map PLACE_CATEGORY = new TreeMap(String.CASE_INSENSITIVE_ORDER) { + /** + * serialVersionUID. + */ + private static final long serialVersionUID = -8213220033671425747L; + + { + //중부본부 + put("ps90", new String[] { "PS14", "PS16", "PS05", "PS02", "PS50" }); + //제주본부 + put("PS91", new String[] { "PS13", "PS17" }); + //서해본부 + put("PS92", new String[] { "PS06", "PS07", "PS08", "PS09", "ps18" }); + //남해본부 + put("PS93", new String[] { "PS01", "PS11", "PS15", "PS12" }); + //동해본부 + //20171226 울진해양경찰서 추가(PS19) + put("PS94", new String[] { "PS03", "PS04", "PS10", "PS19" }); + put("PS95", new String[] {}); + put("PS96", new String[] {}); + put("PS97", new String[] {}); + put("PS99", new String[] {}); + } + }; + + /** + * 외사대상목표 - 치안대상 그룹정보. + */ + HashMap CORP_GROUP = new HashMap() { + /** + * serialVersionUID. + */ + private static final long serialVersionUID = -4741380958901687806L; + + { + put("01", "업무협조기관"); + put("02", "해운.항만관련 협회"); + put("03", "외사관련업체"); + put("04", "외국인고용업체"); + put("05", "외국인투자업체"); + } + }; + + /** + * 해양경비안전서 코드목록. + * + *
+	 * 서귀포해양경비안전서 코드가 변경되었는데 기존 PHP 소스에서는 수정하지 않고 그대로 사용한 듯 하여
+	 * PS98 -> PS17 로 변경하였다.
+	 * 
+	 * 20170330 서해5도특별단 추가(PS50)
+	 * 20171226 울진해양경찰서 추가(PS19)
+	 * 
+ */ + String[] POLICE_STATION_LIST = { "PS01", "PS02", "PS03", "PS04", "PS05", "PS06", + "PS07", "PS08", "PS09", "PS10", "PS11", "PS12", "PS13", "PS14", "PS16", "PS17", "ps18", "PS19", "PS50" }; + + /** + * 코드 정보를 반환한다. + * + * @param code1 + * 대분류 코드 + * @param code2 + * 중분류 코드 + * @return 코드 정보 + * @throws Exception + * 기본 예외 처리 + */ + CodeVO getCodeValue(String code1, String code2) throws Exception; + + /** + * 코드 목록을 반환한다. + * + * @param code1 + * 대분류코드 + * @param code2 + * 중분류코드 + * @return CodeVO 객체 리스트 + * @throws Exception + * 기본 예외 처리 + */ + List getCodeValues(String code1, String code2) throws Exception; + + /** + * 소속 1 Detph를 반환한다. + * + * @param onlyCentral + * 중앙부처만 반환 - true, 모든 목록반환 - false + * @return 소속 1 목록 + * @throws Exception + * 기본 예외 처리 + */ + List getPlace1List(boolean onlyCentral) throws Exception; + + /** + * 소속 1 Detph를 반환한다. + * + * @param onlyCentral + * 중앙부처만 반환 - true, 모든 목록반환 - false + * @param includeAll + * "전체" 포함여부 + * @return 소속 1 목록 + * @throws Exception + * 기본 예외 처리 + */ + List getPlace1List(boolean onlyCentral, boolean includeAll) throws Exception; + + /** + * codes에 해당하는 소속기관을 반환한다. + * + * @param codes 소속기관 CODE + * @return 소속기관 목록 + * @throws Exception + * 기본 예외 처리 + */ + List getPlace1List(String[] codes) throws Exception; + + /** + * codes에 해당하는 소속기관을 반환한다. + * + * @param codes 소속기관 CODE + * @param includeAll "전체" 포함여부 + * @return 소속기관 목록 + * @throws Exception + * 기본 예외 처리 + */ + List getPlace1List(String[] codes, boolean includeAll) throws Exception; + + /** + * 소속 1 Depth 중 code1의 하위 기관을 반환한다. 기존 소스의 get_agency_list와 동일 + * + * @param place1Code + * 소속 1 Depth Code + * @return 하위 기관 목록 + * @throws Exception + * 기본 예외 처리 + */ + List getPlace1SubList(String place1Code) throws Exception; + + /** + * 소속1을 포함한 소속 1 Depth 중 code1의 하위 기관을 반환한다. + * + * @param place1Code + * 소속 1 Depth Code + * @return 하위 기관 목록 + * @throws Exception + * 기본 예외 처리 + */ + List getPlace1SubListWithMain(String place1Code) throws Exception; + + /** + * 소속 1 Depth 중 code1의 상위 기관 코드를 반환한다. 기존 소스의 get_agency_code와 동일 + * + * @param place1Code + * 소속 1 Depth Code + * @return 상위 기관 코드 + * @throws Exception + * 기본 예외 처리 + */ + String getPlace1HighCode(String place1Code) throws Exception; + + /** + * 소속 기관명을 반환한다. + * + * @param placeCode 소속 코드 + * @return 소속 기관명 + * @throws Exception + * 기본 예외 처리 + */ + String getPlace1Str(final String placeCode) throws Exception; + + /** + * 소속 부서명을 반환한다. + * + * @param place1Code 소속 기관코드 + * @param place2Code 소속 부서코드 + * @return 소속 부서명 + * @throws Exception 기본 예외 처리 + */ + String getPlace2Str(final String place1Code, String place2Code) throws Exception; + + /** + * 계급 명칭을 반환한다. + * + * @param positionCode 계급 코드 + * @return 계급 명칭 + * @throws Exception 기본 예외 처리 + */ + String getPositionStr(final String positionCode) throws Exception; + + /** + * 계급 코드 리스트를 반환한다. + * @return 계급 코드 리스트 + * @throws Exception + * 기본 예외 처리 + */ + List getPositionList() throws Exception; + + /** + * 하위소속 코드 리스트를 반환한다. + * @param codeVO 상위소속 코드 + * @return 소속 코드 리스트 + * @throws Exception + * 기본 예외 처리 + */ + List getPlace2List(CodeVO codeVO) throws Exception; + + /** + * 세부소속 코드 리스트를 반환한다. + * @param codeVO 상위소속 코드 + * @return 소속 코드 리스트 + * @throws Exception + * 기본 예외 처리 + */ + List getPlace3List(CodeVO codeVO) throws Exception; + + /** + * 직위 코드 리스트를 반환한다. + * @return 직위 코드 리스트 + * @throws Exception + * 기본 예외 처리 + */ + List getDutiesList() throws Exception; + + /** + * 직별 코드 리스트를 반환한다. + * @return 직별 코드 리스트 + * @throws Exception + * 기본 예외 처리 + */ + List getJobTypeList() throws Exception; + + /** + * 학력 코드 리스트를 반환한다. + * @return 학력 코드 리스트 + * @throws Exception + * 기본 예외 처리 + */ + List getScholarshipList() throws Exception; + + /** + * 외사대상 관련업체/기관 분류 목록을 반환한다. + * + * @return 외사대상 관련업체/기관 분류 + * @throws Exception + * 기본 예외 처리 + */ + List getCorpOrgList() throws Exception; + + /** + * 교육과정 목록을 반환한다. + * + * @param includeAll + * "전체" 포함여부 + * @return 교육과정 목록 + * @throws Exception + * 기본 예외 처리 + */ + List getEduCourse(final boolean includeAll) throws Exception; + + /** + * 교육기관 목록을 반환한다. + * + * @param includeAll + * "전체" 포함여부 + * @return 교육기관 목록 + * @throws Exception + * 기본 예외 처리 + */ + List getEduPlace(final boolean includeAll) throws Exception; + + /** + * 권한 목록을 반환한다. + * + * @return 권한 목록 + * @throws Exception + * 기본 예외 처리 + */ + List getAuthList() throws Exception; + + /** + * code를 수정한다. + * + * @param codeVO CodeVO 객체 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + int updateCode(final CodeVO codeVO) throws Exception; + + /** + * code를 추가한다. + * + * @param codeVO CodeVO 객체 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + int insertCode(final CodeVO codeVO) throws Exception; + + /** + * code를 삭제한다. + * + * @param codeVO CodeVO 객체 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + int deleteCode(final CodeVO codeVO) throws Exception; +} diff --git a/src/main/java/kcg/faics/cmmn/service/LogService.java b/src/main/java/kcg/faics/cmmn/service/LogService.java new file mode 100644 index 0000000..bb7c30c --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/service/LogService.java @@ -0,0 +1,50 @@ +package kcg.faics.cmmn.service; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.admin.vo.LogSearchVO; +import kcg.faics.admin.vo.LogVO; + +/** + * LogService.java + * @author 임새미 + * @since 2016. 11. 10. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 11. 10. 임새미 최초생성 + * + */ +public interface LogService { + + List getUserLogList(LogSearchVO searchVO) throws Exception; + + /** + * 사용자 로그를 추가한다. + * + * @param paramMap 파라미터 맵 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + int insertUserLog(HashMap paramMap) throws Exception; + + /** + * 검색 키워드에 따른 총 로그 개수를 조회한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @return 로그 개수 + * @exception Exception 기본 예외 처리 + */ + int selectListCnt(LogSearchVO searchVO) throws Exception; + + /** + * 전체 로그 개수를 가져온다. + * @param searchVO + * + * @return 로그 개수 + * @throws Exception 기본 예외 처리 + */ + int selectTotalCnt(LogSearchVO searchVO) throws Exception; + +} diff --git a/src/main/java/kcg/faics/cmmn/service/MenuService.java b/src/main/java/kcg/faics/cmmn/service/MenuService.java new file mode 100644 index 0000000..f030c93 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/service/MenuService.java @@ -0,0 +1,61 @@ +package kcg.faics.cmmn.service; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.cmmn.MenuPosition; +import kcg.faics.cmmn.vo.MenuVO; + +/** + * 메뉴관련 서비스 객체. + * + * @author kimnomin + * + */ +public interface MenuService { + + /** + * 현재 메뉴와 상위메뉴 목록을 반환한다. + * + * @param menuVO + * 검색조건 VO + * @return 현재 메뉴를 포함한 상위메뉴 목록 + */ + List selectListWithHigher(MenuVO menuVO); + + /** + * 메뉴 목록을 반환한다. + * + * @param menuVO + * 검색조건 VO + * @return 메뉴 목록 + */ + List selectMainMenuList(MenuVO menuVO); + + /** + * 상단 보조메뉴 목록을 반환한다. + * + * @param menuVO + * 검색조건 VO + * @return 상단 보조메뉴 목록 + */ + List selectTopSubMenuList(MenuVO menuVO); + + /** + * 게시판 메뉴에 대한 정보를 가져온다. + * + * @param menu + * 가져올 메뉴정보 + * @return 데이터 맵 + */ + HashMap getMenuInfo(HashMap menu); + + /** + * 서브 메뉴에 대한 정보를 가져온다. + * + * @param menu + * 가져올 메뉴정보 + * @return 데이터 맵 + */ + List> getSubmenu(HashMap menu); +} diff --git a/src/main/java/kcg/faics/cmmn/service/impl/CodeMapper.java b/src/main/java/kcg/faics/cmmn/service/impl/CodeMapper.java new file mode 100644 index 0000000..91c164a --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/service/impl/CodeMapper.java @@ -0,0 +1,229 @@ +/** + * CommonMapper.java + * @author 임새미 + * @since 2016. 10. 13. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 13. 임새미 최초생성 + * + */ +package kcg.faics.cmmn.service.impl; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.cmmn.vo.CodeVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +/** + * 코드 관련 Mapper. + * + * @author kimnomin + * + */ +@Repository("codeMapper") +public class CodeMapper extends EgovAbstractMapper { + /** + * 코드를 가져온다. + * + * @param code1 + * 대분류코드 + * @param code2 + * 중분류코드 + * @return CodeVO 객체 리스트 + * @throws Exception + * 기본 예외 처리 + */ + public List getCodeValues(final String code1, final String code2) + throws Exception { + + CodeVO codeVO = new CodeVO(); + codeVO.setCode1(code1); + codeVO.setCode2(code2); + + return selectList("Code.getCodeValues", codeVO); + } + + /** + * 소속 1 Detph를 반환한다. + * + * @param onlyCentral + * 중앙부처만 반환 - true, 모든 목록반환 - false + * @return 소속 1 목록 + * @throws Exception 기본 예외 처리 + */ + public List getPlace1List(final boolean onlyCentral) throws Exception { + return selectList("Code.getPlace1List", onlyCentral); + } + + /** + * 계급 코드 리스트를 반환한다. + * @return 계급 코드 리스트 + * @throws Exception + */ + public List getPositionList() throws Exception { + return selectList("Code.getPositionList"); + }; + + /** + * 하위소속 코드 리스트를 반환한다. + * @param codeVO 상위소속 코드 + * @return 소속 코드 리스트 + * @throws Exception + */ + public List getPlace2List(CodeVO codeVO) throws Exception { + return selectList("Code.getPlace2List", codeVO); + }; + + /** + * 세부소속 코드 리스트를 반환한다. + * @param codeVO 상위소속 코드 + * @return 소속 코드 리스트 + * @throws Exception + */ + public List getPlace3List(CodeVO codeVO) throws Exception { + return selectList("Code.getPlace3List", codeVO); + }; + + /** + * 직위 코드 리스트를 반환한다. + * @return 직위 코드 리스트 + * @throws Exception + */ + public List getDutiesList() throws Exception { + return selectList("Code.getDutiesList"); + }; + + /** + * 직별 코드 리스트를 반환한다. + * @return 직별 코드 리스트 + * @throws Exception + */ + public List getJobTypeList() throws Exception { + return selectList("Code.getJobTypeList"); + }; + + /** + * 학력 코드 리스트를 반환한다. + * @return 학력 코드 리스트 + * @throws Exception + */ + public List getScholarshipList() throws Exception { + return selectList("Code.getScholarshipList"); + }; + + /** + * 코드에 해당하는 소속기관의 이름을 가져온다. + * + * @param code 소속기관 코드 + * @param + * @return 소속기관 명 + */ + public String getPlace1NameByCode(String code, boolean yak) { + CodeVO codeVO = selectOne("Code.getPlace1NameByCode", code); + return (yak) ? codeVO.getCodenmYak() : codeVO.getCodenm(); + } + + /** + * 코드에 해당하는 이름을 가져온다. + * + * @param place1 소속기관 코드 + * @param place2 소속부서 코드 + * @return 소속부서 명 + */ + public String getPlace2NameByCode(String code1, String code2) { + HashMap map = new HashMap(); + map.put("code1", code1); + map.put("code2", code2); + return selectOne("Code.getPlace2NameByCode", map); + } + + /** + * 코드에 해당하는 이름을 가져온다. + * + * @param place1 소속기관 코드 + * @param place2 소속부서 코드 + * @return 소속부서 명 + */ + public String getPlace3NameByCode(String code2) { + return selectOne("Code.getPlace3NameByCode", code2); + } + + /** + * 코드에 해당하는 계급의 이름을 가져온다. + * + * @param code 계급 코드 + * @return 계급 명 + */ + public String getPositionNameByCode(String code) { + return selectOne("Code.getPositionNameByCode", code); + } + + /** + * 코드에 해당하는 직위의 이름을 가져온다. + * + * @param code 직위 코드 + * @return 직위 명 + */ + public String getDutiesNameByCode(String code) { + return selectOne("Code.getDutiesNameByCode", code); + } + + /** + * 코드에 해당하는 직별의 이름을 가져온다. + * + * @param code 직별 코드 + * @return 직별 명 + */ + public String getJobtypeNameByCode(String code) { + return selectOne("Code.getJobtypeNameByCode", code); + } + + /** + * 코드에 해당하는 학위의 이름을 가져온다. + * + * @param code 학위 코드 + * @return 학위 명 + */ + public String getScholarshipNameByCode(String code) { + return selectOne("Code.getScholarshipNameByCode", code); + } + + /** + * code를 수정한다. + * + * @param codeVO CodeVO 객체 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int updateCode(final CodeVO codeVO) throws Exception { + return update("Code.updateCode", codeVO); + } + + /** + * code를 추가한다. + * + * @param codeVO CodeVO 객체 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int insertCode(final CodeVO codeVO) throws Exception { + return insert("Code.insertCode", codeVO); + } + + /** + * code를 삭제한다. + * + * @param codeVO CodeVO 객체 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int deleteCode(CodeVO codeVO) { + return delete("Code.deleteCode", codeVO); + } + +} diff --git a/src/main/java/kcg/faics/cmmn/service/impl/CodeServiceImpl.java b/src/main/java/kcg/faics/cmmn/service/impl/CodeServiceImpl.java new file mode 100644 index 0000000..5630179 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/service/impl/CodeServiceImpl.java @@ -0,0 +1,380 @@ +/** + * CommonService.java + * @author 임새미 + * @since 2016. 10. 13. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 13. 임새미 최초생성 + * + */ +package kcg.faics.cmmn.service.impl; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.cmmn.vo.CodeVO; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + + +/** + * 코드 관련 비즈니스 로직. + * + * @author kimnomin + * + */ +@Service("codeService") +public class CodeServiceImpl implements CodeService { + + /** + * CodeMapper. + */ + @Resource(name = "codeMapper") + private CodeMapper codeMapper; + + /** + * List 객체 첫번째 인덱스에 "전체" 항목을 추가하여 반환한다. + * + * @param list List 객체 + * @return "전체" 항목이 추가된 List 객체 + */ + private List addAll(final List list) { + if (list != null) { + CodeVO allVO = new CodeVO(); + allVO.setCode1(LIST_ALL_VAL); + allVO.setCode2(LIST_ALL_VAL); + allVO.setCodenm(LIST_ALL_STR); + allVO.setCodenmYak(LIST_ALL_STR); + list.add(0, allVO); + } + return list; + } + + @Override + public CodeVO getCodeValue(final String code1, final String code2) throws Exception { + CodeVO codeVO; + List codes = getCodeValues(code1, code2); + if (codes.size() <= 0) { + codeVO = null; + } else { + codeVO = codes.get(0); + } + return codeVO; + } + + @Override + public List getCodeValues(final String code1, final String code2) throws Exception { + + List codeVOList = new ArrayList(); + + try { + codeVOList = codeMapper.getCodeValues(code1, code2); + } catch (Exception e) { + e.printStackTrace(); + codeVOList = null; + } + + return codeVOList; + } + + @Override + public List getPlace1List(final boolean onlyCentral) throws Exception { + List codeVOList = new ArrayList(); + + try { + codeVOList = codeMapper.getPlace1List(onlyCentral); + } catch (Exception e) { + e.printStackTrace(); + codeVOList = null; + } + + return codeVOList; + } + + @Override + public List getPlace1List(final boolean onlyCentral, final boolean includeAll) + throws Exception { + List codeVOList = getPlace1List(onlyCentral); + if (includeAll) { + codeVOList = addAll(codeVOList); + } + return codeVOList; + } + + @Override + public List getPlace1List(final String[] codes) { + List codeVOList = new ArrayList(); + List policeStationList = Arrays.asList(CodeService.POLICE_STATION_LIST); + + boolean isContains = false; + try { + codeVOList = codeMapper.getPlace1List(false); + for (Iterator it = codeVOList.iterator(); it.hasNext(); ) { + isContains = false; + CodeVO vo = it.next(); + + for (String item : policeStationList) { + if (item.equalsIgnoreCase(vo.getCode2())) { + isContains = true; + break; + } + } + + if (!isContains) { + it.remove(); + } + } + } catch (Exception e) { + e.printStackTrace(); + codeVOList = null; + } + + + + return codeVOList; + } + + @Override + public List getPlace1List(final String[] codes, final boolean includeAll) + throws Exception { + List codeVOList = getPlace1List(codes); + + if (includeAll) { + codeVOList = addAll(codeVOList); + } + + return codeVOList; + } + + @Override + public List getPlace1SubList(final String place1Code) throws Exception { + CodeVO code = new CodeVO(); + List codes = new ArrayList(); + try { + String[] subCodes = PLACE_CATEGORY.get(place1Code); + if (subCodes != null) { + for (int i = 0; i < subCodes.length; i++) { + code = getCodeValue(CODE1_PLACE1, subCodes[i]); + codes.add(code); + } + } + } catch (Exception e) { + e.printStackTrace(); + codes = null; + } + + return codes; + } + + @Override + public List getPlace1SubListWithMain(final String place1Code) throws Exception { + CodeVO code = new CodeVO(); + List codes = new ArrayList(); + try { + String[] subCodes = PLACE_CATEGORY.get(place1Code); + if (subCodes != null) { + code = getCodeValue(CODE1_PLACE1, place1Code); + codes.add(code); + + // 하위 기관 + for (int i = 0; i < subCodes.length; i++) { + code = getCodeValue(CODE1_PLACE1, subCodes[i]); + codes.add(code); + } + } + } catch (Exception e) { + e.printStackTrace(); + codes = null; + } + + return codes; + } + + @Override + public String getPlace1HighCode(final String place1Code) throws Exception { + for (Map.Entry entry : PLACE_CATEGORY.entrySet()) { + String key = entry.getKey(); + String[] values = entry.getValue(); + + for (String item : values) { + if (item.equalsIgnoreCase(place1Code)) { + return key; + } + } + } + return place1Code; + } + + @Override + public String getPlace1Str(final String placeCode) throws Exception { + String retVal = ""; + if (StringUtils.isBlank(placeCode)) { + retVal = ""; + } else { + CodeVO codeVO = getCodeValue(CODE1_PLACE1, placeCode); + retVal = codeVO.getCodenm(); + } + return retVal; + } + + @Override + public String getPlace2Str(final String place1Code, final String place2Code) + throws Exception { + String retVal = ""; + if (StringUtils.isBlank(place1Code) || StringUtils.isBlank(place2Code)) { + retVal = ""; + } else { + CodeVO codeVO = getCodeValue(place1Code, place2Code); + retVal = codeVO.getCodenm(); + } + return retVal; + } + + @Override + public String getPositionStr(final String positionCode) throws Exception { + String retVal = ""; + if (StringUtils.isBlank(positionCode)) { + retVal = ""; + } else { + CodeVO codeVO = getCodeValue(CODE1_POSITION, positionCode); + retVal = codeVO.getCodenm(); + } + return retVal; + } + + /** + * 계급 코드 리스트를 반환한다. + * @return 계급 코드 리스트 + * @throws Exception + */ + @Override + public List getPositionList() throws Exception { + return codeMapper.getPositionList(); + }; + + /** + * 하위소속 코드 리스트를 반환한다. + * @param codeVO 상위소속 코드 + * @return 소속 코드 리스트 + * @throws Exception + */ + @Override + public List getPlace2List(final CodeVO codeVO) throws Exception { + return codeMapper.getPlace2List(codeVO); + }; + + /** + * 세부소속 코드 리스트를 반환한다. + * @param codeVO 상위소속 코드 + * @return 소속 코드 리스트 + * @throws Exception + */ + @Override + public List getPlace3List(final CodeVO codeVO) throws Exception { + return codeMapper.getPlace3List(codeVO); + }; + + /** + * 직위 코드 리스트를 반환한다. + * @return 직위 코드 리스트 + * @throws Exception + */ + @Override + public List getDutiesList() throws Exception { + return codeMapper.getDutiesList(); + }; + + /** + * 직별 코드 리스트를 반환한다. + * @return 직별 코드 리스트 + * @throws Exception + */ + @Override + public List getJobTypeList() throws Exception { + return codeMapper.getJobTypeList(); + }; + + /** + * 학력 코드 리스트를 반환한다. + * @return 학력 코드 리스트 + * @throws Exception + */ + @Override + public List getScholarshipList() throws Exception { + return codeMapper.getScholarshipList(); + }; + + @Override + public List getCorpOrgList() throws Exception { + return getCodeValues(CODE1_COPR, null); + } + + @Override + public List getEduCourse(final boolean includeAll) throws Exception { + List list = getCodeValues(CODE1_EDU_COURSE, null); + if (includeAll) { + list = addAll(list); + } + return list; + } + + @Override + public List getEduPlace(final boolean includeAll) throws Exception { + List list = getCodeValues(CODE1_EDU_PLACE, null); + if (includeAll) { + list = addAll(list); + } + return list; + } + + @Override + public List getAuthList() throws Exception { + return getCodeValues(CODE1_AUTH, null); + } + + /** + * code를 수정한다. + * + * @param codeVO CodeVO 객체 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @Override + public int updateCode(final CodeVO codeVO) throws Exception { + return codeMapper.updateCode(codeVO); + } + + /** + * code를 추가한다. + * + * @param codeVO CodeVO 객체 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @Override + public int insertCode(final CodeVO codeVO) throws Exception { + return codeMapper.insertCode(codeVO); + } + + /** + * code를 삭제한다. + * + * @param codeVO CodeVO 객체 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @Transactional + @Override + public int deleteCode(final CodeVO codeVO) throws Exception { + return codeMapper.deleteCode(codeVO); + } +} diff --git a/src/main/java/kcg/faics/cmmn/service/impl/LogMapper.java b/src/main/java/kcg/faics/cmmn/service/impl/LogMapper.java new file mode 100644 index 0000000..12d9d49 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/service/impl/LogMapper.java @@ -0,0 +1,85 @@ +package kcg.faics.cmmn.service.impl; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.admin.vo.LogSearchVO; +import kcg.faics.admin.vo.LogVO; +import kcg.faics.sec.LoginUserVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +/** + * LogMapper.java + * @author 임새미 + * @since 2016. 11. 10. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 11. 10. 임새미 최초생성 + * + */ +@Repository +public class LogMapper extends EgovAbstractMapper { + + + public List selectUserLog(LogSearchVO searchVO) throws Exception { + return selectList("Log.selectUserLog", searchVO); + } + public List selectLoginoutLog(LogSearchVO searchVO) throws Exception { + return selectList("Log.selectLoginoutLog", searchVO); + } + + public List> selectUrlInfo(LogVO logVO) throws Exception { + return selectList("Log.selectUrlInfo", logVO); + } + + /** + * 사용자 로그를 추가한다. + * + * @param paramMap 파라미터 맵 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int insertUserLog(HashMap paramMap) { + return insert("Log.insertUserLog", paramMap); + } + + /** + * 검색 키워드에 따른 총 로그 개수를 조회한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @return 로그 개수 + * @exception Exception 기본 예외 처리 + */ + public int selectLogListTotCnt(final LogSearchVO searchVO) throws Exception { + return (Integer) selectOne("Log.selectLogListTotCnt", searchVO); + } + + /** + * 전체 로그 개수를 가져온다. + * @param searchVO + * + * @return 로그 개수 + * @throws Exception 기본 예외 처리 + */ + public int selectLogTotalCnt(final LogSearchVO searchVO) throws Exception { + return (Integer) selectOne("Log.selectLogTotalCnt", searchVO); + } + /** + * 설명 + * + * @param 파라미터 파라미터설명 + * @return 리턴값 설명 + * @throws Exception 기본 예외 처리 + */ + public int insertLoginoutLog(LoginUserVO user, int type) { + HashMap paramMap = new HashMap(); + paramMap.put("user", user); + paramMap.put("type", type); + return (Integer) insert("Log.insertLoginoutLog", paramMap); + } + +} diff --git a/src/main/java/kcg/faics/cmmn/service/impl/LogServiceImpl.java b/src/main/java/kcg/faics/cmmn/service/impl/LogServiceImpl.java new file mode 100644 index 0000000..0f93ab2 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/service/impl/LogServiceImpl.java @@ -0,0 +1,106 @@ +/** + * LogServiceImpl.java + * @author 임새미 + * @since 2016. 11. 10. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 11. 10. 임새미 최초생성 + * + */ +package kcg.faics.cmmn.service.impl; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +import javax.annotation.Resource; + +import kcg.faics.admin.vo.LogSearchVO; +import kcg.faics.admin.vo.LogVO; +import kcg.faics.cmmn.service.LogService; + +import org.springframework.stereotype.Service; + +/** + * LogServiceImpl.java + * @author 임새미 + * @since 2016. 11. 10. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 11. 10. 임새미 최초생성 + * + */ +@Service("logService") +public class LogServiceImpl implements LogService { + + @Resource(name="logMapper") + LogMapper logMapper; + + + @Override + public List getUserLogList(LogSearchVO searchVO) throws Exception { + List result = null; + if (searchVO.getType() == 1) { + result = logMapper.selectLoginoutLog(searchVO); + } else { + result = logMapper.selectUserLog(searchVO); + Iterator it = result.iterator(); + while(it.hasNext()) { + LogVO vo = it.next(); + String url = ""; + List> maps = logMapper.selectUrlInfo(vo); + for (int i = 0; i < maps.size(); i++) { + String name = (String) maps.get(i).get("NAME"); + if (name != null) { + url = url + maps.get(i).get("NAME"); + if (maps.size() != i + 1) { + url = url + " > "; + } + } + } + vo.setLocation1(url); + } + } + + return result; + } + + /** + * 사용자 로그를 추가한다. + * + * @param paramMap 파라미터 맵 + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @Override + public int insertUserLog(HashMap paramMap) throws Exception { + return logMapper.insertUserLog(paramMap); + } + + /** + * 검색 키워드에 따른 총 로그 개수를 조회한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @return 로그 개수 + * @exception Exception 기본 예외 처리 + */ + @Override + public int selectListCnt(LogSearchVO searchVO) throws Exception { + return logMapper.selectLogListTotCnt(searchVO); + } + + /** + * 전체 로그 개수를 가져온다. + * @param searchVO + * + * @return 로그 개수 + * @throws Exception 기본 예외 처리 + */ + @Override + public int selectTotalCnt(LogSearchVO searchVO) throws Exception { + return logMapper.selectLogTotalCnt(searchVO); + } + +} diff --git a/src/main/java/kcg/faics/cmmn/service/impl/MenuMapper.java b/src/main/java/kcg/faics/cmmn/service/impl/MenuMapper.java new file mode 100644 index 0000000..9fd3645 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/service/impl/MenuMapper.java @@ -0,0 +1,64 @@ +package kcg.faics.cmmn.service.impl; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.cmmn.vo.MenuVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +@Repository("menuMapper") +public class MenuMapper extends EgovAbstractMapper { + + /** + * 현재 메뉴와 상위메뉴 목록을 반환한다. + * + * @param menuVO + * 검색조건 VO + * @return 현재 메뉴를 포함한 상위메뉴 목록 + */ + public List selectListWithHigher(final MenuVO menuVO) { + return selectList("Menu.selectListWithHigher", menuVO); + } + + /** + * 계층형 구조의 메뉴 목록을 반환한다. + * + * @param menuVO 검색조건 VO + * @return 메뉴 목록 + */ + public List selectListWithConnectBy(final MenuVO menuVO) { + return selectList("Menu.selectListWithConnectBy", menuVO); + } + + /** + * 게시판 메뉴에 대한 정보를 가져온다. + * + * @return 데이터 맵 + */ + public HashMap getMenuInfo(final HashMap menu) { + return selectOne("Menu.getMenuInfo", menu); + } + + /** + * 서브 메뉴에 대한 정보를 가져온다. + * + * @return 데이터 맵 + */ + public List> getSubmenu(final HashMap menu) { + return selectList("Menu.getSubmenu", menu); + } + + /** + * 설명 + * + * @param 파라미터 파라미터설명 + * @return 리턴값 설명 + * @throws Exception 기본 예외 처리 + */ + public HashMap getMenuInfoById(final HashMap menu) { + return selectOne("Menu.getMenuInfoById", menu); + } +} diff --git a/src/main/java/kcg/faics/cmmn/service/impl/MenuServiceImpl.java b/src/main/java/kcg/faics/cmmn/service/impl/MenuServiceImpl.java new file mode 100644 index 0000000..f946577 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/service/impl/MenuServiceImpl.java @@ -0,0 +1,121 @@ +package kcg.faics.cmmn.service.impl; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; + +import kcg.faics.cmmn.MenuPosition; +import kcg.faics.cmmn.service.MenuService; +import kcg.faics.cmmn.vo.MenuVO; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.UserUtil; + +import org.springframework.stereotype.Service; + +@Service("menuService") +public class MenuServiceImpl implements MenuService { + + /** + * MenuMapper - 메뉴 데이터처리에 관한 Mapper 클래스. + **/ + @Resource(name = "menuMapper") + private MenuMapper menuMapper; + + @Override + public List selectListWithHigher(final MenuVO menuVO) { + return menuMapper.selectListWithHigher(menuVO); + } + + @Override + public List selectMainMenuList(final MenuVO menuVO) { + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + + menuVO.setDepth(1); + menuVO.setMenuPosition(MenuPosition.TOP); + List list = menuMapper.selectListWithConnectBy(menuVO); + List menuList = new ArrayList(); + + MenuVO prevMenu = null; + for (int i = 0; i < list.size(); i++) { + MenuVO currVO = list.get(i); + if (currVO.getDepth() == 0) { + prevMenu = currVO; + menuList.add(prevMenu); + } else if (currVO.getDepth() == 1) { + + // 견문 메뉴 권한 + if (loginUserVO.getAuthSearch() <= 0 && "견문검색".equals(currVO.getName())) { + continue; + } + if (loginUserVO.getAuthStatistics() <= 0 && "견문통계".equals(currVO.getName())) { + continue; + } + if (loginUserVO.getAuthManage() <= 0 && !UserUtil.isAdmin() && "관리기능".equals(currVO.getName())) { + continue; + } + + prevMenu.getSubMenu().add(currVO); + } + } + + return menuList; + } + + @Override + public List selectTopSubMenuList(final MenuVO menuVO) { + menuVO.setDepth(0); + menuVO.setMenuPosition(MenuPosition.TOP_SUB); + return menuMapper.selectListWithConnectBy(menuVO); + } + + /** + * 게시판 메뉴에 대한 정보를 가져온다. + * + * @return 데이터 맵 + */ + @Override + public HashMap getMenuInfo(final HashMap menu) { + + HashMap paramMenu = menuMapper.getMenuInfo(menu); + + int depth = ((BigDecimal) paramMenu.get("DEPTH")).intValue(); + if (depth < 3) { + return paramMenu; + } else { + menu.put("id", ((BigDecimal) paramMenu.get("PARENT")).intValue()); + return menuMapper.getMenuInfoById(menu); + } + } + + /** + * 서브 메뉴에 대한 정보를 가져온다. + * + * @return 데이터 맵 + */ + @Override + public List> getSubmenu(final HashMap menu) { + List> submenu = menuMapper.getSubmenu(menu); + List> result = new ArrayList>(); + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + + // 견문인 경우 권한에 따라 설정해야함. + if (submenu.size() > 0 && "report".equals(submenu.get(0).get("URL_GROUP"))) { + for (HashMap map : submenu) { + if (loginUserVO.getAuthApprove() <= 0 && "/approveList.do".equals(map.get("URL"))) { + continue; + } + if ((loginUserVO.getAuthApprove() <= 0 && loginUserVO.getAuthWaitList() <= 0) && "/waitList.do".equals(map.get("URL"))) { + continue; + } + result.add(map); + } + } else { + result = submenu; + } + + return result; + } +} diff --git a/src/main/java/kcg/faics/cmmn/service/package-info.java b/src/main/java/kcg/faics/cmmn/service/package-info.java new file mode 100644 index 0000000..51ab8f4 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/service/package-info.java @@ -0,0 +1,8 @@ +/** + * 공용 데이터 비지니스 로직 Package. + */ +/** + * @author kimnomin + * + */ +package kcg.faics.cmmn.service; \ No newline at end of file diff --git a/src/main/java/kcg/faics/cmmn/vo/CodeVO.java b/src/main/java/kcg/faics/cmmn/vo/CodeVO.java new file mode 100644 index 0000000..5bac67d --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/vo/CodeVO.java @@ -0,0 +1,114 @@ +package kcg.faics.cmmn.vo; + +/** + * 코드 모델. (TCODE) + * + * @author kimnomin + */ +public class CodeVO { + /** + * 대분류 코드. + */ + private String code1; + + /** + * 중분류 코드. + */ + private String code2; + + /** + * 코드명. + */ + private String codenm; + + /** + * 코드명 약자. + */ + private String codenmYak; + + /** + * 코드 사용 여부. + */ + private String codeUseYN; + + /** + * 대분류 코드를 반환한다. + * @return 대분류 코드 + */ + public String getCode1() { + return code1; + } + /** + * 대분류 코드를 설정한다. + * + * @param code1 대분류 코드 + */ + public void setCode1(final String code1) { + this.code1 = code1; + } + /** + * 중분류 코드를 반환한다. + * + * @return 중분류 코드 + */ + public String getCode2() { + return code2; + } + /** + * 중분류 코드를 설정한다. + * + * @param code2 중분류 코드 + */ + public void setCode2(final String code2) { + this.code2 = code2; + } + /** + * 코드명을 반환한다. + * + * @return 코드명 + */ + public String getCodenm() { + return codenm; + } + /** + * 코드명을 설정한다. + * + * @param codenm 코드명 + */ + public void setCodenm(final String codenm) { + this.codenm = codenm; + } + /** + * 코드명 약자를 반환한다. + * + * @return 코드명 약자 + */ + public final String getCodenmYak() { + return codenmYak; + } + /** + * 코드명 약자를 설정한다. + * + * @param codenmYak 코드명 약자 + */ + public final void setCodenmYak(final String codenmYak) { + this.codenmYak = codenmYak; + } + /** + * 코드 사용 여부를 반환한다. + * + * @return 코드 사용 여부 + */ + public final String getCodeUseYN() { + return codeUseYN; + } + /** + * 코드 사용 여부를 설정한다. + * + * @param codeUseYN 코드 사용 여부 + */ + public final void setCodeUseYN(final String codeUseYN) { + this.codeUseYN = codeUseYN; + } + +} diff --git a/src/main/java/kcg/faics/cmmn/vo/MenuVO.java b/src/main/java/kcg/faics/cmmn/vo/MenuVO.java new file mode 100644 index 0000000..b157d03 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/vo/MenuVO.java @@ -0,0 +1,397 @@ +package kcg.faics.cmmn.vo; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; + +/** + * 메뉴 VO. + * + * @author kimnomin + * + */ +public class MenuVO { + /** + * 식별자. + */ + private int id; + /** + * 메뉴명. + */ + private String name; + /** + * 영어 메뉴명. + */ + private String engName; + /** + * 상위 메뉴 식별자. + */ + private int parent; + /** + * 메뉴 깊이. + */ + private int depth; + /** + * URL. + */ + private String url; + /** + * URI. (쿼리 포함) + */ + private String uri; + /** + * 메뉴 위치. + */ + private String menuPosition; + /** + * 사용여부. + */ + private String visible; + /** + * 메뉴 그룹. + */ + private String urlGroup; + /** + * 페이지 내 하위메뉴 표현여부. + */ + private String subVisible; + /** + * Role 레벨. + */ + private int roleLevel; + /** + * URL 호출시 사용할 GET 파라미터 문자열. + */ + private String urlQuery; + /** + * 게시판 ID. (공용뷰를 사용하는 페이지만 적용) + */ + private String boardId; + /** + * 메뉴를 조회할 윈도우창 대상(HTML A태그의 TARGET 속성). + */ + private String windowTarget; + /** + * 하위메뉴 목록. + */ + private List subMenu = new ArrayList(); + /** + * 사용자 ID. + */ + private String userId; + /** + * 사용자 구분. + */ + private int userType; + + /** + * @return the id + */ + public final int getId() { + return id; + } + + /** + * @param id + * the id to set + */ + public final void setId(final int id) { + this.id = id; + } + + /** + * @return the name + */ + public final String getName() { + return name; + } + + /** + * @param name + * the name to set + */ + public final void setName(final String name) { + this.name = name; + } + + /** + * @return the engName + */ + public final String getEngName() { + return engName; + } + + /** + * @param engName + * the engName to set + */ + public final void setEngName(final String engName) { + this.engName = engName; + } + + /** + * @return the parent + */ + public final int getParent() { + return parent; + } + + /** + * @param parent + * the parent to set + */ + public final void setParent(final int parent) { + this.parent = parent; + } + + /** + * @return the depth + */ + public final int getDepth() { + return depth; + } + + /** + * @param depth + * the depth to set + */ + public final void setDepth(final int depth) { + this.depth = depth; + } + + /** + * @return the url + */ + public final String getUrl() { + return url; + } + + /** + * @param url + * the url to set + */ + public final void setUrl(final String url) { + this.url = url; + this.makeUri(); + } + + /** + * @return the uri + */ + public final String getUri() { + return uri; + } + + /** + * Uri를 생성한다. + */ + public void makeUri() { + String uri = "#"; + String qry = ""; + if (StringUtils.isNotBlank((this.getUrl()))) { + uri = ""; + + if (StringUtils.isNotBlank((this.getUrlGroup()))) { + uri += this.getUrlGroup(); + } + uri += this.getUrl(); + + if (StringUtils.isNotBlank((this.getBoardId()))) { + qry = "?id=" + this.getBoardId(); + } + if (StringUtils.isNotBlank((this.getUrlQuery()))) { + if (StringUtils.isBlank(qry)) { + qry += "?"; + } else { + qry += "&"; + } + qry += this.getUrlQuery(); + } + if (StringUtils.isNoneBlank(uri) && !"/".equals(uri.substring(0, 1))) { + uri = "/" + uri; + } + + uri += qry; + } + + this.setUri(uri); + } + + /** + * @param uri + * the uri to set + */ + public final void setUri(final String uri) { + this.uri = uri; + } + + /** + * @return the menuPosition + */ + public final String getMenuPosition() { + return menuPosition; + } + + /** + * @param menuPosition + * the menuPosition to set + */ + public final void setMenuPosition(final String menuPosition) { + this.menuPosition = menuPosition; + } + + /** + * @return the visible + */ + public final String getVisible() { + return visible; + } + + /** + * @param visible + * the visible to set + */ + public final void setVisible(final String visible) { + this.visible = visible; + } + + /** + * @return the urlGroup + */ + public final String getUrlGroup() { + return urlGroup; + } + + /** + * @param urlGroup + * the urlGroup to set + */ + public final void setUrlGroup(final String urlGroup) { + this.urlGroup = urlGroup; + this.makeUri(); + } + + /** + * @return the subVisible + */ + public final String getSubVisible() { + return subVisible; + } + + /** + * @param subVisible + * the subVisible to set + */ + public final void setSubVisible(final String subVisible) { + this.subVisible = subVisible; + } + + /** + * @return the roleLevel + */ + public final int getRoleLevel() { + return roleLevel; + } + + /** + * @param roleLevel + * the roleLevel to set + */ + public final void setRoleLevel(final int roleLevel) { + this.roleLevel = roleLevel; + } + + /** + * @return the windowTarget + */ + public final String getWindowTarget() { + return windowTarget; + } + + /** + * @param windowTarget + * the windowTarget to set + */ + public final void setWindowTarget(final String windowTarget) { + this.windowTarget = windowTarget; + } + + /** + * @return the subMenu + */ + public final List getSubMenu() { + return subMenu; + } + + /** + * @param subMenu + * the subMenu to set + */ + public final void setSubMenu(final List subMenu) { + this.subMenu = subMenu; + } + + /** + * @return the urlQuery + */ + public final String getUrlQuery() { + return urlQuery; + } + + /** + * @param urlQuery + * the urlQuery to set + */ + public final void setUrlQuery(final String urlQuery) { + this.urlQuery = urlQuery; + this.makeUri(); + } + + /** + * @return the boardId + */ + public final String getBoardId() { + return boardId; + } + + /** + * @param boardId + * the boardId to set + */ + public final void setBoardId(final String boardId) { + this.boardId = boardId; + this.makeUri(); + } + + /** + * @return the userId + */ + public final String getUserId() { + return userId; + } + + /** + * @param userId + * the userId to set + */ + public final void setUserId(final String userId) { + this.userId = userId; + } + + /** + * @return the userType + */ + public final int getUserType() { + return userType; + } + + /** + * @param userType + * the userType to set + */ + public final void setUserType(final int userType) { + this.userType = userType; + } + +} diff --git a/src/main/java/kcg/faics/cmmn/vo/package-info.java b/src/main/java/kcg/faics/cmmn/vo/package-info.java new file mode 100644 index 0000000..9703709 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/vo/package-info.java @@ -0,0 +1,8 @@ +/** + * 공용 데이터 Value Object Package. + */ +/** + * @author kimnomin + * + */ +package kcg.faics.cmmn.vo; \ No newline at end of file diff --git a/src/main/java/kcg/faics/cmmn/web/CodeController.java b/src/main/java/kcg/faics/cmmn/web/CodeController.java new file mode 100644 index 0000000..73bf4f7 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/web/CodeController.java @@ -0,0 +1,68 @@ +package kcg.faics.cmmn.web; + +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; + +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.cmmn.vo.CodeVO; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + + +/** + * 코드관련 컨트롤러. + * + * CodeController.java + * @author 임새미 + * @since 2016. 10. 10. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 10. 임새미 최초생성 + * + */ +@Controller +@RequestMapping("/code") +public class CodeController { + + /** + * 코드관련 서비스. + */ + @Resource(name = "codeService") + private CodeService codeService; + + /** + * 하위소속 코드 리스트를 반환한다. + * + * @param codeVO 코드VO + * @return 소속 코드 리스트 + * @throws Exception 기본 예외 처리 + */ + @ResponseBody + @RequestMapping("/place2.json") + public HashMap place2Json(final CodeVO codeVO) throws Exception { + HashMap result = new HashMap(); + result.put("data", codeService.getPlace2List(codeVO)); + return result; + } + + /** + * 세부소속 코드 리스트를 반환한다. + * + * @param codeVO 코드VO + * @return 소속 코드 리스트 + * @throws Exception 기본 예외 처리 + */ + @ResponseBody + @RequestMapping("/place3.json") + public HashMap place3Json(final CodeVO codeVO) throws Exception { + HashMap result = new HashMap(); + result.put("data", codeService.getPlace3List(codeVO)); + return result; + } + +} diff --git a/src/main/java/kcg/faics/cmmn/web/CommonController.java b/src/main/java/kcg/faics/cmmn/web/CommonController.java new file mode 100644 index 0000000..7bd45b2 --- /dev/null +++ b/src/main/java/kcg/faics/cmmn/web/CommonController.java @@ -0,0 +1,162 @@ +package kcg.faics.cmmn.web; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import kcg.faics.board.service.BoardService; +import kcg.faics.board.vo.BoardSearchVO; +import kcg.faics.board.vo.BoardVO; +import kcg.faics.report.service.ReportJudgeService; +import kcg.faics.report.vo.ReportSearchVO; +import kcg.faics.report.vo.ReportVO; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.UserUtil; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.SessionAttributes; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; + + +/** + * 공용 컨트롤러. + * + * CommonController.java + * @author 임새미 + * @since 2016. 10. 10. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 10. 임새미 최초생성 + * + */ +@Controller +@SessionAttributes(types = LoginUserVO.class) +public class CommonController { + + /** + * BoardService - 게시판 데이터처리에 관한 인터페이스. + **/ + @Resource(name = "boardService") + private BoardService boardService; + + /** + * 견문 결재 인터페이스. + */ + @Resource(name = "reportJudgeService") + private ReportJudgeService judgeService; + + /** + * 로그인 화면으로 이동한다. 이미 로그인 되어 있을 경우, 메인페이지로 이동한다. + * + * @param request + * Request 객체 + * @param model + * Model 객체 + * @return 로그인된 사용자 - 메인페이지, 로그인되지 않은 사용자 - 로그인화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping("/loginView.do") + public String loginView(final HttpServletRequest request, final Model model) throws Exception { + if (EgovUserDetailsHelper.isAuthenticated()) { + return "redirect:/main.do"; + } else { + String error = request.getParameter("error"); + model.addAttribute("login_error", error); + return "common/login"; + } + } + + /** + * 메인 화면으로 이동한다. + * + * @param request + * Request 객체 + * @param model + * Model 객체 + * @return 메인페이지 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/main.do") + public String actionMain(final HttpServletRequest request, final Model model) throws Exception { + if (EgovUserDetailsHelper.isAuthenticated()) { + BoardSearchVO searchVO = new BoardSearchVO(); + searchVO.setRecordCountPerPage(5); + + /* 내실적 조회 리스트 */ + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + ReportSearchVO reportSearchVO = new ReportSearchVO(); + reportSearchVO.setRecordCountPerPage(5); + reportSearchVO.setType(loginUserVO.getType()); + reportSearchVO.setUserid(loginUserVO.getUserid()); + //최근 1달치 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + SimpleDateFormat stSdf = new SimpleDateFormat("yyyy-MM-dd"); + String stDate = stSdf.format(mon.getTime()); + + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd"); + String enDate = date.format(today); + + reportSearchVO.setDateStart(stDate); + reportSearchVO.setDateEnd(enDate); + reportSearchVO.setOrderCol("in_seq"); + reportSearchVO.setOrderAsc("DESC"); + List reportList = judgeService.selectMyList(reportSearchVO); + model.addAttribute("reportList", reportList); + + /* 공지사항 리스트 */ + searchVO.setId("notice"); + List noticeList = boardService.selectList(searchVO); + model.addAttribute("noticeList", noticeList); + + /* 게시판 리스트 */ + searchVO.setId("bbs"); + List bbsList = boardService.selectList(searchVO); + model.addAttribute("bbsList", bbsList); + + /* 자료실 리스트 */ + searchVO.setId("data"); + List dataList = boardService.selectList(searchVO); + model.addAttribute("dataList", dataList); + + return "main.tiles"; + } else { + return "common/login"; + } + } + + /** + * 권한이 없는 사용자가 접근시 권한제한 화면으로 이동한다. + * + * @return 권한없음 페이지 + * @exception Exception + * 기본 예외 처리 + */ + @RequestMapping("/accessDenied.do") + public String accessDenied() throws Exception { + return "error/EgovAccessDenied"; + } + + /** + * validator 매핑. + * + * @return 유효성 검사 코드 반환 + * @exception Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/validator.do") + public String validator() { + return "common/validator"; + } +} diff --git a/src/main/java/kcg/faics/comn/validator/KcgFieldChecks.java b/src/main/java/kcg/faics/comn/validator/KcgFieldChecks.java new file mode 100644 index 0000000..03caf35 --- /dev/null +++ b/src/main/java/kcg/faics/comn/validator/KcgFieldChecks.java @@ -0,0 +1,192 @@ +package kcg.faics.comn.validator; + +import java.lang.reflect.InvocationTargetException; +import java.util.Collection; + +import org.apache.commons.beanutils.PropertyUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.commons.validator.Field; +import org.apache.commons.validator.GenericValidator; +import org.apache.commons.validator.ValidatorAction; +import org.apache.commons.validator.util.ValidatorUtils; +import org.apache.oro.text.perl.Perl5Util; +import org.springframework.validation.Errors; +import org.springframework.web.multipart.MultipartFile; +import org.springmodules.validation.commons.FieldChecks; + +/** + * 유효성 검사 클래스. + * + * @author kimnomin + * + */ +public class KcgFieldChecks extends FieldChecks { + /** + * sericalVersion UID. + */ + private static final long serialVersionUID = -2911390948016164140L; + + /** + * Log used by this class. + */ + private static final Log LOGGER = LogFactory.getLog(FieldChecks.class); + + /** + * 파일 확장자 체크. + * + * @param bean + * The bean validation is being performed on. + * @param va + * The ValidatorAction that is currently being + * performed. + * @param field + * field The Field object associated with the + * current field being validated. + * @param errors + * Errors The Errors object to add errors to if any + * validation errors occur. + * @return true Valid. false inValid. + */ + public static boolean validateFileExt(final Object bean, + final ValidatorAction va, final Field field, final Errors errors) { + + String value = extractValue(bean, field); + String extStr = field.getVarValue("ext"); + try { + String[] validExts; + String regexp = ""; + if (!GenericValidator.isBlankOrNull(extStr)) { + int loopIdx = 0; + validExts = extStr.split(","); + regexp = "\\.("; + for (String s : validExts) { + if (loopIdx > 0) { + regexp += "|"; + } + regexp += s; + loopIdx++; + } + regexp += ")$"; + } + + Perl5Util matcher = null; + try { + + matcher = new Perl5Util(); + } catch (Exception e) { + e.printStackTrace(); + } + if (value != null) { + boolean isValid = matcher.match("/" + regexp + "/i", value); + if (!GenericValidator.isBlankOrNull(value) && !isValid) { + FieldChecks.rejectValue(errors, field, va); + return false; + } else { + return true; + } + } else { + return true; + } + } catch (Exception e) { + e.printStackTrace(); + KcgFieldChecks.LOGGER.error(e.getMessage(), e); + } + + return true; + } + + public static boolean validateStrRegex(final Object bean, + final ValidatorAction va, final Field field, final Errors errors) { + + String value = FieldChecks.extractValue(bean, field); + String idRegex = field.getVarValue("regex"); + + if (!value.matches(idRegex)) { + FieldChecks.rejectValue(errors, field, va); + return false; + } else { + return true; + } + } + + /** + * 객체 내 프로퍼티의 값을 추출하여 반환한다. + * + *
+	 * FieldCheck.extractValue 메소드 Override.
+	 * 
+ * + * @param bean + * 값을 추출할 대상 객체 + * @param field + * 실제 값을 추출할 대상 객체의 프로퍼티 + * @return bean.field가 갖고 있는 값 + */ + protected static String extractValue(final Object bean, final Field field) { + String value = null; + + if (bean == null) { + return null; + } else if (bean instanceof String) { + value = (String) bean; + } else { + value = getValueAsString(bean, field.getProperty()); + } + + return value; + } + + /** + * 객체 내 프로퍼티의 값을 추출하여 반환한다. + * + *
+	 * ValidatorUtils.getValueAsString 메소드 커스터 마이징.
+	 * 
+ * + * @param bean + * bean 값을 추출할 대상 객체 + * @param property + * 실제 값을 추출할 대상 객체의 프로퍼티 + * @return bean.field가 갖고 있는 값 + */ + public static String getValueAsString(final Object bean, final String property) { + Object value = null; + + try { + value = PropertyUtils.getProperty(bean, property); + + } catch (IllegalAccessException e) { + Log log = LogFactory.getLog(ValidatorUtils.class); + log.error(e.getMessage(), e); + } catch (InvocationTargetException e) { + Log log = LogFactory.getLog(ValidatorUtils.class); + log.error(e.getMessage(), e); + } catch (NoSuchMethodException e) { + Log log = LogFactory.getLog(ValidatorUtils.class); + log.error(e.getMessage(), e); + } + + if (value == null) { + return null; + } + + if (value instanceof String[]) { + return ((String[]) value).length > 0 ? value.toString() : ""; + + } else if (value instanceof Collection) { + return ((Collection) value).isEmpty() ? "" : value.toString(); + + } else if (value instanceof MultipartFile) { + MultipartFile file = (MultipartFile) value; + if (file.isEmpty()) { + return ""; + } else { + return file.getOriginalFilename(); + } + } else { + return value.toString(); + } + + } +} diff --git a/src/main/java/kcg/faics/comn/validator/package-info.java b/src/main/java/kcg/faics/comn/validator/package-info.java new file mode 100644 index 0000000..0fa21af --- /dev/null +++ b/src/main/java/kcg/faics/comn/validator/package-info.java @@ -0,0 +1,8 @@ +/** + * Validator Package. + */ +/** + * @author kimnomin + * + */ +package kcg.faics.comn.validator; \ No newline at end of file diff --git a/src/main/java/kcg/faics/equip/service/ApproveService.java b/src/main/java/kcg/faics/equip/service/ApproveService.java new file mode 100644 index 0000000..b6d3bf7 --- /dev/null +++ b/src/main/java/kcg/faics/equip/service/ApproveService.java @@ -0,0 +1,15 @@ +package kcg.faics.equip.service; + +import kcg.faics.cmmn.bbs.BaseBbsService; +import kcg.faics.equip.vo.ApproveVO; +import kcg.faics.equip.vo.EquipSearchVO; + +/** + * 장비 사용실적 결재내역 인터페이스. + * + * @author kimnomin + * + */ +public interface ApproveService extends BaseBbsService { + +} diff --git a/src/main/java/kcg/faics/equip/service/EquipmentService.java b/src/main/java/kcg/faics/equip/service/EquipmentService.java new file mode 100644 index 0000000..ab4d57d --- /dev/null +++ b/src/main/java/kcg/faics/equip/service/EquipmentService.java @@ -0,0 +1,143 @@ +/** + * FaEquipmentService.java + * @author 임새미 + * @since 2016. 10. 13. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 13. 임새미 최초생성 + * + */ +package kcg.faics.equip.service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.web.multipart.MultipartFile; + +import kcg.faics.equip.vo.EquipSearchVO; +import kcg.faics.equip.vo.EquipVO; + +/** + * FaEquipmentService.java + * @author 임새미 + * @since 2016. 10. 13. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 13. 임새미 최초생성 + * + */ +public interface EquipmentService { + + /** + * 외사 경찰의 장비 보유 현황을 가져온다. + * + * @return 결과 데이터를 담은 map 리스트 + */ + List> getEquipmentList() throws Exception; + + /** + * 외사장비의 사용실적을 가져온다. + * + * @param params 파라미터 맵 + * type - 사용 or 점검, year - 대상 연도, quater - 대상 분기 + * @return 결과 데이터를 담은 map 리스트 + */ + List> getEquipUseStateList(EquipSearchVO searchVO) throws Exception; + + /** + * 외사장비의 사용실적 기록 연도 리스트를 가져온다. + * + * @return 결과 데이터를 담은 map 리스트 + */ + List> getEquipYearList() throws Exception; + + /** + * 외사장비 목록 가져온다. + * + * @return 결과 데이터를 담은 map 리스트 + */ + List> getEquipmentCodeList() throws Exception; + + /** + * 선택한 조건에 해당되는 사용실적을 가져온다. + * + * @param params 파라미터 맵 + * place1 - 기관코드 or 점검, year - 대상 연도, quater - 대상 분기 + * @return 결과 데이터를 담은 map 리스트 + * @throws Exception 기본 예외 처리 + */ + List> getEquipUseStateInfo(EquipSearchVO searchVO) throws Exception; + + /** + * 사용실적을 입력 or 수정한다. + * + * @param paramMap 장비별 실적 리스트 + * @return 결과 데이터를 담은 map 리스트 + * @throws Exception 기본 예외 처리 + */ + int insertEquipUseState(EquipSearchVO searchVO, HashMap> paramMap) throws Exception; + + /** + * 외사장비목록을 조회한다 + * + * @param equipSearchVO + * @return List + * @throws Exception + * 기본 예외 처리 + */ + List getEquipList(EquipSearchVO equipSearchVO) throws Exception; + + /** + * 데이터 한 건을 반환한다. + * + * @param dataVO + * 조회할 VO (대부분 PK의 값으로 조회한다.) + * @return 데이터 한 건 + * @throws Exception + * 기본 예외 처리 + */ + EquipVO getEquipment(EquipVO equipVO) throws Exception; + + /** + * 외사장비를 등록한다 + * + * @param equipVO + * @return 데이터 한 건 + * @throws Exception + * 기본 예외 처리 + */ + HashMap insertEquipment(EquipVO equipVO, final Map fileMap) throws Exception; + + /** + * 외사장비를 변경한다 + * + * @param equipVO + * @return + * @throws Exception + * 기본 예외 처리 + */ + HashMap updateEquipment(EquipVO equipVO, final Map fileMap, final String[] deleteFiles) throws Exception; + + /** + * 외사장비를 삭제한다. + * + * @param equipVO + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + HashMap deleteEquipment(EquipVO equipVO) throws Exception; + + /** + * 게시물의 첨부파일들을 업로드한다. + * + * @param bfBdSeq 게시물 아이디 + * @param fileMap 검색, 페이지 정보 객체 + * @return 성공 - 1, 실패 - 0 + * @exception Exception 기본 예외 처리 + */ +// public int insertAndSaveFiles(BoardFileVO boardFileVO, final Map fileMap) throws Exception; +} diff --git a/src/main/java/kcg/faics/equip/service/StateWaitingService.java b/src/main/java/kcg/faics/equip/service/StateWaitingService.java new file mode 100644 index 0000000..07ddb54 --- /dev/null +++ b/src/main/java/kcg/faics/equip/service/StateWaitingService.java @@ -0,0 +1,23 @@ +package kcg.faics.equip.service; + +import java.util.List; + +import kcg.faics.equip.vo.StateWaitingSearchVO; +import kcg.faics.equip.vo.UseStateVO; + +/** + * 사용실적 결재목록 관련 인터페이스. + * + * @author kimnomin + * + */ +public interface StateWaitingService { + /** + * 사용실적 결재목록을 반환한다. + * + * @param searchVO + * 검색조건 정보 VO + * @return 사용실적 결재목록 + */ + List selectList(StateWaitingSearchVO searchVO); +} diff --git a/src/main/java/kcg/faics/equip/service/impl/ApproveMapper.java b/src/main/java/kcg/faics/equip/service/impl/ApproveMapper.java new file mode 100644 index 0000000..77a7bbc --- /dev/null +++ b/src/main/java/kcg/faics/equip/service/impl/ApproveMapper.java @@ -0,0 +1,40 @@ +package kcg.faics.equip.service.impl; + +import org.springframework.stereotype.Repository; + +import kcg.faics.equip.vo.ApproveVO; +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +/** + * 장비 사용실적 결재관련 Mapper. + * + * @author kimnomin + * + */ +@Repository("approveMapper") +public class ApproveMapper extends EgovAbstractMapper { + /** + * 네임스페이스. + */ + private final String namespace = "EquipApprove"; + + /** + * 한 건의 결재 내역을 반환한다. + * + * @param vo 검색조건 VO + * @return 한 건의 결재 내역 + */ + public ApproveVO select(final ApproveVO vo) { + return selectOne(namespace + ".select", vo); + } + + /** + * 결재 내역을 입력한다. + * + * @param dataVO 입력할 VO + * @return 1-성공, 0-실패 + */ + public int insert(final ApproveVO dataVO) { + return insert(namespace + ".insert", dataVO); + } +} diff --git a/src/main/java/kcg/faics/equip/service/impl/ApproveServiceImpl.java b/src/main/java/kcg/faics/equip/service/impl/ApproveServiceImpl.java new file mode 100644 index 0000000..0801530 --- /dev/null +++ b/src/main/java/kcg/faics/equip/service/impl/ApproveServiceImpl.java @@ -0,0 +1,91 @@ +package kcg.faics.equip.service.impl; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import kcg.faics.equip.service.ApproveService; +import kcg.faics.equip.vo.ApproveVO; +import kcg.faics.equip.vo.EquipSearchVO; + +/** + * 장비 사용실적 결재관련 비즈니스 로직. + * + * @author kimnomin + * + */ +@Service("approveService") +public class ApproveServiceImpl implements ApproveService { + + /** + * 장비 사용실적 결재관련 Mapper. + */ + @Resource(name = "approveMapper") + private ApproveMapper approveMapper; + + @Override + public ApproveVO select(final ApproveVO dataVO) throws Exception { + return approveMapper.select(dataVO); + } + + @Override + public List selectListAll(final EquipSearchVO searchVO) + throws Exception { + // TODO Auto-generated method stub + return null; + } + + @Override + public List selectList(final EquipSearchVO searchVO) throws Exception { + // TODO Auto-generated method stub + return null; + } + + @Override + public int selectListCnt(final EquipSearchVO searchVO) throws Exception { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int selectTotalCnt(final EquipSearchVO searchVO) throws Exception { + // TODO Auto-generated method stub + return 0; + } + + @Override + public HashMap insert(final ApproveVO dataVO, + final Map fileMap) throws Exception { + HashMap result = new HashMap(); + + // 이미 결재 내역이 있으면 결재하지 않는다. + ApproveVO vo = select(dataVO); + if (vo == null) { + result.put("result", approveMapper.insert(dataVO)); + } else { + result.put("result", 0); + } + + return result; + } + + @Override + public HashMap update(final ApproveVO dataVO, + final Map fileMap, final String[] deleteFiles) + throws Exception { + // TODO Auto-generated method stub + return null; + } + + @Override + public HashMap delete(final ApproveVO dataVO) throws Exception { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/main/java/kcg/faics/equip/service/impl/EquipmentMapper.java b/src/main/java/kcg/faics/equip/service/impl/EquipmentMapper.java new file mode 100644 index 0000000..1b4f50c --- /dev/null +++ b/src/main/java/kcg/faics/equip/service/impl/EquipmentMapper.java @@ -0,0 +1,212 @@ +/** + * FaEquipmentMapper.java + * @author 임새미 + * @since 2016. 10. 13. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 13. 임새미 최초생성 + * + */ +package kcg.faics.equip.service.impl; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.arrest.vo.ArrestSearchVO; +import kcg.faics.arrest.vo.ArrestVO; +import kcg.faics.equip.vo.EquipSearchVO; +import kcg.faics.equip.vo.EquipVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +/** + * FaEquipmentMapper.java + * @author 임새미 + * @since 2016. 10. 13. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 13. 임새미 최초생성 + * + */ +@Repository("equipmentMapper") +public class EquipmentMapper extends EgovAbstractMapper { + + /** + * 외사 경찰의 장비 보유 현황을 가져온다. + * + * @return 결과 데이터를 담은 map 리스트 + */ + public List> getEquipmentList(HashMap params) { + return selectList("Equip.getEquipmentList", params); + } + + /** + * 외사장비의 사용실적을 가져온다. + * + * @param isUseState + 사용 - true, 점검 - false + * @return 결과 데이터를 담은 map 리스트 + */ + public List> getEquipUseStateList(HashMap params) { + return selectList("Equip.getEquipUseStateList", params); + } + + /** + * 외사장비의 사용실적 기록 연도 리스트를 가져온다. + * + * @return 결과 데이터를 담은 map 리스트 + */ + public List> getEquipYearList() { + return selectList("Equip.getEquipYearList"); + } + + /** + * 외사장비 목록 가져온다. + * + * @return 결과 데이터를 담은 map 리스트 + */ + public List> getEquipmentCodeList() { + return selectList("Equip.getEquipmentCodeList"); + } + + /** + * 선택한 조건에 해당되는 사용실적 리스트를 가져온다. + * + * @param params 파라미터 맵 + * place1 - 기관코드 or 점검, year - 대상 연도, quater - 대상 분기 + * @return 리턴값 설명 + * @throws Exception 기본 예외 처리 + */ + public List> getEquipUseStateInfo(EquipSearchVO params) { + return selectList("Equip.getEquipUseStateInfo", params); + } + + /** + * 선택한 조건에 해당되는 사용실적을 가져온다. + * + * @param params 파라미터 맵 + * place1 - 기관코드 or 점검, year - 대상 연도, quater - 대상 분기 + * @return 리턴값 설명 + * @throws Exception 기본 예외 처리 + */ + public HashMap getEquipUseStateInfoByCode(HashMap params) { + return selectOne("Equip.getEquipUseStateInfoByCode", params); + } + + /** + * 외사장비 사용실적을 추가한다. + * + * @param params 외사장비 사용실적 데이터 맵 + * @return 1-성공, 0-실패 + * @throws Exception 기본 예외 처리 + */ + public int insertEquipUseState(HashMap params) { + return update("Equip.insertEquipUseState", params); + } + + /** + * 외사장비 사용실적을 수정한다. + * + * @param params 외사장비 사용실적 데이터 맵 + * @return 1-성공, 0-실패 + * @throws Exception 기본 예외 처리 + */ + public int updateEquipUseState(HashMap searchVO) { + return insert("Equip.updateEquipUseState", searchVO); + } + + /** + * 외사장비목록을 조회한다 + * + * @param equipSearchVO + * 검색정보 객체 + * @return 외사장비목록 반환 + * @throws Exception + * 기본 예외 처리 + */ + public List getEquipList(final EquipSearchVO equipSearchVO) throws Exception { + return selectList("Equip.getEquipList", equipSearchVO); + } + + /** + * 외사장비(단건)를 조회한다 + * + * @param equipVO + * 검색정보 객체 + * @return 외사장비 단건정보 반환 + * @throws Exception + * 기본 예외 처리 + */ + public EquipVO getEquipment(final EquipVO equipVO) throws Exception { + return selectOne("Equip.getEquipment", equipVO); + } + + /** + * 외사장비를 등록한다. + * + * @param equipVO 외사장비 구성 객체 + * @return result + * @throws Exception 기본 예외 처리 + */ + public HashMap insertEquipment(final EquipVO equipVO) throws Exception { + + HashMap resultMap = new HashMap(); + + int result = 0; + try { + result = insert("Equip.insertEquipment", equipVO); + resultMap.put("result", result); + resultMap.put("serNo", equipVO.getSerNo()); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + /** + * 외사장비를 삭제한다. + * + * @param equipVO 외사장비 구성 객체 + * @return result + * @throws Exception 기본 예외 처리 + */ + public HashMap deleteEquipment(final EquipVO equipVO) throws Exception { + + HashMap resultMap = new HashMap(); + + int result = 0; + try { + result = delete("Equip.deleteEquipment", equipVO); + resultMap.put("result", result); + resultMap.put("serNo", equipVO.getSerNo()); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + /** + * 외사장비를 수정한다. + * + * @param equipVO 외사장비 구성 객체 + * @return result + * @throws Exception 기본 예외 처리 + */ + public HashMap updateEquipment(final EquipVO equipVO) throws Exception { + + HashMap resultMap = new HashMap(); + + int result = 0; + try { + result = insert("Equip.updateEquipment", equipVO); + resultMap.put("result", result); + resultMap.put("serNo", equipVO.getSerNo()); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } +} diff --git a/src/main/java/kcg/faics/equip/service/impl/EquipmentServiceImpl.java b/src/main/java/kcg/faics/equip/service/impl/EquipmentServiceImpl.java new file mode 100644 index 0000000..07c81bd --- /dev/null +++ b/src/main/java/kcg/faics/equip/service/impl/EquipmentServiceImpl.java @@ -0,0 +1,363 @@ +/** + * FaEquipmentServiceImpl.java + * @author 임새미 + * @since 2016. 10. 13. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 13. 임새미 최초생성 + * + */ +package kcg.faics.equip.service.impl; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import kcg.faics.board.util.BoardVOHandler; +import kcg.faics.board.vo.BoardFileVO; +import kcg.faics.cmmn.bbs.BaseFileService; +import kcg.faics.cmmn.egov.file.EgovFileMngUtil; +import kcg.faics.cmmn.file.FileUploadUtil; +import kcg.faics.cmmn.service.impl.CodeMapper; +import kcg.faics.equip.service.EquipmentService; +import kcg.faics.equip.vo.EquipSearchVO; +import kcg.faics.equip.vo.EquipVO; + +/** + * FaEquipmentServiceImpl.java + * @author 임새미 + * @since 2016. 10. 13. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 13. 임새미 최초생성 + * + */ +@Service("equipmentService") +public class EquipmentServiceImpl implements EquipmentService { + + @Resource(name = "equipmentMapper") + EquipmentMapper equipmentMapper; + + @Resource(name = "codeMapper") + CodeMapper codeMapper; + + /** + * EgovFileMngUtil - 파일 업로드 처리에 관한 Util 클래스 + **/ + @Resource(name = "EgovFileMngUtil") + private EgovFileMngUtil fileUtil; + + /** + * BoardFileService - 게시판 파일에 관한 인터페이스 + **/ + @Resource(name = "boardFileService") + private BaseFileService boardFileService; + + /** + * 파일 업로드 유틸리티. + */ + @Resource(name = "fileUploadUtil") + private FileUploadUtil fileUploadUtil; + + /** + * 전자정부 표준프레임워크 파일관리 유틸리티. + */ + @Resource(name = "EgovFileMngUtil") + private EgovFileMngUtil fileMngUtil; + + /** + * 사용자 사진 저장 경로. + */ + public static final String EQUIP_SAVE_PATH = "Equip.fileStorePath"; + + /** + * 외사 경찰의 장비 보유 현황을 가져온다. + * + * @return 결과 데이터를 담은 map 리스트 + */ + @Override + public List> getEquipmentList() throws Exception { + HashMap params = new HashMap(); + params.put("place1", codeMapper.getPlace1List(true)); + return equipmentMapper.getEquipmentList(params); + } + + /** + * 외사장비의 사용실적을 가져온다. + * + * @param params 파라미터 맵 + * type - 사용 or 점검, year - 대상 연도, quater - 대상 분기 + * @return 결과 데이터를 담은 map 리스트 + */ + @Override + public List> getEquipUseStateList(final EquipSearchVO searchVO) throws Exception { + List> result = null; + HashMap params = new HashMap(); + + params.put("place1", codeMapper.getPlace1List(true)); + params.put("criteria", searchVO); + params.put("type", (searchVO.getType().equals("a")) ? "EU_CNT" : "EU_CHECK"); + + result = equipmentMapper.getEquipUseStateList(params); + + return result; + } + + + /** + * 외사장비의 사용실적 기록 연도 리스트를 가져온다. + * + * @return 결과 데이터를 담은 map 리스트 + */ + @Override + public List> getEquipYearList() throws Exception { + List> result = null; + result = equipmentMapper.getEquipYearList(); + return result; + } + + /** + * 외사장비 목록 가져온다. + * + * @return 결과 데이터를 담은 map 리스트 + */ + @Override + public List> getEquipmentCodeList() throws Exception { + List> result = null; + result = equipmentMapper.getEquipmentCodeList(); + return result; + } + + /** + * 선택한 조건에 해당되는 사용실적을 가져온다. + * + * @param params 파라미터 맵 + * place1 - 기관코드 or 점검, year - 대상 연도, quater - 대상 분기 + * @return 리턴값 설명 + * @throws Exception 기본 예외 처리 + */ + @Override + public List> getEquipUseStateInfo(EquipSearchVO searchVO) throws Exception { + List> result = null; + result = equipmentMapper.getEquipUseStateInfo(searchVO); + return result; + } + + /** + * 사용실적을 입력 or 수정한다. + * + * @param paramMap 장비별 실적 리스트 + * @return 결과 데이터를 담은 map 리스트 + * @throws Exception 기본 예외 처리 + */ + @Override + @Transactional + public int insertEquipUseState(final EquipSearchVO searchVO, final HashMap> paramMap) throws Exception { + int success = 0; + + Set keySet = paramMap.keySet(); + Iterator it = keySet.iterator(); + while (it.hasNext()) { + HashMap value = paramMap.get(it.next()); + HashMap record = equipmentMapper.getEquipUseStateInfoByCode(value); + boolean isInsert = (record == null) ? true : false; + + if (isInsert) { + success = equipmentMapper.insertEquipUseState(value); + } else { + success = equipmentMapper.updateEquipUseState(value); + } + + if (success != 1) { + throw new Exception(); + } + } + return success; + }; + + /** + * 외사장비 목록 조회 + * + * @param arrestSearchVO + * @return 외사장비목록 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public List getEquipList(final EquipSearchVO EquipSearchVO) throws Exception { + + return equipmentMapper.getEquipList(EquipSearchVO); + } + + /** + * 외사장비 목록 조회 + * + * @param arrestSearchVO + * @return 외사장비단건 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public EquipVO getEquipment(final EquipVO equipVO) throws Exception { + + return equipmentMapper.getEquipment(equipVO); + } + + /** + * 외사장비 등록 + * + * @param equipVO + * @return 외사장비목록 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public HashMap insertEquipment(final EquipVO equipVO, final Map fileMap) throws Exception { + HashMap map = new HashMap(); + try{ + + + /* 파일 업로드 */ + //BoardFileVO boardFileVO = BoardVOHandler.getBFileVO("EQUIPMENT", serNo, 0); + //result = boardFileService.insertAndSaveFiles(boardFileVO, fileMap); + + + + + if (fileMap != null && fileMap.get("file1").getSize() > 0) { + String fileName1 = fileUploadUtil.uploadWithExt(fileMap.get("file1"), EQUIP_SAVE_PATH); + System.out.println("fileName1 : " + fileName1); + equipVO.setFileName1(fileName1); + } + if (fileMap != null && fileMap.get("file2").getSize() > 0) { + String fileName2 = fileUploadUtil.uploadWithExt(fileMap.get("file2"), EQUIP_SAVE_PATH); + equipVO.setFileName2(fileName2); + } + if (fileMap != null && fileMap.get("file3").getSize() > 0) { + String fileName3 = fileUploadUtil.uploadWithExt(fileMap.get("file3"), EQUIP_SAVE_PATH); + equipVO.setFileName3(fileName3); + } + + map = equipmentMapper.insertEquipment(equipVO); + + if ((Integer)map.get("result") != 1) { + throw new Exception(); + } else { + map.put("result", 1); + } + + }catch(Exception e){ + e.printStackTrace(); + } + + return map; + } + + + + /** + * 외사장비 삭제 + * + * @param equipVO + * @return 처리결과 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public HashMap deleteEquipment(final EquipVO equipVO) throws Exception { + try{ + /* 파일을 삭제한다. */ + //boardFileService.deleteAndRemoveFiles(BoardVOHandler.getBFileVO(boardVO)(equipVO)); + }catch(Exception e){ + + } + return equipmentMapper.deleteEquipment(equipVO); + } + + /** + * 외사장비 수정 + * + * @param equipVO + * @return 처리결과 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public HashMap updateEquipment(final EquipVO dataVO, final Map fileMap, final String[] deleteFiles) throws Exception { + + HashMap map = new HashMap(); + + try{ + System.out.println(deleteFiles); + + + if( deleteFiles != null ){ + for (int i = 0; i < deleteFiles.length; i++) { + if( deleteFiles[i].equals("1") ){ + if (dataVO.getFileName1() != null || dataVO.getFileName1().equals("")) { + fileMngUtil.deleteFile(dataVO.getFileName1(), EQUIP_SAVE_PATH); + dataVO.setFileName1(null); + } + }else if( deleteFiles[i].equals("2") ){ + // file2 삭제 + if (dataVO.getFileName2() != null || dataVO.getFileName2().equals("")) { + fileMngUtil.deleteFile(dataVO.getFileName2(), EQUIP_SAVE_PATH); + dataVO.setFileName2(null); + } + }else if( deleteFiles[i].equals("3") ){ + // file3 삭제 + if (dataVO.getFileName3() != null || dataVO.getFileName2().equals("")) { + fileMngUtil.deleteFile(dataVO.getFileName2(), EQUIP_SAVE_PATH); + dataVO.setFileName3(null); + } + } + } + } + + if( fileMap != null ){ + if ( fileMap.get("file1") != null ) { + if( fileMap.get("file1").getSize() > 0){ + String fileName1 = fileUploadUtil.uploadWithExt(fileMap.get("file1"), EQUIP_SAVE_PATH); + System.out.println("fileName1 : " + fileName1); + dataVO.setFileName1(fileName1); + } + } + + if ( fileMap.get("file2") != null ) { + if( fileMap.get("file2").getSize() > 0){ + String fileName2 = fileUploadUtil.uploadWithExt(fileMap.get("file2"), EQUIP_SAVE_PATH); + dataVO.setFileName2(fileName2); + } + } + if ( fileMap.get("file3") != null ) { + if( fileMap.get("file3").getSize() > 0){ + String fileName3 = fileUploadUtil.uploadWithExt(fileMap.get("file3"), EQUIP_SAVE_PATH); + dataVO.setFileName3(fileName3); + } + } + + } + + + + map = equipmentMapper.updateEquipment(dataVO); + + if ((Integer)map.get("result") != 1) { + throw new Exception(); + } else { + map.put("result", 1); + } + + }catch(Exception e){ + + + } + + return map; + } +} diff --git a/src/main/java/kcg/faics/equip/service/impl/StateWaitingMapper.java b/src/main/java/kcg/faics/equip/service/impl/StateWaitingMapper.java new file mode 100644 index 0000000..34e228d --- /dev/null +++ b/src/main/java/kcg/faics/equip/service/impl/StateWaitingMapper.java @@ -0,0 +1,30 @@ +package kcg.faics.equip.service.impl; + +import java.util.List; + +import kcg.faics.equip.vo.StateWaitingSearchVO; +import kcg.faics.equip.vo.UseStateVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +/** + * 사용실적 결재관련 Mapper. + * + * @author kimnomin + * + */ +@Repository("equipStateWaitingMapper") +public class StateWaitingMapper extends EgovAbstractMapper { + /** + * 사용실적 결재대기 목록을 반환한다. + * + * @param searchVO + * 검색조건 VO + * @return 사용실적 결재대기 목록 + */ + public List selectList(final StateWaitingSearchVO searchVO) { + return selectList("Equip.selectStateWaitingList", searchVO); + } +} diff --git a/src/main/java/kcg/faics/equip/service/impl/StateWaitingServiceImpl.java b/src/main/java/kcg/faics/equip/service/impl/StateWaitingServiceImpl.java new file mode 100644 index 0000000..3535e19 --- /dev/null +++ b/src/main/java/kcg/faics/equip/service/impl/StateWaitingServiceImpl.java @@ -0,0 +1,31 @@ +package kcg.faics.equip.service.impl; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import kcg.faics.equip.service.StateWaitingService; +import kcg.faics.equip.vo.StateWaitingSearchVO; +import kcg.faics.equip.vo.UseStateVO; + +/** + * 사용실적 결재관련 비즈니스 로직. + * + * @author kimnomin + * + */ +@Service("equipStateWaitingSerivce") +public class StateWaitingServiceImpl implements StateWaitingService { + /** + * 사용실적 결재관련 Mapper. + */ + @Resource(name = "equipStateWaitingMapper") + private StateWaitingMapper equipStateWaitingMapper; + + @Override + public List selectList(final StateWaitingSearchVO searchVO) { + return equipStateWaitingMapper.selectList(searchVO); + } +} \ No newline at end of file diff --git a/src/main/java/kcg/faics/equip/vo/ApproveVO.java b/src/main/java/kcg/faics/equip/vo/ApproveVO.java new file mode 100644 index 0000000..b713886 --- /dev/null +++ b/src/main/java/kcg/faics/equip/vo/ApproveVO.java @@ -0,0 +1,279 @@ +package kcg.faics.equip.vo; + +import java.util.Date; + +/** + * 장비 사용실적 결재내역 VO. + * + * @author kimnomin + * + */ +public class ApproveVO { + /** + * 식별자. + */ + private int seq; + /** + * 결재일. + */ + private Date checkDate; + /** + * 관리기관(경찰서). + */ + private String police; + /** + * 관리기관명(경찰서). + */ + private String policeStr; + /** + * 년도. + */ + private String year; + /** + * 분기. + */ + private String quater; + /** + * 결재권자 소속. + */ + private String place1; + /** + * 결재권자 소속명칭. + */ + private String place1Str; + /** + * 결재권자 계급. + */ + private String position; + /** + * 결재권자 계급명칭. + */ + private String positionStr; + /** + * 결재권자 성명. + */ + private String name; + /** + * 결재권자ID. + */ + private String userId; + /** + * 실제결재자ID. + */ + private String proxyId; + /** + * 검토의견. + */ + private String message; + + /** + * @return the seq + */ + public final int getSeq() { + return seq; + } + + /** + * @param seq + * the seq to set + */ + public final void setSeq(final int seq) { + this.seq = seq; + } + + /** + * @return the checkDate + */ + public final Date getCheckDate() { + return checkDate; + } + + /** + * @param checkDate + * the checkDate to set + */ + public final void setCheckDate(final Date checkDate) { + this.checkDate = checkDate; + } + + /** + * @return the police + */ + public final String getPolice() { + return police; + } + + /** + * @param police + * the police to set + */ + public final void setPolice(final String police) { + this.police = police; + } + + /** + * @return the policeStr + */ + public final String getPoliceStr() { + return policeStr; + } + + /** + * @param policeStr + * the policeStr to set + */ + public final void setPoliceStr(final String policeStr) { + this.policeStr = policeStr; + } + + /** + * @return the year + */ + public final String getYear() { + return year; + } + + /** + * @param year + * the year to set + */ + public final void setYear(final String year) { + this.year = year; + } + + /** + * @return the quater + */ + public final String getQuater() { + return quater; + } + + /** + * @param quater + * the quater to set + */ + public final void setQuater(final String quater) { + this.quater = quater; + } + + /** + * @return the place1 + */ + public final String getPlace1() { + return place1; + } + + /** + * @param place1 + * the place1 to set + */ + public final void setPlace1(final String place1) { + this.place1 = place1; + } + + /** + * @return the place1Str + */ + public final String getPlace1Str() { + return place1Str; + } + + /** + * @param place1Str + * the place1Str to set + */ + public final void setPlace1Str(final String place1Str) { + this.place1Str = place1Str; + } + + /** + * @return the position + */ + public final String getPosition() { + return position; + } + + /** + * @param position + * the position to set + */ + public final void setPosition(final String position) { + this.position = position; + } + + /** + * @return the positionStr + */ + public final String getPositionStr() { + return positionStr; + } + + /** + * @param positionStr + * the positionStr to set + */ + public final void setPositionStr(final String positionStr) { + this.positionStr = positionStr; + } + + /** + * @return the name + */ + public final String getName() { + return name; + } + + /** + * @param name + * the name to set + */ + public final void setName(final String name) { + this.name = name; + } + + /** + * @return the userId + */ + public final String getUserId() { + return userId; + } + + /** + * @param userId + * the userId to set + */ + public final void setUserId(final String userId) { + this.userId = userId; + } + + /** + * @return the proxyId + */ + public final String getProxyId() { + return proxyId; + } + + /** + * @param proxyId + * the proxyId to set + */ + public final void setProxyId(final String proxyId) { + this.proxyId = proxyId; + } + + /** + * @return the message + */ + public final String getMessage() { + return message; + } + + /** + * @param message + * the message to set + */ + public final void setMessage(final String message) { + this.message = message; + } + +} diff --git a/src/main/java/kcg/faics/equip/vo/EquipFileVO.java b/src/main/java/kcg/faics/equip/vo/EquipFileVO.java new file mode 100644 index 0000000..e9154a5 --- /dev/null +++ b/src/main/java/kcg/faics/equip/vo/EquipFileVO.java @@ -0,0 +1,13 @@ +package kcg.faics.equip.vo; + +import kcg.faics.cmmn.bbs.BaseFileVO; + +/** + * 외사수사 관련 파일 Value Object. + * + * @author lyh + * + */ +public class EquipFileVO extends BaseFileVO { + +} diff --git a/src/main/java/kcg/faics/equip/vo/EquipSearchVO.java b/src/main/java/kcg/faics/equip/vo/EquipSearchVO.java new file mode 100644 index 0000000..56e55d6 --- /dev/null +++ b/src/main/java/kcg/faics/equip/vo/EquipSearchVO.java @@ -0,0 +1,78 @@ +/** + * EquipSearchVO.java + * @author 임새미 + * @since 2016. 10. 24. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 24. 임새미 최초생성 + * + */ +package kcg.faics.equip.vo; + +/** + * EquipSearchVO.java + * @author 임새미 + * @since 2016. 10. 24. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 24. 임새미 최초생성 + * + */ +public class EquipSearchVO { + + private int year; + private int quater; + private String type; + private String police; + + /** + * @return the year + */ + public int getYear() { + return year; + } + /** + * @param year the year to set + */ + public void setYear(int year) { + this.year = year; + } + /** + * @return the quater + */ + public int getQuater() { + return quater; + } + /** + * @param quater the quater to set + */ + public void setQuater(int quater) { + this.quater = quater; + } + /** + * @return the type + */ + public String getType() { + return type; + } + /** + * @param type the type to set + */ + public void setType(String type) { + this.type = type; + } + /** + * @return the police + */ + public String getPolice() { + return police; + } + /** + * @param police the police to set + */ + public void setPolice(String police) { + this.police = police; + } +} diff --git a/src/main/java/kcg/faics/equip/vo/EquipVO.java b/src/main/java/kcg/faics/equip/vo/EquipVO.java new file mode 100644 index 0000000..aa6a5f4 --- /dev/null +++ b/src/main/java/kcg/faics/equip/vo/EquipVO.java @@ -0,0 +1,423 @@ +package kcg.faics.equip.vo; +/** + * EquipSearchVO.java + * @author 이영호 + * @since 2017. 6. 8. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2017. 6. 8. 이영호 최초생성 + * + */ +public class EquipVO { + private String serNo; + private String num; + private String equipType; + private String equipTypeName; + private String equipName; + private String police; + private String policeStr; + private String buyYear; + private String buyMonth; + private String buyDay; + private String buyDate; + private String useTerm; + private String standard; + private String purpose; + private String buyPlace; + private String price; + private String madeIn; + private String serialNo; + private String useSection; + private String operate; + private String fileName1; + private String fileName2; + private String fileName3; + private String bigo; + private String createDate; + private String writer; + private String logDate; + + /** + * @return the serNo + */ + public String getSerNo() { + return serNo; + } + + /** + * @return the num + */ + public String getNum() { + return num; + } + + /** + * @return the police + */ + public String getPolice() { + return police; + } + + /** + * @param police the police to set + */ + public void setPolice(String police) { + this.police = police; + } + + /** + * @return the policeStr + */ + public String getPoliceStr() { + return policeStr; + } + + /** + * @param policeStr the policeStr to set + */ + public void setPoliceStr(String policeStr) { + this.policeStr = policeStr; + } + + /** + * @param num the num to set + */ + public void setNum(String num) { + this.num = num; + } + + /** + * @param serNo the serNo to set + */ + public void setSerNo(String serNo) { + this.serNo = serNo; + } + /** + * @return the equipType + */ + public String getEquipType() { + return equipType; + } + + /** + * @return the equipTypeName + */ + public String getEquipTypeName() { + return equipTypeName; + } + + /** + * @param equipTypeName the equipTypeName to set + */ + public void setEquipTypeName(String equipTypeName) { + this.equipTypeName = equipTypeName; + } + + /** + * @param equip the equipType to set + */ + public void setEquipType(String equipType) { + this.equipType = equipType; + } + /** + * @return the equipName + */ + public String getEquipName() { + return equipName; + } + /** + * @param equipName the equipName to set + */ + public void setEquipName(String equipName) { + this.equipName = equipName; + } + /** + * @return the buyYear + */ + public String getBuyYear() { + return buyYear; + } + /** + * @param buyYear the buyYear to set + */ + public void setBuyYear(String buyYear) { + this.buyYear = buyYear; + } + /** + * @return the buyMonth + */ + public String getBuyMonth() { + return buyMonth; + } + /** + * @param buyMonth the buyMonth to set + */ + public void setBuyMonth(String buyMonth) { + this.buyMonth = buyMonth; + } + /** + * @return the buyDay + */ + public String getBuyDay() { + return buyDay; + } + /** + * @param buyDay the buyDay to set + */ + public void setBuyDay(String buyDay) { + this.buyDay = buyDay; + } + /** + * @return the buyDate + */ + public String getBuyDate() { + return buyDate; + } + /** + * @param buyDate the buyDate to set + */ + public void setBuyDate(String buyDate) { + this.buyDate = buyDate; + } + /** + * @return the useTerm + */ + public String getUseTerm() { + return useTerm; + } + /** + * @param useTerm the useTerm to set + */ + public void setUseTerm(String useTerm) { + this.useTerm = useTerm; + } + /** + * @return the standard + */ + public String getStandard() { + return standard; + } + /** + * @param standard the standard to set + */ + public void setStandard(String standard) { + this.standard = standard; + } + /** + * @return the purpose + */ + public String getPurpose() { + return purpose; + } + /** + * @param purpose the purpose to set + */ + public void setPurpose(String purpose) { + this.purpose = purpose; + } + /** + * @return the buyPlace + */ + public String getBuyPlace() { + return buyPlace; + } + /** + * @param buyPlace the buyPlace to set + */ + public void setBuyPlace(String buyPlace) { + this.buyPlace = buyPlace; + } + /** + * @return the price + */ + public String getPrice() { + return price; + } + /** + * @param price the price to set + */ + public void setPrice(String price) { + this.price = price; + } + /** + * @return the madeIn + */ + public String getMadeIn() { + return madeIn; + } + /** + * @param madeIn the madeIn to set + */ + public void setMadeIn(String madeIn) { + this.madeIn = madeIn; + } + /** + * @return the serialNo + */ + public String getSerialNo() { + return serialNo; + } + /** + * @param serialNo the serialNo to set + */ + public void setSerialNo(String serialNo) { + this.serialNo = serialNo; + } + /** + * @return the useSection + */ + public String getUseSection() { + return useSection; + } + /** + * @param useSection the useSection to set + */ + public void setUseSection(String useSection) { + this.useSection = useSection; + } + /** + * @return the operate + */ + public String getOperate() { + return operate; + } + /** + * @param operate the operate to set + */ + public void setOperate(String operate) { + this.operate = operate; + } + /** + * @return the fileName1 + */ + public String getFileName1() { + return fileName1; + } + /** + * @param fileName1 the fileName1 to set + */ + public void setFileName1(String fileName1) { + this.fileName1 = fileName1; + } + /** + * @return the fileName2 + */ + public String getFileName2() { + return fileName2; + } + /** + * @param fileName2 the fileName2 to set + */ + public void setFileName2(String fileName2) { + this.fileName2 = fileName2; + } + /** + * @return the fileName3 + */ + public String getFileName3() { + return fileName3; + } + /** + * @param fileName3 the fileName3 to set + */ + public void setFileName3(String fileName3) { + this.fileName3 = fileName3; + } + /** + * @return the bigo + */ + public String getBigo() { + return bigo; + } + /** + * @param bigo the bigo to set + */ + public void setBigo(String bigo) { + this.bigo = bigo; + } + /** + * @return the createDate + */ + public String getCreateDate() { + return createDate; + } + /** + * @param createDate the createDate to set + */ + public void setCreateDate(String createDate) { + this.createDate = createDate; + } + /** + * @return the writer + */ + public String getWriter() { + return writer; + } + /** + * @param writer the writer to set + */ + public void setWriter(String writer) { + this.writer = writer; + } + /** + * @return the logDate + */ + public String getLogDate() { + return logDate; + } + /** + * @param logDate the logDate to set + */ + public void setLogDate(String logDate) { + this.logDate = logDate; + } + + + + public void setBuyDateEach(){ + if( this.buyDate.length() == 8 ){ + this.buyYear = this.buyDate.substring(0,4); + this.buyMonth = this.buyDate.substring(4,6); + this.buyDay = this.buyDate.substring(6,8); + }else if(this.buyDate.length() == 10){ + this.buyYear = this.buyDate.substring(0,4); + this.buyMonth = this.buyDate.substring(5,7); + this.buyDay = this.buyDate.substring(8,10); + } + } + + public void print(){ + String totalStr = ""; + + totalStr += "[ serNo : " + this.serNo+ "] \n "; + totalStr += "[ num : " + this.num+ "] \n "; + totalStr += "[ equipType : " + this.equipType+ "] \n "; + totalStr += "[ equipTypeName : " + this.equipTypeName+ "] \n "; + totalStr += "[ equipName : " + this.equipName+ "] \n "; + totalStr += "[ police : " + this.police+ "] \n "; + totalStr += "[ policeStr : " + this.policeStr+ "] \n "; + totalStr += "[ buyYear : " + this.buyYear+ "] \n "; + totalStr += "[ buyMonth : " + this.buyMonth+ "] \n "; + totalStr += "[ buyDay : " + this.buyDay+ "] \n "; + totalStr += "[ buyDate : " + this.buyDate+ "] \n "; + totalStr += "[ useTerm : " + this.useTerm+ "] \n "; + totalStr += "[ standard : " + this.standard+ "] \n "; + totalStr += "[ purpose : " + this.purpose+ "] \n "; + totalStr += "[ buyPlace : " + this.buyPlace+ "] \n "; + totalStr += "[ price : " + this.price+ "] \n "; + totalStr += "[ madeIn : " + this.madeIn+ "] \n "; + totalStr += "[ serialNo : " + this.serialNo+ "] \n "; + totalStr += "[ useSection : " + this.useSection+ "] \n "; + totalStr += "[ operate : " + this.operate+ "] \n "; + totalStr += "[ fileName1 : " + this.fileName1+ "] \n "; + totalStr += "[ fileName2 : " + this.fileName2+ "] \n "; + totalStr += "[ fileName3 : " + this.fileName3+ "] \n "; + totalStr += "[ bigo : " + this.bigo+ "] \n "; + totalStr += "[ createDate : " + this.createDate+ "] \n "; + totalStr += "[ writer : " + this.writer+ "] \n "; + totalStr += "[ logDate : " + this.logDate+ "] \n "; + + System.out.println(totalStr); + } +} diff --git a/src/main/java/kcg/faics/equip/vo/StateWaitingSearchVO.java b/src/main/java/kcg/faics/equip/vo/StateWaitingSearchVO.java new file mode 100644 index 0000000..d19e302 --- /dev/null +++ b/src/main/java/kcg/faics/equip/vo/StateWaitingSearchVO.java @@ -0,0 +1,67 @@ +package kcg.faics.equip.vo; + +/** + * 사용실적 결재 검색조건 VO. + * + * @author kimnomin + * + */ +public class StateWaitingSearchVO { + /** + * 관리기관. + */ + private String police; + /** + * 년도. + */ + private String year; + /** + * 분기. + */ + private String quater; + + /** + * @return the police + */ + public final String getPolice() { + return police; + } + + /** + * @param police + * the police to set + */ + public final void setPolice(final String police) { + this.police = police; + } + + /** + * @return the year + */ + public final String getYear() { + return year; + } + + /** + * @param year + * the year to set + */ + public final void setYear(final String year) { + this.year = year; + } + + /** + * @return the quater + */ + public final String getQuater() { + return quater; + } + + /** + * @param quater + * the quater to set + */ + public final void setQuater(final String quater) { + this.quater = quater; + } +} diff --git a/src/main/java/kcg/faics/equip/vo/UseStateVO.java b/src/main/java/kcg/faics/equip/vo/UseStateVO.java new file mode 100644 index 0000000..15cc98c --- /dev/null +++ b/src/main/java/kcg/faics/equip/vo/UseStateVO.java @@ -0,0 +1,278 @@ +package kcg.faics.equip.vo; + +import java.util.Date; + +/** + * 장비사용실적 VO. + * + * @author kimnomin + * + */ +public class UseStateVO { + /** + * 관리기관. + */ + private String police; + /** + * 관리기관명. + */ + private String policeStr; + /** + * 년도. + */ + private String year; + /** + * 분기. + */ + private String quater; + /** + * 장비코드. + */ + private String code; + /** + * 장비명. + */ + private String codeStr; + /** + * 장비사용횟수. + */ + private int cnt; + /** + * 사용실적. + */ + private String detail; + /** + * 장비상태. + */ + private String state; + /** + * 점검횟수. + */ + private int check; + /** + * 작성일. + */ + private Date regdate; + /** + * 작성자. + */ + private String writer; + /** + * 결재내역의 seq번호. + */ + private int approvalSeq; + /** + * 결재일자. + */ + private Date approvalDate; + + /** + * @return the police + */ + public final String getPolice() { + return police; + } + + /** + * @param police + * the police to set + */ + public final void setPolice(final String police) { + this.police = police; + } + + /** + * @return the policeStr + */ + public final String getPoliceStr() { + return policeStr; + } + + /** + * @param policeStr + * the policeStr to set + */ + public final void setPoliceStr(final String policeStr) { + this.policeStr = policeStr; + } + + /** + * @return the year + */ + public final String getYear() { + return year; + } + + /** + * @param year + * the year to set + */ + public final void setYear(final String year) { + this.year = year; + } + + /** + * @return the quater + */ + public final String getQuater() { + return quater; + } + + /** + * @param quater + * the quater to set + */ + public final void setQuater(final String quater) { + this.quater = quater; + } + + /** + * @return the code + */ + public final String getCode() { + return code; + } + + /** + * @param code + * the code to set + */ + public final void setCode(final String code) { + this.code = code; + } + + /** + * @return the codeStr + */ + public final String getCodeStr() { + return codeStr; + } + + /** + * @param codeStr + * the codeStr to set + */ + public final void setCodeStr(final String codeStr) { + this.codeStr = codeStr; + } + + /** + * @return the cnt + */ + public final int getCnt() { + return cnt; + } + + /** + * @param cnt + * the cnt to set + */ + public final void setCnt(final int cnt) { + this.cnt = cnt; + } + + /** + * @return the detail + */ + public final String getDetail() { + return detail; + } + + /** + * @param detail + * the detail to set + */ + public final void setDetail(final String detail) { + this.detail = detail; + } + + /** + * @return the state + */ + public final String getState() { + return state; + } + + /** + * @param state + * the state to set + */ + public final void setState(final String state) { + this.state = state; + } + + /** + * @return the check + */ + public final int getCheck() { + return check; + } + + /** + * @param check + * the check to set + */ + public final void setCheck(final int check) { + this.check = check; + } + + /** + * @return the regdate + */ + public final Date getRegdate() { + return regdate; + } + + /** + * @param regdate + * the regdate to set + */ + public final void setRegdate(final Date regdate) { + this.regdate = regdate; + } + + /** + * @return the writer + */ + public final String getWriter() { + return writer; + } + + /** + * @param writer + * the writer to set + */ + public final void setWriter(final String writer) { + this.writer = writer; + } + + /** + * @return the approvalSeq + */ + public final int getApprovalSeq() { + return approvalSeq; + } + + /** + * @param approvalSeq + * the approvalSeq to set + */ + public final void setApprovalSeq(final int approvalSeq) { + this.approvalSeq = approvalSeq; + } + + /** + * @return the approvalDate + */ + public final Date getApprovalDate() { + return approvalDate; + } + + /** + * @param approvalDate + * the approvalDate to set + */ + public final void setApprovalDate(final Date approvalDate) { + this.approvalDate = approvalDate; + } +} \ No newline at end of file diff --git a/src/main/java/kcg/faics/equip/web/EquipmentController.java b/src/main/java/kcg/faics/equip/web/EquipmentController.java new file mode 100644 index 0000000..35cf7a1 --- /dev/null +++ b/src/main/java/kcg/faics/equip/web/EquipmentController.java @@ -0,0 +1,756 @@ +package kcg.faics.equip.web; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import kcg.faics.cmmn.CommonsUtils; +import kcg.faics.cmmn.excel.ExcelExporter; +import kcg.faics.cmmn.file.FileResponser; +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.cmmn.vo.CodeVO; +import kcg.faics.equip.service.ApproveService; +import kcg.faics.equip.service.EquipmentService; +import kcg.faics.equip.service.StateWaitingService; +import kcg.faics.equip.service.impl.EquipmentServiceImpl; +import kcg.faics.equip.vo.ApproveVO; +import kcg.faics.equip.vo.EquipSearchVO; +import kcg.faics.equip.vo.EquipVO; +import kcg.faics.equip.vo.StateWaitingSearchVO; +import kcg.faics.equip.vo.UseStateVO; +import kcg.faics.member.service.MemberAuthService; +import kcg.faics.member.vo.MemberVO; +import kcg.faics.sec.AuthType; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.UserUtil; +import kcg.faics.target.service.impl.DivMngServiceImpl; +import kcg.faics.target.vo.DivMngVO; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.util.FileCopyUtils; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.support.SessionStatus; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +import egovframework.rte.fdl.property.EgovPropertyService; + +/** + * FaEquipmentController.java + * @author 임새미 + * @since 2016. 10. 13. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 13. 임새미 최초생성 + * + */ +@Controller +@RequestMapping("/equip") +public class EquipmentController { + + /** + * 사용실적 결재관련 서비스 객체. + */ + @Resource(name = "equipStateWaitingSerivce") + private StateWaitingService stateWaitingService; + + /** + * 사용실적 결재관련 서비스 객체. + */ + @Resource(name = "approveService") + private ApproveService approveService; + + @Resource(name = "equipmentService") + EquipmentService equipmentService; + + @Resource(name = "codeService") + CodeService codeService; + + /** + * properties값을 가져오는 인터페이스. + **/ + @Resource(name = "propertiesService") + private EgovPropertyService propertiesService; + + /** + * 사용자 권한 서비스 객체 . + */ + @Resource(name = "memberAuthService") + private MemberAuthService memberAuthService; + + /** + * message.properties의 값을 가져오는 인터페이스. + */ + @Autowired + private MessageSource messageSource; + + /** + * 외사 경찰의 장비 보유 현황을 가져온다. + * + * @param model Model객체 + * @return 외사장비현황 + */ + @RequestMapping("/status.do") + public String equipStatusView(final Model model) throws Exception { + + List> equipStatusList = equipmentService.getEquipmentList(); + try { + + model.addAttribute("equipStatusList", equipStatusList); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "equip/status.tiles"; + } + + /** + * 외사 경찰의 장비 보유 현황을 엑셀로 출력한다. + * + * @param model Model객체 + * @return 외사장비현황 + */ + @RequestMapping("/statusExcel.do") + public String equipStatusExcel(final Model model) throws Exception { + + String title = "외사장비현황"; + + List> equipStatusList = equipmentService.getEquipmentList(); + + LinkedHashMap header = new LinkedHashMap(); + List codeList = codeService.getPlace1List(true); + header.put("EQUIP_NM", "구분"); + header.put("TOTAL", "계"); + + /*if (codeList != null) { + for (CodeVO vo : codeList) { + header.put(vo.getCode2(), vo.getCodenmYak()); + } + }*/ + + try { + + model.addAttribute("equipStatusList", equipStatusList); + if (codeList != null) { + for (CodeVO vo : codeList) { + header.put(vo.getCode2(), vo.getCodenmYak()); + } + } + + } catch (Exception e) { + e.printStackTrace(); + } + + model.addAttribute("excel", new ExcelExporter>(header, equipStatusList, title)); + model.addAttribute("filename", title); + + return "excelView"; + } + + + /** + * 외사장비의 사용실적을 가져온다. + * + * @param searchVO 파라미터 관리를 위한 EquipSearchVO 객체 + * @param model Model객체 + * @return 외사장비현황 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/useStateList.do") + public String equipUseStateList(@ModelAttribute("searchVO") final EquipSearchVO searchVO, final Model model) throws Exception { + List> year = equipmentService.getEquipYearList(); + EquipSearchVO equipSearchVO = new EquipSearchVO(); + + Calendar c = Calendar.getInstance(); + int currYear = c.get(Calendar.YEAR); + int lastYear = Integer.parseInt((String) year.get(year.size() - 1).get("UYEAR")); + for (int i = lastYear + 1; i <= currYear; i++) { + HashMap map = new HashMap(); + map.put("UYEAR", i); + year.add(map); + } + + /* 파라미터가 없을 때의 초기 값 */ + if (searchVO == null || searchVO.getYear() == 0) { + equipSearchVO.setYear(lastYear); + equipSearchVO.setType("a"); + equipSearchVO.setQuater(1); + } else { + equipSearchVO.setYear(searchVO.getYear()); + equipSearchVO.setType(searchVO.getType()); + equipSearchVO.setQuater(searchVO.getQuater()); + } + + model.addAttribute("equipStatusList", equipmentService.getEquipUseStateList(equipSearchVO)); + model.addAttribute("equipStatusYearList", year); + model.addAttribute("searchVO", equipSearchVO); + + return "equip/useStateList.tiles"; + } + + /** + * 외사장비의 사용실적을 입력화면을 가져온다. + * + * @param searchVO EquipSearchVO 객체 + * @param model Model객체 + * @return 외사장비현황 + */ + @RequestMapping(value = "/useStateAddView.do", method=RequestMethod.POST) + public String equipUseStateAddView(@ModelAttribute("searchVO") final EquipSearchVO searchVO, final Model model) throws Exception { + List> equipUseStateInfo = equipmentService.getEquipUseStateInfo(searchVO); + if (equipUseStateInfo != null) { + model.addAttribute("equipList", equipUseStateInfo); + model.addAttribute("registerFlag", "modify"); + } else { + model.addAttribute("equipList", equipmentService.getEquipmentCodeList()); + model.addAttribute("registerFlag", "create"); + } + model.addAttribute("fail", false); + model.addAttribute("searchVO", searchVO); + + return "equip/useStateAdd.tiles"; + } + + /** + * 외사장비의 사용실적을 입력한다. + * + * @param req HttpServletRequest 객체 + * @param searchVO EquipSearchVO 객체 + * @param model Model객체 + * @return 외사장비현황 + */ + @RequestMapping(value = "/useStateAdd.do", method=RequestMethod.POST) + public String equipUseStateAdd(final HttpServletRequest req, final EquipSearchVO searchVO, final Model model) throws Exception { + try { + HashMap paramMap = CommonsUtils.getParameterMap(req); + HashMap> dataMap = new HashMap>(); + LoginUserVO user = UserUtil.getMemberInfo(); + + Set keySet = paramMap.keySet(); + Iterator it = keySet.iterator(); + while (it.hasNext()) { + String key = it.next(); + if (key.contains("_")) { + String code = key.split("_")[0]; + String col = key.split("_")[1]; + String value = (String) paramMap.get(key); + + HashMap map = dataMap.get(code); + if (dataMap.get(code) == null) { + map = new HashMap(); + map.put("police", searchVO.getPolice()); + map.put("quater", searchVO.getQuater()); + map.put("year", searchVO.getYear()); + map.put("writer", user.getUserid()); + map.put("code", code); + + dataMap.put(code, map); + } + + if (col.equals("cnt") || col.equals("check")) { + map.put(col, (value == null || value.equals("")) ? 0 : Integer.parseInt(value)); + } else { + map.put(col, value); + } + } + } + + int result = equipmentService.insertEquipUseState(searchVO, dataMap); + if (result > 0) { + return "redirect:/equip/useStateList.do?year=" + searchVO.getYear() + "&quater=" + searchVO.getQuater() + "&type=a"; + } else { + throw new Exception(); + } + + } catch (Exception e) { + e.printStackTrace(); + + req.setAttribute("fail", true); + return "forward:/equip/useStateAddView.do"; + } + } + + /** + * 외사 경찰의 장비 사용 현황을 엑셀로 출력한다. + * + * @param model Model객체 + * @return 외사장비 사용실적 현황 + */ + @RequestMapping("/useStateExcel.do") + public String equipUseStateExcel(final EquipSearchVO searchVO, final Model model) throws Exception { + + String type = (searchVO.getType().equals("a") ? "사용" : "점검"); + String title = "외사장비 " + type + " 실적현황"; + + List> equipStatusList = equipmentService.getEquipUseStateList(searchVO); + + LinkedHashMap header = new LinkedHashMap(); + List codeList = codeService.getPlace1List(true); + header.put("GUBUN", "구분"); + header.put("TOTAL", "계"); + + if (codeList != null) { + for (CodeVO vo : codeList) { + header.put(vo.getCode2(), vo.getCodenmYak()); + } + } + + model.addAttribute("excel", new ExcelExporter>(header, equipStatusList, title)); + model.addAttribute("filename", title); + + return "excelView"; + } + + + /** + * 사이버외사장비 조회화면을 반환한다. + * + * @param model + * Model객체 + * @return 외사장비 사용실적 현황 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping("/cyberEquipList.do") + public String cyberEquipList(final Model model) throws Exception { + return "equip/cyberEquipList.tiles"; + } + + /** + * 사용실적 결재목록 조회화면을 반환한다. + * + * @param searchVO + * 검색조건 VO + * @param model + * Model 객체 + * @return 사용실적 결재목록 조회화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping("/useStateWaiting.do") + public String stateWaitingList(@ModelAttribute("searchVO") final StateWaitingSearchVO searchVO, final Model model) throws Exception { + List yearList = new ArrayList(); + Calendar c = Calendar.getInstance(); + int currYear = c.get(Calendar.YEAR); + for (int i = 2005; i <= currYear; i++) { + yearList.add(i); + } + model.addAttribute("yearList", yearList); + + LoginUserVO user = UserUtil.getMemberInfo(); + searchVO.setPolice(user.getPlace1()); + if (StringUtils.isBlank(searchVO.getYear())) { + searchVO.setYear(Integer.toString(currYear)); + } + + List stateWaitingList = stateWaitingService.selectList(searchVO); + model.addAttribute("stateWaitingList", stateWaitingList); + + return "equip/stateWaitingList.tiles"; + } + + /** + * 사용실적 결재화면을 반환한다. + * + * @param approveVO + * 조회할 사용실적 결재 VO + * @param model + * Model 객체 + * @return 사용실적 결재화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping("/useStateApprove.do") + public String useStateApprove(final ApproveVO approveVO, final Model model) throws Exception { + + EquipSearchVO searchVO = new EquipSearchVO(); + searchVO.setPolice(approveVO.getPolice()); + searchVO.setYear(Integer.parseInt(approveVO.getYear())); + searchVO.setQuater(Integer.parseInt(approveVO.getQuater())); + + List> useStateList = equipmentService.getEquipUseStateInfo(searchVO); + model.addAttribute("useStateList", useStateList); + + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + model.addAttribute("loginUserVO", loginUserVO); + + String approvePlace1 = ""; + if (StringUtils.isBlank(approveVO.getPolice())) { + approvePlace1 = approveVO.getPolice(); + } else { + approvePlace1 = loginUserVO.getPlace1(); + } + MemberVO headVO = memberAuthService.getHead(approvePlace1); + headVO.setPositionStr(codeService.getPositionStr(headVO.getPosition())); + headVO.setPlace1Str(codeService.getPlace1Str(headVO.getPlace1())); + model.addAttribute("headVO", headVO); + + ApproveVO apprVo = approveService.select(approveVO); + if (apprVo != null) { + model.addAttribute("approveVO", apprVo); + } + + return "equip/useStateApprove.tiles"; + } + + /** + * 사용실적을 결재한다. + * + * @param approveVO + * 결재정보 VO + * @param model + * Model 객체 + * @return 사용실적 결재목록 조회화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/useStateApprove.do", method = RequestMethod.POST) + public String approve(final ApproveVO approveVO, final Model model) throws Exception { + HashMap result = approveService.insert(approveVO, null); + if ("1".equals(result.get("result").toString())) { + return String + .format("redirect:/equip/useStateWaiting.do?police=%s&year=%s&quater=%s", + approveVO.getPolice(), approveVO.getYear(), + approveVO.getQuater()); + } + return useStateApprove(approveVO, model); + } + + /** + * 외사장비목륵을 조회한다. + * + * @param equipSearchVO + * @param model 모델 객체 + * @return 외사장비현황 목록화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/equipList.do") + public String equipList(final EquipSearchVO equipSearchVO, Model model, HttpServletRequest request) throws Exception { + List equipList = null; // 외사장비구분 + List equipmentList = null; // 외사장비목록 + int temp = 0; + temp = temp + 1; + + try { + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + + + + if( equipSearchVO.getType() == null || equipSearchVO.getType().equals("")){ + if( request.getParameter("type") == null ){ + equipSearchVO.setType("02"); + }else{ + equipSearchVO.setType(request.getParameter("type")); + } + } + + equipmentList = equipmentService.getEquipList(equipSearchVO); + List result = null; + // 공통코드 조회 + equipList = codeService.getCodeValues("EQUI", ""); /* 외사장비구분 */ + + model.addAttribute("loginUserVO", loginUserVO); + model.addAttribute("equipList", equipList); + model.addAttribute("equipmentList", equipmentList); + //model.addAttribute("regFlag", "modify"); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "/equip/equipList.tiles"; + } + + /** + * 외사장비 단건정보를 반환한다. + * + * @param model + * Model 객체 + * @param divMngVO + * 외사분실운영현황 VO + * @return 외사분실운영현황 정보 조회화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/equipView.do") + public String equipView(final Model model, final EquipVO equipVO) throws Exception { + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + EquipSearchVO esVO = new EquipSearchVO(); + + model.addAttribute("loginUserVO", loginUserVO); + + EquipVO vo = equipmentService.getEquipment(equipVO); + + + + model.addAttribute("equipVO", vo); + model.addAttribute("equipSearchVO", esVO); + + return "/equip/equipView.tiles"; + } + + /** + * 외사장비등록화면을 반환한다. + * + * @param model + * Model 객체 + * @param equipVO + * 외사장비 VO + * @return 외사장비 등록화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/equipAdd.do") + public String equipAdd(final Model model, final EquipVO equipVO) throws Exception { + LoginUserVO loginUserVo = new LoginUserVO(); + List placeList = null; // 소속 + List equipList = null; // 소속 + + try{ + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + + if (AuthType.LOCAL_HEADQUARTERS == loginUserVo.getAuthType()) { + placeList = codeService.getPlace1SubList(loginUserVo.getPlace1()); + } else { + placeList = codeService.getPlace1List(false); + } + equipList = codeService.getCodeValues("EQUI", ""); /* 외사장비구분 */ + + model.addAttribute("loginUserVO", loginUserVO); + model.addAttribute("policeList", placeList); + model.addAttribute("equipList", equipList); + + + + if( equipVO.getSerNo() == null ){ + + model.addAttribute("registerFlag", "create"); + }else{ + EquipVO vo = equipmentService.getEquipment(equipVO); + model.addAttribute("registerFlag", "modify"); + model.addAttribute("equipVO", vo); + } + + + + + }catch (Exception e){ + e.printStackTrace(); + } + + return "/equip/equipAdd.tiles"; + } + + /** + * 외사장비를 등록한다. + * + * @param equipVO + * 외사장비정보 객체 + * @param bindingResult + * 바인딩 객체 + * @param model + * 모델 객체 + * @param status + * 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/equipSave.do", method = RequestMethod.POST) + public String equipSave( + @ModelAttribute("equipVO") final EquipVO equipVO, + final BindingResult bindingResult, final Model model, + final SessionStatus status, final MultipartHttpServletRequest multiRequest) throws Exception { + + HashMap result = new HashMap(); + try { + + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + + + equipVO.setBuyDateEach(); + + // 파일 저장 및 데이터 입력 + String[] deleteFiles = multiRequest.getParameterValues("deleteFile"); + final Map fileMap = multiRequest.getFileMap(); + + + if( equipVO.getSerNo().equals("") || equipVO.getSerNo().equals(null)){ + /* 등록 처리 */ + + equipVO.setWriter(loginUserVO.getUserid()); + + equipVO.print(); + + /* 외사장비 등록 */ + result = equipmentService.insertEquipment(equipVO, fileMap); + }else{ + /* 수정 처리 */ + result = equipmentService.updateEquipment(equipVO, fileMap, deleteFiles); + } + + + equipVO.print(); + + + + } catch (Exception e) { + e.printStackTrace(); + } + + if ((Integer) result.get("result") != 1) { + return "redirect:/equip/equipAdd.do"; + } + + return "redirect:/equip/equipList.do?type="+equipVO.getEquipType(); + } + + /** + * 파일을 반환한다. + * + * @param divMngVO + * 외사분실운영현황 VO + * @param fileId + * 파일ID + * @param request + * HttpServletRequest 객체 + * @param response + * HttpServletResponse 객체 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/download.do") + public void fileResponse(final EquipVO equipVO, final String fileName, + final HttpServletRequest request, final HttpServletResponse response) + throws Exception { + EquipVO vo = equipmentService.getEquipment(equipVO); + //String fileName = ""; + + //fileName = vo.getFileName1(); + System.out.println("fileName : " + fileName); + if (StringUtils.isNotBlank(fileName)) { + String fileFullPath = propertiesService + .getString(EquipmentServiceImpl.EQUIP_SAVE_PATH) + fileName; + File file = new File(fileFullPath); + if (file.exists()) { + FileResponser.setResponse(file, fileName, request, response); + BufferedInputStream in = null; + try { + in = new BufferedInputStream(new FileInputStream(file)); + FileCopyUtils.copy(in, response.getOutputStream()); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (in != null) { + try { + in.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } else { + response.setStatus(HttpStatus.NOT_FOUND.value()); + throw new Exception(); + } + } + } + + /** + * 외사장비를 삭제한다. + * @param equipVO + * 외사장비 객체 + * @param bindingResult + * 바인딩 객체 + * @param model + * 모델 객체 + * @param status + * 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/equipDelete.do", method = RequestMethod.POST) + public String arrestDelete(@ModelAttribute("equipVO") final EquipVO equipVO, + final BindingResult bindingResult, final Model model, final SessionStatus status) throws Exception { + + HashMap result = new HashMap(); + try { + + //equipVO.setDelYn("Y"); // 삭제여부 + + result = equipmentService.deleteEquipment(equipVO); + + } catch (Exception e) { + e.printStackTrace(); + } + + if ((Integer) result.get("result") != 1) { + return "redirect:/equip/equipView.do"; + } + + return "redirect:/equip/equipList.do?type="+equipVO.getEquipType(); + } + + /** + * 외사장비현황 목록을 엑셀로 반환한다. + * + * @param model + * Model 객체 + * @param locale + * Locale 객체 + * @param searchVO + * 검색조건 VO + * @return 외사장비현황 목록 엑셀 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/listtoexcel.do") + public String listToExcel(final Model model, final Locale locale, + @ModelAttribute("searchVO") final EquipSearchVO searchVO) + throws Exception { + String title = messageSource.getMessage("menu.equip.stat", null, locale); + + // 엑셀 헤더 생성 + LinkedHashMap header = new LinkedHashMap(); + header.put("num", messageSource.getMessage("equip.num", null, locale)); + header.put("policeStr", messageSource.getMessage("equip.police", null, locale)); + header.put("equipTypeName", messageSource.getMessage("equip.equipType", null, locale)); + header.put("equipName", messageSource.getMessage("equip.equipName", null, locale)); + //header.put("buyDate", messageSource.getMessage("equip.buyDate", null, locale)); + + // 데이터 생성 + List equipList = equipmentService.getEquipList(searchVO); + + + + // Export + model.addAttribute("excel", new ExcelExporter(header, equipList, title)); + model.addAttribute("filename", title); + + return "excelView"; + } +} diff --git a/src/main/java/kcg/faics/etc/web/EtcMenuController.java b/src/main/java/kcg/faics/etc/web/EtcMenuController.java new file mode 100644 index 0000000..8072276 --- /dev/null +++ b/src/main/java/kcg/faics/etc/web/EtcMenuController.java @@ -0,0 +1,38 @@ +package kcg.faics.etc.web; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +/** + * 시스템 상단 기타 메뉴 컨트롤러. + * + * @author kimnomin + * + */ +@Controller +public class EtcMenuController { + + /** + * 사이트맵. + * + * @return 사이트맵 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping("/sitemap.do") + public String sitemap() throws Exception { + return "etc/sitemap.tiles"; + } + + /** + * QnA. + * + * @return QnA 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping("/qna.do") + public String qna() throws Exception { + return "etc/qna"; + } +} diff --git a/src/main/java/kcg/faics/etc/web/package-info.java b/src/main/java/kcg/faics/etc/web/package-info.java new file mode 100644 index 0000000..929a7c4 --- /dev/null +++ b/src/main/java/kcg/faics/etc/web/package-info.java @@ -0,0 +1,8 @@ +/** + * 데이터 구조가 없는 기타 웹페이지 패키지 + */ +/** + * @author kimnomin + * + */ +package kcg.faics.etc.web; \ No newline at end of file diff --git a/src/main/java/kcg/faics/fa/service/EduService.java b/src/main/java/kcg/faics/fa/service/EduService.java new file mode 100644 index 0000000..b2b5fae --- /dev/null +++ b/src/main/java/kcg/faics/fa/service/EduService.java @@ -0,0 +1,15 @@ +package kcg.faics.fa.service; + +import kcg.faics.cmmn.bbs.BaseBbsService; +import kcg.faics.fa.vo.EduSearchVO; +import kcg.faics.fa.vo.EduVO; + +/** + * 교육현황 인터페이스. + * + * @author kimnomin + * + */ +public interface EduService extends BaseBbsService { + +} diff --git a/src/main/java/kcg/faics/fa/service/impl/EduMapper.java b/src/main/java/kcg/faics/fa/service/impl/EduMapper.java new file mode 100644 index 0000000..56ca40b --- /dev/null +++ b/src/main/java/kcg/faics/fa/service/impl/EduMapper.java @@ -0,0 +1,81 @@ +package kcg.faics.fa.service.impl; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.fa.vo.EduSearchVO; +import kcg.faics.fa.vo.EduVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +/** + * 교육현황 Mapper. + * + * @author kimnomin + * + */ +@Repository("eduMapper") +public class EduMapper extends EgovAbstractMapper { + /** + * 교육현황을 입력한다. + * + * @param vo 입력할 VO + * @return 1:성공, else:실패 + * @throws Exception 기본예외처리 + */ + public int insert(final EduVO vo) throws Exception { + return insert("Edu.insert", vo); + } + + /** + * 교육현황 정보 한 건을 반환한다. + * + * @param vo + * 조회할 교육현황 VO + * @return 교육현황 정보 한 건 + * @throws Exception + * 기본 예외 처리 + */ + public EduVO select(final EduVO vo) throws Exception { + return selectOne("Edu.select", vo); + } + + /** + * 교육현황 목록을 반환한다. + * + * @param searchVO + * 검색조건 VO + * @return 교육현황 목록 + */ + public List selectList(final EduSearchVO searchVO) { + return selectList("Edu.selectList", searchVO); + } + + /** + * 교육현황 정보를 수정한다. + * + * @param vo + * 교육현황 VO + * @return 수정된 레코드 개수 + * @throws Exception + * 기본 예외 처리 + */ + public int update(final EduVO vo) throws Exception { + return update("Edu.update", vo); + } + + /** + * 교육현황 정보를 삭제한다. + * + * @param vo + * 교육현황 VO + * @return 삭제된 레코드 개수 + * @throws Exception + * 기본 예외 처리 + */ + public int delete(final EduVO vo) throws Exception { + return delete("Edu.delete", vo); + } +} diff --git a/src/main/java/kcg/faics/fa/service/impl/EduServiceImpl.java b/src/main/java/kcg/faics/fa/service/impl/EduServiceImpl.java new file mode 100644 index 0000000..b7c6784 --- /dev/null +++ b/src/main/java/kcg/faics/fa/service/impl/EduServiceImpl.java @@ -0,0 +1,91 @@ +package kcg.faics.fa.service.impl; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.fa.service.EduService; +import kcg.faics.fa.vo.EduSearchVO; +import kcg.faics.fa.vo.EduVO; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +/** + * 교육현황 비즈니스 로직. + * + * @author kimnomin + * + */ +@Service("eduService") +public class EduServiceImpl extends EgovAbstractServiceImpl implements EduService { + + /** + * 교육현황 Mapper. + */ + @Resource(name = "eduMapper") + private EduMapper eduMapper; + + @Override + public EduVO select(final EduVO dataVO) throws Exception { + return eduMapper.select(dataVO); + } + + @Override + public List selectListAll(final EduSearchVO searchVO) throws Exception { + // TODO Auto-generated method stub + return null; + } + + @Override + public List selectList(final EduSearchVO searchVO) throws Exception { + if (CodeService.LIST_ALL_VAL.equals(searchVO.getEduCourse())) { + searchVO.setEduCourse(""); + } + if (CodeService.LIST_ALL_VAL.equals(searchVO.getPlace1())) { + searchVO.setPlace1(""); + } + return eduMapper.selectList(searchVO); + } + + @Override + public int selectListCnt(final EduSearchVO searchVO) throws Exception { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int selectTotalCnt(final EduSearchVO searchVO) throws Exception { + // TODO Auto-generated method stub + return 0; + } + + @Override + public HashMap insert(final EduVO dataVO, + final Map fileMap) throws Exception { + HashMap map = new HashMap(); + map.put("result", eduMapper.insert(dataVO)); + return map; + } + + @Override + public HashMap update(final EduVO dataVO, + final Map fileMap, final String[] deleteFiles) + throws Exception { + HashMap map = new HashMap(); + map.put("result", eduMapper.update(dataVO)); + return map; + } + + @Override + public HashMap delete(final EduVO dataVO) throws Exception { + HashMap map = new HashMap(); + map.put("result", eduMapper.delete(dataVO)); + return map; + } + +} diff --git a/src/main/java/kcg/faics/fa/service/package-info.java b/src/main/java/kcg/faics/fa/service/package-info.java new file mode 100644 index 0000000..ccbb8ec --- /dev/null +++ b/src/main/java/kcg/faics/fa/service/package-info.java @@ -0,0 +1,8 @@ +/** + * 인력관리 관련 Service 패키지 + */ +/** + * @author kimnomin + * + */ +package kcg.faics.fa.service; \ No newline at end of file diff --git a/src/main/java/kcg/faics/fa/vo/EduSearchVO.java b/src/main/java/kcg/faics/fa/vo/EduSearchVO.java new file mode 100644 index 0000000..83cc187 --- /dev/null +++ b/src/main/java/kcg/faics/fa/vo/EduSearchVO.java @@ -0,0 +1,110 @@ +package kcg.faics.fa.vo; + +import kcg.faics.cmmn.bbs.BaseSearchVO; + +/** + * 교육현황 검색 관련 Value Object. + * + * @author kimnomin + * + */ +public class EduSearchVO extends BaseSearchVO { + /** + * 교육과정. + */ + private String eduCourse; + + /** + * 소속. + */ + private String place1; + + /** + * 이름. + */ + private String name; + + /** + * 정렬 필드명. + */ + private String orderCol; + + /** + * 정렬 순서. + */ + private String orderAsc; + + /** + * @return the eduCourse + */ + public final String getEduCourse() { + return eduCourse; + } + + /** + * @param eduCourse + * the eduCourse to set + */ + public final void setEduCourse(final String eduCourse) { + this.eduCourse = eduCourse; + } + + /** + * @return the place1 + */ + public final String getPlace1() { + return place1; + } + + /** + * @param place1 + * the place1 to set + */ + public final void setPlace1(final String place1) { + this.place1 = place1; + } + + /** + * @return the name + */ + public final String getName() { + return name; + } + + /** + * @param name + * the name to set + */ + public final void setName(final String name) { + this.name = name; + } + + /** + * @return the orderCol + */ + public final String getOrderCol() { + return orderCol; + } + + /** + * @param orderCol the orderCol to set + */ + public final void setOrderCol(final String orderCol) { + this.orderCol = orderCol; + } + + /** + * @return the orderAsc + */ + public final String getOrderAsc() { + return orderAsc; + } + + /** + * @param orderAsc the orderAsc to set + */ + public final void setOrderAsc(final String orderAsc) { + this.orderAsc = orderAsc; + } + +} \ No newline at end of file diff --git a/src/main/java/kcg/faics/fa/vo/EduVO.java b/src/main/java/kcg/faics/fa/vo/EduVO.java new file mode 100644 index 0000000..7507ac4 --- /dev/null +++ b/src/main/java/kcg/faics/fa/vo/EduVO.java @@ -0,0 +1,469 @@ +package kcg.faics.fa.vo; + +import java.util.Date; + +/** + * 교육현황 VO. + * + * @author kimnomin + * + */ +public class EduVO { + /** + * 식벌자. + */ + private int idx; + /** + * 성명. + */ + private String name; + /** + * 교육시작일. + */ + private String stdate; + /** + * 교육종료일. + */ + private String eddate; + /** + * 교육기간. + */ + private String eduTerm; + /** + * 교육과정. + */ + private String eduCourse; + /** + * 교육과정 명칭. + */ + private String eduCourseStr; + /** + * 교육기관. + */ + private String eduPlace; + /** + * 사용자ID. + */ + private String userId; + /** + * 소속1. + */ + private String place1; + /** + * 소속2. + */ + private String place2; + /** + * 최종학력. + */ + private String scholarship; + /** + * 최종학력 명칭. + */ + private String scholarshipStr; + /** + * 계급. + */ + private String position; + /** + * 계급 명칭. + */ + private String positionStr; + /** + * 직별. + */ + private String jobtype; + /** + * 경찰임용일. + */ + private String sdate; + /** + * 현계급임용일. + */ + private String pdate; + /** + * 현부서배치일. + */ + private String adate; + /** + * 비고. + */ + private String comment; + /** + * 신규등록일. + */ + private Date regdate; + /** + * 최종수정일. + */ + private Date logdate; + /** + * 작성자. + */ + private String writer; + /** + * 생년월일. + */ + private String birth; + + /** + * @return the idx + */ + public final int getIdx() { + return idx; + } + + /** + * @param idx + * the idx to set + */ + public final void setIdx(final int idx) { + this.idx = idx; + } + + /** + * @return the name + */ + public final String getName() { + return name; + } + + /** + * @param name + * the name to set + */ + public final void setName(final String name) { + this.name = name; + } + + /** + * @return the stdate + */ + public final String getStdate() { + return stdate; + } + + /** + * @param stdate + * the stdate to set + */ + public final void setStdate(final String stdate) { + this.stdate = stdate; + this.setEduTerm(); + } + + /** + * @return the eddate + */ + public final String getEddate() { + return eddate; + } + + /** + * @param eddate + * the eddate to set + */ + public final void setEddate(final String eddate) { + this.eddate = eddate; + this.setEduTerm(); + } + + /** + * @return the eduTerm + */ + public final String getEduTerm() { + return eduTerm; + } + + /** + * 교육기간 문자열을 설정한다. + */ + public final void setEduTerm() { + this.eduTerm = this.stdate + " ~ " + this.eddate; + } + + /** + * @return the eduCourse + */ + public final String getEduCourse() { + return eduCourse; + } + + /** + * @param eduCourse + * the eduCourse to set + */ + public final void setEduCourse(final String eduCourse) { + this.eduCourse = eduCourse; + } + + /** + * @return the eduCourseStr + */ + public final String getEduCourseStr() { + return eduCourseStr; + } + + /** + * @param eduCourseStr + * the eduCourseStr to set + */ + public final void setEduCourseStr(final String eduCourseStr) { + this.eduCourseStr = eduCourseStr; + } + + /** + * @return the eduPlace + */ + public final String getEduPlace() { + return eduPlace; + } + + /** + * @param eduPlace + * the eduPlace to set + */ + public final void setEduPlace(final String eduPlace) { + this.eduPlace = eduPlace; + } + + /** + * @return the userId + */ + public final String getUserId() { + return userId; + } + + /** + * @param userId + * the userId to set + */ + public final void setUserId(final String userId) { + this.userId = userId; + } + + /** + * @return the place1 + */ + public final String getPlace1() { + return place1; + } + + /** + * @param place1 + * the place1 to set + */ + public final void setPlace1(final String place1) { + this.place1 = place1; + } + + /** + * @return the place2 + */ + public final String getPlace2() { + return place2; + } + + /** + * @param place2 + * the place2 to set + */ + public final void setPlace2(final String place2) { + this.place2 = place2; + } + + /** + * @return the scholarship + */ + public final String getScholarship() { + return scholarship; + } + + /** + * @param scholarship + * the scholarship to set + */ + public final void setScholarship(final String scholarship) { + this.scholarship = scholarship; + } + + /** + * @return the scholarshipStr + */ + public final String getScholarshipStr() { + return scholarshipStr; + } + + /** + * @param scholarshipStr + * the scholarshipStr to set + */ + public final void setScholarshipStr(final String scholarshipStr) { + this.scholarshipStr = scholarshipStr; + } + + /** + * @return the position + */ + public final String getPosition() { + return position; + } + + /** + * @param position + * the position to set + */ + public final void setPosition(final String position) { + this.position = position; + } + + /** + * @return the positionStr + */ + public final String getPositionStr() { + return positionStr; + } + + /** + * @param positionStr + * the positionStr to set + */ + public final void setPositionStr(final String positionStr) { + this.positionStr = positionStr; + } + + /** + * @return the jobtype + */ + public final String getJobtype() { + return jobtype; + } + + /** + * @param jobtype + * the jobtype to set + */ + public final void setJobtype(final String jobtype) { + this.jobtype = jobtype; + } + + /** + * @return the sdate + */ + public final String getSdate() { + return sdate; + } + + /** + * @param sdate + * the sdate to set + */ + public final void setSdate(final String sdate) { + this.sdate = sdate; + } + + /** + * @return the pdate + */ + public final String getPdate() { + return pdate; + } + + /** + * @param pdate + * the pdate to set + */ + public final void setPdate(final String pdate) { + this.pdate = pdate; + } + + /** + * @return the adate + */ + public final String getAdate() { + return adate; + } + + /** + * @param adate + * the adate to set + */ + public final void setAdate(final String adate) { + this.adate = adate; + } + + /** + * @return the comment + */ + public final String getComment() { + return comment; + } + + /** + * @param comment + * the comment to set + */ + public final void setComment(final String comment) { + this.comment = comment; + } + + /** + * @return the regdate + */ + public final Date getRegdate() { + return regdate; + } + + /** + * @param regdate + * the regdate to set + */ + public final void setRegdate(final Date regdate) { + this.regdate = regdate; + } + + /** + * @return the logdate + */ + public final Date getLogdate() { + return logdate; + } + + /** + * @param logdate + * the logdate to set + */ + public final void setLogdate(final Date logdate) { + this.logdate = logdate; + } + + /** + * @return the writer + */ + public final String getWriter() { + return writer; + } + + /** + * @param writer + * the writer to set + */ + public final void setWriter(final String writer) { + this.writer = writer; + } + + /** + * @return the birth + */ + public final String getBirth() { + return birth; + } + + /** + * @param birth + * the birth to set + */ + public final void setBirth(final String birth) { + this.birth = birth; + } +} diff --git a/src/main/java/kcg/faics/fa/vo/package-info.java b/src/main/java/kcg/faics/fa/vo/package-info.java new file mode 100644 index 0000000..4073ca5 --- /dev/null +++ b/src/main/java/kcg/faics/fa/vo/package-info.java @@ -0,0 +1,8 @@ +/** + * 인력관리 관련 VO 패키지 + */ +/** + * @author kimnomin + * + */ +package kcg.faics.fa.vo; \ No newline at end of file diff --git a/src/main/java/kcg/faics/fa/web/EduController.java b/src/main/java/kcg/faics/fa/web/EduController.java new file mode 100644 index 0000000..d9ddc06 --- /dev/null +++ b/src/main/java/kcg/faics/fa/web/EduController.java @@ -0,0 +1,391 @@ +package kcg.faics.fa.web; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import javax.annotation.Resource; + +import kcg.faics.cmmn.bbs.PageType; +import kcg.faics.cmmn.excel.ExcelExporter; +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.cmmn.vo.CodeVO; +import kcg.faics.fa.service.EduService; +import kcg.faics.fa.vo.EduSearchVO; +import kcg.faics.fa.vo.EduVO; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.UserUtil; +import kcg.faics.target.vo.DivMngSearchVO; +import kcg.faics.target.vo.DivMngVO; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.support.SessionStatus; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; + +/** + * 교육현황 컨트롤러. + * + * @author kimnomin + * + */ +@Controller +@RequestMapping("/fa/edu") +public class EduController { + + /** + * Validator - 유효성 검사. + **/ + @Resource(name = "beanValidator") + private DefaultBeanValidator beanValidator; + + /** + * message.properties의 값을 가져오는 인터페이스. + */ + @Autowired + private MessageSource messageSource; + + /** + * 코드관련 정보 인터페이스. + */ + @Resource(name = "codeService") + private CodeService codeService; + + /** + * 교육현황 서비스. + */ + @Resource(name = "eduService") + private EduService eduService; + + /** + * Redirect URI를 조합하여 반환한다. + * + * @param pageType + * 화면구분 + * @param vo + * 데이터 VO + * @return Redirect URI + */ + private String makeRedirectUri(final PageType pageType, final EduVO vo) { + String uri = "redirect:/fa/edu"; + + switch (pageType) { + case Upd: + uri = String.format("%s/update.do", uri); + break; + case List: + uri = String.format("%s/list.do", uri); + break; + default: + break; + } + + return uri; + } + + /** + * 교육현황 입력화면을 반환한다. + * + * @param model + * Model 객체 + * @param eduVO + * 교육현황 VO + * @return 교육현황 입력화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/add.do") + public String add(final Model model, final EduVO eduVO) + throws Exception { + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + + if (isAuthenticated && UserUtil.isAdmin()) { + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + model.addAttribute("loginUserVO", loginUserVO); + model.addAttribute("registerFlag", "create"); + + // 교육과정 목록 + List eduCourseList = codeService.getEduCourse(false); + model.addAttribute("eduCourseList", eduCourseList); + + // 교육기관 목록 + List eduPlaceList = codeService.getEduPlace(false); + model.addAttribute("eduPlaceList", eduPlaceList); + + // 계급 목록 + List positionList = codeService.getPositionList(); + model.addAttribute("positionList", positionList); + + // 소속1 목록 + List placeList = codeService.getPlace1List(false, false); + model.addAttribute("placeList", placeList); + // 소속2 목록 + CodeVO place2SearchVO = new CodeVO(); + place2SearchVO.setCode1(placeList.get(0).getCode2()); + List place2List = codeService.getPlace2List(place2SearchVO); + model.addAttribute("place2List", place2List); + + // 직별 목록 + List jobtypeList = codeService.getJobTypeList(); + model.addAttribute("jobtypeList", jobtypeList); + + // 최종학력 목록 + List scholarshipList = codeService.getScholarshipList(); + model.addAttribute("scholarshipList", scholarshipList); + + eduVO.setWriter(loginUserVO.getUserid()); + + return "/fa/eduAdd.tiles"; + } else { + return makeRedirectUri(PageType.List, eduVO); + } + } + + /** + * 교육현황 정보를 입력한다. + * + * @param eduVO + * 입력할 데이터 VO + * @param bindingResult + * BindingResult 객체 + * @param model + * Model 객체 + * @param status + * SessionStatus 객체 + * @return 교육현황 목록 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/add.do", method = RequestMethod.POST) + public String add(@ModelAttribute("eduVO") final EduVO eduVO, + final BindingResult bindingResult, final Model model, + final SessionStatus status) throws Exception { + // 사용자 인증 검사 + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (isAuthenticated && UserUtil.isAdmin()) { + // 유효성 검사 + beanValidator.validate(eduVO, bindingResult); + if (bindingResult.hasErrors()) { + return add(model, eduVO); + } + + HashMap resultMap = eduService.insert(eduVO, null); + + if ((Integer) resultMap.get("result") == 1) { + status.setComplete(); + return makeRedirectUri(PageType.List, eduVO); + } + } + return "error/bizError"; + } + + /** + * 교육현황 목록화면을 반환한다. + * + * @param model + * Model 객체 + * @param locale + * Locale 객체 + * @param searchVO + * 검색조건 VO + * @return 외사분실운영현황 목록화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/list.do") + public String list(final Model model, final Locale locale, + @ModelAttribute("searchVO") final EduSearchVO searchVO) + throws Exception { + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + model.addAttribute("loginUserVO", loginUserVO); + + List eduCourseList = codeService.getEduCourse(true); + model.addAttribute("eduCourseList", eduCourseList); + + List placeList = codeService.getPlace1List(false, true); + model.addAttribute("placeList", placeList); + + List eduList = eduService.selectList(searchVO); + model.addAttribute("eduList", eduList); + + return "/fa/eduList.tiles"; + } + + /** + * 교육현황 목록을 엑셀로 반환한다. + * + * @param model + * Model 객체 + * @param locale + * Locale 객체 + * @param searchVO + * 검색조건 VO + * @return 교육현황 목록 엑셀 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/listtoexcel.do") + public String listToExcel(final Model model, final Locale locale, + @ModelAttribute("searchVO") final EduSearchVO searchVO) + throws Exception { + String title = messageSource.getMessage("fa.edu", null, locale); + + // 엑셀 헤더 생성 + LinkedHashMap header = new LinkedHashMap(); + header.put("eduCourseStr", messageSource.getMessage("fa.edu.eduCourse", null, locale)); + header.put("scholarshipStr", messageSource.getMessage("fa.edu.scholarship", null, locale)); + header.put("positionStr", messageSource.getMessage("fa.edu.position", null, locale)); + header.put("name", messageSource.getMessage("fa.edu.name", null, locale)); + header.put("eduTerm", messageSource.getMessage("fa.edu.eduTerm", null, locale)); + header.put("comment", messageSource.getMessage("fa.edu.comment", null, locale)); + + // 데이터 생성 + List eduList = eduService.selectList(searchVO); + + // Export + model.addAttribute("excel", new ExcelExporter(header, eduList, title)); + model.addAttribute("filename", title); + + return "excelView"; + } + + /** + * 교육현황 수정화면을 반환한다. + * + * @param eduVO + * 교육현황 VO + * @param model + * Model 객체 + * @return 교육현황 수정화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/update.do") + public String update(final EduVO eduVO, final Model model) throws Exception { + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + model.addAttribute("loginUserVO", loginUserVO); + model.addAttribute("registerFlag", "modify"); + + // 저장된 데이터 + EduVO vo = eduService.select(eduVO); + model.addAttribute("eduVO", vo); + + // 교육과정 목록 + List eduCourseList = codeService.getEduCourse(false); + model.addAttribute("eduCourseList", eduCourseList); + + // 교육기관 목록 + List eduPlaceList = codeService.getEduPlace(false); + model.addAttribute("eduPlaceList", eduPlaceList); + + // 계급 목록 + List positionList = codeService.getPositionList(); + model.addAttribute("positionList", positionList); + + // 소속1 목록 + List placeList = codeService.getPlace1List(false, false); + model.addAttribute("placeList", placeList); + // 소속2 목록 + CodeVO place2SearchVO = new CodeVO(); + if (StringUtils.isNotBlank(vo.getPlace1())) { + place2SearchVO.setCode1(vo.getPlace1()); + } else { + place2SearchVO.setCode1(placeList.get(0).getCode2()); + } + + List place2List = codeService.getPlace2List(place2SearchVO); + model.addAttribute("place2List", place2List); + + // 직별 목록 + List jobtypeList = codeService.getJobTypeList(); + model.addAttribute("jobtypeList", jobtypeList); + + // 최종학력 목록 + List scholarshipList = codeService.getScholarshipList(); + model.addAttribute("scholarshipList", scholarshipList); + + return "/fa/eduAdd.tiles"; + } + + /** + * 교육현황 정보를 수정한다. + * + * @param eduVO + * 교육현황 VO + * @param bindingResult + * BindingResult 객체 + * @param model + * Model 객체 + * @param status + * SessionStatus 객체 + * @return 교육현황 목록화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/update.do", method = RequestMethod.POST) + public String update(@ModelAttribute("eduVO") final EduVO eduVO, + final BindingResult bindingResult, final Model model, + final SessionStatus status) throws Exception { + // 사용자 인증 검사 + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (isAuthenticated && UserUtil.isAdmin()) { + // 유효성 검사 + beanValidator.validate(eduVO, bindingResult); + if (bindingResult.hasErrors()) { + return update(eduVO, model); + } + + HashMap resultMap = eduService.update(eduVO, null, null); + + if ((Integer) resultMap.get("result") > 0) { + status.setComplete(); + return makeRedirectUri(PageType.List, eduVO); + } + } + + return update(eduVO, model); + } + + /** + * 교육현황 정보를 삭제한다. + * + * @param eduVO + * 교육현황 VO + * @param model + * Model 객체 + * @param status + * SessionStatus 객체 + * @return 교육현황 목록 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/delete.do", method = RequestMethod.POST) + public String delete(final EduVO eduVO, final Model model, + final SessionStatus status) throws Exception { + + if (UserUtil.isAdmin()) { + EduVO vo = eduService.select(eduVO); + if (vo != null) { + HashMap map = eduService.delete(vo); + if ((Integer) map.get("result") > 0) { + return makeRedirectUri(PageType.List, vo); + } + } + } + + return makeRedirectUri(PageType.Upd, eduVO); + } +} diff --git a/src/main/java/kcg/faics/fa/web/ExMemberController.java b/src/main/java/kcg/faics/fa/web/ExMemberController.java new file mode 100644 index 0000000..a7f2e50 --- /dev/null +++ b/src/main/java/kcg/faics/fa/web/ExMemberController.java @@ -0,0 +1,227 @@ +package kcg.faics.fa.web; + +import java.beans.PropertyEditorSupport; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import kcg.faics.cmmn.file.FileUploadUtil; +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.member.service.MemberService; +import kcg.faics.member.vo.ExMemberVO; +import kcg.faics.member.vo.MemberSearchVO; +import kcg.faics.member.vo.MemberVO; +import kcg.faics.susa.vo.IncidentVO; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.support.SessionStatus; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +/** + * 과거외사경찰 컨트롤러. + * + * @author kimnomin + * + */ +@Controller +@RequestMapping("/fa") +public class ExMemberController { + + /** + * Properties 서비스 객체. + */ + @Resource(name = "propertiesService") + private EgovPropertyService propertiesService; + + /** + * 사용자 서비스 객체. + */ + @Resource(name = "memberService") + private MemberService memberService; + + /** + * 코드관련 서비스 객체. + */ + @Resource(name = "codeService") + private CodeService codeService; + + /** + * Validator - 유효성 검사. + **/ + @Resource(name = "beanValidator") + private DefaultBeanValidator beanValidator; + + /** + * 과거외사경찰 조회화면을 반환한다. + * + * @param vo + * 조회할 과거외사경찰 VO + * @param model + * Model 객체 + * @return 과거외사경찰 조회화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping("/exmemberView.do") + public String exmemberView(final ExMemberVO vo, final Model model) throws Exception { + ExMemberVO exMemeberVO = memberService.selectExMember(vo); + model.addAttribute("memberVO", exMemeberVO); + + return "fa/exmemberView.tiles"; + } + + /** + * 과거외사경찰 목록화면를 반환한다. + * + * @param searchVO 검색조건 VO. + * @param model 모델 객체 + * @return 과거외사경찰 목록 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/exmemberList.do") + public String exmemberList(final MemberSearchVO searchVO, final Model model) throws Exception { + + try { + /* 페이징 처리 정보 */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("pageSize")); + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + int totSearchCnt = memberService.selectExmemberListCnt(searchVO); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + + /* 게시판 상단 페이지 및 게시물 정보 표현을 위한 데이터 */ + int totCnt = memberService.selectExmemberTotalCnt(searchVO); + model.addAttribute("totalCnt", totCnt); + + List resultList = memberService.exmemberVoList(searchVO); + + model.addAttribute("resultList", memberService.exmemberVoList(searchVO)); + model.addAttribute("place1List", codeService.getPlace1List(false)); + model.addAttribute("positionList", codeService.getPositionList()); + } catch (Exception e) { + e.printStackTrace(); + } + + return "fa/exmemberList.tiles"; + } + + /** + * 과거외사경찰 수정 화면을 반환한다. + * + * @param searchVO + * 과거외사경찰 VO + * @param model + * Model 객체 + * @return 과거외사경찰 수정 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping("/exmemberUpdate.do") + public String exmemberUpdate(final ExMemberVO searchVO, final Model model) throws Exception { + ExMemberVO vo = memberService.selectExMember(searchVO); + model.addAttribute("exmemberVO", vo); + model.addAttribute("registerFlag", "modify"); + + model.addAttribute("place1List", codeService.getPlace1List(false)); + model.addAttribute("positionList", codeService.getPositionList()); + model.addAttribute("dutiesList", codeService.getDutiesList()); + model.addAttribute("jobTypeList", codeService.getJobTypeList()); + model.addAttribute("scholarshipList", codeService.getScholarshipList()); + model.addAttribute("authList", codeService.getAuthList()); + + return "fa/exmemberAdd.tiles"; + } + + /** + * 과거외사경찰 정보를 수정한다. + * + * @param multiRequest + * mutipartform 객체 + * @param exmemberVO + * 과거외사경찰 VO + * @param bindingResult + * 유효성 검사결과 객체 + * @param model + * 모델 객체 + * @param status + * SessionStatus 객체 + * @return 과거외사경찰 조회화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/exmemberUpdate.do", method = RequestMethod.POST) + public String exmemberUpdate(final MultipartHttpServletRequest multiRequest, + @Valid @ModelAttribute("exmemberVO") final ExMemberVO exmemberVO, + final BindingResult bindingResult, final Model model, + final SessionStatus status) throws Exception { + + // 사용자 인증 검사 + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (isAuthenticated) { + // 유효성 검사 + beanValidator.validate(exmemberVO, bindingResult); + if (bindingResult.hasErrors()) { + model.addAttribute("exmemberVO", exmemberVO); + return exmemberUpdate(exmemberVO, model); + } + + HashMap resultMap = memberService.updateExMember(exmemberVO); + int result = (Integer) resultMap.get("result"); + if (result == 1) { + return "redirect:/fa/exmemberList.do"; + } + } + + return "error/bizError"; + } + + /** + * 요청 파라미터 바인딩 확장 메소드. + * + * @param binder + * WebDataBinder 객체 + * @throws Exception + * 기본 예외 처리 + */ + @InitBinder + public void initBinder(final WebDataBinder binder) throws Exception { + binder.registerCustomEditor(Date.class, new PropertyEditorSupport() { + + public void setAsText(final String text) throws IllegalArgumentException { + try { + setValue(new SimpleDateFormat("yyyy-MM-dd").parse(text)); + } catch (ParseException e) { + setValue(null); + } + } + }); + } +} diff --git a/src/main/java/kcg/faics/fa/web/FaController.java b/src/main/java/kcg/faics/fa/web/FaController.java new file mode 100644 index 0000000..97d6b79 --- /dev/null +++ b/src/main/java/kcg/faics/fa/web/FaController.java @@ -0,0 +1,180 @@ +package kcg.faics.fa.web; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; + +import javax.annotation.Resource; + +import kcg.faics.cmmn.excel.ExcelExporter; +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.member.UserType; +import kcg.faics.member.service.MemberService; +import kcg.faics.member.vo.MemberVO; +import kcg.faics.sec.UserUtil; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; + +import egovframework.rte.fdl.property.EgovPropertyService; + +/** + * FaController.java + * @author 임새미 + * @since 2016. 11. 22. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 11. 22. 임새미 최초생성 + * + */ +@Controller +@RequestMapping("/fa") +public class FaController { + + @Resource(name = "propertiesService") + private EgovPropertyService propertiesService; + + @Resource(name = "memberService") + MemberService memberService; + + @Resource(name = "codeService") + CodeService codeService; + + /** + * 외사경찰 정보를 반환한다. + * + * @param memberVO 외사경찰 정보 객체 + * @param model 모델 객체 + * @return 외사경찰 정보 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/memberInfo.do") + public String memberInfo(final MemberVO memberVO, final Model model) throws Exception { + try { + /* 외사경찰 */ + memberVO.setUsertype(UserType.FA); + model.addAttribute("memberVO", memberService.select(memberVO)); + model.addAttribute("isAdmin", UserUtil.isAdmin()); + model.addAttribute("isSysAdmin", UserUtil.isSysAdmin()); + } catch (Exception e) { + e.printStackTrace(); + } + + return "fa/memberInfo.tiles"; + } + + /** + * 외사경찰 정원/현원현황을 반환한다. + * + * @param model 모델 객체 + * @return 외사경찰 정원/현원현황 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/memberManagePersonnel.do") + public String memberManagePersonnel(final Model model) throws Exception { + model.addAttribute("resultList", memberService.getCapacityManagement()); + return "fa/memberManagePersonnel.tiles"; + } + + /** + * 외사경찰 정원/현원현황을 반환한다. + * + * @param model 모델 객체 + * @return 외사경찰 정원/현원현황 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/memberManagePersonnelExcel.do") + public String memberManagePersonnelExcel(final Model model) throws Exception { + + String title = "외사경찰 정원 및 현원 현황"; + + List> resultList = memberService.getCapacityManagement(); + + LinkedHashMap header = new LinkedHashMap(); + header.put("CODENM", "구분"); + header.put("TOT_CNT", "전체 정원"); + header.put("CURRENT_CNT", "현재 정원"); + header.put("EXCESS", "과부족"); + header.put("POSITION204", "총경 정원"); + header.put("CNT_204", "총경 현원"); + + header.put("POSITION203", "경정 정원"); + header.put("CNT_203", "경정 현원"); + + header.put("POSITION202", "경감 정원"); + header.put("CNT_202", "경감 현원"); + + header.put("POSITION201", "경위 정원"); + header.put("CNT_201", "경위 현원"); + + header.put("POSITION104", "경사 정원"); + header.put("CNT_104", "경사 현원"); + + header.put("POSITION103", "경장 정원"); + header.put("CNT_103", "경장 현원"); + + header.put("POSITION102", "순경 정원"); + header.put("CNT_102", "순경 현원"); + + model.addAttribute("excel", new ExcelExporter>(header, resultList, title)); + model.addAttribute("filename", title); + + return "excelView"; + } + + /** + * 외사 경력 현황을 반환한다. + * + * @param model 모델 객체 + * @return 외사 경력 현황 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/memberCareerStatus.do") + public String getCapacityManagement(final Model model) throws Exception { + model.addAttribute("resultList", memberService.getCareerStatus()); + return "fa/memberCareerStatus.tiles"; + } + + /** + * 외사 경력 현황을 반환한다. + * + * @param model 모델 객체 + * @return 외사 경력 현황화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/getCapacityManagementExcel.do") + public String getCapacityManagementExcel(final Model model) throws Exception { + + String title = "외사경찰 정원 및 현원 현황"; + + List> resultList = memberService.getCareerStatus(); + + LinkedHashMap header = new LinkedHashMap(); + header.put("CODENM", "구분"); + header.put("TOT_CAREER", "계"); + header.put("CAREER", "과거외사경력"); + header.put("CAREER1", "수사경력"); + header.put("CAREER2", "정보경력"); + header.put("CAREER3", "보안경력"); + + model.addAttribute("excel", new ExcelExporter>(header, resultList, title)); + model.addAttribute("filename", title); + + return "excelView"; + } + + /** + * 외사 경력 차트을 반환한다. + * + * @param model 모델 객체 + * @return 외사 경력 현황화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/getCapacityManagementChart.do") + public String getCapacityManagementChart(final Model model) throws Exception { + // TODO: 차트화면 필요 + return "fa/memberCareerStatusStat.tiles"; + } +} diff --git a/src/main/java/kcg/faics/inter/service/InternationalService.java b/src/main/java/kcg/faics/inter/service/InternationalService.java new file mode 100644 index 0000000..dcfaffa --- /dev/null +++ b/src/main/java/kcg/faics/inter/service/InternationalService.java @@ -0,0 +1,143 @@ +package kcg.faics.inter.service; + +/** + * ArrestService.java + * @author 이영호 + * @since 2017. 3. 17. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2017. 3. 17. 이영호 최초생성 + * + */ + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.arrest.vo.ArrestCountVO; +import kcg.faics.cmmn.vo.CodeVO; +import kcg.faics.inter.vo.InternationalSearchVO; +import kcg.faics.inter.vo.InternationalVO; + +public interface InternationalService { + + /** + * 주소 대분류를 반환한다. + * + * @param + * @return 소속 1 목록 + * @throws Exception + * 기본 예외 처리 + */ + List getAddressAreaList(String area) throws Exception; + + /** + * 국제어선 나포정보를 등록한다. + * + * @param internationalVo + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + HashMap insert(InternationalVO internationalVo) throws Exception; + + /** + * 국제어선 나포정보를 수정한다. + * + * @param internationalVo + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + HashMap update(InternationalVO internationalVo) throws Exception; + + /** + * 국제어선 나포정보를 삭제한다. + * + * @param internationalVo + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + HashMap delete(InternationalVO internationalVo) throws Exception; + + /** + * 국제어선 나포정보를 조회한다. + * + * @param internationalVo + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + InternationalVO select(InternationalVO internationalVo) throws Exception; + + /** + * 국제어선 나포정보 목록을 전체조회한다. + * + * @param internationalVo + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + List getArrestListAll(InternationalSearchVO searchVO) throws Exception; + + /** + * 국제어선 나포정보 목록을 조회(검색)한다. + * + * @param internationalVo + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + List getArrestList(InternationalSearchVO searchVO) throws Exception; + + /** + * 국제어선 나포정보 목록을 조회(검색)한다. + * + * @param internationalVo + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + List getArrestListExcel(InternationalSearchVO searchVO) throws Exception; + + /** + * 국제어선 나포정보 목록을 조회(검색)한다. + * + * @param internationalVo + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + List> getArrestListExcelHashMap(InternationalSearchVO searchVO) throws Exception; + + /** + * 국제어선 나포정보 목록 집계정보를 조회한다. + * + * @param internationalVo + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + InternationalVO getArrestListCount(InternationalSearchVO searchVO) throws Exception; + + /** + * 국제어선 나포정보 목록 집계정보를 조회한다. + * + * @param internationalVo + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + InternationalVO getArrestListCountExcel(InternationalSearchVO searchVO) throws Exception; + + /** + * 국제어선 나포정보 목록 전체 집계정보를 조회한다. + * + * @param internationalVo + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + ArrestCountVO getArrestListAllCount(InternationalSearchVO searchVO) throws Exception; +} diff --git a/src/main/java/kcg/faics/inter/service/impl/InternationalMapper.java b/src/main/java/kcg/faics/inter/service/impl/InternationalMapper.java new file mode 100644 index 0000000..f0bbd33 --- /dev/null +++ b/src/main/java/kcg/faics/inter/service/impl/InternationalMapper.java @@ -0,0 +1,212 @@ + package kcg.faics.inter.service.impl; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.arrest.vo.ArrestCountVO; +import kcg.faics.cmmn.vo.CodeVO; +import kcg.faics.inter.vo.InternationalSearchVO; +import kcg.faics.inter.vo.InternationalVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + + +/** + * @FileName : InternationalMapper.java + * @Project : 국제해양프로젝트 + * @Date : 2018. 5. 8. + * @작성자 : Moon + * @변경이력 : + * @프로그램 설명 : + */ +@Repository("internationalMapper") +public class InternationalMapper extends EgovAbstractMapper { + + + + + + /** + * 국제어선 나포정보를 등록한다. + * + * @param dataVO 게시판 내용 구성 객체 + * @return 글 총 갯수 + * @throws Exception 기본 예외 처리 + */ + public HashMap insertArrest(final InternationalVO dataVO) throws Exception { + + HashMap resultMap = new HashMap(); + + int result = 0; + try { + result = insert("International.insertArrest", dataVO); + resultMap.put("result", result); + resultMap.put("id", ""); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + }; + + /** + * 국제어선 나포정보를 수정한다. + * + * @param dataVO 나포정보 객체 + * @return 글 총 갯수 + * @throws Exception 기본 예외 처리 + */ + public HashMap updateArrest(final InternationalVO dataVO) throws Exception { + + HashMap resultMap = new HashMap(); + + int result = 0; + try { + result = insert("International.updateArrest", dataVO); + resultMap.put("result", result); + resultMap.put("id", dataVO.getArrestId()); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + /** + * 국제어선 나포정보를 삭제한다. + * + * @param boardVO 게시판 내용 구성 객체 + * @return 글 총 갯수 + * @throws Exception 기본 예외 처리 + */ + public HashMap deleteArrest(final InternationalVO dataVO) throws Exception { + + HashMap resultMap = new HashMap(); + + int result = 0; + try { + result = insert("International.deleteArrest", dataVO); + resultMap.put("result", result); + resultMap.put("arrestId", dataVO.getArrestId()); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + }; + + /** + * 주소지 시군구 명을 반환한다. + * + * @param onlyCentral + * 중앙부처만 반환 - true, 모든 목록반환 - false + * @return 소속 1 목록 + * @throws Exception 기본 예외 처리 + */ + public List getAddressAreaList(String area) throws Exception { + List tempList = selectList("International.getAddressAreaList", area); + return tempList; + } + + /** + * 국제어선 나포정보를 반환한다. + * + * @param dataVO + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + public InternationalVO getArrest(final InternationalVO dataVO) { + InternationalVO result = selectOne("International.getArrest", dataVO); + return result; + } + + /** + * 국제어선 나포정보 목록(no paging)을 반환한다. + * + * @param searchVO + * 검색정보 객체 + * @return 게시물 리스트 + * @throws Exception + * 기본 예외 처리 + */ + public List getArrestListAll(final InternationalSearchVO searchVO) throws Exception { + return selectList("International.getArrestListAll", searchVO); + } + + /** + * 국제어선 나포정보 목록조회 + * + * @param searchVO + * 검색정보 객체 + * @return 게시물 리스트 + * @throws Exception + * 기본 예외 처리 + */ + public List getArrestList(final InternationalSearchVO searchVO) throws Exception { + return selectList("International.getArrestList", searchVO); + } + /** + * 국제어선 나포정보 집계정보조회 + * + * @param searchVO + * 검색정보 객체 + * @return 게시물 리스트 + * @throws Exception + * 기본 예외 처리 + */ + public InternationalVO getArrestListCount(final InternationalSearchVO searchVO) throws Exception { + return selectOne("International.getArrestListCount", searchVO); + } + + /** + * 국제어선 나포정보 집계정보조회 + * + * @param searchVO + * 검색정보 객체 + * @return 게시물 리스트 + * @throws Exception + * 기본 예외 처리 + */ + public InternationalVO getArrestListCountExcel(final InternationalSearchVO searchVO) throws Exception { + return selectOne("International.getArrestListCountExcel", searchVO); + } + + /** + * 국제어선 나포정보 집계정보조회 + * + * @param searchVO + * 검색정보 객체 + * @return 게시물 리스트 + * @throws Exception + * 기본 예외 처리 + */ + public ArrestCountVO getArrestListAllCount(final InternationalSearchVO searchVO) throws Exception { + return selectOne("International.getArrestListAllCount", searchVO); + } + + /** + * 국제어선 나포정보 집계정보조회 + * + * @param searchVO + * 검색정보 객체 + * @return 게시물 리스트 + * @throws Exception + * 기본 예외 처리 + */ + public List getArrestListExcel(final InternationalSearchVO searchVO) throws Exception { + return selectList("International.getArrestListExcel", searchVO); + } + + /** + * 국제어선 나포정보 집계정보조회 + * + * @param searchVO + * 검색정보 객체 + * @return 게시물 리스트 + * @throws Exception + * 기본 예외 처리 + */ + public List> getArrestListExcelHashMap(final InternationalSearchVO searchVO) { + return selectList("International.getArrestListExcelHashMap", searchVO); + } +} + diff --git a/src/main/java/kcg/faics/inter/service/impl/InternationalServiceImpl.java b/src/main/java/kcg/faics/inter/service/impl/InternationalServiceImpl.java new file mode 100644 index 0000000..f07c022 --- /dev/null +++ b/src/main/java/kcg/faics/inter/service/impl/InternationalServiceImpl.java @@ -0,0 +1,246 @@ +/** + * CommonService.java + * @author 임새미 + * @since 2016. 10. 13. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 13. 임새미 최초생성 + * + */ +package kcg.faics.inter.service.impl; + +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; + +import kcg.faics.arrest.vo.ArrestCountVO; +import kcg.faics.cmmn.vo.CodeVO; +import kcg.faics.inter.service.InternationalService; +import kcg.faics.inter.vo.InternationalSearchVO; +import kcg.faics.inter.vo.InternationalVO; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + + +/** + * @FileName : InternationalServiceImpl.java + * @Project : 국제해양프로젝트 + * @Date : 2018. 5. 8. + * @작성자 : Moon + * @변경이력 : + * @프로그램 설명 : + */ +@Service("internationalService") +public class InternationalServiceImpl implements InternationalService { + + /** + * ArrestMapper. + */ + @Resource(name = "internationalMapper") + private InternationalMapper internationalMapper; + + + /** + * 주소목록을 조회한다. + * + * @param String area + * @param String area + * @return List 특별광역시도 목록 + * @exception Exception 기본 예외 처리 + */ + @Override + public List getAddressAreaList(String area) throws Exception { + List codeVOList = internationalMapper.getAddressAreaList(area); + return codeVOList; + } + + /** + * 국제어선 나포정보를 추가한다. + * + * @param dataVO 사용자 정보 객체 + * @param fileMap 업로드 파일정보 + * @return HashMap/ seq : 게시물 , result : 성공 - 1, 실패 - 0 + * @exception Exception 기본 예외 처리 + */ + @Override + @Transactional + public HashMap insert(final InternationalVO dataVO) throws Exception { + + HashMap result = new HashMap(); + + // + if(!dataVO.getShipProcType().equals("01")){ + dataVO.setCommissionCost(""); + } + + if(dataVO.getMarginPaymentYn().equals("N")){ + dataVO.setMarginPaymentDate(""); + } + + result = internationalMapper.insertArrest(dataVO); + + return result; + } + + /** + * 국제어선 나포정보를 수정한다. + * + * @param dataVO 사용자 정보 객체 + * @param fileMap 업로드 파일정보 + * @return HashMap/ seq : 게시물 , result : 성공 - 1, 실패 - 0 + * @exception Exception 기본 예외 처리 + */ + @Override + @Transactional + public HashMap update(final InternationalVO dataVO) throws Exception { + + HashMap result = new HashMap(); + + if(!dataVO.getShipProcType().equals("01")){ + dataVO.setCommissionCost(""); + } + + if(dataVO.getMarginPaymentYn().equals("N")){ + dataVO.setMarginPaymentDate(""); + } + + + result = internationalMapper.updateArrest(dataVO); + + + + return result; + } + + /** + * 국제어선 나포정보를 삭제한다. + * + * @param dataVO 사용자 정보 객체 + * @param fileMap 업로드 파일정보 + * @return HashMap/ seq : 게시물 , result : 성공 - 1, 실패 - 0 + * @exception Exception 기본 예외 처리 + */ + @Override + @Transactional + public HashMap delete(final InternationalVO dataVO) throws Exception { + + HashMap result = new HashMap(); + result = internationalMapper.deleteArrest(dataVO); + + + + return result; + } + + /** + * 국제어선 나포정보 단건 조회 + * + * @param dataVO userid + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public InternationalVO select(final InternationalVO dataVO) throws Exception { + + InternationalVO result = internationalMapper.getArrest(dataVO); + + return result; + } + + /** + * 국제어선 나포정보 목록 전체 조회 + * + * @param dataVO userid + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public List getArrestListAll(final InternationalSearchVO searchVO) throws Exception { + + return internationalMapper.getArrestListAll(searchVO); + } + + /** + * 국제어선 나포정보 목록 전체 조회 + * + * @param dataVO userid + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public ArrestCountVO getArrestListAllCount(final InternationalSearchVO searchVO) throws Exception { + + return internationalMapper.getArrestListAllCount(searchVO); + } + + /** + * 국제어선 나포정보 목록 조회 + * + * @param dataVO searchVO + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public List getArrestList(final InternationalSearchVO searchVO) throws Exception { + + return internationalMapper.getArrestList(searchVO); + } + + /** + * 국제어선 나포정보 목록 조회 (엑셀) + * + * @param dataVO searchVO + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public List getArrestListExcel(final InternationalSearchVO searchVO) throws Exception { + + return internationalMapper.getArrestListExcel(searchVO); + } + + /** + * 국제어선 나포정보 집계정보 조회 + * + * @param dataVO userid + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public InternationalVO getArrestListCount(final InternationalSearchVO searchVO) throws Exception { + + return internationalMapper.getArrestListCount(searchVO); + } + + /** + * 국제어선 나포정보 집계정보 조회 + * + * @param dataVO searchVO + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public InternationalVO getArrestListCountExcel(final InternationalSearchVO searchVO) + throws Exception { + + return internationalMapper.getArrestListCountExcel(searchVO); + } + + /** + * 국제어선 나포정보 목록 조회 (엑셀) + * + * @param dataVO searchVO + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public List> getArrestListExcelHashMap(final InternationalSearchVO searchVO) throws Exception { + + return internationalMapper.getArrestListExcelHashMap(searchVO); + } + + +} diff --git a/src/main/java/kcg/faics/inter/vo/InternationalCountVO.java b/src/main/java/kcg/faics/inter/vo/InternationalCountVO.java new file mode 100644 index 0000000..a90db4f --- /dev/null +++ b/src/main/java/kcg/faics/inter/vo/InternationalCountVO.java @@ -0,0 +1,462 @@ +package kcg.faics.inter.vo; + +/** + * @FileName : InternationalCountVO.java + * @Project : 국제해양프로젝트 + * @Date : 2018. 5. 8. + * @작성자 : Moon + * @변경이력 : + * @프로그램 설명 : + */ +public class InternationalCountVO { + /** + * 특정금지 + */ + private int particularBanCnt = 0; + /** + * 무허가 + */ + private int withoutLicenseCnt = 0; + /** + * 영해 + */ + private int territWatersCnt = 0; + /** + * EEZ + */ + private int eezCnt = 0; + /** + * 특공방 + */ + private int specBatlCnt = 0; + /** + * NLL + */ + private int nllCnt = 0; + /** + * 선박제원선원수 + */ + private int shipCrewCnt = 0; + /** + * 범칙수량 + */ + private int vioCnt = 0; + /** + * 위판금액 + */ + private int priatedAmt = 0; + /** + * 조사중 + */ + private int procContNCnt = 0; // + /** + * 완료 + */ + private int procContYCnt = 0; // + /** + * 납부액 + */ + private int paymentAmt = 0; // + /** + * 미납 + */ + private int noPaymentCnt = 0; // + /** + * 미납액 + */ + private int noPaymentAmt = 0; // + /** + * 위탁관리 + */ + private int shipProcTypeACnt = 0; // + /** + * 퇴거 + */ + private int shipProcTypeBCnt = 0; // + /** + * 직접인계 + */ + private int shipProcTypeCCnt = 0; // + /** + * 폐기 + */ + private int shipProcTypeDCnt = 0; // + /** + * 몰수 + */ + private int shipProcTypeECnt = 0; // + /** + * 구속 선장수 + */ + private int captainCount = 0; // + /** + * 구속 기관장수 + */ + private int engineerCount = 0; // + /** + * 구속 항해사수 + */ + private int mateCount = 0; // + /** + * 구속 선원수 + */ + private int crewCount = 0; // + /** + * 위탁관리비 + */ + private int commissionCost = 0; // + /** + * 어구압수 틀 + */ + private int gearCast = 0; // + /** + * 어구압수 폭 + */ + private int gearWidth = 0; // + /** + * 현장조사 건수 + */ + private int fieldCnt = 0; // + /** + * 전체 건수 + */ + private int totalCnt = 0; + + + /** + * @return the noPaymentAmt + */ + public int getNoPaymentAmt() { + return noPaymentAmt; + } + /** + * @param noPaymentAmt the noPaymentAmt to set + */ + public void setNoPaymentAmt(int noPaymentAmt) { + this.noPaymentAmt = noPaymentAmt; + } + /** + * @return the totalCnt + */ + public int getTotalCnt() { + return totalCnt; + } + /** + * @param totalCnt the totalCnt to set + */ + public void setTotalCnt(int totalCnt) { + this.totalCnt = totalCnt; + } + /** + * @return the fieldCnt + */ + public int getFieldCnt() { + return fieldCnt; + } + /** + * @param fieldCnt the fieldCnt to set + */ + public void setFieldCnt(int fieldCnt) { + this.fieldCnt = fieldCnt; + } + /** + * @return the particularBanCnt + */ + public int getParticularBanCnt() { + return particularBanCnt; + } + /** + * @param particularBanCnt the particularBanCnt to set + */ + public void setParticularBanCnt(int particularBanCnt) { + this.particularBanCnt = particularBanCnt; + } + /** + * @return the withoutLicenseCnt + */ + public int getWithoutLicenseCnt() { + return withoutLicenseCnt; + } + /** + * @param withoutLicenseCnt the withoutLicenseCnt to set + */ + public void setWithoutLicenseCnt(int withoutLicenseCnt) { + this.withoutLicenseCnt = withoutLicenseCnt; + } + /** + * @return the territWatersCnt + */ + public int getTerritWatersCnt() { + return territWatersCnt; + } + /** + * @param territWatersCnt the territWatersCnt to set + */ + public void setTerritWatersCnt(int territWatersCnt) { + this.territWatersCnt = territWatersCnt; + } + /** + * @return the eezCnt + */ + public int getEezCnt() { + return eezCnt; + } + /** + * @param eezCnt the eezCnt to set + */ + public void setEezCnt(int eezCnt) { + this.eezCnt = eezCnt; + } + /** + * @return the specBatlCnt + */ + public int getSpecBatlCnt() { + return specBatlCnt; + } + /** + * @param specBatlCnt the specBatlCnt to set + */ + public void setSpecBatlCnt(int specBatlCnt) { + this.specBatlCnt = specBatlCnt; + } + /** + * @return the nllCnt + */ + public int getNllCnt() { + return nllCnt; + } + /** + * @param nllCnt the nllCnt to set + */ + public void setNllCnt(int nllCnt) { + this.nllCnt = nllCnt; + } + /** + * @return the shipCrewCnt + */ + public int getShipCrewCnt() { + return shipCrewCnt; + } + /** + * @param shipCrewCnt the shipCrewCnt to set + */ + public void setShipCrewCnt(int shipCrewCnt) { + this.shipCrewCnt = shipCrewCnt; + } + /** + * @return the vioCnt + */ + public int getVioCnt() { + return vioCnt; + } + /** + * @param vioCnt the vioCnt to set + */ + public void setVioCnt(int vioCnt) { + this.vioCnt = vioCnt; + } + /** + * @return the priatedAmt + */ + public int getPriatedAmt() { + return priatedAmt; + } + /** + * @param priatedAmt the priatedAmt to set + */ + public void setPriatedAmt(int priatedAmt) { + this.priatedAmt = priatedAmt; + } + /** + * @return the procContNCnt + */ + public int getProcContNCnt() { + return procContNCnt; + } + /** + * @param procContNCnt the procContNCnt to set + */ + public void setProcContNCnt(int procContNCnt) { + this.procContNCnt = procContNCnt; + } + /** + * @return the procContYCnt + */ + public int getProcContYCnt() { + return procContYCnt; + } + /** + * @param procContYCnt the procContYCnt to set + */ + public void setProcContYCnt(int procContYCnt) { + this.procContYCnt = procContYCnt; + } + /** + * @return the paymentAmt + */ + public int getPaymentAmt() { + return paymentAmt; + } + /** + * @param paymentAmt the paymentAmt to set + */ + public void setPaymentAmt(int paymentAmt) { + this.paymentAmt = paymentAmt; + } + /** + * @return the noPaymentCnt + */ + public int getNoPaymentCnt() { + return noPaymentCnt; + } + /** + * @param noPaymentCnt the noPaymentCnt to set + */ + public void setNoPaymentCnt(int noPaymentCnt) { + this.noPaymentCnt = noPaymentCnt; + } + /** + * @return the shipProcTypeACnt + */ + public int getShipProcTypeACnt() { + return shipProcTypeACnt; + } + /** + * @param shipProcTypeACnt the shipProcTypeACnt to set + */ + public void setShipProcTypeACnt(int shipProcTypeACnt) { + this.shipProcTypeACnt = shipProcTypeACnt; + } + /** + * @return the shipProcTypeBCnt + */ + public int getShipProcTypeBCnt() { + return shipProcTypeBCnt; + } + /** + * @param shipProcTypeBCnt the shipProcTypeBCnt to set + */ + public void setShipProcTypeBCnt(int shipProcTypeBCnt) { + this.shipProcTypeBCnt = shipProcTypeBCnt; + } + /** + * @return the shipProcTypeCCnt + */ + public int getShipProcTypeCCnt() { + return shipProcTypeCCnt; + } + /** + * @param shipProcTypeCCnt the shipProcTypeCCnt to set + */ + public void setShipProcTypeCCnt(int shipProcTypeCCnt) { + this.shipProcTypeCCnt = shipProcTypeCCnt; + } + /** + * @return the shipProcTypeDCnt + */ + public int getShipProcTypeDCnt() { + return shipProcTypeDCnt; + } + /** + * @param shipProcTypeDCnt the shipProcTypeDCnt to set + */ + public void setShipProcTypeDCnt(int shipProcTypeDCnt) { + this.shipProcTypeDCnt = shipProcTypeDCnt; + } + /** + * @return the shipProcTypeECnt + */ + public int getShipProcTypeECnt() { + return shipProcTypeECnt; + } + /** + * @param shipProcTypeECnt the shipProcTypeECnt to set + */ + public void setShipProcTypeECnt(int shipProcTypeECnt) { + this.shipProcTypeECnt = shipProcTypeECnt; + } + /** + * @return the captainCount + */ + public int getCaptainCount() { + return captainCount; + } + /** + * @param captainCount the captainCount to set + */ + public void setCaptainCount(int captainCount) { + this.captainCount = captainCount; + } + /** + * @return the engineerCount + */ + public int getEngineerCount() { + return engineerCount; + } + /** + * @param engineerCount the engineerCount to set + */ + public void setEngineerCount(int engineerCount) { + this.engineerCount = engineerCount; + } + /** + * @return the mateCount + */ + public int getMateCount() { + return mateCount; + } + /** + * @param mateCount the mateCount to set + */ + public void setMateCount(int mateCount) { + this.mateCount = mateCount; + } + /** + * @return the crewCount + */ + public int getCrewCount() { + return crewCount; + } + /** + * @param crewCount the crewCount to set + */ + public void setCrewCount(int crewCount) { + this.crewCount = crewCount; + } + /** + * @return the commissionCost + */ + public int getCommissionCost() { + return commissionCost; + } + /** + * @param commissionCost the commissionCost to set + */ + public void setCommissionCost(int commissionCost) { + this.commissionCost = commissionCost; + } + /** + * @return the gearCast + */ + public int getGearCast() { + return gearCast; + } + /** + * @param gearCast the gearCast to set + */ + public void setGearCast(int gearCast) { + this.gearCast = gearCast; + } + /** + * @return the gearWidth + */ + public int getGearWidth() { + return gearWidth; + } + /** + * @param gearWidth the gearWidth to set + */ + public void setGearWidth(int gearWidth) { + this.gearWidth = gearWidth; + } +} diff --git a/src/main/java/kcg/faics/inter/vo/InternationalSearchVO.java b/src/main/java/kcg/faics/inter/vo/InternationalSearchVO.java new file mode 100644 index 0000000..9ca1d5e --- /dev/null +++ b/src/main/java/kcg/faics/inter/vo/InternationalSearchVO.java @@ -0,0 +1,347 @@ +/* + * Copyright 2014 MOPAS(Ministry of Public Administration and Security). + * + * Licensed 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 + * + * http://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. + */ +package kcg.faics.inter.vo; + +import kcg.faics.cmmn.bbs.BaseSearchVO; + + +/** + * @FileName : InternationalSearchVO.java + * @Project : 국제해양프로젝트 + * @Date : 2018. 5. 8. + * @작성자 : Moon + * @변경이력 : + * @프로그램 설명 : + */ +public class InternationalSearchVO extends BaseSearchVO { + + /** + * 시작일자 + */ + private String startDate = ""; + /** + * 종료일자 + */ + private String endDate = ""; + /** + * 검거기관(대분류) + */ + private String agencyType = ""; + /** + * 검거기관 + */ + private String agencyGuard = ""; + /** + * 검거기관(함정) + */ + private String agencyVessel = ""; + /** + * 선종 + */ + private String addrArea = ""; + /** + * 선종 + */ + private String addrCity = ""; + /** + * 선종 + */ + private String violateType = ""; + /** + * 선종 + */ + private String shipName = ""; + + /** + * 기간 처음 invasionType + */ + private String[] invasionType = null; + + /** + * 선종 + */ + private String[] shipType = null; + /** + * 처리현황 + */ + private String[] procCondition = null; + /** + * 톤수 + */ + private String[] arrShipTonnage = null; + + /** + * 담보금 납부 + */ + private String[] marginPayment = null; + /** + * 선박처리구분 + */ + private String[] shipProcType = null; + /** + * 선질 + */ + private String[] shipQuality = null; + /** + * 선적 + */ + private String[] shipMent = null; + /** + * NLL여부 + */ + private String[] nllYn = null; + /** + * 특수공무집행방해여부(특공방) + */ + private String[] specBatlYn = null; + + /** + * @return the agencyType + */ + public String getAgencyType() { + return agencyType; + } + /** + * @param agencyType the agencyType to set + */ + public void setAgencyType(String agencyType) { + this.agencyType = agencyType; + } + /** + * @return the agencyGuard + */ + public String getAgencyGuard() { + return agencyGuard; + } + /** + * @param agencyGuard the agencyGuard to set + */ + public void setAgencyGuard(String agencyGuard) { + this.agencyGuard = agencyGuard; + } + /** + * @return the agencyVessel + */ + public String getAgencyVessel() { + return agencyVessel; + } + /** + * @param agencyVessel the agencyVessel to set + */ + public void setAgencyVessel(String agencyVessel) { + this.agencyVessel = agencyVessel; + } + /** + * @return the nllYn + */ + public String[] getNllYn() { + return nllYn; + } + /** + * @param nllYn the nllYn to set + */ + public void setNllYn(String[] nllYn) { + this.nllYn = nllYn; + } + /** + * @return the specBatlYn + */ + public String[] getSpecBatlYn() { + return specBatlYn; + } + /** + * @param specBatlYn the specBatlYn to set + */ + public void setSpecBatlYn(String[] specBatlYn) { + this.specBatlYn = specBatlYn; + } + /** + * @return the shipProcType + */ + public String[] getShipProcType() { + return shipProcType; + } + /** + * @param shipProcType the shipProcType to set + */ + public void setShipProcType(String[] shipProcType) { + this.shipProcType = shipProcType; + } + /** + * @return the shipQuality + */ + public String[] getShipQuality() { + return shipQuality; + } + /** + * @param shipQuality the shipQuality to set + */ + public void setShipQuality(String[] shipQuality) { + this.shipQuality = shipQuality; + } + /** + * @return the shipMent + */ + public String[] getShipMent() { + return shipMent; + } + /** + * @param shipMent the shipMent to set + */ + public void setShipMent(String[] shipMent) { + this.shipMent = shipMent; + } + /** + * @return the startDate + */ + public String getStartDate() { + return startDate; + } + /** + * @param startDate the startDate to set + */ + public void setStartDate(String startDate) { + this.startDate = startDate; + } + /** + * @return the endDate + */ + public String getEndDate() { + return endDate; + } + /** + * @param endDate the endDate to set + */ + public void setEndDate(String endDate) { + this.endDate = endDate; + } + /** + * @return the addrArea + */ + public String getAddrArea() { + return addrArea; + } + /** + * @param addrArea the addrArea to set + */ + public void setAddrArea(String addrArea) { + this.addrArea = addrArea; + } + /** + * @return the addrCity + */ + public String getAddrCity() { + return addrCity; + } + /** + * @param addrCity the addrCity to set + */ + public void setAddrCity(String addrCity) { + this.addrCity = addrCity; + } + /** + * @return the violateType + */ + public String getViolateType() { + return violateType; + } + /** + * @param violateType the violateType to set + */ + public void setViolateType(String violateType) { + this.violateType = violateType; + } + /** + * @return the invasionType + */ + public String getShipName() { + return shipName; + } + /** + * @param shipName the shipName to set + */ + public void setShipName(String shipName) { + this.shipName = shipName; + } + /** + * @return the invasionType + */ + public String[] getInvasionType() { + return invasionType; + } + /** + * @param invasionType the invasionType to set + */ + public void setInvasionType(String[] invasionType) { + this.invasionType = invasionType; + } + /** + * @return the shipType + */ + public String[] getShipType() { + return shipType; + } + /** + * @param shipType the shipType to set + */ + public void setShipType(String[] shipType) { + this.shipType = shipType; + } + /** + * @return the procCondition + */ + public String[] getProcCondition() { + return procCondition; + } + /** + * @param procCondition the procCondition to set + */ + public void setProcCondition(String[] procCondition) { + this.procCondition = procCondition; + } + /** + * @return the arrShipTonnage + */ + public String[] getArrShipTonnage() { + return arrShipTonnage; + } + /** + * @param arrShipTonnage the arrShipTonnage to set + */ + public void setArrShipTonnage(String[] arrShipTonnage) { + this.arrShipTonnage = arrShipTonnage; + } + /** + * @return the marginPayment + */ + public String[] getMarginPayment() { + return marginPayment; + } + /** + * @param marginPayment the marginPayment to set + */ + public void setMarginPayment(String[] marginPayment) { + this.marginPayment = marginPayment; + } + /** + * @return the obj.length + */ + public static int length(String[] obj){ + return obj.length; + } + +} + \ No newline at end of file diff --git a/src/main/java/kcg/faics/inter/vo/InternationalVO.java b/src/main/java/kcg/faics/inter/vo/InternationalVO.java new file mode 100644 index 0000000..ff4d379 --- /dev/null +++ b/src/main/java/kcg/faics/inter/vo/InternationalVO.java @@ -0,0 +1,2400 @@ +package kcg.faics.inter.vo; + +/** + * @FileName : InternationalVO.java + * @Project : 국제해양프로젝트 + * @Date : 2018. 5. 8. + * @작성자 : Moon + * @변경이력 : + * @프로그램 설명 : + */ +public class InternationalVO { + /** + * 국제어선 나포정보 ID. + */ + private String arrestId = ""; + /** + * 나포일시 + */ + private String arrestDate = ""; // 나포일시 + /** + * 국제어선 나포정보 ID. + */ + private String agencyType = ""; // 검거기관(종류) + /** + * 검거기관(종류) + */ + private String agencyGuard = ""; // 검거기관(안전서) + /** + * 검거기관(안전서) + */ + private String agencyVessel = ""; // 검거기관(함정) + /** + * 검거기관(함정) + */ + private String procCondition = ""; // 처리현황 + /** + * 처리현황 + */ + private String violateType = ""; // 위반내용구분 + /** + * 위반내용구분 + */ + private String violateDetail = ""; // 위반내용상세 + /** + * 위반내용상세 + */ + private String invasionType = ""; // 침범유형 + /** + * 침범유형(특정금지) + */ + private String invasion1 = ""; + /** + * 침범유형(무허가) + */ + private String invasion2 = ""; + /** + * 침범유형(영해) + */ + private String invasion3 = ""; + /** + * 침범유형(EEZ) + */ + private String invasion4 = ""; + /** + * 처리현황(완료) + */ + private String procCondY = ""; + /** + * 처리현황(조사중) + */ + private String procCondN = ""; + /** + * 처리현황(조사중)건수 + */ + private int procCondNCnt = 0; + /** + * 처리현황(완료)건수 + */ + private int procCondYCnt = 0; + /** + * 미납금액 + */ + private String noMarginPaymentAmt = ""; + /** + * 선박처리(위탁관리) + */ + private String shipProcTypeA = ""; + /** + * 선박처리(퇴거) + */ + private String shipProcTypeB = ""; + /** + * 선박처리(직접인계) + */ + private String shipProcTypeC = ""; + /** + * 선박처리(폐기) + */ + private String shipProcTypeD = ""; + /** + * 선박처리(몰수) + */ + private String shipProcTypeE = ""; + /** + * 구속인원수(전체) + */ + private String detentionTotalCnt = ""; + /** + * 침범유형1 + */ + private int invasionType1 = 0; + /** + * 침범유형2 + */ + private int invasionType2 = 0; + /** + * 침범유형3 + */ + private int invasionType3 = 0; + /** + * 침범유형4 + */ + private int invasionType4 = 0; + /** + * 침범유형5 + */ + private int invasionType5 = 0; + /** + * 선박처리유형(위탁관리) + */ + private String shipProcType1 = ""; + /** + * 선박처리유형(퇴거) + */ + private String shipProcType2 = ""; + /** + * 선박처리유형(직접인계) + */ + private String shipProcType3 = ""; + /** + * 선박처리유형(폐기) + */ + private String shipProcType4 = ""; + /** + * 선박처리유형(몰수) + */ + private String shipProcType5 = ""; + /** + * 선박처리유형(현장조사건수) + */ + private String fieldCnt = ""; + /** + * 특공방여부 + */ + private String specBatlYn = ""; + /** + * NLL여부 + */ + private String nllYn = ""; + /** + * 무혐의불구속구분 + */ + private String woDetentionType = ""; + /** + * 현장조사나포일시 + */ + private String fieldArrestDate = ""; + /** + * 현장조사석방일시 + */ + private String fieldReleaseDate = ""; + /** + * 거리 + */ + private String leadDistance = ""; + /** + * 소요시간 + */ + private String leadHour = ""; + /** + * 분 + */ + private String leadMinute = ""; + /** + * 선장인원 + */ + private int captainCount = 0; + /** + * 항해사인원 + */ + private int mateCount = 0; + /** + * 기관장인원 + */ + private int engineerCount = 0; + /** + * 선원인원 + */ + private int crewCount = 0; + /** + * 선박처리구분 + */ + private String shipProcType = ""; + /** + * 위탁관리비 + */ + private String commissionCost = ""; + /** + * 어구압수-틀 + */ + private String gearCast = ""; + /** + * 어구압수-폭 + */ + private String gearWidth = ""; + /** + * 어구압수-기타 + */ + private String gearEtc = ""; + /** + * 위반장소(도) + */ + private String addrArea = ""; + /** + * 위반장소(시) + */ + private String addrCity = ""; // + /** + * 상세주소 + */ + private String addrDetail = ""; // + /** + * 위도 도 + */ + private int latD = 0; // + /** + * 위도 분 + */ + private int latM = 0; + /** + * 위도 초 + */ + private double latS = 0; + /** + * 경도 도 + */ + private int lonD = 0; + /** + * 경도 분 + */ + private int lonM = 0; + /** + * 경도 초 + */ + private double lonS = 0; + /** + * 선박제원-선명 + */ + private String shipName = ""; + /** + * 선박제원-톤수 + */ + private String shipTonnage = ""; + /** + * 선박제원-선원수 + */ + private String shipCrewCnt = ""; + /** + * 선박제원-선질 + */ + private String shipQuality = ""; + /** + * 선박제원-선질 String + */ + private String shipQualityStr = ""; + /** + * 미납금액 + */ + private String noPaymentCnt = ""; + /** + * 선적 + */ + private String shipMent = ""; + /** + * 항구명 + */ + private String shipPortName = ""; + /** + * 선종 + */ + private String shipType = ""; // 선종 + /** + * 선장명 + */ + private String capName = ""; // 선장명 + /** + * 선장한자명 + */ + private String capChnName = ""; // 선장한자명 + /** + * 선장나이 + */ + private int capAge = 0; // 선장나이 + /** + * 범칙어종 + */ + private String vioFish = ""; // 범칙어종 + /** + * 범칙수량 + */ + private int vioCnt = 0; + /** + * 위판금액 + */ + private int vioPriatedAmt = 0; + /** + * 담보금납부여부 + */ + private String marginPaymentYn = ""; + /** + * 담보금납부금액 + */ + private int marginPaymentAmt = 0; + /** + * 납부일시 + */ + private String marginPaymentDate = ""; + /** + * 저장상태 ( 01 : 임시저장 / 02 : 제출 ) + */ + private String status = ""; + /** + * 삭제여부 + */ + private String delYn = ""; + /** + * 등록일시 + */ + private String regDate = ""; + /** + * 등록자 + */ + private String regUser = ""; // + /** + * 등록기관 + */ + private String regAgency = ""; // + /** + * 선적 명칭 + */ + private String shipMentStr = ""; + /** + * 선박처리명칭 + */ + private String shipTypeStr = ""; + /** + * 무혐의불구속 명칭 + */ + private String woDetentionStr = ""; + /** + * 검거기관(안전서) 명칭 + */ + private String agencyGuardStr = ""; + /** + * 주소 명칭 + */ + private String addrStr = ""; + /** + * 미납 + */ + private String notPayment = ""; + /** + * 특별광역시도명 + */ + private String addrAreaStr = ""; + /** + * 건수 + */ + private int totalCnt = 0; + + /** + * 특공방건수 + */ + private int specBatlCnt = 0; + /** + * NLL건수 + */ + private int nllCnt = 0; + /** + * 외국선원 + */ + private String foreignCrew = ""; + /** + * 이동수단 + */ + private String transportation = ""; + /** + * 밀수입 품목 + */ + private String itemTest = ""; + /** + * 비고 + */ + private String remarksList = ""; + /** + * 강력범죄 + */ + private String aviolentcrime = ""; + /** + * 폭력범죄 + */ + private String violentcrime = ""; + /** + * 지능범죄 + */ + private String intelligentcrime = ""; + /** + * 절도범죄 + */ + private String theftcrime = ""; + /** + * 특별법범 + */ + private String speciallaw = ""; + /** + * 해상 알선,운송 + */ + private String arrangeTransport = ""; + /** + * 해상 불법이동자 + */ + private String illegalMover = ""; + /** + * 해상 이동수단 + */ + private String transportationCar = ""; + /** + * 밀수입 수량 + */ + private String quantity = ""; + /** + * 밀수입 금액 + */ + private String priceMoney = ""; + /** + * 밀수입 대상국가 + */ + private String targetCountry = ""; + /** + * 밀출국 중국 도피 + */ + private String escapeChina = ""; + /** + * 밀출국 중국 취업 + */ + private String employmentChina = ""; + /** + * 밀출국 중국 기타 + */ + private String etcChina = ""; + /** + * 밀출국 일본 도피 + */ + private String escapeJapan = ""; + /** + * 밀출국 일본 취업 + */ + private String employmentJapan = ""; + /** + * 밀출국 일본 기타 + */ + private String etcJapan = ""; + /** + * 밀출국 기타 도피 + */ + private String escapeCountries = ""; + /** + * 밀출국 기타 취업 + */ + private String employmentCountries = ""; + /** + * 밀출국 기타 기타 + */ + private String etcCountries = ""; + /** + * 밀수출 품목 + */ + private String smugglingName = ""; + /** + * 밀수출 수량 + */ + private String smugglingChn = ""; + /** + * 밀수출 금액 + */ + private String smugglingAge = ""; + /** + * 밀수출 대상국가 + */ + private String smugglingWorld = ""; + /** + * 산업기술유출 유출대상 + */ + private String spilltarget = ""; + /** + * 산업기술유출 보상금액(만) + */ + private String amountofcompensation = ""; + /** + * 지식재산권(상표법) 대상 + */ + private String intelProperty = ""; + /** + * 불법위폐,외국환거래 무등록외환(환치기) + */ + private String quenching = ""; + /** + * 불법위폐,외국환거래 외화밀반출 + */ + private String foreignCurrency = ""; + /** + * 불법위폐,외국환거래 금액(만) + */ + private String foreigncurrencyamount = ""; + /** + * 외국인인권보호 보험미가입 + */ + private String noInsurance = ""; + /** + * 외국인인권보호 외국인피해 + */ + private String alienDamage = ""; + + private String drugadministration = ""; + private String carryonofdrugs = ""; + private String drugsale = ""; + private String drugitem = ""; + private String drugquantity = ""; + private String drugamount = ""; + + private String leadNumber = ""; + /** + * 기타 이동수단 + */ + private String otherMeansOfTransport = ""; + /** + * 원산지 표시위반 + */ + private String originIndicationViolation = ""; + /** + * 사회 등 안전저해 + */ + private String inhibitionOfSocialSafety = ""; + /** + * 불법체류 선원 + */ + private String sailorPeople = ""; + /** + * 불법체류 선원외 + */ + private String seamanOutside = ""; + /** + * 직접밀입국 + */ + private String directSmuggling = ""; + /** + * 직접밀입국 기타 + */ + private String otherMeansOfDirect = ""; + + + + + + + + + public String getOtherMeansOfDirect() { + return otherMeansOfDirect; + } + public void setOtherMeansOfDirect(String otherMeansOfDirect) { + this.otherMeansOfDirect = otherMeansOfDirect; + } + public String getDirectSmuggling() { + return directSmuggling; + } + public void setDirectSmuggling(String directSmuggling) { + this.directSmuggling = directSmuggling; + } + public String getSailorPeople() { + return sailorPeople; + } + public void setSailorPeople(String sailorPeople) { + this.sailorPeople = sailorPeople; + } + public String getSeamanOutside() { + return seamanOutside; + } + public void setSeamanOutside(String seamanOutside) { + this.seamanOutside = seamanOutside; + } + public String getInhibitionOfSocialSafety() { + return inhibitionOfSocialSafety; + } + public void setInhibitionOfSocialSafety(String inhibitionOfSocialSafety) { + this.inhibitionOfSocialSafety = inhibitionOfSocialSafety; + } + public String getOriginIndicationViolation() { + return originIndicationViolation; + } + public void setOriginIndicationViolation(String originIndicationViolation) { + this.originIndicationViolation = originIndicationViolation; + } + public String getOtherMeansOfTransport() { + return otherMeansOfTransport; + } + public void setOtherMeansOfTransport(String otherMeansOfTransport) { + this.otherMeansOfTransport = otherMeansOfTransport; + } + public String getLeadNumber() { + return leadNumber; + } + public void setLeadNumber(String leadNumber) { + this.leadNumber = leadNumber; + } + public String getDrugadministration() { + return drugadministration; + } + public void setDrugadministration(String drugadministration) { + this.drugadministration = drugadministration; + } + public String getCarryonofdrugs() { + return carryonofdrugs; + } + public void setCarryonofdrugs(String carryonofdrugs) { + this.carryonofdrugs = carryonofdrugs; + } + public String getDrugsale() { + return drugsale; + } + public void setDrugsale(String drugsale) { + this.drugsale = drugsale; + } + public String getDrugitem() { + return drugitem; + } + public void setDrugitem(String drugitem) { + this.drugitem = drugitem; + } + public String getDrugquantity() { + return drugquantity; + } + public void setDrugquantity(String drugquantity) { + this.drugquantity = drugquantity; + } + public String getDrugamount() { + return drugamount; + } + public void setDrugamount(String drugamount) { + this.drugamount = drugamount; + } + public String getNoInsurance() { + return noInsurance; + } + public void setNoInsurance(String noInsurance) { + this.noInsurance = noInsurance; + } + public String getAlienDamage() { + return alienDamage; + } + public void setAlienDamage(String alienDamage) { + this.alienDamage = alienDamage; + } + public String getQuenching() { + return quenching; + } + public void setQuenching(String quenching) { + this.quenching = quenching; + } + public String getForeignCurrency() { + return foreignCurrency; + } + public void setForeignCurrency(String foreignCurrency) { + this.foreignCurrency = foreignCurrency; + } + public String getForeigncurrencyamount() { + return foreigncurrencyamount; + } + public void setForeigncurrencyamount(String foreigncurrencyamount) { + this.foreigncurrencyamount = foreigncurrencyamount; + } + public String getIntelProperty() { + return intelProperty; + } + public void setIntelProperty(String intelProperty) { + this.intelProperty = intelProperty; + } + public String getSpilltarget() { + return spilltarget; + } + public void setSpilltarget(String spilltarget) { + this.spilltarget = spilltarget; + } + public String getAmountofcompensation() { + return amountofcompensation; + } + public void setAmountofcompensation(String amountofcompensation) { + this.amountofcompensation = amountofcompensation; + } + public String getSmugglingName() { + return smugglingName; + } + public void setSmugglingName(String smugglingName) { + this.smugglingName = smugglingName; + } + public String getSmugglingChn() { + return smugglingChn; + } + public void setSmugglingChn(String smugglingChn) { + this.smugglingChn = smugglingChn; + } + public String getSmugglingAge() { + return smugglingAge; + } + public void setSmugglingAge(String smugglingAge) { + this.smugglingAge = smugglingAge; + } + public String getSmugglingWorld() { + return smugglingWorld; + } + public void setSmugglingWorld(String smugglingWorld) { + this.smugglingWorld = smugglingWorld; + } + public String getEscapeChina() { + return escapeChina; + } + public void setEscapeChina(String escapeChina) { + this.escapeChina = escapeChina; + } + public String getEmploymentChina() { + return employmentChina; + } + public void setEmploymentChina(String employmentChina) { + this.employmentChina = employmentChina; + } + public String getEtcChina() { + return etcChina; + } + public void setEtcChina(String etcChina) { + this.etcChina = etcChina; + } + public String getEscapeJapan() { + return escapeJapan; + } + public void setEscapeJapan(String escapeJapan) { + this.escapeJapan = escapeJapan; + } + public String getEmploymentJapan() { + return employmentJapan; + } + public void setEmploymentJapan(String employmentJapan) { + this.employmentJapan = employmentJapan; + } + public String getEtcJapan() { + return etcJapan; + } + public void setEtcJapan(String etcJapan) { + this.etcJapan = etcJapan; + } + public String getEscapeCountries() { + return escapeCountries; + } + public void setEscapeCountries(String escapeCountries) { + this.escapeCountries = escapeCountries; + } + public String getEmploymentCountries() { + return employmentCountries; + } + public void setEmploymentCountries(String employmentCountries) { + this.employmentCountries = employmentCountries; + } + public String getEtcCountries() { + return etcCountries; + } + public void setEtcCountries(String etcCountries) { + this.etcCountries = etcCountries; + } + public String getQuantity() { + return quantity; + } + public void setQuantity(String quantity) { + this.quantity = quantity; + } + public String getPriceMoney() { + return priceMoney; + } + public void setPriceMoney(String priceMoney) { + this.priceMoney = priceMoney; + } + public String getTargetCountry() { + return targetCountry; + } + public void setTargetCountry(String targetCountry) { + this.targetCountry = targetCountry; + } + public String getTransportationCar() { + return transportationCar; + } + public void setTransportationCar(String transportationCar) { + this.transportationCar = transportationCar; + } + public String getArrangeTransport() { + return arrangeTransport; + } + public void setArrangeTransport(String arrangeTransport) { + this.arrangeTransport = arrangeTransport; + } + public String getIllegalMover() { + return illegalMover; + } + public void setIllegalMover(String illegalMover) { + this.illegalMover = illegalMover; + } + public String getTheftcrime() { + return theftcrime; + } + public void setTheftcrime(String theftcrime) { + this.theftcrime = theftcrime; + } + public String getSpeciallaw() { + return speciallaw; + } + public void setSpeciallaw(String speciallaw) { + this.speciallaw = speciallaw; + } + public String getIntelligentcrime() { + return intelligentcrime; + } + public void setIntelligentcrime(String intelligentcrime) { + this.intelligentcrime = intelligentcrime; + } + public String getViolentcrime() { + return violentcrime; + } + public void setViolentcrime(String violentcrime) { + this.violentcrime = violentcrime; + } + public String getAviolentcrime() { + return aviolentcrime; + } + public void setAviolentcrime(String aviolentcrime) { + this.aviolentcrime = aviolentcrime; + } + public String getRemarksList() { + return remarksList; + } + public void setRemarksList(String remarksList) { + this.remarksList = remarksList; + } + public String getItemTest() { + return itemTest; + } + public void setItemTest(String itemTest) { + this.itemTest = itemTest; + } + public String getTransportation() { + return transportation; + } + public void setTransportation(String transportation) { + this.transportation = transportation; + } + public String getForeignCrew() { + return foreignCrew; + } + public void setForeignCrew(String foreignCrew) { + this.foreignCrew = foreignCrew; + } + /** + * @return the specBatlCnt + */ + public int getSpecBatlCnt() { + return specBatlCnt; + } + /** + * @param specBatlCnt the specBatlCnt to set + */ + public void setSpecBatlCnt(int specBatlCnt) { + this.specBatlCnt = specBatlCnt; + } + /** + * @return the procCondNCnt + */ + public int getNllCnt() { + return nllCnt; + } + /** + * @param nllCnt the nllCnt to set + */ + public void setNllCnt(int nllCnt) { + this.nllCnt = nllCnt; + } + /** + * @return the procCondNCnt + */ + public int getProcCondNCnt() { + return procCondNCnt; + } + /** + * @param procCondNCnt the procCondNCnt to set + */ + public void setProcCondNCnt(int procCondNCnt) { + this.procCondNCnt = procCondNCnt; + } + /** + * @return the procCondYCnt + */ + public int getProcCondYCnt() { + return procCondYCnt; + } + /** + * @param procCondYCnt the procCondYCnt to set + */ + public void setProcCondYCnt(int procCondYCnt) { + this.procCondYCnt = procCondYCnt; + } + /** + * @return the totalCnt + */ + public int getTotalCnt() { + return totalCnt; + } + /** + * @param totalCnt the totalCnt to set + */ + public void setTotalCnt(int totalCnt) { + this.totalCnt = totalCnt; + } + /** + * @return the addrAreaStr + */ + public String getAddrAreaStr() { + return addrAreaStr; + } + /** + * @param addrAreaStr the addrAreaStr to set + */ + public void setAddrAreaStr(String addrAreaStr) { + this.addrAreaStr = addrAreaStr; + } + + /** + * @return the notPayment + */ + public String getNotPayment() { + return notPayment; + } + + /** + * @param notPayment the notPayment to set + */ + public void setNotPayment(String notPayment) { + this.notPayment = notPayment; + } + /** + * @return the arrestId + */ + public String getArrestId() { + return arrestId; + } + + /** + * @param arrestId the arrestId to set + */ + public void setArrestId(String arrestId) { + this.arrestId = arrestId; + } + + + /** + * @return the arrestDate + */ + public String getArrestDate() { + return arrestDate; + } + + + /** + * @param arrestDate the arrestDate to set + */ + public void setArrestDate(String arrestDate) { + this.arrestDate = arrestDate; + } + + + /** + * @return the agencyType + */ + public String getAgencyType() { + return agencyType; + } + + + /** + * @param agencyType the agencyType to set + */ + public void setAgencyType(String agencyType) { + this.agencyType = agencyType; + } + + + /** + * @return the agencyGuard + */ + public String getAgencyGuard() { + return agencyGuard; + } + + + /** + * @param arrestId the arrestId to set + */ + public void setAgencyGuard(String agencyGuard) { + this.agencyGuard = agencyGuard; + } + + + /** + * @return the agencyVessel + */ + public String getAgencyVessel() { + return agencyVessel; + } + + + /** + * @param agencyVessel the agencyVessel to set + */ + public void setAgencyVessel(String agencyVessel) { + this.agencyVessel = agencyVessel; + } + + + /** + * @return the procCondition + */ + public String getProcCondition() { + return procCondition; + } + + + /** + * @param procCondition the procCondition to set + */ + public void setProcCondition(String procCondition) { + this.procCondition = procCondition; + } + + + /** + * @return the violateType + */ + public String getViolateType() { + return violateType; + } + + + /** + * @param violateType the violateType to set + */ + public void setViolateType(String violateType) { + this.violateType = violateType; + } + + + /** + * @return the agencyType + */ + public String getViolateDetail() { + return violateDetail; + } + + + /** + * @param violateDetail the violateDetail to set + */ + public void setViolateDetail(String violateDetail) { + this.violateDetail = violateDetail; + } + + + /** + * @return the invasionType + */ + public String getInvasionType() { + return invasionType; + } + + + /** + * @param invasionType the invasionType to set + */ + public void setInvasionType(String invasionType) { + this.invasionType = invasionType; + } + + + /** + * @return the invasion1 + */ + public String getInvasion1() { + return invasion1; + } + + + /** + * @param invasion1 the invasion1 to set + */ + public void setInvasion1(String invasion1) { + this.invasion1 = invasion1; + } + + + /** + * @return the invasion2 + */ + public String getInvasion2() { + return invasion2; + } + + + /** + * @param invasion2 the invasion2 to set + */ + public void setInvasion2(String invasion2) { + this.invasion2 = invasion2; + } + + + /** + * @return the invasion3 + */ + public String getInvasion3() { + return invasion3; + } + + + /** + * @param invasion3 the invasion3 to set + */ + public void setInvasion3(String invasion3) { + this.invasion3 = invasion3; + } + + + /** + * @return the invasion4 + */ + public String getInvasion4() { + return invasion4; + } + + + /** + * @param invasion4 the invasion4 to set + */ + public void setInvasion4(String invasion4) { + this.invasion4 = invasion4; + } + + + /** + * @return the procCondY + */ + public String getProcCondY() { + return procCondY; + } + + + /** + * @param procCondY the procCondY to set + */ + public void setProcCondY(String procCondY) { + this.procCondY = procCondY; + } + + + /** + * @return the procCondN + */ + public String getProcCondN() { + return procCondN; + } + + + /** + * @param procCondN the procCondN to set + */ + public void setProcCondN(String procCondN) { + this.procCondN = procCondN; + } + + + /** + * @return the noMarginPaymentAmt + */ + public String getNoMarginPaymentAmt() { + return noMarginPaymentAmt; + } + + + /** + * @param noMarginPaymentAmt the noMarginPaymentAmt to set + */ + public void setNoMarginPaymentAmt(String noMarginPaymentAmt) { + this.noMarginPaymentAmt = noMarginPaymentAmt; + } + + + /** + * @return the shipProcTypeA + */ + public String getShipProcTypeA() { + return shipProcTypeA; + } + + + /** + * @param shipProcTypeA the shipProcTypeA to set + */ + public void setShipProcTypeA(String shipProcTypeA) { + this.shipProcTypeA = shipProcTypeA; + } + + + /** + * @return the shipProcTypeB + */ + public String getShipProcTypeB() { + return shipProcTypeB; + } + + + /** + * @param shipProcTypeB the shipProcTypeB to set + */ + public void setShipProcTypeB(String shipProcTypeB) { + this.shipProcTypeB = shipProcTypeB; + } + + + /** + * @return the shipProcTypeC + */ + public String getShipProcTypeC() { + return shipProcTypeC; + } + + + /** + * @param shipProcTypeC the shipProcTypeC to set + */ + public void setShipProcTypeC(String shipProcTypeC) { + this.shipProcTypeC = shipProcTypeC; + } + + + /** + * @return the shipProcTypeD + */ + public String getShipProcTypeD() { + return shipProcTypeD; + } + + + /** + * @param shipProcTypeD the shipProcTypeD to set + */ + public void setShipProcTypeD(String shipProcTypeD) { + this.shipProcTypeD = shipProcTypeD; + } + + + /** + * @return the shipProcTypeE + */ + public String getShipProcTypeE() { + return shipProcTypeE; + } + + + /** + * @param shipProcTypeE the shipProcTypeE to set + */ + public void setShipProcTypeE(String shipProcTypeE) { + this.shipProcTypeE = shipProcTypeE; + } + + + /** + * @return the detentionTotalCnt + */ + public String getDetentionTotalCnt() { + return detentionTotalCnt; + } + + + /** + * @param detentionTotalCnt the detentionTotalCnt to set + */ + public void setDetentionTotalCnt(String detentionTotalCnt) { + this.detentionTotalCnt = detentionTotalCnt; + } + + + /** + * @return the invasionType1 + */ + public int getInvasionType1() { + return invasionType1; + } + + + /** + * @param invasionType1 the invasionType1 to set + */ + public void setInvasionType1(int invasionType1) { + this.invasionType1 = invasionType1; + } + + + /** + * @return the invasionType2 + */ + public int getInvasionType2() { + return invasionType2; + } + + + /** + * @param invasionType2 the invasionType2 to set + */ + public void setInvasionType2(int invasionType2) { + this.invasionType2 = invasionType2; + } + + + /** + * @return the invasionType3 + */ + public int getInvasionType3() { + return invasionType3; + } + + + /** + * @param invasionType3 the invasionType3 to set + */ + public void setInvasionType3(int invasionType3) { + this.invasionType3 = invasionType3; + } + + + /** + * @return the invasionType4 + */ + public int getInvasionType4() { + return invasionType4; + } + + + /** + * @param invasionType4 the invasionType4 to set + */ + public void setInvasionType4(int invasionType4) { + this.invasionType4 = invasionType4; + } + + + /** + * @return the invasionType5 + */ + public int getInvasionType5() { + return invasionType5; + } + + + /** + * @param invasionType5 the invasionType5 to set + */ + public void setInvasionType5(int invasionType5) { + this.invasionType5 = invasionType5; + } + + + /** + * @return the shipProcType1 + */ + public String getShipProcType1() { + return shipProcType1; + } + + + /** + * @param shipProcType1 the shipProcType1 to set + */ + public void setShipProcType1(String shipProcType1) { + this.shipProcType1 = shipProcType1; + } + + + /** + * @return the shipProcType2 + */ + public String getShipProcType2() { + return shipProcType2; + } + + + /** + * @param shipProcType2 the shipProcType2 to set + */ + public void setShipProcType2(String shipProcType2) { + this.shipProcType2 = shipProcType2; + } + + + /** + * @return the shipProcType3 + */ + public String getShipProcType3() { + return shipProcType3; + } + + + /** + * @param shipProcType3 the shipProcType3 to set + */ + public void setShipProcType3(String shipProcType3) { + this.shipProcType3 = shipProcType3; + } + + + /** + * @return the shipProcType4 + */ + public String getShipProcType4() { + return shipProcType4; + } + + + /** + * @param shipProcType4 the shipProcType4 to set + */ + public void setShipProcType4(String shipProcType4) { + this.shipProcType4 = shipProcType4; + } + + + /** + * @return the shipProcType5 + */ + public String getShipProcType5() { + return shipProcType5; + } + + + /** + * @param shipProcType5 the shipProcType5 to set + */ + public void setShipProcType5(String shipProcType5) { + this.shipProcType5 = shipProcType5; + } + + + /** + * @return the fieldCnt + */ + public String getFieldCnt() { + return fieldCnt; + } + + + /** + * @param fieldCnt the fieldCnt to set + */ + public void setFieldCnt(String fieldCnt) { + this.fieldCnt = fieldCnt; + } + + + /** + * @return the specBatlYn + */ + public String getSpecBatlYn() { + return specBatlYn; + } + + + /** + * @param specBatlYn the specBatlYn to set + */ + public void setSpecBatlYn(String specBatlYn) { + this.specBatlYn = specBatlYn; + } + + + /** + * @return the nllYn + */ + public String getNllYn() { + return nllYn; + } + + + /** + * @param nllYn the nllYn to set + */ + public void setNllYn(String nllYn) { + this.nllYn = nllYn; + } + + + /** + * @return the woDetentionType + */ + public String getWoDetentionType() { + return woDetentionType; + } + + + /** + * @param woDetentionType the woDetentionType to set + */ + public void setWoDetentionType(String woDetentionType) { + this.woDetentionType = woDetentionType; + } + + + /** + * @return the fieldArrestDate + */ + public String getFieldArrestDate() { + return fieldArrestDate; + } + + + /** + * @param fieldArrestDate the fieldArrestDate to set + */ + public void setFieldArrestDate(String fieldArrestDate) { + this.fieldArrestDate = fieldArrestDate; + } + + + /** + * @return the fieldReleaseDate + */ + public String getFieldReleaseDate() { + return fieldReleaseDate; + } + + + /** + * @param fieldReleaseDate the fieldReleaseDate to set + */ + public void setFieldReleaseDate(String fieldReleaseDate) { + this.fieldReleaseDate = fieldReleaseDate; + } + + + /** + * @return the leadDistance + */ + public String getLeadDistance() { + return leadDistance; + } + + + /** + * @param leadDistance the leadDistance to set + */ + public void setLeadDistance(String leadDistance) { + this.leadDistance = leadDistance; + } + + + /** + * @return the leadHour + */ + public String getLeadHour() { + return leadHour; + } + + + /** + * @param leadHour the leadHour to set + */ + public void setLeadHour(String leadHour) { + this.leadHour = leadHour; + } + + + /** + * @return the leadMinute + */ + public String getLeadMinute() { + return leadMinute; + } + + + /** + * @param leadMinute the leadMinute to set + */ + public void setLeadMinute(String leadMinute) { + this.leadMinute = leadMinute; + } + + + /** + * @return the captainCount + */ + public int getCaptainCount() { + return captainCount; + } + + + /** + * @param captainCount the captainCount to set + */ + public void setCaptainCount(int captainCount) { + this.captainCount = captainCount; + } + + + /** + * @return the mateCount + */ + public int getMateCount() { + return mateCount; + } + + + /** + * @param mateCount the mateCount to set + */ + public void setMateCount(int mateCount) { + this.mateCount = mateCount; + } + + + /** + * @return the engineerCount + */ + public int getEngineerCount() { + return engineerCount; + } + + + /** + * @param engineerCount the engineerCount to set + */ + public void setEngineerCount(int engineerCount) { + this.engineerCount = engineerCount; + } + + + /** + * @return the crewCount + */ + public int getCrewCount() { + return crewCount; + } + + + /** + * @param crewCount the crewCount to set + */ + public void setCrewCount(int crewCount) { + this.crewCount = crewCount; + } + + + /** + * @return the shipProcType + */ + public String getShipProcType() { + return shipProcType; + } + + + /** + * @param shipProcType the shipProcType to set + */ + public void setShipProcType(String shipProcType) { + this.shipProcType = shipProcType; + } + + + /** + * @return the commissionCost + */ + public String getCommissionCost() { + return commissionCost; + } + + + /** + * @param commissionCost the commissionCost to set + */ + public void setCommissionCost(String commissionCost) { + this.commissionCost = commissionCost; + } + + + /** + * @return the gearCast + */ + public String getGearCast() { + return gearCast; + } + + + /** + * @param gearCast the gearCast to set + */ + public void setGearCast(String gearCast) { + this.gearCast = gearCast; + } + + + /** + * @return the gearWidth + */ + public String getGearWidth() { + return gearWidth; + } + + + /** + * @param gearWidth the gearWidth to set + */ + public void setGearWidth(String gearWidth) { + this.gearWidth = gearWidth; + } + + + /** + * @return the gearEtc + */ + public String getGearEtc() { + return gearEtc; + } + + + /** + * @param gearEtc the gearEtc to set + */ + public void setGearEtc(String gearEtc) { + this.gearEtc = gearEtc; + } + + + /** + * @return the addrArea + */ + public String getAddrArea() { + return addrArea; + } + + + /** + * @param addrArea the addrArea to set + */ + public void setAddrArea(String addrArea) { + this.addrArea = addrArea; + } + + + /** + * @return the addrCity + */ + public String getAddrCity() { + return addrCity; + } + + + /** + * @param addrCity the addrCity to set + */ + public void setAddrCity(String addrCity) { + this.addrCity = addrCity; + } + + + /** + * @return the addrDetail + */ + public String getAddrDetail() { + return addrDetail; + } + + + /** + * @param addrDetail the addrDetail to set + */ + public void setAddrDetail(String addrDetail) { + this.addrDetail = addrDetail; + } + + + /** + * @return the latD + */ + public int getLatD() { + return latD; + } + + + /** + * @param latD the latD to set + */ + public void setLatD(int latD) { + this.latD = latD; + } + + + /** + * @return the latM + */ + public int getLatM() { + return latM; + } + + + /** + * @param latM the latM to set + */ + public void setLatM(int latM) { + this.latM = latM; + } + + + /** + * @return the latS + */ + public double getLatS() { + return latS; + } + + + /** + * @param latS the latS to set + */ + public void setLatS(double latS) { + this.latS = latS; + } + + + /** + * @return the lonD + */ + public int getLonD() { + return lonD; + } + + + /** + * @param lonD the lonD to set + */ + public void setLonD(int lonD) { + this.lonD = lonD; + } + + + /** + * @return the lonM + */ + public int getLonM() { + return lonM; + } + + + /** + * @param lonM the lonM to set + */ + public void setLonM(int lonM) { + this.lonM = lonM; + } + + + /** + * @return the lonS + */ + public double getLonS() { + return lonS; + } + + + /** + * @param lonS the lonS to set + */ + public void setLonS(double lonS) { + this.lonS = lonS; + } + + + /** + * @return the shipName + */ + public String getShipName() { + return shipName; + } + + + /** + * @param shipName the shipName to set + */ + public void setShipName(String shipName) { + this.shipName = shipName; + } + + + /** + * @return the shipTonnage + */ + public String getShipTonnage() { + return shipTonnage; + } + + + /** + * @param shipTonnage the shipTonnage to set + */ + public void setShipTonnage(String shipTonnage) { + this.shipTonnage = shipTonnage; + } + + + /** + * @return the shipCrewCnt + */ + public String getShipCrewCnt() { + return shipCrewCnt; + } + + + /** + * @param shipCrewCnt the shipCrewCnt to set + */ + public void setShipCrewCnt(String shipCrewCnt) { + this.shipCrewCnt = shipCrewCnt; + } + + + /** + * @return the shipQuality + */ + public String getShipQuality() { + return shipQuality; + } + + + /** + * @param setShipQuality the setShipQuality to set + */ + public void setShipQuality(String shipQuality) { + this.shipQuality = shipQuality; + } + + + /** + * @return the shipQualityStr + */ + public String getShipQualityStr() { + return shipQualityStr; + } + + + /** + * @param shipQualityStr the shipQualityStr to set + */ + public void setShipQualityStr(String shipQualityStr) { + this.shipQualityStr = shipQualityStr; + } + + + /** + * @return the agencyType + */ + public String getNoPaymentCnt() { + return noPaymentCnt; + } + + + /** + * @param invasionType the invasionType to set + */ + public void setNoPaymentCnt(String noPaymentCnt) { + this.noPaymentCnt = noPaymentCnt; + } + + + /** + * @return the shipMent + */ + public String getShipMent() { + return shipMent; + } + + + /** + * @param shipMent the shipMent to set + */ + public void setShipMent(String shipMent) { + this.shipMent = shipMent; + } + + + /** + * @return the shipPortName + */ + public String getShipPortName() { + return shipPortName; + } + + + /** + * @param shipPortName the shipPortName to set + */ + public void setShipPortName(String shipPortName) { + this.shipPortName = shipPortName; + } + + + /** + * @return the shipType + */ + public String getShipType() { + return shipType; + } + + + /** + * @param shipType the shipType to set + */ + public void setShipType(String shipType) { + this.shipType = shipType; + } + + + /** + * @return the capName + */ + public String getCapName() { + return capName; + } + + + /** + * @param capName the capName to set + */ + public void setCapName(String capName) { + this.capName = capName; + } + + + /** + * @return the capChnName + */ + public String getCapChnName() { + return capChnName; + } + + + /** + * @param capChnName the capChnName to set + */ + public void setCapChnName(String capChnName) { + this.capChnName = capChnName; + } + + + /** + * @return the capAge + */ + public int getCapAge() { + return capAge; + } + + + /** + * @param capAge the capAge to set + */ + public void setCapAge(int capAge) { + this.capAge = capAge; + } + + + /** + * @return the vioFish + */ + public String getVioFish() { + return vioFish; + } + + + /** + * @param vioFish the vioFish to set + */ + public void setVioFish(String vioFish) { + this.vioFish = vioFish; + } + + + /** + * @return the vioCnt + */ + public int getVioCnt() { + return vioCnt; + } + + + /** + * @param vioCnt the vioCnt to set + */ + public void setVioCnt(int vioCnt) { + this.vioCnt = vioCnt; + } + + + /** + * @return the vioPriatedAmt + */ + public int getVioPriatedAmt() { + return vioPriatedAmt; + } + + + /** + * @param vioPriatedAmt the vioPriatedAmt to set + */ + public void setVioPriatedAmt(int vioPriatedAmt) { + this.vioPriatedAmt = vioPriatedAmt; + } + + + /** + * @return the marginPaymentYn + */ + public String getMarginPaymentYn() { + return marginPaymentYn; + } + + + /** + * @param marginPaymentYn the marginPaymentYn to set + */ + public void setMarginPaymentYn(String marginPaymentYn) { + this.marginPaymentYn = marginPaymentYn; + } + + + /** + * @return the marginPaymentAmt + */ + public int getMarginPaymentAmt() { + return marginPaymentAmt; + } + + + /** + * @param marginPaymentAmt the marginPaymentAmt to set + */ + public void setMarginPaymentAmt(int marginPaymentAmt) { + this.marginPaymentAmt = marginPaymentAmt; + } + + + /** + * @return the marginPaymentDate + */ + public String getMarginPaymentDate() { + return marginPaymentDate; + } + + + /** + * @param marginPaymentDate the marginPaymentDate to set + */ + public void setMarginPaymentDate(String marginPaymentDate) { + this.marginPaymentDate = marginPaymentDate; + } + + + /** + * @return the status + */ + public String getStatus() { + return status; + } + + + /** + * @param status the status to set + */ + public void setStatus(String status) { + this.status = status; + } + + + /** + * @return the delYn + */ + public String getDelYn() { + return delYn; + } + + + /** + * @param delYn the delYn to set + */ + public void setDelYn(String delYn) { + this.delYn = delYn; + } + + + /** + * @return the regDate + */ + public String getRegDate() { + return regDate; + } + + + /** + * @param regDate the regDate to set + */ + public void setRegDate(String regDate) { + this.regDate = regDate; + } + + + /** + * @return the regUser + */ + public String getRegUser() { + return regUser; + } + + + /** + * @param regUser the regUser to set + */ + public void setRegUser(String regUser) { + this.regUser = regUser; + } + + + /** + * @return the regAgency + */ + public String getRegAgency() { + return regAgency; + } + + /** + * @param regAgency the regAgency to set + */ + public void setRegAgency(String regAgency) { + this.regAgency = regAgency; + } + + + /** + * @return the shipMentStr + */ + public String getShipMentStr() { + return shipMentStr; + } + + + /** + * @param shipMentStr the shipMentStr to set + */ + public void setShipMentStr(String shipMentStr) { + this.shipMentStr = shipMentStr; + } + + + /** + * @return the shipTypeStr + */ + public String getShipTypeStr() { + return shipTypeStr; + } + + + /** + * @param shipTypeStr the shipTypeStr to set + */ + public void setShipTypeStr(String shipTypeStr) { + this.shipTypeStr = shipTypeStr; + } + + + /** + * @return the woDetentionStr + */ + public String getWoDetentionStr() { + return woDetentionStr; + } + + + /** + * @param woDetentionStr the woDetentionStr to set + */ + public void setWoDetentionStr(String woDetentionStr) { + this.woDetentionStr = woDetentionStr; + } + + + /** + * @return the marginPaymentDate + */ + public String getAgencyGuardStr() { + return agencyGuardStr; + } + + + /** + * @param marginPaymentAmt the marginPaymentAmt to set + */ + public void setAgencyGuardStr(String agencyGuardStr) { + this.agencyGuardStr = agencyGuardStr; + } + + + /** + * @return the addrStr + */ + public String getAddrStr() { + return addrStr; + } + + + /** + * @param addrStr the addrStr to set + */ + public void setAddrStr(String addrStr) { + this.addrStr = addrStr; + } + + + + @Override + public String toString() { + return "BoardVO [arrestId=" + arrestId + ", arrestDate=" + arrestDate + + ", agencyType=" + agencyType + ", agencyGuard=" + agencyGuard + + ", agencyVessel=" + agencyVessel + ", procCondition=" + + procCondition + ", violateType=" + violateType + + ", violateDetail=" + violateDetail + ", invasionType=" + + invasionType + ", specBatlYn=" + specBatlYn + ", nllYn=" + + nllYn + ", woDetentionType=" + woDetentionType + + ", fieldArrestDate=" + fieldArrestDate + + ", fieldReleaseDate=" + fieldReleaseDate + ", leadDistance=" + + leadDistance + ", leadHour=" + leadHour + ", leadMinute=" + + leadMinute + ", captainCount=" + captainCount + + ", mateCount=" + mateCount + ", engineerCount=" + + engineerCount + ", crewCount=" + crewCount + + ", shipProcType=" + shipProcType + ", commissionCost=" + + commissionCost + ", gearCast=" + gearCast + ", gearWidth=" + + gearWidth + ", gearEtc=" + gearEtc + ", addrArea=" + addrArea + + ", addrCity=" + addrCity + ", addrDetail=" + addrDetail + + ", latD=" + + latD + + ", latM=" + + latM + + ", latS=" + + latS + + ", lonD=" + + lonD + + ", lonM=" + + lonM + + ", lonS=" + + lonS // 위경도 + + ", shipName=" + shipName + ", shipTonnage=" + shipTonnage + + ", shipType=" + shipType + ", shipCrewCnt=" + shipCrewCnt + + ", shipQuality=" + shipQuality + ", shipMent=" + shipMent + + ", shipPortName=" + shipPortName + ", capName=" + capName + + ", capChnName=" + capChnName + ", capAge=" + capAge + + ", vioFish=" + vioFish + ", vioCnt=" + vioCnt + + ", vioPriatedAmt=" + vioPriatedAmt + ", marginPaymentYn=" + + marginPaymentYn + ", marginPaymentAmt=" + marginPaymentAmt + + ", marginPaymentDate=" + marginPaymentDate + ", status=" + + status + ", delYn=" + delYn + ", regDate=" + regDate + + ", regUser=" + regUser + ", regAgency=" + regAgency + ", otherMeansOfTransport=" + otherMeansOfTransport + + ", transportation=" + transportation + "]"; + } + +} diff --git a/src/main/java/kcg/faics/inter/web/InternationalController.java b/src/main/java/kcg/faics/inter/web/InternationalController.java new file mode 100644 index 0000000..02253c7 --- /dev/null +++ b/src/main/java/kcg/faics/inter/web/InternationalController.java @@ -0,0 +1,583 @@ + +package kcg.faics.inter.web; + + +import java.util.Calendar; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; + +import javax.annotation.Resource; + +import kcg.faics.cmmn.excel.ExcelExporter; +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.cmmn.vo.CodeVO; +import kcg.faics.inter.service.InternationalService; +import kcg.faics.inter.vo.InternationalSearchVO; +import kcg.faics.inter.vo.InternationalVO; +import kcg.faics.sec.AuthType; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.filter.ReloadableFilterInvocationSecurityMetadataSource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +/** + * @FileName : InternationalController.java + * @Project : 국제해양프로젝트 + * @Date : 2018. 5. 8. + * @작성자 : Moon + * @변경이력 : + * @프로그램 설명 : + */ +@Controller +@RequestMapping("/inter") +public class InternationalController { + protected static Logger log = LoggerFactory.getLogger(InternationalController.class); + + /** + * 코드관련 정보 인터페이스. + */ + @Resource(name = "codeService") + private CodeService codeService; + /** + * 나포정보 인터페이스. + */ + @Resource(name = "internationalService") + private InternationalService internationalService; + + + /** + * 국제어선 나포정보 목록화면을 반환한다. + * @param arrestSearchVo 나포정보검색객체 + * @param model 모델객체 + * @return 국제어선 검거현황 목록화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/arrestListView.do") + public String arrestListView(final InternationalSearchVO arrestSearchVo, Model model) throws Exception { + + try { + // 공통코드 조회 + model = getCommonCode(model); + + // 국제어선 나포정보 목록 조회 + //arrestList = internationalService.getArrestListAll(arrestSearchVo); + + // 국제어선 나포정보 목록 집계정보 조회(단건) + //arrestCntList = internationalService.getArrestListAllCount(arrestSearchVo); + + + model.addAttribute("listFlag", "init"); + } catch (Exception e) { + e.printStackTrace(); + } + return "/inter/arrestList.tiles"; + } + + + + /** + * 국제어선 나포정보 목록 검색결과를 반환한다. + * + * @param internationalSearchVO 견문 검색 객체 + * @param model 모델객체 + * @return 견문검색결과화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/arrestList.do") + public String arrestList(@ModelAttribute final InternationalSearchVO internationalSearchVO, Model model) throws Exception { + + List internationalList = null; // 국제어선나포정보목록 + InternationalVO internationalCntList = null; // 국제어선나포정보 집계건수 + HashMap resultMap = new HashMap(); + + + try { + // 공통코드 조회 + // model = getCommonCode(model); + + model.addAttribute("internationalList", null); + model.addAttribute("internationalCntList", null); + + + + // 국제어선 나포정보 목록 조회 + internationalList = internationalService.getArrestList(internationalSearchVO); + + if (internationalList.size() > 0) { + // 국제어선 나포정보 집계정보 조회 + internationalCntList = internationalService.getArrestListCount(internationalSearchVO); + } else { + internationalCntList = null; + } + model.addAttribute("internationalList", internationalList); + model.addAttribute("internationalCntList", internationalCntList); + model.addAttribute("internationalSearchVO", internationalSearchVO); + + resultMap.put("msg", "정상으로 조회되었습니다."); + resultMap.put("code", 0); + } catch (Exception e) { + e.printStackTrace(); + } + return "/inter/arrestResult"; + } + + + + /** + * 국제어선 나포정보 화면에서 필요한 공통코드를 조회한다. + * + * @param model 화면에 넘길 Model 객체 + + * @return model 객체 + * @throws Exception 기본예외처리 + */ + public Model getCommonCode(final Model model) throws Exception { + List agencyTypeList = null; // 기관종류 + List placeList = null; // 소속 + List addressList = null; // 주소 + List violateTypeList = null; // 위반내용구분 + List shipTypeList = null; // 선종 + List shipMentList = null; // 선적 + List shipQualityList = null; // 선질 + List shipProcTypeList = null; // 선박처리 + List invasionTypeList = null; // 침범유형 + List woDetentionTypeList = null; // 무혐의불구속 + List marginPaymentYnList = null; // 범죄유형 + + //List foreignCrew = null; // 외국선원 + List transportation = null; // 외국선원 + List itemTest = null; // 밀수입 품목 + List smugglingName = null; // 밀수출 품목 + List remarksList = null; + List aviolentcrime = null;// 강력범죄 + List violentcrime = null; // 폭력범죄 + List intelligentcrime = null; // 지능범죄 + List theftcrime = null; // 절도범죄 + + List directSmuggling = null; // 직접밀입국 이동수단 + List speciallaw = null; + List ar01List = null; // 범죄유형_해양국경관리 + List ar02List = null; // 범죄유형_통상질서교란 + List ar03List = null; // 범죄유형_국입산업보호 + List ar04List = null; // 범죄유형_국민사회안전 + List ar05List = null; // 범죄유형_외국인관련범죄 + + LoginUserVO loginUserVo = new LoginUserVO(); + + try { + if (AuthType.LOCAL_HEADQUARTERS == loginUserVo.getAuthType()) { + placeList = codeService.getPlace1SubList(loginUserVo.getPlace1()); + } else { + placeList = codeService.getPlace1List(false); + } + + ar01List = codeService.getCodeValues("AR01", ""); + ar02List = codeService.getCodeValues("AR02", ""); + ar03List = codeService.getCodeValues("AR03", ""); + ar04List = codeService.getCodeValues("AR04", ""); + ar05List = codeService.getCodeValues("AR05", ""); + + agencyTypeList = codeService.getCodeValues("T010", ""); /* 검거기관대분류 */ + addressList = internationalService.getAddressAreaList("0000"); /* 주소(특별광역시도) */ + violateTypeList = codeService.getCodeValues("T003", ""); /* 위반내용구분 */ + shipTypeList = codeService.getCodeValues("FA81", ""); /* 선종 조회 */ + shipMentList = codeService.getCodeValues("SSRR", ""); /* 선적 */ + shipQualityList = codeService.getCodeValues("T004", ""); /* 선질 */ + shipProcTypeList = codeService.getCodeValues("T007", ""); /* 선박처리 */ + invasionTypeList = codeService.getCodeValues("T006", ""); /* 선박처리 */ + woDetentionTypeList = codeService.getCodeValues("T005", ""); /* 선박처리 */ + /*marginPaymentYnList = codeService.getCodeValues("T008", ""); 담보금납부여부 */ + marginPaymentYnList = codeService.getCodeValues("T009", ""); /* 범죄유형 */ + + //foreignCrew = codeService.getCodeValues("CREW", ""); // 외국선원 + transportation = codeService.getCodeValues("TRAN", ""); // 외국선원 + itemTest = codeService.getCodeValues("TES1", ""); // 밀수입 품목 + smugglingName = codeService.getCodeValues("TES2", ""); // 밀수입 품목 + remarksList = codeService.getCodeValues("REMA", ""); // 비고 + aviolentcrime = codeService.getCodeValues("AVIO", ""); // 강력범죄 + violentcrime = codeService.getCodeValues("VIOL", ""); // 폭력범죄 + intelligentcrime = codeService.getCodeValues("INTE", ""); // 지능범쥐 + theftcrime = codeService.getCodeValues("THEF", ""); // 절도범죄 + speciallaw = codeService.getCodeValues("SPEC", ""); // 특별법범 + directSmuggling = codeService.getCodeValues("DIRT", ""); // 직접밀입국 이동수단 + + Collections.reverse(marginPaymentYnList); + //Collections.sort(marginPaymentYnList, comparator); + //CodeVO codeVO = marginPaymentYnList.get(1); + //marginPaymentYnList.set(1, marginPaymentYnList.get(0)); + //marginPaymentYnList.set(0, codeVO); + + model.addAttribute("ar01List", ar01List); + model.addAttribute("ar02List", ar02List); + model.addAttribute("ar03List", ar03List); + model.addAttribute("ar04List", ar04List); + model.addAttribute("ar05List", ar05List); + + model.addAttribute("placeList", placeList); + model.addAttribute("addressList", addressList); + model.addAttribute("shipQualityList", shipQualityList); + model.addAttribute("shipMentList", shipMentList); + model.addAttribute("shipTypeList", shipTypeList); + model.addAttribute("violateTypeList", violateTypeList); + model.addAttribute("agencyTypeList", agencyTypeList); + model.addAttribute("shipProcTypeList", shipProcTypeList); + model.addAttribute("invasionTypeList", invasionTypeList); + model.addAttribute("woDetentionTypeList", woDetentionTypeList); + model.addAttribute("marginPaymentYnList", marginPaymentYnList); + log.trace("@@@@@@@ㅇㅅㅇㅅㅇㅅㅇㅅㅇㅅㅇㄴㅅㅇㅅㄴㅇㅅㄴㅇㅅㅇㅅㅇㅅㅇㅅㅇㅅㅇㅅㅇㅅㅇㅅㅇㅅㅇ"); + + //model.addAttribute("foreignCrew", foreignCrew); + model.addAttribute("transportation", transportation); + model.addAttribute("itemTest", itemTest); + model.addAttribute("smugglingName", smugglingName); + model.addAttribute("remarksList", remarksList); + model.addAttribute("aviolentcrime", aviolentcrime); + model.addAttribute("violentcrime", violentcrime); + model.addAttribute("intelligentcrime", intelligentcrime); + model.addAttribute("theftcrime", theftcrime); + model.addAttribute("speciallaw", speciallaw); + model.addAttribute("directSmuggling", directSmuggling); + + } catch (Exception e) { + e.printStackTrace(); + } + + return model; + } + + /** + * 국제어선 나포정보 등록/수정화면을 반환한다. + * + * @param internationalVO 견문 검색 객체 + * @param model 모델객체 + * @return 견문검색결과화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/arrestAdd.do") + public String arrestAdd(final InternationalVO internationalVO, Model model) throws Exception { + + try { + // 공통코드 조회 + model = getCommonCode(model); + model.addAttribute("regFlag", "create"); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "/inter/arrestAdd.tiles"; + } + + /** + * 국제어선 나포정보 목록화면을 반환한다. + * + * @param area 특별광역시도 코드 + * @param internationalVO 나포정보검색객체 + * @param model 모델객체 + * @return 국제어선 검거현황 목록화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/getAddressAreaList.do") + public String getAddressAreaList(@RequestParam("area") final String area, + final InternationalVO internationalVO, final Model model) throws Exception { + HashMap result = new HashMap(); + List addressCityList = null; + try { + + /* 특별광역시&도청 목록조회 */ + addressCityList = internationalService.getAddressAreaList(area); + model.addAttribute("addressCityList", addressCityList); + + result.put("result", "OK"); + result.put("msg", "시목록 조회성공"); + } catch (Exception e) { + e.printStackTrace(); + } + + return "/inter/arrestAdd.tiles"; + } + + /** + * 하위소속 코드 리스트를 반환한다. + * + * @param codeVO + * 코드VO + * @return 소속 코드 리스트 + * @throws Exception + * 기본 예외 처리 + */ + @ResponseBody + @RequestMapping("/getAddressList.json") + public HashMap getAddressList(final CodeVO codeVO) + throws Exception { + HashMap result = new HashMap(); + List addressCityList = null; + String area = codeVO.getCode1(); + + + /* 특별광역시&도청 목록조회 */ + addressCityList = internationalService.getAddressAreaList(area); + result.put("data", addressCityList); + // model.addAttribute("addressCityList", addressCityList); + return result; + } + + /** + * 국제어선 나포정보를 등록한다. + * + * @param internationalVO + * 국제어선나포정보 객체 + * @param bindingResult + * 바인딩 객체 + * @param model + * 모델 객체 + * @param status + * 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/arrestInsert.do", method = RequestMethod.POST) + public String arrestTempInsert( + @ModelAttribute("internationalVO") final InternationalVO internationalVO, + final BindingResult bindingResult, final Model model, + final SessionStatus status) throws Exception { + + HashMap result = new HashMap(); + try { + + internationalVO.setDelYn("N"); // 삭제여부 + + + /* 국제어선 나포정보 등록 */ + result = internationalService.insert(internationalVO); + + } catch (Exception e) { + e.printStackTrace(); + } + + if ((Integer) result.get("result") != 1) { + return "redirect:/inter/arrestAdd.do"; + } + + return "redirect:/inter/arrestListView.do"; + } + + + /** + * 국제어선 나포정보를 수정한다. + * @param internationalVO + * 나포정보 객체 + * @param bindingResult + * 바인딩 객체 + * @param model + * 모델 객체 + * @param status + * 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/arrestUpdate.do", method = RequestMethod.POST) + public String arrestUpdate(@ModelAttribute("internationalVO") final InternationalVO internationalVO, + final BindingResult bindingResult, final Model model, final SessionStatus status) throws Exception { + + HashMap result = new HashMap(); + try { + + internationalVO.setDelYn("N"); // 삭제여부 + + result = internationalService.update(internationalVO); + + } catch (Exception e) { + e.printStackTrace(); + } + + if ((Integer) result.get("result") != 1) { + return "redirect:/inter/arrestAdd.do"; + } + + return "redirect:/inter/arrestListView.do"; + } + + /** + * 국제어선 나포정보를 삭제한다. + * @param internationalVO + * 외사경찰 정보 객체 + * @param bindingResult + * 바인딩 객체 + * @param model + * 모델 객체 + * @param status + * 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/arrestDelete.do", method = RequestMethod.POST) + public String arrestDelete(@ModelAttribute("internationalVO") final InternationalVO internationalVO, + final BindingResult bindingResult, final Model model, final SessionStatus status) throws Exception { + + HashMap result = new HashMap(); + try { + + internationalVO.setDelYn("Y"); // 삭제여부 + + result = internationalService.delete(internationalVO); + + } catch (Exception e) { + e.printStackTrace(); + } + + if ((Integer) result.get("result") != 1) { + return "redirect:/inter/arrestAdd.do"; + } + + return "redirect:/inter/arrestListView.do"; + } + + /** + * 국제어선 나포정보를 반환한다. + * + * @param internationalVO + * @param model 모델 객체 + * @return 국제어선나포정보 수정화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping("/arrestView.do") + public String arrestView(final InternationalVO internationalVO, Model model) throws Exception { + + try { + // 국제어선 나포정보 단건조회 + InternationalVO result = internationalService.select(internationalVO); + + // 공통코드 조회 + model = getCommonCode(model); + + model.addAttribute("internationalVO", result); + model.addAttribute("regFlag", "modify"); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "/inter/arrestAdd.tiles"; + } + + /** + * 국제어선 나포처리현황 엑셀 다운로드 + * @param searchVO + * @param model Model객체 + * @return 외사장비 사용실적 현황 + */ + @RequestMapping("/arrestExcelDownload.do") + public String arrestExcelDownload(final InternationalSearchVO searchVO, final Model model) throws Exception { + Calendar cal = Calendar.getInstance(); + InternationalVO arrestCntList = null; + + String title = cal.get(cal.YEAR) + "년 국제어선 검거현황"; + + List arrestList = internationalService.getArrestListExcel(searchVO); + + if (arrestList.size() > 0) { + arrestCntList = internationalService.getArrestListCount(searchVO); + LinkedHashMap header = new LinkedHashMap(); + header.put("arrestDate", "검거일시"); + header.put("addrStr", "검거관서"); + header.put("violateType", "사건개요"); + header.put("violateDetail", "검거장소"); + /*header.put("invasion3", "침범유형(영해)"); + header.put("invasion4", "침범유형(검거장소)"); + header.put("invasion1", "침범유형(검거장소)"); + header.put("invasion2", "침범유형(검거장소)"); + header.put("specBatlYn", "침범유형(검거장소)");*/ + header.put("nllYn", "적용법조"); + header.put("agencyGuardStr", "검거기관"); + /*header.put("agencyVessel", "함정");*/ + header.put("leadDistance", "검거인원(내국인)"); + header.put("leadHour", "검거인원(외국인국적)"); + header.put("leadMinute", "검거인원(비자종류)"); + header.put("capName", "밀입증(무사증)_알선,운송"); + header.put("capChnName", "밀입증(무사증)_불법이동자"); + header.put("transportation", "밀입증(무사증)_이동수단"); + header.put("otherMeansOfTransport", "밀입증(무사증)_기타이동수단"); + header.put("arrangeTransport", "밀입국(직접밀입국)_알선,운송"); + header.put("illegalMover", "밀입국(직접밀입국)_불법이동자"); + header.put("directSmuggling", "밀입국(직접밀입국)_이동수단"); + header.put("otherMeansOfDirect", "밀입국(직접밀입국)_기타이동수단"); + header.put("foreignCrew", "밀입국(외국선원)"); + header.put("itemTest", "밀수입(품목)"); + header.put("quantity", "밀수입(수량kg)"); + header.put("priceMoney", "밀수입(금액)"); + header.put("targetCountry", "밀수입(대상국가)"); + header.put("escapeChina", "밀출국(중국)_도피"); + header.put("employmentChina", "밀출국(중국)_도피"); + header.put("etcChina", "밀출국(중국)_도피"); + header.put("escapeJapan", "밀출국(일본)_도피"); + header.put("employmentJapan", "밀출국(일본)_도피"); + header.put("etcJapan", "밀출국(일본)_도피"); + header.put("escapeCountries", "밀출국(기타국가)_도피"); + header.put("employmentCountries", "밀출국(기타국가)_도피"); + header.put("etcCountries", "밀출국(기타국가)_도피"); + header.put("smugglingName", "밀수출(품목)"); + header.put("smugglingChn", "밀수출(수량kg)"); + header.put("smugglingAge", "밀수출(금액)"); + header.put("smugglingWorld", "밀수출(대상국가)"); + header.put("spilltarget", "산업기술유출(유출대상)"); + header.put("amountofcompensation", "산업기술유출(보상금액)"); + header.put("intelProperty", "지식재산권(상표법_대상)"); + header.put("quenching", "불법위폐,외국환거래(무등록외환)"); + header.put("foreignCurrency", "불법위폐,외국환거래(외화밀반출)"); + header.put("foreigncurrencyamount", "불법위폐,외국환거래(금액)"); + header.put("noInsurance", "외국인인권보호(보험미가입)"); + header.put("alienDamage", "외국인인권보호(외국인피해)"); + header.put("originIndicationViolation", "원산지표시위반"); + header.put("inhibitionOfSocialSafety", "사회 등 안전저해"); + header.put("sailorPeople", "불법체류(선원)"); + header.put("seamanOutside", "불법체류(선원외)"); + header.put("drugadministration", "기타(마약)_투약"); + header.put("carryonofdrugs", "기타(마약)_소지운반"); + header.put("drugsale", "기타(마약)_판매"); + header.put("drugitem", "기타(마약)_품목"); + header.put("drugquantity", "기타(마약)_수량"); + header.put("drugamount", "기타(마약)_금액"); + header.put("aviolentcrime", "기타(외국인관련범죄)_강력범죄"); + header.put("violentcrime", "기타(외국인관련범죄)_폭력범죄"); + header.put("intelligentcrime", "기타(외국인관련범죄)_지능범죄"); + header.put("theftcrime", "기타(외국인관련범죄)_절도범죄"); + header.put("speciallaw", "기타(외국인관련범죄)_특별법범"); + header.put("commissionCost", "비고"); + + arrestCntList.setDetentionTotalCnt(String.valueOf(arrestCntList.getCaptainCount() + + arrestCntList.getMateCount() + + arrestCntList.getEngineerCount() + + arrestCntList.getCrewCount())); + arrestCntList.setSpecBatlYn(String.valueOf(arrestCntList.getSpecBatlCnt())); + arrestCntList.setNllYn(String.valueOf(arrestCntList.getNllCnt())); + arrestCntList.setNoPaymentCnt(String.valueOf(arrestCntList.getNotPayment())); + + + arrestList.add(0, arrestCntList); + + model.addAttribute("excel", new ExcelExporter(header, arrestList, title)); + model.addAttribute("filename", title); + + return "excelView"; + } else { + return ""; + } + } +} \ No newline at end of file diff --git a/src/main/java/kcg/faics/member/Duty.java b/src/main/java/kcg/faics/member/Duty.java new file mode 100644 index 0000000..114e7b8 --- /dev/null +++ b/src/main/java/kcg/faics/member/Duty.java @@ -0,0 +1,25 @@ +package kcg.faics.member; + +/** + * 직위. + * + * @author kimnomin + * + */ +public final class Duty { + /** + * 계장. + */ + public static final String SECTION = "03"; + /** + * 과장. + */ + public static final String HEAD = "04"; + + /** + * 생성자. + */ + private Duty() { + + } +} diff --git a/src/main/java/kcg/faics/member/UserType.java b/src/main/java/kcg/faics/member/UserType.java new file mode 100644 index 0000000..ef90493 --- /dev/null +++ b/src/main/java/kcg/faics/member/UserType.java @@ -0,0 +1,24 @@ +package kcg.faics.member; + +/** + * 사용자 구분. + * + * @author kimnomin + * + */ +public final class UserType { + /** + * 외사경찰. + */ + public static final String FA = "f"; + /** + * 일반경찰. + */ + public static final String CM = "g"; + + /** + * 생성자. + */ + private UserType() { + } +} \ No newline at end of file diff --git a/src/main/java/kcg/faics/member/package-info.java b/src/main/java/kcg/faics/member/package-info.java new file mode 100644 index 0000000..3c0f443 --- /dev/null +++ b/src/main/java/kcg/faics/member/package-info.java @@ -0,0 +1,8 @@ +/** + * 사용자 관련 패키지. + */ +/** + * @author kimnomin + * + */ +package kcg.faics.member; \ No newline at end of file diff --git a/src/main/java/kcg/faics/member/service/MemberAuthService.java b/src/main/java/kcg/faics/member/service/MemberAuthService.java new file mode 100644 index 0000000..4470ed7 --- /dev/null +++ b/src/main/java/kcg/faics/member/service/MemberAuthService.java @@ -0,0 +1,123 @@ +/** + * MemberAuthService.java + * @author 임새미 + * @since 2016. 11. 7. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 11. 7. 임새미 최초생성 + * + */ +package kcg.faics.member.service; + +import java.util.HashMap; + +import kcg.faics.member.vo.MemberSearchVO; +import kcg.faics.member.vo.MemberVO; + +/** + * MemberAuthService.java + * @author 임새미 + * @since 2016. 11. 7. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 11. 7. 임새미 최초생성 + * + */ +public interface MemberAuthService { + + /** + * 과장정보를 반환한다. + * + * @param place1 소속기관 코드 + * @return 과장정보 + * @throws Exception 기본 예외 처리 + */ + MemberVO getHead(String place1) throws Exception; + + /** + * 계장정보를 반환한다. + * + * @param place1 소속기관 코드 + * @return 계장정보 + * @throws Exception 기본 예외 처리 + */ + MemberVO getSection(String place1) throws Exception; + + /** + * 견문 결재권한을 반환한다. + * + * @param userid 사용자 ID + * @param place1 소속코드 + * @return (1-나머지, 2-계장, 3-과장) + * @throws Exception + * 기본 예외 처리 + */ + int getDutiesForRptApprove(String userid, String place1) throws Exception; + + /** + * 견문 결재권한을 반환한다. + * + * @param memberVO + * 사용자 VO + * @return (1-나머지, 2-계장, 3-과장) + * @throws Exception + * 기본 예외 처리 + */ + int getDutiesForRptApprove(MemberVO memberVO) throws Exception; + + /** + * 외사경찰 리스트를 반환한다. + * + * @param searchVO searchVO 객체 + * @return hashmap : head - 과장정보, section - 계장정보, resultList - 외사경찰리스트 + * @throws Exception 기본 예외 처리 + */ + HashMap getMemberListByPlace1(MemberSearchVO searchVO) throws Exception; + + /** + * 외사경찰 수를 반환한다. + * + * @param searchVO searchVO 객체 + * @return 전체 외사경찰 수 + * @throws Exception 기본 예외 처리 + */ + int getMemberListByPlace1Cnt(MemberSearchVO searchVO) throws Exception; + + /** + * 외사경찰의 권한을 설정한다. + * + * @param memberVO userid, usegrade 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + int updateMemberAuth(MemberVO memberVO) throws Exception; + + /** + * 외사경찰의 견문권한을 설정한다. + * + * @param memberVO userid, usegrade 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + int updateMemberRpt(MemberVO memberVO) throws Exception; + + /** + * 외사경찰 부서 계장 권한을 설정한다. + * + * @param memberVO userid 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + int updateHead(MemberVO memberVO) throws Exception; + + /** + * 외사경찰 부서 과장 권한을 설정한다. + * + * @param memberVO userid 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + int updateSection(MemberVO memberVO) throws Exception; +} diff --git a/src/main/java/kcg/faics/member/service/MemberService.java b/src/main/java/kcg/faics/member/service/MemberService.java new file mode 100644 index 0000000..7954231 --- /dev/null +++ b/src/main/java/kcg/faics/member/service/MemberService.java @@ -0,0 +1,180 @@ +package kcg.faics.member.service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.web.multipart.MultipartFile; + +import kcg.faics.cmmn.bbs.BaseBbsService; +import kcg.faics.member.vo.ExMemberVO; +import kcg.faics.member.vo.MemberSearchVO; +import kcg.faics.member.vo.MemberVO; + +/** + * MemberService.java + * @author 임새미 + * @since 2016. 11. 4. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 11. 4. 임새미 최초생성 + * + */ +public interface MemberService extends BaseBbsService { + + /** + * 외사경찰 목록(no paging)읇 반환한다. + * + * @param searchVO + * 검색조건 VO + * @return 게시물 리스트 + * @throws Exception + * 기본 예외 처리 + */ + List getFaListAll(MemberSearchVO searchVO) throws Exception; + + /** + * 사용자 비밀번호를 수정한다. + * + * @param dataVO 수정할 데이터 + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception 기본 예외 처리 + */ + HashMap updatePassword(MemberVO dataVO) throws Exception; + public HashMap initPassword(MemberVO dataVO, String[] users) throws Exception; + + public List> getCapacityManagement() throws Exception; + public List> getCareerStatus() throws Exception; + + /** + * 사용자 정보를 삭제한다. + * + * @param dataVO + * 사용자 OV + * @param userType + * 사용자 구분 (외사경찰, 일반경찰) : UserType 클래스 참조 + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + HashMap delete(MemberVO dataVO, String userType) throws Exception; + + /** + * 로그인 실패시 처리 로직. + * + * @param dataVO + * 사용자 VO + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + HashMap failLogin(MemberVO dataVO) throws Exception; + + /** + * 로그인 실패횟수를 초기화 시킨다. + * + * @param dataVO + * 사용자 VO + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + HashMap initChkcnt(MemberVO dataVO) throws Exception; + + /** + * 외사경찰 정보를 수정한다. + * + * @param dataVO + * 사용자 VO + * @param fileMap + * MultipartFile형태의 파일정보 + * @param deleteFiles + * 삭제할 파일리스트 + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + HashMap updateFaMember(MemberVO dataVO, Map fileMap, String[] deleteFiles) throws Exception; + + /** + * 일반경찰 정보를 수정한다. + * + * @param dataVO + * 사용자 VO + * @throws Exception + * 기본 예외 처리 + */ + int updateCmmnMemberInfo(final MemberVO dataVO) throws Exception; + + /** + * 한 건의 과거외사경찰 정보를 반환한다. + * + * @param searchVO + * 검색조건 VO + * @return 과거외사경찰 정보 + * @throws Exception + * 기본 예외 처리 + */ + ExMemberVO selectExMember(ExMemberVO searchVO) throws Exception; + + /** + * 과거외사경찰 목록을 반환한다. + * + * @param memberSearchVO + * 검색, 페이지 정보 객체 + * @return 과거외사경찰 목록 (map) + * @throws Exception + * 기본 예외 처리 + */ + List> exmemberList(MemberSearchVO memberSearchVO) throws Exception; + + /** + * 과거외사경찰 목록을 반환한다. + * + * @param memberSearchVO + * 검색, 페이지 정보 객체 + * @return 과거외사경찰 목록 (vo) + * @throws Exception + * 기본 예외 처리 + */ + List exmemberVoList(MemberSearchVO memberSearchVO) throws Exception; + + /** + * 검색 키워드에 따른 총 과거외사경찰 목록을 조회한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @return 사용자 수 + * @exception Exception 기본 예외 처리 + */ + int selectExmemberListCnt(MemberSearchVO searchVO) throws Exception; + /** + * 전체 과거외사경찰 사용자 수 를 가져온다. + * + * @return 사용자 수 + * @throws Exception 기본 예외 처리 + */ + int selectExmemberTotalCnt(MemberSearchVO searchVO) throws Exception; + + /** + * 과거외사경찰 정보를 수정한다. + * + * @param dataVO + * 수정할 과거외사경찰 VO + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + HashMap updateExMember(ExMemberVO dataVO) throws Exception; + + /** + * 과거외사경찰 정보를 삭제한다. + * + * @param dataVO + * 삭제할 과거외사경찰 VO + * @return Map("result") = 1 : 성공, : 실패 + * @throws Exception + * 기본 예외 처리 + */ + HashMap deleteExMember(ExMemberVO dataVO) throws Exception; +} diff --git a/src/main/java/kcg/faics/member/service/impl/MemberAuthMapper.java b/src/main/java/kcg/faics/member/service/impl/MemberAuthMapper.java new file mode 100644 index 0000000..5ca10de --- /dev/null +++ b/src/main/java/kcg/faics/member/service/impl/MemberAuthMapper.java @@ -0,0 +1,169 @@ +package kcg.faics.member.service.impl; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.member.vo.MemberSearchVO; +import kcg.faics.member.vo.MemberVO; +import kcg.faics.sec.LoginUserVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +/** + * MmeberAuthMapper.java + * @author 임새미 + * @since 2016. 11. 7. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 11. 7. 임새미 최초생성 + * + */ +@Repository("memberAuthMapper") +public class MemberAuthMapper extends EgovAbstractMapper { + + /** + * 과장정보를 반환한다. + * + * @param place1 소속기관 코드 + * @return 과장정보 + * @throws Exception 기본 예외 처리 + */ + public MemberVO getHead(String place1) throws Exception { + return selectOne("MemberAuth.getHead", place1); + } + + /** + * 계장정보를 반환한다. + * + * @param place1 소속기관 코드 + * @return 계장정보 + * @throws Exception 기본 예외 처리 + */ + public MemberVO getSection(String place1) throws Exception { + return selectOne("MemberAuth.getSection", place1); + } + + /** + * 외사경찰 리스트를 반환한다. + * + * @param searchVO searchVO 객체 + * @return 외사경찰리스트 + * @throws Exception 기본 예외 처리 + */ + public List getMemberListByPlace1(MemberSearchVO searchVO) { + return selectList("MemberAuth.getMemberListByPlace1", searchVO); + } + + /** + * 외사경찰 수를 반환한다. + * + * @param searchVO searchVO 객체 + * @return 전체 외사경찰 수 + * @throws Exception 기본 예외 처리 + */ + public int getMemberListByPlace1Cnt(MemberSearchVO searchVO) { + return (Integer) selectOne("MemberAuth.getMemberListByPlace1Cnt", searchVO); + } + + /** + * 외사경찰의 권한을 설정한다. + * + * @param memberVO userid, usegrade 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int updateMemberAuth(MemberVO memberVO) { + return update("MemberAuth.updateMemberAuth", memberVO); + } + + /** + * 사용자의 견문을 가져온다. + * + * @param memberVO userid 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public HashMap getMemberRpt(MemberVO memberVO) { + return selectOne("MemberAuth.getMemberRpt", memberVO); + } + + /** + * 외사경찰의 견문권한을 설정한다. + * + * @param memberVO userid, usegrade 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int updateMemberRpt(MemberVO memberVO) { + return update("MemberAuth.updateMemberRpt", memberVO); + } + + /** + * 외사경찰의 견문권한을 추가한다. + * + * @param memberVO userid, usegrade 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int insertMemberRpt(MemberVO memberVO) { + return insert("MemberAuth.insertMemberRpt", memberVO); + } + + /** + * 외사경찰 부서 계장 권한을 설정한다. + * + * @param memberVO userid 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int updateSection(final MemberVO memberVO) { + insertRptApprove(memberVO); + return update("MemberAuth.updateSection", memberVO); + } + + /** + * 외사경찰 부서 과장 권한을 설정한다. + * + * @param memberVO userid 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int updateHead(final MemberVO memberVO) { + insertRptApprove(memberVO); + return update("MemberAuth.updateHead", memberVO); + } + + /** + * 견문권한 레코드가 있는지 판단한다. + * + * @param memberVO 사용자VO + * @return 1:존재, 0:없음 + */ + private int existRptApprove(final MemberVO memberVO) { + return selectOne("MemberAuth.existRptApprove", memberVO); + } + + /** + * 견문권한 레코드가 없으면 insert한다. + * + * @param memberVO 사용자VO + * @return 1:성공, 0:데이터존재, -1:오류발생 + */ + public int insertRptApprove(final MemberVO memberVO) { + int result = -1; + try { + if (0 == existRptApprove(memberVO)) { + result = insert("MemberAuth.insertRptApprove", memberVO); + } else { + result = 0; + } + } catch (Exception e) { + result = -1; + } + + return result; + } +} diff --git a/src/main/java/kcg/faics/member/service/impl/MemberAuthServiceImpl.java b/src/main/java/kcg/faics/member/service/impl/MemberAuthServiceImpl.java new file mode 100644 index 0000000..a6a6d8c --- /dev/null +++ b/src/main/java/kcg/faics/member/service/impl/MemberAuthServiceImpl.java @@ -0,0 +1,218 @@ +/** + * AuthServiceImpl.java + * @author 임새미 + * @since 2016. 11. 7. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 11. 7. 임새미 최초생성 + * + */ +package kcg.faics.member.service.impl; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import kcg.faics.member.service.MemberAuthService; +import kcg.faics.member.vo.MemberSearchVO; +import kcg.faics.member.vo.MemberVO; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.service.impl.SecurityMapper; + +import org.springframework.stereotype.Service; + +/** + * AuthServiceImpl.java + * @author 임새미 + * @since 2016. 11. 7. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 11. 7. 임새미 최초생성 + * + */ +@Service("memberAuthService") +public class MemberAuthServiceImpl implements MemberAuthService { + + @Resource(name = "memberAuthMapper") + MemberAuthMapper memberAuthMapper; + @Resource(name = "securityMapper") + SecurityMapper securityMapper; + + /** + * 과장정보를 반환한다. + * + * @param place1 소속기관 코드 + * @return 과장정보 + * @throws Exception 기본 예외 처리 + */ + @Override + public MemberVO getHead(final String place1) throws Exception { + return memberAuthMapper.getHead(place1); + } + + /** + * 계장정보를 반환한다. + * + * @param place1 소속기관 코드 + * @return 계장정보 + * @throws Exception 기본 예외 처리 + */ + @Override + public MemberVO getSection(final String place1) throws Exception { + return memberAuthMapper.getSection(place1); + } + + @Override + public int getDutiesForRptApprove(final String userid, final String place1) + throws Exception { + int retVal = 1; + MemberVO headVO = getHead(place1); + MemberVO sectionVO = getSection(place1); + + if (userid.equals(headVO.getUserid())) { + retVal = 3; + } else if (userid.equals(sectionVO.getUserid())) { + retVal = 2; + } else { + retVal = 1; + } + + return retVal; + } + + @Override + public int getDutiesForRptApprove(final MemberVO memberVO) throws Exception { + return getDutiesForRptApprove(memberVO.getUserid(), memberVO.getPlace1()); + } + + /** + * 외사경찰 리스트를 반환한다. + * + * @param searchVO searchVO 객체 + * @return hashmap : head - 과장정보, section - 계장정보, resultList - 외사경찰리스트 + * @throws Exception 기본 예외 처리 + */ + @Override + public HashMap getMemberListByPlace1(final MemberSearchVO searchVO) throws Exception { + + MemberVO headVO = getHead(searchVO.getPlace1()); + MemberVO sectionVO = getSection(searchVO.getPlace1()); + + List userList = memberAuthMapper.getMemberListByPlace1(searchVO); + Iterator it = userList.iterator(); + while (it.hasNext()) { + LoginUserVO user = it.next(); + /* 과장? */ + if (headVO != null) { + String head = headVO.getUserid(); + user.setAuthHead(head != null && head.equals(user.getUserid()) ? 1 : 0); + } + /* 계장? */ + if (sectionVO != null) { + String section = sectionVO.getUserid(); + user.setAuthSection(section != null && section.equals(user.getUserid()) ? 1 : 0); + } + + Map rptAu = (Map) securityMapper.getReportAgentAuCode(user.getUserid()); + int authCode = 0; + if (rptAu != null) { + + if (rptAu.get("CODE") == null) { + authCode = 32; + } else { + authCode = Integer.parseInt(rptAu.get("CODE").toString()); + } + + } + user.setAuthCode(authCode); + user.setAuthSearch(authCode & 1); + user.setAuthStatistics(authCode & 2); + user.setAuthWaitList(authCode & 4); + user.setAuthManage(authCode & 8); + user.setAuthProxySection(authCode & 16); + user.setAuthProxyHead(authCode & 32); + } + + + HashMap result = new HashMap(); + result.put("head", headVO); + result.put("section", sectionVO); + result.put("resultList", userList); + + return result; + } + + /** + * 외사경찰 수를 반환한다. + * + * @param searchVO searchVO 객체 + * @return 전체 외사경찰 수 + * @throws Exception 기본 예외 처리 + */ + @Override + public int getMemberListByPlace1Cnt(final MemberSearchVO searchVO) throws Exception { + return memberAuthMapper.getMemberListByPlace1Cnt(searchVO); + } + + /** + * 외사경찰의 권한을 설정한다. + * + * @param memberVO userid, usegrade 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @Override + public int updateMemberAuth(final MemberVO memberVO) throws Exception { + return memberAuthMapper.updateMemberAuth(memberVO); + } + + /** + * 외사경찰의 견문권한을 설정한다. + * + * @param memberVO userid, usegrade 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @Override + public int updateMemberRpt(final MemberVO memberVO) throws Exception { + HashMap map = memberAuthMapper.getMemberRpt(memberVO); + int result = 0; + if (map != null) { + result = memberAuthMapper.updateMemberRpt(memberVO); + } else { + result = memberAuthMapper.insertMemberRpt(memberVO); + } + return result; + } + + /** + * 외사경찰 부서 계장 권한을 설정한다. + * + * @param memberVO userid 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @Override + public int updateSection(final MemberVO memberVO) throws Exception { + return memberAuthMapper.updateSection(memberVO); + } + + /** + * 외사경찰 부서 과장 권한을 설정한다. + * + * @param memberVO userid 정보 + * @return 결과 : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @Override + public int updateHead(final MemberVO memberVO) throws Exception { + return memberAuthMapper.updateHead(memberVO); + } + + +} diff --git a/src/main/java/kcg/faics/member/service/impl/MemberMapper.java b/src/main/java/kcg/faics/member/service/impl/MemberMapper.java new file mode 100644 index 0000000..49155d3 --- /dev/null +++ b/src/main/java/kcg/faics/member/service/impl/MemberMapper.java @@ -0,0 +1,357 @@ +package kcg.faics.member.service.impl; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.member.UserType; +import kcg.faics.member.vo.ExMemberVO; +import kcg.faics.member.vo.MemberSearchVO; +import kcg.faics.member.vo.MemberVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +/** + * 사용자 Mapper 클래스. + * + * MemberMapper.java + * @author 임새미 + * @since 2016. 10. 28. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 28. 임새미 최초생성 + * + */ +@Repository("memberMapper") +public class MemberMapper extends EgovAbstractMapper { + + /** + * 선택한 사용자의 정보를 반환한다. + * + * @param dataVO userid + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + public MemberVO getMember(final MemberVO dataVO) { + return selectOne("Member.getMember", dataVO); + } + + /** + * 외사경찰 정보를 반환한다. + * + * @param dataVO 사용자 VO + * @return 외사경찰 정보 + */ + public MemberVO selectFaMember(final MemberVO dataVO) { + dataVO.setUsertype(UserType.FA); + return selectOne("Member.getMember", dataVO); + } + + /** + * 일반경찰 목록(no paging)을 반환한다. + * + * @param searchVO + * 검색정보 객체 + * @return 게시물 리스트 + * @throws Exception + * 기본 예외 처리 + */ + public List getCmmnListAll(final MemberSearchVO searchVO) { + return selectList("Member.getCmmnListAll", searchVO); + } + + /** + * 일반 사용자리스트를 반환한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @return 게시물 리스트 + * @throws Exception 기본 예외 처리 + */ + public List getCmmnMemberList(final MemberSearchVO searchVO) { + return selectList("Member.getCmmnMemberList", searchVO); + } + + /** + * 외사경찰 목록(no paging)을 반환한다. + * + * @param searchVO + * 검색정보 객체 + * @return 게시물 리스트 + * @throws Exception + * 기본 예외 처리 + */ + public List getFaListAll(final MemberSearchVO searchVO) throws Exception { + return selectList("Member.getFaListAll", searchVO); + } + + /** + * 외사경찰 사용자리스트를 반환한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @return 게시물 리스트 + * @throws Exception 기본 예외 처리 + */ + public List getFaMemberList(final MemberSearchVO searchVO) { + return selectList("Member.getFaMemberList", searchVO); + } + + /** + * 검색 키워드에 따른 총 사용자 목록을 조회한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @return 사용자 수 + * @exception Exception 기본 예외 처리 + */ + public int selectListCnt(final MemberSearchVO searchVO) { + return (Integer) selectOne("Member.selectListCnt", searchVO); + } + + /** + * 전체 사용자 수 를 가져온다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @return 사용자 수 + * @throws Exception 기본 예외 처리 + */ + public int selectTotalCnt(final MemberSearchVO searchVO) { + return (Integer) selectOne("Member.selectTotalCnt", searchVO); + } + + /** + * 외사 경찰을 추가한다. + * + * @param memberVO 사용자 정보 객체 + * @return 성공 - 1, 실패 - 0 + * @exception Exception 기본 예외 처리 + */ + public int insertFaMember(final MemberVO memberVO) { + return insert("Member.insertFaMember", memberVO); + } + + /** + * 외사경찰 정보를 업데이트 한다. + * + * @param dataVO 사용자정보 VO + * @return 성공 - 1, 실패 - 0 + */ + public int updateFaMember(final MemberVO dataVO) { + return (Integer) update("Member.updateFaMember", dataVO); + } + + /** + * 일반경찰 정보를 입력한다. + * + * @param dataVO 사용자정보 VO + * @return 성공 - 1, 실패 - 0 + */ + public int insertCmmnMember(final MemberVO dataVO) { + return (Integer) insert("Member.insertCmmnMember", dataVO); + } + + /** + * 일반경찰 정보를 업데이트 한다. + * + * @param dataVO 사용자정보 VO + * @return 성공 - 1, 실패 - 0 + */ + public int updateCmmnMemberInfo(final MemberVO dataVO) { + return (Integer) update("Member.updateCmmnMemberInfo", dataVO); + } + + /** + * 외사경찰 정보를 삭제한다. + * + * @param dataVO + * 사용자정보 VO + * @return 성공 - 1, 실패 - 0 + */ + public int deleteFaMemeber(final MemberVO dataVO) { + return delete("Member.deleteFaMember", dataVO); + } + + /** + * 사용자 비밀번호를 업데이트한다. + * + * @param dataVO 사용자 정보 VO + * @return 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + public int updatePassword(final MemberVO dataVO) { + return (Integer) update("Member.updatePassword", dataVO); + } + + /** + * 외사경찰의 정원 및 현황을 가져온다. + * + * @return 현황리스트 + * @throws Exception 기본 예외 처리 + */ + public List> getCapacityManagement() { + return selectList("Member.getCapacityManagement"); + } + + /** + * 외사경력 현황을 가져온다. + * + * @return 외사경력 현황리스트 + * @throws Exception 기본 예외 처리 + */ + public List> getCareerStatus() { + return selectList("Member.getCareerStatus"); + } + + /** + * 한 건의 과거외사경찰 정보를 반환한다. + * + * @param searchVO + * 검색조건 VO + * @return 과거외사경찰 정보 + */ + public ExMemberVO selectExMemeber(final ExMemberVO searchVO) { + return selectOne("Member.selectExmemeber", searchVO); + } + + /** + * 과거외사경찰 목록을 가져온다. + * + * @param memberSearchVO 검색, 페이지 정보 객체 + * @return 과거외사경찰 리스트 + * @throws Exception 기본 예외 처리 + */ + public List> exmemberList(final MemberSearchVO memberSearchVO) { + return selectList("Member.exmemberList", memberSearchVO); + } + + /** + * 과거외사경찰 목록을 반환한다. + * + * @param memberSearchVO + * 검색, 페이지 정보 객체 + * @return 과거외사경찰 목록 + * @throws Exception + * 기본 예외 처리 + */ + public List exmemberVoList(final MemberSearchVO memberSearchVO) { + List> map = selectList("Member.exmemberList", memberSearchVO); + return selectList("Member.exmemberList", memberSearchVO); + } + + /** + * 검색 키워드에 따른 총 과거외사경찰 목록을 조회한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @return 사용자 수 + * @exception Exception 기본 예외 처리 + */ + public int selectExmemberListCnt(final MemberSearchVO searchVO) { + return (Integer) selectOne("Member.selectExmemberListCnt", searchVO); + } + + /** + * 전체 과거외사경찰 사용자 수 를 가져온다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @return 사용자 수 + * @throws Exception 기본 예외 처리 + */ + public int selectExmemberTotalCnt(final MemberSearchVO searchVO) { + return (Integer) selectOne("Member.selectExmemberTotalCnt", searchVO); + } + + /** + * 경력 정보를 추가한다. + * + * @param dataVO 사용자정보 VO + * @return result : 성공 - 1, 실패 - 0 + */ + public int updateCareerStat(final MemberVO dataVO) { + return (Integer) update("Member.updateCareerStat", dataVO); + } + + /** + * 경력 정보를 추가한다. + * + * @param dataVO 사용자정보 VO + * @return result : 성공 - 1, 실패 - 0 + */ + public int insertCareerStat(final MemberVO dataVO) { + return (Integer) update("Member.insertCareerStat", dataVO); + } + + /** + * 사용자를 검색한 결과 목록을 반환한다. + * + * @param dataVO 멤버 객체 + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + public List getSearchMember(final MemberSearchVO dataVO) { + return selectList("Member.getMemberSearchResult", dataVO); + } + + /** + * 일반경찰 정보를 수정한다. + * + * @param dataVO 사용자 정보 VO. + * @return 성공 - 1, 실패 - 0 + */ + public Object updateCmmnMember(final MemberVO dataVO) { + return update("Member.updateCmmnMember", dataVO); + } + + /** + * 일반경찰 정보를 삭제한다. + * + * @param dataVO 사용자 VO + * @return 성공 - 1, 실패 - 0 + */ + public int deleteCmmnMember(final MemberVO dataVO) { + return delete("Member.deleteCmmnMember", dataVO); + } + + /** + * 과거외사경찰 정보를 수정한다. + * + * @param dataVO + * 과거외사경찰 VO + * @return 성공 - 1, 실패 - 0 + */ + public int updateExMember(final ExMemberVO dataVO) { + return update("Member.updateExMember", dataVO); + } + + /** + * 과거외사경찰 정보를 삭제한다. + * + * @param dataVO + * 과거외사경찰 VO + * @return 성공 - 1, 실패 - 0 + */ + public int deleteExMemeber(final ExMemberVO dataVO) { + return delete("Member.deleteExMember", dataVO); + } + + /** + * 과거외사경찰 정보를 입력한다. + * + * @param dataVO + * 과거외사경찰 VO + * @return 성공 - 1, 실패 - 0 + */ + public int insertExMemeber(final ExMemberVO dataVO) { + return insert("Member.insertExMember", dataVO); + } + + /** + * 과거외사경찰 정보를 입력한다. + * + * @param dataVO + * 외사경찰 VO + * @return 성공 - 1, 실패 - 0 + */ + public int insertExMemeber(final MemberVO dataVO) { + return insert("Member.insertExMemberByMemberVO", dataVO); + } +} diff --git a/src/main/java/kcg/faics/member/service/impl/MemberServiceImpl.java b/src/main/java/kcg/faics/member/service/impl/MemberServiceImpl.java new file mode 100644 index 0000000..09e2d81 --- /dev/null +++ b/src/main/java/kcg/faics/member/service/impl/MemberServiceImpl.java @@ -0,0 +1,656 @@ +/** + * AdminServiceImpl.java + * @author 임새미 + * @since 2016. 10. 28. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 28. 임새미 최초생성 + * + */ +package kcg.faics.member.service.impl; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import kcg.faics.cmmn.egov.file.EgovFileMngUtil; +import kcg.faics.cmmn.file.FileUploadUtil; +import kcg.faics.cmmn.service.impl.CodeMapper; +import kcg.faics.member.UserType; +import kcg.faics.member.service.MemberService; +import kcg.faics.member.vo.ExMemberVO; +import kcg.faics.member.vo.MemberSearchVO; +import kcg.faics.member.vo.MemberVO; +import kcg.faics.sec.service.impl.SecurityMapper; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.security.authentication.encoding.ShaPasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +/** + * 사용자 정보 비지니스로직. + * + * AdminServiceImpl.java + * @author 임새미 + * @since 2016. 10. 28. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 28. 임새미 최초생성 + * + */ +/** + * @author kimnomin + * + */ +@Service("memberService") +public class MemberServiceImpl implements MemberService { + + /** + * 사용자 Mapper 객체. + */ + @Resource(name = "memberMapper") + private MemberMapper memberMapper; + + /** + * 시큐리티 Mapper 객체. + */ + @Resource(name = "securityMapper") + private SecurityMapper securityMapper; + + /** + * 코드관련 Mapper 객체. + */ + @Resource(name = "codeMapper") + private CodeMapper codeMapper; + + /** + * 파일 업로드 유틸리티. + */ + @Resource(name = "fileUploadUtil") + private FileUploadUtil fileUploadUtil; + + /** + * 전자정부 표준프레임워크 파일관리 유틸리티. + */ + @Resource(name = "EgovFileMngUtil") + private EgovFileMngUtil fileMngUtil; + + /*@Resource(name = "passwordEncoder") + private PasswordEncoder pwEncoder;*/ + + /** + * 비밀번호 인코더. + */ + @Resource(name = "passwordEncoder") + private ShaPasswordEncoder pwEncoder; + + /** + * 사용자 사진 저장 경로. + */ + private static final String USER_IMG_SAVE_PATH = "Member.imgStorePath"; + + /** + * 사용자 서명 저장 경로. + */ + private static final String USER_SIGN_SAVE_PATH = "Member.signStorePath"; + + + @Override + public HashMap delete(final MemberVO dataVO, final String userType) + throws Exception { + HashMap resultMap = new HashMap(); + int result = 0; + if (UserType.FA.equals(userType)) { + result = memberMapper.deleteFaMemeber(dataVO); + } else if (UserType.CM.equals(userType)) { + result = memberMapper.deleteCmmnMember(dataVO); + } + resultMap.put("result", result); + return resultMap; + } + + + /** + * 선택한 사용자의 정보를 반환한다. + * + * @param dataVO userid + * @return 선택한 사용자 정보 반환 + * @throws Exception 기본 예외 처리 + */ + @Override + public MemberVO select(final MemberVO dataVO) throws Exception { + MemberVO result = memberMapper.getMember(dataVO); + if (result != null) { + result.setDutiesStr(codeMapper.getDutiesNameByCode(result.getDuties())); + result.setPlace1Str(codeMapper.getPlace1NameByCode(result.getPlace1(), false)); + result.setPlace2Str(codeMapper.getPlace2NameByCode(result.getPlace1(), result.getPlace2())); + result.setPlace3Str(codeMapper.getPlace3NameByCode(result.getPlace3())); + result.setPositionStr(codeMapper.getPositionNameByCode(result.getPosition())); + result.setScholarshipStr(codeMapper.getScholarshipNameByCode(result.getScholarship())); + result.setJobtypeStr(codeMapper.getJobtypeNameByCode(result.getJobtype())); + } + return result; + } + + + @Override + public List selectListAll(final MemberSearchVO searchVO) throws Exception { + if (UserType.FA.equals(searchVO.getUsertype())) { + return this.getFaListAll(searchVO); + } else { + return memberMapper.getCmmnListAll(searchVO); + } + } + + /** + * 사용자 목록 화면을 반환한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @return 사용자 리스트 + * @throws Exception 기본 예외 처리 + */ + @Override + public List selectList(final MemberSearchVO searchVO) throws Exception { + List list = null; + if (UserType.FA.equals(searchVO.getUsertype())) { + list = memberMapper.getFaMemberList(searchVO); + } else { + list = memberMapper.getCmmnMemberList(searchVO); + } + return list; + } + + /** + * 검색 키워드에 따른 총 사용자 목록을 조회한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @return 사용자 수 + * @exception Exception 기본 예외 처리 + */ + @Override + public int selectListCnt(final MemberSearchVO searchVO) throws Exception { + return memberMapper.selectListCnt(searchVO); + } + + /** + * 전체 사용자 수 를 가져온다. + * + * @return 사용자 수 + * @throws Exception 기본 예외 처리 + */ + @Override + public int selectTotalCnt(final MemberSearchVO searchVO) throws Exception { + return memberMapper.selectTotalCnt(searchVO); + } + + /** + * 외사 경찰을 추가한다. + * + * @param dataVO 사용자 정보 객체 + * @param fileMap 업로드 파일정보 + * @return HashMap/ seq : 게시물 , result : 성공 - 1, 실패 - 0 + * @exception Exception 기본 예외 처리 + */ + @Override + @Transactional + public HashMap insert(final MemberVO dataVO, final Map fileMap) throws Exception { + + if (fileMap != null && fileMap.get("img").getSize() > 0) { + String userimg = fileUploadUtil.uploadWithExt(fileMap.get("img"), USER_IMG_SAVE_PATH); + dataVO.setUserimg(userimg); + } + if (fileMap != null && fileMap.get("sign").getSize() > 0) { + String usersign = fileUploadUtil.uploadWithExt(fileMap.get("sign"), USER_SIGN_SAVE_PATH); + dataVO.setUsersign(usersign); + } + dataVO.setExcareer(dataVO.getExcareer_y() + "-" + dataVO.getExcareer_m()); + dataVO.setExcareer1(dataVO.getExcareer1_y() + "-" + dataVO.getExcareer1_m()); + dataVO.setExcareer2(dataVO.getExcareer2_y() + "-" + dataVO.getExcareer2_m()); + dataVO.setExcareer3(dataVO.getExcareer3_y() + "-" + dataVO.getExcareer3_m()); + + // 보안솔루션 (CubeOne으로 처리) + //dataVO.setPasswd(pwEncoder.encodePassword(dataVO.getPasswd(), null)); + + HashMap result = new HashMap(); + upsertCareerStat(dataVO, true); + result.put("result", memberMapper.insertFaMember(dataVO)); + result.put("userid", dataVO.getUserid()); + return result; + } + + /** + * 사용자 정보를 업데이트 한다. + * + * @param dataVO 사용자정보 VO + * @param fileMap MultipartFile형태의 파일정보 + * @param deleteFiles 삭제할 파일리스트 + * @return HashMap/ seq : 게시물 번호 , result : 성공 - 1, 실패 - 0 + */ + @Override + public HashMap update(final MemberVO dataVO, final Map fileMap, final String[] deleteFiles) throws Exception { + // userimg 삭제 + if (dataVO.getUserimg() != null && dataVO.getUserimg().equals("")) { + fileMngUtil.deleteFile(dataVO.getUserimg(), USER_IMG_SAVE_PATH); + dataVO.setUserimg(null); + } + // usersign 삭제 + if (dataVO.getUsersign() != null && dataVO.getUsersign().equals("")) { + fileMngUtil.deleteFile(dataVO.getUsersign(), USER_SIGN_SAVE_PATH); + dataVO.setUsersign(null); + } + + if (fileMap != null && fileMap.get("img").getSize() > 0) { + String userimg = fileUploadUtil.uploadWithExt(fileMap.get("img"), USER_IMG_SAVE_PATH); + dataVO.setUserimg(userimg); + } + + if (fileMap != null && fileMap.get("sign").getSize() > 0) { + String usersign = fileUploadUtil.uploadWithExt(fileMap.get("sign"), USER_SIGN_SAVE_PATH); + dataVO.setUsersign(usersign); + } + + dataVO.setExcareer(dataVO.getExcareer_y() + "-" + dataVO.getExcareer_m()); + dataVO.setExcareer1(dataVO.getExcareer1_y() + "-" + dataVO.getExcareer1_m()); + dataVO.setExcareer2(dataVO.getExcareer2_y() + "-" + dataVO.getExcareer2_m()); + dataVO.setExcareer3(dataVO.getExcareer3_y() + "-" + dataVO.getExcareer3_m()); + + if(dataVO.getPasswd() != null && !dataVO.getPasswd().equals("")) { + // 보안솔루션 (CubeOne으로 처리) + //dataVO.setPasswd(pwEncoder.encodePassword(dataVO.getPasswd(), null)); + } + + HashMap result = new HashMap(); + + upsertCareerStat(dataVO, false); + + if (UserType.FA.equalsIgnoreCase(dataVO.getUsertype())) { + result.put("result", memberMapper.updateFaMember(dataVO)); + } else { + result.put("result", memberMapper.updateCmmnMember(dataVO)); + } + + result.put("userid", dataVO.getUserid()); + return result; + } + + @Override + public HashMap updateFaMember(final MemberVO dataVO, final Map fileMap, final String[] deleteFiles) + throws Exception { + // userimg 삭제 + if (dataVO.getUserimg() != null && dataVO.getUserimg().equals("")) { + fileMngUtil.deleteFile(dataVO.getUserimg(), USER_IMG_SAVE_PATH); + dataVO.setUserimg(null); + } + // usersign 삭제 + if (dataVO.getUsersign() != null && dataVO.getUsersign().equals("")) { + fileMngUtil.deleteFile(dataVO.getUsersign(), USER_SIGN_SAVE_PATH); + dataVO.setUsersign(null); + } + + if (fileMap != null && fileMap.get("img").getSize() > 0) { + String userimg = fileUploadUtil.uploadWithExt(fileMap.get("img"), USER_IMG_SAVE_PATH); + dataVO.setUserimg(userimg); + } + + if (fileMap != null && fileMap.get("sign").getSize() > 0) { + String usersign = fileUploadUtil.uploadWithExt(fileMap.get("sign"), USER_SIGN_SAVE_PATH); + dataVO.setUsersign(usersign); + } + + dataVO.setExcareer(dataVO.getExcareer_y() + "-" + dataVO.getExcareer_m()); + dataVO.setExcareer1(dataVO.getExcareer1_y() + "-" + dataVO.getExcareer1_m()); + dataVO.setExcareer2(dataVO.getExcareer2_y() + "-" + dataVO.getExcareer2_m()); + dataVO.setExcareer3(dataVO.getExcareer3_y() + "-" + dataVO.getExcareer3_m()); + + if(dataVO.getPasswd() != null && !dataVO.getPasswd().equals("")) { + // 보안솔루션 (CubeOne으로 처리) + //dataVO.setPasswd(pwEncoder.encodePassword(dataVO.getPasswd(), null)); + } + + HashMap resultMap = new HashMap(); + upsertCareerStat(dataVO, false); + int result = memberMapper.updateFaMember(dataVO); + resultMap.put("result", result); + // 외사경찰 수정에 성공하고, 외사경찰이 일반경찰로 변경되었다면 + // 과거외사경찰 테이블에 입력 후 외사경찰 테이블에서 삭제한다. + if (result == 1 && UserType.CM.equals(dataVO.getUsertype())) { + resultMap = moveFaMemberToExMember(dataVO); + } + resultMap.put("result", result); + resultMap.put("userid", dataVO.getUserid()); + + return resultMap; + } + + /** + * 일반경찰을 등록한다. (기존에 등록된 일반경찰이면 삭제한 후 입력한다.) + * + * @param dataVO + * 사용자 정보 VO + * @return 1-성공, 0-실패 + * @throws Exception + * 기본 예외 처리 + */ + public int insertCmmnMember(final MemberVO dataVO) throws Exception { + delete(dataVO, UserType.CM); + return memberMapper.insertCmmnMember(dataVO); + } + + @Override + public int updateCmmnMemberInfo(final MemberVO dataVO) throws Exception { + return memberMapper.updateCmmnMemberInfo(dataVO); + } + + @Override + public HashMap delete(final MemberVO dataVO) throws Exception { + return delete(dataVO, UserType.FA); + } + + /** + * 사용자 비밀번호를 업데이트한다. + * + * @param dataVO 사용자 정보 VO + * @return HashMap / match : 현재 비밀번호 일치 여부, result : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @Override + public HashMap updatePassword(final MemberVO dataVO) throws Exception { + HashMap resultMap = new HashMap(); + int result = 0; + + MemberVO memberVO = memberMapper.getMember(dataVO); + + // 다르면 실패처리 + if (!pwEncoder.isPasswordValid(memberVO.getPasswd().toLowerCase(), dataVO.getPasswd(), null)) { + resultMap.put("match", false); + } else { + // 같으면 변겅처리 + dataVO.setPasswd(dataVO.getNpasswd()); + + //// 보안솔루션 (CubeOne으로 처리) + //dataVO.setPasswd(pwEncoder.encodePassword(dataVO.getNpasswd(), null)); + + result = memberMapper.updatePassword(dataVO); + resultMap.put("match", true); + } + resultMap.put("result", result); + return resultMap; + } + + /** + * 경력 정보를 업데이트 한다. + * + * @param dataVO 사용자정보 VO + * @param isInsert 추가할지 삭제할지 여부 + * @return HashMap/ result : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + private int upsertCareerStat(final MemberVO dataVO, final boolean isInsert) throws Exception { + int result = 0; + + if (isInsert) { + result = memberMapper.insertCareerStat(dataVO); + } else { + result = memberMapper.updateCareerStat(dataVO); + } + + return result; + } + + /** + * 비밀번호를 초기화한다. + * + * @param dataVO 사용자 정보 VO + * @return HashMap / result : 성공 - 1, 실패 - 0 + * @throws Exception 기본 예외 처리 + */ + @Override + @Transactional + public HashMap initPassword(final MemberVO dataVO, final String[] users) throws Exception { + HashMap resultMap = new HashMap(); + int result = 0; + + for (int i = 0; i < users.length; i++) { + dataVO.setUserid(users[i]); + result = memberMapper.updatePassword(dataVO); + + if (result == 0) { + throw new Exception(); + } + } + resultMap.put("result", result); + return resultMap; + } + + /** + * 외사경찰의 정원 및 현황을 가져온다. + * + * @return 현황리스트 + * @throws Exception 기본 예외 처리 + */ + @Override + public List> getCapacityManagement() throws Exception { + return memberMapper.getCapacityManagement(); + } + + /** + * 외사경력 현황을 가져온다. + * + * @return 외사경력 현황리스트 + * @throws Exception 기본 예외 처리 + */ + @Override + public List> getCareerStatus() throws Exception { + return memberMapper.getCareerStatus(); + } + + /** + * 과거외사경찰 목록을 가져온다. + * + * @param memberSearchVO 검색, 페이지 정보 객체 + * @return 과거외사경찰 리스트 + * @throws Exception 기본 예외 처리 + */ + @Override + public List> exmemberList(final MemberSearchVO memberSearchVO) throws Exception { + return memberMapper.exmemberList(memberSearchVO); + } + + @Override + public List exmemberVoList(final MemberSearchVO memberSearchVO) + throws Exception { + return memberMapper.exmemberVoList(memberSearchVO); + } + + + /** + * 검색 키워드에 따른 총 과거외사경찰 목록을 조회한다. + * + * @param searchVO 검색, 페이지 정보 객체 + * @return 사용자 수 + * @exception Exception 기본 예외 처리 + */ + @Override + public int selectExmemberListCnt(final MemberSearchVO searchVO) throws Exception { + return memberMapper.selectExmemberListCnt(searchVO); + } + + /** + * 전체 과거외사경찰 사용자 수 를 가져온다. + * + * @return 사용자 수 + * @throws Exception 기본 예외 처리 + */ + @Override + public int selectExmemberTotalCnt(final MemberSearchVO searchVO) throws Exception { + return memberMapper.selectExmemberTotalCnt(searchVO); + } + + @Override + public List getFaListAll(final MemberSearchVO searchVO) throws Exception { + if (StringUtils.isBlank(searchVO.getUsertype()) || StringUtils.isBlank(searchVO.getUserid())) { + return memberMapper.getFaListAll(searchVO); + } else { + return memberMapper.getSearchMember(searchVO); + } + } + + + @Override + public HashMap failLogin(final MemberVO dataVO) throws Exception { + MemberVO vo = select(dataVO); + vo.setPasswd(""); + vo.incChkcnt(); + + return update(vo, null, null); + } + + + @Override + public HashMap initChkcnt(final MemberVO dataVO) throws Exception { + MemberVO vo = select(dataVO); + vo.setPasswd(""); + vo.setChkcnt(0); + + return update(vo, null, null); + } + + @Override + public ExMemberVO selectExMember(final ExMemberVO searchVO) throws Exception { + return memberMapper.selectExMemeber(searchVO); + } + + + /** + * 외사경찰을 과거외사경찰로 이동한다. + * + * @param dataVO + * 외사경찰 VO + * @return Map("result") = 1 : 성공, 0 : 실패 + * @throws Exception + * 기본 예외 처리 + */ + @Transactional + private HashMap moveFaMemberToExMember(final MemberVO dataVO) throws Exception { + HashMap resultMap = new HashMap(); + dataVO.setUsertype(UserType.FA); + MemberVO memberVO = select(dataVO); + memberVO.setHashedPasswd(true); + resultMap = insertExMember(memberVO); + if ((Integer) resultMap.get("result") == 1) { + resultMap.put("result", 0); + resultMap = delete(dataVO); + } + + //20210224 최형석 + //만약 패스워드 입력안했으면..기존에 사용됬던 패스워드를 가져온다. + if(dataVO.getPasswd().equals("") || dataVO.getPasswd() == null) { + dataVO.setPasswd(memberVO.getPasswd()); + } + + int tmpResult = insertCmmnMember(dataVO); + + Object res = resultMap.get("result"); + if (res == null || (Integer) res != 1) { + throw new Exception(); + } + return resultMap; + } + + /** + * 과거외사경찰을 외사경찰로 이동한다. + * + * @param dataVO + * 과거외사경찰 VO + * @return Map("result") = 1 : 성공, 0 : 실패 + * @throws Exception + * 기본 예외 처리 + */ + @Transactional + private HashMap moveExMemberToFaMember(final ExMemberVO dataVO) throws Exception { + HashMap resultMap = new HashMap(); + ExMemberVO updatedVO = selectExMember(dataVO); + updatedVO.setHashedPasswd(true); + resultMap = insert(updatedVO, null); + if ((Integer) resultMap.get("result") == 1) { + resultMap.put("result", 0); + resultMap = deleteExMember(updatedVO); + } + + Object res = resultMap.get("result"); + if (res == null || (Integer) res < 1) { + throw new Exception(); + } + return resultMap; + } + + /** + * 과거외사경찰 정보를 입력한다. + * + * @param dataVO + * 과거외사경찰 VO + * @return Map("result") = 1 : 성공, 0 : 실패 + * @throws Exception + * 기본 예외 처리 + */ + private HashMap insertExMember(final ExMemberVO dataVO) throws Exception { + HashMap resultMap = new HashMap(); + int result = memberMapper.insertExMemeber(dataVO); + resultMap.put("result", result); + return resultMap; + } + + /** + * 과거외사경찰 정보를 입력한다. + * + * @param dataVO + * 외사경찰 VO + * @return Map("result") = 1 : 성공, 0 : 실패 + * @throws Exception + * 기본 예외 처리 + */ + private HashMap insertExMember(final MemberVO dataVO) throws Exception { + HashMap resultMap = new HashMap(); + int result = memberMapper.insertExMemeber(dataVO); + resultMap.put("result", result); + return resultMap; + } + + @Override + public HashMap updateExMember(final ExMemberVO dataVO) + throws Exception { + + String savedImgName = ""; + if (dataVO.getImg() != null && dataVO.getImg().getSize() > 0) { + savedImgName = fileUploadUtil.uploadWithExt(dataVO.getImg(), USER_IMG_SAVE_PATH); + dataVO.setUserimg(savedImgName); + } + + HashMap resultMap = new HashMap(); + int result = memberMapper.updateExMember(dataVO); + resultMap.put("result", result); + // 과거외사경찰 수정에 성공하고, 과거외사경찰(현재는 일반경찰)이 외사경찰로 변경되었다면 + // 외사경찰 테이블에 입력 후 과거외사경찰 테이블에서 삭제한다. + if (result >= 1 && UserType.FA.equals(dataVO.getUsertype())) { + resultMap = moveExMemberToFaMember(dataVO); + } + resultMap.put("result", result); + return resultMap; + } + + @Override + public HashMap deleteExMember(final ExMemberVO dataVO) + throws Exception { + HashMap resultMap = new HashMap(); + resultMap.put("result", memberMapper.deleteExMemeber(dataVO)); + return resultMap; + } + + +} diff --git a/src/main/java/kcg/faics/member/vo/ExMemberVO.java b/src/main/java/kcg/faics/member/vo/ExMemberVO.java new file mode 100644 index 0000000..073fc47 --- /dev/null +++ b/src/main/java/kcg/faics/member/vo/ExMemberVO.java @@ -0,0 +1,184 @@ +package kcg.faics.member.vo; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.Locale; + +import org.apache.commons.lang3.StringUtils; + +/** + * 과거외사경찰 VO. + * + * @author kimnomin + * + */ +public class ExMemberVO extends MemberVO { + private static final long serialVersionUID = 9089598602982146798L; + /** + * 등록일자. + */ + private Date cdateEx; + /** + * 현재소속. + */ + private String nowPlace; + /** + * 현재소속 명칭. + */ + private String nowPlaceStr; + /** + * 현재계급. + */ + private String nowPosition; + /** + * 현재계급 명칭. + */ + private String nowPositionStr; + + /** + * @return the cdateEx + */ + public final Date getCdateEx() { + return cdateEx; + } + + /** + * @return the nowPlace + */ + public final String getNowPlace() { + return nowPlace; + } + + /** + * @param nowPlace + * the nowPlace to set + */ + public final void setNowPlace(final String nowPlace) { + this.nowPlace = nowPlace; + } + + /** + * @return the nowPlaceStr + */ + public final String getNowPlaceStr() { + return nowPlaceStr; + } + + /** + * @param nowPlaceStr + * the nowPlaceStr to set + */ + public final void setNowPlaceStr(final String nowPlaceStr) { + this.nowPlaceStr = nowPlaceStr; + } + + /** + * @return the nowPosition + */ + public final String getNowPosition() { + return nowPosition; + } + + /** + * @param nowPosition + * the nowPosition to set + */ + public final void setNowPosition(final String nowPosition) { + this.nowPosition = nowPosition; + } + + /** + * @return the nowPositionStr + */ + public final String getNowPositionStr() { + return nowPositionStr; + } + + /** + * @param nowPositionStr + * the nowPositionStr to set + */ + public final void setNowPositionStr(final String nowPositionStr) { + this.nowPositionStr = nowPositionStr; + } + + /** + * @param cdateEx + * the cdateEx to set + */ + public final void setCdateEx(final Date cdateEx) { + this.cdateEx = cdateEx; + } + + /** + * @param cdateEx + * the cdateEx(String) to set + */ + public final void setCdateEx(final String cdateEx) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.KOREA); + Date d = null; + try { + d = sdf.parse(cdateEx); + } catch (ParseException e) { + e.printStackTrace(); + } + this.setCdateEx(d); + } + + /** + * 외사근무기간을 계산하여 반환한다. (등록일 - 현 부서 배치일) + * + * @return 외사근무기간 (개월) + * @throws ParseException + * Date 파싱 예외 + */ + private int calcWorkTerm() throws ParseException { + int term = 0; + if (this.getCdate() != null && StringUtils.isNotBlank(this.getAdate())) { + Date cdate = this.getCdateEx(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.KOREA); + Date adate = sdf.parse(this.getAdate()); + term = super.calcWorkTerm(adate, cdate); + } + + return term; + } + + /** + * 외사근무기간을 표현할 문자열을 반환한다. + * + * @return 외사근무기간 문자열 (?년 ?개월) + * @throws ParseException + * Date 파싱 예외 + */ + public String getWorkTermStr() throws ParseException { + return super.termToStr(this.calcWorkTerm()); + } + + /** + * 총 외사경력을 표현할 문자열을 반환한다. (외사근무기간 + 과거외사경력) + * + * @return 총 외사경력 (?년 ?개월) + * @throws ParseException + * Date 파싱 예외 + */ + public String getTotExcareerTermStr() throws ParseException { + String excareer = this.getExcareer(); + int term = this.calcWorkTerm(); + + if (StringUtils.isNotBlank(excareer) && StringUtils.contains(excareer, "-")) { + String[] excareers = excareer.split("-"); + if (excareers.length == 2) { + int year = Integer.parseInt(excareers[0]); + int month = Integer.parseInt(excareers[1]); + month += year * 12; + term += month; + } + } + + return super.termToStr(term); + } +} diff --git a/src/main/java/kcg/faics/member/vo/MemberSearchVO.java b/src/main/java/kcg/faics/member/vo/MemberSearchVO.java new file mode 100644 index 0000000..00d5c7b --- /dev/null +++ b/src/main/java/kcg/faics/member/vo/MemberSearchVO.java @@ -0,0 +1,216 @@ +/** + * MemberSearchVO.java + * @author 임새미 + * @since 2016. 11. 2. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 11. 2. 임새미 최초생성 + * + */ +package kcg.faics.member.vo; + +import kcg.faics.cmmn.bbs.BaseSearchVO; +import kcg.faics.member.UserType; + +/** + * MemberSearchVO.java + * @author 임새미 + * @since 2016. 11. 2. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 11. 2. 임새미 최초생성 + * + */ +public class MemberSearchVO extends BaseSearchVO { + + private int recordCountPerAuthPage = 20; + + private String userid; + private String place1; + private String position; + private String name; + private String usertype = UserType.FA; + private int ordertype; + private int ordercode; + private String orderkey; + + public MemberSearchVO() { + super(); + } + + /** + * @return the recordCountPerAuthPage + */ + public int getRecordCountPerAuthPage() { + return recordCountPerAuthPage; + } + + /** + * @param recordCountPerAuthPage the recordCountPerAuthPage to set + */ + public void setRecordCountPerAuthPage(int recordCountPerAuthPage) { + this.recordCountPerAuthPage = recordCountPerAuthPage; + } + + /** + * @return the userid + */ + public String getUserid() { + return userid; + } + + /** + * @param userid the userid to set + */ + public void setUserid(String userid) { + this.userid = userid; + } + + /** + * @return the place1 + */ + public String getPlace1() { + return place1; + } + + /** + * @param place1 the place1 to set + */ + public void setPlace1(String place1) { + this.place1 = place1; + } + + /** + * @return the name + */ + public String getName() { + return name; + } + + /** + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + + /** + * @return the usertype + */ + public String getUsertype() { + return usertype; + } + + /** + * @param usertype the usertype to set + */ + public void setUsertype(String usertype) { + this.usertype = usertype; + } + + /** + * @return the orderkey + */ + public String getOrderkey() { + return orderkey; + } + + /** + * @param orderkey the orderkey to set + */ + public void setOrderkey(String orderkey) { + } + /** + * @return the ordercode + */ + public int getOrdercode() { + return ordercode; + } + + /** + * @param ordercode the ordercode to set + */ + public void setOrdercode(int ordercode) { + String key = ""; + this.ordercode = ordercode; + switch (ordercode) { + case 0: + key = "PLACE1"; + break; + case 1: + key = "PLACE2"; + break; + case 2: + key = "POSITION"; + break; + case 3: + key = "NAME"; + break; + case 4: + key = "USERID"; + break; + case 5: + key = "JOBTYPE"; + break; + case 6: + key = "USEGRADE"; + break; + case 7: + key = "TOTALEXCAREER"; + break; + case 8: + key = "DUTIES"; + break; + case 9: + key = "LOGINCHK"; + break; + case 10: + key = "CHKCNT"; + break; + case 11: + key = "INOUT"; + break; + case 12: + key = "NOWPOSITION"; + break; + case 13: + key = "NOWPLACE"; + break; + default: + key = ""; + break; + } + this.orderkey = key; + } + + /** + * @return the ordertype + */ + public int getOrdertype() { + return ordertype; + } + + /** + * @param ordertype the ordertype to set + */ + public void setOrdertype(int ordertype) { + this.ordertype = ordertype; + } + + /** + * @return the position + */ + public String getPosition() { + return position; + } + + /** + * @param position the position to set + */ + public void setPosition(String position) { + this.position = position; + } + +} diff --git a/src/main/java/kcg/faics/member/vo/MemberVO.java b/src/main/java/kcg/faics/member/vo/MemberVO.java new file mode 100644 index 0000000..ff5f9ed --- /dev/null +++ b/src/main/java/kcg/faics/member/vo/MemberVO.java @@ -0,0 +1,1290 @@ +package kcg.faics.member.vo; + +import java.io.Serializable; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +import kcg.faics.member.UserType; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +/** + * MemberVO.java + * + * @author 임새미 + * @since 2016. 10. 05. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 05. 임새미 최초생성 + * + */ +public class MemberVO implements Serializable { + + private static final long serialVersionUID = -4076942847418714109L; + + /** + * 로우넘버. + */ + private int rnum; + /** + * 사용자 ID. + */ + private String userid; + /** + * 사용자 ID 표현 문자열. + */ + private String useridStr; + /** + * 비밀번호. + */ + private String passwd; + /** + * 새로운 비밀번호. + */ + private String npasswd; + /** + * 비밀번호 암호화여부. + */ + private boolean isHashedPasswd = false; + /** + * 주민번호. + */ + private String idno; + /** + * 성명. + */ + private String name; + /** + * 성명(한자). + */ + private String chnname; + /** + * 가족사항. + */ + private String family; + /** + * 주소. + */ + private String address; + /** + * email. + */ + private String email; + /** + * 일반전화. + */ + private String hphone; + /** + * 경비전화. + */ + private String ophone; + /** + * 휴대전화. + */ + private String cphone; + /** + * 경찰임용일. + */ + private String sdate; + /** + * 현 계급 임용일. + */ + private String pdate; + /** + * 현 부서 배치일. + */ + private String adate; + /** + * 소속1. + */ + private String place1; + /** + * 소속2. + */ + private String place2; + /** + * 세부소속. + */ + private String place3; + /** + * 소속1 명칭. + */ + private String place1Str; + /** + * 현재 소속 명칭. + */ + private String nowPlaceStr; + /** + * 소속2 명칭. + */ + private String place2Str; + /** + * 세부소속 명칭. + */ + private String place3Str; + /** + * 소속1 명칭 + 소속2 명칭. + */ + private String place1N2Str; + /** + * 계급. + */ + private String position; + /** + * 계급 명칭. + */ + private String positionStr; + /** + * 현재 계급 명칭. + */ + private String nowPositionStr; + /** + * 직책. + */ + private String duties; + /** + * 직책 명칭. + */ + private String dutiesStr; + /** + * 직별. + */ + private String jobtype; + /** + * 직별 명칭. + */ + private String jobtypeStr; + /** + * 근무형태 (o:외근, i:내근, d:항만분실). + */ + private String inout; + /** + * 근무형태 명칭. + */ + private String inoutStr; + /** + * 사용자 구분 (f:외사, g:일반). + */ + private String usertype = UserType.CM; + /** + * 최종학력. + */ + private String scholarship; + /** + * 최종학력 명칭. + */ + private String scholarshipStr; + /** + * 과거 외사 근무 경력. + */ + private String excareer; + /** + * 과거 외사 근무 경력(년). + */ + private int excareer_y; + /** + * 과거 외사 근무 경력(개월). + */ + private int excareer_m; + /** + * 수사경력. + */ + private String excareer1; + /** + * 수사경력(년). + */ + private int excareer1_y; + /** + * 수사경력(개월). + */ + private int excareer1_m; + /** + * 정보경력. + */ + private String excareer2; + /** + * 정보경력(년). + */ + private int excareer2_y; + /** + * 정보경력(개월). + */ + private int excareer2_m; + /** + * 비고. + */ + private String comment_; + /** + * 사용자 등급. + */ + private int usegrade; + /** + * 로그인 여부. + */ + private String loginchk; + /** + * 사용자 사진파일명. + */ + private String userimg; + /** + * 서명 이미지명. + */ + private String usersign; + private String uiflag; + private String charge; + /** + * 보안경력. + */ + private String excareer3; + /** + * 보안경력(년). + */ + private int excareer3_y; + /** + * 보안경력(개월). + */ + private int excareer3_m; + /** + * 총 외사경력. + */ + private String totalexcareer; + /** + * 총 외사경력(년). + */ + private String totalexcareer_y; + /** + * 총 외사경력(개월). + */ + private String totalexcareer_m; + private String explace; + private String logindate; + /** + * 로그인 실패 횟수. + */ + private int chkcnt = 0; + + private String recentdate; + + /** + * 이미지 객체. + */ + private MultipartFile img; + + /** + * 가입일자 + */ + private String cdate; + /** + * 수정일자 + */ + private String ldate; + /** + * 수정자 + */ + private String writer; + + + /** + * @return the userid + */ + public String getUserid() { + return userid; + } + /** + * @param userid the userid to set + */ + public void setUserid(final String userid) { + this.userid = userid; + this.refreshUseridStr(); + } + /** + * @return the useridStr + */ + public final String getUseridStr() { + return this.useridStr; + } + /** + * @param useridStr the useridStr to set + */ + public final void setUseridStr(final String useridStr) { + this.useridStr = useridStr; + } + + /** + * 사용자 ID 표현 문자열을 갱신한다. + * - 사용자 ID가 주민번호일 경우 "주민번호"로 갱신한다. + */ + private void refreshUseridStr() { + if (this.getUserid().equals(this.getIdno())) { + this.setUseridStr("주민번호"); + } else { + this.setUseridStr(this.getUserid()); + } + } + /** + * @return the passwd + */ + public String getPasswd() { + return passwd; + } + /** + * @param passwd the passwd to set + */ + public void setPasswd(final String passwd) { + this.passwd = passwd; + } + /** + * @return the idno + */ + public String getIdno() { + return idno; + } + /** + * @param idno the idno to set + */ + public void setIdno(final String idno) { + this.idno = idno; + this.refreshUseridStr(); + } + /** + * @return the name + */ + public String getName() { + return name; + } + /** + * @param name the name to set + */ + public void setName(final String name) { + this.name = name; + } + /** + * @return the chnname + */ + public String getChnname() { + return chnname; + } + /** + * @param chnname the chnname to set + */ + public void setChnname(final String chnname) { + this.chnname = chnname; + } + /** + * @return the family + */ + public String getFamily() { + return family; + } + /** + * @param family the family to set + */ + public void setFamily(final String family) { + this.family = family; + } + /** + * @return the address + */ + public String getAddress() { + return address; + } + /** + * @param address the address to set + */ + public void setAddress(final String address) { + this.address = address; + } + /** + * @return the email + */ + public String getEmail() { + return email; + } + /** + * @param email the email to set + */ + public void setEmail(final String email) { + this.email = email; + } + /** + * @return the hphone + */ + public String getHphone() { + return hphone; + } + /** + * @param hphone the hphone to set + */ + public void setHphone(final String hphone) { + this.hphone = hphone; + } + /** + * @return the ophone + */ + public String getOphone() { + return ophone; + } + /** + * @param ophone the ophone to set + */ + public void setOphone(final String ophone) { + this.ophone = ophone; + } + /** + * @return the cphone + */ + public String getCphone() { + return cphone; + } + /** + * @param cphone the cphone to set + */ + public void setCphone(final String cphone) { + this.cphone = cphone; + } + /** + * @return the sdate + */ + public String getSdate() { + return sdate; + } + /** + * @param sdate the sdate to set + */ + public void setSdate(final String sdate) { + if (StringUtils.isNotBlank(sdate)) { + if (sdate.indexOf('.') > -1) { + this.sdate = sdate.replace('.', '-'); + } else { + this.sdate = sdate; + } + } else { + this.sdate = sdate; + } + } + /** + * @return the pdate + */ + public String getPdate() { + return pdate; + } + /** + * @param pdate the pdate to set + */ + public void setPdate(final String pdate) { + if (StringUtils.isNotBlank(pdate)) { + if (pdate.indexOf('.') > -1) { + this.pdate = pdate.replace('.', '-'); + } else { + this.pdate = pdate; + } + } else { + this.pdate = pdate; + } + } + /** + * @return the adate + */ + public String getAdate() { + return adate; + } + /** + * @param adate the adate to set + */ + public void setAdate(final String adate) { + if (StringUtils.isNotBlank(adate)) { + if (adate.indexOf('.') > -1) { + this.adate = adate.replace('.', '-'); + } else { + this.adate = adate; + } + } else { + this.adate = adate; + } + } + /** + * @return the place1 + */ + public String getPlace1() { + return place1; + } + /** + * @param place1 the place1 to set + */ + public void setPlace1(final String place1) { + this.place1 = place1; + } + /** + * @return the place2 + */ + public String getPlace2() { + return place2; + } + /** + * @param place2 the place2 to set + */ + public void setPlace2(final String place2) { + this.place2 = place2; + } + /** + * @return the place3 + */ + public String getPlace3() { + return place3; + } + /** + * @param place3 the place3 to set + */ + public void setPlace3(final String place3) { + this.place3 = place3; + } + /** + * @return the position + */ + public String getPosition() { + return position; + } + /** + * @param position the position to set + */ + public void setPosition(final String position) { + this.position = position; + } + /** + * @return the duties + */ + public String getDuties() { + return duties; + } + /** + * @param duties the duties to set + */ + public void setDuties(final String duties) { + this.duties = duties; + } + /** + * @return the jobtype + */ + public String getJobtype() { + return jobtype; + } + /** + * @param jobtype the jobtype to set + */ + public void setJobtype(final String jobtype) { + this.jobtype = jobtype; + } + /** + * @return the inout + */ + public String getInout() { + return inout; + } + /** + * @param inout the inout to set + */ + public void setInout(final String inout) { + this.inout = inout; + + if("o".equals(inout)){ + setInoutStr("외근"); + }else if("d".equals(inout)){ + setInoutStr("항만분실"); + }else { + setInoutStr("내근"); + } + } + /** + * @return the inoutStr + */ + public final String getInoutStr() { + return inoutStr; + } + /** + * @param inoutStr the inoutStr to set + */ + public final void setInoutStr(final String inoutStr) { + this.inoutStr = inoutStr; + } + /** + * @return the usertype + */ + public String getUsertype() { + return usertype; + } + /** + * @param usertype the usertype to set + */ + public void setUsertype(final String usertype) { + this.usertype = usertype; + } + /** + * @return the scholarship + */ + public String getScholarship() { + return scholarship; + } + /** + * @param scholarship the scholarship to set + */ + public void setScholarship(final String scholarship) { + this.scholarship = scholarship; + } + /** + * @return the excareer + */ + public String getExcareer() { + return excareer; + } + /** + * @param excareer the excareer to set + */ + public void setExcareer(final String excareer) { + this.excareer = excareer; + if (excareer != null && excareer.contains("-")) { + excareer_y = Integer.parseInt(excareer.split("-")[0]); + excareer_m = Integer.parseInt(excareer.split("-")[1]); + } + } + /** + * ym를 기반으로 Excareer를 설정한다. + * + * @param idx Excareer 번호 + */ + private void setExcareerByYM(final int idx) { + switch (idx) { + case 1: + this.excareer1 = String.format("%s-%s", getExcareer1_y(), getExcareer1_m()); + break; + case 2: + this.excareer2 = String.format("%s-%s", getExcareer2_y(), getExcareer2_m()); + break; + case 3: + this.excareer3 = String.format("%s-%s", getExcareer3_y(), getExcareer3_m()); + break; + case 0: + default: + this.excareer = String.format("%s-%s", getExcareer_y(), getExcareer_m()); + break; + } + + } + /** + * @return the excareer_y + */ + public int getExcareer_y() { + return excareer_y; + } + /** + * @param excareer_y the excareer_y to set + */ + public void setExcareer_y(final int excareer_y) { + this.excareer_y = excareer_y; + setExcareerByYM(0); + } + /** + * @return the excareer_m + */ + public int getExcareer_m() { + return excareer_m; + } + /** + * @param excareer_m the excareer_m to set + */ + public void setExcareer_m(final int excareer_m) { + this.excareer_m = excareer_m; + setExcareerByYM(0); + } + /** + * @return the excareer1 + */ + public String getExcareer1() { + return excareer1; + } + /** + * @param excareer1 the excareer1 to set + */ + public void setExcareer1(final String excareer1) { + this.excareer1 = excareer1; + if (excareer1 != null && excareer1.contains("-")) { + excareer1_y = Integer.parseInt(excareer1.split("-")[0]); + excareer1_m = Integer.parseInt(excareer1.split("-")[1]); + } + } + /** + * @return the excareer1_y + */ + public int getExcareer1_y() { + return excareer1_y; + } + /** + * @param excareer1_y the excareer1_y to set + */ + public void setExcareer1_y(final int excareer1_y) { + this.excareer1_y = excareer1_y; + setExcareerByYM(1); + } + /** + * @return the excareer1_m + */ + public int getExcareer1_m() { + return excareer1_m; + } + /** + * @param excareer1_m the excareer1_m to set + */ + public void setExcareer1_m(final int excareer1_m) { + this.excareer1_m = excareer1_m; + setExcareerByYM(1); + } + /** + * @return the excareer2 + */ + public String getExcareer2() { + return excareer2; + } + /** + * @param excareer2 the excareer2 to set + */ + public void setExcareer2(final String excareer2) { + this.excareer2 = excareer2; + } + /** + * @return the excareer2_y + */ + public int getExcareer2_y() { + return excareer2_y; + } + /** + * @param excareer2_y the excareer2_y to set + */ + public void setExcareer2_y(final int excareer2_y) { + this.excareer2_y = excareer2_y; + setExcareerByYM(2); + } + /** + * @return the excareer2_m + */ + public int getExcareer2_m() { + return excareer2_m; + } + /** + * @param excareer2_m the excareer2_m to set + */ + public void setExcareer2_m(final int excareer2_m) { + this.excareer2_m = excareer2_m; + setExcareerByYM(2); + } + /** + * @return the comment_ + */ + public String getComment_() { + return comment_; + } + /** + * @param comment_ the comment_ to set + */ + public void setComment_(final String comment_) { + this.comment_ = comment_; + } + /** + * @return the usegrade + */ + public int getUsegrade() { + return usegrade; + } + /** + * @param usegrade the usegrade to set + */ + public void setUsegrade(final int usegrade) { + this.usegrade = usegrade; + } + /** + * @return the loginchk + */ + public String getLoginchk() { + return loginchk; + } + /** + * @param loginchk the loginchk to set + */ + public void setLoginchk(final String loginchk) { + this.loginchk = loginchk; + } + /** + * @return the userimg + */ + public String getUserimg() { + return userimg; + } + /** + * @param userimg the userimg to set + */ + public void setUserimg(final String userimg) { + this.userimg = userimg; + } + /** + * @return the usersign + */ + public String getUsersign() { + return usersign; + } + /** + * @param usersign the usersign to set + */ + public void setUsersign(final String usersign) { + this.usersign = usersign; + } + /** + * @return the uiflag + */ + public String getUiflag() { + return uiflag; + } + /** + * @param uiflag the uiflag to set + */ + public void setUiflag(final String uiflag) { + this.uiflag = uiflag; + } + /** + * @return the charge + */ + public String getCharge() { + return charge; + } + /** + * @param charge the charge to set + */ + public void setCharge(final String charge) { + this.charge = charge; + } + + /** + * @return the excareer3 + */ + public String getExcareer3() { + return excareer3; + } + /** + * @param excareer3 the excareer3 to set + */ + public void setExcareer3(final String excareer3) { + this.excareer3 = excareer3; + } + /** + * @return the excareer3_y + */ + public int getExcareer3_y() { + return excareer3_y; + } + /** + * @param excareer3_y the excareer3_y to set + */ + public void setExcareer3_y(final int excareer3_y) { + this.excareer3_y = excareer3_y; + setExcareerByYM(3); + } + /** + * @return the excareer3_m + */ + public int getExcareer3_m() { + return excareer3_m; + } + /** + * @param excareer3_m the excareer3_m to set + */ + public void setExcareer3_m(final int excareer3_m) { + this.excareer3_m = excareer3_m; + setExcareerByYM(3); + } + /** + * @return the explace + */ + public String getExplace() { + return explace; + } + /** + * @param explace the explace to set + */ + public void setExplace(final String explace) { + this.explace = explace; + } + /** + * @return the logindate + */ + public String getLogindate() { + return logindate; + } + /** + * @param logindate the logindate to set + */ + public void setLogindate(final String logindate) { + this.logindate = logindate; + } + /** + * @return the chkcnt + */ + public int getChkcnt() { + return chkcnt; + } + /** + * @param chkcnt the chkcnt to set + */ + public void setChkcnt(final int chkcnt) { + this.chkcnt = chkcnt; + } + /** + * 로그인 실패횟수를 증가시킨다. + */ + public void incChkcnt() { + this.chkcnt++; + } + /** + * @return the serialversionuid + */ + public static long getSerialversionuid() { + return serialVersionUID; + } + /** + * @return the place1Str + */ + public String getPlace1Str() { + return place1Str != null ? place1Str : ""; + } + /** + * @param place1Str the place1Str to set + */ + public void setPlace1Str(final String place1Str) { + this.place1Str = place1Str; + + this.setPlace1N2Str(this.getPlace1Str() + " " + this.getPlace2Str()); + } + /** + * @return the place2Str + */ + public String getPlace2Str() { + return place2Str != null ? place2Str : ""; + } + /** + * @param place2Str the place2Str to set + */ + public void setPlace2Str(final String place2Str) { + this.place2Str = place2Str; + + this.setPlace1N2Str(this.getPlace1Str() + " " + this.getPlace2Str()); + } + /** + * @return the place3Str + */ + public String getPlace3Str() { + return place3Str; + } + /** + * @param place3Str the place3Str to set + */ + public void setPlace3Str(final String place3Str) { + this.place3Str = place3Str; + } + /** + * @return the place1N2Str + */ + public final String getPlace1N2Str() { + return this.place1N2Str; + } + /** + * @param place1n2Str the place1N2Str to set + */ + public final void setPlace1N2Str(final String place1n2Str) { + place1N2Str = place1n2Str; + } + /** + * @return the positionStr + */ + public String getPositionStr() { + return positionStr; + } + /** + * @param positionStr the positionStr to set + */ + public void setPositionStr(final String positionStr) { + this.positionStr = positionStr; + } + /** + * @return the dutiesStr + */ + public String getDutiesStr() { + return dutiesStr; + } + /** + * @param dutiesStr the dutiesStr to set + */ + public void setDutiesStr(final String dutiesStr) { + this.dutiesStr = dutiesStr; + } + /** + * @return the jobtypeStr + */ + public String getJobtypeStr() { + return jobtypeStr; + } + /** + * @param jobtypeStr the jobtypeStr to set + */ + public void setJobtypeStr(final String jobtypeStr) { + this.jobtypeStr = jobtypeStr; + } + /** + * @return the scholarshipStr + */ + public String getScholarshipStr() { + return scholarshipStr; + } + /** + * @param scholarshipStr the scholarshipStr to set + */ + public void setScholarshipStr(final String scholarshipStr) { + this.scholarshipStr = scholarshipStr; + } + /** + * @return the rnum + */ + public int getRnum() { + return rnum; + } + /** + * @param rnum the rnum to set + */ + public void setRnum(final int rnum) { + this.rnum = rnum; + } + /** + * @return the totalexcareer + */ + public String getTotalexcareer() { + return totalexcareer; + } + /** + * @param totalexcareer the totalexcareer to set + */ + public void setTotalexcareer(final String totalexcareer) { + this.totalexcareer = totalexcareer; + } + /** + * @return the totalexcareer_y + */ + public String getTotalexcareer_y() { + return totalexcareer_y; + } + /** + * @param totalexcareer_y the totalexcareer_y to set + */ + public void setTotalexcareer_y(final String totalexcareer_y) { + this.totalexcareer_y = totalexcareer_y; + } + /** + * @return the totalexcareer_m + */ + public String getTotalexcareer_m() { + return totalexcareer_m; + } + /** + * @param totalexcareer_m the totalexcareer_m to set + */ + public void setTotalexcareer_m(final String totalexcareer_m) { + this.totalexcareer_m = totalexcareer_m; + } + /** + * @return the npasswd + */ + public String getNpasswd() { + return npasswd; + } + /** + * @param npasswd the npasswd to set + */ + public void setNpasswd(final String npasswd) { + this.npasswd = npasswd; + } + /** + * @return the isHashedPasswd + */ + public final boolean isHashedPasswd() { + return isHashedPasswd; + } + /** + * @param isHashedPasswd the isHashedPasswd to set + */ + public final void setHashedPasswd(final boolean isHashedPasswd) { + this.isHashedPasswd = isHashedPasswd; + } + /** + * @return the recentdate + */ + public String getRecentdate() { + return recentdate; + } + /** + * @param recentdate the recentdate to set + */ + public void setRecentdate(final String recentdate) { + this.recentdate = recentdate; + } + /** + * @return the nowPlace1Str + */ + public String getNowPlaceStr() { + return nowPlaceStr; + } + /** + * @param nowPlaceStr the nowPlace1Str to set + */ + public void setNowPlace1Str(final String nowPlaceStr) { + this.nowPlaceStr = nowPlaceStr; + } + /** + * @return the nowPositionStr + */ + public String getNowPositionStr() { + return nowPositionStr; + } + /** + * @param nowPositionStr the nowPositionStr to set + */ + public void setNowPositionStr(final String nowPositionStr) { + this.nowPositionStr = nowPositionStr; + } + + /** + * @return the img + */ + public final MultipartFile getImg() { + return img; + } + /** + * @param img the img to set + */ + public final void setImg(final MultipartFile img) { + this.img = img; + } + /** + * @return the cdate + */ + public String getCdate() { + return cdate; + } + /** + * @param cdate the cdate to set + */ + public void setCdate(final String cdate) { + this.cdate = cdate; + } + /** + * @return the ldate + */ + public String getLdate() { + return ldate; + } + /** + * @param ldate the ldate to set + */ + public void setLdate(final String ldate) { + this.ldate = ldate; + } + /** + * @return the writer + */ + public String getWriter() { + return writer; + } + /** + * @param writer the writer to set + */ + public void setWriter(final String writer) { + this.writer = writer; + } + /** + * 외사근무기간을 계산하여 반환한다. + * + * @param stDate 근무시작일 + * @param edDate 근무종료일 (없으면 현재가 기준이 된다.) + * @return 외사근무기간 (개월) + * @throws ParseException + * Date 파싱 예외 + */ + protected int calcWorkTerm(final Date stDate, final Date edDate) throws ParseException { + int monthTerm = 0; + + Date std = stDate; + Date edd = edDate; + + if (edd == null) { + edd = new Date(); + } + + if (std != null && edd != null) { + Calendar stc = Calendar.getInstance(); + stc.setTime(std); + Calendar edc = Calendar.getInstance(); + edc.setTime(edd); + + int stYear = stc.get(stc.YEAR); + int stMonth = stc.get(stc.MONTH) + 1; + + int edYear = edc.get(edc.YEAR); + int edMonth = edc.get(edc.MONTH) + 1; + + stMonth += stYear * 12; + edMonth += edYear * 12; + + monthTerm = edMonth - stMonth; + } + + return monthTerm; + } + + /** + * 근무기간(경력)을 표현할 문자열을 반환한다. + * + * @param month + * 근무기간 (개월) + * @return 근무기간(경력) 표현 문자열 (?년 ?개월) + */ + protected String termToStr(final int month) { + String termStr = "0년 0개월"; + if (month > 0) { + termStr = Integer.toString(month / 12) + "년 " + + Integer.toString(month % 12) + "개월"; + } + + return termStr; + } + + /** + * 총 외사경력을 표현할 문자열을 반환한다. + * + * @return 총 외사경력 (?년 ?개월) + * @throws ParseException + * 파싱 예외 처리 + */ + public String getTotExcareerTermStr() throws ParseException { + int term = 0; + String sdateStr = this.getSdate(); + + if (StringUtils.isNotBlank(sdate)) { + Date sdate = null; + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.KOREA); + sdate = sdf.parse(sdateStr); + + term = this.calcWorkTerm(sdate, null); + } + + return termToStr(term); + } +} diff --git a/src/main/java/kcg/faics/member/web/MemberController.java b/src/main/java/kcg/faics/member/web/MemberController.java new file mode 100644 index 0000000..0d655d0 --- /dev/null +++ b/src/main/java/kcg/faics/member/web/MemberController.java @@ -0,0 +1,207 @@ +package kcg.faics.member.web; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import kcg.faics.cmmn.file.FileResponser; +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.member.UserType; +import kcg.faics.member.service.MemberService; +import kcg.faics.member.vo.MemberSearchVO; +import kcg.faics.member.vo.MemberVO; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.UserUtil; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpStatus; +import org.springframework.security.crypto.codec.Base64; +import org.springframework.security.crypto.codec.Utf8; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; +import org.springframework.web.multipart.MultipartFile; + +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +@Controller +@RequestMapping("/member") +public class MemberController { + + @Resource(name = "memberService") + MemberService memberService; + + @Resource(name = "propertiesService") + private EgovPropertyService propertiesService; + + /** + * 코드관련 정보 인터페이스. + */ + @Resource(name = "codeService") + private CodeService codeService; + + @ResponseBody + @RequestMapping(value = "/faIdCheck.json") + public HashMap checkMemberId(final MemberVO memberVO) throws Exception { + HashMap result = new HashMap(); + memberVO.setUsertype(UserType.FA); + MemberVO vo = memberService.select(memberVO); + result.put("data", (vo != null) ? 1 : 0); + return result; + } + + @ResponseBody + @RequestMapping(value = "/changePw.json") + public HashMap changePw(final MemberVO memberVO) throws Exception { + if (StringUtils.isBlank(memberVO.getUserid())) { + LoginUserVO user = UserUtil.getMemberInfo(); + memberVO.setUserid(user.getUserid()); + memberVO.setUsertype((user.getType() == 1) ? UserType.FA : UserType.CM); + } + + return memberService.updatePassword(memberVO); + } + + public static final String FILE_PATH_KEYWORD = "Member.fileStorePath"; + + @RequestMapping(value = "/download.do") + public void fileResponse(final String filenm, final HttpServletRequest request, final HttpServletResponse response) throws Exception { + + if (StringUtils.isNotBlank(filenm)) { + String fileFullPath = propertiesService.getString(FILE_PATH_KEYWORD) + filenm; + File file = new File(fileFullPath); + if (file.exists()) { + FileResponser.setResponse(file, filenm, request, response); + BufferedInputStream in = null; + try { + in = new BufferedInputStream(new FileInputStream(file)); + FileCopyUtils.copy(in, response.getOutputStream()); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (in != null) { + try { + in.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + } else { + response.setStatus(HttpStatus.NOT_FOUND.value()); + throw new Exception(); + } + } + + /** + * 외사경찰 목록(no paging)읇 반환한다. + * + * @param searchVO + * 검색정보 객체 + * @return 외사경찰 목록(json) + * @throws Exception + * 기본 예외 처리 + */ + @ResponseBody + @RequestMapping(value = "/faListAll.json") + public List getFaListAll(final MemberSearchVO searchVO) throws Exception { + List faList = memberService.getFaListAll(searchVO); + return faList; + } + + /** + * 일반경찰을 삭제한다. + * + * @param vo 사용자 VO + * @return (json) {result: 1 - 성공, 0 - 실패} + * @throws Exception 기본 예외 처리 + */ + @ResponseBody + @RequestMapping(value = "/deleteCmmn.json") + public HashMap deleteCmmnMember(final MemberVO vo) throws Exception { + if (UserUtil.isAdmin()) { + return memberService.delete(vo, UserType.CM); + } + return null; + } + + /** + * 회원정보 화면을 반환한다. + * + * @param memberVO 멤버 객체 + * @param model 모델 객체 + * @return 회원정보 화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/cmmnView.do") + public String infoView(final MemberVO memberVO, final Model model) throws Exception { + memberVO.setUserid(UserUtil.getMemberInfo().getUserid()); + model.addAttribute("memberVO", memberService.select(memberVO)); + return "/member/view.tiles"; + } + + /** + * 회원정보 수정 화면을 반환한다. + * + * @param memberVO 멤버 객체 + * @param model 모델 객체 + * @return 회원정보 수정 화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/cmmnUpdateView.do") + public String updateView(final MemberVO memberVO, final Model model) throws Exception { + + if (StringUtils.isBlank(memberVO.getUserid())) { + return infoView(memberVO, model); + } + model.addAttribute("memberVO", memberService.select(memberVO)); + + model.addAttribute("place1List", codeService.getPlace1List(false)); + model.addAttribute("positionList", codeService.getPositionList()); + return "/member/update.tiles"; + } + + /** + * 회원정보 수정한다. + * + * @param memberVO 멤버 객체 + * @param model 모델 객체 + * @param status SessionStatus 객체 + * @return 회원정보 화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/cmmnUpdate.do") + public String update(final MemberVO memberVO, final Model model, final SessionStatus status) throws Exception { + /* 인증된 사용자인지 확인 */ + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (isAuthenticated) { + try { + + int result = memberService.updateCmmnMemberInfo(memberVO); + + status.setComplete(); + + if (result == 1) { + return "redirect:/member/cmmnView.do?userid=" + memberVO.getUserid(); + } + + } catch (Exception e) { + e.printStackTrace(); + } + } + + return "error/bizError"; + } +} diff --git a/src/main/java/kcg/faics/report/service/ReportCategoryService.java b/src/main/java/kcg/faics/report/service/ReportCategoryService.java new file mode 100644 index 0000000..b748757 --- /dev/null +++ b/src/main/java/kcg/faics/report/service/ReportCategoryService.java @@ -0,0 +1,53 @@ +package kcg.faics.report.service; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.report.vo.ReportCategoryVO; + +/** + * 견문 분류 관련 인터페이스 + * + * @author 하영지 + * + */ +public interface ReportCategoryService { + /** + * 견문 분류를 구분에 따라 반환한다. + * + * @param type 구분 + * @return 견문분류객체 + * @throws Exception 기본예외처리 + */ + List select(int type) throws Exception; + List useSelect(int type) throws Exception; + + /** + * 견문 분류1 목록을 반환한다. + * @return 견문 분류1 목록 + * @throws Exception 기본예외처리 + */ + HashMap getCategory1() throws Exception; + HashMap getUseCategory1() throws Exception; + /** + * 견문 분류2 목록을 반환한다. + * @return 견문 분류2 목록 + * @throws Exception 기본예외처리 + */ + HashMap getCategory2() throws Exception; + HashMap getUseCategory2() throws Exception; + /** + * 견문 분류3 목록을 반환한다. + * @return 견문 분류3 목록 + * @throws Exception 기본예외처리 + */ + HashMap getCategory3() throws Exception; + HashMap getUseCategory3() throws Exception; + /** + * 견문 분류4 목록을 반환한다. + * @return 견문 분류4 목록 + * @throws Exception 기본예외처리 + */ + HashMap getCategory4() throws Exception; + HashMap getUseCategory4() throws Exception; +} diff --git a/src/main/java/kcg/faics/report/service/ReportFileService.java b/src/main/java/kcg/faics/report/service/ReportFileService.java new file mode 100644 index 0000000..3ca020e --- /dev/null +++ b/src/main/java/kcg/faics/report/service/ReportFileService.java @@ -0,0 +1,51 @@ +package kcg.faics.report.service; + +import java.util.Map; + +import kcg.faics.cmmn.bbs.BaseFileService; +import kcg.faics.report.vo.ReportFileVO; +import kcg.faics.report.vo.ReportVO; + +import org.springframework.web.multipart.MultipartFile; + +/** + * 견문 파일 인터페이스이다. + * @author 하영지 + * @since 2016. 10. 18. + */ +public interface ReportFileService { + + /** + * property 파일에서 읽은 저장 경로 키워드. + */ + static final String FILE_PATH_KEYWORD = "Report.fileStorePath"; + + /** + * 견문 파일 시퀀스를 반환한다. + * + * @return 견문 파일 시퀀스 + * @throws Exception 기본예외처리 + */ + int selectFileSeq() throws Exception; + + /** + * 첨부파일정보 입력 및 업로드 + * + * @param dataVO 견문객체 + * @param fileMap 파일맵 + * @return 성공:1, 실패:0 + * @throws Exception 기본예외처리 + */ + int insertAndSaveFiles(final ReportVO dataVO, final Map fileMap) throws Exception; + + /** + * 첨부파일 정보를 삭제하고 디렉토리내의 파일도 삭제한다. + * + * @param dataVO 견문 객체 + * @param deleteFiles 삭제할 첨부파일 순번 + * @return 성공:1, 실패:0 + * @throws Exception 기본예외처리 + */ + int deleteAndRemoveFiles(final ReportVO dataVO, String[] deleteFiles) throws Exception; + +} diff --git a/src/main/java/kcg/faics/report/service/ReportJudgeService.java b/src/main/java/kcg/faics/report/service/ReportJudgeService.java new file mode 100644 index 0000000..6049628 --- /dev/null +++ b/src/main/java/kcg/faics/report/service/ReportJudgeService.java @@ -0,0 +1,179 @@ +package kcg.faics.report.service; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.cmmn.vo.CodeVO; +import kcg.faics.member.vo.MemberVO; +import kcg.faics.report.vo.ReportApproveVO; +import kcg.faics.report.vo.ReportJudgeVO; +import kcg.faics.report.vo.ReportSearchVO; +import kcg.faics.report.vo.ReportVO; + +/** + * 견문 평가 인터페이스 + * + * @author 하영지 + * @since 2016. 10. 6. + */ +public interface ReportJudgeService { + + /** + * 견문 평가 종류를 검색한다. + * + * @return List + * @throws Exception + */ + List selectJudgeCode() throws Exception; + + /** + * 견문 평가 정보를 반환한다. + * + * @param juseq 견문 평가 시퀀스 + * @return 견문 평가 객체 + * @throws Exception 기본예외처리 + */ + ReportJudgeVO selectOne(int juseq) throws Exception; + + /** + * 평가코드명을 반환한다. + * + * @param judgeCode 평가코드 + * @return 평가명 + * @throws Exception 기본예외처리 + */ + String getJudgeStr(int judgeCode) throws Exception; + + /** + * 평가 코드를 맵형식으로 반환한다. + * @return (평가코드, 평가명) + */ + HashMap judgeList(); + + /** + * 견문 평가를 입력한다. + * @param reportJudgeVO 견문 평가 객체 + * @return 성공 : 1 + * @throws Exception 기본 예외 처리 + */ + int insert(ReportJudgeVO reportJudgeVO) throws Exception; + + /** + * 견문 평가를 수정한다. + * @param reportJudgeVO 견문 평가 객체 + * @return 성공 : 1 + * @throws Exception 기본 예외 처리 + */ + int update(ReportJudgeVO reportJudgeVO) throws Exception; + + + /** + * 견문 결재 정보를 반환한다. + * @return 견문 결재 정보 + * @throws Exception 기본예외처리 + */ + MemberVO selectApprove() throws Exception; + + /** + * 견문을 결재한다. + * + * @param reportVO 견문 객체 + * @return 성공:1 + * @throws Exception 기본예외처리 + */ + HashMap approve(ReportVO reportVO) throws Exception; + + /** + * 견문 처리 목록 목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 내 실적 조회 목록 + */ + List selectWaitList(ReportSearchVO reportSearchVO); + /** + * 견문 처리 목록 전체 목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 내 실적 조회 전체 목록 + */ + List selectWaitListAll(ReportSearchVO reportSearchVO); + /** + * 견문 처리 목록 갯수를 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 내 실적 조회 목록 갯수 + */ + int selectWaitListCnt(ReportSearchVO reportSearchVO); + + /** + * 견문 처리 목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 견문 처리 목록 + * @throws Exception 기본예외처리 + */ + List selectApproveList(ReportSearchVO reportSearchVO) throws Exception; + + /** + * 견문 처리 목록 갯수를 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 견문 처리 목록 갯수 + * @throws Exception 기본예외처리 + */ + int selectApproveListCnt(final ReportSearchVO reportSearchVO) throws Exception; + + /** + * 견문 처리 전체 목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 견문 처리 목록 + * @throws Exception 기본예외처리 + */ + List selectApproveListAll(ReportSearchVO reportSearchVO) throws Exception; + + /** + * 내 실적 조회 목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 견문 처리 목록 + * @throws Exception 기본예외처리 + */ + List selectMyList(ReportSearchVO reportSearchVO) throws Exception; + + /** + * 내 실적 조회 목록 갯수를 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 견문 처리 목록 갯수 + * @throws Exception 기본예외처리 + */ + int selectMyListCnt(final ReportSearchVO reportSearchVO) throws Exception; + + /** + * 내 실적 조회 목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 견문 처리 목록 + * @throws Exception 기본예외처리 + */ + List selectMyListAll(ReportSearchVO reportSearchVO) throws Exception; + + /** + * 분야별 통계를 조회한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 분야별통계 + * @throws Exception 기본예외처리 + */ + List> statsCategory(ReportSearchVO reportSearchVO) throws Exception; + + /** + * 평가별 통계를 조회한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 평가별통계 + * @throws Exception 기본예외처리 + */ + List> statsJudge(ReportSearchVO reportSearchVO) throws Exception; +} diff --git a/src/main/java/kcg/faics/report/service/ReportService.java b/src/main/java/kcg/faics/report/service/ReportService.java new file mode 100644 index 0000000..41f89de --- /dev/null +++ b/src/main/java/kcg/faics/report/service/ReportService.java @@ -0,0 +1,143 @@ +package kcg.faics.report.service; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.cmmn.bbs.BaseBbsService; +import kcg.faics.report.vo.ReportGoalVO; +import kcg.faics.report.vo.ReportSearchVO; +import kcg.faics.report.vo.ReportVO; + +/** + * 견문 인터페이스 + * + * @author 하영지 + * + */ +public interface ReportService extends BaseBbsService { + + /** + * 견문의 새 소속번호를 반환한다. + * + * @param reportVO 견문정보 + * @return 소속번호 + * @throws Exception 기본예외처리 + */ + int selectPlaceNum(ReportVO reportVO); + + /** + * 견문의 임시저장목록을 반환한다. + * + * @param reportSearchVO 견문 검색조건 vo + * @return 견문 임시저장목록 + */ + List selectSaveList(ReportSearchVO reportSearchVO); + + /** + * 견문 임시저장목록 결과 갯수를 반환한다. + * + * @param reportSearchVO 견문 검색조건 vo + * @return 견문 임시저장목록 개숫 + */ + int selectSaveListCnt(ReportSearchVO reportSearchVO); + + /** + * 선택된 견문을 삭제한다. + * + * @param selectedSeq 선택된 견문 시퀀스 리스트 + * @return 성공-1,실패-0 + * @throws Exception 기본 예외 처리 + */ + int deleteSelected(String[] selectedSeq) throws Exception; + + /** + * @return 자동 삭제될 견문들의 시퀀스를 ,로 연결한 문자열로 반환한다. + */ + String selectAutoRemoveList(); + + /** + * 견문제출현황 목록을 반환한다. + * + * @param reportSearchVO 견문 검색 조건 객체 + * @return 견문제출현황 목록 + * @throws Exception 기본예외처리 + */ + List selectPresentList(ReportSearchVO reportSearchVO) throws Exception; + /** + * 견문제출현황 목록 갯수를 반환한다. + * + * @param reportSearchVO 견문 검색 조건 객체 + * @return 견문제출현황 목록갯수 + * @throws Exception 기본예외처리 + */ + int selectPresentListCnt(ReportSearchVO reportSearchVO) throws Exception; + /** + * 견문제출현황 전체목록을 반환한다. + * + * @param reportSearchVO 견문 검색 조건 객체 + * @return 견문제출현황 전체목록 + * @throws Exception 기본예외처리 + */ + List selectPresentListAll(ReportSearchVO reportSearchVO) throws Exception; + + /** + * 평가기록부를 반환한다. + * + * @param reportSearchVO 견문 검색 조건 객체 + * @return 평가기록부 목록 + * @throws Exception 기본예외처리 + */ + List selectRecordList(ReportSearchVO reportSearchVO) throws Exception; + /** + * 평가기록부 목록 갯수를 반환한다. + * + * @param reportSearchVO 견문 검색 조건 객체 + * @return 평가기록부 목록갯수 + * @throws Exception 기본예외처리 + */ + int selectRecordListCnt(ReportSearchVO reportSearchVO) throws Exception; + /** + * 평가기록부 전체목록을 반환한다. + * + * @param reportSearchVO 견문 검색 조건 객체 + * @return 평가기록부 전체목록 + * @throws Exception 기본예외처리 + */ + List selectRecordListAll(ReportSearchVO reportSearchVO) throws Exception; + + /** + * 목표 관리 목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 목표 관리 + * @throws Exception 기본예외처리 + */ + List selectGoalList(ReportSearchVO reportSearchVO) throws Exception; + + /** + * 목표를 입력하고 수정한다. + * + * @param reportGoalVO 입력 및 수정 작업을 할 목표 객체 목록 + * @return 성공:1, 실패:0 + * @throws Exception 기본예외처리 + */ + int updateGoal(ReportGoalVO reportGoalVO) throws Exception; + + /** + * 사용자별 목표 통계를 반환한다. + * + * @param reportSearchVO 견문 검색객체 + * @return 목표 통계 + * @throws Exception 기본예외처리 + */ + List> getGoalStats(final ReportSearchVO reportSearchVO) throws Exception; + + /** + * 소속별 목표 통계를 반환한다. + * + * @param reportSearchVO 견문 검색객체 + * @return 목표 통계 + * @throws Exception 기본예외처리 + */ + List> getGoalStatsPlace(final ReportSearchVO reportSearchVO) throws Exception; +} diff --git a/src/main/java/kcg/faics/report/service/impl/ReportCategoryMapper.java b/src/main/java/kcg/faics/report/service/impl/ReportCategoryMapper.java new file mode 100644 index 0000000..a277e40 --- /dev/null +++ b/src/main/java/kcg/faics/report/service/impl/ReportCategoryMapper.java @@ -0,0 +1,36 @@ +package kcg.faics.report.service.impl; + +import java.util.List; + +import kcg.faics.report.vo.ReportCategoryVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +/** + * 견문 분류 관련 Mapper 클래스. + * + * @author 하영지 + * + */ +@Repository("reportCategoryMapper") +public class ReportCategoryMapper extends EgovAbstractMapper { + + /** + * 견문분류 목록을 반환한다. + * + * @param type 견문분류 구분(1,2,3,4) + * @return 견문분류목록 + * @throws Exception 기본예외처리 + */ + public List select(final int type) throws Exception { + return selectList("Report.selectCategory", type); + } + + public List useSelect(final int type) throws Exception { + return selectList("Report.selectUseCategory", type); + } + + +} diff --git a/src/main/java/kcg/faics/report/service/impl/ReportCategoryServiceImpl.java b/src/main/java/kcg/faics/report/service/impl/ReportCategoryServiceImpl.java new file mode 100644 index 0000000..8567501 --- /dev/null +++ b/src/main/java/kcg/faics/report/service/impl/ReportCategoryServiceImpl.java @@ -0,0 +1,105 @@ +package kcg.faics.report.service.impl; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import kcg.faics.report.service.ReportCategoryService; +import kcg.faics.report.vo.ReportCategoryVO; + +/** + * 견문 분류 관련 비즈니스로직 + * @author 하영지 + * + */ +@Service("reportCategoryService") +public class ReportCategoryServiceImpl implements ReportCategoryService { + + /** + * 견문 분류 관련 Mapper 클래스. + */ + @Resource(name = "reportCategoryMapper") + private ReportCategoryMapper reportCategoryMapper; + + + + + @Override + public List select(final int type) throws Exception { + try { + return reportCategoryMapper.select(type); + } catch (Exception e) { + return null; + } + } + + @Override + public List useSelect(final int type) throws Exception { + try { + return reportCategoryMapper.useSelect(type); + } catch (Exception e) { + return null; + } + } + + + + @Override + public HashMap getCategory1() throws Exception { + return convertMap(select(1)); + } + + @Override + public HashMap getCategory2() throws Exception { + return convertMap(select(2)); + } + + @Override + public HashMap getCategory3() throws Exception { + return convertMap(select(3)); + } + + @Override + public HashMap getCategory4() throws Exception { + return convertMap(select(4)); + } + + + @Override + public HashMap getUseCategory1() throws Exception { + return convertMap(useSelect(1)); + } + + @Override + public HashMap getUseCategory2() throws Exception { + return convertMap(useSelect(2)); + } + + @Override + public HashMap getUseCategory3() throws Exception { + return convertMap(useSelect(3)); + } + + @Override + public HashMap getUseCategory4() throws Exception { + return convertMap(useSelect(4)); + } + + /** + * 맵으로 변환 + * @param list 분류목록 + * @return ("코드명", "코드") 형식으로 리턴 + */ + private HashMap convertMap(final List list) { + HashMap map = new HashMap(); + for (ReportCategoryVO item : list) { + map.put(item.getCode(), item.getName()); + } + return map; + } + +} diff --git a/src/main/java/kcg/faics/report/service/impl/ReportFileMapper.java b/src/main/java/kcg/faics/report/service/impl/ReportFileMapper.java new file mode 100644 index 0000000..7fcb48c --- /dev/null +++ b/src/main/java/kcg/faics/report/service/impl/ReportFileMapper.java @@ -0,0 +1,69 @@ +package kcg.faics.report.service.impl; + +import java.util.HashMap; + +import kcg.faics.report.vo.ReportFileVO; +import kcg.faics.report.vo.ReportVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +/** + * 견문 관련 파일 Mapper 클래스. + * + * @author 하영지 + * + */ +@Repository("reportFileMapper") +public class ReportFileMapper extends EgovAbstractMapper { + + /** + * 파일 정보를 입력한다. + * + * @param fileVO 파일 VO + * @return 1-성공, 0-실패 + */ + public int insertFile(final ReportVO fileVO) { + return update("ReportFile.insert", fileVO); + } + + /** + * 시퀀스에 업로드된 파일 갯수를 갱신한다. + * + * @param map 업로드된 파일 갯수와 시퀀스를 담고있는 맵 + * @return 1-성공, 0-실패 + */ + public int updateFileSeq(final HashMap map) { + return update("ReportFile.updateFileSeq", map); + } + + /** + * 파일 정보를 갱신한다. + * + * @param fileVO 파일 VO + * @return 1-성공, 0-실패 + */ + public int updateFile(final ReportVO fileVO) { + return update("ReportFile.insert", fileVO); + } + + /** + * 파일을 저장할 시퀀스를 반환한다. + * @return 파일 시퀀스 + */ + public ReportFileVO selectFileSeq() { + return selectOne("ReportFile.selectFileSeq"); + } + + /** + * 견문 파일 저장 시퀀스를 증가시킨다. + * @return 시퀀스 + */ + public int insertFileSeq() { + ReportFileVO reportFileVO = new ReportFileVO(); + int result = insert("ReportFile.insertFileSeq", reportFileVO); + return reportFileVO.getFsSeq(); + } + +} diff --git a/src/main/java/kcg/faics/report/service/impl/ReportFileServiceImpl.java b/src/main/java/kcg/faics/report/service/impl/ReportFileServiceImpl.java new file mode 100644 index 0000000..7f92cef --- /dev/null +++ b/src/main/java/kcg/faics/report/service/impl/ReportFileServiceImpl.java @@ -0,0 +1,188 @@ +package kcg.faics.report.service.impl; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import kcg.faics.cmmn.egov.file.EgovFileMngUtil; +import kcg.faics.cmmn.egov.vo.FileVO; +import kcg.faics.report.service.ReportFileService; +import kcg.faics.report.service.ReportService; +import kcg.faics.report.vo.ReportFileVO; +import kcg.faics.report.vo.ReportVO; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +@Service("reportFileService") +public class ReportFileServiceImpl extends EgovAbstractServiceImpl implements ReportFileService { + + /** + * 견문 파일 시퀀스당 저장될 견문의 최대 갯수 + */ + private static final int SEQCNTLIMIT = 1000; + + /** + * 견문 관련 파일 Mapper 클래스. + */ + @Resource(name = "reportFileMapper") + private ReportFileMapper reportFileMapper; + + /** + * 견문 관련 인터페이스. + */ + @Resource(name = "reportService") + private ReportService reportService; + + /** + * 전자정부프레임워크에서 제공되는 파일 업로드 처리 관련 Utility. + **/ + @Resource(name = "EgovFileMngUtil") + private EgovFileMngUtil fileUtil; + + @Override + public int insertAndSaveFiles(final ReportVO dataVO, final Map fileMap) throws Exception { + int result = 1; + ReportVO originVO = reportService.select(dataVO); + List deleteFiles = new ArrayList(); + + if (fileMap != null) { + + if (dataVO.getInFsseq() <= 0) { + dataVO.setInFsseq(selectFileSeq()); + } + if (dataVO.getInFsseq() <= 0) { + throw new Exception(); + } + + List files = fileUtil.parseFileInf(fileMap, null, 0, "", FILE_PATH_KEYWORD, String.valueOf(dataVO.getInFsseq())); + + for (FileVO file : files) { + if ("fileObj1".equalsIgnoreCase(file.getFileSn())) { + dataVO.setInFile1(file.getStreFileNm()); + + if (StringUtils.isNotBlank(originVO.getInFile1())) { + deleteFiles.add("1"); + } + } else if ("fileObj2".equalsIgnoreCase(file.getFileSn())) { + dataVO.setInFile2(file.getStreFileNm()); + + if (StringUtils.isNotBlank(originVO.getInFile2())) { + deleteFiles.add("2"); + } + } else if ("fileObj3".equalsIgnoreCase(file.getFileSn())) { + dataVO.setInFile3(file.getStreFileNm()); + + if (StringUtils.isNotBlank(originVO.getInFile3())) { + deleteFiles.add("3"); + } + } else if ("fileObj4".equalsIgnoreCase(file.getFileSn())) { + dataVO.setInFile4(file.getStreFileNm()); + + if (StringUtils.isNotBlank(originVO.getInFile4())) { + deleteFiles.add("4"); + } + } else if ("fileObj5".equalsIgnoreCase(file.getFileSn())) { + dataVO.setInFile5(file.getStreFileNm()); + + if (StringUtils.isNotBlank(originVO.getInFile5())) { + deleteFiles.add("5"); + } + } + } + if (deleteFiles.size() > 0) { + result = deleteAndRemoveFiles(dataVO, deleteFiles.toArray(new String[deleteFiles.size()])); + } + + result = reportFileMapper.insertFile(dataVO); + if (result != 0) { + HashMap map = new HashMap(); + map.put("cnt", files.size()); + map.put("fsseq", dataVO.getInFsseq()); + result = reportFileMapper.updateFileSeq(map); + } + + if (result == 0) { + throw new Exception(); + } + } + return result; + } + + @Override + public int deleteAndRemoveFiles(final ReportVO dataVO, final String[] deleteFiles) throws Exception { + ReportVO reportVO = reportService.select(dataVO); + String fsSeq = String.valueOf(dataVO.getInFsseq()); + int deletedCnt = 0; + + if (dataVO.getInFsseq() <= 0) { + return 0; + } + + for (String idx : deleteFiles) { + if (idx.equals("1")) { + reportVO.setInFile1(""); + fileUtil.deleteFile(dataVO.getInFile1(), FILE_PATH_KEYWORD, fsSeq); + deletedCnt++; + } + if (idx.equals("2")) { + reportVO.setInFile2(""); + fileUtil.deleteFile(dataVO.getInFile2(), FILE_PATH_KEYWORD, fsSeq); + deletedCnt++; + } + if (idx.equals("3")) { + reportVO.setInFile3(""); + fileUtil.deleteFile(dataVO.getInFile3(), FILE_PATH_KEYWORD, fsSeq); + deletedCnt++; + } + if (idx.equals("4")) { + reportVO.setInFile4(""); + fileUtil.deleteFile(dataVO.getInFile4(), FILE_PATH_KEYWORD, fsSeq); + deletedCnt++; + } + if (idx.equals("5")) { + reportVO.setInFile5(""); + fileUtil.deleteFile(dataVO.getInFile5(), FILE_PATH_KEYWORD, fsSeq); + deletedCnt++; + } + } + + int result = reportFileMapper.updateFile(reportVO); + + if (result > 0) { + HashMap map = new HashMap(); + map.put("cnt", (-deletedCnt)); + map.put("fsseq", fsSeq); + result = reportFileMapper.updateFileSeq(map); + } + + return result; + } + + @Override + public int selectFileSeq() throws Exception { + int result = 0; + + ReportFileVO rptFileVO = reportFileMapper.selectFileSeq(); + int seq = rptFileVO.getFsSeq(); + int cnt = rptFileVO.getFsFileCount(); + + if (seq == 0 || cnt > SEQCNTLIMIT) { + seq = reportFileMapper.insertFileSeq(); + } + + if (seq > 0) { + result = seq; + } else { + throw new Exception(); + } + return result; + } + +} diff --git a/src/main/java/kcg/faics/report/service/impl/ReportJudgeMapper.java b/src/main/java/kcg/faics/report/service/impl/ReportJudgeMapper.java new file mode 100644 index 0000000..cf77dcf --- /dev/null +++ b/src/main/java/kcg/faics/report/service/impl/ReportJudgeMapper.java @@ -0,0 +1,211 @@ +package kcg.faics.report.service.impl; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.cmmn.vo.CodeVO; +import kcg.faics.member.vo.MemberVO; +import kcg.faics.report.vo.ReportApproveVO; +import kcg.faics.report.vo.ReportJudgeVO; +import kcg.faics.report.vo.ReportSearchVO; +import kcg.faics.report.vo.ReportVO; +import kcg.faics.sec.LoginUserVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +/** + * 견문 평가를 관리하는 맵퍼 + * @author 하영지 + * @since 2016. 10. 6. + */ +@Repository("reportJudgeMapper") +public class ReportJudgeMapper extends EgovAbstractMapper { + + /** + * 평가 종류를 반환한다. + * @return List + * @throws Exception 기본예외처리 + */ + public List selectJudgeCode() throws Exception { + return selectList("ReportJudge.selectJudgeCode"); + } + + /** + * 평가 정보를 반환한다. + * + * @param juseq 견문 평가 객체 + * @return 평가 + * @throws Exception 기본예외처리 + */ + public ReportJudgeVO selectOne(final int juseq) throws Exception { + return selectOne("ReportJudge.selectOne", juseq); + } + + /** + * 평가명을 반환한다. + * + * @param judgeCode 평가코드 + * @return 평가명 + * @throws Exception 기본예외처리 + */ + public String getJudgeName(final int judgeCode) throws Exception { + return selectOne("ReportJudge.getJudgeName", judgeCode); + } + + /** + * 견문 결재 정보를 반환한다. + * + * @param loginUserVO 접속한 사용자 객체 + * @return 결문 결재 정보 + */ + public MemberVO selectApprove(final LoginUserVO loginUserVO) { + return selectOne("ReportJudge.selectApprove", loginUserVO); + } + + /** + * 견문 평가 입력 + * @param reportJudgeVO 견문 평가 객체 + * @return 성공:1 + * @throws Exception 기본예외처리 + */ + public int insert(final ReportJudgeVO reportJudgeVO) throws Exception { + int result = 0; + try { + result = insert("ReportJudge.insert", reportJudgeVO); + } catch (Exception e) { + e.printStackTrace(); + } + return reportJudgeVO.getJuInseq(); + } + + /** + * 견문 평가 수정 + * @param reportJudgeVO 견문 평가 객체 + * @return 성공:1 + * @throws Exception 기본예외처리 + */ + public int update(final ReportJudgeVO reportJudgeVO) throws Exception { + return update("ReportJudge.update", reportJudgeVO); + } + + /** + * 견문의 결재 대기 목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 견문 결재 대기 목록 + */ + public List selectWaitList(final ReportSearchVO reportSearchVO) { + return selectList("Report.selectWaitList", reportSearchVO); + } + + /** + * 견문의 결재 대기 전체 목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 견문 결재 대기 전체 목록 + */ + public List selectWaitListAll(final ReportSearchVO reportSearchVO) { + return selectList("Report.selectWaitListAll", reportSearchVO); + } + + /** + * 견문의 결재 대기 목록 전체 갯수를 반환한다. + * + * @param reportSearchVO 견문 검색조건 vo + * @return 견문 임시저장목록 결과 갯수 + */ + public int selectWaitListCnt(final ReportSearchVO reportSearchVO) { + return selectOne("Report.selectWaitListCnt", reportSearchVO); + } + + /** + * 견문 처리 목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 견문 처리 목록 + * @throws Exception 기본 예외 처리 + */ + public List selectApproveList(final ReportSearchVO reportSearchVO) throws Exception { + return selectList("Report.selectAprList", reportSearchVO); + } + + /** + * 견문 처리 목록 갯수를 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 견문 처리 목록 갯수 + * @throws Exception 기본 예외 처리 + */ + public int selectApproveListCnt(final ReportSearchVO reportSearchVO) throws Exception { + return selectOne("Report.selectAprListCnt", reportSearchVO); + } + + /** + * 견문 처리 전체 목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 견문 처리 전체 목록 + * @throws Exception 기본 예외 처리 + */ + public List selectApproveListAll(final ReportSearchVO reportSearchVO) throws Exception { + return selectList("Report.selectAprListAll", reportSearchVO); + } + + /** + * 내 실적 조회 목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 내 실적 조회 목록 + * @throws Exception 기본 예외 처리 + */ + public List selectMyList(final ReportSearchVO reportSearchVO) throws Exception { + return selectList("Report.selectMyList", reportSearchVO); + } + + /** + * 내 실적 조회 목록 갯수를 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 내 실적 조회 목록 갯수 + * @throws Exception 기본 예외 처리 + */ + public int selectMyListCnt(final ReportSearchVO reportSearchVO) throws Exception { + return selectOne("Report.selectMyListCnt", reportSearchVO); + } + + /** + * 내 실적 조회 전체 목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 내 실적 조회 전체 목록 + * @throws Exception 기본 예외 처리 + */ + public List selectMyListAll(final ReportSearchVO reportSearchVO) throws Exception { + return selectList("Report.selectMyListAll", reportSearchVO); + } + + /** + * 분야별 통계를 조회한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 분야별통계 + * @throws Exception 기본 예외 처리 + */ + public List> statsCategory(final ReportSearchVO reportSearchVO) throws Exception { + return selectList("ReportJudge.statsCategory", reportSearchVO); + } + + /** + * 평가별 통계를 조회한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 평가별통계 + * @throws Exception 기본 예외 처리 + */ + public List> statsJudge(final ReportSearchVO reportSearchVO) throws Exception { + return selectList("ReportJudge.statsJudge", reportSearchVO); + } + +} diff --git a/src/main/java/kcg/faics/report/service/impl/ReportJudgeServiceImpl.java b/src/main/java/kcg/faics/report/service/impl/ReportJudgeServiceImpl.java new file mode 100644 index 0000000..bef142a --- /dev/null +++ b/src/main/java/kcg/faics/report/service/impl/ReportJudgeServiceImpl.java @@ -0,0 +1,557 @@ +package kcg.faics.report.service.impl; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +import javax.annotation.Resource; + +import kcg.faics.cmmn.vo.CodeVO; +import kcg.faics.member.Duty; +import kcg.faics.member.vo.MemberVO; +import kcg.faics.report.service.ReportCategoryService; +import kcg.faics.report.service.ReportJudgeService; +import kcg.faics.report.service.ReportService; +import kcg.faics.report.vo.ReportJudgeVO; +import kcg.faics.report.vo.ReportSearchVO; +import kcg.faics.report.vo.ReportVO; +import kcg.faics.report.web.ReportCommon; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.UserUtil; + +import org.apache.commons.lang.StringUtils; +import org.springframework.stereotype.Service; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +/** + * 견문 평가 서비스 + * + * @author 하영지 + * @since 2016. 10. 6. + */ +@Service("reportJudgeService") +public class ReportJudgeServiceImpl extends EgovAbstractServiceImpl implements ReportJudgeService { + + /** + * 견문 분류 인터페이스 + */ + @Resource(name = "reportCategoryService") + private ReportCategoryService cateService; + + /** + * 견문 관련 인터페이스 + */ + @Resource(name = "reportService") + private ReportService reportService; + + /** + * 견문 평가 맵퍼 + */ + @Resource(name = "reportJudgeMapper") + private ReportJudgeMapper reportJudgeMapper; + + /** + * 견문 평가 종류를 검색한다. + */ + @Override + public List selectJudgeCode() throws Exception { + return reportJudgeMapper.selectJudgeCode(); + } + + /** + * 견문 평가 정보를 반환한다. + */ + @Override + public ReportJudgeVO selectOne(final int juseq) throws Exception { + return reportJudgeMapper.selectOne(juseq); + } + + @Override + public String getJudgeStr(final int judgeCode) throws Exception { + return reportJudgeMapper.getJudgeName(judgeCode); + } + + /** + * 맵으로 변환 + * @return ("코드명", "코드") 형식으로 리턴 + */ + public HashMap judgeList() { + + HashMap map = new HashMap(); + List list; + try { + list = selectJudgeCode(); + + Iterator itr = list.iterator(); + while (itr.hasNext()) { + CodeVO code = itr.next(); + map.put(code.getCode2(), code.getCodenm()); + } + } catch (Exception e) { + e.printStackTrace(); + } + + return map; + } + + @Override + public int insert(final ReportJudgeVO reportJudgeVO) throws Exception { + return reportJudgeMapper.insert(reportJudgeVO); + } + + + @Override + public MemberVO selectApprove() throws Exception { + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + return reportJudgeMapper.selectApprove(loginUserVO); + } + + @Override + public HashMap approve(final ReportVO reportVO) throws Exception { + HashMap map = new HashMap(); + String errorMsg = ""; + try { + List list = new ArrayList(); + if (reportVO.getReportList() == null && reportVO.getInSeq() > 0) { + list.add(0, reportVO); + } else if (reportVO.getReportList() != null && reportVO.getReportList().size() > 0) { + list = reportVO.getReportList(); + } else { + map.put("result", -1); + map.put("msg", "결재할 견문이 없습니다."); + return map; + } + + MemberVO reportApproveVO = selectApprove(); + + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + int myGroupCode = ReportCommon.getMyGroupCode(); + int myDutiesCode = ReportCommon.getDutiesCodeForApprove(loginUserVO.getDuties()); + + if (myDutiesCode == 2 && reportApproveVO == null) { + map.put("result", -1); + map.put("msg", "계장 정보가 없습니다. 권한 설정에서 계장을 선택하십시오."); + return map; + } else if (reportApproveVO == null && myDutiesCode == 3) { + map.put("result", -1); + map.put("msg", "과장 정보가 없습니다. 권한 설정에서 과장을 선택하십시오."); + return map; + } + + int cnt = 1; + int mgcHead = 0; + int mgcSection = 0; + int mgcReport = 0; + ReportVO tempVO = new ReportVO(); + for (ReportVO vo : list) { + if (vo.getInSeq() <= 0) { + continue; + } + tempVO = reportService.select(vo); + + if (StringUtils.isNotBlank(vo.getInStateCode())) { + tempVO.setInCategory1(vo.getInCategory1()); + tempVO.setInCategory2(vo.getInCategory2()); + tempVO.setInCategory3(vo.getInCategory3()); + tempVO.setInCategory4(vo.getInCategory4()); + tempVO.setInSubject(vo.getInSubject()); + + String infoDate = vo.getStrInfodate().toString(); + tempVO.setInInfoYear(Integer.valueOf(infoDate.split("-")[0])); + tempVO.setInInfoMonth(Integer.valueOf(infoDate.split("-")[1])); + tempVO.setInInfoDay(Integer.valueOf(infoDate.split("-")[2])); + + tempVO.setInStateCode(vo.getInStateCode()); + } + + if (vo.getInJudge() > 0) { + tempVO.setInJudge(vo.getInJudge()); + } + if (vo.getInJudge4() > 0) { + tempVO.setInJudge4(vo.getInJudge4()); + } + if (vo.getInJudge5() > 0) { + tempVO.setInJudge5(vo.getInJudge5()); + } + if (vo.getInJudge6() > 0) { + tempVO.setInJudge6(vo.getInJudge6()); + } + + if (vo.getInReport() > 0) { + tempVO.setInReport(vo.getInReport()); + } + if (vo.getInReport4() > 0) { + tempVO.setInReport4(vo.getInReport4()); + } + if (vo.getInReport5() > 0) { + tempVO.setInReport5(vo.getInReport5()); + } + if (vo.getInReport6() > 0) { + tempVO.setInReport6(vo.getInReport6()); + } + + tempVO.setJuMsg(vo.getJuMsg()); + + if (tempVO.equals(null)) { + errorMsg += String.valueOf(cnt) + "번째 견문은 이미 삭제된 견문입니다.\n"; + continue; + } else { + if (Character.getNumericValue(tempVO.getInStateCode().charAt(0)) != myGroupCode) { + errorMsg += String.valueOf(cnt) + "번째 견문은 이미 결재된 견문입니다.\n"; + continue; + } + if (vo.getInReport() > 0 && myGroupCode == 3) { + errorMsg += String.valueOf(cnt) + "번째 견문은 본청에서는 상보처리 할 수 없습니다.\n"; + continue; + } + + switch (myGroupCode) { + case 1: + mgcHead = tempVO.getInJuseq1Head(); + mgcSection = tempVO.getInJuseq1Section(); + mgcReport = tempVO.getInReport1(); + break; + case 2: + mgcHead = tempVO.getInJuseq2Head(); + mgcSection = tempVO.getInJuseq2Section(); + mgcReport = tempVO.getInReport2(); + break; + case 3: + mgcHead = tempVO.getInJuseq3Head(); + mgcSection = tempVO.getInJuseq3Section(); + mgcReport = tempVO.getInReport3(); + default: + break; + } + + if (mgcHead > 0 && mgcSection > 0) { + errorMsg += String.valueOf(cnt) + "번째 견문은 이미 결재된 견문입니다.\n"; + continue; + } + if (myDutiesCode == 2 && mgcSection > 0) { + errorMsg += String.valueOf(cnt) + "번째 견문은 이미 결재된 견문입니다.\n"; + continue; + } + if (myDutiesCode == 3 && mgcHead > 0) { + errorMsg += String.valueOf(cnt) + "번째 견문은 이미 결재된 견문입니다.\n"; + continue; + } + if (vo.getInReport() > 0 && mgcReport > 0) { + errorMsg += String.valueOf(cnt) + "번째 견문은 이미 결재된 견문입니다.\n"; + continue; + } + } + String postState = ""; + if ((myDutiesCode == 2 && mgcHead > 0) || (myDutiesCode == 3 && mgcSection > 0) || loginUserVO.getAuthProxyHead() > 0) { + postState = "4"; + } else { + postState = String.valueOf(myDutiesCode); + } + + // 상태코드 설정 + String newStateCode = String.valueOf(myGroupCode) + postState; + + if (postState.equals("4") && (vo.getInReport() > 0 || mgcReport > 0)) { + //상보처리 + newStateCode = String.valueOf(myGroupCode + 1) + "1"; + } + + tempVO.setInStateCode(newStateCode); + if (Character.getNumericValue(newStateCode.charAt(1)) == 4) { + tempVO.setInComplete("1"); + } + + // 견문 평가 객체를 생성한다. + ReportJudgeVO reportJudgeVO = new ReportJudgeVO(); + reportJudgeVO.setJuInseq(vo.getInSeq()); + reportJudgeVO.setJuGroupCode(myGroupCode); + reportJudgeVO.setJuJudge(vo.getInJudge()); + reportJudgeVO.setJuReport(vo.getInReport()); + reportJudgeVO.setJuPlace1(reportApproveVO.getPlace1Str()); + reportJudgeVO.setJuPlace2(reportApproveVO.getPlace2Str()); + reportJudgeVO.setJuPosition(reportApproveVO.getPositionStr()); + reportJudgeVO.setJuName(reportApproveVO.getName()); + reportJudgeVO.setJuUserid(reportApproveVO.getUserid()); + reportJudgeVO.setJuProxyId(loginUserVO.getUserid()); + reportJudgeVO.setJuDutiesCode(String.valueOf(myDutiesCode)); + reportJudgeVO.setJuMessage(tempVO.getJuMsg()); + + int juSeq = insert(reportJudgeVO); + + if (myDutiesCode == 2) { + if (myGroupCode == 1) { + tempVO.setInJuseq1Section(juSeq); + } else if (myGroupCode == 2) { + tempVO.setInJuseq2Section(juSeq); + } else if (myGroupCode == 3) { + tempVO.setInJuseq3Section(juSeq); + } + } else { + if (myGroupCode != 3) { + tempVO.setInReport(vo.getInReport()); + if (myGroupCode == 1) { + tempVO.setInReport1(vo.getInReport()); + } else if (myGroupCode == 2) { + tempVO.setInReport2(vo.getInReport()); + } else if (myGroupCode == 3) { + tempVO.setInReport3(vo.getInReport()); + } + } + + tempVO.setInJudge(vo.getInJudge()); + if (vo.getInJudge4() > 0) { + tempVO.setInJudge4(vo.getInJudge4()); + } + if (vo.getInJudge5() > 0) { + tempVO.setInJudge5(vo.getInJudge5()); + } + if (vo.getInJudge6() > 0) { + tempVO.setInJudge6(vo.getInJudge6()); + } + + if (myGroupCode == 1) { + tempVO.setInJudge1(vo.getInJudge()); + tempVO.setInJuseq1Head(juSeq); + } else if (myGroupCode == 2) { + tempVO.setInJudge2(vo.getInJudge()); + tempVO.setInJuseq2Head(juSeq); + } else if (myGroupCode == 3) { + tempVO.setInJudge3(vo.getInJudge()); + tempVO.setInJuseq3Head(juSeq); + } + } + + HashMap result = reportService.update(tempVO, null, null); + + if (Integer.parseInt(result.get("result").toString()) > 0) { + errorMsg = ""; + } + + cnt++; + } + } catch (Exception e) { + e.printStackTrace(); + } + + map.put("msg", errorMsg); + + return map; + } + + @Override + public int update(final ReportJudgeVO reportJudgeVO) throws Exception { + return reportJudgeMapper.update(reportJudgeVO); + } + + @Override + public List selectWaitList(final ReportSearchVO reportSearchVO) { + return reportJudgeMapper.selectWaitList(reportSearchVO); + } + + @Override + public List selectWaitListAll(final ReportSearchVO reportSearchVO) { + return reportJudgeMapper.selectWaitListAll(reportSearchVO); + } + + @Override + public int selectWaitListCnt(final ReportSearchVO reportSearchVO) { + return reportJudgeMapper.selectWaitListCnt(reportSearchVO); + } + + @Override + public List selectApproveList(final ReportSearchVO reportSearchVO) throws Exception { + return reportJudgeMapper.selectApproveList(reportSearchVO); + } + + @Override + public int selectApproveListCnt(final ReportSearchVO reportSearchVO) throws Exception { + return reportJudgeMapper.selectApproveListCnt(reportSearchVO); + } + + @Override + public List selectApproveListAll(final ReportSearchVO reportSearchVO) throws Exception { + return reportJudgeMapper.selectApproveListAll(reportSearchVO); + } + + @Override + public List selectMyList(final ReportSearchVO reportSearchVO) throws Exception { + return reportJudgeMapper.selectMyList(reportSearchVO); + } + + @Override + public int selectMyListCnt(final ReportSearchVO reportSearchVO) throws Exception { + return reportJudgeMapper.selectMyListCnt(reportSearchVO); + } + + @Override + public List selectMyListAll(final ReportSearchVO reportSearchVO) throws Exception { + return reportJudgeMapper.selectMyListAll(reportSearchVO); + } + + @Override + public List> statsCategory(final ReportSearchVO reportSearchVO) throws Exception { + List> cateMap = new ArrayList>(); + + int idx = 0; + if (reportSearchVO.isSearchCate1()) { + reportSearchVO.setCategoryType(1); + for (HashMap newMap : reportJudgeMapper.statsCategory(reportSearchVO)) { + + HashMap ttt = new HashMap(); + for (String mapKey : newMap.keySet()) { + if (!mapKey.equals("TOTAL") && !mapKey.equals("PLACENAME") && !mapKey.equals("PLACECODE")) { + ttt.put(mapKey + "_1", newMap.get(mapKey)); + } + } + ttt.put("PLACENAME", newMap.get("PLACENAME")); + + if (cateMap.size() > idx && cateMap.get(idx) != null) { + cateMap.get(idx).putAll(ttt); + cateMap.get(idx).put("TOTAL", String.valueOf(Integer.parseInt(cateMap.get(idx).get("TOTAL").toString()) + Integer.parseInt(newMap.get("TOTAL").toString()))); + } else { + ttt.put("TOTAL", newMap.get("TOTAL")); + cateMap.add(idx, ttt); + } + idx++; + + } + } + + idx = 0; + if (reportSearchVO.isSearchCate2()) { + reportSearchVO.setCategoryType(2); + for (HashMap newMap : reportJudgeMapper.statsCategory(reportSearchVO)) { + + HashMap ttt = new HashMap(); + + for (String mapKey : newMap.keySet()) { + if (!mapKey.equals("TOTAL") && !mapKey.equals("PLACENAME") && !mapKey.equals("PLACECODE")) { + ttt.put(mapKey + "_2", newMap.get(mapKey)); + } + ttt.put("PLACENAME", newMap.get("PLACENAME")); + } + + if (cateMap.size() > idx && cateMap.get(idx) != null) { + cateMap.get(idx).putAll(ttt); + cateMap.get(idx).put("TOTAL", String.valueOf(Integer.parseInt(cateMap.get(idx).get("TOTAL").toString()) + Integer.parseInt(newMap.get("TOTAL").toString()))); + } else { + ttt.put("TOTAL", newMap.get("TOTAL")); + cateMap.add(idx, ttt); + } + idx++; + } + } + + idx = 0; + if (reportSearchVO.isSearchCate3()) { + reportSearchVO.setCategoryType(3); + for (HashMap newMap : reportJudgeMapper.statsCategory(reportSearchVO)) { + + HashMap ttt = new HashMap(); + + for (String mapKey : newMap.keySet()) { + if (!mapKey.equals("TOTAL") && !mapKey.equals("PLACENAME") && !mapKey.equals("PLACECODE")) { + ttt.put(mapKey + "_3", newMap.get(mapKey)); + } + ttt.put("PLACENAME", newMap.get("PLACENAME")); + } + + if (cateMap.size() > idx && cateMap.get(idx) != null) { + cateMap.get(idx).putAll(ttt); + cateMap.get(idx).put("TOTAL", String.valueOf(Integer.parseInt(cateMap.get(idx).get("TOTAL").toString()) + Integer.parseInt(newMap.get("TOTAL").toString()))); + } else { + ttt.put("TOTAL", newMap.get("TOTAL")); + cateMap.add(idx, ttt); + } + idx++; + } + } + + idx = 0; + if (reportSearchVO.isSearchCate4()) { + reportSearchVO.setCategoryType(4); + for (HashMap newMap : reportJudgeMapper.statsCategory(reportSearchVO)) { + + HashMap ttt = new HashMap(); + + for (String mapKey : newMap.keySet()) { + if (!mapKey.equals("TOTAL") && !mapKey.equals("PLACENAME") && !mapKey.equals("PLACECODE")) { + ttt.put(mapKey + "_4", newMap.get(mapKey)); + } + ttt.put("PLACENAME", newMap.get("PLACENAME")); + } + + if (cateMap.size() > idx && cateMap.get(idx) != null) { + cateMap.get(idx).putAll(ttt); + cateMap.get(idx).put("TOTAL", String.valueOf(Integer.parseInt(cateMap.get(idx).get("TOTAL").toString()) + Integer.parseInt(newMap.get("TOTAL").toString()))); + } else { + ttt.put("TOTAL", newMap.get("TOTAL")); + cateMap.add(idx, ttt); + } + idx++; + } + } + + if (cateMap.size() > 0) { + HashMap totalMap = new HashMap(); + totalMap.put("PLACENAME", "누계"); + + for (String key : cateMap.get(0).keySet()) { + if (key.equals("PLACENAME")) { + continue; + } + int tt = 0; + for (HashMap hashMap : cateMap) { + tt = tt + Integer.parseInt(hashMap.get(key)); + } + totalMap.put(key, String.valueOf(tt)); + } + + cateMap.add(cateMap.size(), totalMap); + } + + return cateMap; + } + + @Override + public List> statsJudge(final ReportSearchVO reportSearchVO) throws Exception { + List> list = reportJudgeMapper.statsJudge(reportSearchVO); + + HashMap map = new HashMap(); + map.put("PLACENAME", "누계"); + + if (list.size() > 0) { + for (String key : list.get(0).keySet()) { + if (key.equals("PLACENAME")) { + continue; + } + int total = 0; + for (HashMap item : list) { + total = total + Integer.parseInt(item.get(key)); + } + map.put(key, String.valueOf(total)); + } + } else { + map.put("REPORT1", "0"); + map.put("REPORT2", "0"); + map.put("JU1", "0"); + map.put("JU2", "0"); + map.put("JU3", "0"); + map.put("JU4", "0"); + map.put("JU5", "0"); + map.put("JU6", "0"); + map.put("JU7", "0"); + map.put("AG", "0"); + map.put("BG", "0"); + map.put("CG", "0"); + map.put("DG", "0"); + } + + list.add(list.size(), map); + + return list; + } + +} diff --git a/src/main/java/kcg/faics/report/service/impl/ReportMapper.java b/src/main/java/kcg/faics/report/service/impl/ReportMapper.java new file mode 100644 index 0000000..31dd7c6 --- /dev/null +++ b/src/main/java/kcg/faics/report/service/impl/ReportMapper.java @@ -0,0 +1,304 @@ +package kcg.faics.report.service.impl; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.report.vo.ReportGoalVO; +import kcg.faics.report.vo.ReportSearchVO; +import kcg.faics.report.vo.ReportVO; +import kcg.faics.sec.LoginUserVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + + +/** + * 견문 보고. + * @author 하영지 + * @since 2016. 10. 5. + */ +@Repository("reportMapper") +public class ReportMapper extends EgovAbstractMapper { + + /** + * 견문 정보를 반환한다. + * + * @param reportVO 견문vo + * + * @return 견문VO + * @throws Exception 기본 예외 처리 + */ + public ReportVO select(final ReportVO reportVO) throws Exception { + return selectOne("Report.select", reportVO); + } + + /** + * 페이징 처리 없이 견문 전체 목록을 반환한다. + * + * @param reportSearchVO + * 검색정보 객체 + * @return 견문 목록 + * @throws Exception 기본 예외 처리 + */ + public List selectListAll(final ReportSearchVO reportSearchVO) throws Exception { + return selectList("Report.selectListAll", reportSearchVO); + } + + /** + * 견문정보 총 개수를 반환한다. + * + * @param reportSearchVO + * 검색, 페이지정보 객체 + * @return 견문정보 총 개수 + * @throws Exception + * 기본 예외 처리 + */ + public int selectTotalCnt(final ReportSearchVO reportSearchVO) throws Exception { + return (Integer) selectOne("Report.selectTotalCnt", reportSearchVO); + } + + /** + * 견문 목록를 반환한다. + * + * @param reportSearchVO + * 검색, 페이지정보 객체 + * @return 견문 목록 + * @throws Exception + * 기본 예외 처리 + */ + public List selectList(final ReportSearchVO reportSearchVO) throws Exception { + return selectList("Report.selectList", reportSearchVO); + } + + /** + * 견문 목록 개수를 반환한다. + * + * @param reportSearchVO + * 검색, 페이지정보 객체 + * @return 견문 목록 개수 + * @throws Exception + * 기본 예외 처리 + */ + public int selectListCnt(final ReportSearchVO reportSearchVO) throws Exception { + return (Integer) selectOne("Report.selectListCnt", reportSearchVO); + } + + /** + * 견문 정보를 입력한다. + * + * @param reportVO 견문 VO + * @return 맵 객체 {result: 성공여부, seq: 입력된 레코드의 key 값} + * @throws Exception 기본 예외 처리 + */ + public HashMap insert(final ReportVO reportVO) throws Exception { + HashMap map = new HashMap(); + + int result = 0; + try { + result = insert("Report.insert", reportVO); + + map.put("result", result); + map.put("seq", reportVO.getInSeq()); + } catch (Exception e) { + e.printStackTrace(); + } + return map; + } + + /** + * 견문 정보를 갱신한다. + * + * @param reportVO + * 견문 VO + * @return 성공 - 1, 실패 - 0 + * @throws Exception + * 기본 예외 처리 + */ + public int update(final ReportVO reportVO) throws Exception { + return update("Report.update", reportVO); + } + + /** + * 견문 정보를 삭제한다. + * + * @param reportVO + * 견문 VO + * @return 성공 - 1, 실패 - 0 + * @throws Exception + * 기본 예외 처리 + */ + public int delete(final ReportVO reportVO) throws Exception { + return delete("Report.delete", reportVO); + } + + /** + * 견문의 새 소속번호를 반환한다. + * + * @param reportVO 견문vo + * @return 새 소속번호 + * @throws Exception 기본예외처리 + */ + public int selectPlaceNum(final ReportVO reportVO) { + return selectOne("Report.selectPlaceNum", reportVO); + } + + /** + * 견문의 임시저장목록을 반환한다. + * + * @param reportSearchVO 견문 검색조건 vo + * @return 견문 임시저장목록 + */ + public List selectSaveList(final ReportSearchVO reportSearchVO) { + return selectList("Report.selectSaveList", reportSearchVO); + } + /** + * 견문의 임시저장목록 결과 갯수를 반환한다. + * + * @param reportSearchVO 견문 검색조건 vo + * @return 견문 임시저장목록 결과 갯수 + */ + public int selectSaveListCnt(final ReportSearchVO reportSearchVO) { + return selectOne("Report.selectSaveListCnt", reportSearchVO); + } + + /** + * 견문의 자동삭제목록을 반환한다. + * + * @return 견문 임시저장목록 + */ + public String selectAutoRemoveList() { + return selectOne("Report.selectAutoRemoveList"); + } + + /** + * 견문제출현황을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 견문제출현황 목록 + * @throws Exception 기본 예외 처리 + */ + public List selectPresentList(final ReportSearchVO reportSearchVO) throws Exception { + return selectList("Report.selectPresentList", reportSearchVO); + } + + /** + * 견문제출현황 갯수를 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 견문제출현황 목록 갯수 + * @throws Exception 기본 예외 처리 + */ + public int selectPresentListCnt(final ReportSearchVO reportSearchVO) throws Exception { + return selectOne("Report.selectPresentListCnt", reportSearchVO); + } + + /** + * 견문제출현황 전체목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 견문제출현황 전체 목록 + * @throws Exception 기본 예외 처리 + */ + public List selectPresentListAll(final ReportSearchVO reportSearchVO) throws Exception { + return selectList("Report.selectPresentListAll", reportSearchVO); + } + + /** + * 평가기록부을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 견문제출현황 목록 + * @throws Exception 기본 예외 처리 + */ + public List selectRecordList(final ReportSearchVO reportSearchVO) throws Exception { + return selectList("Report.selectRecordList", reportSearchVO); + } + + /** + * 평가기록부 갯수를 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 평가기록부 목록 갯수 + * @throws Exception 기본 예외 처리 + */ + public int selectRecordListCnt(final ReportSearchVO reportSearchVO) throws Exception { + return selectOne("Report.selectRecordListCnt", reportSearchVO); + } + + /** + * 평가기록부 전체목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 평가기록부 전체 목록 + * @throws Exception 기본 예외 처리 + */ + public List selectRecordListAll(final ReportSearchVO reportSearchVO) throws Exception { + return selectList("Report.selectRecordListAll", reportSearchVO); + } + + /** + * 목표 관리 목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @return 목표 관리 + * @throws Exception 기본예외처리 + */ + public List selectGoalList(final ReportSearchVO reportSearchVO) throws Exception { + return selectList("ReportGoal.selectList", reportSearchVO); + } + + /** + * 목표 레코드 1개를 조회한다. + * + * @param reportGoalVO 견문 검색 객체 + * @return 목표 레코드 + * @throws Exception 기본예외처리 + */ + public ReportGoalVO selectGoal(final ReportGoalVO reportGoalVO) throws Exception { + return selectOne("ReportGoal.select", reportGoalVO); + } + + /** + * 목표를 입력한다. + * + * @param reportGoalVO 견문 검색 객체 + * @return 목표 레코드 + * @throws Exception 기본예외처리 + */ + public int insertGoal(final ReportGoalVO reportGoalVO) throws Exception { + return insert("ReportGoal.insert", reportGoalVO); + } + /** + * 목표를 수정한다. + * + * @param reportGoalVO 견문 검색 객체 + * @return 목표 레코드 + * @throws Exception 기본예외처리 + */ + public int updateGoal(final ReportGoalVO reportGoalVO) throws Exception { + return update("ReportGoal.update", reportGoalVO); + } + + /** + * 사용자별 목표 통계를 반환한다. + * + * @param reportSearchVO 견문 검색객체 + * @return 목표 통계 + * @throws Exception 기본예외처리 + */ + public List> getGoalStats(final ReportSearchVO reportSearchVO) throws Exception { + return selectList("ReportGoal.getStats", reportSearchVO); + } + + /** + * 소속별 목표 통계를 반환한다. + * + * @param reportSearchVO 견문 검색객체 + * @return 목표 통계 + * @throws Exception 기본예외처리 + */ + public List> getGoalStatsPlace(final ReportSearchVO reportSearchVO) throws Exception { + return selectList("ReportGoal.getStatsPlace", reportSearchVO); + } +} diff --git a/src/main/java/kcg/faics/report/service/impl/ReportServiceImpl.java b/src/main/java/kcg/faics/report/service/impl/ReportServiceImpl.java new file mode 100644 index 0000000..2c0645d --- /dev/null +++ b/src/main/java/kcg/faics/report/service/impl/ReportServiceImpl.java @@ -0,0 +1,254 @@ +package kcg.faics.report.service.impl; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import kcg.faics.cmmn.egov.file.EgovFileMngUtil; +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.report.service.ReportFileService; +import kcg.faics.report.service.ReportService; +import kcg.faics.report.vo.ReportGoalVO; +import kcg.faics.report.vo.ReportSearchVO; +import kcg.faics.report.vo.ReportVO; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +/** + * 견문 비즈니스 로직 + * + * @author 하영지 + */ +@Service("reportService") +public class ReportServiceImpl extends EgovAbstractServiceImpl implements ReportService { + + /** + * 견문 Mapper 클래스. + */ + @Resource(name = "reportMapper") + private ReportMapper reportMapper; + + /** + * 첨부파일 관련 Service 클래스. + */ + @Resource(name = "reportFileService") + private ReportFileService reportFileService; + + /** + * 코드 관련 Service 클래스. + */ + @Resource(name = "codeService") + private CodeService codeService; + + /** + * 전자정부프레임워크에서 제공되는 파일 업로드 처리 관련 Utility. + **/ + @Resource(name = "EgovFileMngUtil") + private EgovFileMngUtil fileUtil; + + @Override + public ReportVO select(final ReportVO dataVO) throws Exception { + return reportMapper.select(dataVO); + } + + @Override + public List selectListAll(final ReportSearchVO searchVO) throws Exception { + return reportMapper.selectListAll(searchVO); + } + + @Override + public int selectTotalCnt(final ReportSearchVO searchVO) throws Exception { + return reportMapper.selectTotalCnt(searchVO); + } + + @Override + public List selectList(final ReportSearchVO searchVO) throws Exception { + return reportMapper.selectList(searchVO); + } + + @Override + public int selectListCnt(final ReportSearchVO searchVO) throws Exception { + return reportMapper.selectListCnt(searchVO); + } + + @Override + @Transactional + public HashMap insert(final ReportVO dataVO, final Map fileMap) throws Exception { + HashMap map = new HashMap(); + map.put("result", 0); + map.put("seq", -1); + + /* seq 및 insert 결과 */ + map = reportMapper.insert(dataVO); + + int seq = (Integer) map.get("seq"); + int result = (Integer) map.get("result"); + + if (result == 1) { + ReportVO fileVO = new ReportVO(); + fileVO.setInSeq(dataVO.getInSeq()); + int fileProcResult = 0; + fileProcResult = reportFileService.insertAndSaveFiles(fileVO, fileMap); + + if (fileProcResult == 1) { + map.put("result", 1); + map.put("seq", seq); + } else { + throw new Exception(); + } + } else { + throw new Exception(); + } + + return map; + } + + @Override + public HashMap update(final ReportVO dataVO, + final Map fileMap, final String[] deleteFiles) throws Exception { + ReportVO vo = select(dataVO); + dataVO.setInFile1(vo.getInFile1()); + dataVO.setInFile2(vo.getInFile2()); + dataVO.setInFile3(vo.getInFile3()); + dataVO.setInFile4(vo.getInFile4()); + dataVO.setInFile5(vo.getInFile5()); + + reportFileService.insertAndSaveFiles(dataVO, fileMap); + if (deleteFiles != null) { + reportFileService.deleteAndRemoveFiles(vo, deleteFiles); + } + + HashMap map = new HashMap(); + map.put("result", reportMapper.update(dataVO)); + map.put("seq", dataVO.getInSeq()); + + return map; + } + + @Override + public HashMap delete(final ReportVO dataVO) throws Exception { + ReportVO vo = select(dataVO); + HashMap map = new HashMap(); + + + String[] delFiles = {"1", "2", "3", "4", "5"}; + int result = reportFileService.deleteAndRemoveFiles(vo, delFiles); + result = reportMapper.delete(dataVO); + + map.put("result", result); + + return map; + } + + @Override + public int selectPlaceNum(final ReportVO reportVO) { + return reportMapper.selectPlaceNum(reportVO); + } + + @Override + public List selectSaveList(final ReportSearchVO reportSearchVO) { + return reportMapper.selectSaveList(reportSearchVO); + } + + @Override + public int selectSaveListCnt(final ReportSearchVO reportSearchVO) { + return reportMapper.selectSaveListCnt(reportSearchVO); + } + + @Override + @Transactional + public int deleteSelected(final String[] selectedSeq) throws Exception { + int result = 1; + HashMap map = new HashMap(); + + ReportVO reportVO = new ReportVO(); + for (int i = 0; i < selectedSeq.length; i++) { + reportVO.setInSeq(Integer.parseInt(selectedSeq[i])); + map = delete(reportVO); + if ("0".equals(String.valueOf(map.get("result")))) { + throw new Exception(); + } + } + + return result; + } + + @Override + public String selectAutoRemoveList() { + return reportMapper.selectAutoRemoveList(); + } + + @Override + public List selectPresentList(final ReportSearchVO reportSearchVO) throws Exception { + return reportMapper.selectPresentList(reportSearchVO); + } + + @Override + public int selectPresentListCnt(final ReportSearchVO reportSearchVO) throws Exception { + return reportMapper.selectPresentListCnt(reportSearchVO); + } + + @Override + public List selectPresentListAll(final ReportSearchVO reportSearchVO) throws Exception { + return reportMapper.selectPresentListAll(reportSearchVO); + } + + @Override + public List selectRecordList(final ReportSearchVO reportSearchVO) throws Exception { + return reportMapper.selectRecordList(reportSearchVO); + } + + @Override + public int selectRecordListCnt(final ReportSearchVO reportSearchVO) throws Exception { + return reportMapper.selectRecordListCnt(reportSearchVO); + } + + @Override + public List selectRecordListAll(final ReportSearchVO reportSearchVO) throws Exception { + return reportMapper.selectRecordListAll(reportSearchVO); + } + + @Override + public List selectGoalList(final ReportSearchVO reportSearchVO) throws Exception { + return reportMapper.selectGoalList(reportSearchVO); + } + + @Override + public int updateGoal(final ReportGoalVO reportGoalVO) throws Exception { + int result = 0; + + for (ReportGoalVO vo : reportGoalVO.getReportGoalList()) { + vo.setGoPlace1(reportGoalVO.getGoPlace1()); + vo.setGoYear(reportGoalVO.getGoYear()); + vo.setGoMonth(reportGoalVO.getGoMonth()); + + try { + ReportGoalVO originalVO = reportMapper.selectGoal(vo); + if (originalVO == null) { + result = reportMapper.insertGoal(vo); + } else { + result = reportMapper.updateGoal(vo); + } + } catch (Exception e) { + new Exception(); + } + } + return result; + } + + @Override + public List> getGoalStats(final ReportSearchVO reportSearchVO) throws Exception { + return reportMapper.getGoalStats(reportSearchVO); + } + + @Override + public List> getGoalStatsPlace(final ReportSearchVO reportSearchVO) throws Exception { + return reportMapper.getGoalStatsPlace(reportSearchVO); + } +} diff --git a/src/main/java/kcg/faics/report/service/impl/package-info.java b/src/main/java/kcg/faics/report/service/impl/package-info.java new file mode 100644 index 0000000..d0175f6 --- /dev/null +++ b/src/main/java/kcg/faics/report/service/impl/package-info.java @@ -0,0 +1,8 @@ +/** + * 견문 관련 비즈니스로직 패키지. + */ +/** + * @author hayoungji + * + */ +package kcg.faics.report.service.impl; \ No newline at end of file diff --git a/src/main/java/kcg/faics/report/service/package-info.java b/src/main/java/kcg/faics/report/service/package-info.java new file mode 100644 index 0000000..0bb6d68 --- /dev/null +++ b/src/main/java/kcg/faics/report/service/package-info.java @@ -0,0 +1,8 @@ +/** + * 견문 관련 인터페이스 패키지. + */ +/** + * @author hayoungji + * + */ +package kcg.faics.report.service; \ No newline at end of file diff --git a/src/main/java/kcg/faics/report/vo/ReportApproveVO.java b/src/main/java/kcg/faics/report/vo/ReportApproveVO.java new file mode 100644 index 0000000..a42e8fe --- /dev/null +++ b/src/main/java/kcg/faics/report/vo/ReportApproveVO.java @@ -0,0 +1,79 @@ +package kcg.faics.report.vo; + +/** + * 견문 결재 객체 + * + * @author 하영지 + * + */ +public class ReportApproveVO { + + /** + * 소속 + */ + private String apPlace1; + /** + * 결재 과장 id + */ + private String apSectionId; + /** + * 계장 id + */ + private String apHeadId; + /** + * 소속명 + */ + private String place1Str; + /** + * 소속2명 + */ + private String place2Str; + /** + * 직급명 + */ + private String positionStr; + + public String getApPlace1() { + return apPlace1; + } + public void setApPlace1(String apPlace1) { + this.apPlace1 = apPlace1; + } + public String getApSectionId() { + return apSectionId; + } + public void setApSectionId(String apSectionId) { + this.apSectionId = apSectionId; + } + public String getApHeadId() { + return apHeadId; + } + public void setApHeadId(String apHeadId) { + this.apHeadId = apHeadId; + } + public String getPlace1Str() { + return place1Str; + } + public void setPlace1Str(String place1Str) { + this.place1Str = place1Str; + } + public String getPlace2Str() { + return place2Str; + } + public void setPlace2Str(String place2Str) { + this.place2Str = place2Str; + } + public String getPositionStr() { + return positionStr; + } + public void setPositionStr(String positionStr) { + this.positionStr = positionStr; + } + @Override + public String toString() { + return "ReportApproveVO [apPlace1=" + apPlace1 + ", apSectionId=" + + apSectionId + ", apHeadId=" + apHeadId + ", place1Str=" + + place1Str + ", place2Str=" + place2Str + ", positionStr=" + + positionStr + "]"; + } +} diff --git a/src/main/java/kcg/faics/report/vo/ReportCategoryVO.java b/src/main/java/kcg/faics/report/vo/ReportCategoryVO.java new file mode 100644 index 0000000..9a780d9 --- /dev/null +++ b/src/main/java/kcg/faics/report/vo/ReportCategoryVO.java @@ -0,0 +1,61 @@ +package kcg.faics.report.vo; + +/** + * @author 하영지 + * 견문 분류 VO + */ +public class ReportCategoryVO { + + /** + * 분류 구분 + */ + private int type; + /** + * 분류 코드 + */ + private String code; + /** + * 분류명 + */ + private String name; + /** + * @return the type + */ + public int getType() { + return type; + } + /** + * @param type the type to set + */ + public void setType(final int type) { + this.type = type; + } + /** + * @return the code + */ + public String getCode() { + return code; + } + /** + * @param code the code to set + */ + public void setCode(final String code) { + this.code = code; + } + /** + * @return the name + */ + public String getName() { + return name; + } + /** + * @param name the name to set + */ + public void setName(final String name) { + this.name = name; + } + @Override + public String toString() { + return "ReportCategoryVO [code=" + code + ", name=" + name + "]"; + } +} diff --git a/src/main/java/kcg/faics/report/vo/ReportFileVO.java b/src/main/java/kcg/faics/report/vo/ReportFileVO.java new file mode 100644 index 0000000..a8f3959 --- /dev/null +++ b/src/main/java/kcg/faics/report/vo/ReportFileVO.java @@ -0,0 +1,45 @@ +package kcg.faics.report.vo; + +import kcg.faics.cmmn.bbs.BaseFileVO; + +/** + * 견문 파일 시퀀스를 관리한다. + * RPT_FILE_STORAGE + * @author 하영지 + * @since 16.10. 19. + */ +public class ReportFileVO extends BaseFileVO { + + /** + * 파일 시퀀스 + */ + private int fsSeq; + + /** + * 시퀀스에 저장된 파일 갯수 + */ + private int fsFileCount; + + public int getFsSeq() { + return fsSeq; + } + + public void setFsSeq(int fsSeq) { + this.fsSeq = fsSeq; + } + + public int getFsFileCount() { + return fsFileCount; + } + + public void setFsFileCount(int fsFileCount) { + this.fsFileCount = fsFileCount; + } + + @Override + public String toString() { + return "ReportFileVO [fsSeq=" + fsSeq + ", fsFileCount=" + fsFileCount + + "]"; + } + +} diff --git a/src/main/java/kcg/faics/report/vo/ReportGoalVO.java b/src/main/java/kcg/faics/report/vo/ReportGoalVO.java new file mode 100644 index 0000000..7f76ec1 --- /dev/null +++ b/src/main/java/kcg/faics/report/vo/ReportGoalVO.java @@ -0,0 +1,141 @@ +package kcg.faics.report.vo; + +import java.util.List; + +/** + * 견문 목표관리(테이블명 : RPT_AGENT_GOAL) + * + * @author 하영지 + * + */ +public class ReportGoalVO { + /** + * 순번 + */ + private int rn; + /** + * 년 + */ + private int goYear; + /** + * 월 + */ + private int goMonth; + /** + * 소속 + */ + private String goPlace1; + /** + * 외사경찰id + */ + private String goId; + /** + * 전종요원 + */ + private int goGoal1; + /** + * 대외협력 + */ + private int goGoal2; + /** + * 정보협력 + */ + private int goGoal3; + /** + * 신고요원 + */ + private int goGoal4; + /** + * 계 + */ + private int goTotal; + /** + * 목표 관리 목록 + */ + private List reportGoalList; + /** + * 외사경찰이름 + */ + private String name; + + public int getRn() { + return rn; + } + public void setRn(int rn) { + this.rn = rn; + } + public int getGoYear() { + return goYear; + } + public void setGoYear(int goYear) { + this.goYear = goYear; + } + public int getGoMonth() { + return goMonth; + } + public void setGoMonth(int goMonth) { + this.goMonth = goMonth; + } + public String getGoPlace1() { + return goPlace1; + } + public void setGoPlace1(String goPlace1) { + this.goPlace1 = goPlace1; + } + public String getGoId() { + return goId; + } + public void setGoId(String goId) { + this.goId = goId; + } + public int getGoGoal1() { + return goGoal1; + } + public void setGoGoal1(int goGoal1) { + this.goGoal1 = goGoal1; + } + public int getGoGoal2() { + return goGoal2; + } + public void setGoGoal2(int goGoal2) { + this.goGoal2 = goGoal2; + } + public int getGoGoal3() { + return goGoal3; + } + public void setGoGoal3(int goGoal3) { + this.goGoal3 = goGoal3; + } + public int getGoGoal4() { + return goGoal4; + } + public void setGoGoal4(int goGoal4) { + this.goGoal4 = goGoal4; + } + public int getGoTotal() { + return goTotal; + } + public void setGoTotal(int goTotal) { + this.goTotal = goTotal; + } + public List getReportGoalList() { + return reportGoalList; + } + public void setReportGoalList(List reportGoalList) { + this.reportGoalList = reportGoalList; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + @Override + public String toString() { + return "ReportGoalVO [goYear=" + goYear + ", goMonth=" + goMonth + + ", goPlace1=" + goPlace1 + ", goId=" + goId + ", goGoal1=" + + goGoal1 + ", goGoal2=" + goGoal2 + ", goGoal3=" + goGoal3 + + ", goGoal4=" + goGoal4 + ", goTotal=" + goTotal + + ", reportGoalList=" + reportGoalList + ", name=" + name + "]"; + } +} diff --git a/src/main/java/kcg/faics/report/vo/ReportJudgeVO.java b/src/main/java/kcg/faics/report/vo/ReportJudgeVO.java new file mode 100644 index 0000000..748a94e --- /dev/null +++ b/src/main/java/kcg/faics/report/vo/ReportJudgeVO.java @@ -0,0 +1,183 @@ +package kcg.faics.report.vo; + + +/** + * 테이블명 RPT_JUDGE_HISTORY + * + * @author 하영지 + * @since 2016. 10. 27. + */ +public class ReportJudgeVO { + /** + * 평가 시퀀스 + */ + private int juSeq; + /** + * 견문 시퀀스 + */ + private int juInseq; + /** + * 평가 그룹 코드 + */ + private int juGroupCode; + /** + * 평가 날짜 + */ + private java.sql.Date juChkdate; + /** + * 판단코드 + */ + private int juJudge; + /** + * 상보여부 + */ + private int juReport; + /** + * 결재자의 소속1명 + */ + private String juPlace1; + /** + * 결재자의 소속2명 + */ + private String juPlace2; + /** + * 결재자의 직급 + */ + private String juPosition; + /** + * 결재자의 이름 + */ + private String juName; + /** + * 결재자의 아이디 + */ + private String juUserid; + /** + * 결재 대리자 아이디 + */ + private String juProxyId; + /** + * 결재자의 직책코드 + */ + private String juDutiesCode; + /** + * 검토의견 + */ + private String juMessage; + /** + * 사인 + */ + private String sign; + /** + * 직급명 + */ + private String juPositionStr; + + public int getJuSeq() { + return juSeq; + } + public void setJuSeq(int juSeq) { + this.juSeq = juSeq; + } + public int getJuInseq() { + return juInseq; + } + public void setJuInseq(int juInseq) { + this.juInseq = juInseq; + } + public int getJuGroupCode() { + return juGroupCode; + } + public void setJuGroupCode(int juGroupCode) { + this.juGroupCode = juGroupCode; + } + public java.sql.Date getJuChkdate() { + return juChkdate; + } + public void setJuChkdate(java.sql.Date juChkdate) { + this.juChkdate = juChkdate; + } + public int getJuJudge() { + return juJudge; + } + public void setJuJudge(int juJudge) { + this.juJudge = juJudge; + } + public int getJuReport() { + return juReport; + } + public void setJuReport(int juReport) { + this.juReport = juReport; + } + public String getJuPlace1() { + return juPlace1; + } + public void setJuPlace1(String juPlace1) { + this.juPlace1 = juPlace1; + } + public String getJuPlace2() { + return juPlace2; + } + public void setJuPlace2(String juPlace2) { + this.juPlace2 = juPlace2; + } + public String getJuPosition() { + return juPosition; + } + public void setJuPosition(String juPosition) { + this.juPosition = juPosition; + } + public String getJuName() { + return juName; + } + public void setJuName(String juName) { + this.juName = juName; + } + public String getJuUserid() { + return juUserid; + } + public void setJuUserid(String juUserid) { + this.juUserid = juUserid; + } + public String getJuProxyId() { + return juProxyId; + } + public void setJuProxyId(String juProxyId) { + this.juProxyId = juProxyId; + } + public String getJuDutiesCode() { + return juDutiesCode; + } + public void setJuDutiesCode(String juDutiesCode) { + this.juDutiesCode = juDutiesCode; + } + public String getJuMessage() { + return juMessage; + } + public void setJuMessage(String juMessage) { + this.juMessage = juMessage; + } + public String getSign() { + return sign; + } + public void setSign(String sign) { + this.sign = sign; + } + public String getJuPositionStr() { + return juPositionStr; + } + public void setJuPositionStr(String juPositionStr) { + this.juPositionStr = juPositionStr; + } + @Override + public String toString() { + return "ReportJudgeVO [juSeq=" + juSeq + ", juInseq=" + juInseq + + ", juGroupCode=" + juGroupCode + ", juChkdate=" + juChkdate + + ", juJudge=" + juJudge + ", juReport=" + juReport + + ", juPlace1=" + juPlace1 + ", juPlace2=" + juPlace2 + + ", juPosition=" + juPosition + ", juName=" + juName + + ", juUserid=" + juUserid + ", juProxyId=" + juProxyId + + ", juDutiesCode=" + juDutiesCode + ", juMessage=" + juMessage + + ", sign=" + sign + ", juPositionStr=" + juPositionStr + "]"; + } +} diff --git a/src/main/java/kcg/faics/report/vo/ReportSearchVO.java b/src/main/java/kcg/faics/report/vo/ReportSearchVO.java new file mode 100644 index 0000000..2829eef --- /dev/null +++ b/src/main/java/kcg/faics/report/vo/ReportSearchVO.java @@ -0,0 +1,413 @@ +package kcg.faics.report.vo; + +import java.util.Arrays; + +import kcg.faics.cmmn.bbs.BaseSearchVO; + +/** + * @author 하영지 + * 견문 검색 VO + */ +public class ReportSearchVO extends BaseSearchVO implements Cloneable { + + /** + * 접속한 사용자 아이디 + */ + private String userid; + /** + * 접속한 사용자 등급 + */ + private int usegrade; + /** + * 접속한 사용자 타입 + */ + private int type; + /** + * 접속한 사용자 그룹 + */ + private int myGroupCode; + /** + * 접속한 사용자 계급 + */ + private String duties; + /** + * 견문권한(1-나머지, 2-계장, 3-과장). + */ + private int dutiesForApprove; + /** + * 접속한 사용자 소속코드 + */ + private String userPlace; + /** + * 견문 상태 코드 + */ + private String inStateCode; + /** + * 견문 정렬 필드 + */ + private String orderCol = "IN_SEQ"; + /** + * 견문 정렬 타입 + */ + private String orderAsc = "DESC"; + + + /** 사용자 지정 검색 조건 */ + + /** + * 기간 처음 + */ + private String dateStart; + /** + * 기간 마지막 + */ + private String dateEnd; + /** + * 보고자 + */ + private String writeName; + /** + * 보고자id + */ + private String writeId; + /** + * 소속 + */ + private String[] places; + /** + * 평가 + */ + private String[] judges; + /** + * 상보 + */ + private String[] fullReport; + /** + * 구분 + */ + private String[] policeType; + /** + * 분야1 + */ + private String[] category1; + /** + * 분야2 + */ + private String[] category2; + /** + * 분야3 + */ + private String[] category3; + /** + * 분야4 + */ + private String[] category4; + /** + * 제목 + */ + private String subject; + /** + * 첨부파일명 + */ + private String filename; + + /** 통계 */ + + /** + * 분야1 검색여부 + */ + private boolean searchCate1 = true; + /** + * 분야2 검색여부 + */ + private boolean searchCate2 = true; + /** + * 분야3 검색여부 + */ + private boolean searchCate3 = true; + /** + * 분야4 검색여부 + */ + private boolean searchCate4 = true; + /** + * 통계타입 + */ + private String statsType; + /** + * 분야별통계 타입 + */ + private int categoryType; + /** + * 소속 그룹 코드 + */ + private String placeGroup; + /** + * 연도 + */ + private String year; + /** + * 월 + */ + private String month; + + public String getUserid() { + return userid; + } + public void setUserid(final String userid) { + this.userid = userid; + } + public int getUsegrade() { + return usegrade; + } + public void setUsegrade(final int usegrade) { + this.usegrade = usegrade; + } + public int getType() { + return type; + } + public void setType(final int type) { + this.type = type; + } + public int getMyGroupCode() { + return myGroupCode; + } + public String getDuties() { + return duties; + } + public void setDuties(final String duties) { + this.duties = duties; + } + /** + * @return the dutiesForApprove + */ + public final int getDutiesForApprove() { + return dutiesForApprove; + } + /** + * @param dutiesForApprove the dutiesForApprove to set + */ + public final void setDutiesForApprove(final int dutiesForApprove) { + this.dutiesForApprove = dutiesForApprove; + } + public String getUserPlace() { + return userPlace; + } + public void setUserPlace(final String userPlace) { + this.userPlace = userPlace; + } + public void setMyGroupCode(final int myGroupCode) { + this.myGroupCode = myGroupCode; + } + public String getInStateCode() { + return inStateCode; + } + public void setInStateCode(final String inStateCode) { + this.inStateCode = inStateCode; + } + public String getOrderCol() { + return orderCol; + } + public void setOrderCol(final String orderCol) { + this.orderCol = orderCol; + } + public String getOrderAsc() { + return orderAsc; + } + public void setOrderAsc(final String orderAsc) { + this.orderAsc = orderAsc; + } + public String getDateStart() { + return dateStart; + } + public void setDateStart(final String dateStart) { + this.dateStart = dateStart; + } + public String getDateEnd() { + return dateEnd; + } + public void setDateEnd(final String dateEnd) { + this.dateEnd = dateEnd; + } + public String getWriteName() { + return writeName; + } + public void setWriteName(final String writeName) { + this.writeName = writeName; + } + public String getWriteId() { + return writeId; + } + public void setWriteId(final String writeId) { + this.writeId = writeId; + } + public String[] getPlaces() { + return places; + } + public void setPlaces(final String[] places) { + this.places = places; + } + public String[] getJudges() { + return judges; + } + public void setJudges(final String[] judges) { + this.judges = judges; + } + public String[] getFullReport() { + return fullReport; + } + public void setFullReport(final String[] fullReport) { + this.fullReport = fullReport; + } + public String[] getPoliceType() { + return policeType; + } + public void setPoliceType(final String[] policeType) { + this.policeType = policeType; + } + public String[] getCategory1() { + return category1; + } + public void setCategory1(final String[] category1) { + this.category1 = category1; + } + public String[] getCategory2() { + return category2; + } + public void setCategory2(final String[] category2) { + this.category2 = category2; + } + public String[] getCategory3() { + return category3; + } + public void setCategory3(final String[] category3) { + this.category3 = category3; + } + public String[] getCategory4() { + return category4; + } + public void setCategory4(final String[] category4) { + this.category4 = category4; + } + public String getSubject() { + return subject; + } + public void setSubject(final String subject) { + this.subject = subject; + } + public String getFilename() { + return filename; + } + public void setFilename(final String filename) { + this.filename = filename; + } + public boolean isSearchCate1() { + return searchCate1; + } + public void setSearchCate1(final boolean searchCate1) { + this.searchCate1 = searchCate1; + } + public boolean isSearchCate2() { + return searchCate2; + } + public void setSearchCate2(final boolean searchCate2) { + this.searchCate2 = searchCate2; + } + public boolean isSearchCate3() { + return searchCate3; + } + public void setSearchCate3(final boolean searchCate3) { + this.searchCate3 = searchCate3; + } + public boolean isSearchCate4() { + return searchCate4; + } + public void setSearchCate4(final boolean searchCate4) { + this.searchCate4 = searchCate4; + } + public String getStatsType() { + return statsType; + } + public void setStatsType(final String statsType) { + this.statsType = statsType; + } + public int getCategoryType() { + return categoryType; + } + public void setCategoryType(final int categoryType) { + this.categoryType = categoryType; + } + public String getPlaceGroup() { + return placeGroup; + } + public void setPlaceGroup(final String placeGroup) { + this.placeGroup = placeGroup; + } + public String getYear() { + return year; + } + public void setYear(final String year) { + this.year = year; + } + public String getMonth() { + return month; + } + public void setMonth(final String month) { + this.month = month; + } + @Override + public String toString() { + return "ReportSearchVO [userid=" + userid + ", usegrade=" + usegrade + + ", type=" + type + ", myGroupCode=" + myGroupCode + + ", duties=" + duties + ", userPlace=" + userPlace + + ", inStateCode=" + inStateCode + ", orderCol=" + orderCol + + ", orderAsc=" + orderAsc + ", dateStart=" + dateStart + + ", dateEnd=" + dateEnd + ", writeName=" + writeName + + ", writeId=" + writeId + ", places=" + + Arrays.toString(places) + ", judges=" + + Arrays.toString(judges) + ", fullReport=" + + Arrays.toString(fullReport) + ", policeType=" + + Arrays.toString(policeType) + ", category1=" + + Arrays.toString(category1) + ", category2=" + + Arrays.toString(category2) + ", category3=" + + Arrays.toString(category3) + ", category4=" + + Arrays.toString(category4) + ", subject=" + subject + + ", filename=" + filename + ", searchCate1=" + searchCate1 + + ", searchCate2=" + searchCate2 + ", searchCate3=" + + searchCate3 + ", searchCate4=" + searchCate4 + ", statsType=" + + statsType + ", categoryType=" + categoryType + + ", placeGroup=" + placeGroup + ", year=" + year + ", month=" + + month + "]"; + } + @Override + public Object clone() throws CloneNotSupportedException { + ReportSearchVO vo = (ReportSearchVO) super.clone(); + + if (places != null) { + vo.places = (String[]) places.clone(); + } + if (judges != null) { + vo.judges = (String[]) judges.clone(); + } + if (fullReport != null) { + vo.fullReport = (String[]) fullReport.clone(); + } + if (policeType != null) { + vo.policeType = (String[]) policeType.clone(); + } + if (category1 != null) { + vo.category1 = (String[]) category1.clone(); + } + if (category2 != null) { + vo.category2 = (String[]) category2.clone(); + } + if (category3 != null) { + vo.category3 = (String[]) category3.clone(); + } + if (category4 != null) { + vo.category4 = (String[]) category4.clone(); + } + return vo; + } + + +} diff --git a/src/main/java/kcg/faics/report/vo/ReportVO.java b/src/main/java/kcg/faics/report/vo/ReportVO.java new file mode 100644 index 0000000..4413c98 --- /dev/null +++ b/src/main/java/kcg/faics/report/vo/ReportVO.java @@ -0,0 +1,988 @@ +package kcg.faics.report.vo; + +import java.util.List; + +import kcg.faics.report.web.ReportCommon; + +import org.springframework.web.multipart.MultipartFile; + +/** + * 견문 모델(RPT_INFO). + * @author 하영지 + * + */ +public class ReportVO { + /** + * 목록에서 표시로 사용할 문자 + */ + final String STRCORRECT = "○"; + + /** + * 견문 ID + */ + private int inSeq; + /** + * 상위 소속 기관 코드 + */ + private String inAgencyCode; + /** + * 보고자 소속 기관 코드 + */ + private String inPlaceCode; + /** + * 보고자 소속기관명 + */ + private String inPlaceName; + /** + * 문서번호 + */ + private int inPlaceNum; + /** + * 보고자 경찰타입(1:외사, 2:일반) + */ + private String inType; + /** + * 분류1 + */ + private String inCategory1; + /** + * 분류2 + */ + private String inCategory2; + /** + * 분류3 + */ + private String inCategory3; + /** + * 분류4 + */ + private String inCategory4; + /** + * 분류1 사용여부 + */ + private String inUseCategory1; + /** + * 분류2 사용여부 + */ + private String inUseCategory2; + /** + * 분류3 사용여부 + */ + private String inUseCategory3; + /** + * 분류4 사용여부 + */ + private String inUseCategory4; + + /** + * 제목 + */ + private String inSubject; + /** + * 비고 + */ + private String inMemo; + /** + * 보고자 소속1명 + */ + private String inPlace1; + /** + * 보고자 소속2명 + */ + private String inPlace2; + /** + * 보고자 직급명 + */ + private String inPosition; + /** + * 보고자명 + */ + private String inName; + /** + * 보고자 아이디 + */ + private String inUserid; + /** + * 보고자 아이피 + */ + private String inIp; + /** + * 내용 + */ + private String inContent; + /** + * 첨부파일명1 + */ + private String inFile1; + /** + * 첨부파일명2 + */ + private String inFile2; + /** + * 첨부파일명3 + */ + private String inFile3; + /** + * 첨부파일명4 + */ + private String inFile4; + /** + * 첨부파일명5 + */ + private String inFile5; + /** + * 첨부파일시퀀스 + */ + private int inFsseq; + /** + * 보고일 + */ + private java.sql.Date inInfodate; + /** + * 보고일 년도 + */ + private int inInfoYear; + /** + * 보고일 월 + */ + private int inInfoMonth; + /** + * 보고일 일 + */ + private int inInfoDay; + /** + * 작성일 + */ + private java.sql.Date inRegdate; + /** + * 평가(1:특보, 2:판단, 3:중보, 4:통보, 5:기록, 6:조사, 7:참고) + */ + private int inJudge; + /** + * 경찰서 평가 + */ + private int inJudge1; + /** + * 지방청 평가 + */ + private int inJudge2; + /** + * 본청 평가 + */ + private int inJudge3; + /** + * 상보 (1:경찰서상보, 2:지방청상보) + */ + private int inReport; + /** + * 경찰서 상보 + */ + private int inReport1; + /** + * 지방청 상보 + */ + private int inReport2; + /** + * 본청 상보 + */ + private int inReport3; + /** + * 경찰서 계장 결재시퀀스 + */ + private int inJuseq1Section; + /** + * 경찰서 과장 결재시퀀스 + */ + private int inJuseq1Head; + /** + * 지방청 계장 결재시퀀스 + */ + private int inJuseq2Section; + /** + * 지방청 과장 결재시퀀스 + */ + private int inJuseq2Head; + /** + * 본청 계장 결재시퀀스 + */ + private int inJuseq3Section; + /** + * 본청 과장 결재시퀀스 + */ + private int inJuseq3Head; + /** + * 일괄입력자 경찰타입(1:외사,2:일반) + */ + private String inOfflineType = ""; + /** + * 일괄입력자 ID + */ + private String inOfflineUserid; + /** + * 완료여부 (1:완료) + */ + private String inComplete; + /** + * + */ + private String inOld; + /** + * 삭제여부 + */ + private String inDelete; + /** + * 상태코드(99:임시저장) + */ + private String inStateCode; + /** + * 평가 + */ + private int inJudge4; + /** + * 평가 + */ + private int inJudge5; + /** + * 평가 + */ + private int inJudge6; + /** + * 상보 + */ + private int inReport4; + /** + * 상보 + */ + private int inReport5; + /** + * 상보 + */ + private int inReport6; + /** + * 자동삭제여부 (1:자동삭제) + */ + private int inAutoRemove; + + /** + * 첨부파일1 객체 + */ + private MultipartFile fileObj1; + /** + * 첨부파일2 객체 + */ + private MultipartFile fileObj2; + /** + * 첨부파일3 객체 + */ + private MultipartFile fileObj3; + /** + * 첨부파일4 객체 + */ + private MultipartFile fileObj4; + /** + * 첨부파일5 객체 + */ + private MultipartFile fileObj5; + /** + * 보고일 문자열 + */ + private String strInfodate; + /** + * 상태 + */ + private String stateCodeName; + /** + * 분류1명 + */ + private String inCategory1Str; + /** + * 분류2명 + */ + private String inCategory2Str; + /** + * 분류3명 + */ + private String inCategory3Str; + /** + * 분류4명 + */ + private String inCategory4Str; + /** + * 분류가 조합된 문자열 ( 분류1>분류2>분류3>분류4 ) + */ + private String cateStrOrder; + /** + * 문서번호 + */ + private String docNo; + /** + * 보고자 (직급 보고자명) + */ + private String reporter; + /** + * 평가 in_judge에 대한 문자열 + */ + private String judgeStr; + /** + * 상보 문자열 + */ + private String fullReportStr; + /** + * 검토의견 + */ + private String juMsg; + + /* 결재 처리 목록 */ + /** + * 과장 결재 + */ + private String isHead; + /** + * 계장 결재 + */ + private String isSection; + private String isJudge1; + private String isJudge2; + private String isJudge3; + private String isJudge4; + private String isJudge5; + private String isJudge6; + private String isJudge7; + private String isReport1; + private String isReport2; + + private int stateCode1; + private int stateCode2; + + /* ReportVO를 목록으로 받기위함 */ + private List reportList; + + public List getReportList() { + return reportList; + } + public void setReportList(List reportList) { + this.reportList = reportList; + } + + public String getStrInfodate() { + return strInfodate; + } + public void setStrInfodate(String strInfodate) { + this.strInfodate = strInfodate; + } + public int getInSeq() { + return inSeq; + } + public void setInSeq(int inSeq) { + this.inSeq = inSeq; + } + public String getInAgencyCode() { + return inAgencyCode; + } + public void setInAgencyCode(String inAgencyCode) { + this.inAgencyCode = inAgencyCode; + } + public String getInPlaceCode() { + return inPlaceCode; + } + public void setInPlaceCode(String inPlaceCode) { + this.inPlaceCode = inPlaceCode; + } + public String getInPlaceName() { + return inPlaceName; + } + public void setInPlaceName(String inPlaceName) { + this.inPlaceName = inPlaceName; + } + public int getInPlaceNum() { + return inPlaceNum; + } + public void setInPlaceNum(int inPlaceNum) { + this.inPlaceNum = inPlaceNum; + } + public String getInType() { + return inType; + } + public void setInType(String inType) { + this.inType = inType; + } + public String getInCategory1() { + return inCategory1; + } + public void setInCategory1(String inCategory1) { + this.inCategory1 = inCategory1; + } + public String getReporter() { + return reporter; + } + public void setReporter(String reporter) { + this.reporter = reporter; + } + public String getInCategory2() { + return inCategory2; + } + public void setInCategory2(String inCategory2) { + this.inCategory2 = inCategory2; + } + public String getInCategory3() { + return inCategory3; + } + public void setInCategory3(String inCategory3) { + this.inCategory3 = inCategory3; + } + public String getInCategory4() { + return inCategory4; + } + public void setInCategory4(String inCategory4) { + this.inCategory4 = inCategory4; + } + + + public String getInUseCategory1() { + return inUseCategory1; + } + public void setInUseCategory1(String inUseCategory1) { + this.inUseCategory1 = inUseCategory1; + } + + public String getInUseCategory2() { + return inUseCategory2; + } + public void setInUseCategory2(String inUseCategory2) { + this.inUseCategory2 = inUseCategory2; + } + + public String getInUseCategory3() { + return inUseCategory3; + } + public void setInUseCategory3(String inUseCategory3) { + this.inUseCategory3 = inUseCategory3; + } + + public String getInUseCategory4() { + return inUseCategory4; + } + public void setInUseCategory4(String inUseCategory4) { + this.inUseCategory4 = inUseCategory4; + } + + + public String getInSubject() { + return inSubject; + } + public void setInSubject(String inSubject) { + this.inSubject = inSubject; + } + public String getInMemo() { + return inMemo; + } + public void setInMemo(String inMemo) { + this.inMemo = inMemo; + } + public String getInPlace1() { + return inPlace1; + } + public void setInPlace1(String inPlace1) { + this.inPlace1 = inPlace1; + } + public String getInPlace2() { + return inPlace2; + } + public void setInPlace2(String inPlace2) { + this.inPlace2 = inPlace2; + } + public String getInPosition() { + return inPosition; + } + public void setInPosition(String inPosition) { + this.inPosition = inPosition; + this.reporter = inPosition + " " + this.inName; + } + public String getInName() { + return inName; + } + public void setInName(String inName) { + this.inName = inName; + this.reporter = this.inPosition + " " + inName; + } + public String getInUserid() { + return inUserid; + } + public void setInUserid(String inUserid) { + this.inUserid = inUserid; + } + public String getInIp() { + return inIp; + } + public void setInIp(String inIp) { + this.inIp = inIp; + } + public String getInContent() { + return inContent; + } + public void setInContent(String inContent) { + this.inContent = inContent; + } + public String getInFile1() { + return inFile1; + } + public void setInFile1(String inFile1) { + this.inFile1 = inFile1; + } + public String getInFile2() { + return inFile2; + } + public void setInFile2(String inFile2) { + this.inFile2 = inFile2; + } + public String getInFile3() { + return inFile3; + } + public void setInFile3(String inFile3) { + this.inFile3 = inFile3; + } + public String getInFile4() { + return inFile4; + } + public void setInFile4(String inFile4) { + this.inFile4 = inFile4; + } + public String getInFile5() { + return inFile5; + } + public void setInFile5(String inFile5) { + this.inFile5 = inFile5; + } + public int getInFsseq() { + return inFsseq; + } + public void setInFsseq(int inFsseq) { + this.inFsseq = inFsseq; + } + public java.sql.Date getInInfodate() { + return inInfodate; + } + public void setInInfodate(java.sql.Date inInfodate) { + this.inInfodate = inInfodate; + } + public int getInInfoYear() { + return inInfoYear; + } + public void setInInfoYear(int inInfoYear) { + this.inInfoYear = inInfoYear; + } + public int getInInfoMonth() { + return inInfoMonth; + } + public void setInInfoMonth(int inInfoMonth) { + this.inInfoMonth = inInfoMonth; + } + public int getInInfoDay() { + return inInfoDay; + } + public void setInInfoDay(int inInfoDay) { + this.inInfoDay = inInfoDay; + } + public java.sql.Date getInRegdate() { + return inRegdate; + } + public void setInRegdate(java.sql.Date inRegdate) { + this.inRegdate = inRegdate; + } + public int getInJudge() { + return inJudge; + } + public void setInJudge(int inJudge) { + this.inJudge = inJudge; + switch (inJudge) { + case 1: + this.isJudge1 = STRCORRECT; + break; + case 2: + this.isJudge2 = STRCORRECT; + break; + case 3: + this.isJudge3 = STRCORRECT; + break; + case 4: + this.isJudge4 = STRCORRECT; + break; + case 5: + this.isJudge5 = STRCORRECT; + break; + case 6: + this.isJudge6 = STRCORRECT; + break; + case 7: + this.isJudge7 = STRCORRECT; + break; + default: + break; + } + } + public int getInJudge1() { + return inJudge1; + } + public void setInJudge1(int inJudge1) { + this.inJudge1 = inJudge1; + } + public int getInJudge2() { + return inJudge2; + } + public void setInJudge2(int inJudge2) { + this.inJudge2 = inJudge2; + } + public int getInJudge3() { + return inJudge3; + } + public void setInJudge3(int inJudge3) { + this.inJudge3 = inJudge3; + } + public int getInReport() { + return inReport; + } + public void setInReport(int inReport) { + this.inReport = inReport; + } + public int getInReport1() { + return inReport1; + } + public void setInReport1(int inReport1) { + this.inReport1 = inReport1; + if (inReport1 > 0) { + this.isReport1 = STRCORRECT; + } + } + public int getInReport2() { + return inReport2; + } + public void setInReport2(int inReport2) { + this.inReport2 = inReport2; + if (inReport2 > 0) { + this.isReport2 = STRCORRECT; + } + } + public int getInReport3() { + return inReport3; + } + public void setInReport3(int inReport3) { + this.inReport3 = inReport3; + } + public int getInJuseq1Section() { + return inJuseq1Section; + } + public void setInJuseq1Section(int inJuseq1Section) { + this.inJuseq1Section = inJuseq1Section; + } + public int getInJuseq1Head() { + return inJuseq1Head; + } + public void setInJuseq1Head(int inJuseq1Head) { + this.inJuseq1Head = inJuseq1Head; + } + public int getInJuseq2Section() { + return inJuseq2Section; + } + public void setInJuseq2Section(int inJuseq2Section) { + this.inJuseq2Section = inJuseq2Section; + } + public int getInJuseq2Head() { + return inJuseq2Head; + } + public void setInJuseq2Head(int inJuseq2Head) { + this.inJuseq2Head = inJuseq2Head; + } + public int getInJuseq3Section() { + return inJuseq3Section; + } + public void setInJuseq3Section(int inJuseq3Section) { + this.inJuseq3Section = inJuseq3Section; + } + public int getInJuseq3Head() { + return inJuseq3Head; + } + public void setInJuseq3Head(int inJuseq3Head) { + this.inJuseq3Head = inJuseq3Head; + } + public String getInOfflineType() { + return inOfflineType; + } + public void setInOfflineType(String inOfflineType) { + this.inOfflineType = inOfflineType; + } + public String getInOfflineUserid() { + return inOfflineUserid; + } + public void setInOfflineUserid(String inOfflineUserid) { + this.inOfflineUserid = inOfflineUserid; + } + public String getInComplete() { + return inComplete; + } + public void setInComplete(String inComplete) { + this.inComplete = inComplete; + } + public String getInOld() { + return inOld; + } + public void setInOld(String inOld) { + this.inOld = inOld; + } + public String getInDelete() { + return inDelete; + } + public void setInDelete(String inDelete) { + this.inDelete = inDelete; + } + public String getInStateCode() { + return inStateCode; + } + public void setInStateCode(String inStateCode) { + this.inStateCode = inStateCode; + + this.stateCode1 = Character.getNumericValue(inStateCode.charAt(0)); + this.stateCode2 = Character.getNumericValue(inStateCode.charAt(1)); + + this.stateCodeName = ReportCommon.getStateCodeNm(inStateCode); + + // 결재 처리목록에서 사용할 변수 설정 + int myGroupCode = ReportCommon.getMyGroupCode(); + int stateChar1 = Character.getNumericValue(inStateCode.charAt(0)); + int stateChar2 = Character.getNumericValue(inStateCode.charAt(1)); + if (stateChar2 == 2 || stateChar2 == 4 || stateChar1 > myGroupCode) { + this.isSection = STRCORRECT; + } + if (stateChar2 == 3 || stateChar2 == 4 || stateChar1 > myGroupCode) { + this.isHead = STRCORRECT; + } + } + public int getInJudge4() { + return inJudge4; + } + public void setInJudge4(int inJudge4) { + this.inJudge4 = inJudge4; + } + public int getInJudge5() { + return inJudge5; + } + public void setInJudge5(int inJudge5) { + this.inJudge5 = inJudge5; + } + public int getInJudge6() { + return inJudge6; + } + public void setInJudge6(int inJudge6) { + this.inJudge6 = inJudge6; + } + public int getInReport4() { + return inReport4; + } + public void setInReport4(int inReport4) { + this.inReport4 = inReport4; + } + public int getInReport5() { + return inReport5; + } + public void setInReport5(int inReport5) { + this.inReport5 = inReport5; + } + public int getInReport6() { + return inReport6; + } + public void setInReport6(int inReport6) { + this.inReport6 = inReport6; + } + public MultipartFile getFileObj1() { + return fileObj1; + } + public void setFileObj1(MultipartFile fileObj1) { + this.fileObj1 = fileObj1; + } + public MultipartFile getFileObj2() { + return fileObj2; + } + public void setFileObj2(MultipartFile fileObj2) { + this.fileObj2 = fileObj2; + } + public MultipartFile getFileObj3() { + return fileObj3; + } + public void setFileObj3(MultipartFile fileObj3) { + this.fileObj3 = fileObj3; + } + public MultipartFile getFileObj4() { + return fileObj4; + } + public void setFileObj4(MultipartFile fileObj4) { + this.fileObj4 = fileObj4; + } + public MultipartFile getFileObj5() { + return fileObj5; + } + public void setFileObj5(MultipartFile fileObj5) { + this.fileObj5 = fileObj5; + } + public String getStateCodeName() { + return stateCodeName; + } + public void setStateCodeName(String stateCodeName) { + this.stateCodeName = stateCodeName; + } + public String getInCategory1Str() { + return inCategory1Str; + } + public void setInCategory1Str(String inCategory1Str) { + this.inCategory1Str = inCategory1Str; + } + public String getInCategory2Str() { + return inCategory2Str; + } + public void setInCategory2Str(String inCategory2Str) { + this.inCategory2Str = inCategory2Str; + } + public String getInCategory3Str() { + return inCategory3Str; + } + public void setInCategory3Str(String inCategory3Str) { + this.inCategory3Str = inCategory3Str; + } + public String getInCategory4Str() { + return inCategory4Str; + } + public void setInCategory4Str(String inCategory4Str) { + this.inCategory4Str = inCategory4Str; + } + public int getInAutoRemove() { + return inAutoRemove; + } + public void setInAutoRemove(int inAutoRemove) { + this.inAutoRemove = inAutoRemove; + } + public String getDocNo() { + return docNo; + } + public void setDocNo(String docNo) { + this.docNo = docNo; + } + public String getJudgeStr() { + return judgeStr; + } + public void setJudgeStr(String judgeStr) { + this.judgeStr = judgeStr; + } + public String getFullReportStr() { + return fullReportStr; + } + public void setFullReportStr(String fullReportStr) { + this.fullReportStr = fullReportStr; + } + public String getJuMsg() { + return juMsg; + } + public void setJuMsg(String juMsg) { + this.juMsg = juMsg; + } + public String getIsHead() { + return isHead; + } + public String getIsSection() { + return isSection; + } + public String getIsJudge1() { + return isJudge1; + } + public String getIsJudge2() { + return isJudge2; + } + public String getIsJudge3() { + return isJudge3; + } + public String getIsJudge4() { + return isJudge4; + } + public String getIsJudge5() { + return isJudge5; + } + public String getIsJudge6() { + return isJudge6; + } + public String getIsJudge7() { + return isJudge7; + } + public String getIsReport1() { + return isReport1; + } + public String getIsReport2() { + return isReport2; + } + public String getCateStrOrder() { + return cateStrOrder; + } + public void setCateStrOrder(String cateStrOrder) { + this.cateStrOrder = cateStrOrder; + } + + public int getStateCode1() { + return stateCode1; + } + public void setStateCode1(int stateCode1) { + this.stateCode1 = stateCode1; + } + public int getStateCode2() { + return stateCode2; + } + public void setStateCode2(int stateCode2) { + this.stateCode2 = stateCode2; + } + @Override + public String toString() { + return "ReportVO [inSeq=" + inSeq + ", inAgencyCode=" + inAgencyCode + + ", inPlaceCode=" + inPlaceCode + ", inPlaceName=" + + inPlaceName + ", inPlaceNum=" + inPlaceNum + ", inType=" + + inType + ", inCategory1=" + inCategory1 + ", inCategory2=" + + inCategory2 + ", inCategory3=" + inCategory3 + + ", inCategory4=" + inCategory4 + ", inSubject=" + inSubject + + ", inMemo=" + inMemo + ", inPlace1=" + inPlace1 + + ", inPlace2=" + inPlace2 + ", inPosition=" + inPosition + + ", inName=" + inName + ", inUserid=" + inUserid + ", inIp=" + + inIp + ", inContent=" + inContent + ", inFile1=" + inFile1 + + ", inFile2=" + inFile2 + ", inFile3=" + inFile3 + + ", inFile4=" + inFile4 + ", inFile5=" + inFile5 + + ", inFsseq=" + inFsseq + ", inInfodate=" + inInfodate + + ", inInfoYear=" + inInfoYear + ", inInfoMonth=" + inInfoMonth + + ", inInfoDay=" + inInfoDay + ", inRegdate=" + inRegdate + + ", inJudge=" + inJudge + ", inJudge1=" + inJudge1 + + ", inJudge2=" + inJudge2 + ", inJudge3=" + inJudge3 + + ", inReport=" + inReport + ", inReport1=" + inReport1 + + ", inReport2=" + inReport2 + ", inReport3=" + inReport3 + + ", inJuseq1Section=" + inJuseq1Section + ", inJuseq1Head=" + + inJuseq1Head + ", inJuseq2Section=" + inJuseq2Section + + ", inJuseq2Head=" + inJuseq2Head + ", inJuseq3Section=" + + inJuseq3Section + ", inJuseq3Head=" + inJuseq3Head + + ", inOfflineType=" + inOfflineType + ", inOfflineUserid=" + + inOfflineUserid + ", inComplete=" + inComplete + ", inOld=" + + inOld + ", inDelete=" + inDelete + ", inStateCode=" + + inStateCode + ", inJudge4=" + inJudge4 + ", inJudge5=" + + inJudge5 + ", inJudge6=" + inJudge6 + ", inReport4=" + + inReport4 + ", inReport5=" + inReport5 + ", inReport6=" + + inReport6 + ", inAutoRemove=" + inAutoRemove + ", fileObj1=" + + fileObj1 + ", fileObj2=" + fileObj2 + ", fileObj3=" + + fileObj3 + ", fileObj4=" + fileObj4 + ", fileObj5=" + + fileObj5 + ", strInfodate=" + strInfodate + + ", stateCodeName=" + stateCodeName + ", inCategory1Str=" + + inCategory1Str + ", inCategory2Str=" + inCategory2Str + + ", inCategory3Str=" + inCategory3Str + ", inCategory4Str=" + + inCategory4Str + ", inUseCategory1="+ inUseCategory1 + + ", inUseCategory2" + inUseCategory2 + " ,inUseCategory3" + + inUseCategory3 + ", inUseCategory4=" + inUseCategory4 + + ", docNo=" + docNo + ", reporter=" + + reporter + ", judgeStr=" + judgeStr + ", fullReportStr=" + + fullReportStr + ", juMsg=" + juMsg + ", isHead=" + isHead + + ", isSection=" + isSection + ", isJudge2=" + isJudge2 + + ", isJudge3=" + isJudge3 + ", isJudge4=" + isJudge4 + + ", isJudge5=" + isJudge5 + ", isJudge6=" + isJudge6 + + ", isJudge7=" + isJudge7 + ", isReport1=" + isReport1 + + ", isReport2=" + isReport2 + ", reportList=" + reportList + + "]"; + } +} \ No newline at end of file diff --git a/src/main/java/kcg/faics/report/vo/package-info.java b/src/main/java/kcg/faics/report/vo/package-info.java new file mode 100644 index 0000000..8bdb0cd --- /dev/null +++ b/src/main/java/kcg/faics/report/vo/package-info.java @@ -0,0 +1,8 @@ +/** + * 견문 관련 Value Object 패키지. + */ +/** + * @author hayoungji + * + */ +package kcg.faics.report.vo; \ No newline at end of file diff --git a/src/main/java/kcg/faics/report/web/ReportCommon.java b/src/main/java/kcg/faics/report/web/ReportCommon.java new file mode 100644 index 0000000..361df0a --- /dev/null +++ b/src/main/java/kcg/faics/report/web/ReportCommon.java @@ -0,0 +1,256 @@ +package kcg.faics.report.web; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.cmmn.vo.CodeVO; +import kcg.faics.member.Duty; +import kcg.faics.member.vo.MemberVO; +import kcg.faics.report.vo.ReportSearchVO; +import kcg.faics.report.vo.ReportVO; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.UserUtil; + +/** + * 견문 공통 클래스. + * @author 하영지 + * @since 16. 10. 14. + */ +@Component +public class ReportCommon { + + /** + * 접속한 사용자 정보를 담을 객체 + */ + private static LoginUserVO user = null; + + /** + * 코드관련 정보 인터페이스. + */ + public static CodeService codeService; + + @Autowired + private CodeService codeServInstance; + + @PostConstruct + private void init() { + codeService = codeServInstance; + } + + + /** + * 유저타입명을 반환한다. + * @return String + */ + public static String getUserTypeName() { + if (user == null) { + user = UserUtil.getMemberInfo(); + } + + if (UserUtil.isFa()) { + return "mamber.usertype.fa"; + } else if (UserUtil.isNoFa()) { + return "mamber.usertype.nofa"; + } else { + return "member.usertype.unknown"; + } + } + + /** + * 견문 결재 타입을 반환한다. + * @param inStateCode 견문 상태 코드 + * @return 결재 타입 + */ + public static int getApprovalType(final String inStateCode) { + int docGroupCode = getMyGroupCode(); + int stateCode0 = Character.getNumericValue(inStateCode.charAt(0)); + int stateCode1 = Character.getNumericValue(inStateCode.charAt(1)); + + if ((stateCode0 > 1 || (stateCode0 == 1 && stateCode1 >= 2)) && docGroupCode == 1) { + return 1; + } else if ((stateCode0 > 2 || (stateCode0 == 2 && stateCode1 >= 2)) && docGroupCode <= 2) { + return 2; + } else if (stateCode0 == 3 && stateCode1 >= 2 && docGroupCode <= 3) { + return 3; + } + + return 0; + } + + /** + * 해당 소속 코드의 상위 소속 코드를 반환한다. + * + * @param placeCode 소속코드 + * @return 소속코드 + */ + public static String getAgencyCode(final String placeCode) { + try { + return codeService.getPlace1HighCode(placeCode); + } catch (Exception e) { + return placeCode; + } + } + + /** + * 소속명을 약칭으로 반환한다. + * + * @param placeStr 소속명 + * @return 소속약칭 + */ + public static String getPlaceShortName(final String placeStr) { + String result = placeStr; + + result = result.replace("지방해양경찰청", "청"); + result = result.replace("해양경찰서", "서"); + result = result.replace("해양경찰학교", "경찰학교"); + + return result; + } + + /** + * 견문의 상태코드에 따라 상태명을 반환한다. + * + * @param stateCode 견문상태코드 + * @return 견문 상태 텍스트 + */ + public static String getStateCodeNm(final String stateCode) { + String state = ""; + + if (stateCode.length() != 2) { + return "Unknown"; + } + if (stateCode.equals("99")) { + return "임시 저장"; + } + if (Character.getNumericValue(stateCode.charAt(0)) > getMyGroupCode()) { + return "결재 완료"; + } + + state = "Unknown"; + switch (stateCode.charAt(1)) { + case '1': + state = "결재 대기"; + break; + case '2': + state = "계장 결재"; + break; + case '3': + state = "과장 결재"; + break; + case '4': + state = "결재 완료"; + break; + default: + break; + } + return state; + } + + + /** + * 접속한 사용자의 소속에 따른 사용자 그룹코드를 반환한다. + * + * @return 그룹코드 + */ + public static int getMyGroupCode() { + LoginUserVO user = UserUtil.getMemberInfo(); + return getGroupCode(user.getPlace1()); + } + /** + * 소속 코드에 따른 사용자 그룹코드를 반환한다. + * + * @param code 소속코드(PS00) + * @return 그룹코드 + */ + //190906 최형석 + //해양경찰청과 동일한 사이버외사요원 소속추가 + public static int getGroupCode(final String code) { + if ("PS00".equalsIgnoreCase(code) || "PS20".equalsIgnoreCase(code)) { // 본부 + return 3; + } else if (isRegional(code)) { // 지방청 + return 2; + } else { // 경찰서 + return 1; + } + } + + /** + * 소속 코드가 지방청인지 판단한다. + * + * @param placeCode 소속 코드 + * @return 지방청이면 true, 아니면 false + */ + public static boolean isRegional(final String placeCode) { + List agencyCategory = null; + try { + agencyCategory = codeService.getPlace1SubList(placeCode); + } catch (Exception e) { + agencyCategory = new ArrayList(); + } + + return !agencyCategory.isEmpty(); + } + + /** + * 접속한 사용자 정보를 견문 검색 조건 객체에 저장하여 반환한다. + * + * @param reportSearchVO 견문 검색 조건 객체 + * @return 접속한 사용자 정보가 포함된 견문 검색 조건 객체 + */ + public static ReportSearchVO setSearchUserInfo(final ReportSearchVO reportSearchVO) { + ReportSearchVO result = reportSearchVO; + + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + + result.setUserid(loginUserVO.getUserid()); + result.setUsegrade(loginUserVO.getUsegrade()); + result.setType(loginUserVO.getType()); + result.setMyGroupCode(ReportCommon.getMyGroupCode()); + result.setDuties(loginUserVO.getDutiesStr()); + result.setUserPlace(loginUserVO.getPlace1()); + + return result; + } + + /** + * 결재에서 사용할 직위 코드를 반환한다. + * + *
+	 * 사용자 테이블에는 문자형 (03:계장, 04:과장) 이고
+	 * php소스상 결재부문에서 사용하는 직위코드는 숫자형 (1:나머지, 2:계장, 3:과장) 이다.
+	 * 
+ * + * @param duties + * 사용자 테이블에 저장된 직위 코드 + * @return (1:나머지, 2:계장, 3:과장) + */ + public static int getDutiesCodeForApprove(final String duties) { + int dutiesCode = 1; + if (duties == null) { + return dutiesCode; + } + + switch (duties) { + case Duty.SECTION: + dutiesCode = 2; + break; + case Duty.HEAD: + dutiesCode = 3; + break; + default: + break; + } + + return dutiesCode; + } + +} diff --git a/src/main/java/kcg/faics/report/web/ReportController.java b/src/main/java/kcg/faics/report/web/ReportController.java new file mode 100644 index 0000000..68bce08 --- /dev/null +++ b/src/main/java/kcg/faics/report/web/ReportController.java @@ -0,0 +1,655 @@ +package kcg.faics.report.web; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.nio.file.Files; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import kcg.faics.cmmn.file.FileResponser; +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.member.UserType; +import kcg.faics.member.service.MemberService; +import kcg.faics.member.vo.MemberVO; +import kcg.faics.report.service.ReportCategoryService; +import kcg.faics.report.service.ReportJudgeService; +import kcg.faics.report.service.ReportService; +import kcg.faics.report.service.impl.ReportFileServiceImpl; +import kcg.faics.report.vo.ReportJudgeVO; +import kcg.faics.report.vo.ReportSearchVO; +import kcg.faics.report.vo.ReportVO; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.UserUtil; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpStatus; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.util.FileCopyUtils; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +/** + * 견문 기본 컨트롤러입니다. + * @author 하영지 + * @since 2016. 10. 07. + */ +@Controller +@RequestMapping("/report") +public class ReportController { + /** + * properties값을 가져오는 인터페이스. + **/ + @Resource(name = "propertiesService") + private EgovPropertyService propertiesService; + + /** + * 견문 기본 인터페이스이다. + */ + @Resource(name = "reportService") + private ReportService reportService; + + /** + * 견문 결재 인터페이스 + */ + @Resource(name = "reportJudgeService") + private ReportJudgeService judgeService; + + /** + * 사용자 인터페이스 + */ + @Resource(name = "memberService") + private MemberService memberService; + + /** + * Validator - 유효성 검사 + **/ + @Resource(name = "beanValidator") + private DefaultBeanValidator beanValidator; + + /** + * 코드 인터페이스 + */ + @Resource(name = "codeService") + private CodeService codeService; + + /** + * 견문 분류 인터페이스 + */ + @Resource(name = "reportCategoryService") + private ReportCategoryService cateService; + + + + /** + * 스케쥴러를 통해 자동 삭제가 설정되고 3개월이상(SQL문에 설정했음) 지난 견문을 삭제한다. + * 매일 새벽 3시 + * + * 20170329 해경본부 협의결과 + * 실적 조회를 위해 완전 삭제하면 안된다. 현재로써는 삭제를 막고 차년도 과업에서 보완하기로 함. + */ + @Scheduled(cron = "0 0 3 * * *") + public void autoRemover() { + try { + //String removeList = reportService.selectAutoRemoveList(); + //String[] removeReports = removeList.split(","); + //reportService.deleteSelected(removeReports); + } catch (Exception e) { + // TODO: handle exception + } + } + + /** + * 임시저장목록을 조회한다. + * + * @param rptSearchVO 견문 검색조건 vo + * @param model 모델객체 + * @return 임시저장목록 화면 + */ + @RequestMapping(value = "/saveList.do") + public String reportSaveList(@ModelAttribute("reportSearchVO") final ReportSearchVO rptSearchVO, final Model model) { + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + try { + rptSearchVO.setUserid(loginUserVO.getUserid()); + rptSearchVO.setUsegrade(loginUserVO.getUsegrade()); + rptSearchVO.setType(loginUserVO.getType()); + + /* 페이징 처리 정보 */ + rptSearchVO.setPageUnit(propertiesService.getInt("pageUnit")); + rptSearchVO.setPageSize(propertiesService.getInt("pageSize")); + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(rptSearchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(rptSearchVO.getRecordCountPerPage()); + paginationInfo.setPageSize(rptSearchVO.getPageSize()); + + rptSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + rptSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + rptSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + int totSearchCnt = reportService.selectSaveListCnt(rptSearchVO); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + + // 임시저장목록은 전체 갯수가 의미 없으므로 검색결과 총 갯수로 대신한다. + model.addAttribute("totalCnt", totSearchCnt); + + List reportList = reportService.selectSaveList(rptSearchVO); + model.addAttribute("reportList", reportList); + + model.addAttribute("reportSearchVO", rptSearchVO); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "report/reportSaveList.tiles"; + } + + /** + * 견문 입력 화면을 반환한다. + * @param model 맵 모델 + * @return String 뷰이름 + */ + @RequestMapping(value = "/add.do", method = RequestMethod.GET) + public String insertReport(final Model model) { + + try { + model.addAttribute("category1", cateService.getUseCategory1()); + model.addAttribute("category2", cateService.getUseCategory2()); + model.addAttribute("category3", cateService.getUseCategory3()); + model.addAttribute("category4", cateService.getUseCategory4()); + + model.addAttribute("myGroupCode", ReportCommon.getMyGroupCode()); + + if (!model.containsAttribute("reportVO")) { + ReportVO reportVO = new ReportVO(); + LoginUserVO userVO = UserUtil.getMemberInfo(); + + reportVO.setInType(String.valueOf(userVO.getType())); + reportVO.setInAgencyCode(ReportCommon.getAgencyCode(userVO.getPlace1())); + reportVO.setInPlaceCode(userVO.getPlace1()); + reportVO.setInPlaceName(ReportCommon.getPlaceShortName(userVO.getPlace1Str())); + reportVO.setInPlaceNum(reportService.selectPlaceNum(reportVO)); + + model.addAttribute("reportVO", reportVO); + } + + } catch (Exception e) { + e.printStackTrace(); + } + + + return "report/reportAdd.tiles"; + } + + /** + * 견문을 입력한 뒤 입력된 견문의 상세 조회 화면으로 이동한다. + * @param multiRequest + * @param reportVO 견문 모델 객체 + * @param bindingResult + * @param model + * @param status + * @return String 뷰 이름 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/add.do", method = RequestMethod.POST) + public String insertReport(final MultipartHttpServletRequest multiRequest, @ModelAttribute("reportVO") final ReportVO reportVO, + final BindingResult bindingResult, final Model model, final SessionStatus status) throws Exception { + // 사용자 인증 검사 + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (isAuthenticated) { + // 유효성 검사 + beanValidator.validate(reportVO, bindingResult); + if (bindingResult.hasErrors()) { + model.addAttribute("reportVO", reportVO); + return insertReport(model); + } + + // 사용자로부터 받아오는 정보 + LoginUserVO userVO = UserUtil.getMemberInfo(); + reportVO.setInPlace1(userVO.getPlace1Str()); + reportVO.setInPlace2(userVO.getPlace2Str()); + reportVO.setInPosition(userVO.getPositionStr()); + reportVO.setInName(userVO.getName()); + reportVO.setInUserid(userVO.getUserid()); + reportVO.setInIp(multiRequest.getRemoteAddr()); + reportVO.setInType(String.valueOf(userVO.getType())); + + reportVO.setInAgencyCode(ReportCommon.getAgencyCode(userVO.getPlace1())); + reportVO.setInPlaceCode(userVO.getPlace1()); + reportVO.setInPlaceName(ReportCommon.getPlaceShortName(userVO.getPlace1Str())); + reportVO.setInPlaceNum(reportService.selectPlaceNum(reportVO)); + + // 보고일 파싱 + String infoDate = reportVO.getStrInfodate().toString(); + reportVO.setInInfoYear(Integer.valueOf(infoDate.split("-")[0])); + reportVO.setInInfoMonth(Integer.valueOf(infoDate.split("-")[1])); + reportVO.setInInfoDay(Integer.valueOf(infoDate.split("-")[2])); + + // 파일 저장 및 데이터 입력 + final Map fileMap = multiRequest.getFileMap(); + HashMap map = reportService.insert(reportVO, fileMap); + + status.setComplete(); + + int seq = (Integer) map.get("seq"); + int result = (Integer) map.get("result"); + if (result == 1 && seq > 0) { + reportVO.setInSeq(seq); + model.addAttribute("submitResultMsg", "입력이 완료되었습니다. 수정화면으로 이동합니다."); + model.addAttribute("submitResultSeq", seq); + return this.insertReport(model); + } + } + return "error/bizError"; + } + + /** + * 선택된 견문의 조회/수정화면을 반환한다. + * + * @param reportVO 임시 저장된 견문 객체 + * @param model model객체 + * @return 견문 수정 화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = {"/update.do", "/updateApprove.do", "/updateJudge.do", "/updateMyReport.do", "/updatePresent.do", "/updateList.do"}, method = RequestMethod.GET) + public String update(@ModelAttribute("reportVO") final ReportVO reportVO, final Model model) throws Exception { + ReportVO vo = reportService.select(reportVO); + + + vo.setStateCodeName(ReportCommon.getStateCodeNm(vo.getInStateCode())); + model.addAttribute("reportVO", vo); + + LoginUserVO user = UserUtil.getMemberInfo(); + model.addAttribute("loginUser", user); + + int myGroupCode = ReportCommon.getMyGroupCode(); + model.addAttribute("myGroupCode", myGroupCode); + boolean modifyProcess = ( + (!"99".equals(vo.getInStateCode())) + && + ( + Character.getNumericValue(vo.getInStateCode().charAt(0)) > myGroupCode + || + '4' == vo.getInStateCode().charAt(1) + ) + ); + boolean modifyAuth = !user.getUserid().equals(vo.getInUserid()); + model.addAttribute("viewDoc", ((modifyProcess | modifyAuth) & !UserUtil.isSysAdmin())); + + model.addAttribute("statusName", vo.getStateCodeName()); + + model.addAttribute("myDutiesCode", ReportCommon.getDutiesCodeForApprove(user.getDuties())); + model.addAttribute("docGroupCode", ReportCommon.getGroupCode(vo.getInPlaceCode())); + + model.addAttribute("ju1section", judgeService.selectOne(vo.getInJuseq1Section())); + model.addAttribute("ju2section", judgeService.selectOne(vo.getInJuseq2Section())); + model.addAttribute("ju3section", judgeService.selectOne(vo.getInJuseq3Section())); + model.addAttribute("ju1head", judgeService.selectOne(vo.getInJuseq1Head())); + model.addAttribute("ju2head", judgeService.selectOne(vo.getInJuseq2Head())); + model.addAttribute("ju3head", judgeService.selectOne(vo.getInJuseq3Head())); + + if (!StringUtils.isBlank(vo.getInOfflineType()) && Integer.parseInt(vo.getInOfflineType()) > 0) { + MemberVO memberVO = getOffUser(vo.getInOfflineType(), vo.getInOfflineUserid()); + if (memberVO != null) { + memberVO.setPlace1Str(ReportCommon.getPlaceShortName(memberVO.getPlace1Str())); + model.addAttribute("offUser", memberVO); + } + } + + //분류 1,2,3,4 + model.addAttribute("category1", cateService.getUseCategory1()); + model.addAttribute("category2", cateService.getUseCategory2()); + model.addAttribute("category3", cateService.getUseCategory3()); + model.addAttribute("category4", cateService.getUseCategory4()); + + model.addAttribute("inUseCategory1", vo.getInUseCategory1()); + model.addAttribute("inUseCategory2", vo.getInUseCategory2()); + model.addAttribute("inUseCategory3", vo.getInUseCategory3()); + model.addAttribute("inUseCategory4", vo.getInUseCategory4()); + + return "report/reportModify.tiles"; + } + + /** + * 견문을 수정하고 조회 페이지를 반환한다. + * + * @param multiRequest 멀티리퀘스트객체 + * @param reportVO 견문 객체 + * @param bindingResult 바인딩객체 + * @param model 모델 객체 + * @param status 세션 객체 + * @return 조회 화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = {"/update.do", "/updateReport.do"}, method = RequestMethod.POST) + public String updateReport(@ModelAttribute("reportVO") final ReportVO reportVO, final MultipartHttpServletRequest multiRequest, + final BindingResult bindingResult, final Model model, final SessionStatus status) throws Exception { + // 사용자 인증 검사 + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (isAuthenticated) { + // 유효성 검사 + beanValidator.validate(reportVO, bindingResult); + if (bindingResult.hasErrors()) { + return update(reportVO, model); + } + + ReportVO vo = reportService.select(reportVO); + + vo.setInCategory1(reportVO.getInCategory1()); + vo.setInCategory2(reportVO.getInCategory2()); + vo.setInCategory3(reportVO.getInCategory3()); + vo.setInCategory4(reportVO.getInCategory4()); + vo.setInUseCategory1(reportVO.getInUseCategory1()); + vo.setInUseCategory2(reportVO.getInUseCategory2()); + vo.setInUseCategory3(reportVO.getInUseCategory3()); + vo.setInUseCategory4(reportVO.getInUseCategory4()); + vo.setInSubject(reportVO.getInSubject()); + vo.setInContent(reportVO.getInContent()); + + + if (!vo.getInStateCode().equals(reportVO.getInStateCode())) { + vo.setInStateCode(reportVO.getInStateCode()); + } + + // 보고일 파싱 + String infoDate = reportVO.getStrInfodate().toString(); + vo.setInInfoYear(Integer.valueOf(infoDate.split("-")[0])); + vo.setInInfoMonth(Integer.valueOf(infoDate.split("-")[1])); + vo.setInInfoDay(Integer.valueOf(infoDate.split("-")[2])); + + // 파일 저장 및 데이터 입력 + String[] deleteFiles = multiRequest.getParameterValues("deleteFile"); + final Map fileMap = multiRequest.getFileMap(); + + // 관리자가 수정했을 때 처리 + if (UserUtil.isSysAdmin()) { + int judge = 0; + + // 경찰서 과장 결재 정보 + ReportJudgeVO judgeVO = judgeService.selectOne(vo.getInJuseq1Head()); + if (judgeVO != null) { + judgeVO.setJuJudge(reportVO.getInJudge1()); + judgeService.update(judgeVO); + vo.setInJudge1(reportVO.getInJudge1()); + judge = reportVO.getInJudge1(); + } + + // 지방청 과장 결재 정보 + judgeVO = judgeService.selectOne(vo.getInJuseq2Head()); + if (judgeVO != null) { + judgeVO.setJuJudge(reportVO.getInJudge2()); + judgeService.update(judgeVO); + vo.setInJudge2(reportVO.getInJudge2()); + judge = reportVO.getInJudge2(); + } + + // 본청 과장 결재 정보 + judgeVO = judgeService.selectOne(vo.getInJuseq3Head()); + if (judgeVO != null) { + judgeVO.setJuJudge(reportVO.getInJudge3()); + judgeService.update(judgeVO); + vo.setInJudge3(reportVO.getInJudge3()); + judge = reportVO.getInJudge3(); + } + + if (judge > 0) { + vo.setInJudge(judge); + } + + // 상보처리 + if (reportVO.getInReport() > 0) { + int currGroupCode = Character.getNumericValue(vo.getInStateCode().charAt(0)); + vo.setInReport(1); + switch (currGroupCode) { + case 1: + vo.setInReport1(1); + break; + case 2: + vo.setInReport2(1); + break; + case 3: + vo.setInReport3(1); + break; + default: + break; + } + currGroupCode++; + vo.setInStateCode(String.valueOf(currGroupCode) + "1"); + } + } + + // 견문 수정 + HashMap map = reportService.update(vo, fileMap, deleteFiles); + + status.setComplete(); + + int seq = (Integer) map.get("seq"); + int result = (Integer) map.get("result"); + if (result == 1 && seq > 0) { + + String requestUrl = multiRequest.getRequestURL().toString(); + if (requestUrl.indexOf("/updateReport.do") > 0) { + model.addAttribute("submitResultMsg", "성공적으로 보고되었습니다."); + } else { + model.addAttribute("submitResultMsg", "수정이 완료되었습니다."); + } + return this.update(reportVO, model); + } + } + + return "error/bizError"; + } + + /** + * 일괄입력 유저 정보를 반환한다. + * + * @param offType 일괄입력 종류 + * @param offUserId 일괄입력 사용자id + * @return 사용자vo + * @throws Exception 기본 예외 처리 + */ + private MemberVO getOffUser(final String offType, final String offUserId) throws Exception { + MemberVO memberVO = new MemberVO(); + if ("1".equals(offType)) { + memberVO.setUsertype(UserType.FA); + } + memberVO.setUserid(offUserId); + + try { + memberVO = memberService.select(memberVO); + } catch (Exception e) { + } + + return memberVO; + } + + /** + * 선택된 견문을 삭제한다. + * + * @param map 맵 객체 + * @param status SessionStatus 객체 + * @return 견문 임시저장목록 화면 + * @throws Exception 기본예외처리 + */ + @ResponseBody + @RequestMapping(value = "/delete.do") + public int deleteAjax(@RequestParam final HashMap map, final SessionStatus status) throws Exception { + try { + int result = 0; + String[] selectedSeq = new String[map.size()]; + int cnt = 0; + for (String key : map.keySet()) { + selectedSeq[cnt] = map.get(key).toString(); + cnt++; + } + + if (selectedSeq != null) { + result = reportService.deleteSelected(selectedSeq); + } + status.setComplete(); + + return result; + } catch (Exception e) { + return 0; + } + } + + /** + * 선택된 견문을 삭제하고 임시저장목록을 반환한다. + * + * @param reportVO 견문 객체 + * @param model model객체 + * @param status SessionStatus 객체 + * @return 견문 임시저장목록 화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/deleteAndSaveList.do") + public String delete(@ModelAttribute final ReportVO reportVO, final Model model, + final SessionStatus status) throws Exception { + try { + String[] selectedSeq = {String.valueOf(reportVO.getInSeq())}; + + if (selectedSeq != null) { + reportService.deleteSelected(selectedSeq); + } + status.setComplete(); + + return this.reportSaveList(new ReportSearchVO(), model); + + } catch (Exception e) { + return "error/bizError"; + } + + } + + /** + * 파일을 반환한다. + * + * @param seq 파일시퀀스 + * @param no 파일명 + * @param request HttpServletRequest 객체 + * @param response HttpServletResponse 객체 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/download.do") + public void fileResponse(final int seq, final int no, final HttpServletRequest request, final HttpServletResponse response) throws Exception { + ReportVO reportVO = new ReportVO(); + reportVO.setInSeq(seq); + reportVO = reportService.select(reportVO); + + String filename = ""; + if (no == 1) { + filename = reportVO.getInFile1(); + } else if (no == 2) { + filename = reportVO.getInFile2(); + } else if (no == 3) { + filename = reportVO.getInFile3(); + } else if (no == 4) { + filename = reportVO.getInFile4(); + } else if (no == 5) { + filename = reportVO.getInFile5(); + } + + if (StringUtils.isNotBlank(filename)) { + filename = filename.trim(); + String fileFullPath = propertiesService.getString(ReportFileServiceImpl.FILE_PATH_KEYWORD) + String.valueOf(reportVO.getInFsseq()) + "/" + filename; + + File file = new File(fileFullPath); + if (file.isFile()) { + FileResponser.setResponse(file, filename, request, response); + BufferedInputStream in = null; + + try { + in = new BufferedInputStream(new FileInputStream(file)); + FileCopyUtils.copy(in, response.getOutputStream()); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (in != null) { + try { + in.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } else { + response.setStatus(HttpStatus.NOT_FOUND.value()); + throw new Exception(); + } + } else { + response.setStatus(HttpStatus.NOT_FOUND.value()); + throw new Exception(); + } + } + + /** + * 견문보고서를 인쇄한다. + * + * @param inSeq 견문시퀀스 + * @param model 모델객체 + * @return 견문보고서 화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/print.do") + public String print(@RequestParam("inSeq") final int inSeq, final Model model) throws Exception { + ReportVO reportVO = new ReportVO(); + reportVO.setInSeq(inSeq); + reportVO = reportService.select(reportVO); + model.addAttribute("reportVO", reportVO); + + int stateCode1 = Character.getNumericValue(reportVO.getInStateCode().charAt(0)); + if (stateCode1 <= ReportCommon.getMyGroupCode()) { + int seqSection = 0; + int seqHead = 0; + + switch (stateCode1) { + case 1: + seqSection = reportVO.getInJuseq1Section(); + seqHead = reportVO.getInJuseq1Head(); + break; + case 2: + seqSection = reportVO.getInJuseq2Section(); + seqHead = reportVO.getInJuseq2Head(); + break; + case 3: + seqSection = reportVO.getInJuseq3Section(); + seqHead = reportVO.getInJuseq3Head(); + break; + default: + break; + } + model.addAttribute("judgeSectionCheif", judgeService.selectOne(seqSection)); + model.addAttribute("judgeHeadCheif", judgeService.selectOne(seqHead)); + } + + model.addAttribute("tempDoc", reportVO.getInStateCode().equals("99")); + model.addAttribute("myDutiesCode", ReportCommon.getDutiesCodeForApprove(UserUtil.getMemberInfo().getDuties())); + model.addAttribute("myGroupCode", ReportCommon.getMyGroupCode()); + + return "report/reportView"; + } + +} diff --git a/src/main/java/kcg/faics/report/web/ReportListController.java b/src/main/java/kcg/faics/report/web/ReportListController.java new file mode 100644 index 0000000..e5f85df --- /dev/null +++ b/src/main/java/kcg/faics/report/web/ReportListController.java @@ -0,0 +1,660 @@ +package kcg.faics.report.web; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import kcg.faics.cmmn.excel.ExcelExporter; +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.member.service.MemberAuthService; +import kcg.faics.member.service.MemberService; +import kcg.faics.member.vo.MemberVO; +import kcg.faics.report.service.ReportCategoryService; +import kcg.faics.report.service.ReportJudgeService; +import kcg.faics.report.service.ReportService; +import kcg.faics.report.vo.ReportSearchVO; +import kcg.faics.report.vo.ReportVO; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.UserUtil; + +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.support.SessionStatus; +import org.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +/** + * @author 하영지 + * 견문 검색 컨트롤러 + */ +@Controller +@RequestMapping("/report") +public class ReportListController { + /** + * properties값을 가져오는 인터페이스. + **/ + @Resource(name = "propertiesService") + private EgovPropertyService propertiesService; + + /** + * 사용자 권한 관련 서비스. + */ + @Resource(name = "memberAuthService") + private MemberAuthService memberAuthService; + + /** + * 견문 기본 인터페이스이다. + */ + @Resource(name = "reportService") + private ReportService reportService; + + /** + * 견문 결재 인터페이스 + */ + @Resource(name = "reportJudgeService") + private ReportJudgeService judgeService; + + /** + * 사용자 인터페이스 + */ + @Resource(name = "memberService") + private MemberService memberService; + + /** + * Validator - 유효성 검사 + **/ + @Resource(name = "beanValidator") + private DefaultBeanValidator beanValidator; + + /** + * 코드 인터페이스 + */ + @Resource(name = "codeService") + private CodeService codeService; + + /** + * 견문 분류 인터페이스 + */ + @Resource(name = "reportCategoryService") + private ReportCategoryService cateService; + + /** + * message.properties의 값을 가져오는 인터페이스. + */ + @Autowired + private MessageSource messageSource; + + /** + * 견문 검색 화면을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model 모델객체 + * @return 견문검색화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/search.do") + public String search(final ReportSearchVO reportSearchVO, final Model model) throws Exception { + try { + //분류 1,2,3,4 + model.addAttribute("category1", cateService.getCategory1()); + model.addAttribute("category2", cateService.getCategory2()); + model.addAttribute("category3", cateService.getCategory3()); + model.addAttribute("category4", cateService.getCategory4()); + + int myGroupCode = ReportCommon.getMyGroupCode(); + model.addAttribute("myGroupCode", myGroupCode); + + switch (myGroupCode) { + case 3: + model.addAttribute("placeList", codeService.getPlace1List(false)); + break; + case 2: + model.addAttribute("placeList", codeService.getPlace1SubListWithMain(UserUtil.getMemberInfo().getPlace1())); + break; + default: + model.addAttribute("myPlaceCode", UserUtil.getMemberInfo().getPlace1()); + model.addAttribute("myPlaceName", UserUtil.getMemberInfo().getPlace1Str()); + break; + } + + model.addAttribute("judgeList", judgeService.selectJudgeCode()); + + model.addAttribute("reportSearchVO", reportSearchVO); + + } catch (Exception e) { + } + return "report/search.tiles"; + } + + /** + * 견문 검색 결과 화면을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model 모델객체 + * @param request 리퀘스트객체 + * @param status 상태 객체 + * @return 견문검색결과화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/searchResult.do") + public String search(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model, + final HttpServletRequest request, final SessionStatus status) throws Exception { + try { + //분류 1,2,3,4 + model.addAttribute("category1", cateService.getCategory1()); + model.addAttribute("category2", cateService.getCategory2()); + model.addAttribute("category3", cateService.getCategory3()); + model.addAttribute("category4", cateService.getCategory4()); + //소속 + model.addAttribute("placeList", codeService.getPlace1List(false)); + // 접속한 사용자의 그룹코드 + model.addAttribute("myGroupCode", ReportCommon.getMyGroupCode()); + + /* 페이징 처리 정보 */ + reportSearchVO.setPageUnit(propertiesService.getInt("pageUnit")); + reportSearchVO.setPageSize(propertiesService.getInt("pageSize")); + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(reportSearchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(reportSearchVO.getRecordCountPerPage()); + paginationInfo.setPageSize(reportSearchVO.getPageSize()); + + reportSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + reportSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + reportSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + ReportSearchVO vo = ReportCommon.setSearchUserInfo(reportSearchVO); + // 전체 갯수 설정 + int totSearchCnt = reportService.selectListCnt(vo); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + + /* 게시판 상단 페이지 및 게시물 정보 표현을 위한 데이터 */ + int totCnt = reportService.selectTotalCnt(vo); + model.addAttribute("totalCnt", totCnt); + List reportList = reportService.selectList(ReportCommon.setSearchUserInfo(vo)); + model.addAttribute("reportList", reportList); + + // 검색 조건 + model.addAttribute("reportSearchVO", vo); + // 평가 목록 + model.addAttribute("judgeList", judgeService.judgeList()); + + return "report/reportList.tiles"; + + } catch (Exception e) { + e.printStackTrace(); + } + + return search(reportSearchVO, model); + } + + + /** + * 검색결과의 전체목록을 엑셀로 내보낸다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model Model 객체 + * @param locale Locale 객체 + * @return 엑셀(전체목록) + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/listtoexcel.do") + public String exportExcel(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model, final Locale locale) throws Exception { + LinkedHashMap header = new LinkedHashMap(); + header.put("docNo", messageSource.getMessage("report.list.num", null, locale)); + header.put("reporter", messageSource.getMessage("report.search.reporter", null, locale)); + header.put("inSubject", messageSource.getMessage("board.header.title", null, locale)); + header.put("inInfodate", messageSource.getMessage("report.view.infodate", null, locale)); + header.put("judgeStr", messageSource.getMessage("report.view.appraisal", null, locale)); + header.put("fullReportStr", messageSource.getMessage("report.type.fullReport", null, locale)); + header.put("inCategory1Str", messageSource.getMessage("report.view.category1", null, locale)); + header.put("inCategory2Str", messageSource.getMessage("report.view.category2", null, locale)); + header.put("inCategory3Str", messageSource.getMessage("report.view.category3", null, locale)); + header.put("inCategory4Str", messageSource.getMessage("report.view.category4", null, locale)); + try { + Date d = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String title = String.format("%s_%s", messageSource.getMessage("report.title", null, locale), sdf.format(d)); + + List list = reportService.selectListAll(ReportCommon.setSearchUserInfo(reportSearchVO)); + + model.addAttribute("excel", new ExcelExporter(header, list, title)); + model.addAttribute("filename", title); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "excelView"; + } + + /** + * 결재 대기 목록 화면을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model 모델객체 + * @param request 리퀘스트객체 + * @param status 상태 객체 + * @return 견문 결재대기목록 화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/waitList.do") + public String waitList(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model, + final HttpServletRequest request, final SessionStatus status) throws Exception { + try { + //분류 1,2,3,4 + model.addAttribute("category1", cateService.getUseCategory1()); + model.addAttribute("category2", cateService.getUseCategory2()); + model.addAttribute("category3", cateService.getUseCategory3()); + model.addAttribute("category4", cateService.getUseCategory4()); + //소속 + model.addAttribute("placeList", codeService.getPlace1List(false)); + // 접속한 사용자 정보 + model.addAttribute("myGroupCode", ReportCommon.getMyGroupCode()); + + /* 페이징 처리 정보 */ + reportSearchVO.setPageUnit(propertiesService.getInt("pageUnit")); + reportSearchVO.setPageSize(propertiesService.getInt("pageSize")); + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(reportSearchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(reportSearchVO.getRecordCountPerPage()); + paginationInfo.setPageSize(reportSearchVO.getPageSize()); + + reportSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + reportSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + reportSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + ReportSearchVO vo = ReportCommon.setSearchUserInfo(reportSearchVO); + + // 권한 설정 + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + int myDutiesCode = ReportCommon.getDutiesCodeForApprove(loginUserVO.getDuties()); + vo.setDutiesForApprove(myDutiesCode); + model.addAttribute("myDutiesCode", myDutiesCode); + + // 전체 갯수 설정 + int totSearchCnt = judgeService.selectWaitListCnt(vo); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("totalCnt", totSearchCnt); + + List reportList = judgeService.selectWaitList(vo); + model.addAttribute("reportList", reportList); + + // 검색 조건 + model.addAttribute("reportSearchVO", vo); + // 평가 목록 + model.addAttribute("judgeList", judgeService.judgeList()); + + model.addAttribute("reportVO", new ReportVO()); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "report/waitList.tiles"; + } + + /** + * 선택된 견문의 승인화면을 반환한다. + * + * @param reportVO 임시 저장된 견문 객체 + * @param model model객체 + * @return 견문 승인 화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/approval.do", method = RequestMethod.GET) + public String approvalView(@ModelAttribute("reportVO") final ReportVO reportVO, final Model model) throws Exception { + try { + ReportVO vo = reportService.select(reportVO); + model.addAttribute("reportVO", vo); + + LoginUserVO user = UserUtil.getMemberInfo(); + model.addAttribute("loginUserVO", user); + + model.addAttribute("myGroupCode", ReportCommon.getMyGroupCode()); + int myDutiesCode = ReportCommon.getDutiesCodeForApprove(user.getDuties()); + model.addAttribute("myDutiesCode", myDutiesCode); + model.addAttribute("loginPlace1", user.getPlace1Str().substring(user.getPlace1Str().length() - 2)); + + model.addAttribute("docGroupCode", ReportCommon.getGroupCode(vo.getInPlaceCode())); + + model.addAttribute("ju1section", judgeService.selectOne(vo.getInJuseq1Section())); + model.addAttribute("ju2section", judgeService.selectOne(vo.getInJuseq2Section())); + model.addAttribute("ju3section", judgeService.selectOne(vo.getInJuseq3Section())); + model.addAttribute("ju1head", judgeService.selectOne(vo.getInJuseq1Head())); + model.addAttribute("ju2head", judgeService.selectOne(vo.getInJuseq2Head())); + model.addAttribute("ju3head", judgeService.selectOne(vo.getInJuseq3Head())); + + //분류 1,2,3,4 + model.addAttribute("category1", cateService.getUseCategory1()); + model.addAttribute("category2", cateService.getUseCategory2()); + model.addAttribute("category3", cateService.getUseCategory3()); + model.addAttribute("category4", cateService.getUseCategory4()); + + model.addAttribute("inUseCategory1", vo.getInUseCategory1()); + model.addAttribute("inUseCategory2", vo.getInUseCategory2()); + model.addAttribute("inUseCategory3", vo.getInUseCategory3()); + model.addAttribute("inUseCategory4", vo.getInUseCategory4()); + + // 조회 타입 + boolean modifyProcess = (Character.getNumericValue(vo.getInStateCode().charAt(0)) > ReportCommon.getMyGroupCode() || vo.getInStateCode().charAt(1) == '4'); + boolean modifyAuth = (vo.getInUserid() != user.getUserid() && myDutiesCode < 2); + model.addAttribute("viewDoc", (modifyProcess | modifyAuth)); + + model.addAttribute("approveInfo", judgeService.selectApprove()); + + return "report/approval.tiles"; + } catch (Exception e) { + e.printStackTrace(); + } + return "error/bizError"; + } + + /** + * 여러 개의 견문을 결재한다. + * + * @param reportVO 견문객체 + * @param model 모델 객체 + * @param request 리퀘스트 객체 + * @param status 세션객체 + * @return 견문 대기 목록 조회 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = {"/approval.do", "/approvalList.do"}, method = RequestMethod.POST) + public String approvalSubmit(@ModelAttribute final ReportVO reportVO, final Model model, + final HttpServletRequest request, final SessionStatus status) throws Exception { + + HashMap map = judgeService.approve(reportVO); + if (map.get("msg").toString() != "") { + model.addAttribute("errorMsg", map.get("msg")); + + String requestUrl = request.getRequestURL().toString(); + if (requestUrl.indexOf("/approvalList.do") > 0) { + return waitList(null, null, null, null); + } else { + return approvalView(reportVO, model); + } + } + + status.setComplete(); + + return "redirect:/report/waitList.do"; + } + + /** + * 견문 결재 처리 목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model 모델 객체 + * @param request 리퀘스트 객체 + * @param status 세션 객체 + * @return 견문 결재 처리 목록 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "approveList.do") + public String approveList(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model, + final HttpServletRequest request, final SessionStatus status) throws Exception { + + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + int dutieCode = ReportCommon.getDutiesCodeForApprove(loginUserVO.getDuties()); + + // 권한 체크 + if (dutieCode != 2 && dutieCode != 3) { + return "redirect:/report/myList.do"; + } + + try { + // 기간 설정 + Calendar cal = new GregorianCalendar(); + SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd"); + if (StringUtils.isBlank(reportSearchVO.getDateStart())) { + cal.add(Calendar.MONTH, -1); + reportSearchVO.setDateStart(dateFormatter.format(cal.getTime())); + } + if (StringUtils.isBlank(reportSearchVO.getDateEnd())) { + cal = new GregorianCalendar(); + reportSearchVO.setDateEnd(dateFormatter.format(cal.getTime())); + } + + //분류 1,2,3,4 + model.addAttribute("category1", cateService.getCategory1()); + model.addAttribute("category2", cateService.getCategory2()); + model.addAttribute("category3", cateService.getCategory3()); + model.addAttribute("category4", cateService.getCategory4()); + //소속 + model.addAttribute("placeList", codeService.getPlace1List(false)); + // 접속한 사용자 정보 + model.addAttribute("myGroupCode", ReportCommon.getMyGroupCode()); + model.addAttribute("myDutiesCode", dutieCode); + + /* 페이징 처리 정보 */ + reportSearchVO.setPageUnit(propertiesService.getInt("pageUnit")); + reportSearchVO.setPageSize(propertiesService.getInt("pageSize")); + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(reportSearchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(15); + paginationInfo.setPageSize(reportSearchVO.getPageSize()); + + reportSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + reportSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + reportSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + ReportSearchVO vo = ReportCommon.setSearchUserInfo(reportSearchVO); + // 전체 갯수 설정 + int totSearchCnt = judgeService.selectApproveListCnt(vo); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("totalCnt", totSearchCnt); + + List reportList = judgeService.selectApproveList(vo); + model.addAttribute("reportList", reportList); + + // 검색 조건 + model.addAttribute("reportSearchVO", vo); + // 평가 목록 + model.addAttribute("judgeList", judgeService.judgeList()); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "report/approveList.tiles"; + } + + /** + * 견문 처리 목록에 대한 엑셀 문서를 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model Model 객체 + * @param locale Locale 객체 + * @return 견문 처리 목록 엑셀 문서 + */ + @RequestMapping(value = "approveExcel") + public String approveExcel(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model, final Locale locale) { + LinkedHashMap header = new LinkedHashMap(); + header.put("docNo", messageSource.getMessage("report.list.num", null, locale)); + header.put("reporter", messageSource.getMessage("report.search.reporter", null, locale)); + header.put("inSubject", messageSource.getMessage("board.header.title", null, locale)); + header.put("inInfodate", messageSource.getMessage("report.view.infodate", null, locale)); + header.put("isSection", messageSource.getMessage("report.view.approval", null, locale) + + messageSource.getMessage("member.view.rptPermission.section", null, locale)); + header.put("isHead", messageSource.getMessage("report.view.approval", null, locale) + + messageSource.getMessage("member.view.rptPermission.head", null, locale)); + header.put("isJudge1", messageSource.getMessage("report.type.newsflash", null, locale)); + header.put("isJudge2", messageSource.getMessage("report.type.judge", null, locale)); + header.put("isJudge3", messageSource.getMessage("report.type.middle", null, locale)); + header.put("isJudge4", messageSource.getMessage("report.type.notice", null, locale)); + header.put("isJudge5", messageSource.getMessage("report.type.record", null, locale)); + header.put("isJudge6", messageSource.getMessage("report.type.survey", null, locale)); + header.put("isJudge7", messageSource.getMessage("report.type.reference", null, locale)); + header.put("isReport1", messageSource.getMessage("report.type.fullReport1", null, locale) + + messageSource.getMessage("report.type.fullReport", null, locale)); + header.put("isReport2", messageSource.getMessage("report.type.fullReport2", null, locale) + + messageSource.getMessage("report.type.fullReport", null, locale)); + + try { + Date d = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String title = String.format("%s_%s", messageSource.getMessage("report.title", null, locale), sdf.format(d)); + + List list = judgeService.selectApproveListAll(ReportCommon.setSearchUserInfo(reportSearchVO)); + + model.addAttribute("excel", new ExcelExporter(header, list, title)); + model.addAttribute("filename", title); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "excelView"; + } + + /** + * 내실적 목록을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model 모델 객체 + * @param request 리퀘스트 객체 + * @param status 세션 객체 + * @return 내실적 목록 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "myList.do") + public String myList(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model, + final HttpServletRequest request, final SessionStatus status) throws Exception { + try { + LoginUserVO userVO = UserUtil.getMemberInfo(); + // 기간 설정 + Calendar cal = new GregorianCalendar(); + SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd"); + if (StringUtils.isBlank(reportSearchVO.getDateStart())) { + cal.add(Calendar.YEAR, -1); + reportSearchVO.setDateStart(dateFormatter.format(cal.getTime())); + } + if (StringUtils.isBlank(reportSearchVO.getDateEnd())) { + cal = new GregorianCalendar(); + reportSearchVO.setDateEnd(dateFormatter.format(cal.getTime())); + } + + //분류 1,2,3,4 + model.addAttribute("category1", cateService.getCategory1()); + model.addAttribute("category2", cateService.getCategory2()); + model.addAttribute("category3", cateService.getCategory3()); + model.addAttribute("category4", cateService.getCategory4()); + //소속 + model.addAttribute("placeList", codeService.getPlace1List(false)); + // 접속한 사용자 정보 + model.addAttribute("myGroupCode", ReportCommon.getMyGroupCode()); + model.addAttribute("myDutiesCode", ReportCommon.getDutiesCodeForApprove(userVO.getDuties())); + + /* 페이징 처리 정보 */ + reportSearchVO.setPageUnit(propertiesService.getInt("pageUnit")); + reportSearchVO.setPageSize(propertiesService.getInt("pageSize")); + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(reportSearchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(15); + paginationInfo.setPageSize(reportSearchVO.getPageSize()); + + reportSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + reportSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + reportSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + ReportSearchVO vo = ReportCommon.setSearchUserInfo(reportSearchVO); + // 전체 갯수 설정 + int totSearchCnt = judgeService.selectMyListCnt(vo); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("totalCnt", totSearchCnt); + + List reportList = judgeService.selectMyList(vo); + model.addAttribute("reportList", reportList); + + // 검색 조건 + model.addAttribute("reportSearchVO", vo); + // 평가 목록 + model.addAttribute("judgeList", judgeService.judgeList()); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "report/myList.tiles"; + } + + + /** + * 견문 처리 목록에 대한 엑셀 문서를 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model Model 객체 + * @param locale Locale 객체 + * @return 견문 처리 목록 엑셀 문서 + */ + @RequestMapping(value = "myListExcel") + public String myListExcel(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model, final Locale locale) { + LinkedHashMap header = new LinkedHashMap(); + header.put("docNo", messageSource.getMessage("report.list.num", null, locale)); + header.put("reporter", messageSource.getMessage("report.search.reporter", null, locale)); + header.put("inSubject", messageSource.getMessage("board.header.title", null, locale)); + header.put("inInfodate", messageSource.getMessage("report.view.infodate", null, locale)); + header.put("isHead", messageSource.getMessage("report.view.approval", null, locale) + + messageSource.getMessage("member.view.rptPermission.head", null, locale)); + header.put("isSection", messageSource.getMessage("report.view.approval", null, locale) + + messageSource.getMessage("member.view.rptPermission.section", null, locale)); + header.put("isJudge1", messageSource.getMessage("report.type.newsflash", null, locale)); + header.put("isJudge2", messageSource.getMessage("report.type.judge", null, locale)); + header.put("isJudge3", messageSource.getMessage("report.type.middle", null, locale)); + header.put("isJudge4", messageSource.getMessage("report.type.notice", null, locale)); + header.put("isJudge5", messageSource.getMessage("report.type.record", null, locale)); + header.put("isJudge6", messageSource.getMessage("report.type.survey", null, locale)); + header.put("isJudge7", messageSource.getMessage("report.type.reference", null, locale)); + header.put("isReport1", messageSource.getMessage("report.type.fullReport1", null, locale) + + messageSource.getMessage("report.type.fullReport", null, locale)); + header.put("isReport2", messageSource.getMessage("report.type.fullReport2", null, locale) + + messageSource.getMessage("report.type.fullReport", null, locale)); + header.put("inCategory1Str", messageSource.getMessage("report.view.category1", null, locale)); + header.put("inCategory2Str", messageSource.getMessage("report.view.category2", null, locale)); + header.put("inCategory3Str", messageSource.getMessage("report.view.category3", null, locale)); + header.put("inCategory4Str", messageSource.getMessage("report.view.category4", null, locale)); + + try { + Date d = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String title = String.format("%s_%s", messageSource.getMessage("report.title", null, locale), sdf.format(d)); + + List list = judgeService.selectMyListAll(ReportCommon.setSearchUserInfo(reportSearchVO)); + + model.addAttribute("excel", new ExcelExporter(header, list, title)); + model.addAttribute("filename", title); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "excelView"; + } +} diff --git a/src/main/java/kcg/faics/report/web/ReportMngController.java b/src/main/java/kcg/faics/report/web/ReportMngController.java new file mode 100644 index 0000000..008c51c --- /dev/null +++ b/src/main/java/kcg/faics/report/web/ReportMngController.java @@ -0,0 +1,694 @@ +package kcg.faics.report.web; + +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import kcg.faics.cmmn.excel.ExcelExporter; +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.member.UserType; +import kcg.faics.member.service.MemberService; +import kcg.faics.member.vo.MemberVO; +import kcg.faics.report.service.ReportCategoryService; +import kcg.faics.report.service.ReportJudgeService; +import kcg.faics.report.service.ReportService; +import kcg.faics.report.vo.ReportGoalVO; +import kcg.faics.report.vo.ReportSearchVO; +import kcg.faics.report.vo.ReportVO; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.UserUtil; + +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.support.SessionStatus; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +/** + * @author 하영지 + * 견문 관리기능 메뉴 컨트롤러 + */ +@Controller +@RequestMapping("/report") +public class ReportMngController { + /** + * properties값을 가져오는 인터페이스. + **/ + @Resource(name = "propertiesService") + private EgovPropertyService propertiesService; + + /** + * 견문 기본 인터페이스이다. + */ + @Resource(name = "reportService") + private ReportService reportService; + + /** + * 견문 결재 인터페이스 + */ + @Resource(name = "reportJudgeService") + private ReportJudgeService judgeService; + + /** + * 사용자 인터페이스 + */ + @Resource(name = "memberService") + private MemberService memberService; + + /** + * Validator - 유효성 검사 + **/ + @Resource(name = "beanValidator") + private DefaultBeanValidator beanValidator; + + /** + * 코드 인터페이스 + */ + @Resource(name = "codeService") + private CodeService codeService; + + /** + * 견문 분류 인터페이스 + */ + @Resource(name = "reportCategoryService") + private ReportCategoryService cateService; + + /** + * message.properties의 값을 가져오는 인터페이스. + */ + @Autowired + private MessageSource messageSource; + + /** + * 견문제출현황을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model 모델 객체 + * @param request 리퀘스트 객체 + * @param status 세션 객체 + * @return 견문제출현황 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "presentList.do") + public String presentList(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model, + final HttpServletRequest request, final SessionStatus status) throws Exception { + try { + // 기간 설정 + Calendar cal = new GregorianCalendar(); + SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd"); + if (StringUtils.isBlank(reportSearchVO.getDateStart())) { + cal.add(Calendar.YEAR, -1); + reportSearchVO.setDateStart(dateFormatter.format(cal.getTime())); + } + if (StringUtils.isBlank(reportSearchVO.getDateEnd())) { + cal = new GregorianCalendar(); + reportSearchVO.setDateEnd(dateFormatter.format(cal.getTime())); + } + + // 접속한 사용자 정보 + model.addAttribute("myGroupCode", ReportCommon.getMyGroupCode()); + model.addAttribute("myDutiesCode", UserUtil.getMemberInfo().getDuties()); + + /* 페이징 처리 정보 */ + reportSearchVO.setPageUnit(propertiesService.getInt("pageUnit")); + reportSearchVO.setPageSize(propertiesService.getInt("pageSize")); + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(reportSearchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(15); + paginationInfo.setPageSize(reportSearchVO.getPageSize()); + + reportSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + reportSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + reportSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + ReportSearchVO vo = ReportCommon.setSearchUserInfo(reportSearchVO); + // 전체 갯수 설정 + int totSearchCnt = reportService.selectPresentListCnt(vo); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("totalCnt", totSearchCnt); + + List reportList = reportService.selectPresentList(vo); + model.addAttribute("reportList", reportList); + + // 검색 조건 + model.addAttribute("reportSearchVO", vo); + // 평가 목록 + model.addAttribute("judgeList", judgeService.judgeList()); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "report/presentList.tiles"; + } + + /** + * 견문제출현황 엑셀문서를 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model 모델 객체 + * @param locale locale 객체 + * @return 견문제출현황 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "presentExcel") + public String presentExcel(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model, final Locale locale) throws Exception { + LinkedHashMap header = new LinkedHashMap(); + header.put("docNo", messageSource.getMessage("report.list.num", null, locale)); + header.put("reporter", messageSource.getMessage("report.search.reporter", null, locale)); + header.put("cateStrOrder", messageSource.getMessage("report.view.category", null, locale)); + header.put("inSubject", messageSource.getMessage("board.header.title", null, locale)); + header.put("inInfodate", messageSource.getMessage("report.view.infodate", null, locale)); + header.put("isHead", messageSource.getMessage("report.view.approval", null, locale) + + messageSource.getMessage("member.view.rptPermission.head", null, locale)); + header.put("isSection", messageSource.getMessage("report.view.approval", null, locale) + + messageSource.getMessage("member.view.rptPermission.section", null, locale)); + header.put("isJudge1", messageSource.getMessage("report.type.newsflash", null, locale)); + header.put("isJudge2", messageSource.getMessage("report.type.judge", null, locale)); + header.put("isJudge3", messageSource.getMessage("report.type.middle", null, locale)); + header.put("isJudge4", messageSource.getMessage("report.type.notice", null, locale)); + header.put("isJudge5", messageSource.getMessage("report.type.record", null, locale)); + header.put("isJudge6", messageSource.getMessage("report.type.survey", null, locale)); + header.put("isJudge7", messageSource.getMessage("report.type.reference", null, locale)); + header.put("isReport1", messageSource.getMessage("report.type.fullReport1", null, locale) + + messageSource.getMessage("report.type.fullReport", null, locale)); + header.put("isReport2", messageSource.getMessage("report.type.fullReport2", null, locale) + + messageSource.getMessage("report.type.fullReport", null, locale)); + + try { + Date d = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String title = String.format("%s_%s", messageSource.getMessage("report.title", null, locale), sdf.format(d)); + + List list = reportService.selectPresentListAll(ReportCommon.setSearchUserInfo(reportSearchVO)); + + model.addAttribute("excel", new ExcelExporter(header, list, title)); + model.addAttribute("filename", title); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "excelView"; + } + + /** + * 목표 관리 화면을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model 모델객체 + * @return 목표 관리 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/goal.do", method = RequestMethod.GET) + public String goal(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model) throws Exception { + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + model.addAttribute("authAdmin", loginUserVO.getAuthAdmin()); + + // 소속 목록 + model.addAttribute("placeList", codeService.getPlace1List(false)); + + // 소속 + if (StringUtils.isBlank(reportSearchVO.getPlaceGroup())) { + reportSearchVO.setPlaceGroup(loginUserVO.getPlace1()); + } + + Calendar c = Calendar.getInstance(); + int currYear = c.get(Calendar.YEAR); + int currMonth = c.get(Calendar.MONTH) + 1; + // 기간 + if (StringUtils.isBlank(reportSearchVO.getYear())) { + reportSearchVO.setYear(String.valueOf(currYear)); + reportSearchVO.setMonth(String.valueOf(currMonth)); + } + + List yearList = new ArrayList(); + for (int i = 2005; i <= currYear; i++) { + yearList.add(i); + } + model.addAttribute("yearList", yearList); + + List monthList = new ArrayList(); + for (int i = 1; i <= 12; i++) { + monthList.add(i); + } + model.addAttribute("monthList", monthList); + + // 목표 목록 + model.addAttribute("goalList", reportService.selectGoalList(reportSearchVO)); + + model.addAttribute("reportSearchVO", reportSearchVO); + model.addAttribute("reportGoalVO", new ReportGoalVO()); + return "report/goal.tiles"; + } + + /** + * 목표를 수정한다. + * + * @param reportGoalVO 견문 목표 객체 + * @param model 모델객체 + * @return 목표 관리 목록 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/goal.do", method = RequestMethod.POST) + public String goal(@ModelAttribute final ReportGoalVO reportGoalVO, final Model model) throws Exception { + try { + reportService.updateGoal(reportGoalVO); + } catch (Exception e) { + e.printStackTrace(); + } + return "redirect:/report/goal.do"; + } + + /** + * 사용자별 목표/실적 조회 화면을 반환한다. + * 소속코드가 없으면 사용자의 소속 코드를 세팅한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model 모델 객체 + * @return 목표/실적 조회 화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/goalStats.do") + public String getStatsUser(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model) throws Exception { + if (StringUtils.isBlank(reportSearchVO.getPlaceGroup())) { + reportSearchVO.setPlaceGroup(UserUtil.getMemberInfo().getPlace1()); + } + + return goalStats(reportSearchVO, model); + } + + /** + * 소속별 목표/실적 조회 화면을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model 모델 객체 + * @return 목표/실적 조회 화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/goalStatsPlace.do") + public String getStatsPlace(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model) throws Exception { + reportSearchVO.setPlaceGroup(null); + return goalStats(reportSearchVO, model); + } + + /** + * 목표/실적 조회 화면을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model 모델 객체 + * @return 목표/실적 조회 화면 + * @throws Exception 기본예외처리 + */ + public String goalStats(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model) throws Exception { + model.addAttribute("authAdmin", UserUtil.getMemberInfo().getAuthAdmin()); + + // 소속 목록 + model.addAttribute("placeList", codeService.getPlace1List(false)); + + Calendar c = Calendar.getInstance(); + int currYear = c.get(Calendar.YEAR); + int currMonth = c.get(Calendar.MONTH) + 1; + // 기간 + if (StringUtils.isBlank(reportSearchVO.getYear())) { + reportSearchVO.setYear(String.valueOf(currYear)); + reportSearchVO.setMonth(String.valueOf(currMonth)); + } + + List yearList = new ArrayList(); + for (int i = 2005; i <= currYear; i++) { + yearList.add(i); + } + model.addAttribute("yearList", yearList); + + List monthList = new ArrayList(); + for (int i = 1; i <= 12; i++) { + monthList.add(i); + } + model.addAttribute("monthList", monthList); + + // 목표/실적 통계 + if (StringUtils.isBlank(reportSearchVO.getPlaceGroup())) { + model.addAttribute("goalStats", reportService.getGoalStatsPlace(reportSearchVO)); + } else { + model.addAttribute("goalStats", reportService.getGoalStats(reportSearchVO)); + } + + model.addAttribute("reportSearchVO", reportSearchVO); + + return "report/goalStats.tiles"; + } + + /** + * 목표/실적 엑셀 문서를 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model 모델 객체 + * @param locale locale 객체 + * @return 목표/실적 엑셀 문서 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/goalStatsExcel.do") + public String goalStatsExcel(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model, final Locale locale) throws Exception { + LinkedHashMap header = new LinkedHashMap(); + header.put("NAME", messageSource.getMessage("report.goal.name", null, locale)); + header.put("RESULT1", messageSource.getMessage("report.goal.agent", null, locale) + + messageSource.getMessage("report.goal.result", null, locale)); + header.put("GOAL1", messageSource.getMessage("report.goal.agent", null, locale) + + messageSource.getMessage("report.goal.goal", null, locale)); + header.put("RESULT2", messageSource.getMessage("report.goal.foreignCoop", null, locale) + + messageSource.getMessage("report.goal.result", null, locale)); + header.put("GOAL2", messageSource.getMessage("report.goal.foreignCoop", null, locale) + + messageSource.getMessage("report.goal.goal", null, locale)); + header.put("RESULT3", messageSource.getMessage("report.goal.infoCoop", null, locale) + + messageSource.getMessage("report.goal.result", null, locale)); + header.put("GOAL3", messageSource.getMessage("report.goal.infoCoop", null, locale) + + messageSource.getMessage("report.goal.goal", null, locale)); + header.put("RESULT4", messageSource.getMessage("report.goal.reportAgent", null, locale) + + messageSource.getMessage("report.goal.result", null, locale)); + header.put("GOAL4", messageSource.getMessage("report.goal.reportAgent", null, locale) + + messageSource.getMessage("report.goal.goal", null, locale)); + header.put("RESULT_TOTAL", messageSource.getMessage("report.goal.sum", null, locale) + + messageSource.getMessage("report.goal.result", null, locale)); + header.put("GOAL_TOTAL", messageSource.getMessage("report.goal.sum", null, locale) + + messageSource.getMessage("report.goal.goal", null, locale)); + + try { + Date d = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String title = String.format("%s_%s", messageSource.getMessage("report.title", null, locale), sdf.format(d)); + + List> list = new ArrayList>(); + if (StringUtils.isBlank(reportSearchVO.getPlaceGroup())) { + list = reportService.getGoalStatsPlace(reportSearchVO); + } else { + list = reportService.getGoalStats(reportSearchVO); + } + + model.addAttribute("excel", new ExcelExporter>(header, list, title)); + model.addAttribute("filename", title); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "excelView"; + } + + /** + * 평가기록부를 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model 모델 객체 + * @param request 리퀘스트 객체 + * @param status 세션 객체 + * @return 평가기록부 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "judgeRecord.do") + public String recordtList(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model, + final HttpServletRequest request, final SessionStatus status) throws Exception { + try { + // 기간 설정 + Calendar cal = new GregorianCalendar(); + SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd"); + if (StringUtils.isBlank(reportSearchVO.getDateStart())) { + cal.add(Calendar.YEAR, -1); + reportSearchVO.setDateStart(dateFormatter.format(cal.getTime())); + } + if (StringUtils.isBlank(reportSearchVO.getDateEnd())) { + cal = new GregorianCalendar(); + reportSearchVO.setDateEnd(dateFormatter.format(cal.getTime())); + } + + // 소속 목록 + model.addAttribute("placeList", codeService.getPlace1List(false)); + + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + + // 검색 조건 소속 + if (StringUtils.isBlank(reportSearchVO.getPlaceGroup())) { + reportSearchVO.setPlaceGroup(loginUserVO.getPlace1()); + } + + // 접속한 사용자 정보 + model.addAttribute("myGroupCode", ReportCommon.getMyGroupCode()); + model.addAttribute("myDutiesCode", loginUserVO.getDuties()); + + /* 페이징 처리 정보 */ + reportSearchVO.setPageUnit(propertiesService.getInt("pageUnit")); + reportSearchVO.setPageSize(propertiesService.getInt("pageSize")); + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(reportSearchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(15); + paginationInfo.setPageSize(reportSearchVO.getPageSize()); + + reportSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + reportSearchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + reportSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + ReportSearchVO vo = ReportCommon.setSearchUserInfo(reportSearchVO); + // 전체 갯수 설정 + int totSearchCnt = reportService.selectRecordListCnt(vo); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("totalCnt", totSearchCnt); + + List reportList = reportService.selectRecordList(vo); + model.addAttribute("reportList", reportList); + + // 검색 조건 + model.addAttribute("reportSearchVO", vo); + // 평가 목록 + model.addAttribute("judgeList", judgeService.judgeList()); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "report/judgeRecord.tiles"; + } + + /** + * 평가기록부 엑셀문서를 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model 모델 객체 + * @param locale locale 객체 + * @return 평가기록부 엑셀문서 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "recordExcel") + public String recordExcel(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model, final Locale locale) throws Exception { + LinkedHashMap header = new LinkedHashMap(); + header.put("docNo", messageSource.getMessage("report.list.num", null, locale)); + header.put("inInfodate", messageSource.getMessage("report.view.infodate", null, locale)); + header.put("inPosition", messageSource.getMessage("report.view.position", null, locale)); + header.put("inName", messageSource.getMessage("report.search.reporter", null, locale)); + header.put("inSubject", messageSource.getMessage("board.header.title", null, locale)); + header.put("isJudge1", messageSource.getMessage("report.type.newsflash", null, locale)); + header.put("isJudge2", messageSource.getMessage("report.type.judge", null, locale)); + header.put("isJudge3", messageSource.getMessage("report.type.middle", null, locale)); + header.put("isJudge4", messageSource.getMessage("report.type.notice", null, locale)); + header.put("isJudge5", messageSource.getMessage("report.type.record", null, locale)); + header.put("isJudge6", messageSource.getMessage("report.type.survey", null, locale)); + header.put("isJudge7", messageSource.getMessage("report.type.reference", null, locale)); + header.put("isReport1", messageSource.getMessage("report.type.fullReport1", null, locale) + + messageSource.getMessage("report.type.fullReport", null, locale)); + header.put("isReport2", messageSource.getMessage("report.type.fullReport2", null, locale) + + messageSource.getMessage("report.type.fullReport", null, locale)); + + try { + Date d = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String title = String.format("%s_%s", messageSource.getMessage("report.title", null, locale), sdf.format(d)); + + List list = reportService.selectRecordListAll(ReportCommon.setSearchUserInfo(reportSearchVO)); + + model.addAttribute("excel", new ExcelExporter(header, list, title)); + model.addAttribute("filename", title); + + } catch (Exception e) { + e.printStackTrace(); + } + + return "excelView"; + } + + /** + * 일괄입력 화면을 반환한다. + * + * @param model 모델객체 + * @return 일괄입력 화면 + * @throws Exception 기본예외처리 + */ + @RequestMapping(value = "/offlineWrite.do", method = RequestMethod.GET) + public String offlineAdd(final Model model) throws Exception { + try { + model.addAttribute("loginUserVO", UserUtil.getMemberInfo()); + + model.addAttribute("judgeList", judgeService.selectJudgeCode()); + + model.addAttribute("category1", cateService.getUseCategory1()); + model.addAttribute("category2", cateService.getUseCategory2()); + model.addAttribute("category3", cateService.getUseCategory3()); + model.addAttribute("category4", cateService.getUseCategory4()); + + model.addAttribute("myGroupCode", ReportCommon.getMyGroupCode()); + + if (!model.containsAttribute("reportVO")) { + ReportVO reportVO = new ReportVO(); + LoginUserVO userVO = UserUtil.getMemberInfo(); + + reportVO.setInAgencyCode(ReportCommon.getAgencyCode(userVO.getPlace1())); + reportVO.setInPlaceCode(userVO.getPlace1()); + reportVO.setInPlaceName(ReportCommon.getPlaceShortName(userVO.getPlace1Str())); + reportVO.setInPlaceNum(reportService.selectPlaceNum(reportVO)); + + model.addAttribute("reportVO", reportVO); + } + + } catch (Exception e) { + e.printStackTrace(); + } + + + return "report/offlineAdd.tiles"; + } + + /** + * 견문을 입력한 뒤 입력된 견문의 상세 조회 화면으로 이동한다. + * @param multiRequest + * @param reportVO 견문 모델 객체 + * @param bindingResult + * @param model + * @param status + * @return String 뷰 이름 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/offlineWrite.do", method = RequestMethod.POST) + public String offlineAdd(final MultipartHttpServletRequest multiRequest, @ModelAttribute("reportVO") final ReportVO reportVO, + final BindingResult bindingResult, final Model model, final SessionStatus status) throws Exception { + // 사용자 인증 검사 + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (isAuthenticated) { + // 유효성 검사 + beanValidator.validate(reportVO, bindingResult); + if (bindingResult.hasErrors()) { + return offlineAdd(model); + } + + MemberVO memberVO = new MemberVO(); + memberVO.setUserid(reportVO.getInUserid()); + memberVO.setUsertype(reportVO.getInType()); + memberVO = memberService.select(memberVO); + // 보고자 정보 + reportVO.setInName(memberVO.getName()); + reportVO.setInPlaceCode(memberVO.getPlace1()); + reportVO.setInPlaceName(ReportCommon.getPlaceShortName(memberVO.getPlace1Str())); + reportVO.setInPlaceNum(reportService.selectPlaceNum(reportVO)); + reportVO.setInAgencyCode(ReportCommon.getAgencyCode(reportVO.getInPlaceCode())); + reportVO.setInPlace1(memberVO.getPlace1Str()); + reportVO.setInPlace2(memberVO.getPlace2Str()); + reportVO.setInPosition(memberVO.getPositionStr()); + reportVO.setInIp(multiRequest.getRemoteAddr()); + if (UserType.FA.equals(reportVO.getInType())) { + reportVO.setInType("1"); + } else { + reportVO.setInType("2"); + } + + // 보고일 파싱 + String infoDate = reportVO.getStrInfodate().toString(); + reportVO.setInInfoYear(Integer.valueOf(infoDate.split("-")[0])); + reportVO.setInInfoMonth(Integer.valueOf(infoDate.split("-")[1])); + reportVO.setInInfoDay(Integer.valueOf(infoDate.split("-")[2])); + + // 상태코드 처리 + int offGroupCode = ReportCommon.getGroupCode(memberVO.getPlace1()); + if (reportVO.getInReport() > 0) { + reportVO.setInStateCode(String.valueOf(offGroupCode + 1) + "1"); + } else if (reportVO.getInJudge() > 0 && reportVO.getInReport() <= 0) { + reportVO.setInStateCode(String.valueOf(offGroupCode) + "4"); + } else { + reportVO.setInStateCode(String.valueOf(offGroupCode) + "1"); + } + + // 일괄보고 정보 + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + reportVO.setInOfflineType(String.valueOf(loginUserVO.getType())); + reportVO.setInOfflineUserid(loginUserVO.getUserid()); + + switch (offGroupCode) { + case 1: + reportVO.setInJudge1(reportVO.getInJudge()); + reportVO.setInReport1(reportVO.getInReport()); + break; + case 2: + reportVO.setInJudge2(reportVO.getInJudge()); + reportVO.setInReport2(reportVO.getInReport()); + break; + case 3: + reportVO.setInJudge3(reportVO.getInJudge()); + reportVO.setInReport3(reportVO.getInReport()); + break; + case 4: + reportVO.setInJudge4(reportVO.getInJudge()); + reportVO.setInReport4(reportVO.getInReport()); + break; + case 5: + reportVO.setInJudge5(reportVO.getInJudge()); + reportVO.setInReport5(reportVO.getInReport()); + break; + case 6: + reportVO.setInJudge6(reportVO.getInJudge()); + reportVO.setInReport6(reportVO.getInReport()); + break; + default: + break; + } + + // 파일 저장 및 데이터 입력 + final Map fileMap = multiRequest.getFileMap(); + HashMap map = reportService.insert(reportVO, fileMap); + + status.setComplete(); + + int seq = (Integer) map.get("seq"); + int result = (Integer) map.get("result"); + if (result == 1 && seq > 0) { + return "redirect:/report/update.do?inSeq=" + seq; + } + } + return "error/bizError"; + } + +} diff --git a/src/main/java/kcg/faics/report/web/ReportStatsController.java b/src/main/java/kcg/faics/report/web/ReportStatsController.java new file mode 100644 index 0000000..23f1cb3 --- /dev/null +++ b/src/main/java/kcg/faics/report/web/ReportStatsController.java @@ -0,0 +1,292 @@ +package kcg.faics.report.web; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import kcg.faics.cmmn.excel.ExcelExporter; +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.cmmn.vo.CodeVO; +import kcg.faics.report.service.ReportCategoryService; +import kcg.faics.report.service.ReportJudgeService; +import kcg.faics.report.vo.ReportSearchVO; +import kcg.faics.sec.UserUtil; + +import org.apache.commons.beanutils.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.support.SessionStatus; +import org.springmodules.validation.commons.DefaultBeanValidator; + +/** + * 견문 통계 관련 컨트롤러 + * + * @author 하영지 + * + */ +@Controller +@RequestMapping("/report") +public class ReportStatsController { + /** + * Validator - 유효성 검사 + **/ + @Resource(name = "beanValidator") + private DefaultBeanValidator beanValidator; + + /** + * 견문 결재 인터페이스 + */ + @Resource(name = "reportJudgeService") + private ReportJudgeService judgeService; + + /** + * 코드 인터페이스 + */ + @Resource(name = "codeService") + private CodeService codeService; + + /** + * 견문 분류 인터페이스 + */ + @Resource(name = "reportCategoryService") + private ReportCategoryService cateService; + + /** + * message.properties의 값을 가져오는 인터페이스. + */ + @Autowired + private MessageSource messageSource; + + /** + * 견문 통계 검색 화면을 반환한다. + * @param reportSearchVO 견문 검색 객체 + * @param model 모델 객체 + * @return 견문 통계 검색 화면 + */ + @RequestMapping(value = "/statistics.do") + public String statistics(final ReportSearchVO reportSearchVO, final Model model) { + try { + //분류 1,2,3,4 + model.addAttribute("category1", cateService.getCategory1()); + model.addAttribute("category2", cateService.getCategory2()); + model.addAttribute("category3", cateService.getCategory3()); + model.addAttribute("category4", cateService.getCategory4()); + + int myGroupCode = ReportCommon.getMyGroupCode(); + model.addAttribute("myGroupCode", myGroupCode); + + switch (myGroupCode) { + case 3: + model.addAttribute("placeList", codeService.getPlace1List(false)); + break; + case 2: + model.addAttribute("placeList", codeService.getPlace1SubListWithMain(UserUtil.getMemberInfo().getPlace1())); + break; + default: + model.addAttribute("myPlaceCode", UserUtil.getMemberInfo().getPlace1()); + model.addAttribute("myPlaceName", UserUtil.getMemberInfo().getPlace1Str()); + break; + } + + model.addAttribute("judgeList", judgeService.selectJudgeCode()); + + model.addAttribute("reportSearchVO", reportSearchVO); + } catch (Exception e) { + e.printStackTrace(); + } + + return "report/statistics.tiles"; + } + + /** + * 견문 통계 결과 화면을 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model model 객체 + * @param request request 객체 + * @param status session 객체 + * @throws Exception 기본예외처리 + * @return 견문 통계 결과 화면 + */ + @RequestMapping(value = "/statsResult.do") + public String statsResult(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model, + final HttpServletRequest request, final SessionStatus status) throws Exception { + + //분류 1,2,3,4 + model.addAttribute("category1", cateService.getCategory1()); + model.addAttribute("category2", cateService.getCategory2()); + model.addAttribute("category3", cateService.getCategory3()); + model.addAttribute("category4", cateService.getCategory4()); + + model.addAttribute("placeList", codeService.getPlace1List(false)); + model.addAttribute("judgeList", judgeService.selectJudgeCode()); + + model.addAttribute("myGroupCode", ReportCommon.getMyGroupCode()); + model.addAttribute("reportSearchVO", reportSearchVO); + + try { + ReportSearchVO searchVO = (ReportSearchVO) reportSearchVO.clone(); + searchVO = ReportCommon.setSearchUserInfo(searchVO); + + // 소속 선택하지 않은 경우 모두 세팅 + if (searchVO.getPlaces() == null || searchVO.getPlaces().length == 0) { + List placeList = new ArrayList(); + for (CodeVO code : codeService.getPlace1List(false)) { + placeList.add(code.getCode2()); + } + searchVO.setPlaces(placeList.toArray(new String[placeList.size()])); + } + + // 분야별 통계 + if ("C".equals(searchVO.getStatsType())) { + + // 분류 아무것도 선택하지 않은 경우 모두 세팅 + if (searchVO.isSearchCate1() && (searchVO.getCategory1() == null || searchVO.getCategory1().length == 0)) { + HashMap category = cateService.getCategory1(); + searchVO.setCategory1(category.keySet().toArray(new String[category.size()])); + } + if (searchVO.isSearchCate2() && (searchVO.getCategory2() == null || searchVO.getCategory2().length == 0)) { + HashMap category = cateService.getCategory2(); + searchVO.setCategory2(category.keySet().toArray(new String[category.size()])); + } + if (searchVO.isSearchCate3() && (searchVO.getCategory3() == null || searchVO.getCategory3().length == 0)) { + HashMap category = cateService.getCategory3(); + searchVO.setCategory3(category.keySet().toArray(new String[category.size()])); + } + if (searchVO.isSearchCate4() && (searchVO.getCategory4() == null || searchVO.getCategory4().length == 0)) { + HashMap category = cateService.getCategory4(); + searchVO.setCategory4(category.keySet().toArray(new String[category.size()])); + } + + model.addAttribute("statistics", judgeService.statsCategory(searchVO)); + + } else if ("J".equals(searchVO.getStatsType())) { + // 평가별 통계 + model.addAttribute("statistics", judgeService.statsJudge(searchVO)); + } + + model.addAttribute("searchVO", searchVO); + return "report/statsResult.tiles"; + + } catch (Exception e) { + e.printStackTrace(); + } + return "error/bizError"; + } + + /** + * 견문 통계 결과를 엑셀 문서로 반환한다. + * + * @param reportSearchVO 견문 검색 객체 + * @param model model 객체 + * @param locale Locale 객체 + * @throws Exception 기본예외처리 + * @return 견문 통계 결과 화면 + */ + @RequestMapping(value = "/statsExcel") + public String statsExcel(@ModelAttribute final ReportSearchVO reportSearchVO, final Model model, final Locale locale) throws Exception { + LinkedHashMap header = new LinkedHashMap(); + + ReportSearchVO searchVO = (ReportSearchVO) reportSearchVO.clone(); + searchVO = ReportCommon.setSearchUserInfo(searchVO); + + // 분야별 통계 + if ("C".equals(searchVO.getStatsType())) { + header.put("PLACENAME", messageSource.getMessage("report.view.division", null, locale)); + header.put("TOTAL", messageSource.getMessage("report.stats.total", null, locale)); + for (String category : reportSearchVO.getCategory1()) { + header.put(category + "_1", messageSource.getMessage("report.category." + category + "_1", null, locale)); + } + for (String category : reportSearchVO.getCategory2()) { + header.put(category + "_2", messageSource.getMessage("report.category." + category + "_2", null, locale)); + } + for (String category : reportSearchVO.getCategory3()) { + header.put(category + "_3", messageSource.getMessage("report.category." + category + "_3", null, locale)); + } + for (String category : reportSearchVO.getCategory4()) { + header.put(category + "_4", messageSource.getMessage("report.category." + category + "_4", null, locale)); + } + + try { + Date d = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String title = String.format("%s_%s", messageSource.getMessage("report.title", null, locale), sdf.format(d)); + + // 소속 선택하지 않은 경우 모두 세팅 + if (searchVO.getPlaces() == null || searchVO.getPlaces().length == 0) { + List placeList = new ArrayList(); + for (CodeVO code : codeService.getPlace1List(false)) { + placeList.add(code.getCode2()); + } + searchVO.setPlaces(placeList.toArray(new String[placeList.size()])); + } + + // 분류 아무것도 선택하지 않은 경우 모두 세팅 + if (searchVO.isSearchCate1() && searchVO.getCategory1().length == 0) { + HashMap category = cateService.getCategory1(); + searchVO.setCategory1(category.keySet().toArray(new String[category.size()])); + } + if (searchVO.isSearchCate2() && searchVO.getCategory2().length == 0) { + HashMap category = cateService.getCategory2(); + searchVO.setCategory2(category.keySet().toArray(new String[category.size()])); + } + if (searchVO.isSearchCate3() && searchVO.getCategory3().length == 0) { + HashMap category = cateService.getCategory3(); + searchVO.setCategory3(category.keySet().toArray(new String[category.size()])); + } + if (searchVO.isSearchCate1() && searchVO.getCategory4().length == 0) { + HashMap category = cateService.getCategory4(); + searchVO.setCategory4(category.keySet().toArray(new String[category.size()])); + } + + List> list = judgeService.statsCategory(searchVO); + + model.addAttribute("excel", new ExcelExporter>(header, list, title)); + model.addAttribute("filename", title); + + } catch (Exception e) { + e.printStackTrace(); + } + } else if ("J".equals(searchVO.getStatsType())) { + header.put("PLACENAME", messageSource.getMessage("report.view.division", null, locale)); + + header.put("REPORT1", messageSource.getMessage("report.type.fullReport1", null, locale)); + header.put("REPORT2", messageSource.getMessage("report.type.fullReport2", null, locale)); + + header.put("JU1", messageSource.getMessage("report.type.newsflash", null, locale)); + header.put("JU2", messageSource.getMessage("report.type.judge", null, locale)); + header.put("JU3", messageSource.getMessage("report.type.middle", null, locale)); + header.put("JU4", messageSource.getMessage("report.type.notice", null, locale)); + header.put("JU5", messageSource.getMessage("report.type.record", null, locale)); + header.put("JU6", messageSource.getMessage("report.type.survey", null, locale)); + header.put("JU7", messageSource.getMessage("report.type.reference", null, locale)); + + header.put("AG", messageSource.getMessage("report.stats.AGrade", null, locale)); + header.put("BG", messageSource.getMessage("report.stats.BGrade", null, locale)); + header.put("CG", messageSource.getMessage("report.stats.CGrade", null, locale)); + header.put("DG", messageSource.getMessage("report.stats.DGrade", null, locale)); + + Date d = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String title = String.format("%s_%s", messageSource.getMessage("report.title", null, locale), sdf.format(d)); + + List> list = judgeService.statsJudge(searchVO); + + model.addAttribute("excel", new ExcelExporter>(header, list, title)); + model.addAttribute("filename", title); + } + + return "excelView"; + } +} diff --git a/src/main/java/kcg/faics/report/web/package-info.java b/src/main/java/kcg/faics/report/web/package-info.java new file mode 100644 index 0000000..25cbd49 --- /dev/null +++ b/src/main/java/kcg/faics/report/web/package-info.java @@ -0,0 +1,8 @@ +/** + * 견문 관련 컨트롤러 패키지. + */ +/** + * @author hayoungji + * + */ +package kcg.faics.report.web; \ No newline at end of file diff --git a/src/main/java/kcg/faics/sec/AuthType.java b/src/main/java/kcg/faics/sec/AuthType.java new file mode 100644 index 0000000..c0bffa4 --- /dev/null +++ b/src/main/java/kcg/faics/sec/AuthType.java @@ -0,0 +1,28 @@ +package kcg.faics.sec; + +/** + * 권한 유형. + * + * @author kimnomin + * + */ +public final class AuthType { + /** + * 본부. (해양경비안전본부) + */ + public static final int HEADQUARTERS = 1; + /** + * 지방본부. (중부본부, 제주본부, 서해본부 등) + */ + public static final int LOCAL_HEADQUARTERS = 6; + /** + * 나머지. (해양경비안전서 등) + */ + public static final int AGENCY = 10; + + /** + * 생성자. + */ + private AuthType() { + } +} diff --git a/src/main/java/kcg/faics/sec/AuthenticationProvider.java b/src/main/java/kcg/faics/sec/AuthenticationProvider.java new file mode 100644 index 0000000..e5a1eab --- /dev/null +++ b/src/main/java/kcg/faics/sec/AuthenticationProvider.java @@ -0,0 +1,86 @@ +package kcg.faics.sec; + +import java.util.Collection; +import java.util.HashMap; + +import javax.annotation.Resource; + +import kcg.faics.member.service.MemberService; +import kcg.faics.member.vo.MemberVO; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.authentication.encoding.PasswordEncoder; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UsernameNotFoundException; + +/** + * AuthenticationProvider.java + * @author 임새미 + * @since 2016. 10. 6. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 6. 임새미 최초생성 + * + */ +public class AuthenticationProvider extends DaoAuthenticationProvider { + + /** + * 사용자 서비스. + */ + @Resource(name = "memberService") + private MemberService memberSerivce; + + /** + * 비밀번호 인코더 객체. + */ + @Autowired + private PasswordEncoder passwordEncoder; + + @Override + public Authentication authenticate(final Authentication authentication) throws AuthenticationException { + + String username = authentication.getName(); + String password = (String) authentication.getCredentials(); + + FaicsUserDetails user = null; + Collection authorities = null; + Authentication auth = null; + + try { + user = (FaicsUserDetails) retrieveUser(username, (UsernamePasswordAuthenticationToken) authentication); + String hashedPassword = passwordEncoder.encodePassword(password, null); + if (user.getChkcnt() >= 5) { + throw new BadCredentialsException("5회 이상 로그인에 실패하였습니다. 관리자에게 문의하세요."); + } else if (!hashedPassword.equalsIgnoreCase(user.getPassword())) { + MemberVO memberVO = new MemberVO(); + memberVO.setUserid(user.getUsername()); + memberVO.setUsertype(user.getUserType()); + HashMap map = memberSerivce.failLogin(memberVO); + throw new BadCredentialsException( + String.format("비밀번호가 일치하지 않습니다. 로그인 실패횟수는 %s회 입니다. 5회 이상이면 로그인에 제한이 생깁니다.", user.getChkcnt() + 1) + ); + } + + authorities = user.getAuthorities(); + auth = new UsernamePasswordAuthenticationToken(user, password, authorities); + } catch (UsernameNotFoundException e) { + logger.info(e.toString()); + throw new UsernameNotFoundException(e.getMessage()); + } catch (BadCredentialsException e) { + logger.info(e.toString()); + throw new BadCredentialsException(e.getMessage()); + } catch (Exception e) { + logger.info(e.toString()); + throw new RuntimeException(e.getMessage()); + } + + return auth; + } +} diff --git a/src/main/java/kcg/faics/sec/FaicsUserDetails.java b/src/main/java/kcg/faics/sec/FaicsUserDetails.java new file mode 100644 index 0000000..42dc8c8 --- /dev/null +++ b/src/main/java/kcg/faics/sec/FaicsUserDetails.java @@ -0,0 +1,70 @@ +package kcg.faics.sec; + +import java.util.Collection; + +import org.springframework.security.core.GrantedAuthority; + +import egovframework.rte.fdl.security.userdetails.EgovUserDetails; + +/** + * 사용자 인증 객체 (Egov Security의 사용자 인증 객체 상속). + * + * @author kimnomin + * + */ +public class FaicsUserDetails extends EgovUserDetails { + + /** + * 사용자 구분. (f:외사경찰, :일반경찰) + */ + private String userType; + + /** + * 로그인 실패횟수. + */ + private int chkcnt; + + /** + * @return the userType + */ + public final String getUserType() { + return userType; + } + + /** + * @param userType + * the userType to set + */ + public final void setUserType(final String userType) { + this.userType = userType; + } + + /** + * @return the chkcnt + */ + public final int getChkcnt() { + return chkcnt; + } + + /** + * @param chkcnt + * the chkcnt to set + */ + public final void setChkcnt(final int chkcnt) { + this.chkcnt = chkcnt; + } + + public FaicsUserDetails(final String username, final String password, final String userType, final int chkcnt, final boolean enabled, final boolean accountNonExpired, + final boolean credentialsNonExpired, final boolean accountNonLocked, final Collection authorities, final Object egovVO) throws IllegalArgumentException { + super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities, egovVO); + this.userType = userType; + this.chkcnt = chkcnt; + } + + public FaicsUserDetails(final String username, final String password, final String userType, final int chkcnt, final boolean enabled, final Object egovVO) throws IllegalArgumentException { + super(username, password, enabled, egovVO); + this.userType = userType; + this.chkcnt = chkcnt; + } + +} diff --git a/src/main/java/kcg/faics/sec/LoginSuccessHandler.java b/src/main/java/kcg/faics/sec/LoginSuccessHandler.java new file mode 100644 index 0000000..11e7b5f --- /dev/null +++ b/src/main/java/kcg/faics/sec/LoginSuccessHandler.java @@ -0,0 +1,210 @@ +/** + * LoginSuccessHandler.java + * @author 임새미 + * @since 2016. 10. 11. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 11. 임새미 최초생성 + * + */ +package kcg.faics.sec; + +import java.io.IOException; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import kcg.faics.cmmn.service.impl.CodeMapper; +import kcg.faics.cmmn.service.impl.LogMapper; +import kcg.faics.member.service.MemberService; +import kcg.faics.member.vo.MemberVO; +import kcg.faics.sec.service.impl.SecurityMapper; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.DefaultRedirectStrategy; +import org.springframework.security.web.RedirectStrategy; +import org.springframework.security.web.authentication.AuthenticationSuccessHandler; + +import egovframework.rte.fdl.property.EgovPropertyService; + +/** + * LoginSuccessHandler.java + * @author 임새미 + * @since 2016. 10. 11. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 11. 임새미 최초생성 + * + */ +public class LoginSuccessHandler implements AuthenticationSuccessHandler { + + /** + * 사용자 서비스 객체. + */ + @Resource(name = "memberService") + private MemberService memberService; + + @Resource(name = "securityMapper") + SecurityMapper securityMapper; + + @Resource(name = "codeMapper") + CodeMapper codeMapper; + + @Resource(name = "logMapper") + LogMapper logMapper; + + @Resource(name = "propertiesService") + private EgovPropertyService propertiesService; + + + private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy(); + + private String successUrl = "/"; + + public void setSuccessUrl(String successUrl){ + this.successUrl = successUrl; + } + + + /** + * security 인증 성공 이후의 절차를 진행한다. + * + * @param request request객체 + * @param response response객체 + * @param authentication authentication객체 + * @exception IOException, ServletException 입출력, 서블릿 예외 + */ + @Override + public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) + throws IOException, ServletException { + + try { + LoginUserVO user = UserUtil.getMemberInfo(); + + HttpSession session = request.getSession(); + session.setAttribute("userVO", user); + + + String userId = user.getUserid(); + + Map rptApprove = securityMapper.getReportAgentApprove(userId); + + String head = null; + String section = null; + if (rptApprove != null) { + head = (String) rptApprove.get("HEAD"); + section = (String) rptApprove.get("SECTION"); + } + /* 계장? */ + user.setAuthHead(head != null && head.equals(userId) ? 1 : 0); + + /* 차장? */ + user.setAuthSection(section != null && section.equals(userId) ? 1 : 0); + + + Map rptAu = (Map) securityMapper.getReportAgentAuCode(userId); + int authCode = 0; + if (rptAu != null) { + + if (rptAu.get("CODE") == null) { + authCode = 32; + } else { + authCode = Integer.parseInt(rptAu.get("CODE").toString()); + } + } + user.setAuthCode(authCode); + user.setAuthSearch(authCode & 1); + user.setAuthStatistics(authCode & 2); + user.setAuthWaitList(authCode & 4); + user.setAuthManage(authCode & 8); + user.setAuthProxySection(authCode & 16); + user.setAuthProxyHead(authCode & 32); + + /* auth_approve? */ + user.setAuthApprove(user.getAuthHead() | user.getAuthSection() | user.getAuthProxyHead() | user.getAuthProxySection()); + + String duties = user.getDuties(); + // if ($this->auth_proxy_section || $this->auth_section) ?? + if (user.getAuthProxySection() > 0 || user.getAuthSection() > 0) { + duties = "03"; + } + // if ($this->auth_proxy_head || $this->auth_head) ?? + if (user.getAuthProxyHead() > 0 || user.getAuthHead() > 0) { + duties = "04"; + } + user.setDuties(duties); + + /* auth_type */ + user.setAuthType(getAuthType(user.getPlace1())); + /* Place 1 */ + user.setPlace1Str(codeMapper.getPlace1NameByCode(user.getPlace1(), false)); + user.setPlace1Yak(codeMapper.getPlace1NameByCode(user.getPlace1(), true)); + /* Place 2 */ + user.setPlace2Str(codeMapper.getPlace2NameByCode(user.getPlace1(), user.getPlace2())); + /* Position */ + user.setPositionStr(codeMapper.getPositionNameByCode(user.getPosition())); + /* Duties */ + user.setDutiesStr(codeMapper.getDutiesNameByCode(user.getDuties())); + + /* IP정보 */ + String ip = request.getHeader("X-FORWARDED-FOR"); + if (StringUtils.isBlank(ip)) { + ip = request.getRemoteAddr(); + } + user.setIp(ip); + + /* 로그인 플래그 */ + user.setLoginchk("Y"); + + /* 로그인 로그 등록 */ + securityMapper.updateLoginInfo(user); + logMapper.insertLoginoutLog(user, 1); + + /* 관리자? */ + int roleLev = user.getRolelevel(); + user.setAuthAdmin((roleLev <= propertiesService.getInt("adminLevel")) ? 1 : 0); + user.setIsAdmin((roleLev <= propertiesService.getInt("adminLevel")) ? true : false); + user.setIsSysAdmin((roleLev <= propertiesService.getInt("sysAdminLevel")) || propertiesService.getString("sysAdminId").equals(userId) ? true : false); + + /* 로그인 실패횟수 초기화 */ + MemberVO memberVO = new MemberVO(); + memberVO.setUserid(user.getUserid()); + if (user.getType() == 1) { + memberVO.setUsertype("f"); + } + memberService.initChkcnt(memberVO); + + /* 설정된 successUrl로 리다이렉트한다.*/ + redirectStrategy.sendRedirect(request, response, successUrl); + + } catch (Exception e) { + e.printStackTrace(); + } + + } + + + /** + * 소속기관에 따른 기관 타입을 결정한다. + * + * @param place 소속기관 코드 + * @return 기관 타입 + */ + private int getAuthType(String place){ + int type = 10; + if ("PS00".equalsIgnoreCase(place)) { + type = 1; + } else if ("PS92".equalsIgnoreCase(place) || "PS93".equalsIgnoreCase(place) || "PS94".equalsIgnoreCase(place) || "PS91".equalsIgnoreCase(place) || "ps90".equalsIgnoreCase(place)) { + type = 6; + } + return type; + } + +} diff --git a/src/main/java/kcg/faics/sec/LoginUserVO.java b/src/main/java/kcg/faics/sec/LoginUserVO.java new file mode 100644 index 0000000..1ad19d6 --- /dev/null +++ b/src/main/java/kcg/faics/sec/LoginUserVO.java @@ -0,0 +1,587 @@ +package kcg.faics.sec; + +import java.io.Serializable; + +/** + * LoginUserVO.java + * @author 임새미 + * @since 2016. 10. 13. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 13. 임새미 최초생성 + * + */ +public class LoginUserVO implements Serializable { + + private static final long serialVersionUID = -442635991774448712L; + + /** + * rnum. + */ + private int rnum; + + /** + * 경찰 타입. 외사경찰 : 1, 일반 경찰 : 2 + */ + private int type; + + /* DB 컬럼 */ + /** + * 사용자 ID. + */ + private String userid; + /** + * 비밀번호. + */ + private String passwd; + /** + * 주민등록번호. + */ + private String idno; + /** + * 이름. + */ + private String name; + /** + * 소속1. + */ + private String place1; + /** + * 소속2. + */ + private String place2; + /** + * 소속3(계:외사/협력/기타). + */ + private String place3; + /** + * 계급. + */ + private String position; + /** + * 직책(없음/반장/계장/과장). + */ + private String duties; + /** + * 현재 로그인 여부. + */ + private String loginchk; + /** + * IP. + */ + private String ip; + /** + * 사용자 등급. + */ + private int usegrade; + + /* 권한 & 직무코드에 따른 명칭 */ + private String role; + /** + * 소속1 명칭. + */ + private String place1Str; + /** + * 소속1 명칭 약자. + */ + private String place1Yak; + /** + * 소속2 명칭. + */ + private String place2Str; + /** + * 소속3 명칭. + */ + private String place3Str; + /** + * 계급 명칭. + */ + private String positionStr; + /** + * 직급 명칭. + */ + private String dutiesStr; + + + /* 시스템 권한*/ + /** + * 권한 레벨. + */ + private int rolelevel; + /** + * 각 기관의 관리자 여부. + */ + private boolean isAdmin; + + /** + * 시스템 관리자 여부. + */ + private boolean isSysAdmin; + + private int authType; + private int authAdmin; + private int authSection; + private int authHead; + private int authApprove; + + + /* 견문 권한 */ + private int authCode; + private int authSearch; + private int authStatistics; + private int authWaitList; + private int authManage; + private int authProxySection; + private int authProxyHead; + + /** + * 로그인 실패횟수. + */ + private int chkcnt = 0; + + /** + * @return the rnum + */ + public int getRnum() { + return rnum; + } + /** + * @param rnum the rnum to set + */ + public void setRnum(final int rnum) { + this.rnum = rnum; + } + /** + * @return the type + */ + public int getType() { + return type; + } + /** + * @param type the type to set + */ + public void setType(final int type) { + this.type = type; + } + /** + * @return the userid + */ + public String getUserid() { + return userid; + } + /** + * @param userid the userid to set + */ + public void setUserid(final String userid) { + this.userid = userid; + } + /** + * @return the passwd + */ + public String getPasswd() { + return passwd; + } + /** + * @param passwd the passwd to set + */ + public void setPasswd(final String passwd) { + this.passwd = passwd; + } + /** + * @return the idno + */ + public String getIdno() { + return idno; + } + /** + * @param idno the idno to set + */ + public void setIdno(final String idno) { + this.idno = idno; + } + /** + * @return the name + */ + public String getName() { + return name; + } + /** + * @param name the name to set + */ + public void setName(final String name) { + this.name = name; + } + /** + * @return the place1 + */ + public String getPlace1() { + return place1; + } + /** + * @param place1 the place1 to set + */ + public void setPlace1(final String place1) { + this.place1 = place1; + } + /** + * @return the place2 + */ + public String getPlace2() { + return place2; + } + /** + * @param place2 the place2 to set + */ + public void setPlace2(final String place2) { + this.place2 = place2; + } + /** + * @return the place3 + */ + public String getPlace3() { + return place3; + } + /** + * @param place3 the place3 to set + */ + public void setPlace3(final String place3) { + this.place3 = place3; + } + /** + * @return the position + */ + public String getPosition() { + return position; + } + /** + * @param position the position to set + */ + public void setPosition(final String position) { + this.position = position; + } + /** + * @return the duties + */ + public String getDuties() { + return duties; + } + /** + * @param duties the duties to set + */ + public void setDuties(final String duties) { + this.duties = duties; + } + /** + * @return the loginchk + */ + public String getLoginchk() { + return loginchk; + } + /** + * @param loginchk the loginchk to set + */ + public void setLoginchk(final String loginchk) { + this.loginchk = loginchk; + } + /** + * @return the ip + */ + public String getIp() { + return ip; + } + /** + * @param ip the ip to set + */ + public void setIp(final String ip) { + this.ip = ip; + } + /** + * @return the usegrade + */ + public int getUsegrade() { + return usegrade; + } + /** + * @param usegrade the usegrade to set + */ + public void setUsegrade(final int usegrade) { + this.usegrade = usegrade; + } + /** + * @return the role + */ + public String getRole() { + return role; + } + /** + * @param role the role to set + */ + public void setRole(final String role) { + this.role = role; + } + /** + * @return the place1Str + */ + public String getPlace1Str() { + return place1Str; + } + /** + * @param place1Str the place1Str to set + */ + public void setPlace1Str(final String place1Str) { + this.place1Str = place1Str; + } + /** + * @return the place1Yak + */ + public String getPlace1Yak() { + return place1Yak; + } + /** + * @param place1Yak the place1Yak to set + */ + public void setPlace1Yak(final String place1Yak) { + this.place1Yak = place1Yak; + } + /** + * @return the place2Str + */ + public String getPlace2Str() { + return place2Str; + } + /** + * @param place2Str the place2Str to set + */ + public void setPlace2Str(final String place2Str) { + this.place2Str = place2Str; + } + /** + * @return the place3Str + */ + public String getPlace3Str() { + return place3Str; + } + /** + * @param place3Str the place3Str to set + */ + public void setPlace3Str(final String place3Str) { + this.place3Str = place3Str; + } + /** + * @return the positionStr + */ + public String getPositionStr() { + return positionStr; + } + /** + * @param positionStr the positionStr to set + */ + public void setPositionStr(final String positionStr) { + this.positionStr = positionStr; + } + /** + * @return the dutiesStr + */ + public String getDutiesStr() { + return dutiesStr; + } + /** + * @param dutiesStr the dutiesStr to set + */ + public void setDutiesStr(final String dutiesStr) { + this.dutiesStr = dutiesStr; + } + /** + * @return the rolelevel + */ + public int getRolelevel() { + return rolelevel; + } + /** + * @param rolelevel the rolelevel to set + */ + public void setRolelevel(final int rolelevel) { + this.rolelevel = rolelevel; + } + /** + * @return the isAdmin + */ + public boolean getIsAdmin() { + return isAdmin; + } + /** + * @param isAdmin the isAdmin to set + */ + public void setIsAdmin(final boolean isAdmin) { + this.isAdmin = isAdmin; + } + /** + * @return the isSysAdmin + */ + public boolean getIsSysAdmin() { + return isSysAdmin; + } + /** + * @param isSysAdmin the isSysAdmin to set + */ + public void setIsSysAdmin(final boolean isSysAdmin) { + this.isSysAdmin = isSysAdmin; + } + /** + * @return the authType + */ + public int getAuthType() { + return authType; + } + /** + * @param authType the authType to set + */ + public void setAuthType(final int authType) { + this.authType = authType; + } + /** + * @return the authAdmin + */ + public int getAuthAdmin() { + return authAdmin; + } + /** + * @param authAdmin the authAdmin to set + */ + public void setAuthAdmin(final int authAdmin) { + this.authAdmin = authAdmin; + } + /** + * @return the authSection + */ + public int getAuthSection() { + return authSection; + } + /** + * @param authSection the authSection to set + */ + public void setAuthSection(final int authSection) { + this.authSection = authSection; + } + /** + * @return the authHead + */ + public int getAuthHead() { + return authHead; + } + /** + * @param authHead the authHead to set + */ + public void setAuthHead(final int authHead) { + this.authHead = authHead; + } + /** + * @return the authApprove + */ + public int getAuthApprove() { + return authApprove; + } + /** + * @param authApprove the authApprove to set + */ + public void setAuthApprove(final int authApprove) { + this.authApprove = authApprove; + } + /** + * @return the authCode + */ + public int getAuthCode() { + return authCode; + } + /** + * @param authCode the authCode to set + */ + public void setAuthCode(final int authCode) { + this.authCode = authCode; + } + /** + * @return the authSearch + */ + public int getAuthSearch() { + return authSearch; + } + /** + * @param authSearch the authSearch to set + */ + public void setAuthSearch(final int authSearch) { + this.authSearch = authSearch; + } + /** + * @return the authStatistics + */ + public int getAuthStatistics() { + return authStatistics; + } + /** + * @param authStatistics the authStatistics to set + */ + public void setAuthStatistics(final int authStatistics) { + this.authStatistics = authStatistics; + } + /** + * @return the authWaitList + */ + public int getAuthWaitList() { + return authWaitList; + } + /** + * @param authWaitList the authWaitList to set + */ + public void setAuthWaitList(final int authWaitList) { + this.authWaitList = authWaitList; + } + /** + * @return the authManage + */ + public int getAuthManage() { + return authManage; + } + /** + * @param authManage the authManage to set + */ + public void setAuthManage(final int authManage) { + this.authManage = authManage; + } + /** + * @return the authProxySection + */ + public int getAuthProxySection() { + return authProxySection; + } + /** + * @param authProxySection the authProxySection to set + */ + public void setAuthProxySection(final int authProxySection) { + this.authProxySection = authProxySection; + } + /** + * @return the authProxyHead + */ + public int getAuthProxyHead() { + return authProxyHead; + } + /** + * @param authProxyHead the authProxyHead to set + */ + public void setAuthProxyHead(final int authProxyHead) { + this.authProxyHead = authProxyHead; + } + /** + * @return the chkcnt + */ + public final int getChkcnt() { + return chkcnt; + } + /** + * @param chkcnt the chkcnt to set + */ + public final void setChkcnt(final int chkcnt) { + this.chkcnt = chkcnt; + } +} diff --git a/src/main/java/kcg/faics/sec/LogoutSuccessHandler.java b/src/main/java/kcg/faics/sec/LogoutSuccessHandler.java new file mode 100644 index 0000000..f5a74c0 --- /dev/null +++ b/src/main/java/kcg/faics/sec/LogoutSuccessHandler.java @@ -0,0 +1,60 @@ +package kcg.faics.sec; + +import java.io.IOException; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import kcg.faics.cmmn.service.impl.LogMapper; +import kcg.faics.sec.service.impl.SecurityMapper; + +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler; + +import egovframework.rte.fdl.security.userdetails.EgovUserDetails; + +/** + * LogoutSuccessHandler.java + * @author 임새미 + * @since 2016. 11. 11. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 11. 11. 임새미 최초생성 + * + */ +public class LogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler { + + private String successUrl = "/loginView.do"; + + public void setSuccessUrl(String successUrl){ + this.successUrl = successUrl; + } + + @Resource(name = "logMapper") + LogMapper logMapper; + + @Resource(name = "securityMapper") + SecurityMapper securityMapper; + + @Override + public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { + + if (authentication != null) { + Object principal = authentication.getPrincipal(); + if (principal instanceof EgovUserDetails) { + EgovUserDetails details = (EgovUserDetails) principal; + LoginUserVO user = (LoginUserVO) details.getEgovUserVO(); + logMapper.insertLoginoutLog(user, 2); + + user.setLoginchk("N"); + securityMapper.updateLoginInfo(user); + } + } + + setDefaultTargetUrl(successUrl); + super.onLogoutSuccess(request, response, authentication); + } +} diff --git a/src/main/java/kcg/faics/sec/ShaPasswordEncoderEx.java b/src/main/java/kcg/faics/sec/ShaPasswordEncoderEx.java new file mode 100644 index 0000000..419d8c4 --- /dev/null +++ b/src/main/java/kcg/faics/sec/ShaPasswordEncoderEx.java @@ -0,0 +1,31 @@ +/** + * + */ +package kcg.faics.sec; + +import org.apache.commons.lang.StringUtils; +import org.springframework.security.authentication.encoding.ShaPasswordEncoder; + +/** + * @author kimnomin + * + */ +public class ShaPasswordEncoderEx extends ShaPasswordEncoder { + + /** + * 생성자. + * + * @param strength SHA Strength + */ + public ShaPasswordEncoderEx(final int strength) { + super(strength); + } + + @Override + public boolean isPasswordValid(final String encPass, final String rawPass, final Object salt) { + String pass1 = "" + encPass; + String pass2 = encodePassword(rawPass, salt); + + return StringUtils.equalsIgnoreCase(pass1, pass2); + } +} diff --git a/src/main/java/kcg/faics/sec/UserUtil.java b/src/main/java/kcg/faics/sec/UserUtil.java new file mode 100644 index 0000000..6153845 --- /dev/null +++ b/src/main/java/kcg/faics/sec/UserUtil.java @@ -0,0 +1,121 @@ +package kcg.faics.sec; + +import java.util.List; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; + +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.cmmn.vo.CodeVO; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Component; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; + +@Component +public class UserUtil { + + /** + * 코드관련 정보 인터페이스. + */ + public static CodeService codeService; + + @Autowired + private CodeService codeServInstance; + + @PostConstruct + private void init() { + codeService = codeServInstance; + } + + + /** + * 현재 로그인 상태인 회원의 정보를 반환한다. 로그인 상태가 아니면 null값을 반환한다. + * @return loginUserVO 회원 정보 + */ + public static LoginUserVO getMemberInfo() { + return (LoginUserVO) EgovUserDetailsHelper.getAuthenticatedUser(); + } + + /** + * 현재 로그인 상태인 회원과 선택한 회원이 동일한지 확인한다. + * @return boolean + */ + public static boolean isEqualMember(String target) { + LoginUserVO member = getMemberInfo(); + if (getMemberInfo() != null) { + if(member.getUserid().equals(target)){ + return true; + } else{ + return false; + } + } else { + return false; + } + } + + /** + * 각 기관의 담당자(관리자)인지 아닌지를 판별한다. + *
시스템관리자일 경우 true 반환
+ * @return boolean + */ + public static boolean isAdmin() { + LoginUserVO user = getMemberInfo(); + return user.getIsAdmin() || user.getIsSysAdmin(); + } + /** + * 시스템 관리자인지 아닌지를 판변한다. + * @return boolean + */ + public static boolean isSysAdmin() { + LoginUserVO user = getMemberInfo(); + return user.getIsSysAdmin(); + } + /** + * 외사경찰인지 아닌지를 판별한다. + * @return boolean + */ + public static boolean isFa() { + LoginUserVO user = getMemberInfo(); + if (isAdmin() || user.getRole().startsWith("FA_USER")) return true; + return false; + } + /** + * 일반경찰인지 아닌지를 판별한다. + * @return boolean + */ + public static boolean isNoFa() { + LoginUserVO user = getMemberInfo(); + if (isAdmin() || user.getRole().startsWith("NFA_USER")) return true; + return false; + } + + public static Authentication getCurrentAuthentication(){ + SecurityContext context = SecurityContextHolder.getContext(); + Authentication authentication = context.getAuthentication(); + return authentication; + } + + /** + * 현재 소속이 지방청인지 판별한다. + * @return boolean + */ + public static boolean isRegional() { + + LoginUserVO user = getMemberInfo(); + List agencyCategory = null; + + try { + agencyCategory = codeService.getPlace1SubList(user.getPlace1()); + } catch (Exception e) { + agencyCategory = null; + } + + return !agencyCategory.isEmpty(); + } +} diff --git a/src/main/java/kcg/faics/sec/filter/ReloadableFilterInvocationSecurityMetadataSource.java b/src/main/java/kcg/faics/sec/filter/ReloadableFilterInvocationSecurityMetadataSource.java new file mode 100644 index 0000000..1ac8084 --- /dev/null +++ b/src/main/java/kcg/faics/sec/filter/ReloadableFilterInvocationSecurityMetadataSource.java @@ -0,0 +1,91 @@ +package kcg.faics.sec.filter; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import kcg.faics.sec.service.impl.SecurityMapper; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.access.ConfigAttribute; +import org.springframework.security.web.FilterInvocation; +import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource; +import org.springframework.security.web.util.matcher.RequestMatcher; + + +/** + * ReloadableFilterInvocationSecurityMetadataSource.java + * + * egovframework.rte.fdl.security.intercept.EgovReloadableFilterInvocationSecurityMetadataSource의 DB 데이터 받아오는 부분만 수정 + * + * @author 임새미 + * @since 2016. 10. 7. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 7. 임새미 최초생성 + * + */ +public class ReloadableFilterInvocationSecurityMetadataSource implements FilterInvocationSecurityMetadataSource { + private static final Logger LOGGER = LoggerFactory.getLogger(ReloadableFilterInvocationSecurityMetadataSource.class); + + @Resource(name = "securityMapper") + SecurityMapper securityMapper; + + private final Map> requestMap; + + public ReloadableFilterInvocationSecurityMetadataSource(LinkedHashMap> requestMap) { + this.requestMap = requestMap; + } + + public Collection getAllConfigAttributes() { + Set allAttributes = new HashSet(); + + for (Map.Entry> entry : requestMap.entrySet()) { + allAttributes.addAll(entry.getValue()); + } + + return allAttributes; + } + + public Collection getAttributes(Object object) { + final HttpServletRequest request = ((FilterInvocation) object).getRequest(); + for (Map.Entry> entry : requestMap.entrySet()) { + if (entry.getKey().matches(request)) { + return entry.getValue(); + } + } + return null; + } + + public boolean supports(Class clazz) { + return FilterInvocation.class.isAssignableFrom(clazz); + } + + public void reload() throws Exception { + + LinkedHashMap> reloadedMap = securityMapper.getRolesAndUrl(); + + Iterator>> iterator = reloadedMap.entrySet().iterator(); + + // 이전 데이터 삭제 + requestMap.clear(); + + while (iterator.hasNext()) { + Entry> entry = iterator.next(); + + requestMap.put(entry.getKey(), entry.getValue()); + } + + LOGGER.info("Secured Url Resources - Role Mappings reloaded at Runtime!"); + } +} diff --git a/src/main/java/kcg/faics/sec/filter/SecurityUrlResourcesMapFactoryBean.java b/src/main/java/kcg/faics/sec/filter/SecurityUrlResourcesMapFactoryBean.java new file mode 100644 index 0000000..dab4cd5 --- /dev/null +++ b/src/main/java/kcg/faics/sec/filter/SecurityUrlResourcesMapFactoryBean.java @@ -0,0 +1,63 @@ +/** + * SecurityUrlResourcesMapFactoryBean.java + * @author 임새미 + * @since 2016. 10. 7. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 7. 임새미 최초생성 + * + */ +package kcg.faics.sec.filter; + +import java.util.LinkedHashMap; +import java.util.List; + +import javax.annotation.Resource; + +import kcg.faics.sec.service.impl.SecurityMapper; + +import org.springframework.beans.factory.FactoryBean; +import org.springframework.security.access.ConfigAttribute; +import org.springframework.security.web.util.matcher.RequestMatcher; + +/** + * SecurityUrlResourcesMapFactoryBean.java + * + * egovframework.rte.fdl.security.intercept.UrlResourcesMapFactoryBean의 DB 데이터 받아오는 부분만 수정 + * + * @author 임새미 + * @since 2016. 10. 7. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 7. 임새미 최초생성 + * + */ +public class SecurityUrlResourcesMapFactoryBean implements FactoryBean>> { + + @Resource(name = "securityMapper") + SecurityMapper securityMapper; + + private LinkedHashMap> resourcesMap; + + public void init() throws Exception { + resourcesMap = securityMapper.getRolesAndUrl(); + } + + public LinkedHashMap> getObject() throws Exception { + if (resourcesMap == null) { + init(); + } + return resourcesMap; + } + + @SuppressWarnings("rawtypes") + public Class getObjectType() { + return LinkedHashMap.class; + } + + public boolean isSingleton() { + return true; + } +} diff --git a/src/main/java/kcg/faics/sec/role/HierarchyStringsFactoryBean.java b/src/main/java/kcg/faics/sec/role/HierarchyStringsFactoryBean.java new file mode 100644 index 0000000..92ccfa8 --- /dev/null +++ b/src/main/java/kcg/faics/sec/role/HierarchyStringsFactoryBean.java @@ -0,0 +1,54 @@ +package kcg.faics.sec.role; + +import javax.annotation.Resource; + +import kcg.faics.sec.service.impl.SecurityMapper; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.FactoryBean; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +/** + * HierarchyStringsFactoryBean.java + * @author 임새미 + * @since 2016. 10. 7. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 7. 임새미 최초생성 + * + */ +public class HierarchyStringsFactoryBean implements FactoryBean, ApplicationContextAware { + + @Resource(name = "securityMapper") + SecurityMapper securityMapper; + + private String hierarchyStrings; + private ApplicationContext context; + + public void init() throws Exception { + hierarchyStrings = securityMapper.getHierarchyRoles(); + } + + public String getObject() throws Exception { + if (hierarchyStrings == null) { + init(); + } + return hierarchyStrings; + } + + public Class getObjectType() { + return String.class; + } + + public boolean isSingleton() { + return true; + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.context = applicationContext; + } + +} diff --git a/src/main/java/kcg/faics/sec/role/SecurityRolesVO.java b/src/main/java/kcg/faics/sec/role/SecurityRolesVO.java new file mode 100644 index 0000000..aa2ca16 --- /dev/null +++ b/src/main/java/kcg/faics/sec/role/SecurityRolesVO.java @@ -0,0 +1,77 @@ +/** + * SecurityRoles.java + * @author 임새미 + * @since 2016. 10. 6. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 6. 임새미 최초생성 + * + */ +package kcg.faics.sec.role; + +import org.springframework.security.core.GrantedAuthority; + +/** + * SecurityRoles.java + * @author 임새미 + * @since 2016. 10. 6. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 6. 임새미 최초생성 + * + */ +public class SecurityRolesVO implements GrantedAuthority { + + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 6222106130282740922L; + + + /** + * 사용자 ID + */ + private String userid; + + /** + * Role 이름 + */ + private String authority; + + /** + * 사용자 ID 값을 반환한다. + * @return 사용자 ID + */ + public String getUserid() { + return userid; + } + + /** + * 사용자 ID 값을 설정한다. + * @param username 사용자 ID + */ + public void setUserid(String userid) { + this.userid = userid; + } + + /** + * Role 이름 값을 반환한다. + * @return Role 이름 값 + */ + @Override + public String getAuthority() { + return authority; + } + + /** + * Role 이름 값을 설정한다. + * @param authority Role 이름 값 + */ + public void setAuthority(String authority) { + this.authority = authority; + } + +} diff --git a/src/main/java/kcg/faics/sec/service/impl/AriaPasswordEncoder.java b/src/main/java/kcg/faics/sec/service/impl/AriaPasswordEncoder.java new file mode 100644 index 0000000..5924a88 --- /dev/null +++ b/src/main/java/kcg/faics/sec/service/impl/AriaPasswordEncoder.java @@ -0,0 +1,86 @@ +package kcg.faics.sec.service.impl; + +import org.springframework.security.crypto.codec.Base64; +import org.springframework.security.crypto.password.PasswordEncoder; + +import egovframework.rte.fdl.cryptography.EgovARIACryptoService; + +/** + * AriaPasswordEncoder.java + * + * @author 임새미 + * @since 2016. 10. 10. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 10. 임새미 최초생성 + * + */ +public class AriaPasswordEncoder implements PasswordEncoder { + + /* EgovARIACryptoService */ + private EgovARIACryptoService ariaCryptoService; + + /* HashKey */ + private String hashKey; + + /** + * 해쉬 키를 입력 받는다. + * + * @param hashedPassword 해시비밀번호 + */ + public void setHashKey(String hashKey) { + this.hashKey = hashKey; + } + + /** + * 전자정부프레임워크 Aria 암호화 서비스 객체를 설정한다. + * + * @param ariaCryptoService EgovARIACryptoService 서비스 객체 + */ + public void setAriaCryptoService(EgovARIACryptoService ariaCryptoService) { + this.ariaCryptoService = ariaCryptoService; + } + + /** + * 입력받은 비밀번호를 암호화 한다. + * + * @param rawPassword 로그인 시 입력한 비밀번호 + * @return 비밀번호 -> ARIA -> Base64 로 암호화된 문자열 + */ + @Override + public String encode(CharSequence rawPassword) { + String password = rawPassword.toString(); + String result = null; + try { + byte[] encrypted = ariaCryptoService.encrypt(password.getBytes("UTF-8"), hashKey); + byte[] encoded = Base64.encode(encrypted); + result = new String(encoded, 0, encoded.length, "UTF-8"); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + /** + * DB에 저장된 사용자 비밀번호와 입력받은 비밀번호의 일치여부를 판단한다. + * + * @param rawPassword 로그인 시 입력한 비밀번호 + * @return 비밀번호 일치여부 + */ + @Override + public boolean matches(CharSequence rawPassword, String encodedPassword) { + String encrypted = encode(rawPassword); + if(encrypted.equals(encodedPassword)){ + return true; + } + return false; + } + + /* hash key 생성을 위한 main 함수 + public static void main(String[] args) { + EgovPasswordEncoder encoder = new EgovPasswordEncoder(); + encoder.setAlgorithm("SHA-256"); + System.out.println("Digested Password : " + encoder.encryptPassword("faics1234567")); + }*/ +} diff --git a/src/main/java/kcg/faics/sec/service/impl/SecurityMapper.java b/src/main/java/kcg/faics/sec/service/impl/SecurityMapper.java new file mode 100644 index 0000000..246549b --- /dev/null +++ b/src/main/java/kcg/faics/sec/service/impl/SecurityMapper.java @@ -0,0 +1,226 @@ +package kcg.faics.sec.service.impl; + +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import kcg.faics.member.vo.MemberVO; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.role.SecurityRolesVO; + +import org.springframework.security.access.ConfigAttribute; +import org.springframework.security.access.SecurityConfig; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import org.springframework.security.web.util.matcher.RequestMatcher; +import org.springframework.stereotype.Repository; + +import egovframework.rte.fdl.security.securedobject.impl.SelfRegexRequestMatcher; +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +/** + * SecurityMapper.java + * @author 임새미 + * @since 2016. 10. 6. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 6. 임새미 최초생성 + * + */ +@Repository("securityMapper") +public class SecurityMapper extends EgovAbstractMapper { + + + /** + * 외사경찰 사용자 정보를 가져온다. + * + * @param userId 사용자 아이디 + * @return LoginVO 객체 + * @throws Exception 기본 예외 처리 + */ + public LoginUserVO getFaUser(String userId) { + return selectOne("Security.getFaLoginInfo", userId); + } + + /** + * 일반경찰 사용자 정보를 가져온다. + * + * @param userId 사용자 아이디 + * @return LoginVO 객체 + * @throws Exception 기본 예외 처리 + */ + public LoginUserVO getCmmnUser(String userId) { + return selectOne("Security.getCmmnLoginInfo", userId); + } + + /** + * 외사경찰 사용자의 ROLE정보를 가져온다. + * + * @param userId 사용자 아이디 + * @return SecurityRolesVO 객체 + * @throws Exception 기본 예외 처리 + */ + public SecurityRolesVO getAuthoritiesFaUser(String userId) { + return selectOne("Security.getAuthoritiesFa", userId); + } + + /** + * 일반경찰 사용자의 ROLE정보를 가져온다. + * + * @param userId 사용자 아이디 + * @return SecurityRolesVO 객체 + */ + public SecurityRolesVO getAuthoritiesCmmnUser(String userId) { + return selectOne("Security.getAuthoritiesCmmnUser", userId); + } + + /** + * ROLE의 계층 리스트를 가져온다. + * + * @return CHILD > PARENT로 되어있는 계층정보 문자열 + */ + public String getHierarchyRoles() { + List> resultList = selectList("Security.getHierarchyRoles"); + Iterator> itr = resultList.iterator(); + StringBuffer concatedRoles = new StringBuffer(); + Map tempMap; + while (itr.hasNext()) { + tempMap = itr.next(); + concatedRoles.append(tempMap.get("CHILD")); + concatedRoles.append(" > "); + concatedRoles.append(tempMap.get("PARENT")); + concatedRoles.append("\n"); + } + return concatedRoles.toString(); + } + + /** + * ROLE의 계층 리스트를 가져온다. + * + * @return URL과 ROLE의 매핑 리스트를 가져온다. + */ + public LinkedHashMap> getRolesAndUrl() { + List> resultList = selectList("Security.getRolesAndUrl"); + return patchRequestMatcher(makeLinkedHashMap(resultList)); + } + + + /** + * makeLinkedHashMap의 결과 데이터에서 Object key를 RequestMatcher로 캐스팅한다. + * egovframework.rte.fdl.security.securedobject.impl.SecuredObjectServiceImpl.getRolesAndUrl() 참조 + * + * @param data LinkedHashMap으로 변환된 데이터 + * @return 리턴값 설명 + */ + private LinkedHashMap> patchRequestMatcher(LinkedHashMap> data) { + LinkedHashMap> ret = new LinkedHashMap>(); + Set keys = data.keySet(); + + for (Object key : keys) { + ret.put((RequestMatcher) key, data.get(key)); + } + return ret; + } + + /** + * makeLinkedHashMap의 결과 데이터에서 Object key를 RequestMatcher로 캐스팅한다. + * egovframework.rte.fdl.security.securedobject.impl.SecuredObjectDAO.getRolesAndResources() 참조 + * + * @param list LinkedHashMap으로 변환된 데이터 + * @return 리턴값 설명 + */ + private LinkedHashMap> makeLinkedHashMap(List> list) { + /* URL패턴, ant/regx/ciRegex 세가지 형태가 있다. */ + String requestMatcherType = "regex"; + /* Method 단위 Role 지정이나 Pointcut을 사용하는 경우에는 + * http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:fdl:server_security:authorization의 sqlRolesAndMethod, sqlRolesAndPointcut 쿼리와 + * SecuredObjectDAO, SecuredObjectServiceImpl을 참조해서 변경한다. + * */ + boolean isResourcesUrl = true; + String resourceType = "URL"; + + LinkedHashMap> resourcesMap = new LinkedHashMap>(); + Iterator> itr = list.iterator(); + Map tempMap; + String preResource = null; + String presentResourceStr; + Object presentResource; + while (itr.hasNext()) { + tempMap = itr.next(); + + presentResourceStr = (String) tempMap.get(resourceType); + + if (isResourcesUrl) { + if (requestMatcherType.equalsIgnoreCase("regex")) { + presentResource = new SelfRegexRequestMatcher(presentResourceStr, null); + } else if (requestMatcherType.equalsIgnoreCase("ciRegex")) { + presentResource = new SelfRegexRequestMatcher(presentResourceStr, null, true); + } else { + presentResource = new AntPathRequestMatcher(presentResourceStr); + } + } else { + presentResource = presentResourceStr; + } + List configList = new LinkedList(); + + if (preResource != null && presentResourceStr.equals(preResource)) { + List preAuthList = resourcesMap.get(presentResource); + Iterator preAuthItr = preAuthList.iterator(); + while (preAuthItr.hasNext()) { + SecurityConfig tempConfig = (SecurityConfig) preAuthItr.next(); + configList.add(tempConfig); + } + } + + configList.add(new SecurityConfig((String) tempMap.get("AUTHORITY"))); + + resourcesMap.put(presentResource, configList); + + preResource = presentResourceStr; + } + return resourcesMap; + } + + /** + * 로그인 정보를 업데이트한다. + * + * @param loginUserVO 로그인 사용자 객체 + * @return 성공 - 1, 실패 - 0 + */ + public int updateLoginInfo(LoginUserVO loginUserVO) { + return (Integer) update("Security.updateLoginInfo", loginUserVO); + } + /** + * 차단 정보를 업데이트한다. + * + * @param loginUserVO 로그인 사용자 객체 + * @return 성공 - 1, 실패 - 0 + */ + public int updateChkInfo(MemberVO memberVO) { + return (Integer) update("Security.updateChkInfo", memberVO); + } + + /** + * 사용자의 견문 권한을 가져온다. + * + * @param userId 사용자 아이디 + * @return 견문권한 관련 레코드값(ID, CODE)이 담겨진 Map + */ + public Map getReportAgentAuCode(String userId) { + return selectOne("Security.getReportAgentAuCode", userId); + } + + /** + * 사용자가 어떤 소속의 차장 or 계장인지에 대한 정보를 가져온다. + * + * @param userId 사용자 아이디 + * @return 부서 권한 관련 레코드값(PLACE1, HEAD, SECTION)이 담겨진 Map + */ + public Map getReportAgentApprove(String userId) { + return selectOne("Security.getReportAgentApprove", userId); + } + +} diff --git a/src/main/java/kcg/faics/sec/service/impl/SecurityServiceImpl.java b/src/main/java/kcg/faics/sec/service/impl/SecurityServiceImpl.java new file mode 100644 index 0000000..b6606df --- /dev/null +++ b/src/main/java/kcg/faics/sec/service/impl/SecurityServiceImpl.java @@ -0,0 +1,99 @@ +/** + * SecurityServiceImpl.java + * @author 임새미 + * @since 2016. 10. 6. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 6. 임새미 최초생성 + * + */ +package kcg.faics.sec.service.impl; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import javax.annotation.Resource; + +import kcg.faics.member.UserType; +import kcg.faics.sec.FaicsUserDetails; +import kcg.faics.sec.LoginUserVO; + +import org.springframework.security.access.hierarchicalroles.RoleHierarchy; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; + +import egovframework.rte.fdl.security.userdetails.EgovUserDetails; + +/** + * SecurityServiceImpl.java + * @author 임새미 + * @since 2016. 10. 6. + * + * 수정일 수정자 수정내용 + * ------------- -------- --------------------------- + * 2016. 10. 6. 임새미 최초생성 + * + */ +public class SecurityServiceImpl implements UserDetailsService { + + @Resource(name = "securityMapper") + SecurityMapper securityMapper; + + private RoleHierarchy roleHierarchy; + + /** + * Role Hierarchy값을 설정한다. + * + * @param roleHierarchy + */ + public void setRoleHierarchy(RoleHierarchy roleHierarchy) { + this.roleHierarchy = roleHierarchy; + } + + + /** + * 사용자 정보를 DB에서 가져와 UserDetails 객체에 담아 반환한다. + * + * @param userId 사용자 아이디 + * @return UserDetails 객체 + */ + @Override + public UserDetails loadUserByUsername(String userId) throws UsernameNotFoundException { + + String usertypeStr = ""; + /* 외사경찰 */ + LoginUserVO fa = securityMapper.getFaUser(userId); + /* 일반경찰 */ + LoginUserVO nfa = securityMapper.getCmmnUser(userId); + + LoginUserVO member = null; + List authorities = new ArrayList(); + + if (fa != null) { + member = fa; + member.setType(1); + usertypeStr = UserType.FA; + authorities.add(securityMapper.getAuthoritiesFaUser(userId)); + } else if (nfa != null) { + member = nfa; + member.setType(2); + usertypeStr = UserType.CM; + authorities.add(securityMapper.getAuthoritiesCmmnUser(userId)); + } else { + throw new UsernameNotFoundException("접속자 정보를 찾을 수 없습니다."); + } + if (authorities.size() == 0) { + throw new UsernameNotFoundException("User " + member.getUserid()+ " has no GrantedAuthority"); + } + + /* RoleHierarchyImpl 에서 저장한 Role Hierarchy 정보가 저장된다. */ + Collection roleAuthorities = roleHierarchy.getReachableGrantedAuthorities(authorities); + //return new EgovUserDetails(member.getUserid(), member.getPasswd(), true, true, true, true, roleAuthorities, member); + return new FaicsUserDetails(member.getUserid(), member.getPasswd(), usertypeStr, member.getChkcnt(), true, true, true, true, roleAuthorities, member); + } + +} diff --git a/src/main/java/kcg/faics/stats/web/StatsController.java b/src/main/java/kcg/faics/stats/web/StatsController.java new file mode 100644 index 0000000..9aa7ad2 --- /dev/null +++ b/src/main/java/kcg/faics/stats/web/StatsController.java @@ -0,0 +1,622 @@ +package kcg.faics.stats.web; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import kcg.faics.board.service.BoardService; +import kcg.faics.board.util.BoardUtils; +import kcg.faics.board.util.BoardVOHandler; +import kcg.faics.board.vo.BoardCommentVO; +import kcg.faics.board.vo.BoardFileVO; +import kcg.faics.board.vo.BoardSearchVO; +import kcg.faics.board.vo.BoardVO; +import kcg.faics.cmmn.bbs.BaseCommentService; +import kcg.faics.cmmn.bbs.BaseFileService; +import kcg.faics.cmmn.file.FileResponser; +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.UserUtil; + +import org.apache.commons.lang.StringUtils; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.util.FileCopyUtils; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + + +/** + * 외사통계 컨트롤러 + * + * @author 하영지 + * + */ +@Controller +@RequestMapping("/stats") +public class StatsController { + + /** + * EgovPropertyService - properties값을 가져오는 인터페이스. + **/ + @Resource(name = "propertiesService") + private EgovPropertyService propertiesService; + + /** + * Validator - 유효성 검사. + **/ + @Resource(name = "beanValidator") + private DefaultBeanValidator beanValidator; + + /** + * BoardService - 게시판 데이터처리에 관한 인터페이스. + **/ + @Resource(name = "boardService") + private BoardService boardService; + + /** + * BoardFileService - 게시판 파일에 관한 인터페이스. + **/ + @Resource(name = "boardFileService") + private BaseFileService boardFileService; + + /** + * BoardCommentService - 게시판 덧글에 관한 인터페이스. + **/ + @Resource(name = "boardCommentService") + private BaseCommentService boardCommentService; + + /** + * CodeService - 코드에 관한 인터페이스. + **/ + @Resource(name = "codeService") + private CodeService codeService; + + /** + * 게시판id + */ + private final String BOARDID = "stat_bbs"; + + /** + * 게시판 목록 화면을 반환한다. + * + * @param req Request 객체 + * @param searchVO 검색, 페이지 정보 객체 + * @param model 모델 객체 + * @return 게시판 목록 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/list.do") + public String statsList(final HttpServletRequest req, @ModelAttribute("searchVO") final BoardSearchVO searchVO, final Model model) throws Exception { + + try { + // 통계 종류 + model.addAttribute("category", codeService.getCodeValues("STAT", null)); + + // 게시판 아이디 + searchVO.setId(BOARDID); + + /* 페이징 처리 정보 */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("pageSize")); + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + int totSearchCnt = boardService.selectListCnt(searchVO); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + + + /* 게시판 리스트 */ + List boardList = boardService.selectList(searchVO); + model.addAttribute("resultList", boardList); + + /* 게시판 상단 페이지 및 게시물 정보 표현을 위한 데이터 */ + int totCnt = boardService.selectTotalCnt(searchVO); + model.addAttribute("totalCnt", totCnt); + + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + + return "stats/statsList.tiles"; + } + + /** + * 게시물의 내용을 확인하는 페이지를 반환한다. + * + * @param boardVO 게시판 VO + * @param model 모델 객체 + * @return 게시물 조회 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/view.do", method = RequestMethod.GET) + public String statsView(final BoardVO boardVO, final Model model) throws Exception { + + try { + + // 게시판 아이디 + boardVO.setId(BOARDID); + model.addAttribute("beforeCategory", boardVO.getCategory()); + + /* 작성자와 조회자가 다른 경우 조회수 증가 */ + BoardVO board = boardService.select(boardVO); + if (!UserUtil.isEqualMember(board.getUserId())) { + boardService.incHit(board); + } + /* 게시판 내용 */ + model.addAttribute("boardVO", boardService.select(boardVO)); + /* 게시판 파일내용 */ + model.addAttribute("boardFileVO", boardFileService.selectList(BoardVOHandler.getBFileVO(boardVO))); + /* 게시판 덧글내용 */ + model.addAttribute("boardCommentVOList", boardCommentService.selectList(BoardVOHandler.getBCommentVO(boardVO))); + + /* 덧글 ModelAttribute */ + model.addAttribute("boardCommentVO", BoardVOHandler.getBCommentVO(boardVO)); + + /* 세션 사용자 정보 */ + model.addAttribute("loginUserVO", UserUtil.getMemberInfo()); + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + + return "stats/statsView.tiles"; + } + + /** + * 게시물 추가 화면을 반환한다. + * + * @param model 모델 객체 + * @param boardVO 게시판 VO + * @return 게시물 조회 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/addView.do", method = RequestMethod.GET) + public String statsAddView(final Model model, final BoardVO boardVO) throws Exception { + + boardVO.setId(BOARDID); + model.addAttribute("beforeCategory", boardVO.getCategory()); + + BoardVO modelAttr = new BoardVO(); + modelAttr.setId(boardVO.getId()); + + // 통계 종류 + model.addAttribute("category", codeService.getCodeValues("STAT", null)); + + /* 게시물 입력 Form ModelAttribute */ + model.addAttribute("boardVO", modelAttr); + /* create or modify 플래그 */ + model.addAttribute("registerFlag", "create"); + + return "stats/statsAdd.tiles"; + } + + /** + * 게시물을 추가한 후 추가한 게시물 화면으로 이동한다. + * + * @param multiRequest multpart타입의 요청 객체 + * @param boardVO 게시물 정보 객체 + * @param bindingResult 바인딩 객체 + * @param model 모델 객체 + * @param status 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/add.do", method = RequestMethod.POST) + public String statsAdd(final MultipartHttpServletRequest multiRequest, @ModelAttribute("boardVO") final BoardVO boardVO, + final BindingResult bindingResult, final Model model, final SessionStatus status) throws Exception { + + HashMap map = new HashMap(); + + boardVO.setId(BOARDID); + + /* 인증된 사용자인지 확인 */ + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (isAuthenticated) { + try { + /* 유효성 검사 */ + if (bindingResult.hasErrors()) { + model.addAttribute("boardVO", boardVO); + model.addAttribute("category", codeService.getCodeValues("STAT", null)); + return "stats/statsAdd.tiles"; + } + + final Map fileMap = multiRequest.getFileMap(); + + /* 사용자 정보 입력 */ + LoginUserVO user = UserUtil.getMemberInfo(); + boardVO.setUserId(user.getUserid()); + boardVO.setUserName(user.getName()); + boardVO.setPosition(user.getPosition()); + boardVO.setPlace1(user.getPlace1()); + boardVO.setData1(user.getPlace1Yak()); + boardVO.setData2(user.getPositionStr()); + boardVO.setIsReply(-1); + map = boardService.insert(boardVO, fileMap); + + status.setComplete(); + + int result = (Integer) map.get("result"); + int seq = (Integer) map.get("seq"); + if (result > 0 && seq > 0) { + return "redirect:/stats/view.do?seq=" + seq + "&id=" + boardVO.getId(); + } + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + } + + return "error/bizError"; + } + + /** + * 게시물 수정 화면으로 이동한다. + * + * @param boardVO 게시판VO 객체 + * @param model 모델 객체 + * @return 게시물 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/updateView.do", method = RequestMethod.POST) + public String updateView(final BoardVO boardVO, final Model model) throws Exception { + + boardVO.setId(BOARDID); + + BoardVO updateBoard = boardService.select(boardVO); + try { + /* 글 작성자와 세션 사용자의 아이디를 비교하여 본인여부를 판단한다 */ + if (updateBoard == null || !UserUtil.isEqualMember(updateBoard.getUserId())) { + return "redirect:/stats/statsView.do?seq=" + boardVO.getSeq() + "&id=" + boardVO.getId(); + } + + // 통계 종류 + model.addAttribute("category", codeService.getCodeValues("STAT", null)); + + model.addAttribute("boardVO", updateBoard); + model.addAttribute("registerFlag", "modify"); + model.addAttribute("boardFileVO", boardFileService.selectList(BoardVOHandler.getBFileVO(updateBoard))); + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + + return "stats/statsAdd.tiles"; + } + + /** + * 게시물을 수정한다. + * + * @param multiRequest multpart타입의 요청 객체 + * @param boardVO 게시물 정보 객체 + * @param bindingResult 바인딩 객체 + * @param model 모델 객체 + * @param status 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/update.do", method = RequestMethod.POST) + public String update(final MultipartHttpServletRequest multiRequest, @ModelAttribute("boardVO") final BoardVO boardVO, + final BindingResult bindingResult, final Model model, final SessionStatus status) throws Exception { + + boardVO.setId(BOARDID); + + try { + /* 글 작성자와 세션 사용자의 아이디를 비교하여 본인여부를 판단한다 */ + if (!UserUtil.isEqualMember(boardVO.getUserId())) { + return "redirect:/stats/view.do?seq=" + boardVO.getSeq() + "&id=" + boardVO.getId(); + } + + /* 유효성 검사 */ +// beanValidator.validate(boardVO, bindingResult); + if (bindingResult.hasErrors()) { + model.addAttribute("boardVO", boardVO); + model.addAttribute("registerFlag", "modify"); + model.addAttribute("category", codeService.getCodeValues("STAT", null)); + return "stats/statsAdd.tiles"; + } + + HashMap map = new HashMap(); + + String[] deleteFiles = multiRequest.getParameterValues("deleteFile"); + final Map fileMap = multiRequest.getFileMap(); + map = boardService.update(boardVO, fileMap, deleteFiles); + + status.setComplete(); + + int result = (Integer) map.get("result"); + int seq = (Integer) map.get("seq"); + + if (result > 0 && seq > 0) { + return "redirect:/stats/view.do?seq=" + seq + "&id=" + boardVO.getId(); + } + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + + return "redirect:/stats/list.do?id=" + boardVO.getId(); + } + + /** + * 게시물을 삭제한다. + * + * @param boardVO 게시판 VO + * @param model 모델 객체 + * @param status 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/delete.do", method = RequestMethod.POST) + public String delete(final BoardVO boardVO, final Model model, final SessionStatus status) throws Exception { + + boardVO.setId(BOARDID); + + try { + BoardVO deleteBoard = boardService.select(boardVO); + + if (deleteBoard == null || !UserUtil.isEqualMember(deleteBoard.getUserId())) { + return "redirect:/stats/view.do?seq=" + boardVO.getSeq() + "&id=" + boardVO.getId(); + } + + HashMap map = new HashMap(); + + map = boardService.delete(boardVO); + + status.setComplete(); + + if ((Integer) map.get("result") > 0) { + return "redirect:/stats/list.do?id=" + boardVO.getId(); + } + + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + + return "redirect:/stats/view.do?seq=" + boardVO.getSeq() + "&id=" + boardVO.getId(); + } + + /** + * 게시물을 삭제한다. + * + * @param bdId 삭제할 게시판 ID + * @param deleteBoard 모델 객체 + * @param status 세선 상태 객체 + * @return 게시물 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/selectedDelete.do", method = RequestMethod.POST) + public String deleteSelected(final int[] deleteBoard, final SessionStatus status) throws Exception { + + /* 관리자만 가능 */ + if (UserUtil.isAdmin()) { + try { + BoardVO boardVO = BoardVOHandler.getBoardVO(BOARDID, 0); + if (deleteBoard != null) { + boardService.selectAndDelete(boardVO, deleteBoard); + } + } catch (Exception e) { + e.printStackTrace(); + } + status.setComplete(); + } + return "redirect:/stats/list.do?id=" + BOARDID; + } + + /** + * 답글쓰기 화면을 반환한다. + * + * @param boardVO 게시판 VO + * @param model 모델 객체 + * @param status SessionStatus + * @return 답글쓰기 화면 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/replyView.do", method = RequestMethod.POST) + public String replyView(final BoardVO boardVO, final Model model, final SessionStatus status) throws Exception { + boardVO.setId(BOARDID); + + // 통계 종류 + model.addAttribute("category", codeService.getCodeValues("STAT", null)); + + BoardVO replyVO = BoardVOHandler.getBoardVO(boardVO); + replyVO.setStep(boardVO.getStep()); + replyVO.setGroupSeq(boardVO.getGroupSeq()); + replyVO.setDepth(boardVO.getDepth()); + model.addAttribute("boardVO", replyVO); + model.addAttribute("registerFlag", "reply"); + return "stats/statsAdd.tiles"; + } + + /** + * 답글을 등록하고 조회 화면을 반환한다. + * + * @param boardVO 게시물 VO + * @param bindingResult BindingResult + * @param model 모델 객체 + * @param status SessionStatus + * @param multiRequest MultipartHttpServletRequest + * @return 조회 화면 + */ + @RequestMapping(value = "/reply.do", method = RequestMethod.POST) + public String replyAdd(@ModelAttribute("boardVO") final BoardVO boardVO, + final BindingResult bindingResult, final Model model, final SessionStatus status, final MultipartHttpServletRequest multiRequest) { + boardVO.setId(BOARDID); + + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (isAuthenticated) { + try { +// beanValidator.validate(boardVO, bindingResult); + if (bindingResult.hasErrors()) { + model.addAttribute("boardVO", boardVO); + return "stats/statsAdd.tiles"; + } + + HashMap map = new HashMap(); + + final Map fileMap = multiRequest.getFileMap(); + + /* 사용자 정보 입력 */ + LoginUserVO user = UserUtil.getMemberInfo(); + boardVO.setUserId(user.getUserid()); + boardVO.setUserName(user.getName()); + boardVO.setPosition(user.getPosition()); + boardVO.setPlace1(user.getPlace1()); + boardVO.setData1(user.getPlace1Yak()); + boardVO.setData2(user.getPositionStr()); + boardVO.setIsReply(1); + map = boardService.insert(boardVO, fileMap); + + status.setComplete(); + + int result = (Integer) map.get("result"); + int seq = (Integer) map.get("seq"); + if (result > 0 && seq > 0) { + return "redirect:/stats/view.do?seq=" + seq + "&id=" + boardVO.getId(); + } + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + + } + + return "redirect:/stats/list.do?id=" + boardVO.getId(); + } + + /** + * 덧글을 등록한다. + * + * @param boardCommentVO 덧글 데이터 + * @param status SessionStatus + * @return json 객체 + */ + @ResponseBody + @RequestMapping(value = "/commentAdd.json", method = RequestMethod.POST) + public Object comment(@ModelAttribute("boardCommentVO") final BoardCommentVO boardCommentVO, final SessionStatus status) { + + HashMap ret = new HashMap(); + boardCommentVO.setId(BOARDID); + + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (isAuthenticated) { + try { + LoginUserVO user = UserUtil.getMemberInfo(); + boardCommentVO.setUserId(user.getUserid()); + boardCommentVO.setUserName(user.getName()); + + + ret = boardCommentService.insert(boardCommentVO); + if ((Integer) ret.get("result") > 0) { + ret.put("comment", boardCommentService.select(boardCommentVO)); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + status.setComplete(); + + return ret; + } + + /** + * 댓글을 삭제한다. + * + * @param boardCommentVO 댓글 VO + * @param status SessionStatus + * @return json 객체 + */ + @ResponseBody + @RequestMapping("/commentDelete.json") + public Object commentDelete(final BoardCommentVO boardCommentVO, final SessionStatus status) { + + HashMap ret = new HashMap(); + boardCommentVO.setId(BOARDID); + + int result = 0; + try { + BoardCommentVO commentVO = boardCommentService.select(boardCommentVO); + if (UserUtil.isEqualMember(commentVO.getUserId())) { + result = boardCommentService.delete(boardCommentVO); + } + } catch (Exception e) { + e.printStackTrace(); + } + + status.setComplete(); + + ret.put("result", result); + + return ret; + } + + /** + * 첨부파일로 등록된 파일에 대하여 다운로드를 제공한다. + * + * @param boardFileVO 게시판 파일 VO + * @param request Request 객체 + * @param response Response 객체 + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/download.do") + public void cvplFileDownload(final BoardFileVO boardFileVO, final HttpServletRequest request, final HttpServletResponse response) throws Exception { + boardFileVO.setId(BOARDID); + + BoardFileVO vo = boardFileService.select(boardFileVO); + String fileOrgName = vo.getOrgName(); + String storePathKey = BoardUtils.getStorePathKey(boardFileVO.getId()); + String fileFullPath = propertiesService.getString(storePathKey) + vo.getSaveName(); + + File file = new File(fileFullPath); + if (file.exists()) { + FileResponser.setResponse(file, fileOrgName, request, response); + BufferedInputStream in = null; + try { + in = new BufferedInputStream(new FileInputStream(file)); + FileCopyUtils.copy(in, response.getOutputStream()); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (in != null) { + try { + in.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + + } +} diff --git a/src/main/java/kcg/faics/stats/web/package-info.java b/src/main/java/kcg/faics/stats/web/package-info.java new file mode 100644 index 0000000..d4a8ced --- /dev/null +++ b/src/main/java/kcg/faics/stats/web/package-info.java @@ -0,0 +1,8 @@ +/** + * 외사통계 패키지 + */ +/** + * @author 하영지 + * + */ +package kcg.faics.stats.web; \ No newline at end of file diff --git a/src/main/java/kcg/faics/susa/service/impl/IncidentFileServiceImpl.java b/src/main/java/kcg/faics/susa/service/impl/IncidentFileServiceImpl.java new file mode 100644 index 0000000..0911bea --- /dev/null +++ b/src/main/java/kcg/faics/susa/service/impl/IncidentFileServiceImpl.java @@ -0,0 +1,20 @@ +package kcg.faics.susa.service.impl; + +import org.springframework.stereotype.Service; + +/** + * 내사사건 파일 관련 비지니스 로직 클래스. + * + * @author kimnomin + * + */ +@Service("incidentFileService") +public class IncidentFileServiceImpl extends SusaFileServiceImpl { + /** + * 생성자. + */ + public IncidentFileServiceImpl() { + super(); + setFilePathKeyword("Susa.in.fileStorePath"); + } +} diff --git a/src/main/java/kcg/faics/susa/service/impl/PromotFileServiceImpl.java b/src/main/java/kcg/faics/susa/service/impl/PromotFileServiceImpl.java new file mode 100644 index 0000000..f209441 --- /dev/null +++ b/src/main/java/kcg/faics/susa/service/impl/PromotFileServiceImpl.java @@ -0,0 +1,20 @@ +package kcg.faics.susa.service.impl; + +import org.springframework.stereotype.Service; + +/** + * 공작추진현황 파일 관련 비지니스 로직 클래스. + * + * @author kimnomin + * + */ +@Service("promotFileService") +public class PromotFileServiceImpl extends SusaFileServiceImpl { + /** + * 생성자. + */ + public PromotFileServiceImpl() { + super(); + setFilePathKeyword("Susa.pr.fileStorePath"); + } +} diff --git a/src/main/java/kcg/faics/susa/service/impl/SusaFileMapper.java b/src/main/java/kcg/faics/susa/service/impl/SusaFileMapper.java new file mode 100644 index 0000000..55ba4da --- /dev/null +++ b/src/main/java/kcg/faics/susa/service/impl/SusaFileMapper.java @@ -0,0 +1,59 @@ +package kcg.faics.susa.service.impl; + +import java.util.List; + +import kcg.faics.susa.vo.SusaFileVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +/** + * 외사수사 관련 파일 Mapper 클래스. + * + * @author kimnomin + * + */ +@Repository("susaFileMapper") +public class SusaFileMapper extends EgovAbstractMapper { + + /** + * 파일 정보를 반환한다. + * + * @param fileVO 파일 VO + * @return 파일 정보 + */ + public SusaFileVO selectFile(final SusaFileVO fileVO) { + return selectOne("SusaFile.select", fileVO); + } + + /** + * 파일 목록을 반환한다. + * + * @param fileVO 파일 VO + * @return 파일 목록 + */ + public List selectFiles(final SusaFileVO fileVO) { + return selectList("SusaFile.selectList", fileVO); + } + + /** + * 파일 정보를 입력한다. + * + * @param fileVO 파일 VO + * @return 1-성공, 0-실패 + */ + public int insertFile(final SusaFileVO fileVO) { + return insert("SusaFile.insert", fileVO); + } + + /** + * 파일 정보를 삭제한다. + * + * @param fileVO 파일 VO + * @return 1-성공, 0-실패 + */ + public int deleteFile(final SusaFileVO fileVO) { + return delete("SusaFile.delete", fileVO); + } +} diff --git a/src/main/java/kcg/faics/susa/service/impl/SusaFileServiceImpl.java b/src/main/java/kcg/faics/susa/service/impl/SusaFileServiceImpl.java new file mode 100644 index 0000000..d4111bc --- /dev/null +++ b/src/main/java/kcg/faics/susa/service/impl/SusaFileServiceImpl.java @@ -0,0 +1,145 @@ +package kcg.faics.susa.service.impl; + +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import kcg.faics.cmmn.bbs.BaseFileService; +import kcg.faics.cmmn.egov.file.EgovFileMngUtil; +import kcg.faics.cmmn.egov.vo.FileVO; +import kcg.faics.susa.vo.SusaFileVO; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +/** + * 외사수사 파일 관련 비지니스 로직 클래스. + * + * @author kimnomin + * + */ +@Service("susaFileService") +//public class SusaFileServiceImpl extends EgovAbstractServiceImpl implements SusaFileService { +public class SusaFileServiceImpl extends EgovAbstractServiceImpl implements BaseFileService { + /** + * property 파일에서 읽은 저장 경로 키워드. + */ + private String filePathKeyword = "Susa.in.fileStorePath"; + + /** + * property 파일에서 읽은 저장 경로 키워드를 반환한다. + * + * @return property 파일에서 읽은 저장 경로 키워드 + */ + public final String getFilePathKeyword() { + return filePathKeyword; + } + + /** + * property 파일에서 읽은 저장 경로 키워드 설정한다. + * + * @param filePathKeyword property 파일에서 읽은 저장 경로 키워드 + */ + public final void setFilePathKeyword(final String filePathKeyword) { + this.filePathKeyword = filePathKeyword; + } + + /** + * 생성자. + */ + public SusaFileServiceImpl() { + + } + + /** + * 생성자. + * + * @param filePathKeyword property 파일에서 읽은 저장 경로 키워드 + */ + public SusaFileServiceImpl(final String filePathKeyword) { + setFilePathKeyword(filePathKeyword); + } + + /** + * 외사수사 관련 파일 Mapper 클래스. + */ + @Resource(name = "susaFileMapper") + private SusaFileMapper susaFileMapper; + + /** + * 전자정부프레임워크에서 제공되는 파일 업로드 처리 관련 Utility. + **/ + @Resource(name = "EgovFileMngUtil") + private EgovFileMngUtil fileUtil; + + @Override + public SusaFileVO select(final SusaFileVO fileVO) throws Exception { + return susaFileMapper.selectFile(fileVO); + } + + @Override + public List selectList(final SusaFileVO fileVO) throws Exception { + return susaFileMapper.selectFiles(fileVO); + } + + @Override + public int insert(final SusaFileVO fileVO) throws Exception { + return susaFileMapper.insertFile(fileVO); + } + + @Override + public int delete(final SusaFileVO fileVO) throws Exception { + return susaFileMapper.deleteFile(fileVO); + } + + @Override + public int insertAndSaveFiles(final SusaFileVO fileVO, final Map fileMap) throws Exception { + int result = 1; + + if (fileMap != null) { + String prevFileName = String.format("%06d", fileVO.getParentSeq()); + SusaFileVO vo = fileVO; + List uploadedFile = fileUtil.parseFileInf(fileMap, prevFileName + "_", 0, "", filePathKeyword); + + for (int i = 0; i < uploadedFile.size(); i++) { + FileVO tmpVO = uploadedFile.get(i); + vo.setOrgName(tmpVO.getOrignlFileNm()); + vo.setSaveName(tmpVO.getStreFileNm()); + vo.setOrders(Integer.parseInt(tmpVO.getFileSn().replace("file", ""))); + result = insert(fileVO); + if (result != 1) { + throw new Exception(); + } + } + } + + return result; + } + + @Override + public int deleteAndRemoveFile(final SusaFileVO fileVO) throws Exception { + int result = susaFileMapper.deleteFile(fileVO); + if (result == 1) { + try { + fileUtil.deleteFile(fileVO.getSaveName(), filePathKeyword); + } catch (Exception e) { + e.printStackTrace(); + } + } + return result; + } + + @Override + public int deleteAndRemoveFiles(final SusaFileVO fileVO) throws Exception { + int deletedCnt = 0; + List susaFileVOList = selectList(fileVO); + for (int i = 0; i < susaFileVOList.size(); i++) { + if (deleteAndRemoveFile(susaFileVOList.get(i)) == 1) { + deletedCnt += 1; + } + } + return deletedCnt; + } +} diff --git a/src/main/java/kcg/faics/susa/service/impl/SusaMapper.java b/src/main/java/kcg/faics/susa/service/impl/SusaMapper.java new file mode 100644 index 0000000..ee63014 --- /dev/null +++ b/src/main/java/kcg/faics/susa/service/impl/SusaMapper.java @@ -0,0 +1,135 @@ +package kcg.faics.susa.service.impl; + +import java.util.HashMap; +import java.util.List; + +import kcg.faics.susa.vo.SearchVO; +import kcg.faics.susa.vo.SusaVO; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +/** + * 외사수사 Mapper. + * + * @author kimnomin + * + */ +@Repository("susaMapper") +public class SusaMapper extends EgovAbstractMapper { + + /** + * 외사수사 정보를 반환한다. + * + * @param susaVO + * 외사수사 VO + * @return 외사수사 VO + * @throws Exception + * 기본 예외 처리 + */ + public SusaVO select(final SusaVO susaVO) throws Exception { + return selectOne("Susa.select", susaVO); + } + + /** + * 페이징 처리 없이 외사수사 목록 전체 목록을 반환한다. + * + * @param searchVO + * 검색정보 객체 + * @return 외사수사 목록 + * @throws Exception 기본 예외 처리 + */ + public List selectListAll(final SearchVO searchVO) throws Exception { + return selectList("Susa.selectListAll", searchVO); + } + + /** + * 외사수사 목록를 반환한다. + * + * @param searchVO + * 검색, 페이지정보 객체 + * @return 외사수사 목록 + * @throws Exception + * 기본 예외 처리 + */ + public List selectList(final SearchVO searchVO) throws Exception { + return selectList("Susa.selectList", searchVO); + } + + /** + * 외사수사 목록 개수를 반환한다. + * + * @param searchVO + * 검색, 페이지정보 객체 + * @return 외사수사 목록 개수 + * @throws Exception + * 기본 예외 처리 + */ + public int selectListCnt(final SearchVO searchVO) throws Exception { + return (Integer) selectOne("Susa.selectListCnt", searchVO); + } + + /** + * 외사수사정보 총 개수를 반환한다. + * + * @param searchVO + * 검색, 페이지정보 객체 + * @return 외사수사정보 총 개수 + * @throws Exception + * 기본 예외 처리 + */ + public int selectTotalCnt(final SearchVO searchVO) throws Exception { + return (Integer) selectOne("Susa.selectTotalCnt", searchVO); + } + + /** + * 외사수사 정보를 입력한다. + * + * @param susaVO + * 외사수사 VO + * @return 맵 객체 {result: 성공여부, idx: 입력된 레코드의 key 값} + * @throws Exception + * 기본 예외 처리 + */ + public HashMap insert(final SusaVO susaVO) throws Exception { + HashMap map = new HashMap(); + + int result = 0; + try { + result = insert("Susa.insert", susaVO); + + map.put("result", result); + map.put("idx", susaVO.getIdx()); + } catch (Exception e) { + e.printStackTrace(); + } + return map; + } + + /** + * 외사수사 정보를 갱신한다. + * + * @param susaVO + * 외사수사 VO + * @return 성공 - 1, 실패 - 0 + * @throws Exception + * 기본 예외 처리 + */ + public int update(final SusaVO susaVO) throws Exception { + return update("Susa.update", susaVO); + } + + /** + * 외사수사 정보를 삭제한다. + * + * @param susaVO + * 외사수사 VO + * @return 성공 - 1, 실패 - 0 + * @throws Exception + * 기본 예외 처리 + */ + public int delete(final SusaVO susaVO) throws Exception { + return delete("Susa.delete", susaVO); + } +} diff --git a/src/main/java/kcg/faics/susa/service/impl/SusaServiceImpl.java b/src/main/java/kcg/faics/susa/service/impl/SusaServiceImpl.java new file mode 100644 index 0000000..4d2c2ac --- /dev/null +++ b/src/main/java/kcg/faics/susa/service/impl/SusaServiceImpl.java @@ -0,0 +1,187 @@ +package kcg.faics.susa.service.impl; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import kcg.faics.cmmn.bbs.BaseBbsService; +import kcg.faics.cmmn.bbs.BaseFileService; +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.susa.vo.SearchVO; +import kcg.faics.susa.vo.SusaFileVO; +import kcg.faics.susa.vo.SusaVO; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +/** + * 외사수사 비지니스 로직. + * + * @author kimnomin + * + */ +@Service("susaService") +public class SusaServiceImpl extends EgovAbstractServiceImpl implements + BaseBbsService { + + /** + * 외사수사 Mapper 클래스. + */ + @Resource(name = "susaMapper") + private SusaMapper susaMapper; + + /** + * 첨부파일 관련 Service 클래스. + */ + @Autowired + private BaseFileService susaFileService; + + /** + * 내사사건 첨부파일 관련 Service 클래스. + */ + @Autowired + private BaseFileService incidentFileService; + + /** + * 공작추진현황 관련 Service 클래스. + */ + @Autowired + private BaseFileService promotFileService; + + /** + * 코드 관련 Service 클래스. + */ + @Autowired + private CodeService codeService; + + @Override + public SusaVO select(final SusaVO dataVO) throws Exception { + return susaMapper.select(dataVO); + } + + @Override + public List selectListAll(final SearchVO searchVO) throws Exception { + return susaMapper.selectListAll(searchVO); + } + + @Override + public List selectList(final SearchVO searchVO) throws Exception { + return susaMapper.selectList(searchVO); + } + + @Override + public int selectListCnt(final SearchVO searchVO) throws Exception { + return susaMapper.selectListCnt(searchVO); + } + + @Override + public int selectTotalCnt(final SearchVO searchVO) throws Exception { + return susaMapper.selectTotalCnt(searchVO); + } + + @Override + public HashMap insert(final SusaVO dataVO, + final Map fileMap) throws Exception { + HashMap map = new HashMap(); + map.put("result", 0); + map.put("idx", -1); + + try { + dataVO.setAgency(codeService.getPlace1HighCode(dataVO.getPlace1())); + HashMap insertResult = susaMapper.insert(dataVO); + + int idx = (Integer) insertResult.get("idx"); + int result = (Integer) insertResult.get("result"); + + if (result == 1) { + SusaFileVO fileVO = new SusaFileVO(); + fileVO.setParentSeq(idx); + int fileProcResult = 0; + if ("in".equalsIgnoreCase(dataVO.getType())) { + fileProcResult = incidentFileService.insertAndSaveFiles(fileVO, fileMap); + } else { + fileProcResult = promotFileService.insertAndSaveFiles(fileVO, fileMap); + } + if (fileProcResult == 1) { + map.put("result", 1); + map.put("idx", idx); + } else { + throw new Exception(); + } + } else { + throw new Exception(); + } + } catch (Exception e) { + e.printStackTrace(); + } + + return map; + } + + @Override + public HashMap update(final SusaVO dataVO, + final Map fileMap, final String[] deleteFiles) { + HashMap map = new HashMap(); + int result = 0; + + try { + // 체크된 파일 삭제 + SusaFileVO susaFileVO = new SusaFileVO(); + if (deleteFiles != null) { + for (int i = 0; i < deleteFiles.length; i++) { + susaFileVO.setSeq(Integer.parseInt(deleteFiles[i])); + if ("in".equalsIgnoreCase(dataVO.getType())) { + incidentFileService.deleteAndRemoveFile(susaFileVO); + } else { + promotFileService.deleteAndRemoveFile(susaFileVO); + } + } + } + + // 입력된 파일 등록 + susaFileVO = new SusaFileVO(); + susaFileVO.setParentSeq(dataVO.getIdx()); + if ("in".equalsIgnoreCase(dataVO.getType())) { + incidentFileService.insertAndSaveFiles(susaFileVO, fileMap); + } else { + promotFileService.insertAndSaveFiles(susaFileVO, fileMap); + } + + result = susaMapper.update(dataVO); + + map.put("result", result); + map.put("idx", dataVO.getIdx()); + + } catch (Exception e) { + e.printStackTrace(); + map.put("result", 0); + map.put("idx", -1); + } + + return map; + } + + @Override + public HashMap delete(final SusaVO dataVO) { + HashMap resultMap = new HashMap(); + try { + SusaFileVO fileVO = new SusaFileVO(); + fileVO.setParentSeq(dataVO.getIdx()); + if ("in".equalsIgnoreCase(dataVO.getType())) { + incidentFileService.deleteAndRemoveFiles(fileVO); + } else { + promotFileService.deleteAndRemoveFiles(fileVO); + } + resultMap.put("result", susaMapper.delete(dataVO)); + } catch (Exception e) { + e.printStackTrace(); + resultMap.put("result", 0); + } + + return resultMap; + } +} diff --git a/src/main/java/kcg/faics/susa/service/impl/package-info.java b/src/main/java/kcg/faics/susa/service/impl/package-info.java new file mode 100644 index 0000000..71e6864 --- /dev/null +++ b/src/main/java/kcg/faics/susa/service/impl/package-info.java @@ -0,0 +1,8 @@ +/** + * 외사수사 비지니스 로직 패키지. + */ +/** + * @author kimnomin + * + */ +package kcg.faics.susa.service.impl; \ No newline at end of file diff --git a/src/main/java/kcg/faics/susa/vo/IncidentVO.java b/src/main/java/kcg/faics/susa/vo/IncidentVO.java new file mode 100644 index 0000000..e2b2ae4 --- /dev/null +++ b/src/main/java/kcg/faics/susa/vo/IncidentVO.java @@ -0,0 +1,16 @@ +package kcg.faics.susa.vo; + +/** + * 내사사건 Value Object. + * + * @author kimnomin + * + */ +public class IncidentVO extends SusaVO { + /** + * 생성자. + */ + public IncidentVO() { + super.setType("in"); + } +} diff --git a/src/main/java/kcg/faics/susa/vo/PromotVO.java b/src/main/java/kcg/faics/susa/vo/PromotVO.java new file mode 100644 index 0000000..1bd502f --- /dev/null +++ b/src/main/java/kcg/faics/susa/vo/PromotVO.java @@ -0,0 +1,16 @@ +package kcg.faics.susa.vo; + +/** + * 공작추진현황 Value Object. + * + * @author kimnomin + * + */ +public class PromotVO extends SusaVO { + /** + * 생성자. + */ + public PromotVO() { + super.setType("pr"); + } +} diff --git a/src/main/java/kcg/faics/susa/vo/SearchVO.java b/src/main/java/kcg/faics/susa/vo/SearchVO.java new file mode 100644 index 0000000..ee334ab --- /dev/null +++ b/src/main/java/kcg/faics/susa/vo/SearchVO.java @@ -0,0 +1,91 @@ +package kcg.faics.susa.vo; + +import kcg.faics.cmmn.bbs.BaseSearchVO; + +/** + * 외사수사 검색정보 Value Object. + * + * @author kimnomin + * + */ +public class SearchVO extends BaseSearchVO { + + /** + * 외사수사 분류. (in-내사수사, pr-공작추진) + */ + private String type; + + /** + * 부서. + */ + private String place1; + + /** + * 경찰청 코드. + */ + private String agencyCode; + + /** + * 생성자. + */ + public SearchVO() { + setRecordCountPerPage(20); + } + + /** + * 외사수사 분류를 반환한다. + * + * @return 외사수사 분류 (in-내사수사, pr-공작추진) + */ + public final String getType() { + return type; + } + + /** + * 외사수사 분류를 설정한다. + * + * @param type + * 외사수사 (in-내사수사, pr-공작추진) + */ + public final void setType(final String type) { + this.type = type; + } + + /** + * 부서를 반환한다. + * + * @return 부서 + */ + public final String getPlace1() { + return place1; + } + + /** + * 부서를 설정한다. + * + * @param place1 + * 부서 + */ + public final void setPlace1(final String place1) { + this.place1 = place1; + } + + /** + * 경찰청 코드를 반환한다. + * + * @return 경찰청 코드 + */ + public final String getAgencyCode() { + return agencyCode; + } + + /** + * 경찰청 코드를 설정한다. + * + * @param agencyCode + * 경찰청 코드 + */ + public final void setAgencyCode(final String agencyCode) { + this.agencyCode = agencyCode; + } +} diff --git a/src/main/java/kcg/faics/susa/vo/SusaFileVO.java b/src/main/java/kcg/faics/susa/vo/SusaFileVO.java new file mode 100644 index 0000000..1edb2ce --- /dev/null +++ b/src/main/java/kcg/faics/susa/vo/SusaFileVO.java @@ -0,0 +1,13 @@ +package kcg.faics.susa.vo; + +import kcg.faics.cmmn.bbs.BaseFileVO; + +/** + * 외사수사 관련 파일 Value Object. + * + * @author kimnomin + * + */ +public class SusaFileVO extends BaseFileVO { + +} diff --git a/src/main/java/kcg/faics/susa/vo/SusaVO.java b/src/main/java/kcg/faics/susa/vo/SusaVO.java new file mode 100644 index 0000000..dbaf72e --- /dev/null +++ b/src/main/java/kcg/faics/susa/vo/SusaVO.java @@ -0,0 +1,369 @@ +package kcg.faics.susa.vo; + +import java.util.Date; + +/** + * 외사수사 Value ObJect. + * + * @author kimnomin + * + */ +public class SusaVO { + /** + * 일련번호. + */ + private int idx; + /** + * 부서. + */ + private String place1; + /** + * 부서 명칭. + */ + private String place1Str; + /** + * 경찰청 코드. + */ + private String agency; + /** + * 외사수사 분류. (in-내사수사, pr-공작추진) + */ + private String type; + /** + * 착수일. + */ + private String sdate; + /** + * 종료일. + */ + private String edate; + /** + * 담당자. + */ + private String chargeNm; + /** + * 사건명 . + */ + private String title; + /** + * 협의내용. + */ + private String contents; + /** + * 내사결과. + */ + private String result; + /** + * 내사결과 플래그 + * O : 있다, - : 없다. + */ + private String resultFlag = "-"; + /** + * 등록일. + */ + private Date regdate; + /** + * 등록자. + */ + private String writer; + /** + * 등록된 첨부파일 개수. + */ + private int fileCnt = 0; + + /** + * 일련번호를 반환한다. + * + * @return 일련번호 + */ + public final int getIdx() { + return idx; + } + + /** + * 일련번호를 설정한다. + * + * @param idx + * 일련번호 + */ + public final void setIdx(final int idx) { + this.idx = idx; + } + + /** + * 부서를 반환한다. + * + * @return 부서 + */ + public final String getPlace1() { + return place1; + } + + /** + * 부서를 설정한다. + * + * @param place1 + * 부서 + */ + public final void setPlace1(final String place1) { + this.place1 = place1; + } + + /** + * 부서명을 반환한다. + * + * @return 부서명 + */ + public final String getPlace1Str() { + return place1Str; + } + + /** + * 부서명을 설정한다. + * + * @param place1Str + * 부서명 + */ + public final void setPlace1Str(final String place1Str) { + this.place1Str = place1Str; + } + + /** + * 경찰청 코드를 반환한다. + * + * @return 경찰철 코드 + */ + public final String getAgency() { + return agency; + } + + /** + * 경찰청 코드를 설정한다. + * + * @param agency + * 경찰청 코드 + */ + public final void setAgency(final String agency) { + this.agency = agency; + } + + /** + * 외사수사 분류를 반환한다. + * + * @return 외사수사 분류 + */ + public final String getType() { + return type; + } + + /** + * 외사수사 분류를 설정한다. + * + * @param type + * 외사수사 분류 + */ + public final void setType(final String type) { + this.type = type; + } + + /** + * 착수일을 반환한다. + * + * @return 착수일 + */ + public final String getSdate() { + return sdate; + } + + /** + * 착수일을 설정한다. + * + * @param sdate + * 착수일 + */ + public final void setSdate(final String sdate) { + if (sdate != null) { + this.sdate = sdate.trim().replace("-", ""); + } else { + this.sdate = sdate; + } + } + + /** + * 종료일을 반환한다. + * + * @return 종료일 + */ + public final String getEdate() { + return edate; + } + + /** + * 종료일을 설정한다. + * + * @param edate + * 종료일 + */ + public final void setEdate(final String edate) { + if (edate != null) { + this.edate = edate.trim().replace("-", ""); + } else { + this.edate = edate; + } + } + + /** + * 담당자를 반환한다. + * + * @return 담당자 + */ + public final String getChargeNm() { + return chargeNm; + } + + /** + * 담당자를 설정한다. + * + * @param chargeNm + * 담당자 + */ + public final void setChargeNm(final String chargeNm) { + this.chargeNm = chargeNm; + } + + /** + * 사건명을 반환한다. + * + * @return 사건명 + */ + public final String getTitle() { + return title; + } + + /** + * 사건명을 설정한다. + * + * @param title + * 사건명 + */ + public final void setTitle(final String title) { + this.title = title; + } + + /** + * 협의내용을 반환한다. + * + * @return 협의내용 + */ + public final String getContents() { + return contents; + } + + /** + * 협의내용을 설정한다. + * + * @param contents + * 협의내용 + */ + public final void setContents(final String contents) { + this.contents = contents; + } + + /** + * 내사결과를 반환한다. + * + * @return 내사결과 + */ + public final String getResult() { + return result; + } + + /** + * 내사결과를 설정한다. + * + * @param result + * 내사결과 + */ + public final void setResult(final String result) { + if (result != null && result.length() > 2) { + setResultFlag("O"); + } + this.result = result; + } + + /** + * 내사결과 플래그를 반환한다. + * + * @return 내사결과 플래그 + */ + public final String getResultFlag() { + return resultFlag; + } + + /** + * 내사결과 플래그를 설정한다. + * + * @param resultFlag 내사결과 플래그 + */ + public final void setResultFlag(final String resultFlag) { + this.resultFlag = resultFlag; + } + + /** + * 등록일을 반환한다. + * + * @return 등록일 + */ + public final Date getRegdate() { + return regdate; + } + + /** + * 등록일을 설정한다. + * + * @param regdate + * 등록일 + */ + public final void setRegdate(final Date regdate) { + this.regdate = regdate; + } + + /** + * 등록자를 반환한다. + * + * @return 등록자 + */ + public final String getWriter() { + return writer; + } + + /** + * 등록자를 설정한다. + * + * @param writer + * 등록자 + */ + public final void setWriter(final String writer) { + this.writer = writer; + } + + /** + * 등록된 첨부파일 개수를 반환한다. + * + * @return 등록된 첨부파일 개수 + */ + public final int getFileCnt() { + return fileCnt; + } + + /** + * 등록된 첨부파일 개수를 설정한다. + * + * @param fileCnt 등록된 첨부파일 개수 + */ + public final void setFileCnt(final int fileCnt) { + this.fileCnt = fileCnt; + } + + +} diff --git a/src/main/java/kcg/faics/susa/vo/package-info.java b/src/main/java/kcg/faics/susa/vo/package-info.java new file mode 100644 index 0000000..9a5c813 --- /dev/null +++ b/src/main/java/kcg/faics/susa/vo/package-info.java @@ -0,0 +1,8 @@ +/** + * 외사수사 Value Object 패키지. + */ +/** + * @author kimnomin + * + */ +package kcg.faics.susa.vo; \ No newline at end of file diff --git a/src/main/java/kcg/faics/susa/web/IncidentController.java b/src/main/java/kcg/faics/susa/web/IncidentController.java new file mode 100644 index 0000000..75192a9 --- /dev/null +++ b/src/main/java/kcg/faics/susa/web/IncidentController.java @@ -0,0 +1,474 @@ +package kcg.faics.susa.web; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; + +import kcg.faics.cmmn.bbs.BaseBbsService; +import kcg.faics.cmmn.bbs.BaseFileService; +import kcg.faics.cmmn.excel.ExcelExporter; +import kcg.faics.cmmn.file.FileResponser; +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.cmmn.vo.CodeVO; +import kcg.faics.sec.AuthType; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.UserUtil; +import kcg.faics.susa.vo.SearchVO; +import kcg.faics.susa.vo.SusaFileVO; +import kcg.faics.susa.vo.SusaVO; +import kcg.faics.susa.vo.IncidentVO; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.util.FileCopyUtils; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.support.SessionStatus; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +/** + * 내사사건현황 Controller. + * + * @author kimnomin + * + */ +@Controller +@RequestMapping("/susa/incident") +public class IncidentController { + /** + * properties값을 가져오는 인터페이스. + **/ + @Resource(name = "propertiesService") + private EgovPropertyService propertiesService; + + /** + * message.properties의 값을 가져오는 인터페이스. + */ + @Autowired + private MessageSource messageSource; + + /** + * 코드관련 정보 인터페이스. + */ + @Resource(name = "codeService") + private CodeService codeService; + + /** + * 외사수사 정보 인터페이스. + */ + @Resource(name = "susaService") + private BaseBbsService susaService; + + /** + * 사진 정보 인터페이스. + */ + @Resource(name = "incidentFileService") + private BaseFileService incidentFileService; + + /** + * Validator - 유효성 검사. + **/ + @Resource(name = "beanValidator") + private DefaultBeanValidator beanValidator; + + /** + * 내사사건 목록 화면을 반환한다. + * + * @param searchVO + * 검색, 페이지 정보 객체 + * @param model + * 맵 객체 + * @return 내사사건 목록 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/list.do") + public String list(@ModelAttribute("searchVO") final SearchVO searchVO, + final ModelMap model) throws Exception { + + LoginUserVO loginUserVo = UserUtil.getMemberInfo(); + try { + if (searchVO.getType() == null || searchVO.getType().isEmpty()) { + searchVO.setType("in"); + } + + /* 페이징 처리 정보 */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("pageSize")); + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getRecordCountPerPage()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + List placeList = null; + if (AuthType.LOCAL_HEADQUARTERS == loginUserVo.getAuthType()) { + placeList = codeService.getPlace1SubList(loginUserVo + .getPlace1()); + } else { + placeList = codeService.getPlace1List(false); + } + model.addAttribute("placeList", placeList); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo + .getRecordCountPerPage()); + + int totSearchCnt = susaService.selectListCnt(searchVO); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + + /* 게시판 리스트 */ + List susaList = susaService.selectList(searchVO); + model.addAttribute("susaList", susaList); + + /* 게시판 상단 페이지 및 게시물 정보 표현을 위한 데이터 */ + int totCnt = susaService.selectTotalCnt(searchVO); + model.addAttribute("totalCnt", totCnt); + + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + + return "susa/incidentList.tiles"; + } + + /** + * 내사사건 정보 조회 화면을 반환한다. + * + * @param incidentVO + * 내사사건 VO + * @param model + * 모델 객체 + * @return 내사사건 정보 조회 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/view.do") + public String view(final IncidentVO incidentVO, final Model model) + throws Exception { + SusaVO vo = susaService.select(incidentVO); + vo.setPlace1Str(codeService.getPlace1Str(vo.getPlace1())); + model.addAttribute("incidentVO", vo); + + SusaFileVO fileVO = new SusaFileVO(); + fileVO.setParentSeq(vo.getIdx()); + model.addAttribute("susaFileVO", incidentFileService.selectList(fileVO)); + + LoginUserVO loginUserVo = UserUtil.getMemberInfo(); + model.addAttribute("loginUserVo", loginUserVo); + + return "susa/incidentView.tiles"; + } + + /** + * 내사사건 입력 화면을 반환한다. + * + * @param model + * 모델 객체 + * @param incidentVO + * 내사사건 VO + * @return 내사사건 입력 화면 + */ + @RequestMapping(value = "/add.do") + public String add(final Model model, final IncidentVO incidentVO) { + LoginUserVO loginUserVo = UserUtil.getMemberInfo(); + IncidentVO vo; + if (incidentVO == null) { + vo = new IncidentVO(); + } else { + vo = incidentVO; + } + vo.setPlace1(loginUserVo.getPlace1()); + vo.setWriter(loginUserVo.getUserid()); + + model.addAttribute("incidentVo", incidentVO); + model.addAttribute("loginUserVo", loginUserVo); + /* create or modify 플래그 */ + model.addAttribute("registerFlag", "create"); + + return "susa/incidentAdd.tiles"; + } + + /** + * 내사사건 정보를 입력한다. + * + * @param multiRequest + * mutipartform 객체 + * @param incidentVO + * 내사수사 VO + * @param bindingResult + * 유효성 검사결과 객체 + * @param model + * 모델 객체 + * @param status + * SessionStatus 객체 + * @return 내사사건 정보 목록 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/add.do", method = RequestMethod.POST) + public String add(final MultipartHttpServletRequest multiRequest, + @Valid @ModelAttribute("incidentVO") final IncidentVO incidentVO, + final BindingResult bindingResult, final Model model, + final SessionStatus status) throws Exception { + + // 사용자 인증 검사 + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (isAuthenticated) { + // 유효성 검사 + // beanValidator.validate(incidentVO, bindingResult); + if (bindingResult.hasErrors()) { + model.addAttribute("incidentVO", incidentVO); + return "susa/incidentAdd.tiles"; + } + + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + incidentVO.setWriter(loginUserVO.getUserid()); + + // 파일 저장 및 데이터 입력 + final Map fileMap = multiRequest.getFileMap(); + HashMap map = susaService.insert(incidentVO, fileMap); + + status.setComplete(); + + int idx = (Integer) map.get("idx"); + int result = (Integer) map.get("result"); + if (result == 1 && idx > 0) { + return "redirect:/susa/incident/view.do?idx=" + idx; + } + } + + return "error/bizError"; + } + + /** + * 내사사건 수정 화면을 반환한다. + * + * @param incidentVO + * 내사수사 VO + * @param model + * 모델 객체 + * @return 내사사건 수정 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/update.do", method = RequestMethod.GET) + public String update(final IncidentVO incidentVO, final Model model) + throws Exception { + try { + SusaVO vo = susaService.select(incidentVO); + + /* 글 작성자와 세션 사용자의 아이디를 비교하여 본인여부를 판단한다 */ + if (vo == null || (!UserUtil.isEqualMember(vo.getWriter()) && !UserUtil.isAdmin())) { + return "redirect:/susa/incident/view.do?idx=" + incidentVO.getIdx(); + } + + vo.setPlace1Str(codeService.getPlace1Str(vo.getPlace1())); + model.addAttribute("incidentVO", vo); + + SusaFileVO fileVO = new SusaFileVO(); + fileVO.setParentSeq(vo.getIdx()); + model.addAttribute("susaFileVO", incidentFileService.selectList(fileVO)); + + LoginUserVO loginUserVo = UserUtil.getMemberInfo(); + model.addAttribute("loginUserVo", loginUserVo); + + model.addAttribute("registerFlag", "modify"); + } catch (Exception e) { + e.printStackTrace(); + } + + return "susa/incidentAdd.tiles"; + } + + /** + * 내사사건 정보를 수정한다. + * + * @param multiRequest + * mutipartform 객체 + * @param incidentVO + * 내사수사 VO + * @param bindingResult + * 유효성 검사결과 객체 + * @param model + * 모델 객체 + * @param status + * SessionStatus 객체 + * @return 내사사건 정보 목록 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/update.do", method = RequestMethod.POST) + public String update(final MultipartHttpServletRequest multiRequest, + @Valid @ModelAttribute("incidentVO") final IncidentVO incidentVO, + final BindingResult bindingResult, final Model model, + final SessionStatus status) throws Exception { + try { + SusaVO vo = susaService.select(incidentVO); + + /* 글 작성자와 세션 사용자의 아이디를 비교하여 본인여부를 판단한다 */ + if (vo == null || (!UserUtil.isEqualMember(vo.getWriter()) && !UserUtil.isAdmin())) { + return "redirect:/susa/incident/view.do?idx=" + incidentVO.getIdx(); + } + + // 유효성 검사 + if (bindingResult.hasErrors()) { + model.addAttribute("incidentVO", incidentVO); + model.addAttribute("registerFlag", "modify"); + return "susa/incidentAdd.tiles"; + } + + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + incidentVO.setWriter(loginUserVO.getUserid()); + + String[] deleteFiles = multiRequest.getParameterValues("deleteFile"); + final Map fileMap = multiRequest.getFileMap(); + HashMap map = susaService.update(incidentVO, fileMap, deleteFiles); + + status.setComplete(); + + int result = (Integer) map.get("result"); + int idx = (Integer) map.get("idx"); + + if (result > 0 && idx > 0) { + return "redirect:/susa/incident/view.do?idx=" + idx; + } + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + + return "error/bizError"; + } + + /** + * 내사사건 정보를 삭제한다. + * + * @param incidentVO + * 내사수사 VO + * @param model + * 모델 객체 + * @param status + * SessionStatus 객체 + * @return 내사사건 목록 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/delete.do", method = RequestMethod.POST) + public String delete(final IncidentVO incidentVO, final Model model, + final SessionStatus status) throws Exception { + SusaVO vo = susaService.select(incidentVO); + + /* 글 작성자와 세션 사용자의 아이디를 비교하여 본인여부를 판단한다 */ + if (vo == null || (!UserUtil.isEqualMember(vo.getWriter()) && !UserUtil.isAdmin())) { + return "redirect:/susa/incident/view.do?idx=" + incidentVO.getIdx(); + } + + HashMap map = susaService.delete(incidentVO); + if ((Integer) map.get("result") > 0) { + return "redirect:/susa/incident/list.do"; + } + return "redirect:/susa/incident/view.do?idx=" + incidentVO.getIdx(); + } + + /** + * 전체목록을 엑셀로 내보낸다. + * + * @param searchVO 검색조건 VO + * @param model Model 객체 + * @param locale Locale 객체 + * @return 엑셀(전체목록) + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/listtoexcel.do") + public String exportExcel(@ModelAttribute("searchVO") final SearchVO searchVO, final Model model, final Locale locale) throws Exception { + searchVO.setType("in"); + LinkedHashMap header = new LinkedHashMap(); + header.put("place1Str", messageSource.getMessage("susa.in.view.place1", null, locale)); + header.put("chargeNm", messageSource.getMessage("susa.in.view.chargeNm", null, locale)); + header.put("title", messageSource.getMessage("susa.in.view.title", null, locale)); + header.put("sdate", messageSource.getMessage("susa.in.view.sdate", null, locale)); + header.put("edate", messageSource.getMessage("susa.in.view.edate", null, locale)); + header.put("resultFlag", messageSource.getMessage("susa.in.view.result", null, locale)); + + Date d = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String title = String.format("%s_%s", messageSource.getMessage("susa.in.view.pagetitle", null, locale), sdf.format(d)); + List list = susaService.selectListAll(searchVO); + + model.addAttribute("excel", new ExcelExporter(header, list, title)); + model.addAttribute("filename", title); + + return "excelView"; + } + + /** + * 파일을 반환한다. + * + * @param susaFileVO + * 외사수사 파일 VO + * @param request + * HttpServletRequest 객체 + * @param response + * HttpServletResponse 객체 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/download.do") + public void fileResponse(final SusaFileVO susaFileVO, + final HttpServletRequest request, final HttpServletResponse response) throws Exception { + SusaFileVO vo = incidentFileService.select(susaFileVO); + String fileOrgName = vo.getOrgName(); + String fileFullPath = propertiesService.getString("Susa.in.fileStorePath") + vo.getSaveName(); + File file = new File(fileFullPath); + if (file.exists()) { + FileResponser.setResponse(file, fileOrgName, request, response); + BufferedInputStream in = null; + try { + in = new BufferedInputStream(new FileInputStream(file)); + FileCopyUtils.copy(in, response.getOutputStream()); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (in != null) { + try { + in.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } else { + response.setStatus(HttpStatus.NOT_FOUND.value()); + throw new Exception(); + } + } +} diff --git a/src/main/java/kcg/faics/susa/web/PromotController.java b/src/main/java/kcg/faics/susa/web/PromotController.java new file mode 100644 index 0000000..2139ec2 --- /dev/null +++ b/src/main/java/kcg/faics/susa/web/PromotController.java @@ -0,0 +1,472 @@ +package kcg.faics.susa.web; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; + +import kcg.faics.cmmn.bbs.BaseBbsService; +import kcg.faics.cmmn.bbs.BaseFileService; +import kcg.faics.cmmn.excel.ExcelExporter; +import kcg.faics.cmmn.file.FileResponser; +import kcg.faics.cmmn.service.CodeService; +import kcg.faics.cmmn.vo.CodeVO; +import kcg.faics.sec.AuthType; +import kcg.faics.sec.LoginUserVO; +import kcg.faics.sec.UserUtil; +import kcg.faics.susa.vo.PromotVO; +import kcg.faics.susa.vo.SearchVO; +import kcg.faics.susa.vo.SusaFileVO; +import kcg.faics.susa.vo.SusaVO; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.util.FileCopyUtils; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.support.SessionStatus; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springmodules.validation.commons.DefaultBeanValidator; + +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +/** + * 공작추진현황 Controller. + * + * @author kimnomin + * + */ +@Controller +@RequestMapping("/susa/promot") +public class PromotController { + /** + * properties값을 가져오는 인터페이스. + **/ + @Resource(name = "propertiesService") + private EgovPropertyService propertiesService; + + /** + * message.properties의 값을 가져오는 인터페이스. + */ + @Autowired + private MessageSource messageSource; + + /** + * 코드관련 정보 인터페이스. + */ + @Resource(name = "codeService") + private CodeService codeService; + + /** + * 외사수사 정보 인터페이스. + */ + @Resource(name = "susaService") + private BaseBbsService susaService; + + /** + * 사진 정보 인터페이스. + */ + @Resource(name = "promotFileService") + private BaseFileService promotFileService; + + /** + * Validator - 유효성 검사. + **/ + @Resource(name = "beanValidator") + private DefaultBeanValidator beanValidator; + + /** + * 공작추진현황 목록 화면을 반환한다. + * + * @param searchVO + * 검색, 페이지 정보 객체 + * @param model + * 맵 객체 + * @return 공작추진현황 목록 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/list.do") + public String list(@ModelAttribute("searchVO") final SearchVO searchVO, + final ModelMap model) throws Exception { + + LoginUserVO loginUserVo = UserUtil.getMemberInfo(); + try { + if (searchVO.getType() == null || searchVO.getType().isEmpty()) { + searchVO.setType("pr"); + } + + /* 페이징 처리 정보 */ + searchVO.setPageUnit(propertiesService.getInt("pageUnit")); + searchVO.setPageSize(propertiesService.getInt("pageSize")); + + /* 페이징 처리 */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getRecordCountPerPage()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + List placeList = null; + if (AuthType.LOCAL_HEADQUARTERS == loginUserVo.getAuthType()) { + placeList = codeService.getPlace1SubList(loginUserVo + .getPlace1()); + } else { + placeList = codeService.getPlace1List(false); + } + model.addAttribute("placeList", placeList); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo + .getRecordCountPerPage()); + + int totSearchCnt = susaService.selectListCnt(searchVO); + paginationInfo.setTotalRecordCount(totSearchCnt); + model.addAttribute("paginationInfo", paginationInfo); + + /* 게시판 리스트 */ + List susaList = susaService.selectList(searchVO); + model.addAttribute("susaList", susaList); + + /* 게시판 상단 페이지 및 게시물 정보 표현을 위한 데이터 */ + int totCnt = susaService.selectTotalCnt(searchVO); + model.addAttribute("totalCnt", totCnt); + + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + + return "susa/promotList.tiles"; + } + + /** + * 공작추진현황 정보 조회 화면을 반환한다. + * + * @param promotVO + * 공작추진현황 VO + * @param model + * 모델 객체 + * @return 공작추진현황 정보 조회 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/view.do") + public String view(final PromotVO promotVO, final Model model) + throws Exception { + SusaVO vo = susaService.select(promotVO); + vo.setPlace1Str(codeService.getPlace1Str(vo.getPlace1())); + model.addAttribute("promotVO", vo); + + SusaFileVO fileVO = new SusaFileVO(); + fileVO.setParentSeq(vo.getIdx()); + model.addAttribute("susaFileVO", promotFileService.selectList(fileVO)); + + LoginUserVO loginUserVo = UserUtil.getMemberInfo(); + model.addAttribute("loginUserVo", loginUserVo); + + return "susa/promotView.tiles"; + } + + /** + * 공작추진현황 입력 화면을 반환한다. + * + * @param model + * 모델 객체 + * @param promotVO + * 공작추진현황 VO + * @return 공작추진현황 입력 화면 + */ + @RequestMapping(value = "/add.do") + public String add(final Model model, final PromotVO promotVO) { + LoginUserVO loginUserVo = UserUtil.getMemberInfo(); + PromotVO vo; + if (promotVO == null) { + vo = new PromotVO(); + } else { + vo = promotVO; + } + vo.setPlace1(loginUserVo.getPlace1()); + vo.setWriter(loginUserVo.getUserid()); + + model.addAttribute("promotVO", promotVO); + model.addAttribute("loginUserVo", loginUserVo); + /* create or modify 플래그 */ + model.addAttribute("registerFlag", "create"); + + return "susa/promotAdd.tiles"; + } + + /** + * 공작추진현황 정보를 입력한다. + * + * @param multiRequest + * mutipartform 객체 + * @param promotVO + * 공작추진현황 VO + * @param bindingResult + * 유효성 검사결과 객체 + * @param model + * 모델 객체 + * @param status + * SessionStatus 객체 + * @return 공작추진현황 정보 목록 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/add.do", method = RequestMethod.POST) + public String add(final MultipartHttpServletRequest multiRequest, + @Valid @ModelAttribute("promotVO") final PromotVO promotVO, + final BindingResult bindingResult, final Model model, + final SessionStatus status) throws Exception { + + // 사용자 인증 검사 + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (isAuthenticated) { + // 유효성 검사 + // beanValidator.validate(promotVO, bindingResult); + if (bindingResult.hasErrors()) { + model.addAttribute("promotVO", promotVO); + return "susa/promotAdd.tiles"; + } + + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + promotVO.setWriter(loginUserVO.getUserid()); + + // 파일 저장 및 데이터 입력 + final Map fileMap = multiRequest + .getFileMap(); + HashMap map = susaService.insert(promotVO, + fileMap); + + status.setComplete(); + + int idx = (Integer) map.get("idx"); + int result = (Integer) map.get("result"); + if (result == 1 && idx > 0) { + return "redirect:/susa/promot/view.do?idx=" + idx; + } + } + + return "error/bizError"; + } + + /** + * 공작추진현황 수정 화면을 반환한다. + * + * @param promotVO + * 공작추진현황 VO + * @param model + * 모델 객체 + * @return 공작추진현황 수정 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/update.do", method = RequestMethod.GET) + public String update(final PromotVO promotVO, final Model model) + throws Exception { + try { + SusaVO vo = susaService.select(promotVO); + + /* 글 작성자와 세션 사용자의 아이디를 비교하여 본인여부를 판단한다 */ + if (vo == null || (!UserUtil.isEqualMember(vo.getWriter()) && !UserUtil.isAdmin())) { + return "redirect:/susa/promot/view.do?idx=" + promotVO.getIdx(); + } + + vo.setPlace1Str(codeService.getPlace1Str(vo.getPlace1())); + model.addAttribute("promotVO", vo); + + SusaFileVO fileVO = new SusaFileVO(); + fileVO.setParentSeq(vo.getIdx()); + model.addAttribute("susaFileVO", promotFileService.selectList(fileVO)); + + LoginUserVO loginUserVo = UserUtil.getMemberInfo(); + model.addAttribute("loginUserVo", loginUserVo); + + model.addAttribute("registerFlag", "modify"); + } catch (Exception e) { + e.printStackTrace(); + } + + return "susa/promotAdd.tiles"; + } + + /** + * 공작추진현황 정보를 수정한다. + * + * @param multiRequest + * mutipartform 객체 + * @param promotVO + * 공작추진현황 VO + * @param bindingResult + * 유효성 검사결과 객체 + * @param model + * 모델 객체 + * @param status + * SessionStatus 객체 + * @return 공작추진현황 정보 목록 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/update.do", method = RequestMethod.POST) + public String update(final MultipartHttpServletRequest multiRequest, + @Valid @ModelAttribute("promotVO") final PromotVO promotVO, + final BindingResult bindingResult, final Model model, + final SessionStatus status) throws Exception { + try { + SusaVO vo = susaService.select(promotVO); + + /* 글 작성자와 세션 사용자의 아이디를 비교하여 본인여부를 판단한다 */ + if (vo == null || (!UserUtil.isEqualMember(vo.getWriter()) && !UserUtil.isAdmin())) { + return "redirect:/susa/promot/view.do?idx=" + promotVO.getIdx(); + } + + // 유효성 검사 + if (bindingResult.hasErrors()) { + model.addAttribute("promotVO", promotVO); + model.addAttribute("registerFlag", "modify"); + return "susa/promotAdd.tiles"; + } + + LoginUserVO loginUserVO = UserUtil.getMemberInfo(); + promotVO.setWriter(loginUserVO.getUserid()); + + String[] deleteFiles = multiRequest.getParameterValues("deleteFile"); + final Map fileMap = multiRequest.getFileMap(); + HashMap map = susaService.update(promotVO, fileMap, deleteFiles); + + status.setComplete(); + + int result = (Integer) map.get("result"); + int idx = (Integer) map.get("idx"); + + if (result > 0 && idx > 0) { + return "redirect:/susa/promot/view.do?idx=" + idx; + } + } catch (Exception e) { + e.printStackTrace(); + return "error/bizError"; + } + + return "error/bizError"; + } + + /** + * 공작추진현황 정보를 삭제한다. + * + * @param promotVO + * 공작추진현황 VO + * @param model + * 모델 객체 + * @param status + * SessionStatus 객체 + * @return 공작추진현황 목록 화면 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/delete.do", method = RequestMethod.POST) + public String delete(final PromotVO promotVO, final Model model, + final SessionStatus status) throws Exception { + SusaVO vo = susaService.select(promotVO); + + /* 글 작성자와 세션 사용자의 아이디를 비교하여 본인여부를 판단한다 */ + if (vo == null || (!UserUtil.isEqualMember(vo.getWriter()) && !UserUtil.isAdmin())) { + return "redirect:/susa/promot/view.do?idx=" + promotVO.getIdx(); + } + + HashMap map = susaService.delete(promotVO); + if ((Integer) map.get("result") > 0) { + return "redirect:/susa/promot/list.do"; + } + return "redirect:/susa/promot/view.do?idx=" + promotVO.getIdx(); + } + + /** + * 전체목록을 엑셀로 내보낸다. + * + * @param searchVO 검색조건 VO + * @param model Model 객체 + * @param locale Locale 객체 + * @return 엑셀(전체목록) + * @throws Exception 기본 예외 처리 + */ + @RequestMapping(value = "/listtoexcel.do") + public String exportExcel(@ModelAttribute("searchVO") final SearchVO searchVO, final Model model, final Locale locale) throws Exception { + searchVO.setType("pr"); + LinkedHashMap header = new LinkedHashMap(); + header.put("place1Str", messageSource.getMessage("susa.pr.view.place1", null, locale)); + header.put("chargeNm", messageSource.getMessage("susa.pr.view.chargeNm", null, locale)); + header.put("title", messageSource.getMessage("susa.pr.view.title", null, locale)); + header.put("sdate", messageSource.getMessage("susa.pr.view.sdate", null, locale)); + header.put("edate", messageSource.getMessage("susa.pr.view.edate", null, locale)); + header.put("resultFlag", messageSource.getMessage("susa.pr.view.result", null, locale)); + + Date d = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String title = String.format("%s_%s", messageSource.getMessage("susa.pr.view.pagetitle", null, locale), sdf.format(d)); + List list = susaService.selectListAll(searchVO); + + model.addAttribute("excel", new ExcelExporter(header, list, title)); + model.addAttribute("filename", title); + + return "excelView"; + } + + /** + * 파일을 반환한다. + * + * @param susaFileVO + * 외사수사 파일 VO + * @param request + * HttpServletRequest 객체 + * @param response + * HttpServletResponse 객체 + * @throws Exception + * 기본 예외 처리 + */ + @RequestMapping(value = "/download.do") + public void fileResponse(final SusaFileVO susaFileVO, + final HttpServletRequest request, final HttpServletResponse response) throws Exception { + SusaFileVO vo = promotFileService.select(susaFileVO); + String fileOrgName = vo.getOrgName(); + String fileFullPath = propertiesService.getString("Susa.pr.fileStorePath") + vo.getSaveName(); + File file = new File(fileFullPath); + if (file.exists()) { + FileResponser.setResponse(file, fileOrgName, request, response); + BufferedInputStream in = null; + try { + in = new BufferedInputStream(new FileInputStream(file)); + FileCopyUtils.copy(in, response.getOutputStream()); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (in != null) { + try { + in.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + } +} diff --git a/src/main/java/kcg/faics/susa/web/package-info.java b/src/main/java/kcg/faics/susa/web/package-info.java new file mode 100644 index 0000000..f939b70 --- /dev/null +++ b/src/main/java/kcg/faics/susa/web/package-info.java @@ -0,0 +1,8 @@ +/** + * 외사수사 웹페이지 패키지 + */ +/** + * @author kimnomin + * + */ +package kcg.faics.susa.web; \ No newline at end of file diff --git a/src/main/resources/config/KGI_Checks.xml b/src/main/resources/config/KGI_Checks.xml new file mode 100644 index 0000000..fc10078 --- /dev/null +++ b/src/main/resources/config/KGI_Checks.xml @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 0000000..db0e707 --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,35 @@ + + + + FAICS + %d{yyyy-MM-dd HH:mm:ss.SSS} | %-5.5p |%-30.30C::%-30.30M:%-5.5L | %msg%n + + + + + + + + ${pattern} + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/lucy-xss-servlet-filter-rule.xml b/src/main/resources/lucy-xss-servlet-filter-rule.xml new file mode 100644 index 0000000..9c78782 --- /dev/null +++ b/src/main/resources/lucy-xss-servlet-filter-rule.xml @@ -0,0 +1,17 @@ + + + + + + xssSaxFilterDefender + + + + /view + + + xssSaxFilterDefender + + + + \ No newline at end of file diff --git a/src/main/resources/message/message-common_ko.properties b/src/main/resources/message/message-common_ko.properties new file mode 100644 index 0000000..25054b3 --- /dev/null +++ b/src/main/resources/message/message-common_ko.properties @@ -0,0 +1,953 @@ +#System# +sys.name=\uc0ac\uc774\ubc84\uc678\uc0ac\uc815\ubcf4\uc2dc\uc2a4\ud15c +#sys.footer.address=30128 \uc138\uc885\ud2b9\ubcc4\uc790\uce58\uc2dc \uc815\ubd802\uccad\uc0ac\ub85c 13 +sys.footer.address=21995 \uc778\ucc9c\uad11\uc5ed\uc2dc \uc5f0\uc218\uad6c \ud574\ub3cb\uc774\ub85c 130 \ud574\uc591\uacbd\ucc30\uccad +sys.footer.question=\uc2dc\uc2a4\ud15c\ubb38\uc758 +sys.footer.question.tel=000-000-0000 + +#Main# +menu.board=\uac8c\uc2dc\ud310 + +#Confirm message# +confirm.msg.askDel=\uc815\ub9d0 \uc0ad\uc81c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +confirm.msg.askUpd=\uc815\ub9d0 \uc218\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +confirm.msg.askApprove=\uacb0\uc7ac\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? + +#Common Message# +msg.failproc=\ucc98\ub9ac\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +msg.nodata=\uac80\uc0c9\ub41c \uc790\ub8cc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. +msg.noInfo=\uc815\ubcf4\uc5c6\uc74c + +#Error message # +member.idDpl.msg=\uc544\uc774\ub514\uac00 \uc774\ubbf8 \uc874\uc7ac \ud569\ub2c8\ub2e4. +member.blankId=\uc544\uc774\ub514\ub97c \uc785\ub825\ud558\uc138\uc694. +member.blankPass=\ube44\ubc00\ubc88\ud638\ub97c \uc785\ub825\ud558\uc138\uc694. +member.blankBoth=\uc544\uc774\ub514\uc640 \ube44\ubc00\ubc88\ud638\ub97c \uc785\ub825\ud558\uc138\uc694. + + +#Access Denied# +error.access=\uc811\uadfc\uac70\ubd80 +error.msg.access=[ \uc811\uadfc\uac70\ubd80 ] \uc0ac\uc6a9\uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. +error.error=\uc624\ub958\ubc1c\uc0dd +error.msg.dataFailure=[ \ub370\uc774\ud130 \uc561\uc138\uc2a4 \uc2e4\ud328 ] \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uc600\uc2b5\ub2c8\ub2e4. +error.msg.transaction=[ \ud2b8\ub79c\uc7ad\uc158 \uc2e4\ud328 ] \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uc600\uc2b5\ub2c8\ub2e4. +error.msg.unknown=\uc54c\uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uc600\uc2b5\ub2c8\ub2e4. + +#alt# +alt.image=\uc774\ubbf8\uc9c0 +alt.goMain=\uba54\uc778\ud398\uc774\uc9c0\ub85c \uac00\uae30 +alt.error.viewImg=\uc5d0\ub7ec \ud654\uba74 \uc774\ubbf8\uc9c0 + + +#validator errors # +errors.prefix=
+errors.suffix=

+errors.required={0}\uc740(\ub294) \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4. +errors.minlength={0}\uc740(\ub294) {1}\uc790 \uc774\uc0c1 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4. +errors.maxlength={0}\uc740(\ub294) {1}\uc790\uae4c\uc9c0\ub9cc \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4. +errors.invalid={0} \ud615\uc2dd\uc774 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +errors.byte={0}\uc740(\ub294) byte \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.short={0}\uc740(\ub294) short \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.integer={0}\uc740(\ub294) \uc22b\uc790\ub9cc \uc785\ub825\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. +errors.long={0}\uc740(\ub294) long \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.float={0}\uc740(\ub294) float \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.double={0}\uc740(\ub294) double \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.date={0}\uc740(\ub294) \ub0a0\uc9dc \uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4. +errors.range={0}\uc740(\ub294) {1} \uacfc {2} \uc0ac\uc774\uc758 \uac12\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.creditcard={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc2e0\uc6a9\uce74\ub4dc \ubc88\ud638\uc785\ub2c8\ub2e4. +errors.email={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc774\uba54\uc77c \uc8fc\uc18c\uc785\ub2c8\ub2e4. +errors.ihidnum=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638\uc785\ub2c8\ub2e4. +errors.korean={0}\uc740 \ud55c\uae00\uc744 \uc785\ub825\ud558\uc154\uc57c \ud569\ub2c8\ub2e4. +errors.fileext=\ucca8\ubd80\ud30c\uc77c\uc740 {0} \ud615\uc2dd\ub9cc \uc9c0\uc6d0\ud569\ub2c8\ub2e4. +errors.fileext2={0}\uc740(\ub294) {1} \ud615\uc2dd\ub9cc \uc9c0\uc6d0\ud569\ub2c8\ub2e4. +errors.regex=\ud615\uc2dd\uc774 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +errors.year={0}\uc740(\ub294) 4\uc790\ub9ac \uc22b\uc790\ub9cc \uc9c0\uc6d0\ud569\ub2c8\ub2e4. + +#Member# +member=\uc0ac\uc6a9\uc790 +member.type.fa=\uc678\uc0ac +member.type.nofa=\uc77c\ubc18 +member.header.id=\uc0ac\uc6a9\uc790ID +member.header.pass=\ube44\ubc00\ubc88\ud638 +member.header.name=\uc774\ub984 +member.header.ihid=\uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638 +member.header.email=\uc774\uba54\uc77c\uc8fc\uc18c +member.header.tel=\uc804\ud654\ubc88\ud638 +member.header.mobile=\ud578\ub4dc\ud3f0\ubc88\ud638 +member.header.zip=\uc6b0\ud3b8\ubc88\ud638 +member.header.adres=\uc8fc\uc18c +member.header.dAdres=\uc0c1\uc138\uc8fc\uc18c +member.header.auth=\uad8c\ud55c +member.select.user=\uc0ac\uc6a9\uc790 +member.select.admin=\uad00\ub9ac\uc790 +member.login=\ub85c\uadf8\uc778 +member.register=\ud68c\uc6d0\uac00\uc785 +member.searchPass=\ube44\ubc00\ubc88\ud638 \ucc3e\uae30 +member.insertSuccess.msg=\ud68c\uc6d0\uac00\uc785\uc774 \uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ub85c\uadf8\uc778 \ud574\uc8fc\uc138\uc694. +member.updateSuccess.msg=\ud68c\uc6d0\uc218\uc815\uc774 \uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +member.sendEmail.msg=\ub4f1\ub85d\ud558\uc2e0 \uba54\uc77c\ub85c \uc784\uc2dc \ube44\ubc00\ubc88\ud638\ub97c \ubc1c\uc1a1\ud558\uc600\uc2b5\ub2c8\ub2e4. +member.sendFail.msg=\uc784\uc2dc \ube44\ubc00\ubc88\ud638 \ubc1c\uc1a1\uc5d0 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +member.deleteSuccess.msg=\ud68c\uc6d0\uc0ad\uc81c\uac00 \uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +member.thanks.msg=\uadf8\ub3d9\uc548 \uc774\uc6a9\ud574 \uc8fc\uc154\uc11c \uac10\uc0ac\ud569\ub2c8\ub2e4. +member.blankEssential=\ud544\uc218 \uc785\ub825 \ud56d\ubaa9\uc744 \ubaa8\ub450 \uc785\ub825\ud574\uc8fc\uc138\uc694. +member.changePwSuccess.msg=\ube44\ubc00\ubc88\ud638\uac00 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. + +#\ud68c\uc6d0\uc815\ubcf4# +member.info.id=\uc544\uc774\ub514 +member.info.name=\uc774\ub984 +member.info.position=\uacc4\uae09 +member.info.place=\uc18c\uc18d +member.info.joinYear=\uac00\uc785\ub144\ub3c4 +member.info.attentionPoint=\uc8fc\uc758\uc0ac\ud56d +member.info.starSignMsg=\ud45c\uc2dc\ub294 \ud544\uc218\uc785\ub825 \uc0ac\ud56d\uc785\ub2c8\ub2e4. + + +#ExMember - \uacfc\uac70\uc678\uc0ac\uacbd\ucc30# +exmember.name=\uc131\uba85 +exmember.userid=\uc544\uc774\ub514 +exmember.family=\uac00\uc871\uc0ac\ud56d +exmember.address=\uc8fc\uc18c +exmember.email=E-mail +exmember.charge=\ub2f4\ub2f9\uc5c5\ubb34 +exmember.nowPlace=\ud604\uc18c\uc18d +exmember.nowPosition=\ud604\uacc4\uae09 +exmember.cdate=\ub4f1\ub85d\uc77c\uc790 +exmember.ophone=\uacbd\ube44\uc804\ud654 +exmember.hphone=\uc77c\ubc18\uc804\ud654 +exmember.cphone=\ud734\ub300\uc804\ud654 +exmember.sdate=\uacbd\ucc30\uc784\uc6a9\uc77c +exmember.pdate=\uacc4\uae09(\uc678)\uc784\uc6a9\uc77c +exmember.pdate.now=\ud604\uacc4\uae09\uc784\uc6a9\uc77c +exmember.adate=\ubd80\uc11c(\uc678)\ubc30\uce58\uc77c +exmember.adate.now=\ud604\ubd80\uc11c\ubc30\uce58\uc77c +exmember.place1=\uc18c\uc18d +exmember.place1.prev=\uc774\uc804\uc18c\uc18d +exmember.place2=\uc18c\uc18d2 +exmember.place3=\uc138\ubd80\uc18c\uc18d +exmember.duties=\uc9c1\uc704 +exmember.jobtype=\uc9c1\ubcc4 +exmember.inout=\uadfc\ubb34\ud615\ud0dc +exmember.position=\uacc4\uae09 +exmember.position.prev=\uc774\uc804\uacc4\uae09 +exmember.scholarship=\ucd5c\uc885\ud559\ub825 +exmember.career=\ucd1d \uc678\uc0ac\uacbd\ub825 +exmember.explace=\uc804 \uadfc\ubb34\ubd80\uc11c +exmember.excareer=\uacfc\uac70\uc678\uc0ac\uacbd\ub825 +exmember.excareer1=\uc218\uc0ac\uacbd\ub825 +exmember.excareer2=\uc815\ubcf4\uacbd\ub825 +exmember.excareer3=\ubcf4\uc548\uacbd\ub825 +exmember.comment=\ube44\uace0 +exmember.nowPlace=\ud604\uc18c\uc18d +exmember.nowPosition=\ud604\uacc4\uae09 +exmember.cdate=\ub4f1\ub85d\uc77c\uc790 +exmember.usegrade=\uad8c\ud55c\ub4f1\uae09 +exmember.type=\uad6c\ubd84 + +#Login# +login.msg.nim=\ub2d8 +login.msg.welcom=\ud658\uc601\ud569\ub2c8\ub2e4. +login.msg.logout=\ub85c\uadf8\uc544\uc6c3 +login.msg.login=\ub85c\uadf8\uc778\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. +login.msg.mypage=\ub9c8\uc774\ud398\uc774\uc9c0 + +#top-menu +menu.admin=\uad00\ub9ac\uc790 +menu.admin.member_add=\uc678\uc0ac\uacbd\ucc30 \uc815\ubcf4 \ub4f1\ub85d +menu.admin.member_list=\uc678\uc0ac\uacbd\ucc30\ud604\ud669 +menu.admin.member_auth=\uad8c\ud55c\uc124\uc815 +menu.admin.member_auth=\uad8c\ud55c\uc124\uc815 +menu.admin.member_base=\uc77c\ubc18\uacbd\ucc30\uc870\ud68c +menu.admin.userlog_stat=\uc0ac\uc6a9\uc790 \ub85c\uadf8 \ud1b5\uacc4 +menu.admin.member_manage=\uc811\uc18d\uc124\uc815 +# \uc774 \uba54\ub274\ub294 left menu\uc784 +menu.admin.exmember=\uacfc\uac70\uc678\uc0ac\uacbd\ucc30 +menu.bbs=\uac8c\uc2dc\ud310 +menu.notice=\uacf5\uc9c0\uc0ac\ud56d +menu.manual=\uc9c0\uce68\uc11c +menu.sitemap=Sitemap +menu.qna=Q&A +menu.fa_info=\uc678\uc0ac\uc815\ubcf4\ubcf4\uace0 +menu.fa=\uc678\uc0ac\uc218\uc0ac +menu.fa.arrest_report=\uc678\uc0ac\uc0ac\ubc94\uac80\uac70\ubcf4\uace0 +menu.susa.incident_list=\ub0b4\uc0ac\uc0ac\uac74 \ud604\ud669 +menu.susa.promot_list=\uacf5\uc791 \ucd94\uc9c4\ud604\ud669 +menu.fa_target=\uc678\uc0ac\ub300\uc0c1\ubaa9\ud45c +menu.fa_target.total=\ud1b5\ud569\uac8c\uc2dc\ud310 +menu.fa_target.weakplace_list=\uc678\uc0ac\ucde8\uc57d\uc9c0 +menu.fa_target.corporation_list=\uce58\uc548\ub300\uc0c1 +menu.fa_target.ferry_list=\uad6d\uc81c\uc5ec\uac1d\uc120 +menu.fa_target.division_list=\uc678\uc0ac\ubd84\uc2e4\uc6b4\uc601\ud604\ud669 +menu.equip=\uc678\uc0ac\uc7a5\ube44 +menu.equip.stat=\uc678\uc0ac\uc7a5\ube44\ud604\ud669 +menu.equip.use_state_list=\uc0ac\uc6a9\uc2e4\uc801 +menu.equip.cyber_list=\uc0ac\uc774\ubc84 \uc678\uc0ac\uc7a5\ube44 +menu.data=\uc790\ub8cc\uc2e4 +menu.togglebtn.descript=\ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \uba54\uc778\uba54\ub274\uac00 \uace0\uc815(\ud574\uc81c)\ub429\ub2c8\ub2e4. + + +#left-menu +menu.report=\uacac\ubb38\ubcf4\uace0 +menu.report.write=\uacac\ubb38\uc791\uc131 +menu.report.write.new=\uc2e0\uaddc\uc791\uc131 +menu.report.write.save_list=\uc784\uc2dc\uc800\uc7a5\ubaa9\ub85d +menu.report.list=\uacac\ubb38\uacb0\uc7ac/\uc2e4\uc801\uc870\ud68c +menu.report.list.waiting=\uacb0\uc7ac \ub300\uae30 \ubaa9\ub85d +menu.report.list.my_list=\ub0b4 \uc2e4\uc801 \uc870\ud68c +menu.report.search=\uacac\ubb38\uac80\uc0c9 +menu.report.statistics=\uacac\ubb38\ud1b5\uacc4 +menu.report.manage=\uad00\ub9ac\uae30\ub2a5 +menu.report.manage.present_list=\uacac\ubb38\uc81c\ucd9c\ud604\ud669 +menu.report.manage.goal=\ubaa9\ud45c \uad00\ub9ac +menu.report.manage.member_goal=\ubaa9\ud45c \uad00\ub9ac +menu.report.manage.statistics_goal=\ubaa9\ud45c/\uc2e4\uc801 \uc870\ud68c +menu.report.manage.statistics_judge=\ud3c9\uac00\uae30\ub85d\ubd80 +menu.report.manage.offline_write=\uc77c\uad04\uc785\ub825 +menu.stat=\uc678\uc0ac\ud1b5\uacc4 +menu.stat.monthly=\ud1b5\uacc4\uc6d4\ubcf4 \uc870\ud68c +menu.member=\uc678\uc0ac\uacbd\ucc30 +menu.member.common=\uc77c\ubc18\ud604\ud669 +menu.member.manage=\uc778\ub825\uad00\ub9ac +menu.member.manage.personnel=\uc815\uc6d0/\ud604\uc6d0 \ud604\ud669 +menu.member.manage.carrer=\uc678\uc0ac\uacbd\ub825 \ud604\ud669 +menu.member.manage.edu=\uad50\uc721 \ud604\ud669 +menu.trans_center=\uacbd\ucc30\ud1b5\uc5ed\uc13c\ud130 +menu.trans_center.police_list=\uacbd\ucc30\uad00 \ud604\ud669 +menu.trans_center.police_stat=\uacbd\ucc30\uad00 \ud1b5\uacc4 +menu.trans_center.public_list=\ubbfc\uac04\uc778 \ud604\ud669 +menu.trans_center.public_stat=\ubbfc\uac04\uc778 \ud604\ud669 +menu.trans_center.manage_list=\uc6b4\uc601\uc2e4\uc801 +menu.guard_info=\uc678\uad6d\uc5b4\uc120 \ub2e8\uc18d\uc2dc\uc2a4\ud15c +menu.guard_info.arrest=\uc678\uad6d\uc5b4\uc120 \uac80\uac70\ud604\ud669 +menu.guard_info.stat=\ubd88\ubc95\uc870\uc5c5 \uc678\uad6d\uc5b4\uc120 +menu.guard_info.info=\ub2e8\uc18d\uc815\ubcf4 + + +########---Common---######### +#>>>>title +title.no=\uc21c\ubc88 +title.sel=\uc120\ud0dd + +#>>>>button +button.goFind=\ucc3e\uae30 +button.search=\uac80\uc0c9 +button.goSearch=\uac80\uc0c9\ud558\uae30 +button.initSearch=\uac80\uc0c9\ucd08\uae30\ud654 +button.list=\ubaa9\ub85d +button.goList=\ubaa9\ub85d\uc73c\ub85c +button.create=\uae00\uc4f0\uae30 +button.modify=\uc218\uc815 +button.goCreate=\ub4f1\ub85d\ud558\uae30 +button.goReply=\ub2f5\uae00\uc4f0\uae30 +button.reply=\ub2f5\uae00\uc4f0\uae30 +button.goModify=\uc218\uc815\ud558\uae30 +button.goDelete=\uc0ad\uc81c\ud558\uae30 +button.delete=\uc0ad\uc81c +button.goPrev=\uc774\uc804\uae00 +button.goNext=\ub2e4\uc74c\uae00 +button.excel=\uc5d1\uc140 +button.getExcel=\uc5d1\uc140\ubc1b\uae30 +button.goSubmit=\uc81c\ucd9c\ud558\uae30 +button.save=\uc800\uc7a5 +button.goSave=\uc800\uc7a5\ud558\uae30 +button.cancel=\ucde8\uc18c +button.goSaveTemp=\uc784\uc2dc\uc800\uc7a5 +button.goBack=\ub4a4\ub85c\uac00\uae30 +button.print=\ucd9c\ub825 +button.goPrint=\uc778\uc1c4\ud558\uae30 +button.inquiry=\uc870\ud68c +button.register=\ub4f1\ub85d +button.memberAdd=\ud68c\uc6d0\ub4f1\ub85d +button.memberRemove=\ud68c\uc6d0\ud0c8\ud1f4 +button.changeLater=\ub2e4\uc74c\uae30\ud68c\uc5d0 \ubcc0\uacbd +button.close=\ub2eb\uae30 +button.selectAll=\uc804\uccb4\uc120\ud0dd +button.unselectAll=\uc120\ud0dd\ud574\uc81c +button.delSelected=\uc120\ud0dd\uc0ad\uc81c +button.writeReport=\uacac\ubb38\uc791\uc131 +button.initPw=\uc120\ud0dd \ube44\ubc88 \ucd08\uae30\ud654 +button.refresh=\uc0c8\ub85c\uace0\uce68 +button.graph=\uadf8\ub798\ud504 +button.goReport=\ubcf4\uace0\ud558\uae30 +button.goApproval=\uacb0\uc7ac\ud558\uae30 +button.showCondition=\uc870\uac74\ubcf4\uae30 +button.searchAgain=\ub2e4\uc2dc\uac80\uc0c9 +button.update=\uc5c5\ub370\uc774\ud2b8 +button.showPlace=\uc18c\uc18d\ubcc4\ub85c \ubcf4\uae30 +button.finishReport=\uc81c\ucd9c\uc644\ub8cc + +#>>>>Basic Board +board=\uac8c\uc2dc\ud310 +board.header.select=\uc120\ud0dd +board.header.no=\ubc88\ud638 +board.header.title=\uc81c\ubaa9 +board.header.place1=\uc18c\uc18d +board.header.writer=\uc791\uc131\uc790 +board.header.regdate=\uc791\uc131\uc77c +board.header.attach=\ucca8\ubd80 +board.header.hit=\uc870\ud68c\uc218 +board.header.reporter=\ubcf4\uace0\uc790 +board.header.rptdate=\ubcf4\uace0\uc77c +board.view.no=\uae00\ubc88\ud638 +board.view.notice=\uacf5\uc9c0 +board.view.title=\uc81c\ubaa9 +board.view.regdate=\uc791\uc131\uc77c +board.view.hit=\uc870\ud68c\uc218 +board.view.writer=\uc791\uc131\uc790 +board.view.content=\ub0b4\uc6a9 +board.view.attach=\ucca8\ubd80\ud30c\uc77c +board.list.vcount=\ud45c\uc2dc\uac2f\uc218 +board.list.searched=\uac80\uc0c9 \uac8c\uc2dc\ubb3c +board.list.now=\ud604\uc7ac \ud398\uc774\uc9c0 + +#>>>>Search +search.keyword=\ud0a4\uc6cc\ub4dc +search.name=\uc774\ub984 +search.id=ID + + +########---Member---######### +member.view.seq=\ubc88\ud638 +member.view.select=\uc120\ud0dd +member.view.name=\uc131\uba85 +member.view.hangul=\ud55c\uae00 +member.view.hanja=\ud55c\uc790 +member.view.userid=\uc544\uc774\ub514 +member.view.password=\ube44\ubc00\ubc88\ud638 +member.view.pwConfirm=\ud655\uc778 +member.view.address=\uc8fc\uc18c +member.view.family=\uac00\uc871\uc0ac\ud56d +member.view.charge=\ub2f4\ub2f9\uc5c5\ubb34 +member.view.ophone=\uacbd\ube44\uc804\ud654 +member.view.hphone=\uc77c\ubc18\uc804\ud654 +member.view.cphone=\ud734\ub300\uc804\ud654 +member.view.email=\uc774\uba54\uc77c +member.view.totalcareer=\uadfc\ubb34\uacbd\ub825 +member.view.pdate=\ud604\uacc4\uae09\uc784\uc6a9\uc77c +member.view.sdate=\uacbd\ucc30\uc784\uc6a9\uc77c +member.view.adate=\ud604\ubd80\uc11c\ubc30\uce58\uc77c +member.view.place1=\uc18c\uc18d +member.view.place2=\ubd80\uc11c +member.view.position=\uacc4\uae09 +member.view.place3=\uc138\ubd80\uc18c\uc18d +member.view.jobtype=\uc9c1\ubcc4 +member.view.duties=\uc9c1\uc704 +member.view.scholarship=\ucd5c\uc885\ud559\ub825 +member.view.inout=\uadfc\ubb34\ud615\ud0dc +member.view.inout.o=\uc678\uadfc +member.view.inout.i=\ub0b4\uadfc +member.view.inout.d=\uad6d\uc81c\ud56d\ub9cc\ubd84\uc2e4 +member.view.excareer_y=\uacfc\uac70\uc678\uc0ac\uacbd\ub825 +member.view.excareer1_y=\uc218\uc0ac\uacbd\ub825 +member.view.excareer2_y=\uc815\ubcf4\uacbd\ub825 +member.view.excareer3_y=\ubcf4\uc548\uacbd\ub825 +#member.view.explace=\uc804\uadfc\ubb34\ubd80\uc11c +member.view.explace=\uc804\ubb38\ubd84\uc57c +member.view.userimg=\uc0ac\uc9c4\ub4f1\ub85d +member.view.usersign=\uc2f8\uc778\ub4f1\ub85d +#member.view.etc=\ube44\uace0 +member.view.etc=\uc694\uccad\uc0ac\ud56d +member.view.usegrade=\ub4f1\uae09 +member.view.warning=\uc8fc\uc758\uc0ac\ud56d +member.view.sysPemission=\uc2dc\uc2a4\ud15c\uad8c\ud55c +member.view.rptPermission=\uacac\ubb38\uad8c\ud55c +member.view.rptPermission.head=\uacfc\uc7a5 +member.view.rptPermission.section=\uacc4\uc7a5 +member.view.rptPermission.permission=\uad8c\ud55c +member.view.isConnected=\uc811\uc18d\uc5ec\ubd80 +member.view.isRestricted=\uc81c\ud55c\uc5ec\ubd80 +member.view.finalDate=\ucd5c\uc885 \ubcc0\uacbd\uc77c\uc790 +member.view.lastLogin=\ucd5c\uadfc \ub85c\uadf8\uc778 \uc77c\uc2dc +member.view.division=\uad6c\ubd84 +member.view.total=\uacc4 +member.view.place1now=\ud604\uc18c\uc18d +member.view.positionnow=\ud604\uacc4\uae09 +member.view.lastestCareer=\ucd5c\uadfc\uc678\uc0ac\uadfc\ubb34\ud604\ud669 +member.view.workPeriod=\uadfc\ubb34\uae30\uac04 +member.view.totalFaPeriod=\ucd1d\uc678\uc0ac\uacbd\ub825 + + +member.msg.available=\uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc544\uc774\ub514\uc785\ub2c8\ub2e4. +member.msg.duplicate=\uc911\ubcf5\ub41c \uc544\uc774\ub514\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4. +member.msg.userid=\uc544\uc774\ub514\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.(5\uae00\uc790 \uc774\uc0c1.) +member.msg.password=\uc785\ub825\ud574\uc8fc\uc138\uc694. +member.msg.match=\uc77c\uce58 +member.msg.dismatch=\ubd88\uc77c\uce58 +member.msg.invalidNameLength=\uc131\uba85\uc740 \ud55c \uae00\uc790\uc774\uc0c1 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4. + +member.value.order.place1=0 +member.value.order.place2=1 +member.value.order.position=2 +member.value.order.name=3 +member.value.order.userid=4 +member.value.order.jobtype=5 +member.value.order.usegrade=6 +member.value.order.totalcareer=7 +member.value.order.duties=8 +member.value.order.loginchk=9 +member.value.order.chkcnt=10 +member.value.order.inout=11 +member.value.order.nowposition=12 +member.value.order.nowplace1=13 + +member.group.cg=\ud574\uc591\uacbd\ucc30\uc11c +member.group.regionalkcg=\uc9c0\ubc29\ud574\uc591\uacbd\ucc30\uccad +member.group.kcg=\ubcf8\uccad + +member.selectpop.title=\uc0ac\uc6a9\uc790 \uc120\ud0dd + +########---Log---######### +log.view.rnum=\ubc88\ud638 +log.view.user=\uc0ac\uc6a9\uc790 +log.view.loginout=\ub85c\uadf8\uc778/\uc544\uc6c3 +log.view.regdate=\uc77c\uc790 +log.view.menu=\uba54\ub274 +log.view.ip=IP +log.view.page=\ud398\uc774\uc9c0 + +########---Code---######### +code.view.rnum=\ubc88\ud638 +code.view.code=\ucf54\ub4dc +code.view.codenm=\ucf54\ub4dc\uba85 +code.view.codenmYak=\ucf54\ub4dc\uc57d\uc5b4 +code.view.enabled=\uc0ac\uc6a9\uc5ec\ubd80 +code.view.modify=\uc218\uc815 +code.view.delete=\uc0ad\uc81c + + + + +########---Report---######### +report.title=\uacac\ubb38\ubcf4\uace0\uc11c +report.view.saveDocNo=\uc784\uc2dc \uc800\uc7a5 \ubb38\uc11c +report.view.regName=\uc791\uc131\uc790 +report.view.name=\ubcf4\uace0\uc790 +report.view.searchName=\ubcf4\uace0\uc790 \uac80\uc0c9 +report.view.selectDefault=\u2592\uc120\ud0dd\ud574\uc8fc\uc138\uc694\u2592 +report.view.category=\ubd84\uc57c +report.view.category1=\ubd84\uc57c1 +report.view.category2=\ubd84\uc57c2 +report.view.category3=\ubd84\uc57c3 +report.view.category4=\ubd84\uc57c4 +report.view.infodate=\ubcf4\uace0\uc77c +report.view.memo=\ube44\uace0 +report.view.title=\uacac\ubb38\ubcf4\uace0 +report.view.num={0}\uc678\uc0ac-{1} +report.view.state=\uc0c1\ud0dc +report.view.receive=\uc218\uc2e0 +report.view.ref=\ucc38\uc870 +report.view.send=\ubc1c\uc2e0 +report.view.infoMng=\uc815\ubcf4\uacfc\uc7a5 +report.view.director=\uc11c\uc7a5(\uccad\uc7a5) +report.view.approval=\uacb0\uc7ac +report.view.arbitrarily=\uc804\uacb0 +report.view.division=\uad6c\ubd84 +report.view.appraisal=\ud3c9\uac00 +report.view.isAutoRemove=\uc0ad\uc81c\uc5ec\ubd80 +report.view.autoRemove=\uc790\ub3d9\uc0ad\uc81c +report.view.autoRemoveTerm=3\uac1c\uc6d4 +report.view.position=\uacc4\uae09 +report.view.fa=\uc678\uc0ac\uacbd\ucc30 +report.view.cm=\uc77c\ubc18\uacbd\ucc30 +report.view.empty=\uc5c6\uc74c + +report.goal.no=\ubc88\ud638 +report.goal.name=\uc774\ub984 +report.goal.agent=\uc804\uc885\uc694\uc6d0 +report.goal.foreignCoop=\ub300\uc678\ud611\ub825 +report.goal.infoCoop=\uc815\ubcf4\ud611\ub825 +report.goal.reportAgent=\uc2e0\uace0\uc694\uc6d0 +report.goal.sum=\uacc4 +report.goal.year=\ub144 +report.goal.month=\uc6d4 +report.goal.notExist=\uc5c6\uc74c +report.goal.exist=\uc5c6\uc74c +report.goal.deskJob=\ub0b4\uadfc +report.goal.outsideJob=\uc678\uadfc +report.goal.result=\uc2e4\uc801 +report.goal.goal=\ubaa9\ud45c + +report.state.unknown=Unknown +report.state.waitApproval=\uacb0\uc7ac \ub300\uae30 +report.state.chiefApproval=\uacc4\uc7a5 \uacb0\uc7ac +report.state.managerApproval=\uacfc\uc7a5 \uacb0\uc7ac +report.state.complete=\uacb0\uc7ac \uc644\ub8cc +report.state.temparary=\uc784\uc2dc \uc800\uc7a5 +report.type.newsflash=\ud2b9\ubcf4 +report.type.judge=\ud310\ub2e8 +report.type.middle=\uc911\ubcf4 +report.type.notice=\ud1b5\ubcf4 +report.type.record=\uae30\ub85d +report.type.survey=\uc870\uc0ac +report.type.reference=\ucc38\uace0 +report.type.fullReport=\uc0c1\ubcf4 +report.type.fullReport1=\uc9c0\ubc29 +report.type.fullReport2=\ubcf8\uccad +report.view.appraiser=\ud3c9\uac00\uc790 +report.view.opinion=\uac80\ud1a0\uc758\uacac +report.view.reportDate=\uacb0\uc7ac\uc77c\uc790 + +report.search.period=\uae30\uac04 +report.search.title=\uc81c\ubaa9 +report.search.reporter=\ubcf4\uace0\uc790 +report.search.id=\uc544\uc774\ub514 +report.search.place=\uc18c\uc18d +report.search.attachnm=\ucca8\ubd80\ud30c\uc77c\uba85 + +report.popup.searchReporter=\ubcf4\uace0\uc790 \uac80\uc0c9 +report.list.num=\ubb38\uc11c\ubc88\ud638 +report.list.select=\uc120\ud0dd +report.nodata=\uac80\uc0c9\ub41c \uacac\ubb38\ubcf4\uace0\uc11c\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. +report.msg.askDel={0}\uac1c\uc758 \uacac\ubb38\uc744 \uc0ad\uc81c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +report.msg.askApproval={0}\uac1c\uc758 \uacac\ubb38\uc744 \uacb0\uc7ac\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +report.msg.searchName=\ubcf4\uace0\uc790 \uac80\uc0c9\uc744 \ud574\uc8fc\uc2ed\uc2dc\uc624. +report.msg.writeName=\ubcf4\uace0\uc790 \uc774\ub984 \ub610\ub294 \uc544\uc774\ub514\ub97c \uc785\ub825\ud558\uc2ed\uc2dc\uc624. +report.noSet=\uc124\uc815\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. + +report.stats.category=\ubd84\uc57c\ubcc4 \ud1b5\uacc4 +report.stats.categoryExcel=\ubd84\uc57c\ubcc4 \uc5d1\uc140\ubc1b\uae30 +report.stats.judge=\ud3c9\uac00\ubcc4 \ud1b5\uacc4 +report.stats.judgeExcel=\ud3c9\uac00\ubcc4 \uc5d1\uc140\ubc1b\uae30 +report.stats.check=\uc870\ud68c +report.stats.total=\ub204\uacc4 +report.stats.judgeResult=\ud3c9\uac00\uacb0\uacfc\ubcc4 +report.stats.gradeResult=\uac00\uce58\ubcc4 +report.stats.AGrade=A\uae09 +report.stats.BGrade=B\uae09 +report.stats.CGrade=C\uae09 +report.stats.DGrade=D\uae09 + +report.category.01_1=\uc815\uce58 +report.category.02_1=\uacbd\uc81c +report.category.03_1=\uc0ac\ud68c +report.category.04_1=\ubb38\ud654 +report.category.05_1=\uad6d\uc81c +report.category.06_1=\uae30\ud0c0 +report.category.01_2=\ud574\uc6b4 +report.category.02_2=\ud56d\ub9cc +report.category.03_2=\uc218\uc0b0 +report.category.04_2=\uc870\uc120 +report.category.05_2=\uc5ec\uac1d\uc120 +report.category.06_2=\uae30\uad00 +report.category.07_2=\uacf5\uad00 +report.category.08_2=\uc678\uc2e0 +report.category.09_2=\uc0c1\uc0ac\ub2e8\uccb4 +report.category.10_2=\uc678\uad6d\uc778\uc870\uc0ac +report.category.11_2=\uc678\uad6d\uc120\ubc15 +report.category.12_2=\ud14c\ub7ec +report.category.13_2=\ud574\uc801 +report.category.14_2=\uc0ac\uc774\ubc84 +report.category.15_2=\ubc29\ucca9 +report.category.16_2=\uae30\ud0c0 +report.category.01_3=\ucd9c\uc785\uad6d \uc0ac\ubc94 +report.category.02_3=\uad00\uc138\uc0ac\ubc94 +report.category.03_3=\uae08\uc735\ubc94\uc8c4 \uc0ac\ubc94 +report.category.04_3=\uc678\uad6d\uc778 \ubc94\uc8c4 +report.category.05_3=\uc9c0\uc801\uc7ac\uc0b0\uad8c +report.category.06_3=\uae30\ud0c0\ubc94\uc8c4 +report.category.07_3=\ub3d9\ud5a5\uc815\ubcf4 +report.category.01_4=\uc804\uc885\uc694\uc6d0 +report.category.02_4=\ub300\uc678\ud611\ub825 +report.category.03_4=\uc815\ubcf4\ud611\ub825A +report.category.04_4=\uc815\ubcf4\ud611\ub825B +report.category.05_4=\uc815\ubcf4\ud611\ub825C +report.category.06_4=\uc2e0\uace0\uc694\uc6d0 +report.category.07_4=\ub3d9\ud5a5\uad00\ucc30 +report.category.08_4=\ud574\uc678\uc8fc\uc7ac\uad00 +report.category.09_4=\uc77c\ubc18\uacbd\ucc30 +report.category.10_4=\ucca9\ubcf4\uc218\uc9d1\ud65c\ub3d9 +report.category.11_4=\uc678\uc0ac\ucca9\ubcf4\ub9dd + + +########---\uc778\ub825\uad00\ub9ac--######### +fa.edu=\uad50\uc721\ud604\ud669 +fa.edu.eduCourse=\uad50\uc721\uacfc\uc815 +fa.edu.scholarship=\ud559\ub825 +fa.edu.position=\uacc4\uae09 +fa.edu.name=\uc131\uba85 +fa.edu.birth=\uc0dd\ub144\uc6d4\uc77c +fa.edu.stdate=\uad50\uc721\uc2dc\uc791\uc77c +fa.edu.eddate=\uad50\uc721\uc885\ub8cc\uc77c +fa.edu.eduTerm=\uad50\uc721\uae30\uac04 +fa.edu.comment=\ube44\uace0 +fa.edu.eduPlace=\uad50\uc721\uae30\uad00 +fa.edu.sdate=\uacbd\ucc30\uc784\uc6a9\uc77c +fa.edu.pdate=\ud604\uacc4\uae09\uc784\uc6a9\uc77c +fa.edu.adate=\ud604\ubd80\uc11c\ubc30\uce58\uc77c +fa.edu.jobtype=\uc9c1\ubcc4 +fa.edu.place1=\uc18c\uc18d + +########---equip--######### +equip.name=\uad6c\ubd84 +equip.total=\uacc4 +equip.PS00=\uBCF8\uCCAD +equip.PS01=\ubd80\uc0b0 +equip.PS02=\uc778\ucc9c +equip.PS03=\uc18d\ucd08 +equip.PS04=\ub3d9\ud574 +equip.PS05=\ud0dc\uc548 +equip.PS06=\uad70\uc0b0 +equip.PS07=\ubaa9\ud3ec +equip.PS08=\uc644\ub3c4 +equip.PS09=\uc5ec\uc218 +equip.PS10=\ud3ec\ud56d +equip.PS11=\uc6b8\uc0b0 +equip.PS12=\ud1b5\uc601 +equip.PS13=\uc81c\uc8fc +equip.PS14=\ud3c9\ud0dd +equip.PS15=\ucc3d\uc6d0 +equip.PS16=\ubcf4\ub839 +equip.PS17=\uc11c\uadc0\ud3ec +equip.PS18=\ubd80\uc548 +equip.PS19=\uc6b8\uc9c4 +equip.PS50=\uc11c\ud5745\ub3c4 +equip.PS90=\uC911\uBD80\uC9C0\uBC29\uCCAD +equip.PS91=\uc81c\uc8fc\ubcf8\ubd80 +equip.PS92=\uc11c\ud574\ubcf8\ubd80 +equip.PS93=\ub0a8\ud574\ubcf8\ubd80 +equip.PS94=\ub3d9\ud574\ubcf8\ubd80 + +equip.stateWaiting.year=\ub144\ub3c4 +equip.stateWaiting.division=\uad6c\ubd84 +equip.stateWaiting.state=\uacb0\uc7ac\uc0c1\ud0dc +equip.stateWaiting.approvalDate=\uacb0\uc7ac\uc77c\uc790 + +equip.approval.wait=\uacb0\uc7ac\ub300\uae30 +equip.approval.complete=\uacb0\uc7ac\uc644\ub8cc + +equip.useState=\uc678\uc0ac\uc7a5\ube44 \uc0ac\uc6a9\uc2e4\uc801 +equip.useState.division=\uad6c\ubd84 +equip.useState.cnt=\uc7a5\ube44\uc0ac\uc6a9\ud69f\uc218 +equip.useState.detail=\uc0ac\uc6a9\uc2e4\uc801 +equip.useState.check=\uc810\uac80\ud69f\uc218 +equip.useState.state=\uc7a5\ube44\uc0c1\ud0dc + +equip.approve.name=\uacb0\uc7ac\uc790 +equip.approve.message=\uac80\ud1a0\uc758\uacac +equip.approve.checkDate=\uacb0\uc7ac\uc77c\uc790 + +equip.police=\ubc30\uce58 +equip.equipType=\uc7a5\ube44\uad6c\ubd84 +equip.equipName=\uc7a5\ube44\uba85\uce6d +equip.buyDate=\uad6c\uc785\uc77c +equip.useTerm=\uc0ac\uc6a9\uc5f0\ud55c +equip.standard=\ubaa8\uc591/\uaddc\uaca9 +equip.purpose=\uc6a9\ub3c4 +equip.buyPlace=\uad6c\uc785\ucc98 +equip.madeIn=\uc81c\uc791\ud68c\uc0ac +equip.price=\uad6c\uc785\uac00\uaca9 +equip.num=\uad00\ub9ac\ubc88\ud638 +equip.serialNo=\uc81c\uc791\ubc88\ud638 +equip.useSection=\uc18c\uc694\ubd80\uc18d \ubc0f \uc790\uc7ac +equip.operate=\uc791\ub3d9\uc0c1\ud0dc +equip.bigo=\uc720\uc9c0\ubcf4\uc218\ub0b4\uc5ed +equip.equipImage=\uc7a5\ube44\uc0ac\uc9c4 + + + +########---Susa (\uc678\uc0ac\uc218\uc0ac)--######### +#\ub0b4\uc0ac\uc218\uc0ac\ud604\ud669# +susa.in.view.pagetitle=\ub0b4\uc0ac\uc0ac\uac74\ud604\ud669 +susa.in.view.pagetitle_en=Internal Affairs Incident Report +susa.in.view.no=\uc5f0\ubc88 +susa.in.view.place1=\ubd80\uc11c +susa.in.view.chargeNm=\ub2f4\ub2f9\uc790 +susa.in.view.title=\uc0ac\uac74\uba85 +susa.in.view.sdate=\ucc29\uc218\uc77c +susa.in.view.edate=\uc885\ub8cc\uc77c +susa.in.view.contents=\ud611\uc758\ub0b4\uc6a9 +susa.in.view.result=\ub0b4\uc0ac\uacb0\uacfc +#\uacf5\uc791\ucd94\uc9c4\ud604\ud669# +susa.pr.view.pagetitle=\uacf5\uc791\ucd94\uc9c4\ud604\ud669 +susa.pr.view.pagetitle_en=Maneuver Promition Condition +susa.pr.view.no=\uc5f0\ubc88 +susa.pr.view.place1=\ubd80\uc11c +susa.pr.view.chargeNm=\ub2f4\ub2f9\uc790 +susa.pr.view.title=\uacf5\uc791\uba85 +susa.pr.view.sdate=\ucc29\uc218\uc77c +susa.pr.view.edate=\uc885\ub8cc\uc77c +susa.pr.view.contents=\ud611\uc758\ub0b4\uc6a9 +susa.pr.view.result=\uacb0\uacfc + +########---Target (\uc678\uc0ac\ub300\uc0c1\ubaa9\ud45c)--######### +#\uc678\uc0ac\ucde8\uc57d\uc9c0# +target.wp.wpNoStr=\uad00\ub9ac\ubc88\ud638 +target.wp.place1=\uc11c\uba85 +target.wp.wpNo=\ubc88\ud638 +target.wp.name=\ucde8\uc57d\uc9c0\uba85 +target.wp.location=\uc18c\uc7ac\uc9c0 +target.wp.filename1=\uc694\ub3c4\ucca8\ubd80 +target.wp.filename2=\ucca8\ubd80\ud30c\uc77c +target.wp.comments=\uc120\uc815\uc0ac\uc720 +#\uce58\uc548\ub300\uc0c1# +target.corp.place1=\uc9c0\uc5ed +target.corp.name01=\uae30\uad00\uba85 +target.corp.name02=\uba85\uce6d +target.corp.name=\uc5c5\uccb4\uba85 +target.corp.location=\uc18c\uc7ac\uc9c0 +target.corp.shipcnt=\uc120\ubc15(\ucc99) +target.corp.ceo=\ub300\ud45c\uc790 +target.corp.jobtype=\uc5c5\uc885 +target.corp.membercnt=\uc778\uc6d0 +target.corp.partner=\ub300\uc0c1\uad6d +target.corp.basicyear=\uc124\ub9bd\ub144\ub3c4 +target.corp.fund=\uc790\ubcf8\uae08(\ub9cc\uc6d0) +target.corp.tel=\uc804\ud654 +target.corp.fax=FAX +target.corp.comments=\ube44\uace0 +#\uad6d\uc81c\uc5ec\uac1d\uc120# +target.ferry=\uad6d\uc81c\uc5ec\uac1d\uc120 +target.ferry.no=\ubc88\ud638 +target.ferry.office=\uc5ec\uac1d\uc120\uc0ac +target.ferry.name=\uc120\uba85 +target.ferry.ton=\ud1a4\uc218 +target.ferry.route=\ud56d\ub85c +target.ferry.ferryTime=\ud56d\ud574\uc2dc\uac04 +target.ferry.speed=\uc18d\ub825 +target.ferry.speedMax=\ucd5c\ub300 +target.ferry.speedNor=\ud56d\ud574 +target.ferry.capacity=\uc815\uc6d0 +target.ferry.capacityTot=\uacc4 +target.ferry.guestCnt=\uc5ec\uac1d +target.ferry.clueCnt=\uc2b9\ubb34\uc6d0 +target.ferry.runTerm=\uc6b4\ud56d\uc8fc\uae30 +target.ferry.runCnt=\uc6b4\ud56d\ud69f\uc218 +target.ferry.repreName=\ub300\ud45c\uc790 +target.ferry.tel=\uc5f0\ub77d\ucc98 +target.ferry.ferrySosok=\uc120\uc801 +target.ferry.sailingDistance=\ud56d\ud574\uac70\ub9ac +target.ferry.sailingDate=\ucde8\ud56d\uc77c +target.ferry.cooperateNation=\ud569\uc791\uad6d +target.ferry.isCooperate=\ud569\uc791\uc5ec\ubd80 +target.ferry.imgFile=\ucca8\ubd80\uc774\ubbf8\uc9c0 +target.ferry.comments=\ube44\uace0 +#\uc678\uc0ac\ubd84\uc2e4\uc6b4\uc601\ud604\ud669# +target.divmng=\uc678\uc0ac\ubd84\uc2e4\uc6b4\uc601\ud604\ud669 +target.divmng.place=\ubd80\uc11c +target.divmng.local=\uc124\uce58\uc7a5\uc18c +target.divmng.gubun=\uadfc\ubb34\ud615\ud0dc +target.divmng.staffNum=\uadfc\ubb34\uc778\uc6d0 +target.divmng.tel=\uc804\ud654\ubc88\ud638 +target.divmng.condition=\ud604\ud669 +target.divmng.equipStat=\uc7a5\ube44\ud604\ud669 +target.divmng.fileImg=\uc0ac\uc9c4 +target.divmng.file=\ucca8\ubd80\ud30c\uc77c + +#\uc911\uad6d\uc5b4\uc120 \ub2e8\uc18d\uc2dc\uc2a4\ud15c# +arrest.id=ID +arrest.arrestDate=\ub098\ud3ec\uc77c\uc2dc +arrest.agencyType=\uac80\uac70\uae30\uad00 +arrest.agencyGuard=\uac80\uac70\uae30\uad00(\ud574\uc591\uacbd\ube44\uc548\uc804\uc11c) +arrest.agencyVessel=\uac80\uac70\uae30\uad00(\ud568\uc815) +arrest.list.agencyVessel=\ud568\uc815 +arrest.vessel=\ud568\uc815 +arrest.procCondition=\ucc98\ub9ac\ud604\ud669 +arrest.violateType=\uc704\ubc18\ub0b4\uc6a9 +arrest.violateDetail=\uc704\ubc18\ub0b4\uc6a9\uc0c1\uc138 +arrest.invasionType=\uce68\ubc94\uc720\ud615 +arrest.specBatlYn=\ud2b9\uacf5\ubc29 +arrest.nllYn=NLL +arrest.woDetentionType=\ubb34\ud610\uc758\ubd88\uad6c\uc18d +arrest.fieldArrestDate=\ub098\ud3ec\uc77c\uc2dc +arrest.fieldReleaseDate=\uc11d\ubc29\uc77c\uc2dc +arrest.leadDistance=\uac70\ub9ac +arrest.leadHour=\uc18c\uc694\uc2dc\uac04 +arrest.leadMinute=\ubd84 +arrest.captainCount=\uc120\uc7a5 +arrest.mateCount=\ud56d\ud574\uc0ac +arrest.engineerCount=\uae30\uad00\uc7a5 +arrest.crewCount=\uc120\uc6d0 +arrest.shipProcType=\uc120\ubc15\ucc98\ub9ac +arrest.commissionCost=\uc704\ud0c1\uad00\ub9ac\ube44 +arrest.gearCast=\ud2c0 +arrest.gearWidth=\ud3ed +arrest.gearEtc=\uae30\ud0c0 +arrest.addrArea=\uc704\ubc18\uc7a5\uc18c_\ub3c4 +arrest.addrCity=\uc2dc +arrest.addrDetail=\uc0c1\uc138\uc8fc\uc18c +arrest.latD=\uc704\ub3c4 \ub3c4 +arrest.latM=\uc704\ub3c4 \ubd84 +arrest.latS=\uc704\ub3c4 \ucd08 +arrest.lonD=\uacbd\ub3c4 \ub3c4 +arrest.lonM=\uacbd\ub3c4 \ubd84 +arrest.lonS=\uacbd\ub3c4 \ucd08 +arrest.shipName=\uc120\uba85 +arrest.shipTonnage=\ud1a4\uc218 +arrest.shipCrewCnt=\uc120\uc6d0 +arrest.shipQuality=\uc120\uc9c8 +arrest.shipMent=\uc120\uc801 +arrest.shipPortName=\ud56d\uad6c\uba85 +arrest.shipType=\uc120\uc885 +arrest.type=\uc885\ub958 +arrest.capName=\uc120\uc7a5\uba85 +arrest.capChnName=\uc120\uc7a5\ud55c\uc790\uba85 +arrest.capAge=\uc120\uc7a5\ub098\uc774 +arrest.vioFish=\ubc94\uce59\uc5b4\uc885 +arrest.vioCnt=\ubc94\uce59\uc218\ub7c9 +arrest.vioCnt2=\uc218\ub7c9 +arrest.vioPriatedAmt=\uc704\ud310\uae08\uc561 +arrest.vioPriatedAmt2=\uc704\ud310\uae08\uc561(\uc6d0) +arrest.marginPayment=\ub2f4\ubcf4\uae08\ub0a9\ubd80 +arrest.noMarginPayment=\ub2f4\ubcf4\uae08\ubbf8\ub0a9 +arrest.marginPaymentAmt=\ub2f4\ubcf4\uae08\ub0a9\ubd80\uc561 +arrest.marginPaymentAmt2=\ub0a9\ubd80\uc561(\ub9cc\uc6d0) +arrest.marginPaymentDate=\ub0a9\ubd80\uc77c\uc2dc +arrest.status=\uc800\uc7a5\uc0c1\ud0dc +arrest.delYn=\uc0ad\uc81c\uc5ec\ubd80 +arrest.regDate=\ub4f1\ub85d\uc77c\uc2dc +arrest.regUser=\ub4f1\ub85d\uc790 +arrest.regAgency=\ub4f1\ub85d\uae30\uad00 +arrest.violatePlace=\uc704\ubc18\uc7a5\uc18c +arrest.captain=\uc120\uc7a5 +arrest.shipData=\uc120\ubc15\uc81c\uc6d0 +arrest.detention=\uad6c\uc18d +arrest.withoutDetention=\ubd88\uad6c\uc18d +arrest.noSuspension=\ubb34\ud610\uc758 +arrest.violation=\ubc94\uce59\ubb3c +arrest.detention=\uad6c\uc18d +arrest.feildSurvey=\ud604\uc7a5\uc870\uc0ac +arrest.name=\uc774\ub984 +arrest.chn=\ud55c\uc790 +arrest.age=\ub098\uc774 +arrest.lead=\uc555\uc1a1 +arrest.fishingGear=\uc5b4\uad6c\uc555\uc218 +arrest.invasionType.particularBan=\ud2b9\uc815\uae08\uc9c0 +arrest.invasionType.withoutLicense=\ubb34\ud5c8\uac00 +arrest.invasionType.territWaters=\uc601\ud574 +arrest.invasionType.eez=EEZ +arrest.invasionType.specBatl=\ud2b9\uacf5\ubc29 +arrest.invasionType.nll=NLL +arrest.won=\uc6d0 +arrest.trustMoney=\uc704\ud0c1\uae08 (\uc6d0) +arrest.myung=\uba85 +arrest.knot=\ud574\ub9ac +arrest.hour=\uc2dc\uac04 +arrest.minute=\ubd84 +arrest.person=\uba85 +arrest.submit=\uc81c\ucd9c +arrest.temporary=\uc784\uc2dc\uc800\uc7a5 +arrest.modify=\uc218\uc815 +arrest.delete=\uc0ad\uc81c +arrest.cancel=\ucde8\uc18c +arrest.totalCount=\uacc4 +arrest.procCondition.underExam=\uc870\uc0ac\uc911 +arrest.procCondition.finish=\uc644\ub8cc +arrest.marginPayment.finish=\ub0a9\ubd80\uc644\ub8cc +arrest.marginPayment.default=\ubbf8\ub0a9 +arrest.marginPayment.paymentAmt=\ub0a9\ubd80\uc561 +arrest.marginPayment.defaultAmt=\ubbf8\ub0a9\uc561 +arrest.marginPayment.defaultAmt2=\ubbf8\ub0a9\uae08\uc561(\ub9cc\uc6d0) +arrest.marginPayment.10000=\ub9cc\uc6d0 +arrest.shipProcType.commission=\uc704\ud0c1\uad00\ub9ac +arrest.shipProcType.eviction=\ud1f4\uac70 +arrest.shipProcType.direct=\uc9c1\uc811\uc778\uacc4 +arrest.shipProcType.discard=\ud3d0\uae30 +arrest.shipProcType.forfeit=\ubab0\uc218 +arrest.shipProcType.commissionCost=\uc704\ud0c1\uad00\ub9ac\ube44 +arrest.woDetentionType.prosecution=\uae30\uc18c\uc911\uc9c0 +arrest.woDetentionType.conclusion=\ub0b4\uc0ac\uc885\uacb0 +arrest.woDetentionType.woDetention=\ubd88\uad6c\uc18d +arrest.woDetentionType.nonindictment=\ubd88\uae30\uc18c +arrest.list.shipTonnage=\uc120\ubc15\uc81c\uc6d0(\ud1a4\uc218) +arrest.list.shipQuality=\uc120\ubc15\uc81c\uc6d0(\uc120\uc9c8) +arrest.list.shipMent=\uc120\ubc15\uc81c\uc6d0(\uc120\uc801) +arrest.list.search=\uac80\uc0c9 +arrest.list.insert=\uc785\ub825 +arrest.list.status=\uc0c1\ud0dc +arrest.list.searchresult=\uac80\uc0c9\uacb0\uacfc +arrest.list.count=\uac74 +arrest.noData=\ub370\uc774\ud130\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 +arrest.list.title=\uc911\uad6d\uc5b4\uc120 \ub098\ud3ec \ucc98\ub9ac \ud604\ud669 + +#20180528 \uad6d\uc81c\uc5b4\uc120 \ub2e8\uc18d\uc2dc\uc2a4\ud15c \ubb38\uad6c \ucd94\uac00# +#\uad6d\uc81c\uc5b4\uc120 \ub2e8\uc18d\uc2dc\uc2a4\ud15c# +interArrest.arrestDate=\uac80\uac70\uc77c\uc2dc +interArrest.violatePlace=\uac80\uac70\uad00\uc11c +interArrest.fieldArrestDate=\uc1a1\uce58\uc77c\uc790 +interArrest.feildSurvey=\ud604\uc7a5 +interArrest.violateType=\uc0ac\uac74\uac1c\uc694 +interArrest.invasionType=\uc801\uc6a9\ubc95\uc870 +interArrest.shipType=\ubc94\uc8c4\uc720\ud615(\uac74) +interArrest.procCondition=\uc0ac\uac74\ub2e8\uc11c(\uac74) +interArrest.Intelligence=\ucca9\ubcf4 +interArrest.Declaration=\uc2e0\uace0 +interArrest.leadInter=\uac80\uac70\uc778\uc6d0 +interArrest.leadArrest=(\uba85,\ubc95\uc778\ud3ec\ud568) +interArrest.lead=\uac80\uac70\uc778\uc6d0(\uba85,\ubc95\uc778\ud3ec\ud568) +interArrest.hour:\uad6d\uc801 +interArrest.minute=\ube44\uc790\uc885\ub958 +interArrest.detention=\ucc98\ub9ac\uc778\uc6d0(\uba85) +interArrest.captainCount=\uad6c\uc18d +interArrest.mateCount=\ubd88\uad6c\uc18d +interArrest.engineerCount=\ubd88\uae30\uc18c +interArrest.crewCount=\uc774\ucca9(\uc774\uc1a1) +interArrest.countCrew=\uc774\uc1a1 +interArrest.fishingGear=\ubc00\ucd9c\uad6d +interArrest.te03=\ubc00\uc785\uad6d +interArrest.test01=\ubc00\uc218\uc785 +interArrest.gearCast=\ud514\ubaa9 +interArrest.gearWidth=\uc218\ub7c9(kg) +interArrest.gearEtc=\uae08\uc561(\ub9cc) +interArrest.getWorld=\uc870\ub2ec\uad6d\uac00 +interArrest.captain=\ubc00\uc218\ucd9c +interArrest.name=\ud488\ubaa9 +interArrest.chn=\uc218\ub7c9(kg) +interArrest.age=\uae08\uc561(\ub9cc) +interArrest.getDaeWorld=\ub300\uc0c1\uad6d\uac00 +interArrest.shipData=\uc0b0\uc5c5\uae30\uc220\uc720\ucd9c +interArrest.marginPayment=\ubc94\uc8c4\uc720\ud615 +interArrest.shipProcType=\ube44\uace0 +interArrest.violation=\uc678\uad6d\uc778\uc778\uad8c\ubcf4\ud638 +interArrest.vioFish=\ubcf4\ud5d8\ubbf8\uac00\uc785 +interArrest.vioCnt=\uc678\uad6d\uc778\ud53c\ud574 +interArrest.illegalstay=\ubd88\ubc95\uccb4\ub958 +interArrest.crewCount=\uc120\uc6d0 +interArrest.crewCountMoo=\uc120\uc6d0\u5916 +interArrest.Placeofarrest=\uac80\uac70\uc7a5\uc18c +interArrest.Athletics=\uc721\uc0c1 +interArrest.sea=\uc9c1\uc811\ubc00\uc785\uad6d +interArrest.Musashi=\ubb34\uc0ac\uc99d +inserArrest.Foreigncrew=\uc678\uad6d\uc120\uc6d0 +inserArrest.ArrangeTransport=\uc54c\uc120,\uc6b4\uc1a1 +inserArrest.IntelProperty=\uc9c0\uc2dd\uc7ac\uc0b0\uad8c +inserArrest.Object=\ub300\uc0c1 +inserArrest.China=\uc911\uad6d +inserArrest.japan=\uc77c\ubcf8 +inserArrest.OtherCountries=\uae30\ud0c0\uad6d\uac00 +inserArrest.escape=\ub3c4\ud53c +inserArrest.Employment=\ucde8\uc5c5 +inserArrest.Etc=\uae30\ud0c0 +inserArrest.IllegalMover=\ubd88\ubc95\uc774\ub3d9\uc790 +inserArrest.transportation=\uc774\ub3d9\uc218\ub2e8 +inserArrest.IllegalExchange=\ubd88\ubc95\uc704\ud3d0,\uc678\uad6d\ud658\uac70\ub798 +inserArrest.Quenching=\ubb34\ub4f1\ub85d\uc678\ud658(\ud658\uce58\uae30) +inserArrest.ForeignCurrency=\uc678\ud654\ubc00\ubc18\ucd9c +inserArrest.AmountMillion=\uae08\uc561(\ub9cc) +inserArrest.Protection=\uc678\uad6d\uc778\uc778\uad8c\ubcf4\ud638 +inserArrest.NoInsurance=\ubcf4\ud5d8\ubbf8\uac00\uc785 +inserArrest.AlienDamage=\uc678\uad6d\uc778\ud53c\ud574 +inserArrest.drug=\ub9c8\uc57d +inserArrest.ForeignRelatedCrime=\uc678\uad6d(\uc778)\uad00\ub828\ubc94\uc8c4 +inserArrest.dosage=\ud22c\uc57d +inserArrest.CarryOn=\uc18c\uc9c0\uc6b4\ubc18 +inserArrest.sale=\ud310\ub9e4 +inserArrest.Aviolentcrime=\uac15\ub825\ubc94\uc8c4 +inserArrest.Violentcrime=\ud3ed\ub825\ubc94\uc8c4 +inserArrest.Intelligentcrime=\uc9c0\ub2a5\ubc94\uc8c4 +inserArrest.Theftcrime=\uc808\ub3c4\ubc94\uc8c4 +inserArrest.Speciallaw=\ud2b9\ubcc4\ubc95\ubc94 +inserArrest.list.title=\uad6d\uc81c\ubc94\uc8c4 \uac80\uac70\ud604\ud669 +inserArrest.spilltarget=\uc720\ucd9c\ub300\uc0c1 +inserArrest.amountofcompensation=\ubcf4\uc0c1\uae08\uc561(\uc6d0) +inserArrest.otherMeansOfTransport=\uae30\ud0c0\uc774\ub3d9\uc218\ub2e8 +inserArrest.originIndicationViolation=\uc6d0\uc0b0\uc9c0\ud45c\uc2dc\uc704\ubc18 +inserArrest.inhibitionOfSocialSafety=\uc0ac\ud68c \ub4f1 \uc548\uc804\uc800\ud574 +interArrest.sailorPeople=\uc120\uc6d0 +interArrest.seamanOutside=\uc120\uc6d0\uc678 + + + +#\uc678\uc0ac\ud1b5\uacc4 +stats.all=\uc804\uccb4 + +#\uae30\ud0c0 +etc.editor.descript=* \ud55c\uae00 \ubb38\uc11c\uc758 \ub0b4\uc6a9 \ubc0f \ud45c \uc591\uc2dd\uc744 \ubcf5\uc0ac\ud558\uc5ec \ubd99\uc5ec\ub123\uc73c\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ No newline at end of file diff --git a/src/main/resources/property/ck.properties b/src/main/resources/property/ck.properties new file mode 100644 index 0000000..2b44950 --- /dev/null +++ b/src/main/resources/property/ck.properties @@ -0,0 +1,15 @@ +# CKEditor Image File Upload + +#optional +ck.image.type.allow=jpg,jpeg,gif,bmp,png +#optional +#ck.image.save.class=Implementation of egovframework.com.utl.wed.filter.FileSaveManager + +# if you use "separate image server" or other case. (apache, cdn, nas...) +#ck.image.dir=/www/images.mydomain.com/upload +#ck.image.url=http://images.mydomain.com/upload/ + +# if you use "web application"'s deployed directory. +# \uc2e4\uc81c \uc6b4\uc601\uc2dc \uacbd\ub85c\ub97c \uc11c\ube44\uc2a4 \uacbd\ub85c\ub85c \ubcc0\uacbd\ud574\uc918\uc57c \ud55c\ub2e4. +ck.image.dir=D:/file_repository/ckeditorUpload +ck.image.url=/storage/ckeditorUpload \ No newline at end of file diff --git a/src/main/resources/property/globals.properties b/src/main/resources/property/globals.properties new file mode 100644 index 0000000..3869f08 --- /dev/null +++ b/src/main/resources/property/globals.properties @@ -0,0 +1,76 @@ + +#----------------------------------------------------------------------- +# +# globals.properties : \uc2dc\uc2a4\ud15c +# +#----------------------------------------------------------------------- +# 1. key = value \uad6c\uc870\uc785\ub2c8\ub2e4. +# 2. key\uac12\uc740 \uacf5\ubc31\ubb38\uc790\ub97c \ud3ec\ud568\ubd88\uac00, value\uac12\uc740 \uacf5\ubc31\ubb38\uc790\ub97c \uac00\ub2a5 +# 3. key\uac12\uc73c\ub85c \ud55c\uae00\uc744 \uc0ac\uc6a9\ubd88\uac00, value\uac12\uc740 \ud55c\uae00\uc0ac\uc6a9\uc774 \uac00\ub2a5 +# 4. \uc904\uc744 \ubc14\uafc0 \ud544\uc694\uac00 \uc788\uc73c\uba74 '\'\ub97c \ub77c\uc778\uc758 \ub05d\uc5d0 \ucd94\uac00(\ub9cc\uc57d '\'\ubb38\uc790\ub97c \uc0ac\uc6a9\ud574\uc57c \ud558\ub294 \uacbd\uc6b0\ub294 '\\'\ub97c \uc0ac\uc6a9) +# 5. Windows\uc5d0\uc11c\uc758 \ub514\ub809\ud1a0\ub9ac \ud45c\uc2dc : '\\' or '/' ('\' \uc0ac\uc6a9\ud558\uba74 \uc548\ub428) +# 6. Unix\uc5d0\uc11c\uc758 \ub514\ub809\ud1a0\ub9ac \ud45c\uc2dc : '/' +# 7. \uc8fc\uc11d\ubb38 \ucc98\ub9ac\ub294 #\uc0ac\uc6a9 +# 8. value\uac12 \ub4a4\uc5d0 \uc2a4\ud398\uc774\uc2a4\uac00 \uc874\uc7ac\ud558\ub294 \uacbd\uc6b0 \uc11c\ube14\ub9bf\uc5d0\uc11c \ucc38\uc870\ud560\ub54c\ub294 \uc5d0\ub7ec\ubc1c\uc0dd\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c trim()\ud558\uac70\ub098 \ub9c8\uc9c0\ub9c9 \uacf5\ubc31\uc5c6\uc774 properties \uac12\uc744 \uc124\uc815\ud560\uac83 +#----------------------------------------------------------------------- + +#DBServiceServer +#Global.datasource.driverClassName=oracle.jdbc.driver.OracleDriver +#Global.datasource.url=jdbc:oracle:thin:@10.29.16.123:1521:FAICS +#Global.datasource.username=NEW_FAICS +#Global.datasource.password=tkdlqjdhltk12#$ + + +#TEST DB Server +Global.datasource.driverClassName=oracle.jdbc.driver.OracleDriver +Global.datasource.url=jdbc:oracle:thin:@106.247.244.146:51521:faics +Global.datasource.username=new_faics +Global.datasource.password=tkdlqjdhltk12#$ + + + + +#File path +Global.fileStorePath = D:/file_repository/ +Global.imageStorePath = D:/file_repository/images/ +Bbs.bbs.fileStorePath=D:/file_repository/bbs/bbs/ +Bbs.data.fileStorePath=D:/file_repository/bbs/data/ +Bbs.faArrestReport.fileStorePath=D:/file_repository/bbs/fa_arrest_report/ +Bbs.faInfoReport.fileStorePath=D:/file_repository/bbs/fa_info_report/ +Bbs.faTarget.fileStorePath=D:/file_repository/bbs/fa_target/ +Bbs.guardInfo.fileStorePath=D:/file_repository/bbs/guard_info/ +Bbs.notice.fileStorePath=D:/file_repository/bbs/notice/ +Bbs.statBbs.fileStorePath=D:/file_repository/bbs/stat_bbs/ +Susa.in.fileStorePath = D:/file_repository/susa/incident/ +Susa.pr.fileStorePath = D:/file_repository/susa/promot/ +Target.wp.fileStorePath = D:/file_repository/target/weakplace/ +Target.divmng.fileStorePath = D:/file_repository/target/division/ +Target.ferry.fileStorePath = D:/file_repository/target/ferry/ +Report.fileStorePath = D:/file_repository/report/ +Member.imgStorePath = D:/file_repository/user_img/user/ +Member.imgStoreUrl = /storage/user_img/user/ +Member.signStorePath = D:/file_repository/user_img/sign/ +Member.signStoreUrl = /storage/user_img/sign/ +Equip.fileStorePath = D:/file_repository/equip/ +Equip.fileStoreUrl = /storage/equip/ +#Aria Encryption +Global.crypto.key = faics1234567 +Global.crypto.hased.password = U7Epd/1HVt76n5o0NAXS9f1ArmdigKFEJYgRfWeBjIA= +Global.crypto.password.algorithm = SHA-256 + +#System URL +#\uc0ac\uc774\ubc84\uc678\uc0ac\uc815\ubcf4\uc2dc\uc2a4\ud15c(\uad6c) +Url.FAICS.preSystem = http://10.29.9.40:8500/login.aspx + +#\uad6d\uc81c\ud574\uc591\uc815\ubcf4\uc2dc\uc2a4\ud15c(\uc2e4\uc11c\ubc84) +Url.IMIS.loginProc = http://10.29.16.122 + +#\uad6d\uc81c\ud574\uc591\uc815\ubcf4\uc2dc\uc2a4\ud15c(\ud14c\uc2a4\ud2b8) +#Url.IMIS.loginProc = http://192.168.10.115:8888/logic_login.php + +#\uad6d\ubbfc\uc548\uc804\ucc98 +Url.MPSS = http://www.mpss.go.kr/ + + +#\uc815\uc801 \uc18c\uc2a4 \ubc84\uc804 +StaticFile.version=180102 diff --git a/src/main/resources/spring/context-common.xml b/src/main/resources/spring/context-common.xml new file mode 100644 index 0000000..5947dd2 --- /dev/null +++ b/src/main/resources/spring/context-common.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + classpath:message/message-common + classpath:property/globals + + classpath:/egovframework/rte/fdl/property/messages/properties + classpath:/egovframework/rte/fdl/idgnr/messages/idgnr + + + + 60 + + + + + + + + + + + + + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/context-datasource.xml b/src/main/resources/spring/context-datasource.xml new file mode 100644 index 0000000..009b476 --- /dev/null +++ b/src/main/resources/spring/context-datasource.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/context-idgen.xml b/src/main/resources/spring/context-idgen.xml new file mode 100644 index 0000000..0dae2bf --- /dev/null +++ b/src/main/resources/spring/context-idgen.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/context-mapper.xml b/src/main/resources/spring/context-mapper.xml new file mode 100644 index 0000000..c9769bb --- /dev/null +++ b/src/main/resources/spring/context-mapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + classpath:property/globals.properties + + + + \ No newline at end of file diff --git a/src/main/resources/spring/context-properties.xml b/src/main/resources/spring/context-properties.xml new file mode 100644 index 0000000..c9158fb --- /dev/null +++ b/src/main/resources/spring/context-properties.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/context-security.xml b/src/main/resources/spring/context-security.xml new file mode 100644 index 0000000..5e2cc65 --- /dev/null +++ b/src/main/resources/spring/context-security.xml @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/spring/context-transaction.xml b/src/main/resources/spring/context-transaction.xml new file mode 100644 index 0000000..2a72d13 --- /dev/null +++ b/src/main/resources/spring/context-transaction.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/context-validator.xml b/src/main/resources/spring/context-validator.xml new file mode 100644 index 0000000..5f83b9c --- /dev/null +++ b/src/main/resources/spring/context-validator.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + /WEB-INF/config/validator/validator-rules.xml + /WEB-INF/config/validator/validator.xml + + + + + diff --git a/src/main/resources/sqlmapper/mappers/arrest/arrest.xml b/src/main/resources/sqlmapper/mappers/arrest/arrest.xml new file mode 100644 index 0000000..42bc550 --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/arrest/arrest.xml @@ -0,0 +1,1724 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/mappers/board/board.xml b/src/main/resources/sqlmapper/mappers/board/board.xml new file mode 100644 index 0000000..71dc49e --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/board/board.xml @@ -0,0 +1,269 @@ + + + + + + + + + + + + + + INSERT INTO + H3_BD_${id}_LIST ( + BD_MB_ID, BD_CATEGORY, BD_NAME, BD_GROUP_SEQ, + BD_CONTENT, BD_SUBJECT, BD_PARENT_SEQ, BD_PREV_SEQ, BD_NEXT_SEQ, BD_STEP, + BD_DEPTH, BD_REGDATE, BD_HIT, BD_RECOMMEND, BD_IP, BD_NOTICE, + BD_HTML, BD_NUM1, BD_NUM2, BD_DATA1, BD_DATA2, BD_PLACE1, BD_POSITION + ) VALUES ( + #{userId}, #{category}, #{userName}, #{groupSeq}, + #{content}, #{subject}, #{parentSeq}, #{prevSeq}, #{nextSeq}, #{step}, + #{depth}, SYSDATE, ${hit}, 0, #{ip,jdbcType=VARCHAR}, #{notice}, + 1, 0, 0, #{data1,jdbcType=VARCHAR}, #{data2,jdbcType=VARCHAR}, #{place1,jdbcType=VARCHAR}, #{position,jdbcType=VARCHAR} + ) + + SELECT H3_BD_${id}_LIST_SEQ.CURRVAL FROM DUAL + + + + + + + + + + + + #{step} + ]]> + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/mappers/board/boardComment.xml b/src/main/resources/sqlmapper/mappers/board/boardComment.xml new file mode 100644 index 0000000..a8286b3 --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/board/boardComment.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + INSERT INTO + H3_BD_${id}_COMT ( + BC_SEQ, BC_NAME, BC_CONTENT, BC_REGDATE, BC_BD_SEQ, BC_IP, BC_MB_ID + ) VALUES ( + H3_BD_${id}_COMT_SEQ.NEXTVAL, #{userName}, #{content}, SYSDATE, #{parentSeq}, '10.123.141.123', #{userId} + ) + + SELECT H3_BD_${id}_COMT_SEQ.CURRVAL FROM DUAL + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/mappers/board/boardFile.xml b/src/main/resources/sqlmapper/mappers/board/boardFile.xml new file mode 100644 index 0000000..7d5e313 --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/board/boardFile.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/mappers/cmmn/code.xml b/src/main/resources/sqlmapper/mappers/cmmn/code.xml new file mode 100644 index 0000000..2b26d6b --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/cmmn/code.xml @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #{codenmYak}, + + + ' ', + + + + + + + + CODENM = #{codenm}, + + CODENM_YAK = #{codenmYak}, + + CODE_USE_YN = #{codeUseYN} + + + AND CODE2 = #{code2} + + + + + + + diff --git a/src/main/resources/sqlmapper/mappers/cmmn/log.xml b/src/main/resources/sqlmapper/mappers/cmmn/log.xml new file mode 100644 index 0000000..5c88a5d --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/cmmn/log.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/mappers/cmmn/menu.xml b/src/main/resources/sqlmapper/mappers/cmmn/menu.xml new file mode 100644 index 0000000..21bfd8a --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/cmmn/menu.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/mappers/cmmn/test.xml b/src/main/resources/sqlmapper/mappers/cmmn/test.xml new file mode 100644 index 0000000..75b16a4 --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/cmmn/test.xml @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/src/main/resources/sqlmapper/mappers/fa/edu.xml b/src/main/resources/sqlmapper/mappers/fa/edu.xml new file mode 100644 index 0000000..27a17d9 --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/fa/edu.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/mappers/fa/equip.xml b/src/main/resources/sqlmapper/mappers/fa/equip.xml new file mode 100644 index 0000000..b236b5b --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/fa/equip.xml @@ -0,0 +1,462 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO + H3_EQUIP_USE_STATE ( + EU_POLICE, EU_YEAR, EU_QUATER, + EU_CODE, EU_CNT, EU_DETAIL, + EU_STATE, EU_CHECK, EU_REGDATE, EU_WRITER + ) VALUES ( + #{police}, #{year}, #{quater}, + #{code}, #{cnt}, #{detail}, + #{state}, #{check}, SYSDATE, #{writer} + ) + + + + UPDATE + H3_EQUIP_USE_STATE + SET + EU_CNT = #{cnt}, EU_DETAIL = #{detail}, + EU_STATE = #{state}, EU_CHECK = #{check} + WHERE + EU_POLICE = #{police} AND EU_YEAR = #{year} AND + EU_QUATER = #{quater} AND EU_CODE = #{code} + + + + + + + + + + + + + + SELECT TEQUIPMENT_SERNO_SEQ.CURRVAL FROM DUAL + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/mappers/fa/equipApprove.xml b/src/main/resources/sqlmapper/mappers/fa/equipApprove.xml new file mode 100644 index 0000000..f92814f --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/fa/equipApprove.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/mappers/inter/international.xml b/src/main/resources/sqlmapper/mappers/inter/international.xml new file mode 100644 index 0000000..f32d71c --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/inter/international.xml @@ -0,0 +1,2192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/mappers/member/member.xml b/src/main/resources/sqlmapper/mappers/member/member.xml new file mode 100644 index 0000000..849af6f --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/member/member.xml @@ -0,0 +1,1202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE + + + TAGENT A + + + TUSER A + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/mappers/member/member.xml_QubeOne b/src/main/resources/sqlmapper/mappers/member/member.xml_QubeOne new file mode 100644 index 0000000..f640f35 --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/member/member.xml_QubeOne @@ -0,0 +1,1200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE + + + TAGENT A + + + TUSER A + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/mappers/member/memberAuth.xml b/src/main/resources/sqlmapper/mappers/member/memberAuth.xml new file mode 100644 index 0000000..ef4e13b --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/member/memberAuth.xml @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/mappers/report/report.xml b/src/main/resources/sqlmapper/mappers/report/report.xml new file mode 100644 index 0000000..5ffa54a --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/report/report.xml @@ -0,0 +1,1318 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT RPT_INFO_IN_SEQ_SEQ.CURRVAL FROM DUAL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/sqlmapper/mappers/report/reportFile.xml b/src/main/resources/sqlmapper/mappers/report/reportFile.xml new file mode 100644 index 0000000..03e969f --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/report/reportFile.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + SELECT RPT_FILE_STORAGE_FS_SEQ_SEQ.CURRVAL FROM DUAL + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/sqlmapper/mappers/report/reportGoal.xml b/src/main/resources/sqlmapper/mappers/report/reportGoal.xml new file mode 100644 index 0000000..d8ddd87 --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/report/reportGoal.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO + RPT_AGENT_GOAL + VALUES + (#{goYear}, #{goMonth}, #{goPlace1}, #{goId}, #{goGoal1}, #{goGoal2}, #{goGoal3}, #{goGoal4}, #{goTotal}) + + + + UPDATE + RPT_AGENT_GOAL + SET + GO_YEAR = #{goYear}, + GO_MONTH = #{goMonth}, + GO_GOAL1 = #{goGoal1}, + GO_GOAL2 = #{goGoal2}, + GO_GOAL3 = #{goGoal3}, + GO_GOAL4 = #{goGoal4}, + GO_TOTAL = #{goTotal} + WHERE + GO_ID = #{goId} + + + + + + \ No newline at end of file diff --git a/src/main/resources/sqlmapper/mappers/report/reportJudge.xml b/src/main/resources/sqlmapper/mappers/report/reportJudge.xml new file mode 100644 index 0000000..51c68de --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/report/reportJudge.xml @@ -0,0 +1,376 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT RPT_JUDGE_HISTORY_JU_SEQ_SEQ.CURRVAL FROM DUAL + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/sqlmapper/mappers/sec/security.xml b/src/main/resources/sqlmapper/mappers/sec/security.xml new file mode 100644 index 0000000..a40d9fb --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/sec/security.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + UPDATE + + + TAGENT + + + TUSER + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/mappers/susa/susa.xml b/src/main/resources/sqlmapper/mappers/susa/susa.xml new file mode 100644 index 0000000..cfb1840 --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/susa/susa.xml @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO H3_SUSA_LIST + ( + SS_TYPE, SS_AGENCY, SS_CHARGE_NM, SS_SDATE, SS_REGDATE, + SS_CONTENTS, SS_PLACE1, SS_EDATE, SS_TITLE, SS_RESULT, + SS_WRITER + ) + VALUES + ( + #{type}, #{agency}, #{chargeNm}, #{sdate}, SYSDATE, + #{contents}, #{place1}, #{edate}, #{title}, #{result}, + #{writer} + ) + + SELECT H3_SUSA_LIST_SS_IDX_SEQ.CURRVAL FROM DUAL + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/mappers/susa/susaFile.xml b/src/main/resources/sqlmapper/mappers/susa/susaFile.xml new file mode 100644 index 0000000..81aa147 --- /dev/null +++ b/src/main/resources/sqlmapper/mappers/susa/susaFile.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/sql-mapper-config.xml b/src/main/resources/sqlmapper/sql-mapper-config.xml new file mode 100644 index 0000000..0b610b4 --- /dev/null +++ b/src/main/resources/sqlmapper/sql-mapper-config.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/META-INF/MANIFEST.MF b/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 0000000..254272e --- /dev/null +++ b/src/main/webapp/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/src/main/webapp/WEB-INF/classes/log4j.xml b/src/main/webapp/WEB-INF/classes/log4j.xml new file mode 100644 index 0000000..1f822ee --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/log4j.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/config/springmvc/dispatcher-servlet.xml b/src/main/webapp/WEB-INF/config/springmvc/dispatcher-servlet.xml new file mode 100644 index 0000000..91828d8 --- /dev/null +++ b/src/main/webapp/WEB-INF/config/springmvc/dispatcher-servlet.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + /error/dataAccessFailure + /error/transactionFailure + /error/bizError + + + + + + + + + + + + + + + + + + + + + + + + + /WEB-INF/config/tiles/*.xml + + + + + + + + + + + + + + + + + + + + + + text/html;charset=UTF-8 + application/json;charset=UTF-8 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/config/tiles/default-layout.xml b/src/main/webapp/WEB-INF/config/tiles/default-layout.xml new file mode 100644 index 0000000..1a20f4b --- /dev/null +++ b/src/main/webapp/WEB-INF/config/tiles/default-layout.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/config/validator/validator-rules.xml b/src/main/webapp/WEB-INF/config/validator/validator-rules.xml new file mode 100644 index 0000000..f4b80cb --- /dev/null +++ b/src/main/webapp/WEB-INF/config/validator/validator-rules.xml @@ -0,0 +1,1343 @@ + + + + + + + + + + = 0) { + value = field.options[si].value; + } + } else if (field.type == 'radio' || field.type == 'checkbox') { + if (field.checked) { + value = field.value; + } + } else { + value = field.value; + } + if (trim(value).length == 0) { + if ((i == 0) && (field.type != 'hidden')) { + focusField = field; + } + fields[i++] = oRequired[x][1]; + isValid = false; + } + } else if (field.type == "select-multiple") { + var numOptions = field.options.length; + lastSelected=-1; + for(loop=numOptions-1;loop>=0;loop--) { + if(field.options[loop].selected) { + lastSelected = loop; + value = field.options[loop].value; + break; + } + } + if(lastSelected < 0 || trim(value).length == 0) { + if(i == 0) { + focusField = field; + } + fields[i++] = oRequired[x][1]; + isValid=false; + } + } else if ((field.length > 0) && (field[0].type == 'radio' || field[0].type == 'checkbox')) { + isChecked=-1; + for (loop=0;loop < field.length;loop++) { + if (field[loop].checked) { + isChecked=loop; + break; // only one needs to be checked + } + } + if (isChecked < 0) { + if (i == 0) { + focusField = field[0]; + } + fields[i++] = oRequired[x][1]; + isValid=false; + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return isValid; + } + + // Trim whitespace from left and right sides of s. + function trim(s) { + return s.replace( /^\s*/, "" ).replace( /\s*$/, "" ); + } + + ]]> + + + + + + + + + + + + 0) && (field.value.length < iMin)) { + if (i == 0) { + focusField = field; + } + fields[i++] = oMinLength[x][1]; + isValid = false; + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return isValid; + }]]> + + + + + + + + iMax) { + if (i == 0) { + focusField = field; + } + fields[i++] = oMaxLength[x][1]; + isValid = false; + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return isValid; + }]]> + + + + + + + + 0)) { + + if (!matchPattern(field.value, oMasked[x][2]("mask"))) { + if (i == 0) { + focusField = field; + } + fields[i++] = oMasked[x][1]; + isValid = false; + } + } + } + + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return isValid; + } + + function matchPattern(value, mask) { + return mask.exec(value); + }]]> + + + + + + + + = 0) { + value = field.options[si].value; + } + } else { + value = field.value; + } + + if (value.length > 0) { + if (!isAllDigits(value)) { + bValid = false; + if (i == 0) { + focusField = field; + } + fields[i++] = oByte[x][1]; + + } else { + + var iValue = parseInt(value); + if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) { + if (i == 0) { + focusField = field; + } + fields[i++] = oByte[x][1]; + bValid = false; + } + } + } + + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + }]]> + + + + + + + + = 0) { + value = field.options[si].value; + } + } else { + value = field.value; + } + + if (value.length > 0) { + if (!isAllDigits(value)) { + bValid = false; + if (i == 0) { + focusField = field; + } + fields[i++] = oShort[x][1]; + + } else { + + var iValue = parseInt(value); + if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) { + if (i == 0) { + focusField = field; + } + fields[i++] = oShort[x][1]; + bValid = false; + } + } + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + }]]> + + + + + + + + = 0) { + value = field.options[si].value; + } + } else { + value = field.value; + } + + if (value.length > 0) { + + if (!isAllDigits(value)) { + bValid = false; + if (i == 0) { + focusField = field; + } + fields[i++] = oInteger[x][1]; + + } else { + var iValue = parseInt(value); + if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) { + if (i == 0) { + focusField = field; + } + fields[i++] = oInteger[x][1]; + bValid = false; + } + } + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + } + + function isAllDigits(argvalue) { + argvalue = argvalue.toString(); + var validChars = "0123456789"; + var startFrom = 0; + if (argvalue.substring(0, 2) == "0x") { + validChars = "0123456789abcdefABCDEF"; + startFrom = 2; + } else if (argvalue.charAt(0) == "0") { + validChars = "01234567"; + startFrom = 1; + } else if (argvalue.charAt(0) == "-") { + startFrom = 1; + } + + for (var n = startFrom; n < argvalue.length; n++) { + if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false; + } + return true; + }]]> + + + + + + + + + + + = 0) { + value = field.options[si].value; + } + } else { + value = field.value; + } + + if (value.length > 0) { + // remove '.' before checking digits + var tempArray = value.split('.'); + var joinedString= tempArray.join(''); + + if (!isAllDigits(joinedString)) { + bValid = false; + if (i == 0) { + focusField = field; + } + fields[i++] = oFloat[x][1]; + + } else { + var iValue = parseFloat(value); + if (isNaN(iValue)) { + if (i == 0) { + focusField = field; + } + fields[i++] = oFloat[x][1]; + bValid = false; + } + } + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + }]]> + + + + + + + + + + + 0) && + (datePattern.length > 0)) { + var MONTH = "MM"; + var DAY = "dd"; + var YEAR = "yyyy"; + var orderMonth = datePattern.indexOf(MONTH); + var orderDay = datePattern.indexOf(DAY); + var orderYear = datePattern.indexOf(YEAR); + if ((orderDay < orderYear && orderDay > orderMonth)) { + var iDelim1 = orderMonth + MONTH.length; + var iDelim2 = orderDay + DAY.length; + var delim1 = datePattern.substring(iDelim1, iDelim1 + 1); + var delim2 = datePattern.substring(iDelim2, iDelim2 + 1); + if (iDelim1 == orderDay && iDelim2 == orderYear) { + dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$"); + } else if (iDelim1 == orderDay) { + dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$"); + } else if (iDelim2 == orderYear) { + dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$"); + } else { + dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$"); + } + var matched = dateRegexp.exec(value); + if(matched != null) { + if (!isValidDate(matched[2], matched[1], matched[3])) { + if (i == 0) { + focusField = form[oDate[x][0]]; + } + fields[i++] = oDate[x][1]; + bValid = false; + } + } else { + if (i == 0) { + focusField = form[oDate[x][0]]; + } + fields[i++] = oDate[x][1]; + bValid = false; + } + } else if ((orderMonth < orderYear && orderMonth > orderDay)) { + var iDelim1 = orderDay + DAY.length; + var iDelim2 = orderMonth + MONTH.length; + var delim1 = datePattern.substring(iDelim1, iDelim1 + 1); + var delim2 = datePattern.substring(iDelim2, iDelim2 + 1); + if (iDelim1 == orderMonth && iDelim2 == orderYear) { + dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$"); + } else if (iDelim1 == orderMonth) { + dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$"); + } else if (iDelim2 == orderYear) { + dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$"); + } else { + dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$"); + } + var matched = dateRegexp.exec(value); + if(matched != null) { + if (!isValidDate(matched[1], matched[2], matched[3])) { + if (i == 0) { + focusField = form[oDate[x][0]]; + } + fields[i++] = oDate[x][1]; + bValid = false; + } + } else { + if (i == 0) { + focusField = form[oDate[x][0]]; + } + fields[i++] = oDate[x][1]; + bValid = false; + } + } else if ((orderMonth > orderYear && orderMonth < orderDay)) { + var iDelim1 = orderYear + YEAR.length; + var iDelim2 = orderMonth + MONTH.length; + var delim1 = datePattern.substring(iDelim1, iDelim1 + 1); + var delim2 = datePattern.substring(iDelim2, iDelim2 + 1); + if (iDelim1 == orderMonth && iDelim2 == orderDay) { + dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$"); + } else if (iDelim1 == orderMonth) { + dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$"); + } else if (iDelim2 == orderDay) { + dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$"); + } else { + dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$"); + } + var matched = dateRegexp.exec(value); + if(matched != null) { + if (!isValidDate(matched[3], matched[2], matched[1])) { + if (i == 0) { + focusField = form[oDate[x][0]]; + } + fields[i++] = oDate[x][1]; + bValid = false; + } + } else { + if (i == 0) { + focusField = form[oDate[x][0]]; + } + fields[i++] = oDate[x][1]; + bValid = false; + } + } else { + if (i == 0) { + focusField = form[oDate[x][0]]; + } + fields[i++] = oDate[x][1]; + bValid = false; + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + } + + function isValidDate(day, month, year) { + if (month < 1 || month > 12) { + return false; + } + if (day < 1 || day > 31) { + return false; + } + if ((month == 4 || month == 6 || month == 9 || month == 11) && + (day == 31)) { + return false; + } + if (month == 2) { + var leap = (year % 4 == 0 && + (year % 100 != 0 || year % 400 == 0)); + if (day>29 || (day == 29 && !leap)) { + return false; + } + } + return true; + }]]> + + + + + + + + + + + + + + + 0)) { + + var iMin = parseInt(oRange[x][2]("min")); + var iMax = parseInt(oRange[x][2]("max")); + var iValue = parseInt(field.value); + if (!(iValue >= iMin && iValue <= iMax)) { + if (i == 0) { + focusField = field; + } + fields[i++] = oRange[x][1]; + isValid = false; + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return isValid; + }]]> + + + + + + + 0)) { + + var fMin = parseFloat(oRange[x][2]("min")); + var fMax = parseFloat(oRange[x][2]("max")); + var fValue = parseFloat(field.value); + if (!(fValue >= fMin && fValue <= fMax)) { + if (i == 0) { + focusField = field; + } + fields[i++] = oRange[x][1]; + isValid = false; + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return isValid; + }]]> + + + + + + + 0)) { + if (!luhnCheck(form[oCreditCard[x][0]].value)) { + if (i == 0) { + focusField = form[oCreditCard[x][0]]; + } + fields[i++] = oCreditCard[x][1]; + bValid = false; + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + } + + /** + * Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl + */ + function luhnCheck(cardNumber) { + if (isLuhnNum(cardNumber)) { + var no_digit = cardNumber.length; + var oddoeven = no_digit & 1; + var sum = 0; + for (var count = 0; count < no_digit; count++) { + var digit = parseInt(cardNumber.charAt(count)); + if (!((count & 1) ^ oddoeven)) { + digit *= 2; + if (digit > 9) digit -= 9; + }; + sum += digit; + }; + if (sum == 0) return false; + if (sum % 10 == 0) return true; + }; + return false; + } + + function isLuhnNum(argvalue) { + argvalue = argvalue.toString(); + if (argvalue.length == 0) { + return false; + } + for (var n = 0; n < argvalue.length; n++) { + if ((argvalue.substring(n, n+1) < "0") || + (argvalue.substring(n,n+1) > "9")) { + return false; + } + } + return true; + }]]> + + + + + + + + 0)) { + if (!checkEmail(form[oEmail[x][0]].value)) { + if (i == 0) { + focusField = form[oEmail[x][0]]; + } + fields[i++] = oEmail[x][1]; + bValid = false; + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + } + + /** + * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com), + * http://javascript.internet.com + */ + function checkEmail(emailStr) { + if (emailStr.length == 0) { + return true; + } + var emailPat=/^(.+)@(.+)$/; + var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"; + var validChars="\[^\\s" + specialChars + "\]"; + var quotedUser="(\"[^\"]*\")"; + var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/; + var atom=validChars + '+'; + var word="(" + atom + "|" + quotedUser + ")"; + var userPat=new RegExp("^" + word + "(\\." + word + ")*$"); + var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$"); + var matchArray=emailStr.match(emailPat); + if (matchArray == null) { + return false; + } + var user=matchArray[1]; + var domain=matchArray[2]; + if (user.match(userPat) == null) { + return false; + } + var IPArray = domain.match(ipDomainPat); + if (IPArray != null) { + for (var i = 1; i <= 4; i++) { + if (IPArray[i] > 255) { + return false; + } + } + return true; + } + var domainArray=domain.match(domainPat); + if (domainArray == null) { + return false; + } + var atomPat=new RegExp(atom,"g"); + var domArr=domain.match(atomPat); + var len=domArr.length; + if ((domArr[domArr.length-1].length < 2) || + (domArr[domArr.length-1].length > 3)) { + return false; + } + if (len < 2) { + return false; + } + return true; + }]]> + + + + + + + 0) { + alert(fields.join('\n')); + } + return bValid; + } + + /** + * Reference: JS Guide + * http://jsguide.net/ver2/articles/frame.php?artnum=002 + */ + function checkIhIdNum(ihidnum){ + + fmt = /^\d{6}[1234]\d{6}$/; + if(!fmt.test(ihidnum)){ + return false; + } + + birthYear = (ihidnum.charAt(7) <= "2") ? "19" : "20"; + birthYear += ihidnum.substr(0, 2); + birthMonth = ihidnum.substr(2, 2) - 1; + birthDate = ihidnum.substr(4, 2); + birth = new Date(birthYear, birthMonth, birthDate); + + if( birth.getYear() % 100 != ihidnum.substr(0, 2) || + birth.getMonth() != birthMonth || + birth.getDate() != birthDate) { + return false; + } + + var arrDivide = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]; + var checkdigit = 0; + for(var i=0;i + + + + 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + } + + function checkKorean(koreanStr){ + for(var i=0;i + + + + + + + + 0)) { + + var regexp = ""; + var extStr = oFileExt[x][2]("ext"); + if (extStr) { + var validExts = extStr.split(","); + regexp = "\.("; + for (idx in validExts) { + if (idx > 0) { + regexp += "|"; + } + regexp += validExts[idx]; + } + regexp += ")$"; + } + + if (!matchPatternForFileExt(field.value, regexp)) { + if (i == 0) { + focusField = field; + } + fields[i++] = oFileExt[x][1]; + isValid = false; + } + } + } + + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return isValid; + } + + function matchPatternForFileExt(value, regexpStr) { + var regexp; + if (regexpStr != null) { + regexp = new RegExp(regexpStr, "i"); + return regexp.exec(value); + } + return false; + }]]> + + + + + + + 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return isValid; + } + function checkStrRegex(value, regex){ + if (regex != null) { + var regExp = new RegExp(regex); + return regExp.test(value); + } + return true; + }]]> + + + + + + diff --git a/src/main/webapp/WEB-INF/config/validator/validator.xml b/src/main/webapp/WEB-INF/config/validator/validator.xml new file mode 100644 index 0000000..0e44892 --- /dev/null +++ b/src/main/webapp/WEB-INF/config/validator/validator.xml @@ -0,0 +1,557 @@ + + + + + + + validFileExtFormat + bmp,gif,jpg,jpeg,png,xls,xlsx,hwp,pdf + + + validImgExtFormat + bmp,gif,jpg,jpeg,png + + + idCheckRegex + ^[a-zA-Z]{1}[a-zA-Z0-9_]{4,11}$ + + + telRegex + ^\d{2,3}-\d{3,4}-\d{4}$ + + + yearRegex + ^\d{4}$ + + + + dateRegex + ^(19[5-9][0-9]|2\d{3})-(0[0-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$ + + + validFileExtFormatDetail + bmp,gif,jpg,jpeg,png,xls,xlsx,hwp,pdf,txt + + + + +
+ + + + + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + +
+
+ + +
+ + + + + + + + + + + + mask + ${dateRegex} + + + + + + + mask + ${dateRegex} + + + + + + + mask + ${dateRegex} + + +
+
+ + +
+ + + + + + ext + jpg,gif,bmp + + + + + + + + ext + txt,hwp,xls,pdf + + +
+
+ + + +
+ + + + + + + + mask + ${telRegex} + + + + + + + mask + ${telRegex} + + + + + + + mask + ${yearRegex} + + +
+
+ + + +
+ + + + + + + + mask + ${telRegex} + + + + + + + + + + + ext + ${validImgExtFormat} + + + + + + + + ext + ${validFileExtFormat} + + + + + + + + ext + ${validFileExtFormat} + + + + + + + + ext + ${validFileExtFormat} + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + ext + ${validFileExtFormatDetail} + + + + + + + + ext + ${validFileExtFormatDetail} + + + + + + + + ext + ${validFileExtFormatDetail} + + + + + + + + ext + ${validFileExtFormatDetail} + + + + + + + + ext + ${validFileExtFormatDetail} + + +
+
+ + + +
+ + + + + + + + mask + ${telRegex} + + + + + + + + + + + + + maxlength + 1 + + + + + + + + ext + ${validImgExtFormat} + + + + + + + mask + ${dateRegex} + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + + + + +
+
+
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/config/validator/validator.xml.mine b/src/main/webapp/WEB-INF/config/validator/validator.xml.mine new file mode 100644 index 0000000..f6a7910 --- /dev/null +++ b/src/main/webapp/WEB-INF/config/validator/validator.xml.mine @@ -0,0 +1,644 @@ + + + + + + + validFileExtFormat + bmp,gif,jpg,jpeg,png,xls,xlsx,hwp,pdf + + + validImgExtFormat + bmp,gif,jpg,jpeg,png + + + idCheckRegex + ^[a-zA-Z]{1}[a-zA-Z0-9_]{4,11}$ + + + telRegex + ^\d{2,3}-\d{3,4}-\d{4}$ + + + yearRegex + ^\d{4}$ + + + + dateRegex + ^(19[5-9][0-9]|2\d{3})-(0[0-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$ + + + validFileExtFormatDetail + bmp,gif,jpg,jpeg,png,xls,xlsx,hwp,pdf,txt + + + + +
+ + + + + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + +
+
+ + +
+ + + + + + + + + + + + + + mask + ${dateRegex} + + + + + + + mask + ${dateRegex} + + + + + + + mask + ${dateRegex} + + + + + + + + + + + + ext + ${validImgExtFormat} + + + + + + + ext + ${validImgExtFormat} + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + ext + ${validImgExtFormat} + + +
+
+ + + +
+ + + + + + ext + jpg,gif,bmp + + + + + + + + ext + txt,hwp,xls,pdf + + +
+
+ + + +
+ + + + + + + + mask + ${telRegex} + + + + + + + mask + ${telRegex} + + + + + + + mask + ${yearRegex} + + +
+
+ + + +
+ + + + + + + + mask + ${telRegex} + + + + + + + + + + + ext + ${validImgExtFormat} + + + + + + + + ext + ${validFileExtFormat} + + + + + + + + ext + ${validFileExtFormat} + + + + + + + + ext + ${validFileExtFormat} + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + ext + ${validFileExtFormatDetail} + + + + + + + + ext + ${validFileExtFormatDetail} + + + + + + + + ext + ${validFileExtFormatDetail} + + + + + + + + ext + ${validFileExtFormatDetail} + + + + + + + + ext + ${validFileExtFormatDetail} + + +
+
+ + + +
+ + + + + + + + mask + ${telRegex} + + + + + + + + + + + + + maxlength + 1 + + + + + + + + ext + ${validImgExtFormat} + + + + + + + mask + ${dateRegex} + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + + + + +
+
+ +
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/config/validator/validator.xml.r27 b/src/main/webapp/WEB-INF/config/validator/validator.xml.r27 new file mode 100644 index 0000000..b687b0e --- /dev/null +++ b/src/main/webapp/WEB-INF/config/validator/validator.xml.r27 @@ -0,0 +1,619 @@ + + + + + + + validFileExtFormat + bmp,gif,jpg,jpeg,png,xls,xlsx,hwp,pdf + + + validImgExtFormat + bmp,gif,jpg,jpeg,png + + + idCheckRegex + ^[a-zA-Z]{1}[a-zA-Z0-9_]{4,11}$ + + + telRegex + ^\d{2,3}-\d{3,4}-\d{4}$ + + + yearRegex + ^\d{4}$ + + + + dateRegex + ^(19[5-9][0-9]|2\d{3})-(0[0-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$ + + + validFileExtFormatDetail + bmp,gif,jpg,jpeg,png,xls,xlsx,hwp,pdf,txt + + + + +
+ + + + + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + ext + ${validImgExtFormat} + + + + + + + ext + ${validImgExtFormat} + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + ext + ${validImgExtFormat} + + +
+
+ + + +
+ + + + + + ext + jpg,gif,bmp + + + + + + + + ext + txt,hwp,xls,pdf + + +
+
+ + + +
+ + + + + + + + mask + ${telRegex} + + + + + + + mask + ${telRegex} + + + + + + + mask + ${yearRegex} + + +
+
+ + + +
+ + + + + + + + mask + ${telRegex} + + + + + + + + + + + ext + ${validImgExtFormat} + + + + + + + + ext + ${validFileExtFormat} + + + + + + + + ext + ${validFileExtFormat} + + + + + + + + ext + ${validFileExtFormat} + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + ext + ${validFileExtFormatDetail} + + + + + + + + ext + ${validFileExtFormatDetail} + + + + + + + + ext + ${validFileExtFormatDetail} + + + + + + + + ext + ${validFileExtFormatDetail} + + + + + + + + ext + ${validFileExtFormatDetail} + + +
+
+ + + +
+ + + + + + + + mask + ${telRegex} + + + + + + + + + + + + + maxlength + 1 + + + + + + + + ext + ${validImgExtFormat} + + + + + + + mask + ${dateRegex} + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + + + + +
+
+ +
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/config/validator/validator.xml.r43 b/src/main/webapp/WEB-INF/config/validator/validator.xml.r43 new file mode 100644 index 0000000..bfc6543 --- /dev/null +++ b/src/main/webapp/WEB-INF/config/validator/validator.xml.r43 @@ -0,0 +1,643 @@ + + + + + + + validFileExtFormat + bmp,gif,jpg,jpeg,png,xls,xlsx,hwp,pdf + + + validImgExtFormat + bmp,gif,jpg,jpeg,png + + + idCheckRegex + ^[a-zA-Z]{1}[a-zA-Z0-9_]{4,11}$ + + + telRegex + ^\d{2,3}-\d{3,4}-\d{4}$ + + + yearRegex + ^\d{4}$ + + + + dateRegex + ^(19[5-9][0-9]|2\d{3})-(0[0-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$ + + + validFileExtFormatDetail + bmp,gif,jpg,jpeg,png,xls,xlsx,hwp,pdf,txt + + + + +
+ + + + + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + + + + + + ext + ${validFileExtFormat} + + +
+
+ + +
+ + + + + + + + + + + + + + mask + ${dateRegex} + + + + + + + mask + ${dateRegex} + + + + + + + mask + ${dateRegex} + + + + + + + + + + + ext + ${validImgExtFormat} + + + + + + + ext + ${validImgExtFormat} + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + ext + ${validImgExtFormat} + + +
+
+ + + +
+ + + + + + ext + jpg,gif,bmp + + + + + + + + ext + txt,hwp,xls,pdf + + +
+
+ + + +
+ + + + + + + + mask + ${telRegex} + + + + + + + mask + ${telRegex} + + + + + + + mask + ${yearRegex} + + +
+
+ + + +
+ + + + + + + + mask + ${telRegex} + + + + + + + + + + + ext + ${validImgExtFormat} + + + + + + + + ext + ${validFileExtFormat} + + + + + + + + ext + ${validFileExtFormat} + + + + + + + + ext + ${validFileExtFormat} + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + ext + ${validFileExtFormatDetail} + + + + + + + + ext + ${validFileExtFormatDetail} + + + + + + + + ext + ${validFileExtFormatDetail} + + + + + + + + ext + ${validFileExtFormatDetail} + + + + + + + + ext + ${validFileExtFormatDetail} + + +
+
+ + + +
+ + + + + + + + mask + ${telRegex} + + + + + + + + + + + + + maxlength + 1 + + + + + + + + ext + ${validImgExtFormat} + + + + + + + mask + ${dateRegex} + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + + + + +
+
+ +
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/admin/cmmnMemberList.jsp b/src/main/webapp/WEB-INF/jsp/admin/cmmnMemberList.jsp new file mode 100644 index 0000000..afdd6e3 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/admin/cmmnMemberList.jsp @@ -0,0 +1,277 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> + + +
+
    +
  • 소속  
  • + +
  • 이름  
  • +
  • +
  • + + + +
  • +
  • + + + +
  • +
+
+ + + +
+ + + +
+
+ +
    +
  • +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ "> + + + + + "> + + + + + "> + + + + + "> + + + +
+ + ', '', '');"> + + + + ', '');"> + +
+
+ +
+ +
+
+ +
+
+ + + + + + + + + + + + + +
+ + +
+
+
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/admin/codeManage.jsp b/src/main/webapp/WEB-INF/jsp/admin/codeManage.jsp new file mode 100644 index 0000000..e1deac0 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/admin/codeManage.jsp @@ -0,0 +1,398 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + +
+ +
+
+ icon + 대분류 코드 구분 + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ "> + + + + "> + + + + "> + + + + "> + + + + "> + + +
NEW + + +
${status.count} + ${item.code2} + + + + ${item.codenm} + + + + + + + + +
+
+ + + +
+
+
+ icon + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ "> + + + + "> + + + + + "> + + + + "> + + + + "> + + + + "> + + +
+
+
+ diff --git a/src/main/webapp/WEB-INF/jsp/admin/faMemberAdd.jsp b/src/main/webapp/WEB-INF/jsp/admin/faMemberAdd.jsp new file mode 100644 index 0000000..7d4f0d3 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/admin/faMemberAdd.jsp @@ -0,0 +1,522 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + <%-- 가족사항 삭제 이우현경위 요청(2021-04-20) + + + + + + --%> + + + + + + + + + + + + + <%-- 일반전화 삭제 이우현경위 요청(2021-04-20) + + + --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + +
+ style="color:#f00;"
> + + 아이디 ${status.errorMessage } + + + + + + + +
+ + +
비밀번호 확인 + + + + + + + + +
+
+ + + ${item.codenm} + + + + +
+ + + ${item.codenm} + + +
+ + + ${item.codenm} + + + + + + ${item.codenm} + + +
+ + + ${item.codenm} + + + + + + + + + + +
+ + + ${status.index} + + + + + + ${status.index} + + + 개월 + + + + ${status.index} + + + + + + ${status.index} + + + 개월 +
+ + + ${status.index} + + + + + + ${status.index} + + + 개월 + + + + ${status.index} + + + + + + ${status.index} + + + 개월 +
+ + + + + +
+ + + +
기존 이미지를 삭제합니다. +
+
+ + + +
기존 이미지를 삭제합니다. +
+
+ * 비밀번호는 이전비밀번호 확인 없이 그대로 수정됩니다.
+ * 사진 수정 시에는 삭제를 꼭 체크하고 등록해 주셔야 이전 이미지가 삭제 됩니다.
+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/admin/faMemberAuth.jsp b/src/main/webapp/WEB-INF/jsp/admin/faMemberAuth.jsp new file mode 100644 index 0000000..28a6973 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/admin/faMemberAuth.jsp @@ -0,0 +1,402 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> + + + + + + + + +
+
    +
  • 소속  
  • + +
  • + + + +
  • +
+
+
+
+ +
+ * : + () + * : + () +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ "> + + + + + "> + + + + + "> + + + + + "> + + + + + "> + + + + + "> + + + +
');"> + " onclick="AuthCode.makeAuth(event, this);"/> + + checked value="" onclick="AuthCode.selectAuthSection('${result.userid}');"/>checked value="" onclick="AuthCode.selectAuthHead('${result.userid}');"/> + " onclick="AuthCode.makeRpt(event, this);"/> + +
+
+
+ +
+ + +
+
+
    +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
+
+
+
    +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
+
diff --git a/src/main/webapp/WEB-INF/jsp/admin/faMemberCmmnList.jsp b/src/main/webapp/WEB-INF/jsp/admin/faMemberCmmnList.jsp new file mode 100644 index 0000000..67e821b --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/admin/faMemberCmmnList.jsp @@ -0,0 +1,108 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ page import="kcg.faics.sec.LoginUserVO"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + +
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
사진이름
+ + <c:out value=" src="noImage.png"> + + + - + + + + + + + + +
+
+ + 조회된 요원이 없습니다. + +
+
+ + +
+ +
+
+
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/admin/faMemberCmmnList_copy.jsp b/src/main/webapp/WEB-INF/jsp/admin/faMemberCmmnList_copy.jsp new file mode 100644 index 0000000..1290c90 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/admin/faMemberCmmnList_copy.jsp @@ -0,0 +1,86 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ page import="kcg.faics.sec.LoginUserVO"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + +
+ +
+ + + + + + + +
+ + + + + + + + + + + +
+ +
+
+ + 조회된 요원이 없습니다. + +
+
+ + +
+ +
+
+
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/admin/faMemberInfo.jsp b/src/main/webapp/WEB-INF/jsp/admin/faMemberInfo.jsp new file mode 100644 index 0000000..6b4f702 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/admin/faMemberInfo.jsp @@ -0,0 +1,172 @@ +<%@page import="kcg.faics.sec.LoginUserVO"%> +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ <c:out value=" src="noImage.png"> + 성 명 + + () + 아이디
주 소
e-mail
담당업무 +
경비전화휴대전화
경찰임용일현계급임용일현부서배치일
소속소속2세부소속
직위직별근무형태 + 내근 + 외근 + 국제항만분실 +
계급최종학력전문분야
총 외사경력과거외사경력개월수사경력개월
정보경력 + 개월보안경력개월
요청사항
+
+<% + LoginUserVO userVO = (LoginUserVO) session.getAttribute("userVO"); +%> +
+ +
+
    + +
  • + +
  • +
    +
  • + +
  • +
  • + +
  • +
+
+
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/admin/faMemberList.jsp b/src/main/webapp/WEB-INF/jsp/admin/faMemberList.jsp new file mode 100644 index 0000000..a102413 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/admin/faMemberList.jsp @@ -0,0 +1,234 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ page import="kcg.faics.sec.LoginUserVO"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> + +<% + LoginUserVO userVO = (LoginUserVO) session.getAttribute("userVO"); +%> + +
+
    +
  • 소속  
  • + +
  • 이름  
  • +
  • +
  • + + + +
  • +
  • + + + +
  • +
+
+ + + +
+ + + +
+
+ +
    +
  • +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ "> + + + + + "> + + + + + "> + + + + + "> + + + + + "> + + + + + "> + + + + + "> + + + + + "> + + + + 수정
+ ')"> + 개월 + + + + + + + + + + + + 수정
+
+ +
+ +
+
+
+ +
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/admin/logStatistics.jsp b/src/main/webapp/WEB-INF/jsp/admin/logStatistics.jsp new file mode 100644 index 0000000..7af44f8 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/admin/logStatistics.jsp @@ -0,0 +1,173 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags" %> + + +
+
    +
  • 검색타입  
  • +
  • + 이용메뉴 현황 + 로그인 현황 +
  • +
+
    +
  • 기간  
  • +
  • + ~ +
  • +
  • 이름  
  • +
  • + +
  • +
  • + + + +
  • +
  • + + + +
  • +
+
+ + +
+ + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
() + + 로그인 + 로그아웃 + +
+ + + + +
()
+
+ +
+ +
+
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/admin/memberManage.jsp b/src/main/webapp/WEB-INF/jsp/admin/memberManage.jsp new file mode 100644 index 0000000..feb95be --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/admin/memberManage.jsp @@ -0,0 +1,304 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags" %> + + +
+
    +
  • 소속  
  • + +
  • 이름  
  • +
  • +
  • + 외사경찰 + 일반경찰 +
  • +
  • + + + +
  • +
  • + + + +
  • +
+
+ + + +
+ + +
+
+
+
+

비밀번호 초기화

+ + + + + + + + +
초기화 할 비밀번호 + +
+
+
    +
  • + +
  • +
  • + +
  • +
+
+
+
+
+ +
+
+ +
    +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ "> + + + + + "> + + + + + "> + + + + + "> + + + + + "> + + + +
+ + + [접속중] + + + - + + + + + + [초기화] + + + - + + + + + + + + + - + + +
+
+ +
+ +
+
diff --git a/src/main/webapp/WEB-INF/jsp/arrest/arrestAdd.jsp b/src/main/webapp/WEB-INF/jsp/arrest/arrestAdd.jsp new file mode 100644 index 0000000..164ca6d --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/arrest/arrestAdd.jsp @@ -0,0 +1,928 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + - + + . + + N + + - + + . + + E +
+ + +
+ + + + + + + + +
  +
+   + +
+
+ + + + + + + +
+ + + + " class="w-50 text_num" tabindex="30"/> kg + + " class="w-112 text_num" tabindex="31"/> +
+ + +
+
+ + <%-- + + + + --%> + + + + + + + + + + + + + + + + + + " class="w-74 text_num ml-24" tabindex="34"/> + +
+
+ + +
+
+
+ + + + + + + + + + +
+
+ + " class="w-112 text_num" tabindex="37"/> +
+
+ + + + + + + + +
+
+ + + + + + + + +
+ +
+ + + + +
+ + + + + +
+ + + + + + +
+
+
+
+ + + +
+
+
    + + +
  • +
  • +
    + + +
  • +
    + +
  • +
    +
  • +
  • +
    +
  • +
+
+ + + diff --git a/src/main/webapp/WEB-INF/jsp/arrest/arrestList.jsp b/src/main/webapp/WEB-INF/jsp/arrest/arrestList.jsp new file mode 100644 index 0000000..780c948 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/arrest/arrestList.jsp @@ -0,0 +1,541 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> + + + + +
+
    +
  • +
  • + + ~ + + +
  • +
  • +
  • + + + + + + +
  • +
  • +
    + + + + +
    +
  • +
  • +
  • + +
  • +
+
    +
  • 위반장소
  • + + +
  • + +
  • + 선명 +
  • +
  • + +
  • +
+
+
+
+
+
+

+
    + + + + +
  • +
    + + +

  • +
  • + + + +
  • +
  • + + + +
  • + +
+
+
+
+
+

+
    + +
  • +
    +
+
+
+
+
+

+
    +
  • +
  • +
+
+
+
+
+

+
    +
  • +
  • +
  • +
+
+
+
+
+
+
+

+
    +
  • +
  • +
+
+
+
+
+

+
    + +
  • +
    +
+
+
+
+
+

+
    + +
  • +
    +
+
+
+
+
+

+
    + +
  • +
    +
+ +
+
+
+
+
+
    +
  • + " onclick="javascript:goSearch();"/> +
  • +
  • + " onclick="javascript:fnArrestAdd();"/> +
  • +
+
+
+ +
+
+ 결과화면 로딩 중 +
+
+
+ + +
+ +
+ +
+
+ + + + diff --git a/src/main/webapp/WEB-INF/jsp/arrest/arrestResult.jsp b/src/main/webapp/WEB-INF/jsp/arrest/arrestResult.jsp new file mode 100644 index 0000000..a4cc340 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/arrest/arrestResult.jsp @@ -0,0 +1,371 @@ +<%@ page pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +
+
    +
  • < :0건 >
  • +
  • < : >
  • +
+
    + + + +
  • +
    + +
  • +
    + +
  • +
    +
    +
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NO()

()
데이터가 존재하지 않습니다.
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + º ″  + º
+ ( )   + + 해리 + +
')" style="color:#0000ff;">')" style="color:#0000ff;">')" style="color:#0000ff;">')" style="color:#0000ff;">해양경찰청
+ 해수부 + 해군 +

()
11
+
+
diff --git a/src/main/webapp/WEB-INF/jsp/board/boardAdd.jsp b/src/main/webapp/WEB-INF/jsp/board/boardAdd.jsp new file mode 100644 index 0000000..ab7adcd --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/board/boardAdd.jsp @@ -0,0 +1,119 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ +
공지 + checked="true"/> + + +
+ + +

+

+

+
+ + +

+ + + + 는 삭제합니다. + + + + + + + + +

+
+
+
+
+   + +
+
+
+ +
+
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/board/boardList.jsp b/src/main/webapp/WEB-INF/jsp/board/boardList.jsp new file mode 100644 index 0000000..af769f8 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/board/boardList.jsp @@ -0,0 +1,152 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> + + + + + + + + + + + + + + + + + +
+
+ +
    +
  • +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
" /> + [공지] + + +     + + 답글 : + + ')">
()
 O
+
+ +
+ +
+
+
    +
  • +
+
+
+ + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/board/boardView.jsp b/src/main/webapp/WEB-INF/jsp/board/boardView.jsp new file mode 100644 index 0000000..62bfd70 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/board/boardView.jsp @@ -0,0 +1,185 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ [공지] + +
첨부파일 + + ')"> + + + +
+ +
+
    + +
  • + "> +
  • +
    + +
  • + "> +
  • +
    +
  • + +
  • +
  • + +
  • + +
  • + +
  • +
  • + +
  • +
    +
+
+ + + + + + +
+
+ +
+ + +
+ +
+ + +
+
diff --git a/src/main/webapp/WEB-INF/jsp/common/2018_04_06_login.jsp b/src/main/webapp/WEB-INF/jsp/common/2018_04_06_login.jsp new file mode 100644 index 0000000..0832076 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/common/2018_04_06_login.jsp @@ -0,0 +1,335 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" session="true"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + +<spring:message code="sys.name" /> +<%-- --%> + + + + + + + +
+

통합홈페이지입니다.

+
+
    +
  • img1
  • +
  • img2
  • +
+
+
+
+ +
+ +
+
+

반갑습니다

+
+
+
+
    +
  • + 아이디 +
  • +
  • + + +
  • +
+
+
+
    +
  • + 패스워드 +
  • +
  • + +
  • +
+
+
+
+ + +
+ + +
+
+ +
+
+ +
+ +
+
+
+

logo

+
+
+ 외사 및 국제 정보시스템 +
+
+
    +
  • + 30128 세종특별자치시 정부2청사로 13 (나성동) TEL 044-205-2469 | FAX 044-205-8995 +
  • +
  • + COPYRIGHT(C)2011 MINISTRY OF REPUBLIC ADMINISTRATION AND SECURITY. ALL RIGHT RESERVED +
  • +
+
+
+
+
+
+
+ + + diff --git a/src/main/webapp/WEB-INF/jsp/common/login.jsp b/src/main/webapp/WEB-INF/jsp/common/login.jsp new file mode 100644 index 0000000..2893cb1 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/common/login.jsp @@ -0,0 +1,278 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" session="true"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + <spring:message code="sys.name" /> + + + + + + + + +
+ + + +

통합홈페이지입니다.

+
+
    +
  • img1
  • +
  • img2
  • +
+
+ +
+
+ +
+ +
+
+

반갑습니다

+

이곳은 외사정보시스템입니다

+
+
+
+
    +
  • + 아이디 +
  • +
  • + +
  • +
+
+
+
    +
  • + 패스워드 +
  • +
  • + +
  • +
+
+
+
+ + +
+ + +
+ +
+ +
+ +
+ +
+
+ + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/common/login_bak.jsp b/src/main/webapp/WEB-INF/jsp/common/login_bak.jsp new file mode 100644 index 0000000..16c0dda --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/common/login_bak.jsp @@ -0,0 +1,162 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" session="true"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + +<spring:message code="sys.name" /> + + + + + + + + + + + + +
+ +
+
+
    +
  • 브라우저의 도구 아이콘 클릭
    도구 아이콘이 보이지 않는 경우 alt 키 입력 후 도구(T) 탭 선택
  • +
  • [호환성 보기 설정(B)] 클릭
  • +
  • [사이버외사정보시스템 URL] 선택
  • +
  • [제거] 버튼 클릭 후 [닫기]
  • +
+
+ +
+   +
+
+ + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/common/submenu.jsp b/src/main/webapp/WEB-INF/jsp/common/submenu.jsp new file mode 100644 index 0000000..1840dce --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/common/submenu.jsp @@ -0,0 +1,37 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" session="true" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + +
+
    +
  • + +
  • +
+
+ + + + +
diff --git a/src/main/webapp/WEB-INF/jsp/common/validator.jsp b/src/main/webapp/WEB-INF/jsp/common/validator.jsp new file mode 100644 index 0000000..2925385 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/common/validator.jsp @@ -0,0 +1,3 @@ +<%@ page language="java" contentType="javascript/x-javascript" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/equip/cyberEquipList.jsp b/src/main/webapp/WEB-INF/jsp/equip/cyberEquipList.jsp new file mode 100644 index 0000000..321a682 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/equip/cyberEquipList.jsp @@ -0,0 +1,80 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
구분장비모델 및 사양설치장소
웹서버 +
    +
  • 컴팩 ProLiant ML530T02
  • +
  • CPU Xeon 3.0Ghz * 2
  • +
  • MM 2.0GB SDRAM
  • +
  • HDD 36.4GB * 4
  • +
  • OS : Windows Server 2003
  • +
  • DB : MS-SQL
  • +
+
본청 기계실
관리자용 PC +
    +
  • 삼성 MP3O - VB5AR
  • +
  • CPU Intel P4 3.0GB
  • +
  • MM 1GB
  • +
  • HDD 80GB
  • +
  • 삼성 17" LCD 모니터
  • +
+
본청 외사계
레이져 프린터 +
    +
  • 캐논 CLBP - 5124
  • +
  • CPU 400MHz
  • +
  • MM 128MB
  • +
  • 해상도 600 x 1200 dpi
  • +
+
본청 외사계
잉크젯 프린터 +
    +
  • 캐논 I860
  • +
  • 해상도 488dpi
  • +
  • 카메라 다이렉트 출력
  • +
+
각 해경서 외사계
스캐너 +
    +
  • HP SJ - 3670
  • +
  • 평판형, 하드웨어 인터페이스 USB 2.0
  • +
  • 해상도 1200 x 1200 dpi
  • +
+
각 해경서 외사계
+
diff --git a/src/main/webapp/WEB-INF/jsp/equip/equipAdd.jsp b/src/main/webapp/WEB-INF/jsp/equip/equipAdd.jsp new file mode 100644 index 0000000..282f0a5 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/equip/equipAdd.jsp @@ -0,0 +1,387 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + * 표시는 필수입력 사항입니다. +
+ +
+ <%-- + --%> + + + 년 +
+ +
+ +
+ + + 원 +
+ + + +
+ + + + +

+
+ + +

+ + + + 는 삭제합니다. + + + + + +

+
+
+
+ + + +

+
+ + +

+ + + + 는 삭제합니다. + + + + + +

+
+
+
+ + +
+ + + +

+
+ + +

+ + + + 는 삭제합니다. + + + + + +

+
+
+
+
+
+ +
+
+ + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/equip/equipList.jsp b/src/main/webapp/WEB-INF/jsp/equip/equipList.jsp new file mode 100644 index 0000000..e834936 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/equip/equipList.jsp @@ -0,0 +1,134 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> + +
+
    +
  • + +
  • + + + +
  • +
+
+
+
+ + + +
+
    +
  • 검색결과${fn:length(equipmentList)}
  • +
+
    +
  • +
  • +
+
+ +
+ 목록을 확인 할 수 있습니다."> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + "> + + +
+ +
+
+ +
+
+ + +
+
    + +
  • ">
  • +
    + +
+
+ + +
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/equip/equipView.jsp b/src/main/webapp/WEB-INF/jsp/equip/equipView.jsp new file mode 100644 index 0000000..d9fb3f4 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/equip/equipView.jsp @@ -0,0 +1,189 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ 호 + + + + + + " target="_blank">" style="max-width:480px;"/> + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ + + + + +
+ + + +
+
+ + + + " target="_blank"> + +
+ +
+
+ + + + " target="_blank"> + +
+
+ +
+
+ + + + + + + +
+
    +
  • + +
  • + + +
  • + +
  • +
  • + +
  • +
    +
+
+ +
+
+ writer: + loginid: +
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/equip/stateWaitingList.jsp b/src/main/webapp/WEB-INF/jsp/equip/stateWaitingList.jsp new file mode 100644 index 0000000..4e6476e --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/equip/stateWaitingList.jsp @@ -0,0 +1,95 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> + + +
+
    +
  • +
  • + + + + + +
  • +
  • + + + +
  • +
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + "> + 분기 사용실적 + + + + + + + + + + + + +
+ +
+
+ +
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/equip/status.jsp b/src/main/webapp/WEB-INF/jsp/equip/status.jsp new file mode 100644 index 0000000..8f78b3e --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/equip/status.jsp @@ -0,0 +1,100 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + +
+
    +
  • +
  • +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
')" style="color:#0000ff;">
+
diff --git a/src/main/webapp/WEB-INF/jsp/equip/useStateAdd.jsp b/src/main/webapp/WEB-INF/jsp/equip/useStateAdd.jsp new file mode 100644 index 0000000..aa222bd --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/equip/useStateAdd.jsp @@ -0,0 +1,109 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ page import="kcg.faics.sec.LoginUserVO"%> +<% + LoginUserVO userVO = (LoginUserVO) session.getAttribute("userVO"); +%> + +
+ + + + + + + + +
+
    + +
  • +
  • +
    +
  • +
+
+ + +
+
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/equip/useStateApprove.jsp b/src/main/webapp/WEB-INF/jsp/equip/useStateApprove.jsp new file mode 100644 index 0000000..e131cdf --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/equip/useStateApprove.jsp @@ -0,0 +1,149 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> + +
+ +
+

+ 년도 + / 4 분기 + +

+
+
+
    +
  • +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + +
+ 과장 + + (${loginUserVO.name} 과장 대행) + +
+
+
+
+
+
+ + +
+
    + +
  • + +
  • +
    +
  • + +
  • +
+
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/equip/useStateList.jsp b/src/main/webapp/WEB-INF/jsp/equip/useStateList.jsp new file mode 100644 index 0000000..820c4ab --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/equip/useStateList.jsp @@ -0,0 +1,145 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" session="true" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ page import="kcg.faics.sec.LoginUserVO"%> +<% + LoginUserVO userVO = (LoginUserVO) session.getAttribute("userVO"); +%> + + + + +
+
    +
  • 년도/분기  
  • + + +
  •  종류
  • +
  • + 사용 + 점검 +
  • +
  • + + + +
  • +
+
+
+
+
    + +
  • + +
  • +
    +
+
    +
  • +
  • +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/error/EgovAccessDenied.jsp b/src/main/webapp/WEB-INF/jsp/error/EgovAccessDenied.jsp new file mode 100644 index 0000000..8045b4e --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/error/EgovAccessDenied.jsp @@ -0,0 +1,79 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + +<%@ page import="org.springframework.security.core.context.SecurityContextHolder" %> +<%@ page import="org.springframework.security.core.Authentication" %> +<%@ page import="org.springframework.security.core.userdetails.UserDetails" %> +<%@ page import="org.springframework.security.core.userdetails.UserDetailsService" %> + +<% +/** + * @JSP Name : EgovAccessDenied.jsp + * @Description : 접근권한 에러화면 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2011.06.07 신혜연 최초 생성 + * + * author 실행환경팀 + * Copyright (C) 2011 by MOPAS All right reserved. + */ +%> + + + + + +Error + + + + + + + +
+ + + + +
+ + + +
+ + + + + + + + + + +
<spring:message code=" />
${SPRING_SECURITY_403_EXCEPTION} +
+ <% + Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + Object principal = auth.getPrincipal(); + if (principal instanceof UserDetails) { + String username = ((UserDetails) principal).getUsername(); + String password = ((UserDetails) principal).getPassword(); + out.println("Account : " + username.toString() + "
"); + } + %>
+ + + + +
<spring:message code=" />
+
+
+
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/error/bizError.jsp b/src/main/webapp/WEB-INF/jsp/error/bizError.jsp new file mode 100644 index 0000000..7e6527a --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/error/bizError.jsp @@ -0,0 +1,65 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + +<% +/** + * @JSP Name : bizError.jsp + * @Description : 일반 에러화면 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2011.06.07 신혜연 최초 생성 + * + * author 실행환경팀 + * Copyright (C) 2011 by MOPAS All right reserved. + */ +%> + + + + + +Error + + + + + + + +
+ + + + +
+ + + +
+ + + + + + + + + + +
<spring:message code=" />

+
+ + + + +
<spring:message code=" />
+
+
+
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/error/dataAccessFailure.jsp b/src/main/webapp/WEB-INF/jsp/error/dataAccessFailure.jsp new file mode 100644 index 0000000..180ec33 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/error/dataAccessFailure.jsp @@ -0,0 +1,65 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + +<% +/** + * @JSP Name : dataAccessFailure.jsp + * @Description : 데이터 엑세스 에러화면 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2011.06.07 신혜연 최초 생성 + * + * author 실행환경팀 + * Copyright (C) 2011 by MOPAS All right reserved. + */ +%> + + + + + +Error + + + + + + + +
+ + + + +
+ + + +
+ + + + + + + + + + +
<spring:message code=" />

+
+ + + + +
<spring:message code=" />
+
+
+
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/error/transactionFailure.jsp b/src/main/webapp/WEB-INF/jsp/error/transactionFailure.jsp new file mode 100644 index 0000000..f32dfe7 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/error/transactionFailure.jsp @@ -0,0 +1,64 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<% +/** + * @JSP Name : transactionFailure.jsp + * @Description : 트랜잭션 에러화면 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2011.06.07 신혜연 최초 생성 + * + * author 실행환경팀 + * Copyright (C) 2011 by MOPAS All right reserved. + */ +%> + + + + + +Error + + + + + + + +
+ + + + +
+ + + +
+ + + + + + + + + + +
<spring:message code=" />

+
+ + + + +
<spring:message code=" />
+
+
+
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/etc/qna.jsp b/src/main/webapp/WEB-INF/jsp/etc/qna.jsp new file mode 100644 index 0000000..730641b --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/etc/qna.jsp @@ -0,0 +1,52 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> + + + + + + QnA + + + + + + + + + + + + + + + + + + + +
QnA 제목
+ 다음 그림과 같이 한글이 깨져 보일 경우 브라우저 설정을 변경해주시기 바랍니다. + QnA 1단계
+
+ ①번과 같이 마우스 우클릭을 한 뒤, ② 인코딩에서 ③ 유니코드(UTF-8)을 선택하십시오.
+ QnA 2단계 +
+ 화면이 새로고침 되면서 다음 그림과 같이 한글이 제대로 표현되는 것을 볼 수 있습니다.
+ QnA 3단계 +
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/etc/sitemap.jsp b/src/main/webapp/WEB-INF/jsp/etc/sitemap.jsp new file mode 100644 index 0000000..666cb62 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/etc/sitemap.jsp @@ -0,0 +1,60 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/fa/eduAdd.jsp b/src/main/webapp/WEB-INF/jsp/fa/eduAdd.jsp new file mode 100644 index 0000000..3ed73c7 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/fa/eduAdd.jsp @@ -0,0 +1,259 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags" %> + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ~ +
+ + + ${item.codenm} + + + + + + ${item.codenm} + + +
+ + + ${item.codenm} + + + + + + ${item.codenm} + + +
+ + + ${item.codenm} + + +
+ + + + + ${item.codenm} + + +
+ + + ${item.codenm} + + +
+ +
주의사항 + * 외사경찰일 경우 회원찾기로 정보를 입력할 수 있습니다. +
+
+
+ +
+
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+ + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/fa/eduList.jsp b/src/main/webapp/WEB-INF/jsp/fa/eduList.jsp new file mode 100644 index 0000000..4f5a55f --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/fa/eduList.jsp @@ -0,0 +1,166 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> + + + + +
+
    +
  •  
  • + +
  •  
  • + +
  • +
  • +
  • + + + +
  • +
+
+ +
+
+ + + + +
+
+
    +
  • 검색결과 ${fn:length(eduList)}
  • +
+ +
+ 목록을 확인 할 수 있습니다."> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
번호     
+ + + "> + + + + <%-- ~ --%> + +
+ +
+
+ +
+
+ + + +
+ +
+
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/fa/exmemberAdd.jsp b/src/main/webapp/WEB-INF/jsp/fa/exmemberAdd.jsp new file mode 100644 index 0000000..3f19fbb --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/fa/exmemberAdd.jsp @@ -0,0 +1,427 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + + + +
+ + +
+
+ + + ${item.codenm} + + + + + + ${item.codenm} + + +
+ + + ${item.codenm} + + + + +
+ + + ${item.codenm} + + +
+ + + ${item.codenm} + + + + + + ${item.codenm} + + +
+ + + ${item.codenm} + + + + + + +
+ + + + ${item.codenm} + + + + + +
+ + + ${status.index} + + + + + + ${status.index} + + + 개월 + + + + ${status.index} + + + + + + ${status.index} + + + 개월 +
+ + + ${status.index} + + + + + + ${status.index} + + + 개월 + + + + ${status.index} + + + + + + ${status.index} + + + 개월 +
+ + + +
기존 이미지를 삭제합니다. +
+
+ * 등록일자는 다른 부서로 발령난 날을 선택해주시면 총 외사경력이 정확히 나타납니다.
+ * 사진 수정 시에는 삭제를 꼭 체크하고 등록해 주셔야 이전 이미지가 삭제 됩니다.
+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/fa/exmemberList.jsp b/src/main/webapp/WEB-INF/jsp/fa/exmemberList.jsp new file mode 100644 index 0000000..806a271 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/fa/exmemberList.jsp @@ -0,0 +1,234 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags" %> + + +
+
    +
  • 소속  
  • + +
  • 이름  
  • +
  • +
  • 계급  
  • + +
  • + + + +
  • +
+
+ + + + +
+
+
+ +
    +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ "> + + + + + "> + + + + + "> + + + + + "> + + + +
+ + + - + + + + + - + + + + + "> + + + + + + - + + 개월 + + + ">[수정]
+ +
+
+ +
+ +
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/fa/exmemberView.jsp b/src/main/webapp/WEB-INF/jsp/fa/exmemberView.jsp new file mode 100644 index 0000000..f149bc8 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/fa/exmemberView.jsp @@ -0,0 +1,142 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
<c:out value=" src="noImage.png"> + + () +
+ 내근 + 외근 + 국제항만분실 +
개월개월
개월개월
+
+
+ +
+
    +
  • + +
  • +
  • + +
  • +
+
+
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/fa/memberCareerStatus.jsp b/src/main/webapp/WEB-INF/jsp/fa/memberCareerStatus.jsp new file mode 100644 index 0000000..8916839 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/fa/memberCareerStatus.jsp @@ -0,0 +1,78 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +
+
+
    +
  • +
  • + +
  • +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
-
+
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/fa/memberCareerStatusStat.jsp b/src/main/webapp/WEB-INF/jsp/fa/memberCareerStatusStat.jsp new file mode 100644 index 0000000..6e2ff8c --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/fa/memberCareerStatusStat.jsp @@ -0,0 +1,4 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> diff --git a/src/main/webapp/WEB-INF/jsp/fa/memberInfo.jsp b/src/main/webapp/WEB-INF/jsp/fa/memberInfo.jsp new file mode 100644 index 0000000..a4c4a9c --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/fa/memberInfo.jsp @@ -0,0 +1,155 @@ +<%@page import="kcg.faics.sec.LoginUserVO"%> +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
<c:out value=" src="noImage.png">성 명 + + () + 아이디
주 소
e-mail
가족사항담당업무
경비전화일반전화휴대전화
경찰임용일현계급임용일현부서배치일
소속소속2세부소속
직위직별근무형태 + 내근 + 외근 + 국제항만분실 +
계급최종학력전근무부서
총 외사경력과거외사경력개월수사경력개월
정보경력개월보안경력개월
비고
+
+<% + LoginUserVO userVO = (LoginUserVO) session.getAttribute("userVO"); +%> + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/fa/memberManagePersonnel.jsp b/src/main/webapp/WEB-INF/jsp/fa/memberManagePersonnel.jsp new file mode 100644 index 0000000..e3ca5cf --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/fa/memberManagePersonnel.jsp @@ -0,0 +1,116 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +
+
+
    + +
  • +
  • +
  • +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
구분정현원계급별 현황
정원현원과부족총경경정경감경위경사경장순경
정원현원정원현원정원현원정원현원정원현원정원현원정원현원
+
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/inter/arrestAdd.jsp b/src/main/webapp/WEB-INF/jsp/inter/arrestAdd.jsp new file mode 100644 index 0000000..dce7942 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/inter/arrestAdd.jsp @@ -0,0 +1,2682 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" + uri="http://www.springmodules.org/tags/commons-validator"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <%-- --%> + + + + + + + + + +
+ <%-- --%> + <%-- + --%> +
+ + +
+
+ <%--   + --%> + +
+
+ +
+ + + + +
범죄유형(건)
+
+
+
+
+

해양국경관리

+
    + +

  • +
    +
+
+
+
+
+

통상질서교란

+
    + +

  • +
    +
+
+
+
+
+

국익·산업보호

+
    + +

  • +
    +
+
+
+
+
+

국민·사회안전

+
    + +

  • +
    +
+
+
+ +
+
+

외국인관련범죄

+
    + +

  • +
    +
+
+
+
+
+ + +
+ + + + + + +
  + + + + +
+ + + + + + + +
+ <%-- + --%> + + + + + + +
+ + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
검거장소(건) +

+ +
처리인원(명) 명 <%-- 명 --%>각각 구속,불구속,불기소,이송
+ + + <%--
+
+
+
+

해양국경관리

+
    + +

  • +
    +
+
+
+
+
+

통상질서교란

+
    + +

  • +
    +
+
+
+
+
+

국익·산업보호

+
    + +

  • +
    +
+
+
+
+
+

국민·사회안전

+
    + +

  • +
    +
+
+
+ +
+
+

외국인관련범죄

+
    + +

  • +
    +
+
+
+
+
+ --%> +<%-- + --%> + +<%-- + --%> + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +<%-- + + + + --%> + + <%-- + + + + + --%> + + <%-- + + + + --%> + + + <%-- + + + + + + + + --%> + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + + + + + + +
+ +
+ + - + + . + + N + + - + + . + + E +
+
+ + + + + + +
+
+ + <%-- --%> +
+
+ +
+
    + + +
  • + <%--
  • --%> +
    + + +
  • +
    + <%-- +
  • +
    --%> +
  • +
  • +
    +
  • +
+
+ +
+ +
+ + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/inter/arrestList.jsp b/src/main/webapp/WEB-INF/jsp/inter/arrestList.jsp new file mode 100644 index 0000000..d717110 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/inter/arrestList.jsp @@ -0,0 +1,554 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> + + + + + +
+
+
    +
  • +
  • + + ~ + + +
  • +
  • +
  • + + + + + + +
  • +
  • +
    + + <%-- + + --%> +
    +
  • +<%--
  • +
  • + +
  • --%> +
+
    +
  • 검거관명
  • + + +
  • + + <%--
  • + 선명 +
  • +
  • + +
  • --%> +
+
+ + +
+
    +
  • + " onclick="javascript:goSearch();"/> +
  • +
  • + " onclick="javascript:fnArrestAdd();"/> +
  • +
+
+ +
+ +
+ +
+
+ 결과화면 로딩 중 +
+
+
+ + +
+ +
+ +
+
+ + + + diff --git a/src/main/webapp/WEB-INF/jsp/inter/arrestResult.jsp b/src/main/webapp/WEB-INF/jsp/inter/arrestResult.jsp new file mode 100644 index 0000000..3595164 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/inter/arrestResult.jsp @@ -0,0 +1,694 @@ +<%@ page pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +
+
    +
  • < :0건 >
  • +
  • < : >
  • +
+
    + + + +
  • +
    + +
  • +
    + +
  • +
    +
    +
+ +
+
+
+
+ + + + <%--NO --%> + + + <%--상태 --%> + + + <%--검거일시 --%> + + + <%--검거관서 --%> + + + <%--사건개요 --%> + + + <%--검거장소 --%> + + + <%--침범유형 --%> + <%-- + + + + + --%> + + <%--적용법조 --%> + + + <%--검거기관 --%> + + + <%--검거인원 --%> + + + + + + <%--밀입국(무사증) --%> + + + + + + <%--밀입국(직접밀입국) --%> + + + + + <%-- --%> + + <%--밀입국(외국선원) --%> + + + <%--밀수입 --%> + + + + + + <%--밀출국(중국) --%> + + + + + <%--밀출국(일본) --%> + + + + + <%--밀출국(기타국가) --%> + + + + + <%--밀수출 --%> + + + + + + <%--산업기술유출 --%> + + + + <%--지식재산권 --%> + + + <%--불법위폐, 외국환거래 --%> + + + + + <%--외국인 인권보호 --%> + + + + <%--원산지 표시위반 --%> + + + <%--사회 등 안전저해 --%> + + + <%--불법체류 --%> + + + + <%--기타(마약) --%> + + + + + + + + <%--기타(외국(인)관련범죄) --%> + + + + + + + + + + + + + + + + + + + + <%--침범유형 --%> + <%-- + + --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <%--침범유형 --%> + <%-- + + + + + + --%> + + <%-- 검거기관 --%> + <%-- --%> + + <%-- --%> + + + + + + + + + + + + + + + + + + <%-- --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NO()()()()()()()()
내국인외국인국적비자종류
+
데이터가 존재하지 않습니다.
+
+
+ +
+ + + <%--NO --%> + + + <%--상태 --%> + + + <%--검거일시 --%> + + + <%--검거관서 --%> + + + <%--사건개요 --%> + + + <%--검거장소 --%> + + + <%--침범유형 --%> + <%-- + + + + + --%> + + <%--적용법조 --%> + + + <%--검거기관 --%> + + + <%--검거인원 --%> + + + + + + <%--밀입국(무사증) --%> + + + + + + <%--밀입국(직접밀입국) --%> + + + + + <%-- --%> + + <%--밀입국(외국선원) --%> + + + <%--밀수입 --%> + + + + + + <%--밀출국(중국) --%> + + + + + <%--밀출국(일본) --%> + + + + + <%--밀출국(기타국가) --%> + + + + + <%--밀수출 --%> + + + + + + <%--산업기술유출 --%> + + + + <%--지식재산권 --%> + + + <%--불법위폐, 외국환거래 --%> + + + + + <%--외국인 인권보호 --%> + + + + <%--원산지 표시위반 --%> + + + <%--사회 등 안전저해 --%> + + + <%--불법체류 --%> + + + + <%--기타(마약) --%> + + + + + + + + <%--기타(외국(인)관련범죄) --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <%-- + + + + + + + + + + + + + + + --%> + + + + + + + + + + + + + + + + + + + <%-- + + + + --%> + + + + + + + <%-- --%> + + + + + + + + + + + + + + + + + + <%-- --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + <%-- º ″ --%>  + <%-- º
--%> +     + <%-- + 해리 + --%> +
')" style="color:#0000ff;">')" style="color:#0000ff;">')" style="color:#0000ff;">')" style="color:#0000ff;"> + 해양경찰청 + <%-- --%> + 부산해양경찰서 + 인천해양경찰서 + 속초해양경찰서 + 동해해양경찰서 + 태안해양경찰서 + 군산해양경찰서 + 목포해양경찰서 + 완도해양경찰서 + 여수해양경찰서 + 포항해양경찰서 + 울산해양경찰서 + 통영해양경찰서 + 제주해양경찰서 + 평택해양경찰서 + 창원해양경찰서 + 보령해양경찰서 + 서귀포해양경찰서 + 부안해양경찰서 + 울진해양경찰서 + 서해5도특별단 + 중부지방해양경찰청 + 제주지방해양경찰청 + 서해지방해양경찰청 + 남해지방해양경찰청 + 동해지방해양경찰청 +
+
+
diff --git a/src/main/webapp/WEB-INF/jsp/main.jsp b/src/main/webapp/WEB-INF/jsp/main.jsp new file mode 100644 index 0000000..53b5241 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/main.jsp @@ -0,0 +1,103 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +
+ +
+

+
+

+
+
    + + + +
  • + "> + +
  • +
    +
    + +
  • +
    +
    +
+
+
+
+ +
+

+
+

+
+
    + + + +
  • + "> + +
  • +
    +
    + +
  • +
    +
    +
+
+
+
+ +
+

+
+

+
+
    + + + +
  • + "> + +
  • +
    +
    + +
  • +
    +
    +
+
+
+
+ +
+

+
+

+
+
    + + + +
  • + "> + +
  • +
    +
    + +
  • +
    +
    +
+
+
+
+
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/member/update.jsp b/src/main/webapp/WEB-INF/jsp/member/update.jsp new file mode 100644 index 0000000..478bba9 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/member/update.jsp @@ -0,0 +1,204 @@ +<%@page import="kcg.faics.sec.LoginUserVO"%> +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + + + + + + + ${item.codenm} + + +
+ + + + + + + + + + +
+ + * 비밀번호를 변경하시려면 체크하십시오. 비밀번호는 이전비밀번호 확인 없이 그대로 수정됩니다. +
변경 비밀번호 + + 변경 비밀번호 확인 + + + +
+
+
+ +
+
    +
  • + +
  • +
  • + +
  • +
+
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/member/view.jsp b/src/main/webapp/WEB-INF/jsp/member/view.jsp new file mode 100644 index 0000000..ba538ae --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/member/view.jsp @@ -0,0 +1,90 @@ +<%@page import="kcg.faics.sec.LoginUserVO"%> +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ / +
+ + + +
+
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/report/approval.jsp b/src/main/webapp/WEB-INF/jsp/report/approval.jsp new file mode 100644 index 0000000..6a4f4ec --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/report/approval.jsp @@ -0,0 +1,805 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + ${userType} ${reportVO.inPosition} ${reportVO.inName}
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + 아니오 + + + + + +
+ + + + + + +   + + + +
+ 1 + + +

+ &no=1" target="_blank"> + + + + 삭제 + + +

+
+ +

+
+
+ 2 + + +

+ &no=2" target="_blank"> + + + + 삭제 + + +

+
+ +

+
+
+ 3 + + +

+ &no=3" target="_blank"> + + + + 삭제 + + +

+
+ + + +
+ 4 + + +

+ &no=4" target="_blank"> + + + + 삭제 + + +

+
+ +

+
+
+ 5 + + +

+ &no=5" target="_blank"> + + + + 삭제 + + +

+
+ +

+
+
+ + + + + + + + +
+ + + + () +
+ + + + + + + () + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + <%-- 안전서 --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
해양경찰서
+ + + + + + +
+ + + + +
+ + + + +
+
+
+ + <%-- 지방청 --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
지방해양경찰청
+ + + + + + +
+ + + + +
+ + + + +
+
+
+ + <%-- 본부 --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
해양경찰청
+ + + + + + +
+ + + + +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
해양경찰청
계장 결재란
계장 결재란
계장 결제란 
평가자 + + + + + + + + ( 대행) + +
검토의견 + +
+
+
+ +
+
    + +
  • + +
  • +
    +
  • + +
  • +
+
+ +
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/report/approveList.jsp b/src/main/webapp/WEB-INF/jsp/report/approveList.jsp new file mode 100644 index 0000000..512a8ec --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/report/approveList.jsp @@ -0,0 +1,207 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags" %> + +
+ + + + +
    +
  • +
  • + + ~ + +
  • +
  •  
  • +
  • + +
  • +
  • + + + +
  • +
+
+
+ + +
+
+ +
    +
  • +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + "> + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+ + diff --git a/src/main/webapp/WEB-INF/jsp/report/goal.jsp b/src/main/webapp/WEB-INF/jsp/report/goal.jsp new file mode 100644 index 0000000..cbb5c83 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/report/goal.jsp @@ -0,0 +1,299 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags" %> + + + +
+
    +
  • + +
  • + + + +
  • + +
  • + +
    +
+
+ + +
+
    +
  • +
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + diff --git a/src/main/webapp/WEB-INF/jsp/report/goalStats.jsp b/src/main/webapp/WEB-INF/jsp/report/goalStats.jsp new file mode 100644 index 0000000..cb13c96 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/report/goalStats.jsp @@ -0,0 +1,211 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags" %> + + + + + + +
+
    +
  • + +
  • + + + +
  • + +
  • + +
    +
  • + + + +
  • +
+
+ + +
+
    + +
  • +
    +
  • +
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + "> + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + diff --git a/src/main/webapp/WEB-INF/jsp/report/judgeRecord.jsp b/src/main/webapp/WEB-INF/jsp/report/judgeRecord.jsp new file mode 100644 index 0000000..9ed69e4 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/report/judgeRecord.jsp @@ -0,0 +1,207 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags" %> + + + + + + +
+
    +
  • + +
  • +
  • + ~ +
  • + +
  • + +
  • + + +
  • + " onclick="javascript:fn_search();" /> +
  • +
  • + " onclick="javascript:fn_get_excel();" /> +
  • +
+
+
+ + + +
+
+ +
    +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + "> + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+ + diff --git a/src/main/webapp/WEB-INF/jsp/report/myList.jsp b/src/main/webapp/WEB-INF/jsp/report/myList.jsp new file mode 100644 index 0000000..e19fb07 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/report/myList.jsp @@ -0,0 +1,217 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags" %> + +
+ + + + +
    +
  • +
  • + + ~ + +
  • +
  •  
  • +
  • + +
  • +
  • + + + +
  • +
+
+
+ + +
+
+ +
    +
  • +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + "> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+ +
+
    +
  • +
+
+ + diff --git a/src/main/webapp/WEB-INF/jsp/report/offlineAdd.jsp b/src/main/webapp/WEB-INF/jsp/report/offlineAdd.jsp new file mode 100644 index 0000000..df8d6d7 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/report/offlineAdd.jsp @@ -0,0 +1,238 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags" %> + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+ + + + + + + + + + + + + + + +
+ + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + + + + + +
+ + +   + + +
+ + +

+

+

+

+

+
+ + + +
+
+
+ +
+
    +
  • + +
  • +
+
+ + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/report/presentList.jsp b/src/main/webapp/WEB-INF/jsp/report/presentList.jsp new file mode 100644 index 0000000..dbc8bdb --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/report/presentList.jsp @@ -0,0 +1,268 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags" %> + + + + + + +
+
    +
  • + +
  • +
  • + ~ +
  • +
+
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + " onclick="javascript:fn_search();" /> +
  • +
  • + " onclick="javascript:fn_get_excel();" /> +
  • +
+
+ +
+ + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + "> + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
    +
  • +
+
+ + + +
+ +
+ + diff --git a/src/main/webapp/WEB-INF/jsp/report/reportAdd.jsp b/src/main/webapp/WEB-INF/jsp/report/reportAdd.jsp new file mode 100644 index 0000000..07af467 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/report/reportAdd.jsp @@ -0,0 +1,180 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +   + + +
+ + +

+

+

+

+

+
+ + + +
+
+
+ +
+
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/report/reportList.jsp b/src/main/webapp/WEB-INF/jsp/report/reportList.jsp new file mode 100644 index 0000000..ecb18f2 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/report/reportList.jsp @@ -0,0 +1,305 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags" %> + + + + +
+
+ +
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +
+ + + + + "> + + + + + + + + + + + + + + + + +
+
+ +
+ +
+
+ + + diff --git a/src/main/webapp/WEB-INF/jsp/report/reportModify.jsp b/src/main/webapp/WEB-INF/jsp/report/reportModify.jsp new file mode 100644 index 0000000..566f5f2 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/report/reportModify.jsp @@ -0,0 +1,813 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + 아니오 + + + + + +
+ + + + + + +   + + + +
+ 1 + + +

+ &no=1" target="_blank"> + + + + 삭제 + + +

+
+ +

+
+
+ 2 + + +

+ &no=2" target="_blank"> + + + + 삭제 + + +

+
+ +

+
+
+ 3 + + +

+ &no=3" target="_blank"> + + + + 삭제 + + +

+
+ + + +
+ 4 + + +

+ &no=4" target="_blank"> + + + + 삭제 + + +

+
+ +

+
+
+ 5 + + +

+ &no=5" target="_blank"> + + + + 삭제 + + +

+
+ +

+
+
+ + + + + + + + +
+ + + + () +
+ + + + + + + () + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + <%-- 안전서 --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
해양경찰서
+ + + + + + +
+ + + + +
+ + + + +
+
+ + <%-- 지방청 --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
지방해양경찰청
+ + + + + + +
+ + + + +
+ + + + +
+
+ + <%-- 본청 --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
본청
+ + + + + + +
+ + + + +
+ + + + +
+
+
+
+ +
+
    + + +
  • + +
  • +
  • + +
  • +
    + + + + +
  • + +
  • +
  • + + +
  • +
    +
    +
  • + +
  • +
+
+ +
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/report/reportSaveList.jsp b/src/main/webapp/WEB-INF/jsp/report/reportSaveList.jsp new file mode 100644 index 0000000..88bdf2b --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/report/reportSaveList.jsp @@ -0,0 +1,133 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags" %> + + +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ "/> + + + +   + + "> + + + + + + +
+
+ + +
+ +
+ +
+
    +
  • +
+
+ + + diff --git a/src/main/webapp/WEB-INF/jsp/report/reportView.jsp b/src/main/webapp/WEB-INF/jsp/report/reportView.jsp new file mode 100644 index 0000000..9ae7763 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/report/reportView.jsp @@ -0,0 +1,197 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + + + + + +
+ + + + + + + + +
[-]
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + "> + " + alt=" 이미지" width="90" /> + + + + + + + + + + "> + " + alt=" 이미지" width="90" /> + + + + + + +
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ +
+ +
${reportVO.inSubject}
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + +
1 + + &no=1" target="_blank"> + + + +
2 + + &no=2" target="_blank"> + + + +
3 + + &no=3" target="_blank"> + + + +
4 + + &no=4" target="_blank"> + + + +
5 + + &no=5" target="_blank"> + + + +
+
+ + diff --git a/src/main/webapp/WEB-INF/jsp/report/search.jsp b/src/main/webapp/WEB-INF/jsp/report/search.jsp new file mode 100644 index 0000000..a027f3e --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/report/search.jsp @@ -0,0 +1,173 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + + +
+
    +
  • +
  • + ~ + +
  • +
  • +
  • + +
  • +
  • +   +
  • +
  • + +
  • +
+
+ +
+
+
+

+
    + + +
  • + + +
  • +
    + + +
  • + +
  • +
    +
    +
    +
+
+
+ +
+
+

+
    + +
  • +
    +
+
+
+
+
+

+
    + +
  • +
    +
+
+
+

+
    + +
  • +
    +
+
+
+

+
    + +
  • +
    +
+
+
+

+
    + +
  • +
    +
+
+
+
+ +
+
    +
  • +
  • + +
  • +
  • + +
  • +
  • +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+ +
+
    +
  •  
  • +
  • + +
  • +
  •  
  • +
  • + +
  • +
  • + " onclick="javascript:fn_search();" /> +
  • +
  • + " onclick="javascript:fn_get_excel();" /> +
  • +
+
+
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/report/statistics.jsp b/src/main/webapp/WEB-INF/jsp/report/statistics.jsp new file mode 100644 index 0000000..4f1fbbb --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/report/statistics.jsp @@ -0,0 +1,182 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + + + +
+
    +
  • +
  • + ~ + +
  • +
  • +
  • + +
  • +
  • +   +
  • +
  • + +
  • +
+
+ +
+
+
+

+
    + + +
  • + + +
  • +
    + + +
  • + +
  • +
    +
    +
    +
+
+
+ +
+
+

+
    + +
  • +
    + +
+
+
+ +
+
+

+
    + +
  • +
    +
+
+
+

+
    + +
  • +
    +
+
+
+

+
    + +
  • +
    +
+
+
+

+
    + +
  • +
    +
+
+
+
+ +
+
    +
  • +
  • + +
  • +
  • + +
  • +
  • +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+
+ +
+
    +
  • +
  • +
  • +
  • +
+
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/report/statsResult.jsp b/src/main/webapp/WEB-INF/jsp/report/statsResult.jsp new file mode 100644 index 0000000..b4a76b9 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/report/statsResult.jsp @@ -0,0 +1,322 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags" %> + + + +
+
    +
  • +
  • +
  • +
  • + + +
  • +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+
+
+ + diff --git a/src/main/webapp/WEB-INF/jsp/report/waitList.jsp b/src/main/webapp/WEB-INF/jsp/report/waitList.jsp new file mode 100644 index 0000000..cc31278 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/report/waitList.jsp @@ -0,0 +1,240 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags" %> + + + + + + + + +
+ +
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+
+
+ +
+ +
+ +
    +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + "> + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + + diff --git a/src/main/webapp/WEB-INF/jsp/stats/statsAdd.jsp b/src/main/webapp/WEB-INF/jsp/stats/statsAdd.jsp new file mode 100644 index 0000000..a846e9c --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/stats/statsAdd.jsp @@ -0,0 +1,129 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
공지 + checked="true"/> + + +
카테고리 + + + + + +
+ + +

+

+

+
+ + +

+ + + + 는 삭제합니다. + + + + + + + + +

+
+
+
+
+   + +
+
+
+ +
+
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/stats/statsList.jsp b/src/main/webapp/WEB-INF/jsp/stats/statsList.jsp new file mode 100644 index 0000000..260a36c --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/stats/statsList.jsp @@ -0,0 +1,171 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="ct" tagdir="/WEB-INF/tags"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> + + + + + + + + +
+
    + + +
  • +
    + +
  • +
    + + + +
  • +
    + +
  • +
    +
    + +
+
+ + + + + + + + +
+
+ +
    +
  • +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
" /> + [공지] + + +     + + 답글 : + + ')">
()
 O
+
+ +
+ +
+
+
    +
  • +
+
+
+ + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/stats/statsView.jsp b/src/main/webapp/WEB-INF/jsp/stats/statsView.jsp new file mode 100644 index 0000000..5ef4f1d --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/stats/statsView.jsp @@ -0,0 +1,186 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ [공지] + +
첨부파일 + + ')"> + + + +
+ +
+
    + +
  • + "> +
  • +
    + +
  • + "> +
  • +
    +
  • + +
  • +
  • + +
  • + +
  • + +
  • +
  • + +
  • +
    +
+
+ + + + + + +
+
+ +
+ + +
+ +
+ + +
+
diff --git a/src/main/webapp/WEB-INF/jsp/susa/incidentAdd.jsp b/src/main/webapp/WEB-INF/jsp/susa/incidentAdd.jsp new file mode 100644 index 0000000..58778b9 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/susa/incidentAdd.jsp @@ -0,0 +1,157 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + +
+ +
+ + + + + + + +
+ +
+ +
+ + +

+

+

+
+ + + +

+ + + + 는 삭제합니다. + + + + + + + + +

+
+
+
+
+
+
+ +
+
+ + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/susa/incidentList.jsp b/src/main/webapp/WEB-INF/jsp/susa/incidentList.jsp new file mode 100644 index 0000000..b901a06 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/susa/incidentList.jsp @@ -0,0 +1,211 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> + + + + + + + + + +
+
+
    +
  • 표시갯수${paginationInfo.recordCountPerPage}
  • +
  • 검색 게시물${paginationInfo.totalRecordCount}/${totalCnt} + +
  • +
  • 현재 페이지 ${paginationInfo.currentPageNo}/
  • +
+
    + +
  • +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ${(paginationInfo.currentPageNo-1) * paginationInfo.recordCountPerPage + status.index + 1} + + ')"> + + + + + + + + + + ${result.resultFlag} + + + O + - + +
+
+ +
+ +
+
+ +
+
    +
  • +
+
+ +
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/susa/incidentView.jsp b/src/main/webapp/WEB-INF/jsp/susa/incidentView.jsp new file mode 100644 index 0000000..9c12319 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/susa/incidentView.jsp @@ -0,0 +1,124 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + +
+ + + + + +
+ + " target="_blank"> + +
+
+
+ +
+ +
+
+ + + +
+
    +
  • + +
  • + +
  • + +
  • +
  • + +
  • +
    +
+
+ +
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/susa/promotAdd.jsp b/src/main/webapp/WEB-INF/jsp/susa/promotAdd.jsp new file mode 100644 index 0000000..ba3fc3e --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/susa/promotAdd.jsp @@ -0,0 +1,157 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + +
+ +
+ + + + + + + +
+ +
+ +
+ + +

+

+

+
+ + + +

+ + + + 는 삭제합니다. + + + + + + + + +

+
+
+
+
+
+
+ +
+
+ + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/susa/promotList.jsp b/src/main/webapp/WEB-INF/jsp/susa/promotList.jsp new file mode 100644 index 0000000..fc45ed0 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/susa/promotList.jsp @@ -0,0 +1,183 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> + + + + + + + + +
+
+
    +
  • 표시갯수${paginationInfo.recordCountPerPage}
  • +
  • 검색 게시물${paginationInfo.totalRecordCount}/${totalCnt} + +
  • +
  • 현재 페이지 ${paginationInfo.currentPageNo}/
  • +
+
    + +
  • +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ${(paginationInfo.currentPageNo-1) * paginationInfo.recordCountPerPage + status.index + 1} + + ')"> + + + + + + + + + + ${result.resultFlag} + + + O + - + +
+
+ +
+ +
+
+ +
+
    +
  • +
+
+ +
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/susa/promotView.jsp b/src/main/webapp/WEB-INF/jsp/susa/promotView.jsp new file mode 100644 index 0000000..d81b1ac --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/susa/promotView.jsp @@ -0,0 +1,116 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ +
+ +
+ + + + + +
+ +
+ +
+ + " target="_blank"> + +
+
+
+
+ + +
+
    +
  • + +
  • + +
  • + +
  • +
  • + +
  • +
    +
+
+
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/tags/memberSelectPop.tag b/src/main/webapp/WEB-INF/tags/memberSelectPop.tag new file mode 100644 index 0000000..71f3023 --- /dev/null +++ b/src/main/webapp/WEB-INF/tags/memberSelectPop.tag @@ -0,0 +1,192 @@ +<%@ tag language="java" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + +<%@ attribute name="isTypeSearch" type="java.lang.Boolean" required="false" description="경찰 타입을 검색할지?" %> +<%@ attribute name="isIdSearch" type="java.lang.Boolean" required="false" description="이름 또는 아이디로 타입을 검색할지?" %> +<%@ attribute name="title" type="java.lang.String" required="false" description="팝업 타이틀을 받는다" %> + + + + + + + + + +
+
+
    +
  • +
  • + + + +
  • +
    + + + +
  • + + +
  • +
    +
  • +
+
+ + + + + + + + + + + + + +
+
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/tags/pageInfo.tag b/src/main/webapp/WEB-INF/tags/pageInfo.tag new file mode 100644 index 0000000..ee8b8d1 --- /dev/null +++ b/src/main/webapp/WEB-INF/tags/pageInfo.tag @@ -0,0 +1,15 @@ +<%@ tag language="java" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + +
    +
  • 표시갯수${paginationInfo.recordCountPerPage}
  • +
  • 검색 게시물${paginationInfo.totalRecordCount}/${totalCnt} + +
  • +
  • 현재 페이지 ${paginationInfo.currentPageNo}/
  • +
+ + + diff --git a/src/main/webapp/WEB-INF/tiles/default-layout.jsp b/src/main/webapp/WEB-INF/tiles/default-layout.jsp new file mode 100644 index 0000000..124aec2 --- /dev/null +++ b/src/main/webapp/WEB-INF/tiles/default-layout.jsp @@ -0,0 +1,3 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%> + diff --git a/src/main/webapp/WEB-INF/tiles/tiles-footer.jsp b/src/main/webapp/WEB-INF/tiles/tiles-footer.jsp new file mode 100644 index 0000000..208fc21 --- /dev/null +++ b/src/main/webapp/WEB-INF/tiles/tiles-footer.jsp @@ -0,0 +1,59 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ page import="kcg.faics.sec.LoginUserVO"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<% + LoginUserVO userVO = (LoginUserVO) session.getAttribute("userVO"); +%> + + + +
?m=login" target="_blank"> + " /> +
+
" target="_blank"> + + +
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/tiles/tiles-header.jsp b/src/main/webapp/WEB-INF/tiles/tiles-header.jsp new file mode 100644 index 0000000..d397cdb --- /dev/null +++ b/src/main/webapp/WEB-INF/tiles/tiles-header.jsp @@ -0,0 +1,334 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" session="true" %> +<%@ page import="kcg.faics.sec.LoginUserVO"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> + +<% + LoginUserVO userVO = (LoginUserVO) session.getAttribute("userVO"); +%> + + + +
+
+ + +
+
+ + + + + + + +
+
+
+
+

비밀번호 변경

+
+ + + + + + + + + + + + + + + + + + + + +
아이디
현재 비밀번호
변경 비밀번호
변경 비밀번호 확인
8~20자 영문, 숫자, 특수문자를 사용하세요. +
+
+
+
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+
+
+
+
+ + +<%-- + + + --%> + + diff --git a/src/main/webapp/WEB-INF/tiles/tiles-layout.jsp b/src/main/webapp/WEB-INF/tiles/tiles-layout.jsp new file mode 100644 index 0000000..c8925fd --- /dev/null +++ b/src/main/webapp/WEB-INF/tiles/tiles-layout.jsp @@ -0,0 +1,87 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + + + + + +<spring:message code="sys.name" /> + + +" > +" > + +" > + +" > + + + + + + + + + + + +
+ + + + +
+ +
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ + + + +
+ + + + diff --git a/src/main/webapp/WEB-INF/tiles/tiles-leftmenu.jsp b/src/main/webapp/WEB-INF/tiles/tiles-leftmenu.jsp new file mode 100644 index 0000000..0f79463 --- /dev/null +++ b/src/main/webapp/WEB-INF/tiles/tiles-leftmenu.jsp @@ -0,0 +1,112 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..1cbb51a --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,157 @@ + + + + contextConfigLocation + classpath:spring/context-*.xml + + + encodingFilter + org.springframework.web.filter.CharacterEncodingFilter + + encoding + utf-8 + + + + encodingFilter + /* + + + + multipartFilter + org.springframework.web.multipart.support.MultipartFilter + + multipartResolverBeanName + multipartResolver + + + + multipartFilter + /* + + + + + + + org.springframework.web.context.ContextLoaderListener + + + + action + org.springframework.web.servlet.DispatcherServlet + + contextConfigLocation + + /WEB-INF/config/springmvc/dispatcher-servlet.xml, + + + 1 + + + + action + *.do + + + + action + *.html + + + action + *.xml + + + action + *.json + + faics + + /index.jsp + + + 20 + + + BASIC + + + 404 + /WEB-INF/jsp/error/bizError.jsp + + + 500 + /WEB-INF/jsp/error/DataAccessFailure.jsp + + + + + CKFilter + kcg.faics.cmmn.ckeditor.CkFilter + + properties + property/ck.properties + + + + CKFilter + /uploadImages.do + + + + + springSecurityFilterChain + org.springframework.web.filter.DelegatingFilterProxy + + + springSecurityFilterChain + /* + + + org.springframework.security.web.session.HttpSessionEventPublisher + + + + + + Restricted methods + /* + PUT + DELETE + OPTIONS + TRACE + + + + + \ No newline at end of file diff --git a/src/main/webapp/ckeditor/LICENSE.md b/src/main/webapp/ckeditor/LICENSE.md new file mode 100644 index 0000000..0a239d2 --- /dev/null +++ b/src/main/webapp/ckeditor/LICENSE.md @@ -0,0 +1,1264 @@ +Software License Agreement +========================== + +CKEditor - The text editor for Internet - http://ckeditor.com +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your +choice: + + - GNU General Public License Version 2 or later (the "GPL") + http://www.gnu.org/licenses/gpl.html + (See Appendix A) + + - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + http://www.gnu.org/licenses/lgpl.html + (See Appendix B) + + - Mozilla Public License Version 1.1 or later (the "MPL") + http://www.mozilla.org/MPL/MPL-1.1.html + (See Appendix C) + +You are not required to, but if you want to explicitly declare the +license you have chosen to be bound to when using, reproducing, +modifying and distributing this software, just include a text file +titled "legal.txt" in your version of this software, indicating your +license choice. In any case, your choice will not restrict any +recipient of your version of this software to use, reproduce, modify +and distribute this software under any of the above licenses. + +Sources of Intellectual Property Included in CKEditor +----------------------------------------------------- + +Where not otherwise indicated, all CKEditor content is authored by +CKSource engineers and consists of CKSource-owned intellectual +property. In some specific instances, CKEditor will incorporate work +done by developers outside of CKSource with their express permission. + +Trademarks +---------- + +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand +and product names are trademarks, registered trademarks or service +marks of their respective holders. + +--- + +Appendix A: The GPL License +--------------------------- + +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software-to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + +GNU GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + +NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + + +Appendix B: The LGPL License +---------------------------- + +GNU LESSER GENERAL PUBLIC LICENSE +Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software-to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages-typically libraries-of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + +GNU LESSER GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + +NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + +END OF TERMS AND CONDITIONS + + +Appendix C: The MPL License +--------------------------- + +MOZILLA PUBLIC LICENSE +Version 1.1 + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] diff --git a/src/main/webapp/ckeditor/README.md b/src/main/webapp/ckeditor/README.md new file mode 100644 index 0000000..c5a55cd --- /dev/null +++ b/src/main/webapp/ckeditor/README.md @@ -0,0 +1,39 @@ +CKEditor 4 +========== + +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +http://ckeditor.com - See LICENSE.md for license information. + +CKEditor is a text editor to be used inside web pages. It's not a replacement +for desktop text editors like Word or OpenOffice, but a component to be used as +part of web applications and websites. + +## Documentation + +The full editor documentation is available online at the following address: +http://docs.ckeditor.com + +## Installation + +Installing CKEditor is an easy task. Just follow these simple steps: + + 1. **Download** the latest version from the CKEditor website: + http://ckeditor.com. You should have already completed this step, but be + sure you have the very latest version. + 2. **Extract** (decompress) the downloaded file into the root of your website. + +**Note:** CKEditor is by default installed in the `ckeditor` folder. You can +place the files in whichever you want though. + +## Checking Your Installation + +The editor comes with a few sample pages that can be used to verify that +installation proceeded properly. Take a look at the `samples` directory. + +To test your installation, just call the following page at your website: + + http:////samples/index.html + +For example: + + http://www.example.com/ckeditor/samples/index.html diff --git a/src/main/webapp/ckeditor/adapters/jquery.js b/src/main/webapp/ckeditor/adapters/jquery.js new file mode 100644 index 0000000..3ec908b --- /dev/null +++ b/src/main/webapp/ckeditor/adapters/jquery.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(a){CKEDITOR.config.jqueryOverrideVal="undefined"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;"undefined"!=typeof a&&(a.extend(a.fn,{ckeditorGet:function(){var a=this.eq(0).data("ckeditorInstance");if(!a)throw"CKEditor is not initialized yet, use ckeditor() with a callback.";return a},ckeditor:function(g,d){if(!CKEDITOR.env.isCompatible)throw Error("The environment is incompatible.");if(!a.isFunction(g))var k=d,d=g,g=k;var i=[],d=d||{};this.each(function(){var b= +a(this),c=b.data("ckeditorInstance"),f=b.data("_ckeditorInstanceLock"),h=this,j=new a.Deferred;i.push(j.promise());if(c&&!f)g&&g.apply(c,[this]),j.resolve();else if(f)c.once("instanceReady",function(){setTimeout(function(){c.element?(c.element.$==h&&g&&g.apply(c,[h]),j.resolve()):setTimeout(arguments.callee,100)},0)},null,null,9999);else{if(d.autoUpdateElement||"undefined"==typeof d.autoUpdateElement&&CKEDITOR.config.autoUpdateElement)d.autoUpdateElementJquery=!0;d.autoUpdateElement=!1;b.data("_ckeditorInstanceLock", +!0);c=a(this).is("textarea")?CKEDITOR.replace(h,d):CKEDITOR.inline(h,d);b.data("ckeditorInstance",c);c.on("instanceReady",function(d){var e=d.editor;setTimeout(function(){if(e.element){d.removeListener();e.on("dataReady",function(){b.trigger("dataReady.ckeditor",[e])});e.on("setData",function(a){b.trigger("setData.ckeditor",[e,a.data])});e.on("getData",function(a){b.trigger("getData.ckeditor",[e,a.data])},999);e.on("destroy",function(){b.trigger("destroy.ckeditor",[e])});e.on("save",function(){a(h.form).submit(); +return!1},null,null,20);if(e.config.autoUpdateElementJquery&&b.is("textarea")&&a(h.form).length){var c=function(){b.ckeditor(function(){e.updateElement()})};a(h.form).submit(c);a(h.form).bind("form-pre-serialize",c);b.bind("destroy.ckeditor",function(){a(h.form).unbind("submit",c);a(h.form).unbind("form-pre-serialize",c)})}e.on("destroy",function(){b.removeData("ckeditorInstance")});b.removeData("_ckeditorInstanceLock");b.trigger("instanceReady.ckeditor",[e]);g&&g.apply(e,[h]);j.resolve()}else setTimeout(arguments.callee, +100)},0)},null,null,9999)}});var f=new a.Deferred;this.promise=f.promise();a.when.apply(this,i).then(function(){f.resolve()});this.editor=this.eq(0).data("ckeditorInstance");return this}}),CKEDITOR.config.jqueryOverrideVal&&(a.fn.val=CKEDITOR.tools.override(a.fn.val,function(g){return function(d){if(arguments.length){var k=this,i=[],f=this.each(function(){var b=a(this),c=b.data("ckeditorInstance");if(b.is("textarea")&&c){var f=new a.Deferred;c.setData(d,function(){f.resolve()});i.push(f.promise()); +return!0}return g.call(b,d)});if(i.length){var b=new a.Deferred;a.when.apply(this,i).done(function(){b.resolveWith(k)});return b.promise()}return f}var f=a(this).eq(0),c=f.data("ckeditorInstance");return f.is("textarea")&&c?c.getData():g.call(f)}})))})(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/build-config.js b/src/main/webapp/ckeditor/build-config.js new file mode 100644 index 0000000..4245ce6 --- /dev/null +++ b/src/main/webapp/ckeditor/build-config.js @@ -0,0 +1,175 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +/** + * This file was added automatically by CKEditor builder. + * You may re-use it at any time to build CKEditor again. + * + * If you would like to build CKEditor online again + * (for example to upgrade), visit one the following links: + * + * (1) http://ckeditor.com/builder + * Visit online builder to build CKEditor from scratch. + * + * (2) http://ckeditor.com/builder/e6b8a045f8f984a69463975ca3e6524a + * Visit online builder to build CKEditor, starting with the same setup as before. + * + * (3) http://ckeditor.com/builder/download/e6b8a045f8f984a69463975ca3e6524a + * Straight download link to the latest version of CKEditor (Optimized) with the same setup as before. + * + * NOTE: + * This file is not used by CKEditor, you may remove it. + * Changing this file will not change your CKEditor configuration. + */ + +var CKBUILDER_CONFIG = { + skin: 'moono', + preset: 'full', + ignore: [ + '.bender', + '.DS_Store', + '.gitignore', + '.gitattributes', + '.idea', + '.mailmap', + 'bender.js', + 'bender-err.log', + 'bender-out.log', + 'dev', + 'node_modules', + 'package.json', + 'README.md', + 'tests' + ], + plugins : { + 'a11yhelp' : 1, + 'about' : 1, + 'basicstyles' : 1, + 'bidi' : 1, + 'blockquote' : 1, + 'clipboard' : 1, + 'colorbutton' : 1, + 'colordialog' : 1, + 'contextmenu' : 1, + 'dialogadvtab' : 1, + 'div' : 1, + 'elementspath' : 1, + 'enterkey' : 1, + 'entities' : 1, + 'filebrowser' : 1, + 'find' : 1, + 'flash' : 1, + 'floatingspace' : 1, + 'font' : 1, + 'format' : 1, + 'forms' : 1, + 'horizontalrule' : 1, + 'htmlwriter' : 1, + 'iframe' : 1, + 'image' : 1, + 'indentblock' : 1, + 'indentlist' : 1, + 'justify' : 1, + 'language' : 1, + 'link' : 1, + 'list' : 1, + 'liststyle' : 1, + 'magicline' : 1, + 'maximize' : 1, + 'newpage' : 1, + 'pagebreak' : 1, + 'pastefromword' : 1, + 'pastetext' : 1, + 'preview' : 1, + 'print' : 1, + 'removeformat' : 1, + 'resize' : 1, + 'save' : 1, + 'scayt' : 1, + 'selectall' : 1, + 'showblocks' : 1, + 'showborders' : 1, + 'smiley' : 1, + 'sourcearea' : 1, + 'specialchar' : 1, + 'stylescombo' : 1, + 'tab' : 1, + 'table' : 1, + 'tabletools' : 1, + 'templates' : 1, + 'toolbar' : 1, + 'undo' : 1, + 'wsc' : 1, + 'wysiwygarea' : 1 + }, + languages : { + 'af' : 1, + 'ar' : 1, + 'bg' : 1, + 'bn' : 1, + 'bs' : 1, + 'ca' : 1, + 'cs' : 1, + 'cy' : 1, + 'da' : 1, + 'de' : 1, + 'el' : 1, + 'en' : 1, + 'en-au' : 1, + 'en-ca' : 1, + 'en-gb' : 1, + 'eo' : 1, + 'es' : 1, + 'et' : 1, + 'eu' : 1, + 'fa' : 1, + 'fi' : 1, + 'fo' : 1, + 'fr' : 1, + 'fr-ca' : 1, + 'gl' : 1, + 'gu' : 1, + 'he' : 1, + 'hi' : 1, + 'hr' : 1, + 'hu' : 1, + 'id' : 1, + 'is' : 1, + 'it' : 1, + 'ja' : 1, + 'ka' : 1, + 'km' : 1, + 'ko' : 1, + 'ku' : 1, + 'lt' : 1, + 'lv' : 1, + 'mk' : 1, + 'mn' : 1, + 'ms' : 1, + 'nb' : 1, + 'nl' : 1, + 'no' : 1, + 'pl' : 1, + 'pt' : 1, + 'pt-br' : 1, + 'ro' : 1, + 'ru' : 1, + 'si' : 1, + 'sk' : 1, + 'sl' : 1, + 'sq' : 1, + 'sr' : 1, + 'sr-latn' : 1, + 'sv' : 1, + 'th' : 1, + 'tr' : 1, + 'tt' : 1, + 'ug' : 1, + 'uk' : 1, + 'vi' : 1, + 'zh' : 1, + 'zh-cn' : 1 + } +}; \ No newline at end of file diff --git a/src/main/webapp/ckeditor/ckeditor.js b/src/main/webapp/ckeditor/ckeditor.js new file mode 100644 index 0000000..9841154 --- /dev/null +++ b/src/main/webapp/ckeditor/ckeditor.js @@ -0,0 +1,1007 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,e={timestamp:"E7KD",version:"4.4.4",revision:"1ba5105",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var f=window.CKEDITOR_BASEPATH||"";if(!f)for(var d=document.getElementsByTagName("script"),c=0;c=0;y--)if(n[y].priority<=e){n.splice(y+1,0,l);return{removeListener:h}}n.unshift(l)}return{removeListener:h}}, +once:function(){var a=arguments[1];arguments[1]=function(f){f.removeListener();return a.apply(this,arguments)};return this.on.apply(this,arguments)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,f=function(){a=1},d=0,b=function(){d=1};return function(j,l,h){var n=e(this)[j],j=a,t=d;a=d=0;if(n){var y=n.listeners;if(y.length)for(var y=y.slice(0),z,o=0;o=0&&d.listeners.splice(b,1)}},removeAllListeners:function(){var a=e(this),f;for(f in a)delete a[f]},hasListeners:function(a){return(a=e(this)[a])&&a.listeners.length>0}}}()); +CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fire.call(this,a,e,this)},CKEDITOR.editor.prototype.fireOnce=function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fireOnce.call(this,a,e,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)); +CKEDITOR.env||(CKEDITOR.env=function(){var a=navigator.userAgent.toLowerCase(),e={ie:a.indexOf("trident/")>-1,webkit:a.indexOf(" applewebkit/")>-1,air:a.indexOf(" adobeair/")>-1,mac:a.indexOf("macintosh")>-1,quirks:document.compatMode=="BackCompat"&&(!document.documentMode||document.documentMode<10),mobile:a.indexOf("mobile")>-1,iOS:/(ipad|iphone|ipod)/.test(a),isCustomDomain:function(){if(!this.ie)return false;var a=document.domain,d=window.location.hostname;return a!=d&&a!="["+d+"]"},secure:location.protocol== +"https:"};e.gecko=navigator.product=="Gecko"&&!e.webkit&&!e.ie;if(e.webkit)a.indexOf("chrome")>-1?e.chrome=true:e.safari=true;var b=0;if(e.ie){b=e.quirks||!document.documentMode?parseFloat(a.match(/msie (\d+)/)[1]):document.documentMode;e.ie9Compat=b==9;e.ie8Compat=b==8;e.ie7Compat=b==7;e.ie6Compat=b<7||e.quirks}if(e.gecko){var c=a.match(/rv:([\d\.]+)/);if(c){c=c[1].split(".");b=c[0]*1E4+(c[1]||0)*100+(c[2]||0)*1}}e.air&&(b=parseFloat(a.match(/ adobeair\/(\d+)/)[1]));e.webkit&&(b=parseFloat(a.match(/ applewebkit\/(\d+)/)[1])); +e.version=b;e.isCompatible=e.iOS&&b>=534||!e.mobile&&(e.ie&&b>6||e.gecko&&b>=2E4||e.air&&b>=1||e.webkit&&b>=522||false);e.hidpi=window.devicePixelRatio>=2;e.needsBrFiller=e.gecko||e.webkit||e.ie&&b>10;e.needsNbspFiller=e.ie&&b<11;e.cssClass="cke_browser_"+(e.ie?"ie":e.gecko?"gecko":e.webkit?"webkit":"unknown");if(e.quirks)e.cssClass=e.cssClass+" cke_browser_quirks";if(e.ie)e.cssClass=e.cssClass+(" cke_browser_ie"+(e.quirks?"6 cke_browser_iequirks":e.version));if(e.air)e.cssClass=e.cssClass+" cke_browser_air"; +if(e.iOS)e.cssClass=e.cssClass+" cke_browser_ios";if(e.hidpi)e.cssClass=e.cssClass+" cke_hidpi";return e}()); +"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR);CKEDITOR.loadFullCore=function(){if(CKEDITOR.status!="basic_ready")CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var a=document.createElement("script");a.type="text/javascript";a.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(a)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(a){(this._.pending||(this._.pending=[])).push(a)};(function(){CKEDITOR.domReady(function(){var a= +CKEDITOR.loadFullCore,e=CKEDITOR.loadFullCoreTimeout;if(a){CKEDITOR.status="basic_ready";a&&a._load?a():e&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},e*1E3)}})})();CKEDITOR.status="basic_loaded"}();CKEDITOR.dom={}; +(function(){var a=[],e=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",b=/&/g,c=/>/g,f=/"+f+""):d.push('');return d.join("")}, +htmlEncode:function(a){return(""+a).replace(b,"&").replace(c,">").replace(f,"<")},htmlDecode:function(a){return a.replace(g,"&").replace(j,">").replace(l,"<")},htmlEncodeAttr:function(a){return a.replace(d,""").replace(f,"<").replace(c,">")},htmlDecodeAttr:function(a){return a.replace(h,'"').replace(l,"<").replace(j,">")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},override:function(a,f){var d=f(a);d.prototype= +a.prototype;return d},setTimeout:function(a,f,d,b,c){c||(c=window);d||(d=c);return c.setTimeout(function(){b?a.apply(d,[].concat(b)):a.apply(d)},f||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(f){return f.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(f){return f.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(f){return f.replace(a,"")}}(),indexOf:function(a,f){if(typeof f=="function")for(var d=0,b=a.length;d=0?a[d]:null},bind:function(a,f){return function(){return a.apply(f,arguments)}},createClass:function(a){var f=a.$,d=a.base,b=a.privates||a._,c=a.proto,a=a.statics;!f&&(f=function(){d&&this.base.apply(this,arguments)});if(b)var e=f,f=function(){var a=this._||(this._={}),f;for(f in b){var d=b[f];a[f]=typeof d=="function"?CKEDITOR.tools.bind(d,this):d}e.apply(this,arguments)};if(d){f.prototype= +this.prototypedCopy(d.prototype);f.prototype.constructor=f;f.base=d;f.baseProto=d.prototype;f.prototype.base=function(){this.base=d.prototype.base;d.apply(this,arguments);this.base=arguments.callee}}c&&this.extend(f.prototype,c,true);a&&this.extend(f,a,true);return f},addFunction:function(f,d){return a.push(function(){return f.apply(d||this,arguments)})-1},removeFunction:function(f){a[f]=null},callFunction:function(f){var d=a[f];return d&&d.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a= +/^-?\d+\.?\d*px$/,f;return function(d){f=CKEDITOR.tools.trim(d+"")+"px";return a.test(f)?f:d||""}}(),convertToPx:function(){var a;return function(f){if(!a){a=CKEDITOR.dom.element.createFromHtml('
',CKEDITOR.document);CKEDITOR.document.getBody().append(a)}if(!/%$/.test(f)){a.setStyle("width",f);return a.$.clientWidth}return f}}(),repeat:function(a,f){return Array(f+1).join(a)},tryThese:function(){for(var a, +f=0,d=arguments.length;f8)&&e)a=e+":"+a;return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0]; +return a=a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),true)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.ie&&(a=a.replace(/(?:^\s*]*?>)|^/i,'$&\n diff --git a/src/main/webapp/ckeditor/plugins/scayt/LICENSE.md b/src/main/webapp/ckeditor/plugins/scayt/LICENSE.md new file mode 100644 index 0000000..610c807 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/scayt/LICENSE.md @@ -0,0 +1,28 @@ +Software License Agreement +========================== + +**CKEditor SCAYT Plugin** +Copyright © 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your choice: + +* GNU General Public License Version 2 or later (the "GPL"): + http://www.gnu.org/licenses/gpl.html + +* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): + http://www.gnu.org/licenses/lgpl.html + +* Mozilla Public License Version 1.1 or later (the "MPL"): + http://www.mozilla.org/MPL/MPL-1.1.html + +You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. + +Sources of Intellectual Property Included in this plugin +-------------------------------------------------------- + +Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. + +Trademarks +---------- + +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. diff --git a/src/main/webapp/ckeditor/plugins/scayt/README.md b/src/main/webapp/ckeditor/plugins/scayt/README.md new file mode 100644 index 0000000..1b3de25 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/scayt/README.md @@ -0,0 +1,25 @@ +CKEditor SCAYT Plugin +===================== + +This plugin brings Spell Check As You Type (SCAYT) into up to CKEditor 4+. + +SCAYT is a "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. + +Installation +------------ + +1. Clone/copy this repository contents in a new "plugins/scayt" folder in your CKEditor installation. +2. Enable the "scayt" plugin in the CKEditor configuration file (config.js): + + config.extraPlugins = 'scayt'; + +That's all. SCAYT will appear on the editor toolbar and will be ready to use. + +License +------- + +Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). + +See LICENSE.md for more information. + +Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). diff --git a/src/main/webapp/ckeditor/plugins/scayt/dialogs/options.js b/src/main/webapp/ckeditor/plugins/scayt/dialogs/options.js new file mode 100644 index 0000000..aec9a1c --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/scayt/dialogs/options.js @@ -0,0 +1,17 @@ +CKEDITOR.dialog.add("scaytDialog",function(f){var g=f.scayt,k='

'+g.getLocal("version")+g.getVersion()+"

"+g.getLocal("text_copyrights")+"

",l=CKEDITOR.document,i={isChanged:function(){return null===this.newLang||this.currentLang===this.newLang?!1:!0},currentLang:g.getLang(),newLang:null,reset:function(){this.currentLang=g.getLang();this.newLang=null},id:"lang"},k=[{id:"options",label:g.getLocal("tab_options"),onShow:function(){},elements:[{type:"vbox", +id:"scaytOptions",children:function(){var a=g.getApplicationConfig(),e=[],b={"ignore-all-caps-words":"label_allCaps","ignore-domain-names":"label_ignoreDomainNames","ignore-words-with-mixed-cases":"label_mixedCase","ignore-words-with-numbers":"label_mixedWithDigits"},d;for(d in a){var c={type:"checkbox"};c.id=d;c.label=g.getLocal(b[d]);e.push(c)}return e}(),onShow:function(){this.getChild();for(var a=f.scayt,e=0;e
',onShow:function(){var a=f.scayt.getLang();l.getById("scaytLang_"+a).$.checked=!0}}]}]},{id:"dictionaries",label:g.getLocal("tab_dictionaries"), +elements:[{type:"vbox",id:"rightCol_col__left",children:[{type:"html",id:"dictionaryNote",html:""},{type:"text",id:"dictionaryName",label:g.getLocal("label_fieldNameDic")||"Dictionary name",onShow:function(a){var e=a.sender,b=f.scayt;setTimeout(function(){e.getContentElement("dictionaries","dictionaryNote").getElement().setText("");null!=b.getUserDictionaryName()&&""!=b.getUserDictionaryName()&&e.getContentElement("dictionaries","dictionaryName").setValue(b.getUserDictionaryName())},0)}},{type:"hbox", +id:"notExistDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"createDic",label:g.getLocal("btn_createDic"),title:g.getLocal("btn_createDic"),onClick:function(){var a=this.getDialog(),e=j,b=f.scayt,d=a.getContentElement("dictionaries","dictionaryName").getValue();b.createUserDictionary(d,function(c){c.error||e.toggleDictionaryButtons.call(a,!0);c.dialog=a;c.command="create";c.name=d;f.fire("scaytUserDictionaryAction",c)},function(c){c.dialog=a;c.command="create"; +c.name=d;f.fire("scaytUserDictionaryActionError",c)})}},{type:"button",id:"restoreDic",label:g.getLocal("btn_restoreDic"),title:g.getLocal("btn_restoreDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=j,d=a.getContentElement("dictionaries","dictionaryName").getValue();e.restoreUserDictionary(d,function(c){c.dialog=a;c.error||b.toggleDictionaryButtons.call(a,!0);c.command="restore";c.name=d;f.fire("scaytUserDictionaryAction",c)},function(c){c.dialog=a;c.command="restore";c.name=d;f.fire("scaytUserDictionaryActionError", +c)})}}]},{type:"hbox",id:"existDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"removeDic",label:g.getLocal("btn_deleteDic"),title:g.getLocal("btn_deleteDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=j,d=a.getContentElement("dictionaries","dictionaryName"),c=d.getValue();e.removeUserDictionary(c,function(e){d.setValue("");e.error||b.toggleDictionaryButtons.call(a,!1);e.dialog=a;e.command="remove";e.name=c;f.fire("scaytUserDictionaryAction",e)},function(b){b.dialog= +a;b.command="remove";b.name=c;f.fire("scaytUserDictionaryActionError",b)})}},{type:"button",id:"renameDic",label:g.getLocal("btn_renameDic"),title:g.getLocal("btn_renameDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=a.getContentElement("dictionaries","dictionaryName").getValue();e.renameUserDictionary(b,function(d){d.dialog=a;d.command="rename";d.name=b;f.fire("scaytUserDictionaryAction",d)},function(d){d.dialog=a;d.command="rename";d.name=b;f.fire("scaytUserDictionaryActionError",d)})}}]}, +{type:"html",id:"dicInfo",html:'
'+g.getLocal("text_descriptionDic")+"
"}]}]},{id:"about",label:g.getLocal("tab_about"),elements:[{type:"html",id:"about",style:"margin: 5px 5px;",html:'
'+k+"
"}]}];f.on("scaytUserDictionaryAction",function(a){var e=a.data.dialog,b=e.getContentElement("dictionaries","dictionaryNote").getElement(),d=a.editor.scayt,c;void 0===a.data.error?(c=d.getLocal("message_success_"+ +a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c),SCAYT.$(b.$).css({color:"blue"})):(""===a.data.name?b.setText(d.getLocal("message_info_emptyDic")):(c=d.getLocal("message_error_"+a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c)),SCAYT.$(b.$).css({color:"red"}),null!=d.getUserDictionaryName()&&""!=d.getUserDictionaryName()?e.getContentElement("dictionaries","dictionaryName").setValue(d.getUserDictionaryName()):e.getContentElement("dictionaries","dictionaryName").setValue(""))}); +f.on("scaytUserDictionaryActionError",function(a){var e=a.data.dialog,b=e.getContentElement("dictionaries","dictionaryNote").getElement(),d=a.editor.scayt,c;""===a.data.name?b.setText(d.getLocal("message_info_emptyDic")):(c=d.getLocal("message_error_"+a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c));SCAYT.$(b.$).css({color:"red"});null!=d.getUserDictionaryName()&&""!=d.getUserDictionaryName()?e.getContentElement("dictionaries","dictionaryName").setValue(d.getUserDictionaryName()): +e.getContentElement("dictionaries","dictionaryName").setValue("")});var j={title:g.getLocal("text_title"),resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:340,minHeight:260,onLoad:function(){if(0!=f.config.scayt_uiTabs[1]){var a=j,e=a.getLangBoxes.call(this);e.getParent().setStyle("white-space","normal");a.renderLangList(e);this.definition.minWidth=this.getSize().width;this.resize(this.definition.minWidth,this.definition.minHeight)}},onCancel:function(){i.reset()},onHide:function(){f.unlockSelection()}, +onShow:function(){f.fire("scaytDialogShown",this);if(0!=f.config.scayt_uiTabs[2]){var a=f.scayt,e=this.getContentElement("dictionaries","dictionaryName"),b=this.getContentElement("dictionaries","existDic").getElement().getParent(),d=this.getContentElement("dictionaries","notExistDic").getElement().getParent();b.hide();d.hide();null!=a.getUserDictionaryName()&&""!=a.getUserDictionaryName()?(this.getContentElement("dictionaries","dictionaryName").setValue(a.getUserDictionaryName()),b.show()):(e.setValue(""), +d.show())}},onOk:function(){var a=j,e=f.scayt;this.getContentElement("options","scaytOptions");a=a.getChangedOption.call(this);e.commitOption({changedOptions:a})},toggleDictionaryButtons:function(a){var e=this.getContentElement("dictionaries","existDic").getElement().getParent(),b=this.getContentElement("dictionaries","notExistDic").getElement().getParent();a?(e.show(),b.hide()):(e.hide(),b.show())},getChangedOption:function(){var a={};if(1==f.config.scayt_uiTabs[0])for(var e=this.getContentElement("options", +"scaytOptions").getChild(),b=0;b'),g=new CKEDITOR.dom.element("label"),h=f.scayt;b.setStyles({"white-space":"normal",position:"relative"}); +c.on("click",function(a){i.newLang=a.sender.getValue()});g.appendText(a);g.setAttribute("for",d);b.append(c);b.append(g);e===h.getLang()&&(c.setAttribute("checked",!0),c.setAttribute("defaultChecked","defaultChecked"));return b},renderLangList:function(a){var e=a.find("#left-col-"+f.name).getItem(0),a=a.find("#right-col-"+f.name).getItem(0),b=g.getLangList(),d={},c=[],i=0,h;for(h in b.ltr)d[h]=b.ltr[h];for(h in b.rtl)d[h]=b.rtl[h];for(h in d)c.push([h,d[h]]);c.sort(function(a,b){var c=0;a[1]>b[1]? +c=1:a[1]'+a.options+"",'"],l=h.length,a=0;a');var m="cke_smile_label_"+a+"_"+CKEDITOR.tools.getNextNumber();d.push('");a%g==g-1&&d.push("")}if(a");d.push("")}d.push("
"); +e={type:"html",id:"smileySelector",html:d.join(""),onLoad:function(a){i=a.sender},focus:function(){var a=this;setTimeout(function(){a.getElement().getElementsByTag("a").getItem(0).focus()},0)},onClick:k,style:"width: 100%; border-collapse: separate;"};return{title:f.lang.smiley.title,minWidth:270,minHeight:120,contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[e]}],buttons:[CKEDITOR.dialog.cancelButton]}}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/angel_smile.gif b/src/main/webapp/ckeditor/plugins/smiley/images/angel_smile.gif new file mode 100644 index 0000000..e7daebc Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/angel_smile.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/angel_smile.png b/src/main/webapp/ckeditor/plugins/smiley/images/angel_smile.png new file mode 100644 index 0000000..39a85c3 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/angel_smile.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/angry_smile.gif b/src/main/webapp/ckeditor/plugins/smiley/images/angry_smile.gif new file mode 100644 index 0000000..a5890f3 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/angry_smile.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/angry_smile.png b/src/main/webapp/ckeditor/plugins/smiley/images/angry_smile.png new file mode 100644 index 0000000..dd07d3e Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/angry_smile.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/broken_heart.gif b/src/main/webapp/ckeditor/plugins/smiley/images/broken_heart.gif new file mode 100644 index 0000000..0b822cd Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/broken_heart.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/broken_heart.png b/src/main/webapp/ckeditor/plugins/smiley/images/broken_heart.png new file mode 100644 index 0000000..775146f Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/broken_heart.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/confused_smile.gif b/src/main/webapp/ckeditor/plugins/smiley/images/confused_smile.gif new file mode 100644 index 0000000..9587194 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/confused_smile.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/confused_smile.png b/src/main/webapp/ckeditor/plugins/smiley/images/confused_smile.png new file mode 100644 index 0000000..d69a6f9 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/confused_smile.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/cry_smile.gif b/src/main/webapp/ckeditor/plugins/smiley/images/cry_smile.gif new file mode 100644 index 0000000..b513342 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/cry_smile.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/cry_smile.png b/src/main/webapp/ckeditor/plugins/smiley/images/cry_smile.png new file mode 100644 index 0000000..dd610b8 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/cry_smile.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/devil_smile.gif b/src/main/webapp/ckeditor/plugins/smiley/images/devil_smile.gif new file mode 100644 index 0000000..9b2a100 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/devil_smile.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/devil_smile.png b/src/main/webapp/ckeditor/plugins/smiley/images/devil_smile.png new file mode 100644 index 0000000..63a908e Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/devil_smile.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/embaressed_smile.gif b/src/main/webapp/ckeditor/plugins/smiley/images/embaressed_smile.gif new file mode 100644 index 0000000..b64a58b Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/embaressed_smile.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/embarrassed_smile.gif b/src/main/webapp/ckeditor/plugins/smiley/images/embarrassed_smile.gif new file mode 100644 index 0000000..b64a58b Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/embarrassed_smile.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/embarrassed_smile.png b/src/main/webapp/ckeditor/plugins/smiley/images/embarrassed_smile.png new file mode 100644 index 0000000..f01cdf3 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/embarrassed_smile.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/envelope.gif b/src/main/webapp/ckeditor/plugins/smiley/images/envelope.gif new file mode 100644 index 0000000..f8ffc54 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/envelope.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/envelope.png b/src/main/webapp/ckeditor/plugins/smiley/images/envelope.png new file mode 100644 index 0000000..b4180c5 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/envelope.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/heart.gif b/src/main/webapp/ckeditor/plugins/smiley/images/heart.gif new file mode 100644 index 0000000..77e0fe8 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/heart.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/heart.png b/src/main/webapp/ckeditor/plugins/smiley/images/heart.png new file mode 100644 index 0000000..a5335bb Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/heart.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/kiss.gif b/src/main/webapp/ckeditor/plugins/smiley/images/kiss.gif new file mode 100644 index 0000000..49f31ab Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/kiss.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/kiss.png b/src/main/webapp/ckeditor/plugins/smiley/images/kiss.png new file mode 100644 index 0000000..4f5f0a5 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/kiss.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/lightbulb.gif b/src/main/webapp/ckeditor/plugins/smiley/images/lightbulb.gif new file mode 100644 index 0000000..73f2e5a Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/lightbulb.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/lightbulb.png b/src/main/webapp/ckeditor/plugins/smiley/images/lightbulb.png new file mode 100644 index 0000000..56c8137 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/lightbulb.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/omg_smile.gif b/src/main/webapp/ckeditor/plugins/smiley/images/omg_smile.gif new file mode 100644 index 0000000..abd2a86 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/omg_smile.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/omg_smile.png b/src/main/webapp/ckeditor/plugins/smiley/images/omg_smile.png new file mode 100644 index 0000000..cbbb106 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/omg_smile.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/regular_smile.gif b/src/main/webapp/ckeditor/plugins/smiley/images/regular_smile.gif new file mode 100644 index 0000000..de7f1ef Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/regular_smile.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/regular_smile.png b/src/main/webapp/ckeditor/plugins/smiley/images/regular_smile.png new file mode 100644 index 0000000..786b200 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/regular_smile.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/sad_smile.gif b/src/main/webapp/ckeditor/plugins/smiley/images/sad_smile.gif new file mode 100644 index 0000000..ee7810e Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/sad_smile.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/sad_smile.png b/src/main/webapp/ckeditor/plugins/smiley/images/sad_smile.png new file mode 100644 index 0000000..1ae435c Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/sad_smile.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/shades_smile.gif b/src/main/webapp/ckeditor/plugins/smiley/images/shades_smile.gif new file mode 100644 index 0000000..11fc90f Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/shades_smile.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/shades_smile.png b/src/main/webapp/ckeditor/plugins/smiley/images/shades_smile.png new file mode 100644 index 0000000..9e68d5a Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/shades_smile.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/teeth_smile.gif b/src/main/webapp/ckeditor/plugins/smiley/images/teeth_smile.gif new file mode 100644 index 0000000..a950b43 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/teeth_smile.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/teeth_smile.png b/src/main/webapp/ckeditor/plugins/smiley/images/teeth_smile.png new file mode 100644 index 0000000..c7d2fd4 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/teeth_smile.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_down.gif b/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_down.gif new file mode 100644 index 0000000..c01f763 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_down.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_down.png b/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_down.png new file mode 100644 index 0000000..a6bb532 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_down.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_up.gif b/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_up.gif new file mode 100644 index 0000000..0f42774 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_up.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_up.png b/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_up.png new file mode 100644 index 0000000..6ea7859 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_up.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/tongue_smile.gif b/src/main/webapp/ckeditor/plugins/smiley/images/tongue_smile.gif new file mode 100644 index 0000000..369b435 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/tongue_smile.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/tongue_smile.png b/src/main/webapp/ckeditor/plugins/smiley/images/tongue_smile.png new file mode 100644 index 0000000..5bee4c0 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/tongue_smile.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/tounge_smile.gif b/src/main/webapp/ckeditor/plugins/smiley/images/tounge_smile.gif new file mode 100644 index 0000000..369b435 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/tounge_smile.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif b/src/main/webapp/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif new file mode 100644 index 0000000..2cc81c1 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png b/src/main/webapp/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png new file mode 100644 index 0000000..bebf74d Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/wink_smile.gif b/src/main/webapp/ckeditor/plugins/smiley/images/wink_smile.gif new file mode 100644 index 0000000..07cad31 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/wink_smile.gif differ diff --git a/src/main/webapp/ckeditor/plugins/smiley/images/wink_smile.png b/src/main/webapp/ckeditor/plugins/smiley/images/wink_smile.png new file mode 100644 index 0000000..805da96 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/smiley/images/wink_smile.png differ diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt new file mode 100644 index 0000000..8a4ef1f --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt @@ -0,0 +1,20 @@ +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license + +cs.js Found: 118 Missing: 0 +cy.js Found: 118 Missing: 0 +de.js Found: 118 Missing: 0 +el.js Found: 16 Missing: 102 +eo.js Found: 118 Missing: 0 +et.js Found: 31 Missing: 87 +fa.js Found: 24 Missing: 94 +fi.js Found: 23 Missing: 95 +fr.js Found: 118 Missing: 0 +hr.js Found: 23 Missing: 95 +it.js Found: 118 Missing: 0 +nb.js Found: 118 Missing: 0 +nl.js Found: 118 Missing: 0 +no.js Found: 118 Missing: 0 +tr.js Found: 118 Missing: 0 +ug.js Found: 39 Missing: 79 +zh-cn.js Found: 118 Missing: 0 diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ar.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ar.js new file mode 100644 index 0000000..acb6c92 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ar.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ar",{euro:"رمز اليورو",lsquo:"علامة تنصيص فردية علي اليسار",rsquo:"علامة تنصيص فردية علي اليمين",ldquo:"علامة تنصيص مزدوجة علي اليسار",rdquo:"علامة تنصيص مزدوجة علي اليمين",ndash:"En dash",mdash:"Em dash",iexcl:"علامة تعجب مقلوبة",cent:"رمز السنت",pound:"رمز الاسترليني",curren:"رمز العملة",yen:"رمز الين",brvbar:"شريط مقطوع",sect:"رمز القسم",uml:"Diaeresis",copy:"علامة حقوق الطبع",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"ليست علامة",reg:"علامة مسجّلة",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"علامة الإستفهام غير صحيحة",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/bg.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/bg.js new file mode 100644 index 0000000..0bf8749 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/bg.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","bg",{euro:"Евро знак",lsquo:"Лява маркировка за цитат",rsquo:"Дясна маркировка за цитат",ldquo:"Лява двойна кавичка за цитат",rdquo:"Дясна двойна кавичка за цитат",ndash:"\\\\",mdash:"/",iexcl:"Обърната питанка",cent:"Знак за цент",pound:"Знак за паунд",curren:"Валутен знак",yen:"Знак за йена",brvbar:"Прекъсната линия",sect:"Знак за секция",uml:"Diaeresis",copy:"Знак за Copyright",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ca.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ca.js new file mode 100644 index 0000000..e650437 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ca.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ca",{euro:"Símbol d'euro",lsquo:"Signe de cometa simple esquerra",rsquo:"Signe de cometa simple dreta",ldquo:"Signe de cometa doble esquerra",rdquo:"Signe de cometa doble dreta",ndash:"Guió",mdash:"Guió baix",iexcl:"Signe d'exclamació inversa",cent:"Símbol de percentatge",pound:"Símbol de lliura",curren:"Símbol de moneda",yen:"Símbol de Yen",brvbar:"Barra trencada",sect:"Símbol de secció",uml:"Dièresi",copy:"Símbol de Copyright",ordf:"Indicador ordinal femení", +laquo:"Signe de cometes angulars esquerra",not:"Símbol de negació",reg:"Símbol registrat",macr:"Macron",deg:"Símbol de grau",sup2:"Superíndex dos",sup3:"Superíndex tres",acute:"Accent agut",micro:"Símbol de micro",para:"Símbol de calderó",middot:"Punt volat",cedil:"Ce trencada",sup1:"Superíndex u",ordm:"Indicador ordinal masculí",raquo:"Signe de cometes angulars dreta",frac14:"Fracció vulgar un quart",frac12:"Fracció vulgar una meitat",frac34:"Fracció vulgar tres quarts",iquest:"Símbol d'interrogació invertit", +Agrave:"Lletra majúscula llatina A amb accent greu",Aacute:"Lletra majúscula llatina A amb accent agut",Acirc:"Lletra majúscula llatina A amb circumflex",Atilde:"Lletra majúscula llatina A amb titlla",Auml:"Lletra majúscula llatina A amb dièresi",Aring:"Lletra majúscula llatina A amb anell superior",AElig:"Lletra majúscula llatina Æ",Ccedil:"Lletra majúscula llatina C amb ce trencada",Egrave:"Lletra majúscula llatina E amb accent greu",Eacute:"Lletra majúscula llatina E amb accent agut",Ecirc:"Lletra majúscula llatina E amb circumflex", +Euml:"Lletra majúscula llatina E amb dièresi",Igrave:"Lletra majúscula llatina I amb accent greu",Iacute:"Lletra majúscula llatina I amb accent agut",Icirc:"Lletra majúscula llatina I amb circumflex",Iuml:"Lletra majúscula llatina I amb dièresi",ETH:"Lletra majúscula llatina Eth",Ntilde:"Lletra majúscula llatina N amb titlla",Ograve:"Lletra majúscula llatina O amb accent greu",Oacute:"Lletra majúscula llatina O amb accent agut",Ocirc:"Lletra majúscula llatina O amb circumflex",Otilde:"Lletra majúscula llatina O amb titlla", +Ouml:"Lletra majúscula llatina O amb dièresi",times:"Símbol de multiplicació",Oslash:"Lletra majúscula llatina O amb barra",Ugrave:"Lletra majúscula llatina U amb accent greu",Uacute:"Lletra majúscula llatina U amb accent agut",Ucirc:"Lletra majúscula llatina U amb circumflex",Uuml:"Lletra majúscula llatina U amb dièresi",Yacute:"Lletra majúscula llatina Y amb accent agut",THORN:"Lletra majúscula llatina Thorn",szlig:"Lletra minúscula llatina sharp s",agrave:"Lletra minúscula llatina a amb accent greu", +aacute:"Lletra minúscula llatina a amb accent agut",acirc:"Lletra minúscula llatina a amb circumflex",atilde:"Lletra minúscula llatina a amb titlla",auml:"Lletra minúscula llatina a amb dièresi",aring:"Lletra minúscula llatina a amb anell superior",aelig:"Lletra minúscula llatina æ",ccedil:"Lletra minúscula llatina c amb ce trencada",egrave:"Lletra minúscula llatina e amb accent greu",eacute:"Lletra minúscula llatina e amb accent agut",ecirc:"Lletra minúscula llatina e amb circumflex",euml:"Lletra minúscula llatina e amb dièresi", +igrave:"Lletra minúscula llatina i amb accent greu",iacute:"Lletra minúscula llatina i amb accent agut",icirc:"Lletra minúscula llatina i amb circumflex",iuml:"Lletra minúscula llatina i amb dièresi",eth:"Lletra minúscula llatina eth",ntilde:"Lletra minúscula llatina n amb titlla",ograve:"Lletra minúscula llatina o amb accent greu",oacute:"Lletra minúscula llatina o amb accent agut",ocirc:"Lletra minúscula llatina o amb circumflex",otilde:"Lletra minúscula llatina o amb titlla",ouml:"Lletra minúscula llatina o amb dièresi", +divide:"Símbol de divisió",oslash:"Lletra minúscula llatina o amb barra",ugrave:"Lletra minúscula llatina u amb accent greu",uacute:"Lletra minúscula llatina u amb accent agut",ucirc:"Lletra minúscula llatina u amb circumflex",uuml:"Lletra minúscula llatina u amb dièresi",yacute:"Lletra minúscula llatina y amb accent agut",thorn:"Lletra minúscula llatina thorn",yuml:"Lletra minúscula llatina y amb dièresi",OElig:"Lligadura majúscula llatina OE",oelig:"Lligadura minúscula llatina oe",372:"Lletra majúscula llatina W amb circumflex", +374:"Lletra majúscula llatina Y amb circumflex",373:"Lletra minúscula llatina w amb circumflex",375:"Lletra minúscula llatina y amb circumflex",sbquo:"Signe de cita simple baixa-9",8219:"Signe de cita simple alta-invertida-9",bdquo:"Signe de cita doble baixa-9",hellip:"Punts suspensius",trade:"Símbol de marca registrada",9658:"Punter negre apuntant cap a la dreta",bull:"Vinyeta",rarr:"Fletxa cap a la dreta",rArr:"Doble fletxa cap a la dreta",hArr:"Doble fletxa esquerra dreta",diams:"Vestit negre diamant", +asymp:"Gairebé igual a"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/cs.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/cs.js new file mode 100644 index 0000000..c2b38f0 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/cs.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","cs",{euro:"Znak eura",lsquo:"Počáteční uvozovka jednoduchá",rsquo:"Koncová uvozovka jednoduchá",ldquo:"Počáteční uvozovka dvojitá",rdquo:"Koncová uvozovka dvojitá",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrácený vykřičník",cent:"Znak centu",pound:"Znak libry",curren:"Znak měny",yen:"Znak jenu",brvbar:"Přerušená svislá čára",sect:"Znak oddílu",uml:"Přehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených uvozovek vlevo", +not:"Logistický zápor",reg:"Znak registrace",macr:"Pomlčka nad",deg:"Znak stupně",sup2:"Dvojka jako horní index",sup3:"Trojka jako horní index",acute:"Čárka nad vpravo",micro:"Znak mikro",para:"Znak odstavce",middot:"Tečka uprostřed",cedil:"Ocásek vlevo",sup1:"Jednička jako horní index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených uvozovek vpravo",frac14:"Obyčejný zlomek jedna čtvrtina",frac12:"Obyčejný zlomek jedna polovina",frac34:"Obyčejný zlomek tři čtvrtiny",iquest:"Znak obráceného otazníku", +Agrave:"Velké písmeno latinky A s čárkou nad vlevo",Aacute:"Velké písmeno latinky A s čárkou nad vpravo",Acirc:"Velké písmeno latinky A s vokáněm",Atilde:"Velké písmeno latinky A s tildou",Auml:"Velké písmeno latinky A s dvěma tečkami",Aring:"Velké písmeno latinky A s kroužkem nad",AElig:"Velké písmeno latinky Ae",Ccedil:"Velké písmeno latinky C s ocáskem vlevo",Egrave:"Velké písmeno latinky E s čárkou nad vlevo",Eacute:"Velké písmeno latinky E s čárkou nad vpravo",Ecirc:"Velké písmeno latinky E s vokáněm", +Euml:"Velké písmeno latinky E s dvěma tečkami",Igrave:"Velké písmeno latinky I s čárkou nad vlevo",Iacute:"Velké písmeno latinky I s čárkou nad vpravo",Icirc:"Velké písmeno latinky I s vokáněm",Iuml:"Velké písmeno latinky I s dvěma tečkami",ETH:"Velké písmeno latinky Eth",Ntilde:"Velké písmeno latinky N s tildou",Ograve:"Velké písmeno latinky O s čárkou nad vlevo",Oacute:"Velké písmeno latinky O s čárkou nad vpravo",Ocirc:"Velké písmeno latinky O s vokáněm",Otilde:"Velké písmeno latinky O s tildou", +Ouml:"Velké písmeno latinky O s dvěma tečkami",times:"Znak násobení",Oslash:"Velké písmeno latinky O přeškrtnuté",Ugrave:"Velké písmeno latinky U s čárkou nad vlevo",Uacute:"Velké písmeno latinky U s čárkou nad vpravo",Ucirc:"Velké písmeno latinky U s vokáněm",Uuml:"Velké písmeno latinky U s dvěma tečkami",Yacute:"Velké písmeno latinky Y s čárkou nad vpravo",THORN:"Velké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s čárkou nad vlevo",aacute:"Malé písmeno latinky a s čárkou nad vpravo", +acirc:"Malé písmeno latinky a s vokáněm",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvěma tečkami",aring:"Malé písmeno latinky a s kroužkem nad",aelig:"Malé písmeno latinky ae",ccedil:"Malé písmeno latinky c s ocáskem vlevo",egrave:"Malé písmeno latinky e s čárkou nad vlevo",eacute:"Malé písmeno latinky e s čárkou nad vpravo",ecirc:"Malé písmeno latinky e s vokáněm",euml:"Malé písmeno latinky e s dvěma tečkami",igrave:"Malé písmeno latinky i s čárkou nad vlevo",iacute:"Malé písmeno latinky i s čárkou nad vpravo", +icirc:"Malé písmeno latinky i s vokáněm",iuml:"Malé písmeno latinky i s dvěma tečkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s čárkou nad vlevo",oacute:"Malé písmeno latinky o s čárkou nad vpravo",ocirc:"Malé písmeno latinky o s vokáněm",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvěma tečkami",divide:"Znak dělení",oslash:"Malé písmeno latinky o přeškrtnuté",ugrave:"Malé písmeno latinky u s čárkou nad vlevo", +uacute:"Malé písmeno latinky u s čárkou nad vpravo",ucirc:"Malé písmeno latinky u s vokáněm",uuml:"Malé písmeno latinky u s dvěma tečkami",yacute:"Malé písmeno latinky y s čárkou nad vpravo",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvěma tečkami",OElig:"Velká ligatura latinky OE",oelig:"Malá ligatura latinky OE",372:"Velké písmeno latinky W s vokáněm",374:"Velké písmeno latinky Y s vokáněm",373:"Malé písmeno latinky w s vokáněm",375:"Malé písmeno latinky y s vokáněm",sbquo:"Dolní 9 uvozovka jednoduchá", +8219:"Horní obrácená 9 uvozovka jednoduchá",bdquo:"Dolní 9 uvozovka dvojitá",hellip:"Trojtečkový úvod",trade:"Obchodní značka",9658:"Černý ukazatel směřující vpravo",bull:"Kolečko",rarr:"Šipka vpravo",rArr:"Dvojitá šipka vpravo",hArr:"Dvojitá šipka vlevo a vpravo",diams:"Černé piky",asymp:"Téměř se rovná"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/cy.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/cy.js new file mode 100644 index 0000000..77f59f6 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/cy.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","cy",{euro:"Arwydd yr Ewro",lsquo:"Dyfynnod chwith unigol",rsquo:"Dyfynnod dde unigol",ldquo:"Dyfynnod chwith dwbl",rdquo:"Dyfynnod dde dwbl",ndash:"Cysylltnod en",mdash:"Cysylltnod em",iexcl:"Ebychnod gwrthdro",cent:"Arwydd sent",pound:"Arwydd punt",curren:"Arwydd arian cyfred",yen:"Arwydd yen",brvbar:"Bar toriedig",sect:"Arwydd adran",uml:"Didolnod",copy:"Arwydd hawlfraint",ordf:"Dangosydd benywaidd",laquo:"Dyfynnod dwbl ar ongl i'r chwith",not:"Arwydd Nid", +reg:"Arwydd cofrestredig",macr:"Macron",deg:"Arwydd gradd",sup2:"Dau uwchsgript",sup3:"Tri uwchsgript",acute:"Acen ddyrchafedig",micro:"Arwydd micro",para:"Arwydd pilcrow",middot:"Dot canol",cedil:"Sedila",sup1:"Un uwchsgript",ordm:"Dangosydd gwrywaidd",raquo:"Dyfynnod dwbl ar ongl i'r dde",frac14:"Ffracsiwn cyffredin un cwarter",frac12:"Ffracsiwn cyffredin un hanner",frac34:"Ffracsiwn cyffredin tri chwarter",iquest:"Marc cwestiwn gwrthdroëdig",Agrave:"Priflythyren A Lladinaidd gydag acen ddisgynedig", +Aacute:"Priflythyren A Lladinaidd gydag acen ddyrchafedig",Acirc:"Priflythyren A Lladinaidd gydag acen grom",Atilde:"Priflythyren A Lladinaidd gyda thild",Auml:"Priflythyren A Lladinaidd gyda didolnod",Aring:"Priflythyren A Lladinaidd gyda chylch uwchben",AElig:"Priflythyren Æ Lladinaidd",Ccedil:"Priflythyren C Lladinaidd gyda sedila",Egrave:"Priflythyren E Lladinaidd gydag acen ddisgynedig",Eacute:"Priflythyren E Lladinaidd gydag acen ddyrchafedig",Ecirc:"Priflythyren E Lladinaidd gydag acen grom", +Euml:"Priflythyren E Lladinaidd gyda didolnod",Igrave:"Priflythyren I Lladinaidd gydag acen ddisgynedig",Iacute:"Priflythyren I Lladinaidd gydag acen ddyrchafedig",Icirc:"Priflythyren I Lladinaidd gydag acen grom",Iuml:"Priflythyren I Lladinaidd gyda didolnod",ETH:"Priflythyren Eth",Ntilde:"Priflythyren N Lladinaidd gyda thild",Ograve:"Priflythyren O Lladinaidd gydag acen ddisgynedig",Oacute:"Priflythyren O Lladinaidd gydag acen ddyrchafedig",Ocirc:"Priflythyren O Lladinaidd gydag acen grom",Otilde:"Priflythyren O Lladinaidd gyda thild", +Ouml:"Priflythyren O Lladinaidd gyda didolnod",times:"Arwydd lluosi",Oslash:"Priflythyren O Lladinaidd gyda strôc",Ugrave:"Priflythyren U Lladinaidd gydag acen ddisgynedig",Uacute:"Priflythyren U Lladinaidd gydag acen ddyrchafedig",Ucirc:"Priflythyren U Lladinaidd gydag acen grom",Uuml:"Priflythyren U Lladinaidd gyda didolnod",Yacute:"Priflythyren Y Lladinaidd gydag acen ddyrchafedig",THORN:"Priflythyren Thorn",szlig:"Llythyren s fach Lladinaidd siarp ",agrave:"Llythyren a fach Lladinaidd gydag acen ddisgynedig", +aacute:"Llythyren a fach Lladinaidd gydag acen ddyrchafedig",acirc:"Llythyren a fach Lladinaidd gydag acen grom",atilde:"Llythyren a fach Lladinaidd gyda thild",auml:"Llythyren a fach Lladinaidd gyda didolnod",aring:"Llythyren a fach Lladinaidd gyda chylch uwchben",aelig:"Llythyren æ fach Lladinaidd",ccedil:"Llythyren c fach Lladinaidd gyda sedila",egrave:"Llythyren e fach Lladinaidd gydag acen ddisgynedig",eacute:"Llythyren e fach Lladinaidd gydag acen ddyrchafedig",ecirc:"Llythyren e fach Lladinaidd gydag acen grom", +euml:"Llythyren e fach Lladinaidd gyda didolnod",igrave:"Llythyren i fach Lladinaidd gydag acen ddisgynedig",iacute:"Llythyren i fach Lladinaidd gydag acen ddyrchafedig",icirc:"Llythyren i fach Lladinaidd gydag acen grom",iuml:"Llythyren i fach Lladinaidd gyda didolnod",eth:"Llythyren eth fach",ntilde:"Llythyren n fach Lladinaidd gyda thild",ograve:"Llythyren o fach Lladinaidd gydag acen ddisgynedig",oacute:"Llythyren o fach Lladinaidd gydag acen ddyrchafedig",ocirc:"Llythyren o fach Lladinaidd gydag acen grom", +otilde:"Llythyren o fach Lladinaidd gyda thild",ouml:"Llythyren o fach Lladinaidd gyda didolnod",divide:"Arwydd rhannu",oslash:"Llythyren o fach Lladinaidd gyda strôc",ugrave:"Llythyren u fach Lladinaidd gydag acen ddisgynedig",uacute:"Llythyren u fach Lladinaidd gydag acen ddyrchafedig",ucirc:"Llythyren u fach Lladinaidd gydag acen grom",uuml:"Llythyren u fach Lladinaidd gyda didolnod",yacute:"Llythyren y fach Lladinaidd gydag acen ddisgynedig",thorn:"Llythyren o fach Lladinaidd gyda strôc",yuml:"Llythyren y fach Lladinaidd gyda didolnod", +OElig:"Priflythyren cwlwm OE Lladinaidd ",oelig:"Priflythyren cwlwm oe Lladinaidd ",372:"Priflythyren W gydag acen grom",374:"Priflythyren Y gydag acen grom",373:"Llythyren w fach gydag acen grom",375:"Llythyren y fach gydag acen grom",sbquo:"Dyfynnod sengl 9-isel",8219:"Dyfynnod sengl 9-uchel cildro",bdquo:"Dyfynnod dwbl 9-isel",hellip:"Coll geiriau llorweddol",trade:"Arwydd marc masnachol",9658:"Pwyntydd du i'r dde",bull:"Bwled",rarr:"Saeth i'r dde",rArr:"Saeth ddwbl i'r dde",hArr:"Saeth ddwbl i'r chwith", +diams:"Siwt diemwnt du",asymp:"Bron yn hafal iddo"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/de.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/de.js new file mode 100644 index 0000000..6b3ce87 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/de.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","de",{euro:"Euro Zeichen",lsquo:"Hochkomma links",rsquo:"Hochkomma rechts",ldquo:"Anführungszeichen links",rdquo:"Anführungszeichen rechts",ndash:"kleiner Strich",mdash:"mittlerer Strich",iexcl:"invertiertes Ausrufezeichen",cent:"Cent",pound:"Pfund",curren:"Währung",yen:"Yen",brvbar:"gestrichelte Linie",sect:"§ Zeichen",uml:"Diäresis",copy:"Copyright",ordf:"Feminine ordinal Anzeige",laquo:"Nach links zeigenden Doppel-Winkel Anführungszeichen",not:"Not-Zeichen", +reg:"Registriert",macr:"Längezeichen",deg:"Grad",sup2:"Hoch 2",sup3:"Hoch 3",acute:"Akzentzeichen ",micro:"Micro",para:"Pilcrow-Zeichen",middot:"Mittelpunkt",cedil:"Cedilla",sup1:"Hoch 1",ordm:"Männliche Ordnungszahl Anzeige",raquo:"Nach rechts zeigenden Doppel-Winkel Anführungszeichen",frac14:"ein Viertel",frac12:"Hälfte",frac34:"Dreiviertel",iquest:"Umgekehrtes Fragezeichen",Agrave:"Lateinischer Buchstabe A mit AkzentGrave",Aacute:"Lateinischer Buchstabe A mit Akutakzent",Acirc:"Lateinischer Buchstabe A mit Zirkumflex", +Atilde:"Lateinischer Buchstabe A mit Tilde",Auml:"Lateinischer Buchstabe A mit Trema",Aring:"Lateinischer Buchstabe A mit Ring oben",AElig:"Lateinischer Buchstabe Æ",Ccedil:"Lateinischer Buchstabe C mit Cedille",Egrave:"Lateinischer Buchstabe E mit AkzentGrave",Eacute:"Lateinischer Buchstabe E mit Akutakzent",Ecirc:"Lateinischer Buchstabe E mit Zirkumflex",Euml:"Lateinischer Buchstabe E Trema",Igrave:"Lateinischer Buchstabe I mit AkzentGrave",Iacute:"Lateinischer Buchstabe I mit Akutakzent",Icirc:"Lateinischer Buchstabe I mit Zirkumflex", +Iuml:"Lateinischer Buchstabe I mit Trema",ETH:"Lateinischer Buchstabe Eth",Ntilde:"Lateinischer Buchstabe N mit Tilde",Ograve:"Lateinischer Buchstabe O mit AkzentGrave",Oacute:"Lateinischer Buchstabe O mit Akutakzent",Ocirc:"Lateinischer Buchstabe O mit Zirkumflex",Otilde:"Lateinischer Buchstabe O mit Tilde",Ouml:"Lateinischer Buchstabe O mit Trema",times:"Multiplikation",Oslash:"Lateinischer Buchstabe O durchgestrichen",Ugrave:"Lateinischer Buchstabe U mit Akzentgrave",Uacute:"Lateinischer Buchstabe U mit Akutakzent", +Ucirc:"Lateinischer Buchstabe U mit Zirkumflex",Uuml:"Lateinischer Buchstabe a mit Trema",Yacute:"Lateinischer Buchstabe a mit Akzent",THORN:"Lateinischer Buchstabe mit Dorn",szlig:"Kleiner lateinischer Buchstabe scharfe s",agrave:"Kleiner lateinischer Buchstabe a mit Accent grave",aacute:"Kleiner lateinischer Buchstabe a mit Akut",acirc:"Lateinischer Buchstabe a mit Zirkumflex",atilde:"Lateinischer Buchstabe a mit Tilde",auml:"Kleiner lateinischer Buchstabe a mit Trema",aring:"Kleiner lateinischer Buchstabe a mit Ring oben", +aelig:"Lateinischer Buchstabe æ",ccedil:"Kleiner lateinischer Buchstabe c mit Cedille",egrave:"Kleiner lateinischer Buchstabe e mit Accent grave",eacute:"Kleiner lateinischer Buchstabe e mit Akut",ecirc:"Kleiner lateinischer Buchstabe e mit Zirkumflex",euml:"Kleiner lateinischer Buchstabe e mit Trema",igrave:"Kleiner lateinischer Buchstabe i mit AkzentGrave",iacute:"Kleiner lateinischer Buchstabe i mit Akzent",icirc:"Kleiner lateinischer Buchstabe i mit Zirkumflex",iuml:"Kleiner lateinischer Buchstabe i mit Trema", +eth:"Kleiner lateinischer Buchstabe eth",ntilde:"Kleiner lateinischer Buchstabe n mit Tilde",ograve:"Kleiner lateinischer Buchstabe o mit Accent grave",oacute:"Kleiner lateinischer Buchstabe o mit Akzent",ocirc:"Kleiner lateinischer Buchstabe o mit Zirkumflex",otilde:"Lateinischer Buchstabe i mit Tilde",ouml:"Kleiner lateinischer Buchstabe o mit Trema",divide:"Divisionszeichen",oslash:"Kleiner lateinischer Buchstabe o durchgestrichen",ugrave:"Kleiner lateinischer Buchstabe u mit Accent grave",uacute:"Kleiner lateinischer Buchstabe u mit Akut", +ucirc:"Kleiner lateinischer Buchstabe u mit Zirkumflex",uuml:"Kleiner lateinischer Buchstabe u mit Trema",yacute:"Kleiner lateinischer Buchstabe y mit Akut",thorn:"Kleiner lateinischer Buchstabe Dorn",yuml:"Kleiner lateinischer Buchstabe y mit Trema",OElig:"Lateinischer Buchstabe Ligatur OE",oelig:"Kleiner lateinischer Buchstabe Ligatur OE",372:"Lateinischer Buchstabe W mit Zirkumflex",374:"Lateinischer Buchstabe Y mit Zirkumflex",373:"Kleiner lateinischer Buchstabe w mit Zirkumflex",375:"Kleiner lateinischer Buchstabe y mit Zirkumflex", +sbquo:"Tiefergestelltes Komma",8219:"Rumgedrehtes Komma",bdquo:"Doppeltes Anführungszeichen unten",hellip:"horizontale Auslassungspunkte",trade:"Handelszeichen",9658:"Dreickspfeil rechts",bull:"Bullet",rarr:"Pfeil rechts",rArr:"Doppelpfeil rechts",hArr:"Doppelpfeil links",diams:"Karo",asymp:"Ungefähr"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/el.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/el.js new file mode 100644 index 0000000..e7c2a21 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/el.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","el",{euro:"Σύμβολο Ευρώ",lsquo:"Αριστερός χαρακτήρας μονού εισαγωγικού",rsquo:"Δεξιός χαρακτήρας μονού εισαγωγικού",ldquo:"Αριστερός χαρακτήρας διπλού εισαγωγικού",rdquo:"Δεξιός χαρακτήρας διπλού εισαγωγικού",ndash:"Παύλα en",mdash:"Παύλα em",iexcl:"Ανάποδο θαυμαστικό",cent:"Σύμβολο σεντ",pound:"Σύμβολο λίρας",curren:"Σύμβολο συναλλαγματικής μονάδας",yen:"Σύμβολο Γιεν",brvbar:"Σπασμένη μπάρα",sect:"Σύμβολο τμήματος",uml:"Διαίρεση",copy:"Σύμβολο πνευματικών δικαιωμάτων", +ordf:"Feminine ordinal indicator",laquo:"Αριστερός χαρακτήρας διπλού εισαγωγικού",not:"Not sign",reg:"Σύμβολο σημάτων κατατεθέν",macr:"Μακρόν",deg:"Σύμβολο βαθμού",sup2:"Εκτεθειμένο δύο",sup3:"Εκτεθειμένο τρία",acute:"Οξεία",micro:"Σύμβολο μικρού",para:"Σύμβολο παραγράφου",middot:"Μέση τελεία",cedil:"Υπογεγραμμένη",sup1:"Εκτεθειμένο ένα",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Γνήσιο κλάσμα ενός τετάρτου",frac12:"Γνήσιο κλάσμα ενός δεύτερου",frac34:"Γνήσιο κλάσμα τριών τετάρτων", +iquest:"Ανάποδο θαυμαστικό",Agrave:"Λατινικό κεφαλαίο γράμμα A με βαρεία",Aacute:"Λατινικό κεφαλαίο γράμμα A με οξεία",Acirc:"Λατινικό κεφαλαίο γράμμα A με περισπωμένη",Atilde:"Λατινικό κεφαλαίο γράμμα A με περισπωμένη",Auml:"Λατινικό κεφαλαίο γράμμα A με διαλυτικά",Aring:"Λατινικό κεφαλαίο γράμμα A με δακτύλιο επάνω",AElig:"Λατινικό κεφαλαίο γράμμα Æ",Ccedil:"Λατινικό κεφαλαίο γράμμα C με υπογεγραμμένη",Egrave:"Λατινικό κεφαλαίο γράμμα E με βαρεία",Eacute:"Λατινικό κεφαλαίο γράμμα E με οξεία",Ecirc:"Λατινικό κεφαλαίο γράμμα Ε με περισπωμένη ", +Euml:"Λατινικό κεφαλαίο γράμμα Ε με διαλυτικά",Igrave:"Λατινικό κεφαλαίο γράμμα I με βαρεία",Iacute:"Λατινικό κεφαλαίο γράμμα I με οξεία",Icirc:"Λατινικό κεφαλαίο γράμμα I με περισπωμένη",Iuml:"Λατινικό κεφαλαίο γράμμα I με διαλυτικά ",ETH:"Λατινικό κεφαλαίο γράμμα Eth",Ntilde:"Λατινικό κεφαλαίο γράμμα N με περισπωμένη",Ograve:"Λατινικό κεφαλαίο γράμμα O με βαρεία",Oacute:"Λατινικό κεφαλαίο γράμμα O με οξεία",Ocirc:"Λατινικό κεφαλαίο γράμμα O με περισπωμένη ",Otilde:"Λατινικό κεφαλαίο γράμμα O με περισπωμένη", +Ouml:"Λατινικό κεφαλαίο γράμμα O με διαλυτικά",times:"Σύμβολο πολλαπλασιασμού",Oslash:"Λατινικό κεφαλαίο γράμμα O με μολυβιά",Ugrave:"Λατινικό κεφαλαίο γράμμα U με βαρεία",Uacute:"Λατινικό κεφαλαίο γράμμα U με οξεία",Ucirc:"Λατινικό κεφαλαίο γράμμα U με περισπωμένη",Uuml:"Λατινικό κεφαλαίο γράμμα U με διαλυτικά",Yacute:"Λατινικό κεφαλαίο γράμμα Y με οξεία",THORN:"Λατινικό κεφαλαίο γράμμα Thorn",szlig:"Λατινικό μικρό γράμμα απότομο s",agrave:"Λατινικό μικρό γράμμα a με βαρεία",aacute:"Λατινικό μικρό γράμμα a με οξεία", +acirc:"Λατινικό μικρό γράμμα a με περισπωμένη",atilde:"Λατινικό μικρό γράμμα a με περισπωμένη",auml:"Λατινικό μικρό γράμμα a με διαλυτικά",aring:"Λατινικό μικρό γράμμα a με δακτύλιο πάνω",aelig:"Λατινικό μικρό γράμμα æ",ccedil:"Λατινικό μικρό γράμμα c με υπογεγραμμένη",egrave:"Λατινικό μικρό γράμμα ε με βαρεία",eacute:"Λατινικό μικρό γράμμα e με οξεία",ecirc:"Λατινικό μικρό γράμμα e με περισπωμένη",euml:"Λατινικό μικρό γράμμα e με διαλυτικά",igrave:"Λατινικό μικρό γράμμα i με βαρεία",iacute:"Λατινικό μικρό γράμμα i με οξεία", +icirc:"Λατινικό μικρό γράμμα i με περισπωμένη",iuml:"Λατινικό μικρό γράμμα i με διαλυτικά",eth:"Λατινικό μικρό γράμμα eth",ntilde:"Λατινικό μικρό γράμμα n με περισπωμένη",ograve:"Λατινικό μικρό γράμμα o με βαρεία",oacute:"Λατινικό μικρό γράμμα o με οξεία ",ocirc:"Λατινικό πεζό γράμμα o με περισπωμένη",otilde:"Λατινικό μικρό γράμμα o με περισπωμένη ",ouml:"Λατινικό μικρό γράμμα o με διαλυτικά",divide:"Σύμβολο διαίρεσης",oslash:"Λατινικό μικρό γράμμα o με περισπωμένη",ugrave:"Λατινικό μικρό γράμμα u με βαρεία", +uacute:"Λατινικό μικρό γράμμα u με οξεία",ucirc:"Λατινικό μικρό γράμμα u με περισπωμένη",uuml:"Λατινικό μικρό γράμμα u με διαλυτικά",yacute:"Λατινικό μικρό γράμμα y με οξεία",thorn:"Λατινικό μικρό γράμμα thorn",yuml:"Λατινικό μικρό γράμμα y με διαλυτικά",OElig:"Λατινικό κεφαλαίο σύμπλεγμα ΟΕ",oelig:"Λατινικό μικρό σύμπλεγμα oe",372:"Λατινικό κεφαλαίο γράμμα W με περισπωμένη",374:"Λατινικό κεφαλαίο γράμμα Y με περισπωμένη",373:"Λατινικό μικρό γράμμα w με περισπωμένη",375:"Λατινικό μικρό γράμμα y με περισπωμένη", +sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Οριζόντια αποσιωπητικά",trade:"Σύμβολο εμπορικού κατατεθέν",9658:"Μαύρος δείκτης που δείχνει προς τα δεξιά",bull:"Κουκκίδα",rarr:"Δεξί βελάκι",rArr:"Διπλό δεξί βελάκι",hArr:"Διπλό βελάκι αριστερά-δεξιά",diams:"Μαύρο διαμάντι",asymp:"Σχεδόν ίσο με"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js new file mode 100644 index 0000000..5a14786 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","en-gb",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/en.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/en.js new file mode 100644 index 0000000..26f61c2 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/en.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","en",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/eo.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/eo.js new file mode 100644 index 0000000..d44b0d2 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/eo.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","eo",{euro:"Eŭrosigno",lsquo:"Supra 6-citilo",rsquo:"Supra 9-citilo",ldquo:"Supra 66-citilo",rdquo:"Supra 99-citilo",ndash:"Streketo",mdash:"Substreko",iexcl:"Renversita krisigno",cent:"Cendosigno",pound:"Pundosigno",curren:"Monersigno",yen:"Enosigno",brvbar:"Rompita vertikala streko",sect:"Kurba paragrafo",uml:"Tremao",copy:"Kopirajtosigno",ordf:"Adjektiva numerfinaĵo",laquo:"Duobla malplio-citilo",not:"Negohoko",reg:"Registrita marko",macr:"Superstreko",deg:"Gradosigno", +sup2:"Supra indico 2",sup3:"Supra indico 3",acute:"Dekstra korno",micro:"Mikrosigno",para:"Rekta paragrafo",middot:"Meza punkto",cedil:"Zoeto",sup1:"Supra indico 1",ordm:"Substantiva numerfinaĵo",raquo:"Duobla plio-citilo",frac14:"Kvaronosigno",frac12:"Duonosigno",frac34:"Trikvaronosigno",iquest:"renversita demandosigno",Agrave:"Latina ĉeflitero A kun liva korno",Aacute:"Latina ĉeflitero A kun dekstra korno",Acirc:"Latina ĉeflitero A kun ĉapelo",Atilde:"Latina ĉeflitero A kun tildo",Auml:"Latina ĉeflitero A kun tremao", +Aring:"Latina ĉeflitero A kun superringo",AElig:"Latina ĉeflitera ligaturo Æ",Ccedil:"Latina ĉeflitero C kun zoeto",Egrave:"Latina ĉeflitero E kun liva korno",Eacute:"Latina ĉeflitero E kun dekstra korno",Ecirc:"Latina ĉeflitero E kun ĉapelo",Euml:"Latina ĉeflitero E kun tremao",Igrave:"Latina ĉeflitero I kun liva korno",Iacute:"Latina ĉeflitero I kun dekstra korno",Icirc:"Latina ĉeflitero I kun ĉapelo",Iuml:"Latina ĉeflitero I kun tremao",ETH:"Latina ĉeflitero islanda edo",Ntilde:"Latina ĉeflitero N kun tildo", +Ograve:"Latina ĉeflitero O kun liva korno",Oacute:"Latina ĉeflitero O kun dekstra korno",Ocirc:"Latina ĉeflitero O kun ĉapelo",Otilde:"Latina ĉeflitero O kun tildo",Ouml:"Latina ĉeflitero O kun tremao",times:"Multipliko",Oslash:"Latina ĉeflitero O trastrekita",Ugrave:"Latina ĉeflitero U kun liva korno",Uacute:"Latina ĉeflitero U kun dekstra korno",Ucirc:"Latina ĉeflitero U kun ĉapelo",Uuml:"Latina ĉeflitero U kun tremao",Yacute:"Latina ĉeflitero Y kun dekstra korno",THORN:"Latina ĉeflitero islanda dorno", +szlig:"Latina etlitero germana sozo (akra s)",agrave:"Latina etlitero a kun liva korno",aacute:"Latina etlitero a kun dekstra korno",acirc:"Latina etlitero a kun ĉapelo",atilde:"Latina etlitero a kun tildo",auml:"Latina etlitero a kun tremao",aring:"Latina etlitero a kun superringo",aelig:"Latina etlitera ligaturo æ",ccedil:"Latina etlitero c kun zoeto",egrave:"Latina etlitero e kun liva korno",eacute:"Latina etlitero e kun dekstra korno",ecirc:"Latina etlitero e kun ĉapelo",euml:"Latina etlitero e kun tremao", +igrave:"Latina etlitero i kun liva korno",iacute:"Latina etlitero i kun dekstra korno",icirc:"Latina etlitero i kun ĉapelo",iuml:"Latina etlitero i kun tremao",eth:"Latina etlitero islanda edo",ntilde:"Latina etlitero n kun tildo",ograve:"Latina etlitero o kun liva korno",oacute:"Latina etlitero o kun dekstra korno",ocirc:"Latina etlitero o kun ĉapelo",otilde:"Latina etlitero o kun tildo",ouml:"Latina etlitero o kun tremao",divide:"Dividosigno",oslash:"Latina etlitero o trastrekita",ugrave:"Latina etlitero u kun liva korno", +uacute:"Latina etlitero u kun dekstra korno",ucirc:"Latina etlitero u kun ĉapelo",uuml:"Latina etlitero u kun tremao",yacute:"Latina etlitero y kun dekstra korno",thorn:"Latina etlitero islanda dorno",yuml:"Latina etlitero y kun tremao",OElig:"Latina ĉeflitera ligaturo Œ",oelig:"Latina etlitera ligaturo œ",372:"Latina ĉeflitero W kun ĉapelo",374:"Latina ĉeflitero Y kun ĉapelo",373:"Latina etlitero w kun ĉapelo",375:"Latina etlitero y kun ĉapelo",sbquo:"Suba 9-citilo",8219:"Supra renversita 9-citilo", +bdquo:"Suba 99-citilo",hellip:"Tripunkto",trade:"Varmarka signo",9658:"Nigra sago dekstren",bull:"Bulmarko",rarr:"Sago dekstren",rArr:"Duobla sago dekstren",hArr:"Duobla sago maldekstren",diams:"Nigra kvadrato",asymp:"Preskaŭ egala"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/es.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/es.js new file mode 100644 index 0000000..79d437f --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/es.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","es",{euro:"Símbolo de euro",lsquo:"Comilla simple izquierda",rsquo:"Comilla simple derecha",ldquo:"Comilla doble izquierda",rdquo:"Comilla doble derecha",ndash:"Guión corto",mdash:"Guión medio largo",iexcl:"Signo de admiración invertido",cent:"Símbolo centavo",pound:"Símbolo libra",curren:"Símbolo moneda",yen:"Símbolo yen",brvbar:"Barra vertical rota",sect:"Símbolo sección",uml:"Diéresis",copy:"Signo de derechos de autor",ordf:"Indicador ordinal femenino",laquo:"Abre comillas angulares", +not:"Signo negación",reg:"Signo de marca registrada",macr:"Guión alto",deg:"Signo de grado",sup2:"Superíndice dos",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice uno",ordm:"Indicador orginal masculino",raquo:"Cierra comillas angulares",frac14:"Fracción ordinaria de un quarto",frac12:"Fracción ordinaria de una mitad",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina mayúscula con acento grave", +Aacute:"Letra A latina mayúscula con acento agudo",Acirc:"Letra A latina mayúscula con acento circunflejo",Atilde:"Letra A latina mayúscula con tilde",Auml:"Letra A latina mayúscula con diéresis",Aring:"Letra A latina mayúscula con aro arriba",AElig:"Letra Æ latina mayúscula",Ccedil:"Letra C latina mayúscula con cedilla",Egrave:"Letra E latina mayúscula con acento grave",Eacute:"Letra E latina mayúscula con acento agudo",Ecirc:"Letra E latina mayúscula con acento circunflejo",Euml:"Letra E latina mayúscula con diéresis", +Igrave:"Letra I latina mayúscula con acento grave",Iacute:"Letra I latina mayúscula con acento agudo",Icirc:"Letra I latina mayúscula con acento circunflejo",Iuml:"Letra I latina mayúscula con diéresis",ETH:"Letra Eth latina mayúscula",Ntilde:"Letra N latina mayúscula con tilde",Ograve:"Letra O latina mayúscula con acento grave",Oacute:"Letra O latina mayúscula con acento agudo",Ocirc:"Letra O latina mayúscula con acento circunflejo",Otilde:"Letra O latina mayúscula con tilde",Ouml:"Letra O latina mayúscula con diéresis", +times:"Signo de multiplicación",Oslash:"Letra O latina mayúscula con barra inclinada",Ugrave:"Letra U latina mayúscula con acento grave",Uacute:"Letra U latina mayúscula con acento agudo",Ucirc:"Letra U latina mayúscula con acento circunflejo",Uuml:"Letra U latina mayúscula con diéresis",Yacute:"Letra Y latina mayúscula con acento agudo",THORN:"Letra Thorn latina mayúscula",szlig:"Letra s latina fuerte pequeña",agrave:"Letra a latina pequeña con acento grave",aacute:"Letra a latina pequeña con acento agudo", +acirc:"Letra a latina pequeña con acento circunflejo",atilde:"Letra a latina pequeña con tilde",auml:"Letra a latina pequeña con diéresis",aring:"Letra a latina pequeña con aro arriba",aelig:"Letra æ latina pequeña",ccedil:"Letra c latina pequeña con cedilla",egrave:"Letra e latina pequeña con acento grave",eacute:"Letra e latina pequeña con acento agudo",ecirc:"Letra e latina pequeña con acento circunflejo",euml:"Letra e latina pequeña con diéresis",igrave:"Letra i latina pequeña con acento grave", +iacute:"Letra i latina pequeña con acento agudo",icirc:"Letra i latina pequeña con acento circunflejo",iuml:"Letra i latina pequeña con diéresis",eth:"Letra eth latina pequeña",ntilde:"Letra n latina pequeña con tilde",ograve:"Letra o latina pequeña con acento grave",oacute:"Letra o latina pequeña con acento agudo",ocirc:"Letra o latina pequeña con acento circunflejo",otilde:"Letra o latina pequeña con tilde",ouml:"Letra o latina pequeña con diéresis",divide:"Signo de división",oslash:"Letra o latina minúscula con barra inclinada", +ugrave:"Letra u latina pequeña con acento grave",uacute:"Letra u latina pequeña con acento agudo",ucirc:"Letra u latina pequeña con acento circunflejo",uuml:"Letra u latina pequeña con diéresis",yacute:"Letra u latina pequeña con acento agudo",thorn:"Letra thorn latina minúscula",yuml:"Letra y latina pequeña con diéresis",OElig:"Diptongo OE latino en mayúscula",oelig:"Diptongo oe latino en minúscula",372:"Letra W latina mayúscula con acento circunflejo",374:"Letra Y latina mayúscula con acento circunflejo", +373:"Letra w latina pequeña con acento circunflejo",375:"Letra y latina pequeña con acento circunflejo",sbquo:"Comilla simple baja-9",8219:"Comilla simple alta invertida-9",bdquo:"Comillas dobles bajas-9",hellip:"Puntos suspensivos horizontales",trade:"Signo de marca registrada",9658:"Apuntador negro apuntando a la derecha",bull:"Viñeta",rarr:"Flecha a la derecha",rArr:"Flecha doble a la derecha",hArr:"Flecha izquierda derecha doble",diams:"Diamante negro",asymp:"Casi igual a"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/et.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/et.js new file mode 100644 index 0000000..22c9056 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/et.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","et",{euro:"Euromärk",lsquo:"Alustav ühekordne jutumärk",rsquo:"Lõpetav ühekordne jutumärk",ldquo:"Alustav kahekordne jutumärk",rdquo:"Lõpetav kahekordne jutumärk",ndash:"Enn-kriips",mdash:"Emm-kriips",iexcl:"Pööratud hüüumärk",cent:"Sendimärk",pound:"Naela märk",curren:"Valuutamärk",yen:"Jeeni märk",brvbar:"Katkestatud kriips",sect:"Lõigu märk",uml:"Täpid",copy:"Autoriõiguse märk",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Ei-märk",reg:"Registered sign",macr:"Macron",deg:"Kraadimärk",sup2:"Ülaindeks kaks",sup3:"Ülaindeks kolm",acute:"Acute accent",micro:"Mikro-märk",para:"Pilcrow sign",middot:"Keskpunkt",cedil:"Cedilla",sup1:"Ülaindeks üks",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Ladina suur A tildega",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Täppidega ladina suur O",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Kandilise katusega suur ladina U",Uuml:"Täppidega ladina suur U",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Ladina väike terav s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Kandilise katusega ladina väike a",atilde:"Tildega ladina väike a",auml:"Täppidega ladina väike a",aring:"Latin small letter a with ring above", +aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", +ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jagamismärk",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", +thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Kaubamärgi märk",9658:"Black right-pointing pointer", +bull:"Kuul",rarr:"Nool paremale",rArr:"Topeltnool paremale",hArr:"Topeltnool vasakule",diams:"Black diamond suit",asymp:"Ligikaudu võrdne"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/fa.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/fa.js new file mode 100644 index 0000000..e0b27c5 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/fa.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","fa",{euro:"نشان یورو",lsquo:"علامت نقل قول تکی چپ",rsquo:"علامت نقل قول تکی راست",ldquo:"علامت نقل قول دوتایی چپ",rdquo:"علامت نقل قول دوتایی راست",ndash:"خط تیره En",mdash:"خط تیره Em",iexcl:"علامت تعجب وارونه",cent:"نشان سنت",pound:"نشان پوند",curren:"نشان ارز",yen:"نشان ین",brvbar:"نوار شکسته",sect:"نشان بخش",uml:"نشان سواگیری",copy:"نشان کپی رایت",ordf:"شاخص ترتیبی مونث",laquo:"اشاره چپ مکرر برای زاویه علامت نقل قول",not:"نشان ثبت نشده",reg:"نشان ثبت شده", +macr:"نشان خط بالای حرف",deg:"نشان درجه",sup2:"بالانویس دو",sup3:"بالانویس سه",acute:"لهجه غلیظ",micro:"نشان مایکرو",para:"نشان محل بند",middot:"نقطه میانی",cedil:"سدیل",sup1:"بالانویس 1",ordm:"شاخص ترتیبی مذکر",raquo:"نشان زاویه‌دار دوتایی نقل قول راست چین",frac14:"واحد عامیانه 1/4",frac12:"واحد عامینه نصف",frac34:"واحد عامیانه 3/4",iquest:"علامت سوال معکوس",Agrave:"حرف A بزرگ لاتین با تلفظ غلیظ",Aacute:"حرف A بزرگ لاتین با تلفظ شدید",Acirc:"حرف A بزرگ لاتین با دور",Atilde:"حرف A بزرگ لاتین با صدای کامی", +Auml:"حرف A بزرگ لاتین با نشان سواگیری",Aring:"حرف A بزرگ لاتین با حلقه بالا",AElig:"حرف Æ بزرگ لاتین",Ccedil:"حرف C بزرگ لاتین با نشان سواگیری",Egrave:"حرف E بزرگ لاتین با تلفظ درشت",Eacute:"حرف E بزرگ لاتین با تلفظ زیر",Ecirc:"حرف E بزرگ لاتین با خمان",Euml:"حرف E بزرگ لاتین با نشان سواگیری",Igrave:"حرف I بزرگ لاتین با تلفظ درشت",Iacute:"حرف I بزرگ لاتین با تلفظ ریز",Icirc:"حرف I بزرگ لاتین با خمان",Iuml:"حرف I بزرگ لاتین با نشان سواگیری",ETH:"حرف لاتین بزرگ واکه ترتیبی",Ntilde:"حرف N بزرگ لاتین با مد", +Ograve:"حرف O بزرگ لاتین با تلفظ درشت",Oacute:"حرف O بزرگ لاتین با تلفظ ریز",Ocirc:"حرف O بزرگ لاتین با خمان",Otilde:"حرف O بزرگ لاتین با مد",Ouml:"حرف O بزرگ لاتین با نشان سواگیری",times:"نشان ضربدر",Oslash:"حرف O بزرگ لاتین با میان خط",Ugrave:"حرف U بزرگ لاتین با تلفظ درشت",Uacute:"حرف U بزرگ لاتین با تلفظ ریز",Ucirc:"حرف U بزرگ لاتین با خمان",Uuml:"حرف U بزرگ لاتین با نشان سواگیری",Yacute:"حرف Y بزرگ لاتین با تلفظ ریز",THORN:"حرف بزرگ لاتین خاردار",szlig:"حرف کوچک لاتین شارپ s",agrave:"حرف a کوچک لاتین با تلفظ درشت", +aacute:"حرف a کوچک لاتین با تلفظ ریز",acirc:"حرف a کوچک لاتین با خمان",atilde:"حرف a کوچک لاتین با صدای کامی",auml:"حرف a کوچک لاتین با نشان سواگیری",aring:"حرف a کوچک لاتین گوشواره دار",aelig:"حرف کوچک لاتین æ",ccedil:"حرف c کوچک لاتین با نشان سدیل",egrave:"حرف e کوچک لاتین با تلفظ درشت",eacute:"حرف e کوچک لاتین با تلفظ ریز",ecirc:"حرف e کوچک لاتین با خمان",euml:"حرف e کوچک لاتین با نشان سواگیری",igrave:"حرف i کوچک لاتین با تلفظ درشت",iacute:"حرف i کوچک لاتین با تلفظ ریز",icirc:"حرف i کوچک لاتین با خمان", +iuml:"حرف i کوچک لاتین با نشان سواگیری",eth:"حرف کوچک لاتین eth",ntilde:"حرف n کوچک لاتین با صدای کامی",ograve:"حرف o کوچک لاتین با تلفظ درشت",oacute:"حرف o کوچک لاتین با تلفظ زیر",ocirc:"حرف o کوچک لاتین با خمان",otilde:"حرف o کوچک لاتین با صدای کامی",ouml:"حرف o کوچک لاتین با نشان سواگیری",divide:"نشان بخش",oslash:"حرف o کوچک لاتین با میان خط",ugrave:"حرف u کوچک لاتین با تلفظ درشت",uacute:"حرف u کوچک لاتین با تلفظ ریز",ucirc:"حرف u کوچک لاتین با خمان",uuml:"حرف u کوچک لاتین با نشان سواگیری",yacute:"حرف y کوچک لاتین با تلفظ ریز", +thorn:"حرف کوچک لاتین خاردار",yuml:"حرف y کوچک لاتین با نشان سواگیری",OElig:"بند بزرگ لاتین OE",oelig:"بند کوچک لاتین oe",372:"حرف W بزرگ لاتین با خمان",374:"حرف Y بزرگ لاتین با خمان",373:"حرف w کوچک لاتین با خمان",375:"حرف y کوچک لاتین با خمان",sbquo:"نشان نقل قول تکی زیر-9",8219:"نشان نقل قول تکی high-reversed-9",bdquo:"نقل قول دوتایی پایین-9",hellip:"حذف افقی",trade:"نشان تجاری",9658:"نشانگر سیاه جهت راست",bull:"گلوله",rarr:"فلش راست",rArr:"فلش دوتایی راست",hArr:"فلش دوتایی چپ راست",diams:"نشان الماس سیاه", +asymp:"تقریبا برابر با"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/fi.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/fi.js new file mode 100644 index 0000000..6d701e3 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/fi.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","fi",{euro:"Euron merkki",lsquo:"Vasen yksittäinen lainausmerkki",rsquo:"Oikea yksittäinen lainausmerkki",ldquo:"Vasen kaksoislainausmerkki",rdquo:"Oikea kaksoislainausmerkki",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Sentin merkki",pound:"Punnan merkki",curren:"Valuuttamerkki",yen:"Yenin merkki",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Rekisteröity merkki",macr:"Macron",deg:"Asteen merkki",sup2:"Yläindeksi kaksi",sup3:"Yläindeksi kolme",acute:"Acute accent",micro:"Mikron merkki",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Yläindeksi yksi",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Ylösalaisin oleva kysymysmerkki",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Kertomerkki",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jakomerkki",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Tavaramerkki merkki",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Nuoli oikealle",rArr:"Kaksoisnuoli oikealle",hArr:"Kaksoisnuoli oikealle ja vasemmalle",diams:"Black diamond suit",asymp:"Noin"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js new file mode 100644 index 0000000..d19e2e4 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","fr-ca",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret",iexcl:"Point d'exclamation inversé",cent:"Symbole de cent",pound:"Symbole de Livre Sterling",curren:"Symbole monétaire",yen:"Symbole du Yen",brvbar:"Barre scindée",sect:"Symbole de section",uml:"Tréma",copy:"Symbole de copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant", +not:"Indicateur de négation",reg:"Symbole de marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"Exposant 3",acute:"Accent aigüe",micro:"Symbole micro",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"Exposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Une demi",frac34:"Trois quart",iquest:"Point d'interrogation inversé",Agrave:"A accent grave",Aacute:"A accent aigüe",Acirc:"A circonflexe",Atilde:"A tilde",Auml:"A tréma", +Aring:"A avec un rond au dessus",AElig:"Æ majuscule",Ccedil:"C cédille",Egrave:"E accent grave",Eacute:"E accent aigüe",Ecirc:"E accent circonflexe",Euml:"E tréma",Igrave:"I accent grave",Iacute:"I accent aigüe",Icirc:"I accent circonflexe",Iuml:"I tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N tilde",Ograve:"O accent grave",Oacute:"O accent aigüe",Ocirc:"O accent circonflexe",Otilde:"O tilde",Ouml:"O tréma",times:"Symbole de multiplication",Oslash:"O barré",Ugrave:"U accent grave",Uacute:"U accent aigüe", +Ucirc:"U accent circonflexe",Uuml:"U tréma",Yacute:"Y accent aigüe",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a accent grave",aacute:"a accent aigüe",acirc:"a accent circonflexe",atilde:"a tilde",auml:"a tréma",aring:"a avec un cercle au dessus",aelig:"æ",ccedil:"c cédille",egrave:"e accent grave",eacute:"e accent aigüe",ecirc:"e accent circonflexe",euml:"e tréma",igrave:"i accent grave",iacute:"i accent aigüe",icirc:"i accent circonflexe",iuml:"i tréma", +eth:"Lettre minuscule islandaise ED",ntilde:"n tilde",ograve:"o accent grave",oacute:"o accent aigüe",ocirc:"O accent circonflexe",otilde:"O tilde",ouml:"O tréma",divide:"Symbole de division",oslash:"o barré",ugrave:"u accent grave",uacute:"u accent aigüe",ucirc:"u accent circonflexe",uuml:"u tréma",yacute:"y accent aigüe",thorn:"Lettre islandaise thorn minuscule",yuml:"y tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W accent circonflexe",374:"Y accent circonflexe", +373:"w accent circonflexe",375:"y accent circonflexe",sbquo:"Guillemet simple fermant",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Symbole de marque déposée",9658:"Flèche noire pointant vers la droite",bull:"Puce",rarr:"Flèche vers la droite",rArr:"Flèche double vers la droite",hArr:"Flèche double vers la gauche",diams:"Carreau",asymp:"Presque égal"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/fr.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/fr.js new file mode 100644 index 0000000..2d1ad09 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/fr.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","fr",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret cadratin",iexcl:"Point d'exclamation inversé",cent:"Symbole Cent",pound:"Symbole Livre Sterling",curren:"Symbole monétaire",yen:"Symbole Yen",brvbar:"Barre verticale scindée",sect:"Section",uml:"Tréma",copy:"Symbole Copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant", +not:"Crochet de négation",reg:"Marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"\\tExposant 3",acute:"Accent aigu",micro:"Omicron",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"\\tExposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Un demi",frac34:"Trois quarts",iquest:"Point d'interrogation inversé",Agrave:"A majuscule accent grave",Aacute:"A majuscule accent aigu",Acirc:"A majuscule accent circonflexe",Atilde:"A majuscule avec caron", +Auml:"A majuscule tréma",Aring:"A majuscule avec un rond au-dessus",AElig:"Æ majuscule ligaturés",Ccedil:"C majuscule cédille",Egrave:"E majuscule accent grave",Eacute:"E majuscule accent aigu",Ecirc:"E majuscule accent circonflexe",Euml:"E majuscule tréma",Igrave:"I majuscule accent grave",Iacute:"I majuscule accent aigu",Icirc:"I majuscule accent circonflexe",Iuml:"I majuscule tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N majuscule avec caron",Ograve:"O majuscule accent grave",Oacute:"O majuscule accent aigu", +Ocirc:"O majuscule accent circonflexe",Otilde:"O majuscule avec caron",Ouml:"O majuscule tréma",times:"Multiplication",Oslash:"O majuscule barré",Ugrave:"U majuscule accent grave",Uacute:"U majuscule accent aigu",Ucirc:"U majuscule accent circonflexe",Uuml:"U majuscule tréma",Yacute:"Y majuscule accent aigu",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a minuscule accent grave",aacute:"a minuscule accent aigu",acirc:"a minuscule accent circonflexe",atilde:"a minuscule avec caron", +auml:"a minuscule tréma",aring:"a minuscule avec un rond au-dessus",aelig:"æ minuscule ligaturés",ccedil:"c minuscule cédille",egrave:"e minuscule accent grave",eacute:"e minuscule accent aigu",ecirc:"e minuscule accent circonflexe",euml:"e minuscule tréma",igrave:"i minuscule accent grave",iacute:"i minuscule accent aigu",icirc:"i minuscule accent circonflexe",iuml:"i minuscule tréma",eth:"Lettre minuscule islandaise ED",ntilde:"n minuscule avec caron",ograve:"o minuscule accent grave",oacute:"o minuscule accent aigu", +ocirc:"o minuscule accent circonflexe",otilde:"o minuscule avec caron",ouml:"o minuscule tréma",divide:"Division",oslash:"o minuscule barré",ugrave:"u minuscule accent grave",uacute:"u minuscule accent aigu",ucirc:"u minuscule accent circonflexe",uuml:"u minuscule tréma",yacute:"y minuscule accent aigu",thorn:"Lettre islandaise thorn minuscule",yuml:"y minuscule tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W majuscule accent circonflexe",374:"Y majuscule accent circonflexe", +373:"w minuscule accent circonflexe",375:"y minuscule accent circonflexe",sbquo:"Guillemet simple fermant (anglais)",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Marque commerciale (trade mark)",9658:"Flèche noire pointant vers la droite",bull:"Gros point médian",rarr:"Flèche vers la droite",rArr:"Double flèche vers la droite",hArr:"Double flèche vers la gauche",diams:"Carreau noir",asymp:"Presque égal"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/gl.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/gl.js new file mode 100644 index 0000000..f16d366 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/gl.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","gl",{euro:"Símbolo do euro",lsquo:"Comiña simple esquerda",rsquo:"Comiña simple dereita",ldquo:"Comiñas dobres esquerda",rdquo:"Comiñas dobres dereita",ndash:"Guión",mdash:"Raia",iexcl:"Signo de admiración invertido",cent:"Símbolo do centavo",pound:"Símbolo da libra",curren:"Símbolo de moeda",yen:"Símbolo do yen",brvbar:"Barra vertical rota",sect:"Símbolo de sección",uml:"Diérese",copy:"Símbolo de dereitos de autoría",ordf:"Indicador ordinal feminino",laquo:"Comiñas latinas, apertura", +not:"Signo negación",reg:"Símbolo de marca rexistrada",macr:"Guión alto",deg:"Signo de grao",sup2:"Superíndice dous",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo de micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice un",ordm:"Indicador ordinal masculino",raquo:"Comiñas latinas, peche",frac14:"Fracción ordinaria de un cuarto",frac12:"Fracción ordinaria de un medio",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina maiúscula con acento grave", +Aacute:"Letra A latina maiúscula con acento agudo",Acirc:"Letra A latina maiúscula con acento circunflexo",Atilde:"Letra A latina maiúscula con til",Auml:"Letra A latina maiúscula con diérese",Aring:"Letra A latina maiúscula con aro enriba",AElig:"Letra Æ latina maiúscula",Ccedil:"Letra C latina maiúscula con cedilla",Egrave:"Letra E latina maiúscula con acento grave",Eacute:"Letra E latina maiúscula con acento agudo",Ecirc:"Letra E latina maiúscula con acento circunflexo",Euml:"Letra E latina maiúscula con diérese", +Igrave:"Letra I latina maiúscula con acento grave",Iacute:"Letra I latina maiúscula con acento agudo",Icirc:"Letra I latina maiúscula con acento circunflexo",Iuml:"Letra I latina maiúscula con diérese",ETH:"Letra Ed latina maiúscula",Ntilde:"Letra N latina maiúscula con til",Ograve:"Letra O latina maiúscula con acento grave",Oacute:"Letra O latina maiúscula con acento agudo",Ocirc:"Letra O latina maiúscula con acento circunflexo",Otilde:"Letra O latina maiúscula con til",Ouml:"Letra O latina maiúscula con diérese", +times:"Signo de multiplicación",Oslash:"Letra O latina maiúscula con barra transversal",Ugrave:"Letra U latina maiúscula con acento grave",Uacute:"Letra U latina maiúscula con acento agudo",Ucirc:"Letra U latina maiúscula con acento circunflexo",Uuml:"Letra U latina maiúscula con diérese",Yacute:"Letra Y latina maiúscula con acento agudo",THORN:"Letra Thorn latina maiúscula",szlig:"Letra s latina forte minúscula",agrave:"Letra a latina minúscula con acento grave",aacute:"Letra a latina minúscula con acento agudo", +acirc:"Letra a latina minúscula con acento circunflexo",atilde:"Letra a latina minúscula con til",auml:"Letra a latina minúscula con diérese",aring:"Letra a latina minúscula con aro enriba",aelig:"Letra æ latina minúscula",ccedil:"Letra c latina minúscula con cedilla",egrave:"Letra e latina minúscula con acento grave",eacute:"Letra e latina minúscula con acento agudo",ecirc:"Letra e latina minúscula con acento circunflexo",euml:"Letra e latina minúscula con diérese",igrave:"Letra i latina minúscula con acento grave", +iacute:"Letra i latina minúscula con acento agudo",icirc:"Letra i latina minúscula con acento circunflexo",iuml:"Letra i latina minúscula con diérese",eth:"Letra ed latina minúscula",ntilde:"Letra n latina minúscula con til",ograve:"Letra o latina minúscula con acento grave",oacute:"Letra o latina minúscula con acento agudo",ocirc:"Letra o latina minúscula con acento circunflexo",otilde:"Letra o latina minúscula con til",ouml:"Letra o latina minúscula con diérese",divide:"Signo de división",oslash:"Letra o latina minúscula con barra transversal", +ugrave:"Letra u latina minúscula con acento grave",uacute:"Letra u latina minúscula con acento agudo",ucirc:"Letra u latina minúscula con acento circunflexo",uuml:"Letra u latina minúscula con diérese",yacute:"Letra y latina minúscula con acento agudo",thorn:"Letra Thorn latina minúscula",yuml:"Letra y latina minúscula con diérese",OElig:"Ligadura OE latina maiúscula",oelig:"Ligadura oe latina minúscula",372:"Letra W latina maiúscula con acento circunflexo",374:"Letra Y latina maiúscula con acento circunflexo", +373:"Letra w latina minúscula con acento circunflexo",375:"Letra y latina minúscula con acento circunflexo",sbquo:"Comiña simple baixa, de apertura",8219:"Comiña simple alta, de peche",bdquo:"Comiñas dobres baixas, de apertura",hellip:"Elipse, puntos suspensivos",trade:"Signo de marca rexistrada",9658:"Apuntador negro apuntando á dereita",bull:"Viñeta",rarr:"Frecha á dereita",rArr:"Frecha dobre á dereita",hArr:"Frecha dobre da esquerda á dereita",diams:"Diamante negro",asymp:"Case igual a"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/he.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/he.js new file mode 100644 index 0000000..dcfc50f --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/he.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","he",{euro:"יורו",lsquo:"סימן ציטוט יחיד שמאלי",rsquo:"סימן ציטוט יחיד ימני",ldquo:"סימן ציטוט כפול שמאלי",rdquo:"סימן ציטוט כפול ימני",ndash:"קו מפריד קצר",mdash:"קו מפריד ארוך",iexcl:"סימן קריאה הפוך",cent:"סנט",pound:"פאונד",curren:"מטבע",yen:"ין",brvbar:"קו שבור",sect:"סימן מקטע",uml:"שתי נקודות אופקיות (Diaeresis)",copy:"סימן זכויות יוצרים (Copyright)",ordf:"סימן אורדינאלי נקבי",laquo:"סימן ציטוט זווית כפולה לשמאל",not:"סימן שלילה מתמטי",reg:"סימן רשום", +macr:"מקרון (הגיה ארוכה)",deg:"מעלות",sup2:"2 בכתיב עילי",sup3:"3 בכתיב עילי",acute:"סימן דגוש (Acute)",micro:"מיקרו",para:"סימון פסקה",middot:"נקודה אמצעית",cedil:"סדיליה",sup1:"1 בכתיב עילי",ordm:"סימן אורדינאלי זכרי",raquo:"סימן ציטוט זווית כפולה לימין",frac14:"רבע בשבר פשוט",frac12:"חצי בשבר פשוט",frac34:"שלושה רבעים בשבר פשוט",iquest:"סימן שאלה הפוך",Agrave:"אות לטינית A עם גרש (Grave)",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde", +Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"אות לטינית Æ גדולה",Ccedil:"Latin capital letter C with cedilla",Egrave:"אות לטינית E עם גרש (Grave)",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"אות לטינית I עם גרש (Grave)",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis", +ETH:"אות לטינית Eth גדולה",Ntilde:"Latin capital letter N with tilde",Ograve:"אות לטינית O עם גרש (Grave)",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"סימן כפל",Oslash:"Latin capital letter O with stroke",Ugrave:"אות לטינית U עם גרש (Grave)",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis", +Yacute:"Latin capital letter Y with acute accent",THORN:"אות לטינית Thorn גדולה",szlig:"אות לטינית s חדה קטנה",agrave:"אות לטינית a עם גרש (Grave)",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"אות לטינית æ קטנה",ccedil:"Latin small letter c with cedilla",egrave:"אות לטינית e עם גרש (Grave)",eacute:"Latin small letter e with acute accent", +ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"אות לטינית i עם גרש (Grave)",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"אות לטינית eth קטנה",ntilde:"Latin small letter n with tilde",ograve:"אות לטינית o עם גרש (Grave)",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis", +divide:"סימן חלוקה",oslash:"Latin small letter o with stroke",ugrave:"אות לטינית u עם גרש (Grave)",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"אות לטינית thorn קטנה",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex", +373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"סימן ציטוט נמוך יחיד",8219:"סימן ציטוט",bdquo:"סימן ציטוט נמוך כפול",hellip:"שלוש נקודות",trade:"סימן טריידמארק",9658:"סמן שחור לצד ימין",bull:"תבליט (רשימה)",rarr:"חץ לימין",rArr:"חץ כפול לימין",hArr:"חץ כפול לימין ושמאל",diams:"יהלום מלא",asymp:"כמעט שווה"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/hr.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/hr.js new file mode 100644 index 0000000..af10255 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/hr.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","hr",{euro:"Euro znak",lsquo:"Lijevi jednostruki navodnik",rsquo:"Desni jednostruki navodnik",ldquo:"Lijevi dvostruki navodnik",rdquo:"Desni dvostruki navodnik",ndash:"En crtica",mdash:"Em crtica",iexcl:"Naopaki uskličnik",cent:"Cent znak",pound:"Funta znak",curren:"Znak valute",yen:"Yen znak",brvbar:"Potrgana prečka",sect:"Znak odjeljka",uml:"Prijeglasi",copy:"Copyright znak",ordf:"Feminine ordinal indicator",laquo:"Lijevi dvostruki uglati navodnik",not:"Not znak", +reg:"Registered znak",macr:"Macron",deg:"Stupanj znak",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Mikro znak",para:"Pilcrow sign",middot:"Srednja točka",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Desni dvostruku uglati navodnik",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Naopaki upitnik",Agrave:"Veliko latinsko slovo A s akcentom",Aacute:"Latinično veliko slovo A sa oštrim naglaskom", +Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", +Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent", +Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above", +aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", +ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", +thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer", +bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/hu.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/hu.js new file mode 100644 index 0000000..7948305 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/hu.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","hu",{euro:"Euró jel",lsquo:"Bal szimpla idézőjel",rsquo:"Jobb szimpla idézőjel",ldquo:"Bal dupla idézőjel",rdquo:"Jobb dupla idézőjel",ndash:"Rövid gondolatjel",mdash:"Hosszú gondolatjel",iexcl:"Fordított felkiáltójel",cent:"Cent jel",pound:"Font jel",curren:"Valuta jel",yen:"Yen jel",brvbar:"Hosszú kettőspont",sect:"Paragrafus jel",uml:"Kettős hangzó jel",copy:"Szerzői jog jel",ordf:"Női sorrend mutatója",laquo:"Balra mutató duplanyíl",not:"Feltételes kötőjel", +reg:"Bejegyzett védjegy jele",macr:"Hosszúsági jel",deg:"Fok jel",sup2:"Négyzeten jel",sup3:"Köbön jel",acute:"Éles ékezet",micro:"Mikro-jel",para:"Bekezdés jel",middot:"Közép pont",cedil:"Cédille",sup1:"Elsőn jel",ordm:"Férfi sorrend mutatója",raquo:"Jobbra mutató duplanyíl",frac14:"Egy negyed jel",frac12:"Egy ketted jel",frac34:"Három negyed jel",iquest:"Fordított kérdőjel",Agrave:"Latin nagy A fordított ékezettel",Aacute:"Latin nagy A normál ékezettel",Acirc:"Latin nagy A hajtott ékezettel",Atilde:"Latin nagy A hullámjellel", +Auml:"Latin nagy A kettőspont ékezettel",Aring:"Latin nagy A gyűrű ékezettel",AElig:"Latin nagy Æ betű",Ccedil:"Latin nagy C cedillával",Egrave:"Latin nagy E fordított ékezettel",Eacute:"Latin nagy E normál ékezettel",Ecirc:"Latin nagy E hajtott ékezettel",Euml:"Latin nagy E dupla kettőspont ékezettel",Igrave:"Latin nagy I fordított ékezettel",Iacute:"Latin nagy I normál ékezettel",Icirc:"Latin nagy I hajtott ékezettel",Iuml:"Latin nagy I kettőspont ékezettel",ETH:"Latin nagy Eth betű",Ntilde:"Latin nagy N hullámjellel", +Ograve:"Latin nagy O fordított ékezettel",Oacute:"Latin nagy O normál ékezettel",Ocirc:"Latin nagy O hajtott ékezettel",Otilde:"Latin nagy O hullámjellel",Ouml:"Latin nagy O kettőspont ékezettel",times:"Szorzás jel",Oslash:"Latin O betű áthúzással",Ugrave:"Latin nagy U fordított ékezettel",Uacute:"Latin nagy U normál ékezettel",Ucirc:"Latin nagy U hajtott ékezettel",Uuml:"Latin nagy U kettőspont ékezettel",Yacute:"Latin nagy Y normál ékezettel",THORN:"Latin nagy Thorn betű",szlig:"Latin kis s betű", +agrave:"Latin kis a fordított ékezettel",aacute:"Latin kis a normál ékezettel",acirc:"Latin kis a hajtott ékezettel",atilde:"Latin kis a hullámjellel",auml:"Latin kis a kettőspont ékezettel",aring:"Latin kis a gyűrű ékezettel",aelig:"Latin kis æ betű",ccedil:"Latin kis c cedillával",egrave:"Latin kis e fordított ékezettel",eacute:"Latin kis e normál ékezettel",ecirc:"Latin kis e hajtott ékezettel",euml:"Latin kis e dupla kettőspont ékezettel",igrave:"Latin kis i fordított ékezettel",iacute:"Latin kis i normál ékezettel", +icirc:"Latin kis i hajtott ékezettel",iuml:"Latin kis i kettőspont ékezettel",eth:"Latin kis eth betű",ntilde:"Latin kis n hullámjellel",ograve:"Latin kis o fordított ékezettel",oacute:"Latin kis o normál ékezettel",ocirc:"Latin kis o hajtott ékezettel",otilde:"Latin kis o hullámjellel",ouml:"Latin kis o kettőspont ékezettel",divide:"Osztásjel",oslash:"Latin kis o betű áthúzással",ugrave:"Latin kis u fordított ékezettel",uacute:"Latin kis u normál ékezettel",ucirc:"Latin kis u hajtott ékezettel", +uuml:"Latin kis u kettőspont ékezettel",yacute:"Latin kis y normál ékezettel",thorn:"Latin kis thorn jel",yuml:"Latin kis y kettőspont ékezettel",OElig:"Latin nagy OE-jel",oelig:"Latin kis oe-jel",372:"Latin nagy W hajtott ékezettel",374:"Latin nagy Y hajtott ékezettel",373:"Latin kis w hajtott ékezettel",375:"Latin kis y hajtott ékezettel",sbquo:"Nyitó nyomdai szimpla idézőjel",8219:"Záró nyomdai záró idézőjel",bdquo:"Nyitó nyomdai dupla idézőjel",hellip:"Három pont",trade:"Kereskedelmi védjegy jele", +9658:"Jobbra mutató fekete mutató",bull:"Golyó",rarr:"Jobbra mutató nyíl",rArr:"Jobbra mutató duplanyíl",hArr:"Bal-jobb duplanyíl",diams:"Fekete gyémánt jel",asymp:"Majdnem egyenlő jel"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/id.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/id.js new file mode 100644 index 0000000..4928f40 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/id.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","id",{euro:"Tanda Euro",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Tanda Yen",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Tanda Hak Cipta",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Tanda Telah Terdaftar",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/it.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/it.js new file mode 100644 index 0000000..894b56c --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/it.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","it",{euro:"Simbolo Euro",lsquo:"Virgoletta singola sinistra",rsquo:"Virgoletta singola destra",ldquo:"Virgolette aperte",rdquo:"Virgolette chiuse",ndash:"Trattino",mdash:"Trattino lungo",iexcl:"Punto esclavamativo invertito",cent:"Simbolo Cent",pound:"Simbolo Sterlina",curren:"Simbolo Moneta",yen:"Simbolo Yen",brvbar:"Barra interrotta",sect:"Simbolo di sezione",uml:"Dieresi",copy:"Simbolo Copyright",ordf:"Indicatore ordinale femminile",laquo:"Virgolette basse aperte", +not:"Nessun segno",reg:"Simbolo Registrato",macr:"Macron",deg:"Simbolo Grado",sup2:"Apice Due",sup3:"Apice Tre",acute:"Accento acuto",micro:"Simbolo Micro",para:"Simbolo Paragrafo",middot:"Punto centrale",cedil:"Cediglia",sup1:"Apice Uno",ordm:"Indicatore ordinale maschile",raquo:"Virgolette basse chiuse",frac14:"Frazione volgare un quarto",frac12:"Frazione volgare un mezzo",frac34:"Frazione volgare tre quarti",iquest:"Punto interrogativo invertito",Agrave:"Lettera maiuscola latina A con accento grave", +Aacute:"Lettera maiuscola latina A con accento acuto",Acirc:"Lettera maiuscola latina A con accento circonflesso",Atilde:"Lettera maiuscola latina A con tilde",Auml:"Lettera maiuscola latina A con dieresi",Aring:"Lettera maiuscola latina A con anello sopra",AElig:"Lettera maiuscola latina AE",Ccedil:"Lettera maiuscola latina C con cediglia",Egrave:"Lettera maiuscola latina E con accento grave",Eacute:"Lettera maiuscola latina E con accento acuto",Ecirc:"Lettera maiuscola latina E con accento circonflesso", +Euml:"Lettera maiuscola latina E con dieresi",Igrave:"Lettera maiuscola latina I con accento grave",Iacute:"Lettera maiuscola latina I con accento acuto",Icirc:"Lettera maiuscola latina I con accento circonflesso",Iuml:"Lettera maiuscola latina I con dieresi",ETH:"Lettera maiuscola latina Eth",Ntilde:"Lettera maiuscola latina N con tilde",Ograve:"Lettera maiuscola latina O con accento grave",Oacute:"Lettera maiuscola latina O con accento acuto",Ocirc:"Lettera maiuscola latina O con accento circonflesso", +Otilde:"Lettera maiuscola latina O con tilde",Ouml:"Lettera maiuscola latina O con dieresi",times:"Simbolo di moltiplicazione",Oslash:"Lettera maiuscola latina O barrata",Ugrave:"Lettera maiuscola latina U con accento grave",Uacute:"Lettera maiuscola latina U con accento acuto",Ucirc:"Lettera maiuscola latina U con accento circonflesso",Uuml:"Lettera maiuscola latina U con accento circonflesso",Yacute:"Lettera maiuscola latina Y con accento acuto",THORN:"Lettera maiuscola latina Thorn",szlig:"Lettera latina minuscola doppia S", +agrave:"Lettera minuscola latina a con accento grave",aacute:"Lettera minuscola latina a con accento acuto",acirc:"Lettera minuscola latina a con accento circonflesso",atilde:"Lettera minuscola latina a con tilde",auml:"Lettera minuscola latina a con dieresi",aring:"Lettera minuscola latina a con anello superiore",aelig:"Lettera minuscola latina ae",ccedil:"Lettera minuscola latina c con cediglia",egrave:"Lettera minuscola latina e con accento grave",eacute:"Lettera minuscola latina e con accento acuto", +ecirc:"Lettera minuscola latina e con accento circonflesso",euml:"Lettera minuscola latina e con dieresi",igrave:"Lettera minuscola latina i con accento grave",iacute:"Lettera minuscola latina i con accento acuto",icirc:"Lettera minuscola latina i con accento circonflesso",iuml:"Lettera minuscola latina i con dieresi",eth:"Lettera minuscola latina eth",ntilde:"Lettera minuscola latina n con tilde",ograve:"Lettera minuscola latina o con accento grave",oacute:"Lettera minuscola latina o con accento acuto", +ocirc:"Lettera minuscola latina o con accento circonflesso",otilde:"Lettera minuscola latina o con tilde",ouml:"Lettera minuscola latina o con dieresi",divide:"Simbolo di divisione",oslash:"Lettera minuscola latina o barrata",ugrave:"Lettera minuscola latina u con accento grave",uacute:"Lettera minuscola latina u con accento acuto",ucirc:"Lettera minuscola latina u con accento circonflesso",uuml:"Lettera minuscola latina u con dieresi",yacute:"Lettera minuscola latina y con accento acuto",thorn:"Lettera minuscola latina thorn", +yuml:"Lettera minuscola latina y con dieresi",OElig:"Legatura maiuscola latina OE",oelig:"Legatura minuscola latina oe",372:"Lettera maiuscola latina W con accento circonflesso",374:"Lettera maiuscola latina Y con accento circonflesso",373:"Lettera minuscola latina w con accento circonflesso",375:"Lettera minuscola latina y con accento circonflesso",sbquo:"Singola virgoletta bassa low-9",8219:"Singola virgoletta bassa low-9 inversa",bdquo:"Doppia virgoletta bassa low-9",hellip:"Ellissi orizzontale", +trade:"Simbolo TM",9658:"Puntatore nero rivolto verso destra",bull:"Punto",rarr:"Freccia verso destra",rArr:"Doppia freccia verso destra",hArr:"Doppia freccia sinistra destra",diams:"Simbolo nero diamante",asymp:"Quasi uguale a"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ja.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ja.js new file mode 100644 index 0000000..84fb8fa --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ja.js @@ -0,0 +1,9 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ja",{euro:"ユーロ記号",lsquo:"左シングル引用符",rsquo:"右シングル引用符",ldquo:"左ダブル引用符",rdquo:"右ダブル引用符",ndash:"半角ダッシュ",mdash:"全角ダッシュ",iexcl:"逆さ感嘆符",cent:"セント記号",pound:"ポンド記号",curren:"通貨記号",yen:"円記号",brvbar:"上下に分かれた縦棒",sect:"節記号",uml:"分音記号(ウムラウト)",copy:"著作権表示記号",ordf:"女性序数標識",laquo:" 始め二重山括弧引用記号",not:"論理否定記号",reg:"登録商標記号",macr:"長音符",deg:"度記号",sup2:"上つき2, 2乗",sup3:"上つき3, 3乗",acute:"揚音符",micro:"ミクロン記号",para:"段落記号",middot:"中黒",cedil:"セディラ",sup1:"上つき1",ordm:"男性序数標識",raquo:"終わり二重山括弧引用記号", +frac14:"四分の一",frac12:"二分の一",frac34:"四分の三",iquest:"逆疑問符",Agrave:"抑音符つき大文字A",Aacute:"揚音符つき大文字A",Acirc:"曲折アクセントつき大文字A",Atilde:"チルダつき大文字A",Auml:"分音記号つき大文字A",Aring:"リングつき大文字A",AElig:"AとEの合字",Ccedil:"セディラつき大文字C",Egrave:"抑音符つき大文字E",Eacute:"揚音符つき大文字E",Ecirc:"曲折アクセントつき大文字E",Euml:"分音記号つき大文字E",Igrave:"抑音符つき大文字I",Iacute:"揚音符つき大文字I",Icirc:"曲折アクセントつき大文字I",Iuml:"分音記号つき大文字I",ETH:"[アイスランド語]大文字ETH",Ntilde:"チルダつき大文字N",Ograve:"抑音符つき大文字O",Oacute:"揚音符つき大文字O",Ocirc:"曲折アクセントつき大文字O",Otilde:"チルダつき大文字O",Ouml:" 分音記号つき大文字O", +times:"乗算記号",Oslash:"打ち消し線つき大文字O",Ugrave:"抑音符つき大文字U",Uacute:"揚音符つき大文字U",Ucirc:"曲折アクセントつき大文字U",Uuml:"分音記号つき大文字U",Yacute:"揚音符つき大文字Y",THORN:"[アイスランド語]大文字THORN",szlig:"ドイツ語エスツェット",agrave:"抑音符つき小文字a",aacute:"揚音符つき小文字a",acirc:"曲折アクセントつき小文字a",atilde:"チルダつき小文字a",auml:"分音記号つき小文字a",aring:"リングつき小文字a",aelig:"aとeの合字",ccedil:"セディラつき小文字c",egrave:"抑音符つき小文字e",eacute:"揚音符つき小文字e",ecirc:"曲折アクセントつき小文字e",euml:"分音記号つき小文字e",igrave:"抑音符つき小文字i",iacute:"揚音符つき小文字i",icirc:"曲折アクセントつき小文字i",iuml:"分音記号つき小文字i",eth:"アイスランド語小文字eth", +ntilde:"チルダつき小文字n",ograve:"抑音符つき小文字o",oacute:"揚音符つき小文字o",ocirc:"曲折アクセントつき小文字o",otilde:"チルダつき小文字o",ouml:"分音記号つき小文字o",divide:"除算記号",oslash:"打ち消し線つき小文字o",ugrave:"抑音符つき小文字u",uacute:"揚音符つき小文字u",ucirc:"曲折アクセントつき小文字u",uuml:"分音記号つき小文字u",yacute:"揚音符つき小文字y",thorn:"アイスランド語小文字thorn",yuml:"分音記号つき小文字y",OElig:"OとEの合字",oelig:"oとeの合字",372:"曲折アクセントつき大文字W",374:"曲折アクセントつき大文字Y",373:"曲折アクセントつき小文字w",375:"曲折アクセントつき小文字y",sbquo:"シングル下引用符",8219:"左右逆の左引用符",bdquo:"ダブル下引用符",hellip:"三点リーダ",trade:"商標記号",9658:"右黒三角ポインタ",bull:"黒丸", +rarr:"右矢印",rArr:"右二重矢印",hArr:"左右二重矢印",diams:"ダイヤ",asymp:"漸近"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/km.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/km.js new file mode 100644 index 0000000..65a7518 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/km.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","km",{euro:"សញ្ញា​អឺរ៉ូ",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"សញ្ញា​សេន",pound:"សញ្ញា​ផោន",curren:"សញ្ញា​រូបិយបណ្ណ",yen:"សញ្ញា​យ៉េន",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"សញ្ញា​រក្សា​សិទ្ធិ",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"សញ្ញា​ដឺក្រេ",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"សញ្ញា​មីក្រូ",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ku.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ku.js new file mode 100644 index 0000000..4917d4a --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ku.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ku",{euro:"نیشانەی یۆرۆ",lsquo:"نیشانەی فاریزەی سەرووژێری تاکی چەپ",rsquo:"نیشانەی فاریزەی سەرووژێری تاکی ڕاست",ldquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی چه‌پ",rdquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی ڕاست",ndash:"تەقەڵی کورت",mdash:"تەقەڵی درێژ",iexcl:"نیشانەی هەڵەوگێڕی سەرسوڕهێنەر",cent:"نیشانەی سەنت",pound:"نیشانەی پاوەند",curren:"نیشانەی دراو",yen:"نیشانەی یەنی ژاپۆنی",brvbar:"شریتی ئەستوونی پچڕاو",sect:"نیشانەی دوو s لەسەریەک",uml:"خاڵ",copy:"نیشانەی مافی چاپ", +ordf:"هێڵ لەسەر پیتی a",laquo:"دوو تیری بەدووایەکی چەپ",not:"نیشانەی نەخێر",reg:"نیشانەی R لەناو بازنەدا",macr:"ماکڕۆن",deg:"نیشانەی پلە",sup2:"سەرنووسی دوو",sup3:"سەرنووسی سێ",acute:"لاری تیژ",micro:"نیشانەی u لق درێژی چەپی خواروو",para:"نیشانەی پەڕەگراف",middot:"ناوەڕاستی خاڵ",cedil:"نیشانەی c ژێر چووکرە",sup1:"سەرنووسی یەک",ordm:"هێڵ لەژێر پیتی o",raquo:"دوو تیری بەدووایەکی ڕاست",frac14:"یەک لەسەر چووار",frac12:"یەک لەسەر دوو",frac34:"سێ لەسەر چووار",iquest:"هێمای هەڵەوگێری پرسیار",Agrave:"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری لار", +Aacute:"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری تیژ",Acirc:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Atilde:"پیتی لاتینی A-ی گەورە لەگەڵ زەڕە",Auml:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Aring:"پیتی لاتینی گەورەی Å",AElig:"پیتی لاتینی گەورەی Æ",Ccedil:"پیتی لاتینی C-ی گەورە لەگەڵ ژێر چووکرە",Egrave:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری لار",Eacute:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ecirc:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری",Euml:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری", +Igrave:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری لار",Iacute:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری تیژ",Icirc:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",Iuml:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",ETH:"پیتی لاتینی E-ی گەورەی",Ntilde:"پیتی لاتینی N-ی گەورە لەگەڵ زەڕە",Ograve:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری لار",Oacute:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ocirc:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری",Otilde:"پیتی لاتینی O-ی گەورە لەگەڵ زەڕە",Ouml:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری", +times:"نیشانەی لێکدان",Oslash:"پیتی لاتینی گەورەی Ø لەگەڵ هێمای دڵ وەستان",Ugrave:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری لار",Uacute:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ucirc:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Uuml:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Yacute:"پیتی لاتینی Y-ی گەورە لەگەڵ ڕوومەتداری تیژ",THORN:"پیتی لاتینی دڕکی گەورە",szlig:"پیتی لاتنی نووک تیژی s",agrave:"پیتی لاتینی a-ی بچووک لەگەڵ ڕوومەتداری لار",aacute:"پیتی لاتینی a-ی بچووك لەگەڵ ڕوومەتداری تیژ",acirc:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری", +atilde:"پیتی لاتینی a-ی بچووك لەگەڵ زەڕە",auml:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری",aring:"پیتی لاتینی å-ی بچووك",aelig:"پیتی لاتینی æ-ی بچووك",ccedil:"پیتی لاتینی c-ی بچووك لەگەڵ ژێر چووکرە",egrave:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری لار",eacute:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری تیژ",ecirc:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",euml:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",igrave:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری لار",iacute:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری تیژ", +icirc:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",iuml:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",eth:"پیتی لاتینی e-ی بچووك",ntilde:"پیتی لاتینی n-ی بچووك لەگەڵ زەڕە",ograve:"پیتی لاتینی o-ی بچووك لەگەڵ ڕوومەتداری لار",oacute:"پیتی لاتینی o-ی بچووك له‌گەڵ ڕوومەتداری تیژ",ocirc:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",otilde:"پیتی لاتینی o-ی بچووك لەگەڵ زەڕە",ouml:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",divide:"نیشانەی دابەش",oslash:"پیتی لاتینی گەورەی ø لەگەڵ هێمای دڵ وەستان",ugrave:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری لار", +uacute:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری تیژ",ucirc:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",uuml:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",yacute:"پیتی لاتینی y-ی بچووك لەگەڵ ڕوومەتداری تیژ",thorn:"پیتی لاتینی دڕکی بچووك",yuml:"پیتی لاتینی y-ی بچووك لەگەڵ نیشانە لەسەری",OElig:"پیتی لاتینی گەورەی پێکەوەنووسراوی OE",oelig:"پیتی لاتینی بچووکی پێکەوەنووسراوی oe",372:"پیتی لاتینی W-ی گەورە لەگەڵ نیشانە لەسەری",374:"پیتی لاتینی Y-ی گەورە لەگەڵ نیشانە لەسەری",373:"پیتی لاتینی w-ی بچووکی لەگەڵ نیشانە لەسەری", +375:"پیتی لاتینی y-ی بچووکی لەگەڵ نیشانە لەسەری",sbquo:"نیشانەی فاریزەی نزم",8219:"نیشانەی فاریزەی بەرزی پێچەوانە",bdquo:"دوو فاریزەی تەنیش یەك",hellip:"ئاسۆیی بازنە",trade:"نیشانەی بازرگانی",9658:"ئاراستەی ڕەشی دەستی ڕاست",bull:"فیشەك",rarr:"تیری دەستی ڕاست",rArr:"دووتیری دەستی ڕاست",hArr:"دوو تیری ڕاست و چەپ",diams:"ڕەشی پاقڵاوەیی",asymp:"نیشانەی یەکسانە"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/lv.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/lv.js new file mode 100644 index 0000000..50a77d3 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/lv.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","lv",{euro:"Euro zīme",lsquo:"Kreisā vienkārtīga pēdiņa",rsquo:"Labā vienkārtīga pēdiņa",ldquo:"Kreisā dubult pēdiņa",rdquo:"Labā dubult pēdiņa",ndash:"En svītra",mdash:"Em svītra",iexcl:"Apgriezta izsaukuma zīme",cent:"Centu naudas zīme",pound:"Sterliņu mārciņu naudas zīme",curren:"Valūtas zīme",yen:"Jenu naudas zīme",brvbar:"Vertikāla pārrauta līnija",sect:"Paragrāfa zīme",uml:"Diakritiska zīme",copy:"Autortiesību zīme",ordf:"Sievišķas kārtas rādītājs", +laquo:"Kreisā dubult stūra pēdiņu zīme",not:"Neparakstīts",reg:"Reģistrēta zīme",macr:"Garumzīme",deg:"Grādu zīme",sup2:"Augšraksts divi",sup3:"Augšraksts trīs",acute:"Akūta uzsvara zīme",micro:"Mikro zīme",para:"Rindkopas zīme ",middot:"Vidējs punkts",cedil:"Āķītis zem burta",sup1:"Augšraksts viens",ordm:"Vīrišķīgas kārtas rādītājs",raquo:"Labā dubult stūra pēdiņu zīme",frac14:"Vulgāra frakcija 1/4",frac12:"Vulgāra frakcija 1/2",frac34:"Vulgāra frakcija 3/4",iquest:"Apgriezta jautājuma zīme",Agrave:"Lielais latīņu burts A ar uzsvara zīmi", +Aacute:"Lielais latīņu burts A ar akūtu uzsvara zīmi",Acirc:"Lielais latīņu burts A ar diakritisku zīmi",Atilde:"Lielais latīņu burts A ar tildi ",Auml:"Lielais latīņu burts A ar diakritisko zīmi",Aring:"Lielais latīņu burts A ar aplīti augšā",AElig:"Lielais latīņu burts Æ",Ccedil:"Lielais latīņu burts C ar āķīti zem burta",Egrave:"Lielais latīņu burts E ar apostrofu",Eacute:"Lielais latīņu burts E ar akūtu uzsvara zīmi",Ecirc:"Lielais latīņu burts E ar diakritisko zīmi",Euml:"Lielais latīņu burts E ar diakritisko zīmi", +Igrave:"Lielais latīņu burts I ar uzsvaras zīmi",Iacute:"Lielais latīņu burts I ar akūtu uzsvara zīmi",Icirc:"Lielais latīņu burts I ar diakritisko zīmi",Iuml:"Lielais latīņu burts I ar diakritisko zīmi",ETH:"Lielais latīņu burts Eth",Ntilde:"Lielais latīņu burts N ar tildi",Ograve:"Lielais latīņu burts O ar uzsvara zīmi",Oacute:"Lielais latīņu burts O ar akūto uzsvara zīmi",Ocirc:"Lielais latīņu burts O ar diakritisko zīmi",Otilde:"Lielais latīņu burts O ar tildi",Ouml:"Lielais latīņu burts O ar diakritisko zīmi", +times:"Reizināšanas zīme ",Oslash:"Lielais latīņu burts O ar iesvītrojumu",Ugrave:"Lielais latīņu burts U ar uzsvaras zīmi",Uacute:"Lielais latīņu burts U ar akūto uzsvars zīmi",Ucirc:"Lielais latīņu burts U ar diakritisko zīmi",Uuml:"Lielais latīņu burts U ar diakritisko zīmi",Yacute:"Lielais latīņu burts Y ar akūto uzsvaras zīmi",THORN:"Lielais latīņu burts torn",szlig:"Mazs latīņu burts ar ligatūru",agrave:"Mazs latīņu burts a ar uzsvara zīmi",aacute:"Mazs latīņu burts a ar akūto uzsvara zīmi", +acirc:"Mazs latīņu burts a ar diakritisko zīmi",atilde:"Mazs latīņu burts a ar tildi",auml:"Mazs latīņu burts a ar diakritisko zīmi",aring:"Mazs latīņu burts a ar aplīti augšā",aelig:"Mazs latīņu burts æ",ccedil:"Mazs latīņu burts c ar āķīti zem burta",egrave:"Mazs latīņu burts e ar uzsvara zīmi ",eacute:"Mazs latīņu burts e ar akūtu uzsvara zīmi",ecirc:"Mazs latīņu burts e ar diakritisko zīmi",euml:"Mazs latīņu burts e ar diakritisko zīmi",igrave:"Mazs latīņu burts i ar uzsvara zīmi ",iacute:"Mazs latīņu burts i ar akūtu uzsvara zīmi", +icirc:"Mazs latīņu burts i ar diakritisko zīmi",iuml:"Mazs latīņu burts i ar diakritisko zīmi",eth:"Mazs latīņu burts eth",ntilde:"Mazs latīņu burts n ar tildi",ograve:"Mazs latīņu burts o ar uzsvara zīmi ",oacute:"Mazs latīņu burts o ar akūtu uzsvara zīmi",ocirc:"Mazs latīņu burts o ar diakritisko zīmi",otilde:"Mazs latīņu burts o ar tildi",ouml:"Mazs latīņu burts o ar diakritisko zīmi",divide:"Dalīšanas zīme",oslash:"Mazs latīņu burts o ar iesvītrojumu",ugrave:"Mazs latīņu burts u ar uzsvara zīmi ", +uacute:"Mazs latīņu burts u ar akūtu uzsvara zīmi",ucirc:"Mazs latīņu burts u ar diakritisko zīmi",uuml:"Mazs latīņu burts u ar diakritisko zīmi",yacute:"Mazs latīņu burts y ar akūtu uzsvaras zīmi",thorn:"Mazs latīņu burts torns",yuml:"Mazs latīņu burts y ar diakritisko zīmi",OElig:"Liela latīņu ligatūra OE",oelig:"Maza latīņu ligatūra oe",372:"Liels latīņu burts W ar diakritisko zīmi ",374:"Liels latīņu burts Y ar diakritisko zīmi ",373:"Mazs latīņu burts w ar diakritisko zīmi ",375:"Mazs latīņu burts y ar diakritisko zīmi ", +sbquo:"Mazas-9 vienkārtīgas pēdiņas",8219:"Lielas-9 vienkārtīgas apgrieztas pēdiņas",bdquo:"Mazas-9 dubultas pēdiņas",hellip:"Horizontāli daudzpunkti",trade:"Preču zīmes zīme",9658:"Melns pa labi pagriezts radītājs",bull:"Lode",rarr:"Bulta pa labi",rArr:"Dubulta Bulta pa labi",hArr:"Bulta pa kreisi",diams:"Dubulta Bulta pa kreisi",asymp:"Gandrīz vienāds ar"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/nb.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/nb.js new file mode 100644 index 0000000..0cdcde2 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/nb.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","nb",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", +reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde", +Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel", +times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent", +ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks", +uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil", +rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/nl.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/nl.js new file mode 100644 index 0000000..68edf37 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/nl.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","nl",{euro:"Euro-teken",lsquo:"Linker enkel aanhalingsteken",rsquo:"Rechter enkel aanhalingsteken",ldquo:"Linker dubbel aanhalingsteken",rdquo:"Rechter dubbel aanhalingsteken",ndash:"En dash",mdash:"Em dash",iexcl:"Omgekeerd uitroepteken",cent:"Cent-teken",pound:"Pond-teken",curren:"Valuta-teken",yen:"Yen-teken",brvbar:"Gebroken streep",sect:"Paragraaf-teken",uml:"Trema",copy:"Copyright-teken",ordf:"Vrouwelijk ordinaal",laquo:"Linker guillemet",not:"Ongelijk-teken", +reg:"Geregistreerd handelsmerk-teken",macr:"Macron",deg:"Graden-teken",sup2:"Superscript twee",sup3:"Superscript drie",acute:"Accent aigu",micro:"Micro-teken",para:"Alinea-teken",middot:"Halfhoge punt",cedil:"Cedille",sup1:"Superscript een",ordm:"Mannelijk ordinaal",raquo:"Rechter guillemet",frac14:"Breuk kwart",frac12:"Breuk half",frac34:"Breuk driekwart",iquest:"Omgekeerd vraagteken",Agrave:"Latijnse hoofdletter A met een accent grave",Aacute:"Latijnse hoofdletter A met een accent aigu",Acirc:"Latijnse hoofdletter A met een circonflexe", +Atilde:"Latijnse hoofdletter A met een tilde",Auml:"Latijnse hoofdletter A met een trema",Aring:"Latijnse hoofdletter A met een corona",AElig:"Latijnse hoofdletter Æ",Ccedil:"Latijnse hoofdletter C met een cedille",Egrave:"Latijnse hoofdletter E met een accent grave",Eacute:"Latijnse hoofdletter E met een accent aigu",Ecirc:"Latijnse hoofdletter E met een circonflexe",Euml:"Latijnse hoofdletter E met een trema",Igrave:"Latijnse hoofdletter I met een accent grave",Iacute:"Latijnse hoofdletter I met een accent aigu", +Icirc:"Latijnse hoofdletter I met een circonflexe",Iuml:"Latijnse hoofdletter I met een trema",ETH:"Latijnse hoofdletter Eth",Ntilde:"Latijnse hoofdletter N met een tilde",Ograve:"Latijnse hoofdletter O met een accent grave",Oacute:"Latijnse hoofdletter O met een accent aigu",Ocirc:"Latijnse hoofdletter O met een circonflexe",Otilde:"Latijnse hoofdletter O met een tilde",Ouml:"Latijnse hoofdletter O met een trema",times:"Maal-teken",Oslash:"Latijnse hoofdletter O met een schuine streep",Ugrave:"Latijnse hoofdletter U met een accent grave", +Uacute:"Latijnse hoofdletter U met een accent aigu",Ucirc:"Latijnse hoofdletter U met een circonflexe",Uuml:"Latijnse hoofdletter U met een trema",Yacute:"Latijnse hoofdletter Y met een accent aigu",THORN:"Latijnse hoofdletter Thorn",szlig:"Latijnse kleine ringel-s",agrave:"Latijnse kleine letter a met een accent grave",aacute:"Latijnse kleine letter a met een accent aigu",acirc:"Latijnse kleine letter a met een circonflexe",atilde:"Latijnse kleine letter a met een tilde",auml:"Latijnse kleine letter a met een trema", +aring:"Latijnse kleine letter a met een corona",aelig:"Latijnse kleine letter æ",ccedil:"Latijnse kleine letter c met een cedille",egrave:"Latijnse kleine letter e met een accent grave",eacute:"Latijnse kleine letter e met een accent aigu",ecirc:"Latijnse kleine letter e met een circonflexe",euml:"Latijnse kleine letter e met een trema",igrave:"Latijnse kleine letter i met een accent grave",iacute:"Latijnse kleine letter i met een accent aigu",icirc:"Latijnse kleine letter i met een circonflexe", +iuml:"Latijnse kleine letter i met een trema",eth:"Latijnse kleine letter eth",ntilde:"Latijnse kleine letter n met een tilde",ograve:"Latijnse kleine letter o met een accent grave",oacute:"Latijnse kleine letter o met een accent aigu",ocirc:"Latijnse kleine letter o met een circonflexe",otilde:"Latijnse kleine letter o met een tilde",ouml:"Latijnse kleine letter o met een trema",divide:"Deel-teken",oslash:"Latijnse kleine letter o met een schuine streep",ugrave:"Latijnse kleine letter u met een accent grave", +uacute:"Latijnse kleine letter u met een accent aigu",ucirc:"Latijnse kleine letter u met een circonflexe",uuml:"Latijnse kleine letter u met een trema",yacute:"Latijnse kleine letter y met een accent aigu",thorn:"Latijnse kleine letter thorn",yuml:"Latijnse kleine letter y met een trema",OElig:"Latijnse hoofdletter Œ",oelig:"Latijnse kleine letter œ",372:"Latijnse hoofdletter W met een circonflexe",374:"Latijnse hoofdletter Y met een circonflexe",373:"Latijnse kleine letter w met een circonflexe", +375:"Latijnse kleine letter y met een circonflexe",sbquo:"Lage enkele aanhalingsteken",8219:"Hoge omgekeerde enkele aanhalingsteken",bdquo:"Lage dubbele aanhalingsteken",hellip:"Beletselteken",trade:"Trademark-teken",9658:"Zwarte driehoek naar rechts",bull:"Bullet",rarr:"Pijl naar rechts",rArr:"Dubbele pijl naar rechts",hArr:"Dubbele pijl naar links",diams:"Zwart ruitje",asymp:"Benaderingsteken"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/no.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/no.js new file mode 100644 index 0000000..eecc56c --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/no.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","no",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", +reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde", +Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel", +times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent", +ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks", +uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil", +rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/pl.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/pl.js new file mode 100644 index 0000000..f21a09d --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/pl.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","pl",{euro:"Znak euro",lsquo:"Cudzysłów pojedynczy otwierający",rsquo:"Cudzysłów pojedynczy zamykający",ldquo:"Cudzysłów apostrofowy otwierający",rdquo:"Cudzysłów apostrofowy zamykający",ndash:"Półpauza",mdash:"Pauza",iexcl:"Odwrócony wykrzyknik",cent:"Znak centa",pound:"Znak funta",curren:"Znak waluty",yen:"Znak jena",brvbar:"Przerwana pionowa kreska",sect:"Paragraf",uml:"Diereza",copy:"Znak praw autorskich",ordf:"Wskaźnik rodzaju żeńskiego liczebnika porządkowego", +laquo:"Lewy cudzysłów ostrokątny",not:"Znak negacji",reg:"Zastrzeżony znak towarowy",macr:"Makron",deg:"Znak stopnia",sup2:"Druga potęga",sup3:"Trzecia potęga",acute:"Akcent ostry",micro:"Znak mikro",para:"Znak akapitu",middot:"Kropka środkowa",cedil:"Cedylla",sup1:"Pierwsza potęga",ordm:"Wskaźnik rodzaju męskiego liczebnika porządkowego",raquo:"Prawy cudzysłów ostrokątny",frac14:"Ułamek zwykły jedna czwarta",frac12:"Ułamek zwykły jedna druga",frac34:"Ułamek zwykły trzy czwarte",iquest:"Odwrócony znak zapytania", +Agrave:"Wielka litera A z akcentem ciężkim",Aacute:"Wielka litera A z akcentem ostrym",Acirc:"Wielka litera A z akcentem przeciągłym",Atilde:"Wielka litera A z tyldą",Auml:"Wielka litera A z dierezą",Aring:"Wielka litera A z kółkiem",AElig:"Wielka ligatura Æ",Ccedil:"Wielka litera C z cedyllą",Egrave:"Wielka litera E z akcentem ciężkim",Eacute:"Wielka litera E z akcentem ostrym",Ecirc:"Wielka litera E z akcentem przeciągłym",Euml:"Wielka litera E z dierezą",Igrave:"Wielka litera I z akcentem ciężkim", +Iacute:"Wielka litera I z akcentem ostrym",Icirc:"Wielka litera I z akcentem przeciągłym",Iuml:"Wielka litera I z dierezą",ETH:"Wielka litera Eth",Ntilde:"Wielka litera N z tyldą",Ograve:"Wielka litera O z akcentem ciężkim",Oacute:"Wielka litera O z akcentem ostrym",Ocirc:"Wielka litera O z akcentem przeciągłym",Otilde:"Wielka litera O z tyldą",Ouml:"Wielka litera O z dierezą",times:"Znak mnożenia wektorowego",Oslash:"Wielka litera O z przekreśleniem",Ugrave:"Wielka litera U z akcentem ciężkim",Uacute:"Wielka litera U z akcentem ostrym", +Ucirc:"Wielka litera U z akcentem przeciągłym",Uuml:"Wielka litera U z dierezą",Yacute:"Wielka litera Y z akcentem ostrym",THORN:"Wielka litera Thorn",szlig:"Mała litera ostre s (eszet)",agrave:"Mała litera a z akcentem ciężkim",aacute:"Mała litera a z akcentem ostrym",acirc:"Mała litera a z akcentem przeciągłym",atilde:"Mała litera a z tyldą",auml:"Mała litera a z dierezą",aring:"Mała litera a z kółkiem",aelig:"Mała ligatura æ",ccedil:"Mała litera c z cedyllą",egrave:"Mała litera e z akcentem ciężkim", +eacute:"Mała litera e z akcentem ostrym",ecirc:"Mała litera e z akcentem przeciągłym",euml:"Mała litera e z dierezą",igrave:"Mała litera i z akcentem ciężkim",iacute:"Mała litera i z akcentem ostrym",icirc:"Mała litera i z akcentem przeciągłym",iuml:"Mała litera i z dierezą",eth:"Mała litera eth",ntilde:"Mała litera n z tyldą",ograve:"Mała litera o z akcentem ciężkim",oacute:"Mała litera o z akcentem ostrym",ocirc:"Mała litera o z akcentem przeciągłym",otilde:"Mała litera o z tyldą",ouml:"Mała litera o z dierezą", +divide:"Anglosaski znak dzielenia",oslash:"Mała litera o z przekreśleniem",ugrave:"Mała litera u z akcentem ciężkim",uacute:"Mała litera u z akcentem ostrym",ucirc:"Mała litera u z akcentem przeciągłym",uuml:"Mała litera u z dierezą",yacute:"Mała litera y z akcentem ostrym",thorn:"Mała litera thorn",yuml:"Mała litera y z dierezą",OElig:"Wielka ligatura OE",oelig:"Mała ligatura oe",372:"Wielka litera W z akcentem przeciągłym",374:"Wielka litera Y z akcentem przeciągłym",373:"Mała litera w z akcentem przeciągłym", +375:"Mała litera y z akcentem przeciągłym",sbquo:"Pojedynczy apostrof dolny",8219:"Pojedynczy apostrof górny",bdquo:"Podwójny apostrof dolny",hellip:"Wielokropek",trade:"Znak towarowy",9658:"Czarny wskaźnik wskazujący w prawo",bull:"Punktor",rarr:"Strzałka w prawo",rArr:"Podwójna strzałka w prawo",hArr:"Podwójna strzałka w lewo",diams:"Czarny znak karo",asymp:"Znak prawie równe"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js new file mode 100644 index 0000000..e3f7831 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","pt-br",{euro:"Euro",lsquo:"Aspas simples esquerda",rsquo:"Aspas simples direita",ldquo:"Aspas duplas esquerda",rdquo:"Aspas duplas direita",ndash:"Traço",mdash:"Travessão",iexcl:"Ponto de exclamação invertido",cent:"Cent",pound:"Cerquilha",curren:"Dinheiro",yen:"Yen",brvbar:"Bara interrompida",sect:"Símbolo de Parágrafo",uml:"Trema",copy:"Direito de Cópia",ordf:"Indicador ordinal feminino",laquo:"Aspas duplas angulares esquerda",not:"Negação",reg:"Marca Registrada", +macr:"Mácron",deg:"Grau",sup2:"2 Superscrito",sup3:"3 Superscrito",acute:"Acento agudo",micro:"Micro",para:"Pé de mosca",middot:"Ponto mediano",cedil:"Cedilha",sup1:"1 Superscrito",ordm:"Indicador ordinal masculino",raquo:"Aspas duplas angulares direita",frac14:"Um quarto",frac12:"Um meio",frac34:"Três quartos",iquest:"Interrogação invertida",Agrave:"A maiúsculo com acento grave",Aacute:"A maiúsculo com acento agudo",Acirc:"A maiúsculo com acento circunflexo",Atilde:"A maiúsculo com til",Auml:"A maiúsculo com trema", +Aring:"A maiúsculo com anel acima",AElig:"Æ maiúsculo",Ccedil:"Ç maiúlculo",Egrave:"E maiúsculo com acento grave",Eacute:"E maiúsculo com acento agudo",Ecirc:"E maiúsculo com acento circumflexo",Euml:"E maiúsculo com trema",Igrave:"I maiúsculo com acento grave",Iacute:"I maiúsculo com acento agudo",Icirc:"I maiúsculo com acento circunflexo",Iuml:"I maiúsculo com crase",ETH:"Eth maiúsculo",Ntilde:"N maiúsculo com til",Ograve:"O maiúsculo com acento grave",Oacute:"O maiúsculo com acento agudo",Ocirc:"O maiúsculo com acento circunflexo", +Otilde:"O maiúsculo com til",Ouml:"O maiúsculo com trema",times:"Multiplicação",Oslash:"Diâmetro",Ugrave:"U maiúsculo com acento grave",Uacute:"U maiúsculo com acento agudo",Ucirc:"U maiúsculo com acento circunflexo",Uuml:"U maiúsculo com trema",Yacute:"Y maiúsculo com acento agudo",THORN:"Thorn maiúsculo",szlig:"Eszett minúsculo",agrave:"a minúsculo com acento grave",aacute:"a minúsculo com acento agudo",acirc:"a minúsculo com acento circunflexo",atilde:"a minúsculo com til",auml:"a minúsculo com trema", +aring:"a minúsculo com anel acima",aelig:"æ minúsculo",ccedil:"ç minúsculo",egrave:"e minúsculo com acento grave",eacute:"e minúsculo com acento agudo",ecirc:"e minúsculo com acento circunflexo",euml:"e minúsculo com trema",igrave:"i minúsculo com acento grave",iacute:"i minúsculo com acento agudo",icirc:"i minúsculo com acento circunflexo",iuml:"i minúsculo com trema",eth:"eth minúsculo",ntilde:"n minúsculo com til",ograve:"o minúsculo com acento grave",oacute:"o minúsculo com acento agudo",ocirc:"o minúsculo com acento circunflexo", +otilde:"o minúsculo com til",ouml:"o minúsculo com trema",divide:"Divisão",oslash:"o minúsculo com cortado ou diâmetro",ugrave:"u minúsculo com acento grave",uacute:"u minúsculo com acento agudo",ucirc:"u minúsculo com acento circunflexo",uuml:"u minúsculo com trema",yacute:"y minúsculo com acento agudo",thorn:"thorn minúsculo",yuml:"y minúsculo com trema",OElig:"Ligação tipográfica OE maiúscula",oelig:"Ligação tipográfica oe minúscula",372:"W maiúsculo com acento circunflexo",374:"Y maiúsculo com acento circunflexo", +373:"w minúsculo com acento circunflexo",375:"y minúsculo com acento circunflexo",sbquo:"Aspas simples inferior direita",8219:"Aspas simples superior esquerda",bdquo:"Aspas duplas inferior direita",hellip:"Reticências",trade:"Trade mark",9658:"Ponta de seta preta para direita",bull:"Ponto lista",rarr:"Seta para direita",rArr:"Seta dupla para direita",hArr:"Seta dupla direita e esquerda",diams:"Ouros",asymp:"Aproximadamente"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/pt.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/pt.js new file mode 100644 index 0000000..11ef746 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/pt.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","pt",{euro:"Símbolo do Euro",lsquo:"Aspa esquerda simples",rsquo:"Aspa direita simples",ldquo:"Aspa esquerda dupla",rdquo:"Aspa direita dupla",ndash:"Travessão Simples",mdash:"Travessão Longo",iexcl:"Ponto de exclamação invertido",cent:"Símbolo do Cêntimo",pound:"Símbolo da Libra",curren:"Símbolo de Moeda",yen:"Símbolo do Iene",brvbar:"Barra quebrada",sect:"Símbolo de Secção",uml:"Trema",copy:"Símbolo dos Direitos de Autor",ordf:"Indicador ordinal feminino", +laquo:"Aspa esquerda ângulo duplo",not:"Não Símbolo",reg:"Símbolo de Registado",macr:"Mácron",deg:"Símbolo de Grau",sup2:"Expoente 2",sup3:"Expoente 3",acute:"Acento agudo",micro:"Símbolo de Micro",para:"Símbolo de Parágrafo",middot:"Ponto do Meio",cedil:"Cedilha",sup1:"Expoente 1",ordm:"Indicador ordinal masculino",raquo:"Aspas ângulo duplo pra Direita",frac14:"Fração vulgar 1/4",frac12:"Fração vulgar 1/2",frac34:"Fração vulgar 3/4",iquest:"Ponto de interrugação invertido",Agrave:"Letra maiúscula latina A com acento grave", +Aacute:"Letra maiúscula latina A com acento agudo",Acirc:"Letra maiúscula latina A com circunflexo",Atilde:"Letra maiúscula latina A com til",Auml:"Letra maiúscula latina A com trema",Aring:"Letra maiúscula latina A com sinal diacrítico",AElig:"Letra Maiúscula Latina Æ",Ccedil:"Letra maiúscula latina C com cedilha",Egrave:"Letra maiúscula latina E com acento grave",Eacute:"Letra maiúscula latina E com acento agudo",Ecirc:"Letra maiúscula latina E com circunflexo",Euml:"Letra maiúscula latina E com trema", +Igrave:"Letra maiúscula latina I com acento grave",Iacute:"Letra maiúscula latina I com acento agudo",Icirc:"Letra maiúscula latina I com cincunflexo",Iuml:"Letra maiúscula latina I com trema",ETH:"Letra maiúscula latina Eth (Ðð)",Ntilde:"Letra maiúscula latina N com til",Ograve:"Letra maiúscula latina O com acento grave",Oacute:"Letra maiúscula latina O com acento agudo",Ocirc:"Letra maiúscula latina I com circunflexo",Otilde:"Letra maiúscula latina O com til",Ouml:"Letra maiúscula latina O com trema", +times:"Símbolo de Multiplicação",Oslash:"Letra maiúscula O com barra",Ugrave:"Letra maiúscula latina U com acento grave",Uacute:"Letra maiúscula latina U com acento agudo",Ucirc:"Letra maiúscula latina U com circunflexo",Uuml:"Letra maiúscula latina E com trema",Yacute:"Letra maiúscula latina Y com acento agudo",THORN:"Letra maiúscula latina Rúnico",szlig:"Letra minúscula latina s forte",agrave:"Letra minúscula latina a com acento grave",aacute:"Letra minúscula latina a com acento agudo",acirc:"Letra minúscula latina a com circunflexo", +atilde:"Letra minúscula latina a com til",auml:"Letra minúscula latina a com trema",aring:"Letra minúscula latina a com sinal diacrítico",aelig:"Letra minúscula latina æ",ccedil:"Letra minúscula latina c com cedilha",egrave:"Letra minúscula latina e com acento grave",eacute:"Letra minúscula latina e com acento agudo",ecirc:"Letra minúscula latina e com circunflexo",euml:"Letra minúscula latina e com trema",igrave:"Letra minúscula latina i com acento grave",iacute:"Letra minúscula latina i com acento agudo", +icirc:"Letra minúscula latina i com circunflexo",iuml:"Letra pequena latina i com trema",eth:"Letra minúscula latina eth",ntilde:"Letra minúscula latina n com til",ograve:"Letra minúscula latina o com acento grave",oacute:"Letra minúscula latina o com acento agudo",ocirc:"Letra minúscula latina o com circunflexo",otilde:"Letra minúscula latina o com til",ouml:"Letra minúscula latina o com trema",divide:"Símbolo de Divisão",oslash:"Letra minúscula latina o com barra",ugrave:"Letra minúscula latina u com acento grave", +uacute:"Letra minúscula latina u com acento agudo",ucirc:"Letra minúscula latina u com circunflexo",uuml:"Letra minúscula latina u com trema",yacute:"Letra minúscula latina y com acento agudo",thorn:"Letra minúscula latina Rúnico",yuml:"Letra minúscula latina y com trema",OElig:"Ligadura maiúscula latina OE",oelig:"Ligadura minúscula latina oe",372:"Letra maiúscula latina W com circunflexo",374:"Letra maiúscula latina Y com circunflexo",373:"Letra minúscula latina w com circunflexo",375:"Letra minúscula latina y com circunflexo", +sbquo:"Aspa Simples inferior-9",8219:"Aspa Simples superior invertida-9",bdquo:"Aspa Duplas inferior-9",hellip:"Elipse Horizontal ",trade:"Símbolo de Marca Registada",9658:"Ponteiro preto direito",bull:"Marca",rarr:"Seta para a direita",rArr:"Seta dupla para a direita",hArr:"Seta dupla direita esquerda",diams:"Naipe diamante preto",asymp:"Quase igual a "}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ru.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ru.js new file mode 100644 index 0000000..866e865 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ru.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ru",{euro:"Знак евро",lsquo:"Левая одинарная кавычка",rsquo:"Правая одинарная кавычка",ldquo:"Левая двойная кавычка",rdquo:"Левая двойная кавычка",ndash:"Среднее тире",mdash:"Длинное тире",iexcl:"перевёрнутый восклицательный знак",cent:"Цент",pound:"Фунт",curren:"Знак валюты",yen:"Йена",brvbar:"Вертикальная черта с разрывом",sect:"Знак параграфа",uml:"Умлаут",copy:"Знак охраны авторского права",ordf:"Указатель окончания женского рода ...ая",laquo:"Левая кавычка-«ёлочка»", +not:"Отрицание",reg:"Знак охраны смежных прав\\t",macr:"Макрон",deg:"Градус",sup2:"Надстрочное два",sup3:"Надстрочное три",acute:"Акут",micro:"Микро",para:"Абзац",middot:"Интерпункт",cedil:"Седиль",sup1:"Надстрочная единица",ordm:"Порядковое числительное",raquo:"Правая кавычка-«ёлочка»",frac14:"Одна четвертая",frac12:"Одна вторая",frac34:"Три четвёртых",iquest:"Перевёрнутый вопросительный знак",Agrave:"Латинская заглавная буква А с апострофом",Aacute:"Латинская заглавная буква A с ударением",Acirc:"Латинская заглавная буква А с циркумфлексом", +Atilde:"Латинская заглавная буква А с тильдой",Auml:"Латинская заглавная буква А с тремой",Aring:"Латинская заглавная буква А с кольцом над ней",AElig:"Латинская большая буква Æ",Ccedil:"Латинская заглавная буква C с седилью",Egrave:"Латинская заглавная буква Е с апострофом",Eacute:"Латинская заглавная буква Е с ударением",Ecirc:"Латинская заглавная буква Е с циркумфлексом",Euml:"Латинская заглавная буква Е с тремой",Igrave:"Латинская заглавная буква I с апострофом",Iacute:"Латинская заглавная буква I с ударением", +Icirc:"Латинская заглавная буква I с циркумфлексом",Iuml:"Латинская заглавная буква I с тремой",ETH:"Латинская большая буква Eth",Ntilde:"Латинская заглавная буква N с тильдой",Ograve:"Латинская заглавная буква O с апострофом",Oacute:"Латинская заглавная буква O с ударением",Ocirc:"Латинская заглавная буква O с циркумфлексом",Otilde:"Латинская заглавная буква O с тильдой",Ouml:"Латинская заглавная буква O с тремой",times:"Знак умножения",Oslash:"Латинская большая перечеркнутая O",Ugrave:"Латинская заглавная буква U с апострофом", +Uacute:"Латинская заглавная буква U с ударением",Ucirc:"Латинская заглавная буква U с циркумфлексом",Uuml:"Латинская заглавная буква U с тремой",Yacute:"Латинская заглавная буква Y с ударением",THORN:"Латинская заглавная буква Thorn",szlig:"Знак диеза",agrave:"Латинская маленькая буква a с апострофом",aacute:"Латинская маленькая буква a с ударением",acirc:"Латинская маленькая буква a с циркумфлексом",atilde:"Латинская маленькая буква a с тильдой",auml:"Латинская маленькая буква a с тремой",aring:"Латинская маленькая буква a с кольцом", +aelig:"Латинская маленькая буква æ",ccedil:"Латинская маленькая буква с с седилью",egrave:"Латинская маленькая буква е с апострофом",eacute:"Латинская маленькая буква е с ударением",ecirc:"Латинская маленькая буква е с циркумфлексом",euml:"Латинская маленькая буква е с тремой",igrave:"Латинская маленькая буква i с апострофом",iacute:"Латинская маленькая буква i с ударением",icirc:"Латинская маленькая буква i с циркумфлексом",iuml:"Латинская маленькая буква i с тремой",eth:"Латинская маленькая буква eth", +ntilde:"Латинская маленькая буква n с тильдой",ograve:"Латинская маленькая буква o с апострофом",oacute:"Латинская маленькая буква o с ударением",ocirc:"Латинская маленькая буква o с циркумфлексом",otilde:"Латинская маленькая буква o с тильдой",ouml:"Латинская маленькая буква o с тремой",divide:"Знак деления",oslash:"Латинская строчная перечеркнутая o",ugrave:"Латинская маленькая буква u с апострофом",uacute:"Латинская маленькая буква u с ударением",ucirc:"Латинская маленькая буква u с циркумфлексом", +uuml:"Латинская маленькая буква u с тремой",yacute:"Латинская маленькая буква y с ударением",thorn:"Латинская маленькая буква thorn",yuml:"Латинская маленькая буква y с тремой",OElig:"Латинская прописная лигатура OE",oelig:"Латинская строчная лигатура oe",372:"Латинская заглавная буква W с циркумфлексом",374:"Латинская заглавная буква Y с циркумфлексом",373:"Латинская маленькая буква w с циркумфлексом",375:"Латинская маленькая буква y с циркумфлексом",sbquo:"Нижняя одинарная кавычка",8219:"Правая одинарная кавычка", +bdquo:"Левая двойная кавычка",hellip:"Горизонтальное многоточие",trade:"Товарный знак",9658:"Черный указатель вправо",bull:"Маркер списка",rarr:"Стрелка вправо",rArr:"Двойная стрелка вправо",hArr:"Двойная стрелка влево-вправо",diams:"Черный ромб",asymp:"Примерно равно"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/si.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/si.js new file mode 100644 index 0000000..1255a35 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/si.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","si",{euro:"යුරෝ සලකුණ",lsquo:"වමේ තනි උපුටා දක්වීම ",rsquo:"දකුණේ තනි උපුටා දක්වීම ",ldquo:"වමේ දිත්ව උපුටා දක්වීම ",rdquo:"දකුණේ දිත්ව උපුටා දක්වීම ",ndash:"En dash",mdash:"Em dash",iexcl:"යටිකුරු හර්ෂදී ",cent:"Cent sign",pound:"Pound sign",curren:"මුල්‍යමය ",yen:"යෙන් ",brvbar:"Broken bar",sect:"තෙරේම් ",uml:"Diaeresis",copy:"පිටපත් අයිතිය ",ordf:"දර්ශකය",laquo:"Left-pointing double angle quotation mark",not:"සලකුණක් නොවේ",reg:"සලකුණක් ලියාපදිංචි කිරීම", +macr:"මුද්‍රිත ",deg:"සලකුණේ ",sup2:"උඩු ලකුණු දෙක",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent", +Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", +Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent", +Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above", +aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", +ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", +thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer", +bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/sk.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/sk.js new file mode 100644 index 0000000..2d226d0 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/sk.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","sk",{euro:"Znak eura",lsquo:"Ľavá jednoduchá úvodzovka",rsquo:"Pravá jednoduchá úvodzovka",ldquo:"Pravá dvojitá úvodzovka",rdquo:"Pravá dvojitá úvodzovka",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrátený výkričník",cent:"Znak centu",pound:"Znak libry",curren:"Znak meny",yen:"Znak jenu",brvbar:"Prerušená zvislá čiara",sect:"Znak odseku",uml:"Prehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených úvodzoviek vľavo",not:"Logistický zápor", +reg:"Znak registrácie",macr:"Pomlčka nad",deg:"Znak stupňa",sup2:"Dvojka ako horný index",sup3:"Trojka ako horný index",acute:"Dĺžeň",micro:"Znak mikro",para:"Znak odstavca",middot:"Bodka uprostred",cedil:"Chvost vľavo",sup1:"Jednotka ako horný index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených úvodzoviek vpravo",frac14:"Obyčajný zlomok jedna štvrtina",frac12:"Obyčajný zlomok jedna polovica",frac34:"Obyčajný zlomok tri štvrtiny",iquest:"Otočený otáznik",Agrave:"Veľké písmeno latinky A s accentom", +Aacute:"Veľké písmeno latinky A s dĺžňom",Acirc:"Veľké písmeno latinky A s mäkčeňom",Atilde:"Veľké písmeno latinky A s tildou",Auml:"Veľké písmeno latinky A s dvoma bodkami",Aring:"Veľké písmeno latinky A s krúžkom nad",AElig:"Veľké písmeno latinky Æ",Ccedil:"Veľké písmeno latinky C s chvostom vľavo",Egrave:"Veľké písmeno latinky E s accentom",Eacute:"Veľké písmeno latinky E s dĺžňom",Ecirc:"Veľké písmeno latinky E s mäkčeňom",Euml:"Veľké písmeno latinky E s dvoma bodkami",Igrave:"Veľké písmeno latinky I s accentom", +Iacute:"Veľké písmeno latinky I s dĺžňom",Icirc:"Veľké písmeno latinky I s mäkčeňom",Iuml:"Veľké písmeno latinky I s dvoma bodkami",ETH:"Veľké písmeno latinky Eth",Ntilde:"Veľké písmeno latinky N s tildou",Ograve:"Veľké písmeno latinky O s accentom",Oacute:"Veľké písmeno latinky O s dĺžňom",Ocirc:"Veľké písmeno latinky O s mäkčeňom",Otilde:"Veľké písmeno latinky O s tildou",Ouml:"Veľké písmeno latinky O s dvoma bodkami",times:"Znak násobenia",Oslash:"Veľké písmeno latinky O preškrtnuté",Ugrave:"Veľké písmeno latinky U s accentom", +Uacute:"Veľké písmeno latinky U s dĺžňom",Ucirc:"Veľké písmeno latinky U s mäkčeňom",Uuml:"Veľké písmeno latinky U s dvoma bodkami",Yacute:"Veľké písmeno latinky Y s dĺžňom",THORN:"Veľké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s accentom",aacute:"Malé písmeno latinky a s dĺžňom",acirc:"Malé písmeno latinky a s mäkčeňom",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvoma bodkami",aring:"Malé písmeno latinky a s krúžkom nad", +aelig:"Malé písmeno latinky æ",ccedil:"Malé písmeno latinky c s chvostom vľavo",egrave:"Malé písmeno latinky e s accentom",eacute:"Malé písmeno latinky e s dĺžňom",ecirc:"Malé písmeno latinky e s mäkčeňom",euml:"Malé písmeno latinky e s dvoma bodkami",igrave:"Malé písmeno latinky i s accentom",iacute:"Malé písmeno latinky i s dĺžňom",icirc:"Malé písmeno latinky i s mäkčeňom",iuml:"Malé písmeno latinky i s dvoma bodkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s accentom", +oacute:"Malé písmeno latinky o s dĺžňom",ocirc:"Malé písmeno latinky o s mäkčeňom",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvoma bodkami",divide:"Znak delenia",oslash:"Malé písmeno latinky o preškrtnuté",ugrave:"Malé písmeno latinky u s accentom",uacute:"Malé písmeno latinky u s dĺžňom",ucirc:"Malé písmeno latinky u s mäkčeňom",uuml:"Malé písmeno latinky u s dvoma bodkami",yacute:"Malé písmeno latinky y s dĺžňom",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvoma bodkami", +OElig:"Veľká ligatúra latinky OE",oelig:"Malá ligatúra latinky OE",372:"Veľké písmeno latinky W s mäkčeňom",374:"Veľké písmeno latinky Y s mäkčeňom",373:"Malé písmeno latinky w s mäkčeňom",375:"Malé písmeno latinky y s mäkčeňom",sbquo:"Dolná jednoduchá 9-úvodzovka",8219:"Horná jednoduchá otočená 9-úvodzovka",bdquo:"Dolná dvojitá 9-úvodzovka",hellip:"Trojbodkový úvod",trade:"Znak ibchodnej značky",9658:"Čierny ukazovateľ smerujúci vpravo",bull:"Kruh",rarr:"Šípka vpravo",rArr:"Dvojitá šipka vpravo", +hArr:"Dvojitá šipka vľavo a vpravo",diams:"Čierne piky",asymp:"Skoro sa rovná"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/sl.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/sl.js new file mode 100644 index 0000000..84759b6 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/sl.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","sl",{euro:"Evro znak",lsquo:"Levi enojni narekovaj",rsquo:"Desni enojni narekovaj",ldquo:"Levi dvojni narekovaj",rdquo:"Desni dvojni narekovaj",ndash:"En pomišljaj",mdash:"Em pomišljaj",iexcl:"Obrnjen klicaj",cent:"Cent znak",pound:"Funt znak",curren:"Znak valute",yen:"Jen znak",brvbar:"Zlomljena črta",sect:"Znak oddelka",uml:"Diaeresis",copy:"Znak avtorskih pravic",ordf:"Ženski zaporedni kazalnik",laquo:"Levi obrnjen dvojni kotni narekovaj",not:"Ne znak",reg:"Registrirani znak", +macr:"Macron",deg:"Znak stopinj",sup2:"Nadpisano dva",sup3:"Nadpisano tri",acute:"Ostrivec",micro:"Mikro znak",para:"Pilcrow znak",middot:"Sredinska pika",cedil:"Cedilla",sup1:"Nadpisano ena",ordm:"Moški zaporedni kazalnik",raquo:"Desno obrnjen dvojni kotni narekovaj",frac14:"Ena četrtina",frac12:"Ena polovica",frac34:"Tri četrtine",iquest:"Obrnjen vprašaj",Agrave:"Velika latinska črka A s krativcem",Aacute:"Velika latinska črka A z ostrivcem",Acirc:"Velika latinska črka A s strešico",Atilde:"Velika latinska črka A z tildo", +Auml:"Velika latinska črka A z diaeresis-om",Aring:"Velika latinska črka A z obročem",AElig:"Velika latinska črka Æ",Ccedil:"Velika latinska črka C s cedillo",Egrave:"Velika latinska črka E s krativcem",Eacute:"Velika latinska črka E z ostrivcem",Ecirc:"Velika latinska črka E s strešico",Euml:"Velika latinska črka E z diaeresis-om",Igrave:"Velika latinska črka I s krativcem",Iacute:"Velika latinska črka I z ostrivcem",Icirc:"Velika latinska črka I s strešico",Iuml:"Velika latinska črka I z diaeresis-om", +ETH:"Velika latinska črka Eth",Ntilde:"Velika latinska črka N s tildo",Ograve:"Velika latinska črka O s krativcem",Oacute:"Velika latinska črka O z ostrivcem",Ocirc:"Velika latinska črka O s strešico",Otilde:"Velika latinska črka O s tildo",Ouml:"Velika latinska črka O z diaeresis-om",times:"Znak za množenje",Oslash:"Velika prečrtana latinska črka O",Ugrave:"Velika latinska črka U s krativcem",Uacute:"Velika latinska črka U z ostrivcem",Ucirc:"Velika latinska črka U s strešico",Uuml:"Velika latinska črka U z diaeresis-om", +Yacute:"Velika latinska črka Y z ostrivcem",THORN:"Velika latinska črka Thorn",szlig:"Mala ostra latinska črka s",agrave:"Mala latinska črka a s krativcem",aacute:"Mala latinska črka a z ostrivcem",acirc:"Mala latinska črka a s strešico",atilde:"Mala latinska črka a s tildo",auml:"Mala latinska črka a z diaeresis-om",aring:"Mala latinska črka a z obročem",aelig:"Mala latinska črka æ",ccedil:"Mala latinska črka c s cedillo",egrave:"Mala latinska črka e s krativcem",eacute:"Mala latinska črka e z ostrivcem", +ecirc:"Mala latinska črka e s strešico",euml:"Mala latinska črka e z diaeresis-om",igrave:"Mala latinska črka i s krativcem",iacute:"Mala latinska črka i z ostrivcem",icirc:"Mala latinska črka i s strešico",iuml:"Mala latinska črka i z diaeresis-om",eth:"Mala latinska črka eth",ntilde:"Mala latinska črka n s tildo",ograve:"Mala latinska črka o s krativcem",oacute:"Mala latinska črka o z ostrivcem",ocirc:"Mala latinska črka o s strešico",otilde:"Mala latinska črka o s tildo",ouml:"Mala latinska črka o z diaeresis-om", +divide:"Znak za deljenje",oslash:"Mala prečrtana latinska črka o",ugrave:"Mala latinska črka u s krativcem",uacute:"Mala latinska črka u z ostrivcem",ucirc:"Mala latinska črka u s strešico",uuml:"Mala latinska črka u z diaeresis-om",yacute:"Mala latinska črka y z ostrivcem",thorn:"Mala latinska črka thorn",yuml:"Mala latinska črka y z diaeresis-om",OElig:"Velika latinska ligatura OE",oelig:"Mala latinska ligatura oe",372:"Velika latinska črka W s strešico",374:"Velika latinska črka Y s strešico", +373:"Mala latinska črka w s strešico",375:"Mala latinska črka y s strešico",sbquo:"Enojni nizki-9 narekovaj",8219:"Enojni visoki-obrnjen-9 narekovaj",bdquo:"Dvojni nizki-9 narekovaj",hellip:"Horizontalni izpust",trade:"Znak blagovne znamke",9658:"Črni desno-usmerjen kazalec",bull:"Krogla",rarr:"Desno-usmerjena puščica",rArr:"Desno-usmerjena dvojna puščica",hArr:"Leva in desna dvojna puščica",diams:"Črna kara",asymp:"Skoraj enako"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/sq.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/sq.js new file mode 100644 index 0000000..c709800 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/sq.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","sq",{euro:"Shenja e Euros",lsquo:"Thonjëza majtas me një vi",rsquo:"Thonjëza djathtas me një vi",ldquo:"Thonjëza majtas",rdquo:"Thonjëza djathtas",ndash:"En viza lidhëse",mdash:"Em viza lidhëse",iexcl:"Pikëçuditëse e përmbysur",cent:"Shenja e Centit",pound:"Shejna e Funtit",curren:"Shenja e valutës",yen:"Shenja e Jenit",brvbar:"Viza e këputur",sect:"Shenja e pjesës",uml:"Diaeresis",copy:"Shenja e të drejtave të kopjimit",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Nuk ka shenjë",reg:"Shenja e të regjistruarit",macr:"Macron",deg:"Shenja e shkallës",sup2:"Super-skripta dy",sup3:"Super-skripta tre",acute:"Theks i mprehtë",micro:"Shjenja e Mikros",para:"Pilcrow sign",middot:"Pika e Mesme",cedil:"Hark nën shkronja",sup1:"Super-skripta një",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Thyesa një të katrat",frac12:"Thyesa një të dytat",frac34:"Thyesa tre të katrat",iquest:"Pikëpyetje e përmbysur",Agrave:"Shkronja e madhe latine A me theks të rëndë", +Aacute:"Shkronja e madhe latine A me theks akute",Acirc:"Shkronja e madhe latine A me theks lakor",Atilde:"Shkronja e madhe latine A me tildë",Auml:"Shkronja e madhe latine A me dy pika",Aring:"Shkronja e madhe latine A me unazë mbi",AElig:"Shkronja e madhe latine Æ",Ccedil:"Shkronja e madhe latine C me hark poshtë",Egrave:"Shkronja e madhe latine E me theks të rëndë",Eacute:"Shkronja e madhe latine E me theks akute",Ecirc:"Shkronja e madhe latine E me theks lakor",Euml:"Shkronja e madhe latine E me dy pika", +Igrave:"Shkronja e madhe latine I me theks të rëndë",Iacute:"Shkronja e madhe latine I me theks akute",Icirc:"Shkronja e madhe latine I me theks lakor",Iuml:"Shkronja e madhe latine I me dy pika",ETH:"Shkronja e madhe latine Eth",Ntilde:"Shkronja e madhe latine N me tildë",Ograve:"Shkronja e madhe latine O me theks të rëndë",Oacute:"Shkronja e madhe latine O me theks akute",Ocirc:"Shkronja e madhe latine O me theks lakor",Otilde:"Shkronja e madhe latine O me tildë",Ouml:"Shkronja e madhe latine O me dy pika", +times:"Shenja e shumëzimit",Oslash:"Shkronja e madhe latine O me vizë në mes",Ugrave:"Shkronja e madhe latine U me theks të rëndë",Uacute:"Shkronja e madhe latine U me theks akute",Ucirc:"Shkronja e madhe latine U me theks lakor",Uuml:"Shkronja e madhe latine U me dy pika",Yacute:"Shkronja e madhe latine Y me theks akute",THORN:"Shkronja e madhe latine Thorn",szlig:"Shkronja e vogë latine s e mprehtë",agrave:"Shkronja e vogë latine a me theks të rëndë",aacute:"Shkronja e vogë latine a me theks të mprehtë", +acirc:"Shkronja e vogël latine a me theks lakor",atilde:"Shkronja e vogël latine a me tildë",auml:"Shkronja e vogël latine a me dy pika",aring:"Shkronja e vogë latine a me unazë mbi",aelig:"Shkronja e vogë latine æ",ccedil:"Shkronja e vogël latine c me hark poshtë",egrave:"Shkronja e vogë latine e me theks të rëndë",eacute:"Shkronja e vogë latine e me theks të mprehtë",ecirc:"Shkronja e vogël latine e me theks lakor",euml:"Shkronja e vogël latine e me dy pika",igrave:"Shkronja e vogë latine i me theks të rëndë", +iacute:"Shkronja e vogë latine i me theks të mprehtë",icirc:"Shkronja e vogël latine i me theks lakor",iuml:"Shkronja e vogël latine i me dy pika",eth:"Shkronja e vogë latine eth",ntilde:"Shkronja e vogël latine n me tildë",ograve:"Shkronja e vogë latine o me theks të rëndë",oacute:"Shkronja e vogë latine o me theks të mprehtë",ocirc:"Shkronja e vogël latine o me theks lakor",otilde:"Shkronja e vogël latine o me tildë",ouml:"Shkronja e vogël latine o me dy pika",divide:"Shenja ndarëse",oslash:"Shkronja e vogël latine o me vizë në mes", +ugrave:"Shkronja e vogë latine u me theks të rëndë",uacute:"Shkronja e vogë latine u me theks të mprehtë",ucirc:"Shkronja e vogël latine u me theks lakor",uuml:"Shkronja e vogël latine u me dy pika",yacute:"Shkronja e vogë latine y me theks të mprehtë",thorn:"Shkronja e vogël latine thorn",yuml:"Shkronja e vogël latine y me dy pika",OElig:"Shkronja e madhe e bashkuar latine OE",oelig:"Shkronja e vogël e bashkuar latine oe",372:"Shkronja e madhe latine W me theks lakor",374:"Shkronja e madhe latine Y me theks lakor", +373:"Shkronja e vogël latine w me theks lakor",375:"Shkronja e vogël latine y me theks lakor",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Shenja e Simbolit Tregtarë",9658:"Black right-pointing pointer",bull:"Pulla",rarr:"Shigjeta djathtas",rArr:"Shenja të dyfishta djathtas",hArr:"Shigjeta e dyfishë majtas-djathtas",diams:"Black diamond suit",asymp:"Gati e barabar me"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/sv.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/sv.js new file mode 100644 index 0000000..8f741b9 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/sv.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","sv",{euro:"Eurotecken",lsquo:"Enkelt vänster citattecken",rsquo:"Enkelt höger citattecken",ldquo:"Dubbelt vänster citattecken",rdquo:"Dubbelt höger citattecken",ndash:"Snedstreck",mdash:"Långt tankstreck",iexcl:"Inverterad utropstecken",cent:"Centtecken",pound:"Pundtecken",curren:"Valutatecken",yen:"Yentecken",brvbar:"Brutet lodrätt streck",sect:"Paragraftecken",uml:"Diaeresis",copy:"Upphovsrättstecken",ordf:"Feminit ordningstalsindikator",laquo:"Vänsterställt dubbelt vinkelcitationstecken", +not:"Icke-tecken",reg:"Registrerad",macr:"Macron",deg:"Grader",sup2:"Upphöjt två",sup3:"Upphöjt tre",acute:"Akut accent",micro:"Mikrotecken",para:"Alinea",middot:"Centrerad prick",cedil:"Cedilj",sup1:"Upphöjt en",ordm:"Maskulina ordningsändelsen",raquo:"Högerställt dubbelt vinkelcitationstecken",frac14:"Bråktal - en kvart",frac12:"Bråktal - en halv",frac34:"Bråktal - tre fjärdedelar",iquest:"Inverterat frågetecken",Agrave:"Stort A med grav accent",Aacute:"Stort A med akutaccent",Acirc:"Stort A med circumflex", +Atilde:"Stort A med tilde",Auml:"Stort A med diaresis",Aring:"Stort A med ring ovan",AElig:"Stort Æ",Ccedil:"Stort C med cedilj",Egrave:"Stort E med grav accent",Eacute:"Stort E med aktuaccent",Ecirc:"Stort E med circumflex",Euml:"Stort E med diaeresis",Igrave:"Stort I med grav accent",Iacute:"Stort I med akutaccent",Icirc:"Stort I med circumflex",Iuml:"Stort I med diaeresis",ETH:"Stort Eth",Ntilde:"Stort N med tilde",Ograve:"Stort O med grav accent",Oacute:"Stort O med aktuaccent",Ocirc:"Stort O med circumflex", +Otilde:"Stort O med tilde",Ouml:"Stort O med diaeresis",times:"Multiplicera",Oslash:"Stor Ø",Ugrave:"Stort U med grav accent",Uacute:"Stort U med akutaccent",Ucirc:"Stort U med circumflex",Uuml:"Stort U med diaeresis",Yacute:"Stort Y med akutaccent",THORN:"Stort Thorn",szlig:"Litet dubbel-s/Eszett",agrave:"Litet a med grav accent",aacute:"Litet a med akutaccent",acirc:"Litet a med circumflex",atilde:"Litet a med tilde",auml:"Litet a med diaeresis",aring:"Litet a med ring ovan",aelig:"Bokstaven æ", +ccedil:"Litet c med cedilj",egrave:"Litet e med grav accent",eacute:"Litet e med akutaccent",ecirc:"Litet e med circumflex",euml:"Litet e med diaeresis",igrave:"Litet i med grav accent",iacute:"Litet i med akutaccent",icirc:"LItet i med circumflex",iuml:"Litet i med didaeresis",eth:"Litet eth",ntilde:"Litet n med tilde",ograve:"LItet o med grav accent",oacute:"LItet o med akutaccent",ocirc:"Litet o med circumflex",otilde:"LItet o med tilde",ouml:"Litet o med diaeresis",divide:"Division",oslash:"ø", +ugrave:"Litet u med grav accent",uacute:"Litet u med akutaccent",ucirc:"LItet u med circumflex",uuml:"Litet u med diaeresis",yacute:"Litet y med akutaccent",thorn:"Litet thorn",yuml:"Litet y med diaeresis",OElig:"Stor ligatur av OE",oelig:"Liten ligatur av oe",372:"Stort W med circumflex",374:"Stort Y med circumflex",373:"Litet w med circumflex",375:"Litet y med circumflex",sbquo:"Enkelt lågt 9-citationstecken",8219:"Enkelt högt bakvänt 9-citationstecken",bdquo:"Dubbelt lågt 9-citationstecken",hellip:"Horisontellt uteslutningstecken", +trade:"Varumärke",9658:"Svart högervänd pekare",bull:"Listpunkt",rarr:"Högerpil",rArr:"Dubbel högerpil",hArr:"Dubbel vänsterpil",diams:"Svart ruter",asymp:"Ungefär lika med"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/th.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/th.js new file mode 100644 index 0000000..ae0b00e --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/th.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","th",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"สัญลักษณ์สกุลเงิน",yen:"สัญลักษณ์เงินเยน",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"สัญลักษณ์หัวข้อย่อย",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/tr.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/tr.js new file mode 100644 index 0000000..3dd220a --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/tr.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","tr",{euro:"Euro işareti",lsquo:"Sol tek tırnak işareti",rsquo:"Sağ tek tırnak işareti",ldquo:"Sol çift tırnak işareti",rdquo:"Sağ çift tırnak işareti",ndash:"En tire",mdash:"Em tire",iexcl:"Ters ünlem işareti",cent:"Cent işareti",pound:"Pound işareti",curren:"Para birimi işareti",yen:"Yen işareti",brvbar:"Kırık bar",sect:"Bölüm işareti",uml:"İki sesli harfin ayrılması",copy:"Telif hakkı işareti",ordf:"Dişil sıralı gösterge",laquo:"Sol-işaret çift açı tırnak işareti", +not:"Not işareti",reg:"Kayıtlı işareti",macr:"Makron",deg:"Derece işareti",sup2:"İkili üstsimge",sup3:"Üçlü üstsimge",acute:"Aksan işareti",micro:"Mikro işareti",para:"Pilcrow işareti",middot:"Orta nokta",cedil:"Kedilla",sup1:"Üstsimge",ordm:"Eril sıralı gösterge",raquo:"Sağ işaret çift açı tırnak işareti",frac14:"Bayağı kesrin dörtte biri",frac12:"Bayağı kesrin bir yarım",frac34:"Bayağı kesrin dörtte üç",iquest:"Ters soru işareti",Agrave:"Aksanlı latin harfi",Aacute:"Aşırı aksanıyla Latin harfi", +Acirc:"Çarpık Latin harfi",Atilde:"Tilde latin harfi",Auml:"Sesli harf ayrılımlıı latin harfi",Aring:"Halkalı latin büyük A harfi",AElig:"Latin büyük Æ harfi",Ccedil:"Latin büyük C harfi ile kedilla",Egrave:"Aksanlı latin büyük E harfi",Eacute:"Aşırı vurgulu latin büyük E harfi",Ecirc:"Çarpık latin büyük E harfi",Euml:"Sesli harf ayrılımlıı latin büyük E harfi",Igrave:"Aksanlı latin büyük I harfi",Iacute:"Aşırı aksanlı latin büyük I harfi",Icirc:"Çarpık latin büyük I harfi",Iuml:"Sesli harf ayrılımlıı latin büyük I harfi", +ETH:"Latin büyük Eth harfi",Ntilde:"Tildeli latin büyük N harfi",Ograve:"Aksanlı latin büyük O harfi",Oacute:"Aşırı aksanlı latin büyük O harfi",Ocirc:"Çarpık latin büyük O harfi",Otilde:"Tildeli latin büyük O harfi",Ouml:"Sesli harf ayrılımlı latin büyük O harfi",times:"Çarpma işareti",Oslash:"Vurgulu latin büyük O harfi",Ugrave:"Aksanlı latin büyük U harfi",Uacute:"Aşırı aksanlı latin büyük U harfi",Ucirc:"Çarpık latin büyük U harfi",Uuml:"Sesli harf ayrılımlı latin büyük U harfi",Yacute:"Aşırı aksanlı latin büyük Y harfi", +THORN:"Latin büyük Thorn harfi",szlig:"Latin küçük keskin s harfi",agrave:"Aksanlı latin küçük a harfi",aacute:"Aşırı aksanlı latin küçük a harfi",acirc:"Çarpık latin küçük a harfi",atilde:"Tildeli latin küçük a harfi",auml:"Sesli harf ayrılımlı latin küçük a harfi",aring:"Halkalı latin küçük a harfi",aelig:"Latin büyük æ harfi",ccedil:"Kedillalı latin küçük c harfi",egrave:"Aksanlı latin küçük e harfi",eacute:"Aşırı aksanlı latin küçük e harfi",ecirc:"Çarpık latin küçük e harfi",euml:"Sesli harf ayrılımlı latin küçük e harfi", +igrave:"Aksanlı latin küçük i harfi",iacute:"Aşırı aksanlı latin küçük i harfi",icirc:"Çarpık latin küçük i harfi",iuml:"Sesli harf ayrılımlı latin küçük i harfi",eth:"Latin küçük eth harfi",ntilde:"Tildeli latin küçük n harfi",ograve:"Aksanlı latin küçük o harfi",oacute:"Aşırı aksanlı latin küçük o harfi",ocirc:"Çarpık latin küçük o harfi",otilde:"Tildeli latin küçük o harfi",ouml:"Sesli harf ayrılımlı latin küçük o harfi",divide:"Bölme işareti",oslash:"Vurgulu latin küçük o harfi",ugrave:"Aksanlı latin küçük u harfi", +uacute:"Aşırı aksanlı latin küçük u harfi",ucirc:"Çarpık latin küçük u harfi",uuml:"Sesli harf ayrılımlı latin küçük u harfi",yacute:"Aşırı aksanlı latin küçük y harfi",thorn:"Latin küçük thorn harfi",yuml:"Sesli harf ayrılımlı latin küçük y harfi",OElig:"Latin büyük bağlı OE harfi",oelig:"Latin küçük bağlı oe harfi",372:"Çarpık latin büyük W harfi",374:"Çarpık latin büyük Y harfi",373:"Çarpık latin küçük w harfi",375:"Çarpık latin küçük y harfi",sbquo:"Tek düşük-9 tırnak işareti",8219:"Tek yüksek-ters-9 tırnak işareti", +bdquo:"Çift düşük-9 tırnak işareti",hellip:"Yatay elips",trade:"Marka tescili işareti",9658:"Siyah sağ işaret işaretçisi",bull:"Koyu nokta",rarr:"Sağa doğru ok",rArr:"Sağa doğru çift ok",hArr:"Sol, sağ çift ok",diams:"Siyah elmas takımı",asymp:"Hemen hemen eşit"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/tt.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/tt.js new file mode 100644 index 0000000..2eadb9f --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/tt.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","tt",{euro:"Евро тамгасы",lsquo:"Сул бер иңле куштырнаклар",rsquo:"Уң бер иңле куштырнаклар",ldquo:"Сул ике иңле куштырнаклар",rdquo:"Уң ике иңле куштырнаклар",ndash:"Кыска сызык",mdash:"Озын сызык",iexcl:"Әйләндерелгән өндәү билгесе",cent:"Цент тамгасы",pound:"Фунт тамгасы",curren:"Акча берәмлеге тамгасы",yen:"Иена тамгасы",brvbar:"Broken bar",sect:"Section sign",uml:"Диерезис",copy:"Хокук иясе булу билгесе",ordf:"Feminine ordinal indicator",laquo:"Ачылучы чыршысыман җәя", +not:"Not sign",reg:"Теркәләнгән булу билгесе",macr:"Макрон",deg:"Градус билгесе",sup2:"Икенче өске индекс",sup3:"Өченче өске индекс",acute:"Басым билгесе",micro:"Микро билгесе",para:"Параграф билгесе",middot:"Middle dot",cedil:"Седиль",sup1:"Беренче өске индекс",ordm:"Masculine ordinal indicator",raquo:"Ябылучы чыршысыман җәя",frac14:"Гади дүрттән бер билгесе",frac12:"Гади икедән бер билгесе",frac34:"Гади дүрттән өч билгесе",iquest:"Әйләндерелгән өндәү билгесе",Agrave:"Гравис белән латин A баш хәрефе", +Aacute:"Басым билгесе белән латин A баш хәрефе",Acirc:"Циркумфлекс белән латин A баш хәрефе",Atilde:"Тильда белән латин A баш хәрефе",Auml:"Диерезис белән латин A баш хәрефе",Aring:"Өстендә боҗра булган латин A баш хәрефе",AElig:"Латин Æ баш хәрефе",Ccedil:"Седиль белән латин C баш хәрефе",Egrave:"Гравис белән латин E баш хәрефе",Eacute:"Басым билгесе белән латин E баш хәрефе",Ecirc:"Циркумфлекс белән латин E баш хәрефе",Euml:"Диерезис белән латин E баш хәрефе",Igrave:"Гравис белән латин I баш хәрефе", +Iacute:"Басым билгесе белән латин I баш хәрефе",Icirc:"Циркумфлекс белән латин I баш хәрефе",Iuml:"Диерезис белән латин I баш хәрефе",ETH:"Латин Eth баш хәрефе",Ntilde:"Тильда белән латин N баш хәрефе",Ograve:"Гравис белән латин O баш хәрефе",Oacute:"Басым билгесе белән латин O баш хәрефе",Ocirc:"Циркумфлекс белән латин O баш хәрефе",Otilde:"Тильда белән латин O баш хәрефе",Ouml:"Диерезис белән латин O баш хәрефе",times:"Тапкырлау билгесе",Oslash:"Сызык белән латин O баш хәрефе",Ugrave:"Гравис белән латин U баш хәрефе", +Uacute:"Басым билгесе белән латин U баш хәрефе",Ucirc:"Циркумфлекс белән латин U баш хәрефе",Uuml:"Диерезис белән латин U баш хәрефе",Yacute:"Басым билгесе белән латин Y баш хәрефе",THORN:"Латин Thorn баш хәрефе",szlig:"Латин beta юл хәрефе",agrave:"Гравис белән латин a юл хәрефе",aacute:"Басым билгесе белән латин a юл хәрефе",acirc:"Циркумфлекс белән латин a юл хәрефе",atilde:"Тильда белән латин a юл хәрефе",auml:"Диерезис белән латин a юл хәрефе",aring:"Өстендә боҗра булган латин a юл хәрефе",aelig:"Латин æ юл хәрефе", +ccedil:"Седиль белән латин c юл хәрефе",egrave:"Гравис белән латин e юл хәрефе",eacute:"Басым билгесе белән латин e юл хәрефе",ecirc:"Циркумфлекс белән латин e юл хәрефе",euml:"Диерезис белән латин e юл хәрефе",igrave:"Гравис белән латин i юл хәрефе",iacute:"Басым билгесе белән латин i юл хәрефе",icirc:"Циркумфлекс белән латин i юл хәрефе",iuml:"Диерезис белән латин i юл хәрефе",eth:"Латин eth юл хәрефе",ntilde:"Тильда белән латин n юл хәрефе",ograve:"Гравис белән латин o юл хәрефе",oacute:"Басым билгесе белән латин o юл хәрефе", +ocirc:"Циркумфлекс белән латин o юл хәрефе",otilde:"Тильда белән латин o юл хәрефе",ouml:"Диерезис белән латин o юл хәрефе",divide:"Бүлү билгесе",oslash:"Сызык белән латин o юл хәрефе",ugrave:"Гравис белән латин u юл хәрефе",uacute:"Басым билгесе белән латин u юл хәрефе",ucirc:"Циркумфлекс белән латин u юл хәрефе",uuml:"Диерезис белән латин u юл хәрефе",yacute:"Басым билгесе белән латин y юл хәрефе",thorn:"Латин thorn юл хәрефе",yuml:"Диерезис белән латин y юл хәрефе",OElig:"Латин лигатура OE баш хәрефе", +oelig:"Латин лигатура oe юл хәрефе",372:"Циркумфлекс белән латин W баш хәрефе",374:"Циркумфлекс белән латин Y баш хәрефе",373:"Циркумфлекс белән латин w юл хәрефе",375:"Циркумфлекс белән латин y юл хәрефе",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Ятма эллипс",trade:"Сәүдә маркасы билгесе",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow", +diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ug.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ug.js new file mode 100644 index 0000000..51f4c1d --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/ug.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ug",{euro:"ياۋرو بەلگىسى",lsquo:"يالاڭ پەش سول",rsquo:"يالاڭ پەش ئوڭ",ldquo:"قوش پەش سول",rdquo:"قوش پەش ئوڭ",ndash:"سىزىقچە",mdash:"سىزىق",iexcl:"ئۈندەش",cent:"تىيىن بەلگىسى",pound:"فوند ستېرلىڭ",curren:"پۇل بەلگىسى",yen:"ياپونىيە يىنى",brvbar:"ئۈزۈك بالداق",sect:"پاراگراف بەلگىسى",uml:"تاۋۇش ئايرىش بەلگىسى",copy:"نەشر ھوقۇقى بەلگىسى",ordf:"Feminine ordinal indicator",laquo:"قوش تىرناق سول",not:"غەيرى بەلگە",reg:"خەتلەتكەن تاۋار ماركىسى",macr:"سوزۇش بەلگىسى", +deg:"گىرادۇس بەلگىسى",sup2:"يۇقىرى ئىندېكىس 2",sup3:"يۇقىرى ئىندېكىس 3",acute:"ئۇرغۇ بەلگىسى",micro:"Micro sign",para:"ئابزاس بەلگىسى",middot:"ئوتتۇرا چېكىت",cedil:"ئاستىغا قوشۇلىدىغان بەلگە",sup1:"يۇقىرى ئىندېكىس 1",ordm:"Masculine ordinal indicator",raquo:"قوش تىرناق ئوڭ",frac14:"ئاددىي كەسىر تۆتتىن بىر",frac12:"ئاددىي كەسىر ئىككىدىن بىر",frac34:"ئاددىي كەسىر ئۈچتىن تۆرت",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent", +Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", +Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"قوش پەش ئوڭ",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent", +Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ", +ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"تىك موللاق سوئال بەلگىسى",ograve:"Latin small letter o with grave accent", +oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"بۆلۈش بەلگىسى",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn", +yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"خەتلەتكەن تاۋار ماركىسى بەلگىسى",9658:"Black right-pointing pointer", +bull:"Bullet",rarr:"ئوڭ يا ئوق",rArr:"ئوڭ قوش سىزىق يا ئوق",hArr:"ئوڭ سول قوش سىزىق يا ئوق",diams:"ئۇيۇل غىچ",asymp:"تەخمىنەن تەڭ"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/uk.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/uk.js new file mode 100644 index 0000000..845e752 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/uk.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","uk",{euro:"Знак євро",lsquo:"Ліві одинарні лапки",rsquo:"Праві одинарні лапки",ldquo:"Ліві подвійні лапки",rdquo:"Праві подвійні лапки",ndash:"Середнє тире",mdash:"Довге тире",iexcl:"Перевернутий знак оклику",cent:"Знак цента",pound:"Знак фунта",curren:"Знак валюти",yen:"Знак єни",brvbar:"Переривчаста вертикальна лінія",sect:"Знак параграфу",uml:"Умлаут",copy:"Знак авторських прав",ordf:"Жіночий порядковий вказівник",laquo:"ліві вказівні подвійні кутові дужки", +not:"Заперечення",reg:"Знак охорони суміжних прав",macr:"Макрон",deg:"Знак градуса",sup2:"два у верхньому індексі",sup3:"три у верхньому індексі",acute:"Знак акута",micro:"Знак мікро",para:"Знак абзацу",middot:"Інтерпункт",cedil:"Седиль",sup1:"Один у верхньому індексі",ordm:"Чоловічий порядковий вказівник",raquo:"праві вказівні подвійні кутові дужки",frac14:"Одна четвертина",frac12:"Одна друга",frac34:"три четвертих",iquest:"Перевернутий знак питання",Agrave:"Велика латинська A з гравісом",Aacute:"Велика латинська А з акутом", +Acirc:"Велика латинська А з циркумфлексом",Atilde:"Велика латинська А з тильдою",Auml:"Велике латинське А з умлаутом",Aring:"Велика латинська A з кільцем згори",AElig:"Велика латинська Æ",Ccedil:"Велика латинська C з седиллю",Egrave:"Велика латинська E з гравісом",Eacute:"Велика латинська E з акутом",Ecirc:"Велика латинська E з циркумфлексом",Euml:"Велика латинська А з умлаутом",Igrave:"Велика латинська I з гравісом",Iacute:"Велика латинська I з акутом",Icirc:"Велика латинська I з циркумфлексом", +Iuml:"Велика латинська І з умлаутом",ETH:"Велика латинська Eth",Ntilde:"Велика латинська N з тильдою",Ograve:"Велика латинська O з гравісом",Oacute:"Велика латинська O з акутом",Ocirc:"Велика латинська O з циркумфлексом",Otilde:"Велика латинська O з тильдою",Ouml:"Велика латинська О з умлаутом",times:"Знак множення",Oslash:"Велика латинська перекреслена O ",Ugrave:"Велика латинська U з гравісом",Uacute:"Велика латинська U з акутом",Ucirc:"Велика латинська U з циркумфлексом",Uuml:"Велика латинська U з умлаутом", +Yacute:"Велика латинська Y з акутом",THORN:"Велика латинська Торн",szlig:"Мала латинська есцет",agrave:"Мала латинська a з гравісом",aacute:"Мала латинська a з акутом",acirc:"Мала латинська a з циркумфлексом",atilde:"Мала латинська a з тильдою",auml:"Мала латинська a з умлаутом",aring:"Мала латинська a з кільцем згори",aelig:"Мала латинська æ",ccedil:"Мала латинська C з седиллю",egrave:"Мала латинська e з гравісом",eacute:"Мала латинська e з акутом",ecirc:"Мала латинська e з циркумфлексом",euml:"Мала латинська e з умлаутом", +igrave:"Мала латинська i з гравісом",iacute:"Мала латинська i з акутом",icirc:"Мала латинська i з циркумфлексом",iuml:"Мала латинська i з умлаутом",eth:"Мала латинська Eth",ntilde:"Мала латинська n з тильдою",ograve:"Мала латинська o з гравісом",oacute:"Мала латинська o з акутом",ocirc:"Мала латинська o з циркумфлексом",otilde:"Мала латинська o з тильдою",ouml:"Мала латинська o з умлаутом",divide:"Знак ділення",oslash:"Мала латинська перекреслена o",ugrave:"Мала латинська u з гравісом",uacute:"Мала латинська u з акутом", +ucirc:"Мала латинська u з циркумфлексом",uuml:"Мала латинська u з умлаутом",yacute:"Мала латинська y з акутом",thorn:"Мала латинська торн",yuml:"Мала латинська y з умлаутом",OElig:"Велика латинська лігатура OE",oelig:"Мала латинська лігатура oe",372:"Велика латинська W з циркумфлексом",374:"Велика латинська Y з циркумфлексом",373:"Мала латинська w з циркумфлексом",375:"Мала латинська y з циркумфлексом",sbquo:"Одиничні нижні лабки",8219:"Верхні одиничні обернені лабки",bdquo:"Подвійні нижні лабки", +hellip:"Три крапки",trade:"Знак торгової марки",9658:"Чорний правий вказівник",bull:"Маркер списку",rarr:"Стрілка вправо",rArr:"Подвійна стрілка вправо",hArr:"Подвійна стрілка вліво-вправо",diams:"Чорний діамонт",asymp:"Наближено дорівнює"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/vi.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/vi.js new file mode 100644 index 0000000..d4e4d37 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/vi.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","vi",{euro:"Ký hiệu Euro",lsquo:"Dấu ngoặc đơn trái",rsquo:"Dấu ngoặc đơn phải",ldquo:"Dấu ngoặc đôi trái",rdquo:"Dấu ngoặc đôi phải",ndash:"Gạch ngang tiếng anh",mdash:"Gạch ngang Em",iexcl:"Chuyển đổi dấu chấm than",cent:"Ký tự tiền Mỹ",pound:"Ký tự tiền Anh",curren:"Ký tự tiền tệ",yen:"Ký tự tiền Yên Nhật",brvbar:"Thanh hỏng",sect:"Ký tự khu vực",uml:"Dấu tách đôi",copy:"Ký tự bản quyền",ordf:"Phần chỉ thị giống cái",laquo:"Chọn dấu ngoặc đôi trái",not:"Không có ký tự", +reg:"Ký tự đăng ký",macr:"Dấu nguyên âm dài",deg:"Ký tự độ",sup2:"Chữ trồi lên trên dạng 2",sup3:"Chữ trồi lên trên dạng 3",acute:"Dấu trọng âm",micro:"Ký tự micro",para:"Ký tự đoạn văn",middot:"Dấu chấm tròn",cedil:"Dấu móc lưới",sup1:"Ký tự trồi lên cấp 1",ordm:"Ký tự biểu hiện giống đực",raquo:"Chọn dấu ngoặc đôi phải",frac14:"Tỉ lệ một phần tư",frac12:"Tỉ lệ một nửa",frac34:"Tỉ lệ ba phần tư",iquest:"Chuyển đổi dấu chấm hỏi",Agrave:"Ký tự la-tinh viết hoa A với dấu huyền",Aacute:"Ký tự la-tinh viết hoa A với dấu sắc", +Acirc:"Ký tự la-tinh viết hoa A với dấu mũ",Atilde:"Ký tự la-tinh viết hoa A với dấu ngã",Auml:"Ký tự la-tinh viết hoa A với dấu hai chấm trên đầu",Aring:"Ký tự la-tinh viết hoa A với biểu tượng vòng tròn trên đầu",AElig:"Ký tự la-tinh viết hoa của Æ",Ccedil:"Ký tự la-tinh viết hoa C với dấu móc bên dưới",Egrave:"Ký tự la-tinh viết hoa E với dấu huyền",Eacute:"Ký tự la-tinh viết hoa E với dấu sắc",Ecirc:"Ký tự la-tinh viết hoa E với dấu mũ",Euml:"Ký tự la-tinh viết hoa E với dấu hai chấm trên đầu", +Igrave:"Ký tự la-tinh viết hoa I với dấu huyền",Iacute:"Ký tự la-tinh viết hoa I với dấu sắc",Icirc:"Ký tự la-tinh viết hoa I với dấu mũ",Iuml:"Ký tự la-tinh viết hoa I với dấu hai chấm trên đầu",ETH:"Viết hoa của ký tự Eth",Ntilde:"Ký tự la-tinh viết hoa N với dấu ngã",Ograve:"Ký tự la-tinh viết hoa O với dấu huyền",Oacute:"Ký tự la-tinh viết hoa O với dấu sắc",Ocirc:"Ký tự la-tinh viết hoa O với dấu mũ",Otilde:"Ký tự la-tinh viết hoa O với dấu ngã",Ouml:"Ký tự la-tinh viết hoa O với dấu hai chấm trên đầu", +times:"Ký tự phép toán nhân",Oslash:"Ký tự la-tinh viết hoa A với dấu ngã xuống",Ugrave:"Ký tự la-tinh viết hoa U với dấu huyền",Uacute:"Ký tự la-tinh viết hoa U với dấu sắc",Ucirc:"Ký tự la-tinh viết hoa U với dấu mũ",Uuml:"Ký tự la-tinh viết hoa U với dấu hai chấm trên đầu",Yacute:"Ký tự la-tinh viết hoa Y với dấu sắc",THORN:"Phần viết hoa của ký tự Thorn",szlig:"Ký tự viết nhỏ la-tinh của chữ s",agrave:"Ký tự la-tinh thường với dấu huyền",aacute:"Ký tự la-tinh thường với dấu sắc",acirc:"Ký tự la-tinh thường với dấu mũ", +atilde:"Ký tự la-tinh thường với dấu ngã",auml:"Ký tự la-tinh thường với dấu hai chấm trên đầu",aring:"Ký tự la-tinh viết thường với biểu tượng vòng tròn trên đầu",aelig:"Ký tự la-tinh viết thường của æ",ccedil:"Ký tự la-tinh viết thường của c với dấu móc bên dưới",egrave:"Ký tự la-tinh viết thường e với dấu huyền",eacute:"Ký tự la-tinh viết thường e với dấu sắc",ecirc:"Ký tự la-tinh viết thường e với dấu mũ",euml:"Ký tự la-tinh viết thường e với dấu hai chấm trên đầu",igrave:"Ký tự la-tinh viết thường i với dấu huyền", +iacute:"Ký tự la-tinh viết thường i với dấu sắc",icirc:"Ký tự la-tinh viết thường i với dấu mũ",iuml:"Ký tự la-tinh viết thường i với dấu hai chấm trên đầu",eth:"Ký tự la-tinh viết thường của eth",ntilde:"Ký tự la-tinh viết thường n với dấu ngã",ograve:"Ký tự la-tinh viết thường o với dấu huyền",oacute:"Ký tự la-tinh viết thường o với dấu sắc",ocirc:"Ký tự la-tinh viết thường o với dấu mũ",otilde:"Ký tự la-tinh viết thường o với dấu ngã",ouml:"Ký tự la-tinh viết thường o với dấu hai chấm trên đầu", +divide:"Ký hiệu phép tính chia",oslash:"Ký tự la-tinh viết thường o với dấu ngã",ugrave:"Ký tự la-tinh viết thường u với dấu huyền",uacute:"Ký tự la-tinh viết thường u với dấu sắc",ucirc:"Ký tự la-tinh viết thường u với dấu mũ",uuml:"Ký tự la-tinh viết thường u với dấu hai chấm trên đầu",yacute:"Ký tự la-tinh viết thường y với dấu sắc",thorn:"Ký tự la-tinh viết thường của chữ thorn",yuml:"Ký tự la-tinh viết thường y với dấu hai chấm trên đầu",OElig:"Ký tự la-tinh viết hoa gạch nối OE",oelig:"Ký tự la-tinh viết thường gạch nối OE", +372:"Ký tự la-tinh viết hoa W với dấu mũ",374:"Ký tự la-tinh viết hoa Y với dấu mũ",373:"Ký tự la-tinh viết thường w với dấu mũ",375:"Ký tự la-tinh viết thường y với dấu mũ",sbquo:"Dấu ngoặc đơn thấp số-9",8219:"Dấu ngoặc đơn đảo ngược số-9",bdquo:"Gấp đôi dấu ngoặc đơn số-9",hellip:"Tĩnh dược chiều ngang",trade:"Ký tự thương hiệu",9658:"Ký tự trỏ về hướng bên phải màu đen",bull:"Ký hiệu",rarr:"Mũi tên hướng bên phải",rArr:"Mũi tên hướng bên phải dạng đôi",hArr:"Mũi tên hướng bên trái dạng đôi",diams:"Ký hiệu hình thoi", +asymp:"Gần bằng với"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js new file mode 100644 index 0000000..6896e91 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js @@ -0,0 +1,9 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","zh-cn",{euro:"欧元符号",lsquo:"左单引号",rsquo:"右单引号",ldquo:"左双引号",rdquo:"右双引号",ndash:"短划线",mdash:"长划线",iexcl:"竖翻叹号",cent:"分币符号",pound:"英镑符号",curren:"货币符号",yen:"日元符号",brvbar:"间断条",sect:"节标记",uml:"分音符",copy:"版权所有标记",ordf:"阴性顺序指示符",laquo:"左指双尖引号",not:"非标记",reg:"注册标记",macr:"长音符",deg:"度标记",sup2:"上标二",sup3:"上标三",acute:"锐音符",micro:"微符",para:"段落标记",middot:"中间点",cedil:"下加符",sup1:"上标一",ordm:"阳性顺序指示符",raquo:"右指双尖引号",frac14:"普通分数四分之一",frac12:"普通分数二分之一",frac34:"普通分数四分之三",iquest:"竖翻问号", +Agrave:"带抑音符的拉丁文大写字母 A",Aacute:"带锐音符的拉丁文大写字母 A",Acirc:"带扬抑符的拉丁文大写字母 A",Atilde:"带颚化符的拉丁文大写字母 A",Auml:"带分音符的拉丁文大写字母 A",Aring:"带上圆圈的拉丁文大写字母 A",AElig:"拉丁文大写字母 Ae",Ccedil:"带下加符的拉丁文大写字母 C",Egrave:"带抑音符的拉丁文大写字母 E",Eacute:"带锐音符的拉丁文大写字母 E",Ecirc:"带扬抑符的拉丁文大写字母 E",Euml:"带分音符的拉丁文大写字母 E",Igrave:"带抑音符的拉丁文大写字母 I",Iacute:"带锐音符的拉丁文大写字母 I",Icirc:"带扬抑符的拉丁文大写字母 I",Iuml:"带分音符的拉丁文大写字母 I",ETH:"拉丁文大写字母 Eth",Ntilde:"带颚化符的拉丁文大写字母 N",Ograve:"带抑音符的拉丁文大写字母 O",Oacute:"带锐音符的拉丁文大写字母 O",Ocirc:"带扬抑符的拉丁文大写字母 O",Otilde:"带颚化符的拉丁文大写字母 O", +Ouml:"带分音符的拉丁文大写字母 O",times:"乘号",Oslash:"带粗线的拉丁文大写字母 O",Ugrave:"带抑音符的拉丁文大写字母 U",Uacute:"带锐音符的拉丁文大写字母 U",Ucirc:"带扬抑符的拉丁文大写字母 U",Uuml:"带分音符的拉丁文大写字母 U",Yacute:"带抑音符的拉丁文大写字母 Y",THORN:"拉丁文大写字母 Thorn",szlig:"拉丁文小写字母清音 S",agrave:"带抑音符的拉丁文小写字母 A",aacute:"带锐音符的拉丁文小写字母 A",acirc:"带扬抑符的拉丁文小写字母 A",atilde:"带颚化符的拉丁文小写字母 A",auml:"带分音符的拉丁文小写字母 A",aring:"带上圆圈的拉丁文小写字母 A",aelig:"拉丁文小写字母 Ae",ccedil:"带下加符的拉丁文小写字母 C",egrave:"带抑音符的拉丁文小写字母 E",eacute:"带锐音符的拉丁文小写字母 E",ecirc:"带扬抑符的拉丁文小写字母 E",euml:"带分音符的拉丁文小写字母 E",igrave:"带抑音符的拉丁文小写字母 I", +iacute:"带锐音符的拉丁文小写字母 I",icirc:"带扬抑符的拉丁文小写字母 I",iuml:"带分音符的拉丁文小写字母 I",eth:"拉丁文小写字母 Eth",ntilde:"带颚化符的拉丁文小写字母 N",ograve:"带抑音符的拉丁文小写字母 O",oacute:"带锐音符的拉丁文小写字母 O",ocirc:"带扬抑符的拉丁文小写字母 O",otilde:"带颚化符的拉丁文小写字母 O",ouml:"带分音符的拉丁文小写字母 O",divide:"除号",oslash:"带粗线的拉丁文小写字母 O",ugrave:"带抑音符的拉丁文小写字母 U",uacute:"带锐音符的拉丁文小写字母 U",ucirc:"带扬抑符的拉丁文小写字母 U",uuml:"带分音符的拉丁文小写字母 U",yacute:"带抑音符的拉丁文小写字母 Y",thorn:"拉丁文小写字母 Thorn",yuml:"带分音符的拉丁文小写字母 Y",OElig:"拉丁文大写连字 Oe",oelig:"拉丁文小写连字 Oe",372:"带扬抑符的拉丁文大写字母 W",374:"带扬抑符的拉丁文大写字母 Y", +373:"带扬抑符的拉丁文小写字母 W",375:"带扬抑符的拉丁文小写字母 Y",sbquo:"单下 9 形引号",8219:"单高横翻 9 形引号",bdquo:"双下 9 形引号",hellip:"水平省略号",trade:"商标标志",9658:"实心右指指针",bull:"加重号",rarr:"向右箭头",rArr:"向右双线箭头",hArr:"左右双线箭头",diams:"实心方块纸牌",asymp:"约等于"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/zh.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/zh.js new file mode 100644 index 0000000..7bc2b55 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/lang/zh.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","zh",{euro:"歐元符號",lsquo:"左單引號",rsquo:"右單引號",ldquo:"左雙引號",rdquo:"右雙引號",ndash:"短破折號",mdash:"長破折號",iexcl:"倒置的驚嘆號",cent:"美分符號",pound:"英鎊符號",curren:"貨幣符號",yen:"日圓符號",brvbar:"Broken bar",sect:"章節符號",uml:"分音符號",copy:"版權符號",ordf:"雌性符號",laquo:"左雙角括號",not:"Not 符號",reg:"註冊商標符號",macr:"長音符號",deg:"度數符號",sup2:"上標字 2",sup3:"上標字 3",acute:"尖音符號",micro:"Micro sign",para:"段落符號",middot:"中間點",cedil:"字母 C 下面的尾型符號 ",sup1:"上標",ordm:"雄性符號",raquo:"右雙角括號",frac14:"四分之一符號",frac12:"Vulgar fraction one half", +frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"拉丁大寫字母 E 帶分音符號",Aring:"拉丁大寫字母 A 帶上圓圈",AElig:"拉丁大寫字母 Æ",Ccedil:"拉丁大寫字母 C 帶下尾符號",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis", +Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis", +times:"乘號",Oslash:"拉丁大寫字母 O 帶粗線符號",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde", +auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis", +eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex", +uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark", +hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/specialchar/dialogs/specialchar.js b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/specialchar.js new file mode 100644 index 0000000..c4d1696 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/specialchar/dialogs/specialchar.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("specialchar",function(i){var e,l=i.lang.specialchar,k=function(c){var b,c=c.data?c.data.getTarget():new CKEDITOR.dom.element(c);if("a"==c.getName()&&(b=c.getChild(0).getHtml()))c.removeClass("cke_light_background"),e.hide(),c=i.document.createElement("span"),c.setHtml(b),i.insertText(c.getText())},m=CKEDITOR.tools.addFunction(k),j,g=function(c,b){var a,b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());if("a"==b.getName()&&(a=b.getChild(0).getHtml())){j&&d(null,j); +var f=e.getContentElement("info","htmlPreview").getElement();e.getContentElement("info","charPreview").getElement().setHtml(a);f.setHtml(CKEDITOR.tools.htmlEncode(a));b.getParent().addClass("cke_light_background");j=b}},d=function(c,b){b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());"a"==b.getName()&&(e.getContentElement("info","charPreview").getElement().setHtml(" "),e.getContentElement("info","htmlPreview").getElement().setHtml(" "),b.getParent().removeClass("cke_light_background"), +j=void 0)},n=CKEDITOR.tools.addFunction(function(c){var c=new CKEDITOR.dom.event(c),b=c.getTarget(),a;a=c.getKeystroke();var f="rtl"==i.lang.dir;switch(a){case 38:if(a=b.getParent().getParent().getPrevious())a=a.getChild([b.getParent().getIndex(),0]),a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 40:if(a=b.getParent().getParent().getNext())if((a=a.getChild([b.getParent().getIndex(),0]))&&1==a.type)a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 32:k({data:c});c.preventDefault(); +break;case f?37:39:if(a=b.getParent().getNext())a=a.getChild(0),1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);else if(a=b.getParent().getParent().getNext())(a=a.getChild([0,0]))&&1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);break;case f?39:37:(a=b.getParent().getPrevious())?(a=a.getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):(a=b.getParent().getParent().getPrevious())?(a=a.getLast().getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)): +d(null,b)}});return{title:l.title,minWidth:430,minHeight:280,buttons:[CKEDITOR.dialog.cancelButton],charColumns:17,onLoad:function(){for(var c=this.definition.charColumns,b=i.config.specialChars,a=CKEDITOR.tools.getNextId()+"_specialchar_table_label",f=[''],d=0,g=b.length,h,e;d');for(var j=0;j'+h+''+e+"")}else f.push('")}f.push("")}f.push("
 ');f.push("
",''+l.options+"");this.getContentElement("info","charContainer").getElement().setHtml(f.join(""))},contents:[{id:"info",label:i.lang.common.generalTab, +title:i.lang.common.generalTab,padding:0,align:"top",elements:[{type:"hbox",align:"top",widths:["320px","90px"],children:[{type:"html",id:"charContainer",html:"",onMouseover:g,onMouseout:d,focus:function(){var c=this.getElement().getElementsByTag("a").getItem(0);setTimeout(function(){c.focus();g(null,c)},0)},onShow:function(){var c=this.getElement().getChild([0,0,0,0,0]);setTimeout(function(){c.focus();g(null,c)},0)},onLoad:function(c){e=c.sender}},{type:"hbox",align:"top",widths:["100%"],children:[{type:"vbox", +align:"top",children:[{type:"html",html:"
"},{type:"html",id:"charPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:"
 
"},{type:"html",id:"htmlPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;", +html:"
 
"}]}]}]}]}]}}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/table/dialogs/table.js b/src/main/webapp/ckeditor/plugins/table/dialogs/table.js new file mode 100644 index 0000000..6f65681 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/table/dialogs/table.js @@ -0,0 +1,21 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){function r(a){for(var e=0,l=0,k=0,m,g=a.$.rows.length;kl&&(l=e)}return l}function o(a){return function(){var e=this.getValue(),e=!!(CKEDITOR.dialog.validate.integer()(e)&&0n.getSize("width")?"100%":500:0,getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.width)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&& +a.updateStyle("width",this.getValue())},setup:function(a){this.setValue(a.getStyle("width"))},commit:k}]},{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtHeight",requiredContent:"table{height}",controlStyle:"width:5em",label:a.lang.common.height,title:a.lang.common.cssLengthTooltip,"default":"",getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.height)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles"); +a&&a.updateStyle("height",this.getValue())},setup:function(a){(a=a.getStyle("height"))&&this.setValue(a)},commit:k}]},{type:"html",html:" "},{type:"text",id:"txtCellSpace",requiredContent:"table[cellspacing]",controlStyle:"width:3em",label:a.lang.table.cellSpace,"default":a.filter.check("table[cellspacing]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellSpacing),setup:function(a){this.setValue(a.getAttribute("cellSpacing")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellSpacing", +this.getValue()):d.removeAttribute("cellSpacing")}},{type:"text",id:"txtCellPad",requiredContent:"table[cellpadding]",controlStyle:"width:3em",label:a.lang.table.cellPad,"default":a.filter.check("table[cellpadding]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellPadding),setup:function(a){this.setValue(a.getAttribute("cellPadding")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellPadding",this.getValue()):d.removeAttribute("cellPadding")}}]}]},{type:"html",align:"right", +html:""},{type:"vbox",padding:0,children:[{type:"text",id:"txtCaption",requiredContent:"caption",label:a.lang.table.caption,setup:function(a){this.enable();a=a.getElementsByTag("caption");if(0"+h.widthPx}]},f,{type:"select",id:"wordWrap",label:c.wordWrap,"default":"yes",items:[[c.yes,"yes"],[c.no,"no"]],setup:d(function(a){var b=a.getAttribute("noWrap");if("nowrap"==a.getStyle("white-space")|| +b)return"no"}),commit:function(a){"no"==this.getValue()?a.setStyle("white-space","nowrap"):a.removeStyle("white-space");a.removeAttribute("noWrap")}},f,{type:"select",id:"hAlign",label:c.hAlign,"default":"",items:[[e.notSet,""],[e.alignLeft,"left"],[e.alignCenter,"center"],[e.alignRight,"right"],[e.alignJustify,"justify"]],setup:d(function(a){var b=a.getAttribute("align");return a.getStyle("text-align")||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("text-align",b):a.removeStyle("text-align"); +a.removeAttribute("align")}},{type:"select",id:"vAlign",label:c.vAlign,"default":"",items:[[e.notSet,""],[e.alignTop,"top"],[e.alignMiddle,"middle"],[e.alignBottom,"bottom"],[c.alignBaseline,"baseline"]],setup:d(function(a){var b=a.getAttribute("vAlign"),a=a.getStyle("vertical-align");switch(a){case "top":case "middle":case "bottom":case "baseline":break;default:a=""}return a||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("vertical-align",b):a.removeStyle("vertical-align");a.removeAttribute("vAlign")}}]}, +f,{type:"vbox",padding:0,children:[{type:"select",id:"cellType",label:c.cellType,"default":"td",items:[[c.data,"td"],[c.header,"th"]],setup:d(function(a){return a.getName()}),commit:function(a){a.renameNode(this.getValue())}},f,{type:"text",id:"rowSpan",label:c.rowSpan,"default":"",validate:i.integer(c.invalidRowSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("rowSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("rowSpan",this.getValue()): +a.removeAttribute("rowSpan")}},{type:"text",id:"colSpan",label:c.colSpan,"default":"",validate:i.integer(c.invalidColSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("colSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("colSpan",this.getValue()):a.removeAttribute("colSpan")}},f,{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"bgColor",label:c.bgColor,"default":"",setup:d(function(a){var b=a.getAttribute("bgColor"); +return a.getStyle("background-color")||b}),commit:function(a){this.getValue()?a.setStyle("background-color",this.getValue()):a.removeStyle("background-color");a.removeAttribute("bgColor")}},k?{type:"button",id:"bgColorChoose","class":"colorChooser",label:c.chooseColor,onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","bgColor").setValue(a);this.focus()},this)}}:f]},f, +{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"borderColor",label:c.borderColor,"default":"",setup:d(function(a){var b=a.getAttribute("borderColor");return a.getStyle("border-color")||b}),commit:function(a){this.getValue()?a.setStyle("border-color",this.getValue()):a.removeStyle("border-color");a.removeAttribute("borderColor")}},k?{type:"button",id:"borderColorChoose","class":"colorChooser",label:c.chooseColor,style:(m?"margin-right":"margin-left")+": 10px",onLoad:function(){this.getElement().getParent().setStyle("vertical-align", +"bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","borderColor").setValue(a);this.focus()},this)}}:f]}]}]}]}],onShow:function(){this.cells=CKEDITOR.plugins.tabletools.getSelectedCells(this._.editor.getSelection());this.setupContent(this.cells)},onOk:function(){for(var a=this._.editor.getSelection(),b=a.createBookmarks(),c=this.cells,d=0;d
'),d='';a.image&&b&&(d+='');d+='");k.on("click",function(){p(a.html)});return k}function p(a){var b=CKEDITOR.dialog.getCurrent();b.getValueOf("selectTpl","chkInsertOpt")?(c.fire("saveSnapshot"),c.setData(a,function(){b.hide();var a=c.createRange();a.moveToElementEditStart(c.editable());a.select();setTimeout(function(){c.fire("saveSnapshot")},0)})):(c.insertHtml(a),b.hide())}function i(a){var b=a.data.getTarget(), +c=g.equals(b);if(c||g.contains(b)){var d=a.data.getKeystroke(),f=g.getElementsByTag("a"),e;if(f){if(c)e=f.getItem(0);else switch(d){case 40:e=b.getNext();break;case 38:e=b.getPrevious();break;case 13:case 32:b.fire("click")}e&&(e.focus(),a.data.preventDefault())}}}var h=CKEDITOR.plugins.get("templates");CKEDITOR.document.appendStyleSheet(CKEDITOR.getUrl(h.path+"dialogs/templates.css"));var g,h="cke_tpl_list_label_"+CKEDITOR.tools.getNextNumber(),f=c.lang.templates,l=c.config;return{title:c.lang.templates.title, +minWidth:CKEDITOR.env.ie?440:400,minHeight:340,contents:[{id:"selectTpl",label:f.title,elements:[{type:"vbox",padding:5,children:[{id:"selectTplText",type:"html",html:""+f.selectPromptMsg+""},{id:"templatesList",type:"html",focus:!0,html:'
'+f.options+""},{id:"chkInsertOpt",type:"checkbox",label:f.insertOption, +"default":l.templates_replaceContent}]}]}],buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var a=this.getContentElement("selectTpl","templatesList");g=a.getElement();CKEDITOR.loadTemplates(l.templates_files,function(){var b=(l.templates||"default").split(",");if(b.length){var c=g;c.setHtml("");for(var d=0,h=b.length;d'+f.emptyListMsg+"")});this._.element.on("keydown",i)},onHide:function(){this._.element.removeListener("keydown",i)}}})})(); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/templates/templates/default.js b/src/main/webapp/ckeditor/plugins/templates/templates/default.js new file mode 100644 index 0000000..d8c172e --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/templates/templates/default.js @@ -0,0 +1,6 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.addTemplates("default",{imagesPath:CKEDITOR.getUrl(CKEDITOR.plugins.getPath("templates")+"templates/images/"),templates:[{title:"Image and Title",image:"template1.gif",description:"One main image with a title and text that surround the image.",html:'

Type the title here

Type the text here

'},{title:"Strange Template",image:"template2.gif",description:"A template that defines two colums, each one with a title, and some text.", +html:'

Title 1

Title 2

Text 1Text 2

More text goes here.

'},{title:"Text and Table",image:"template3.gif",description:"A title with some text and a table.",html:'

Title goes here

Table title
   
   
   

Type the text here

'}]}); \ No newline at end of file diff --git a/src/main/webapp/ckeditor/plugins/templates/templates/images/template1.gif b/src/main/webapp/ckeditor/plugins/templates/templates/images/template1.gif new file mode 100644 index 0000000..efdabbe Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/templates/templates/images/template1.gif differ diff --git a/src/main/webapp/ckeditor/plugins/templates/templates/images/template2.gif b/src/main/webapp/ckeditor/plugins/templates/templates/images/template2.gif new file mode 100644 index 0000000..d1cebb3 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/templates/templates/images/template2.gif differ diff --git a/src/main/webapp/ckeditor/plugins/templates/templates/images/template3.gif b/src/main/webapp/ckeditor/plugins/templates/templates/images/template3.gif new file mode 100644 index 0000000..db41cb4 Binary files /dev/null and b/src/main/webapp/ckeditor/plugins/templates/templates/images/template3.gif differ diff --git a/src/main/webapp/ckeditor/plugins/wsc/LICENSE.md b/src/main/webapp/ckeditor/plugins/wsc/LICENSE.md new file mode 100644 index 0000000..c7d374a --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/wsc/LICENSE.md @@ -0,0 +1,28 @@ +Software License Agreement +========================== + +**CKEditor WSC Plugin** +Copyright © 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your choice: + +* GNU General Public License Version 2 or later (the "GPL"): + http://www.gnu.org/licenses/gpl.html + +* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): + http://www.gnu.org/licenses/lgpl.html + +* Mozilla Public License Version 1.1 or later (the "MPL"): + http://www.mozilla.org/MPL/MPL-1.1.html + +You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. + +Sources of Intellectual Property Included in this plugin +-------------------------------------------------------- + +Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. + +Trademarks +---------- + +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. diff --git a/src/main/webapp/ckeditor/plugins/wsc/README.md b/src/main/webapp/ckeditor/plugins/wsc/README.md new file mode 100644 index 0000000..46eeafb --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/wsc/README.md @@ -0,0 +1,25 @@ +CKEditor WebSpellChecker Plugin +=============================== + +This plugin brings Web Spell Checker (WSC) into CKEditor. + +WSC is "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. + +Installation +------------ + +1. Clone/copy this repository contents in a new "plugins/wsc" folder in your CKEditor installation. +2. Enable the "wsc" plugin in the CKEditor configuration file (config.js): + + config.extraPlugins = 'wsc'; + +That's all. WSC will appear on the editor toolbar and will be ready to use. + +License +------- + +Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). + +See LICENSE.md for more information. + +Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). diff --git a/src/main/webapp/ckeditor/plugins/wsc/dialogs/ciframe.html b/src/main/webapp/ckeditor/plugins/wsc/dialogs/ciframe.html new file mode 100644 index 0000000..82df25b --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/wsc/dialogs/ciframe.html @@ -0,0 +1,66 @@ + + + + + + + + +

+ diff --git a/src/main/webapp/ckeditor/plugins/wsc/dialogs/tmpFrameset.html b/src/main/webapp/ckeditor/plugins/wsc/dialogs/tmpFrameset.html new file mode 100644 index 0000000..c2d82aa --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/wsc/dialogs/tmpFrameset.html @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/ckeditor/plugins/wsc/dialogs/wsc.css b/src/main/webapp/ckeditor/plugins/wsc/dialogs/wsc.css new file mode 100644 index 0000000..496d731 --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/wsc/dialogs/wsc.css @@ -0,0 +1,82 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +html, body +{ + background-color: transparent; + margin: 0px; + padding: 0px; +} + +body +{ + padding: 10px; +} + +body, td, input, select, textarea +{ + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; +} + +.midtext +{ + padding:0px; + margin:10px; +} + +.midtext p +{ + padding:0px; + margin:10px; +} + +.Button +{ + border: #737357 1px solid; + color: #3b3b1f; + background-color: #c7c78f; +} + +.PopupTabArea +{ + color: #737357; + background-color: #e3e3c7; +} + +.PopupTitleBorder +{ + border-bottom: #d5d59d 1px solid; +} +.PopupTabEmptyArea +{ + padding-left: 10px; + border-bottom: #d5d59d 1px solid; +} + +.PopupTab, .PopupTabSelected +{ + border-right: #d5d59d 1px solid; + border-top: #d5d59d 1px solid; + border-left: #d5d59d 1px solid; + padding: 3px 5px 3px 5px; + color: #737357; +} + +.PopupTab +{ + margin-top: 1px; + border-bottom: #d5d59d 1px solid; + cursor: pointer; +} + +.PopupTabSelected +{ + font-weight: bold; + cursor: default; + padding-top: 4px; + border-bottom: #f1f1e3 1px solid; + background-color: #f1f1e3; +} diff --git a/src/main/webapp/ckeditor/plugins/wsc/dialogs/wsc.js b/src/main/webapp/ckeditor/plugins/wsc/dialogs/wsc.js new file mode 100644 index 0000000..443145c --- /dev/null +++ b/src/main/webapp/ckeditor/plugins/wsc/dialogs/wsc.js @@ -0,0 +1,74 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +(function(){function y(a){if(!a)throw"Languages-by-groups list are required for construct selectbox";var c=[],d="",f;for(f in a)for(var g in a[f]){var h=a[f][g];"en_US"==h?d=h:c.push(h)}c.sort();d&&c.unshift(d);return{getCurrentLangGroup:function(c){a:{for(var d in a)for(var f in a[d])if(f.toUpperCase()===c.toUpperCase()){c=d;break a}c=""}return c},setLangList:function(){var c={},d;for(d in a)for(var f in a[d])c[a[d][f]]=f;return c}()}}var e=function(){var a=function(a,b,f){var f=f||{},g=f.expires; +if("number"==typeof g&&g){var h=new Date;h.setTime(h.getTime()+1E3*g);g=f.expires=h}g&&g.toUTCString&&(f.expires=g.toUTCString());var b=encodeURIComponent(b),a=a+"="+b,e;for(e in f)b=f[e],a+="; "+e,!0!==b&&(a+="="+b);document.cookie=a};return{postMessage:{init:function(a){window.addEventListener?window.addEventListener("message",a,!1):window.attachEvent("onmessage",a)},send:function(a){var b=Object.prototype.toString,f=a.fn||null,g=a.id||"",e=a.target||window,i=a.message||{id:g};a.message&&"[object Object]"== +b.call(a.message)&&(a.message.id||(a.message.id=g),i=a.message);a=window.JSON.stringify(i,f);e.postMessage(a,"*")},unbindHandler:function(a){window.removeEventListener?window.removeEventListener("message",a,!1):window.detachEvent("onmessage",a)}},hash:{create:function(){},parse:function(){}},cookie:{set:a,get:function(a){return(a=document.cookie.match(RegExp("(?:^|; )"+a.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)")))?decodeURIComponent(a[1]):void 0},remove:function(c){a(c,"",{expires:-1})}}, +misc:{findFocusable:function(a){var b=null;a&&(b=a.find("a[href], area[href], input, select, textarea, button, *[tabindex], *[contenteditable]"));return b},isVisible:function(a){return!(0===a.offsetWidth||0==a.offsetHeight||"none"===(document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(a,null).display:a.currentStyle?a.currentStyle.display:a.style.display))},hasClass:function(a,b){return!(!a.className||!a.className.match(RegExp("(\\s|^)"+b+"(\\s|$)")))}}}}(), +a=a||{};a.TextAreaNumber=null;a.load=!0;a.cmd={SpellTab:"spell",Thesaurus:"thes",GrammTab:"grammar"};a.dialog=null;a.optionNode=null;a.selectNode=null;a.grammerSuggest=null;a.textNode={};a.iframeMain=null;a.dataTemp="";a.div_overlay=null;a.textNodeInfo={};a.selectNode={};a.selectNodeResponce={};a.langList=null;a.langSelectbox=null;a.banner="";a.show_grammar=null;a.div_overlay_no_check=null;a.targetFromFrame={};a.onLoadOverlay=null;a.LocalizationComing={};a.OverlayPlace=null;a.LocalizationButton={ChangeTo:{instance:null, +text:"Change to"},ChangeAll:{instance:null,text:"Change All"},IgnoreWord:{instance:null,text:"Ignore word"},IgnoreAllWords:{instance:null,text:"Ignore all words"},Options:{instance:null,text:"Options",optionsDialog:{instance:null}},AddWord:{instance:null,text:"Add word"},FinishChecking:{instance:null,text:"Finish Checking"}};a.LocalizationLabel={ChangeTo:{instance:null,text:"Change to"},Suggestions:{instance:null,text:"Suggestions"}};var z=function(b){var c,d;for(d in b)c=b[d].instance.getElement().getFirst()|| +b[d].instance.getElement(),c.setText(a.LocalizationComing[d])},A=function(b){for(var c in b){if(!b[c].instance.setLabel)break;b[c].instance.setLabel(a.LocalizationComing[c])}},j,q;a.framesetHtml=function(b){return"'};a.setIframe=function(b,c){var d;d=a.framesetHtml(c);var f=a.iframeNumber+"_"+c;b.getElement().setHtml(d); +d=document.getElementById(f);d=d.contentWindow?d.contentWindow:d.contentDocument.document?d.contentDocument.document:d.contentDocument;d.document.open();d.document.write('iframe
+ + + + +

+ CKEditor Samples » Create and Destroy Editor Instances for Ajax Applications +

+
+

+ This sample shows how to create and destroy CKEditor instances on the fly. After the removal of CKEditor the content created inside the editing + area will be displayed in a <div> element. +

+

+ For details of how to create this setup check the source code of this sample page + for JavaScript code responsible for the creation and destruction of a CKEditor instance. +

+
+

Click the buttons to create and remove a CKEditor instance.

+

+ + +

+ +
+
+ + + + diff --git a/src/main/webapp/ckeditor/samples/api.html b/src/main/webapp/ckeditor/samples/api.html new file mode 100644 index 0000000..5becd32 --- /dev/null +++ b/src/main/webapp/ckeditor/samples/api.html @@ -0,0 +1,207 @@ + + + + + + API Usage — CKEditor Sample + + + + + + +

+ CKEditor Samples » Using CKEditor JavaScript API +

+
+

+ This sample shows how to use the + CKEditor JavaScript API + to interact with the editor at runtime. +

+

+ For details on how to create this setup check the source code of this sample page. +

+
+ + +
+ +
+
+ + + + +

+

+ + +
+ + + diff --git a/src/main/webapp/ckeditor/samples/appendto.html b/src/main/webapp/ckeditor/samples/appendto.html new file mode 100644 index 0000000..a84b0ee --- /dev/null +++ b/src/main/webapp/ckeditor/samples/appendto.html @@ -0,0 +1,56 @@ + + + + + + Append To Page Element Using JavaScript Code — CKEditor Sample + + + + +

+ CKEditor Samples » Append To Page Element Using JavaScript Code +

+
+
+

+ The CKEDITOR.appendTo() method serves to to place editors inside existing DOM elements. Unlike CKEDITOR.replace(), + a target container to be replaced is no longer necessary. A new editor + instance is inserted directly wherever it is desired. +

+
CKEDITOR.appendTo( 'container_id',
+	{ /* Configuration options to be used. */ }
+	'Editor content to be used.'
+);
+
+ +
+
+ + + diff --git a/src/main/webapp/ckeditor/samples/assets/inlineall/logo.png b/src/main/webapp/ckeditor/samples/assets/inlineall/logo.png new file mode 100644 index 0000000..334e7ac Binary files /dev/null and b/src/main/webapp/ckeditor/samples/assets/inlineall/logo.png differ diff --git a/src/main/webapp/ckeditor/samples/assets/outputxhtml/outputxhtml.css b/src/main/webapp/ckeditor/samples/assets/outputxhtml/outputxhtml.css new file mode 100644 index 0000000..da4f71a --- /dev/null +++ b/src/main/webapp/ckeditor/samples/assets/outputxhtml/outputxhtml.css @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + * + * Styles used by the XHTML 1.1 sample page (xhtml.html). + */ + +/** + * Basic definitions for the editing area. + */ +body +{ + font-family: Arial, Verdana, sans-serif; + font-size: 80%; + color: #000000; + background-color: #ffffff; + padding: 5px; + margin: 0px; +} + +/** + * Core styles. + */ + +.Bold +{ + font-weight: bold; +} + +.Italic +{ + font-style: italic; +} + +.Underline +{ + text-decoration: underline; +} + +.StrikeThrough +{ + text-decoration: line-through; +} + +.Subscript +{ + vertical-align: sub; + font-size: smaller; +} + +.Superscript +{ + vertical-align: super; + font-size: smaller; +} + +/** + * Font faces. + */ + +.FontComic +{ + font-family: 'Comic Sans MS'; +} + +.FontCourier +{ + font-family: 'Courier New'; +} + +.FontTimes +{ + font-family: 'Times New Roman'; +} + +/** + * Font sizes. + */ + +.FontSmaller +{ + font-size: smaller; +} + +.FontLarger +{ + font-size: larger; +} + +.FontSmall +{ + font-size: 8pt; +} + +.FontBig +{ + font-size: 14pt; +} + +.FontDouble +{ + font-size: 200%; +} + +/** + * Font colors. + */ +.FontColor1 +{ + color: #ff9900; +} + +.FontColor2 +{ + color: #0066cc; +} + +.FontColor3 +{ + color: #ff0000; +} + +.FontColor1BG +{ + background-color: #ff9900; +} + +.FontColor2BG +{ + background-color: #0066cc; +} + +.FontColor3BG +{ + background-color: #ff0000; +} + +/** + * Indentation. + */ + +.Indent1 +{ + margin-left: 40px; +} + +.Indent2 +{ + margin-left: 80px; +} + +.Indent3 +{ + margin-left: 120px; +} + +/** + * Alignment. + */ + +.JustifyLeft +{ + text-align: left; +} + +.JustifyRight +{ + text-align: right; +} + +.JustifyCenter +{ + text-align: center; +} + +.JustifyFull +{ + text-align: justify; +} + +/** + * Other. + */ + +code +{ + font-family: courier, monospace; + background-color: #eeeeee; + padding-left: 1px; + padding-right: 1px; + border: #c0c0c0 1px solid; +} + +kbd +{ + padding: 0px 1px 0px 1px; + border-width: 1px 2px 2px 1px; + border-style: solid; +} + +blockquote +{ + color: #808080; +} diff --git a/src/main/webapp/ckeditor/samples/assets/posteddata.php b/src/main/webapp/ckeditor/samples/assets/posteddata.php new file mode 100644 index 0000000..fd96f8f --- /dev/null +++ b/src/main/webapp/ckeditor/samples/assets/posteddata.php @@ -0,0 +1,59 @@ + + + + + + Sample — CKEditor + + + +

+ CKEditor — Posted Data +

+ + + + + + + + + $value ) + { + if ( ( !is_string($value) && !is_numeric($value) ) || !is_string($key) ) + continue; + + if ( get_magic_quotes_gpc() ) + $value = htmlspecialchars( stripslashes((string)$value) ); + else + $value = htmlspecialchars( (string)$value ); +?> + + + + + +
Field NameValue
+ + + diff --git a/src/main/webapp/ckeditor/samples/assets/sample.jpg b/src/main/webapp/ckeditor/samples/assets/sample.jpg new file mode 100644 index 0000000..a4a77fa Binary files /dev/null and b/src/main/webapp/ckeditor/samples/assets/sample.jpg differ diff --git a/src/main/webapp/ckeditor/samples/assets/uilanguages/languages.js b/src/main/webapp/ckeditor/samples/assets/uilanguages/languages.js new file mode 100644 index 0000000..3f7ff62 --- /dev/null +++ b/src/main/webapp/ckeditor/samples/assets/uilanguages/languages.js @@ -0,0 +1,7 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +var CKEDITOR_LANGS=function(){var c={af:"Afrikaans",ar:"Arabic",bg:"Bulgarian",bn:"Bengali/Bangla",bs:"Bosnian",ca:"Catalan",cs:"Czech",cy:"Welsh",da:"Danish",de:"German",el:"Greek",en:"English","en-au":"English (Australia)","en-ca":"English (Canadian)","en-gb":"English (United Kingdom)",eo:"Esperanto",es:"Spanish",et:"Estonian",eu:"Basque",fa:"Persian",fi:"Finnish",fo:"Faroese",fr:"French","fr-ca":"French (Canada)",gl:"Galician",gu:"Gujarati",he:"Hebrew",hi:"Hindi",hr:"Croatian",hu:"Hungarian",id:"Indonesian", +is:"Icelandic",it:"Italian",ja:"Japanese",ka:"Georgian",km:"Khmer",ko:"Korean",ku:"Kurdish",lt:"Lithuanian",lv:"Latvian",mk:"Macedonian",mn:"Mongolian",ms:"Malay",nb:"Norwegian Bokmal",nl:"Dutch",no:"Norwegian",pl:"Polish",pt:"Portuguese (Portugal)","pt-br":"Portuguese (Brazil)",ro:"Romanian",ru:"Russian",si:"Sinhala",sk:"Slovak",sq:"Albanian",sl:"Slovenian",sr:"Serbian (Cyrillic)","sr-latn":"Serbian (Latin)",sv:"Swedish",th:"Thai",tr:"Turkish",tt:"Tatar",ug:"Uighur",uk:"Ukrainian",vi:"Vietnamese", +zh:"Chinese Traditional","zh-cn":"Chinese Simplified"},b=[],a;for(a in CKEDITOR.lang.languages)b.push({code:a,name:c[a]||a});b.sort(function(a,b){return a.name + + + + + Data Filtering — CKEditor Sample + + + + + +

+ CKEditor Samples » Data Filtering and Features Activation +

+
+

+ This sample page demonstrates the idea of Advanced Content Filter + (ACF), a sophisticated + tool that takes control over what kind of data is accepted by the editor and what + kind of output is produced. +

+

When and what is being filtered?

+

+ ACF controls + every single source of data that comes to the editor. + It process both HTML that is inserted manually (i.e. pasted by the user) + and programmatically like: +

+
+editor.setData( '<p>Hello world!</p>' );
+
+

+ ACF discards invalid, + useless HTML tags and attributes so the editor remains "clean" during + runtime. ACF behaviour + can be configured and adjusted for a particular case to prevent the + output HTML (i.e. in CMS systems) from being polluted. + + This kind of filtering is a first, client-side line of defense + against "tag soups", + the tool that precisely restricts which tags, attributes and styles + are allowed (desired). When properly configured, ACF + is an easy and fast way to produce a high-quality, intentionally filtered HTML. +

+ +

How to configure or disable ACF?

+

+ Advanced Content Filter is enabled by default, working in "automatic mode", yet + it provides a set of easy rules that allow adjusting filtering rules + and disabling the entire feature when necessary. The config property + responsible for this feature is config.allowedContent. +

+

+ By "automatic mode" is meant that loaded plugins decide which kind + of content is enabled and which is not. For example, if the link + plugin is loaded it implies that <a> tag is + automatically allowed. Each plugin is given a set + of predefined ACF rules + that control the editor until + config.allowedContent + is defined manually. +

+

+ Let's assume our intention is to restrict the editor to accept (produce) paragraphs + only: no attributes, no styles, no other tags. + With ACF + this is very simple. Basically set + config.allowedContent to 'p': +

+
+var editor = CKEDITOR.replace( textarea_id, {
+	allowedContent: 'p'
+} );
+
+

+ Now try to play with allowed content: +

+
+// Trying to insert disallowed tag and attribute.
+editor.setData( '<p style="color: red">Hello <em>world</em>!</p>' );
+alert( editor.getData() );
+
+// Filtered data is returned.
+"<p>Hello world!</p>"
+
+

+ What happened? Since config.allowedContent: 'p' is set the editor assumes + that only plain <p> are accepted. Nothing more. This is why + style attribute and <em> tag are gone. The same + filtering would happen if we pasted disallowed HTML into this editor. +

+

+ This is just a small sample of what ACF + can do. To know more, please refer to the sample section below and + the official Advanced Content Filter guide. +

+

+ You may, of course, want CKEditor to avoid filtering of any kind. + To get rid of ACF, + basically set + config.allowedContent to true like this: +

+
+CKEDITOR.replace( textarea_id, {
+	allowedContent: true
+} );
+
+ +

Beyond data flow: Features activation

+

+ ACF is far more than + I/O control: the entire + UI of the editor is adjusted to what + filters restrict. For example: if <a> tag is + disallowed + by ACF, + then accordingly link command, toolbar button and link dialog + are also disabled. Editor is smart: it knows which features must be + removed from the interface to match filtering rules. +

+

+ CKEditor can be far more specific. If <a> tag is + allowed by filtering rules to be used but it is restricted + to have only one attribute (href) + config.allowedContent = 'a[!href]', then + "Target" tab of the link dialog is automatically disabled as target + attribute isn't included in ACF rules + for <a>. This behaviour applies to dialog fields, context + menus and toolbar buttons. +

+ +

Sample configurations

+

+ There are several editor instances below that present different + ACF setups. All of them, + except the last inline instance, share the same HTML content to visualize + how different filtering rules affect the same input data. +

+
+ +
+ +
+

+ This editor is using default configuration ("automatic mode"). It means that + + config.allowedContent is defined by loaded plugins. + Each plugin extends filtering rules to make it's own associated content + available for the user. +

+
+ + + +
+ +
+ +
+ +
+

+ This editor is using a custom configuration for + ACF: +

+
+CKEDITOR.replace( 'editor2', {
+	allowedContent:
+		'h1 h2 h3 p blockquote strong em;' +
+		'a[!href];' +
+		'img(left,right)[!src,alt,width,height];' +
+		'table tr th td caption;' +
+		'span{!font-family};' +'
+		'span{!color};' +
+		'span(!marker);' +
+		'del ins'
+} );
+
+

+ The following rules may require additional explanation: +

+
    +
  • + h1 h2 h3 p blockquote strong em - These tags + are accepted by the editor. Any tag attributes will be discarded. +
  • +
  • + a[!href] - href attribute is obligatory + for <a> tag. Tags without this attribute + are disarded. No other attribute will be accepted. +
  • +
  • + img(left,right)[!src,alt,width,height] - src + attribute is obligatory for <img> tag. + alt, width, height + and class attributes are accepted but + class must be either class="left" + or class="right" +
  • +
  • + table tr th td caption - These tags + are accepted by the editor. Any tag attributes will be discarded. +
  • +
  • + span{!font-family}, span{!color}, + span(!marker) - <span> tags + will be accepted if either font-family or + color style is set or class="marker" + is present. +
  • +
  • + del ins - These tags + are accepted by the editor. Any tag attributes will be discarded. +
  • +
+

+ Please note that UI of the + editor is different. It's a response to what happened to the filters. + Since text-align isn't allowed, the align toolbar is gone. + The same thing happened to subscript/superscript, strike, underline + (<u>, <sub>, <sup> + are disallowed by + config.allowedContent) and many other buttons. +

+
+ + +
+ +
+ +
+ +
+

+ This editor is using a custom configuration for + ACF. + Note that filters can be configured as an object literal + as an alternative to a string-based definition. +

+
+CKEDITOR.replace( 'editor3', {
+	allowedContent: {
+		'b i ul ol big small': true,
+		'h1 h2 h3 p blockquote li': {
+			styles: 'text-align'
+		},
+		a: { attributes: '!href,target' },
+		img: {
+			attributes: '!src,alt',
+			styles: 'width,height',
+			classes: 'left,right'
+		}
+	}
+} );
+
+
+ + +
+ +
+ +
+ +
+

+ This editor is using a custom set of plugins and buttons. +

+
+CKEDITOR.replace( 'editor4', {
+	removePlugins: 'bidi,font,forms,flash,horizontalrule,iframe,justify,table,tabletools,smiley',
+	removeButtons: 'Anchor,Underline,Strike,Subscript,Superscript,Image',
+	format_tags: 'p;h1;h2;h3;pre;address'
+} );
+
+

+ As you can see, removing plugins and buttons implies filtering. + Several tags are not allowed in the editor because there's no + plugin/button that is responsible for creating and editing this + kind of content (for example: the image is missing because + of removeButtons: 'Image'). The conclusion is that + ACF works "backwards" + as well: modifying UI + elements is changing allowed content rules. +

+
+ + +
+ +
+ +
+ +
+

+ This editor is built on editable <h1> element. + ACF takes care of + what can be included in <h1>. Note that there + are no block styles in Styles combo. Also why lists, indentation, + blockquote, div, form and other buttons are missing. +

+

+ ACF makes sure that + no disallowed tags will come to <h1> so the final + markup is valid. If the user tried to paste some invalid HTML + into this editor (let's say a list), it would be automatically + converted into plain text. +

+
+

+ Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. +

+
+ + + + diff --git a/src/main/webapp/ckeditor/samples/divreplace.html b/src/main/webapp/ckeditor/samples/divreplace.html new file mode 100644 index 0000000..3ee0e0e --- /dev/null +++ b/src/main/webapp/ckeditor/samples/divreplace.html @@ -0,0 +1,141 @@ + + + + + + Replace DIV — CKEditor Sample + + + + + + +

+ CKEditor Samples » Replace DIV with CKEditor on the Fly +

+
+

+ This sample shows how to automatically replace <div> elements + with a CKEditor instance on the fly, following user's doubleclick. The content + that was previously placed inside the <div> element will now + be moved into CKEditor editing area. +

+

+ For details on how to create this setup check the source code of this sample page. +

+
+

+ Double-click any of the following <div> elements to transform them into + editor instances. +

+
+

+ Part 1 +

+

+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. +

+
+
+

+ Part 2 +

+

+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. +

+

+ Donec velit. Mauris massa. Vestibulum non nulla. Nam suscipit arcu nec elit. Phasellus + sollicitudin iaculis ante. Ut non mauris et sapien tincidunt adipiscing. Vestibulum + vitae leo. Suspendisse nec mi tristique nulla laoreet vulputate. +

+
+
+

+ Part 3 +

+

+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. +

+
+ + + diff --git a/src/main/webapp/ckeditor/samples/index.html b/src/main/webapp/ckeditor/samples/index.html new file mode 100644 index 0000000..964c5a3 --- /dev/null +++ b/src/main/webapp/ckeditor/samples/index.html @@ -0,0 +1,128 @@ + + + + + + CKEditor Samples + + + +

+ CKEditor Samples +

+
+
+

+ Basic Samples +

+
+
Replace textarea elements by class name
+
Automatic replacement of all textarea elements of a given class with a CKEditor instance.
+ +
Replace textarea elements by code
+
Replacement of textarea elements with CKEditor instances by using a JavaScript call.
+ +
Create editors with jQuery
+
Creating standard and inline CKEditor instances with jQuery adapter.
+
+ +

+ Basic Customization +

+
+
User Interface color
+
Changing CKEditor User Interface color and adding a toolbar button that lets the user set the UI color.
+ +
User Interface languages
+
Changing CKEditor User Interface language and adding a drop-down list that lets the user choose the UI language.
+
+ + +

Plugins

+
+
Magicline plugin
+
Using the Magicline plugin to access difficult focus spaces.
+ +
Full page support
+
CKEditor inserted with a JavaScript call and used to edit the whole page from <html> to </html>.
+
+
+
+

+ Inline Editing +

+
+
Massive inline editor creation
+
Turn all elements with contentEditable = true attribute into inline editors.
+ +
Convert element into an inline editor by code
+
Conversion of DOM elements into inline CKEditor instances by using a JavaScript call.
+ +
Replace textarea with inline editor New!
+
A form with a textarea that is replaced by an inline editor at runtime.
+ + +
+ +

+ Advanced Samples +

+
+
Data filtering and features activation New!
+
Data filtering and automatic features activation basing on configuration.
+ +
Replace DIV elements on the fly
+
Transforming a div element into an instance of CKEditor with a mouse click.
+ +
Append editor instances
+
Appending editor instances to existing DOM elements.
+ +
Create and destroy editor instances for Ajax applications
+
Creating and destroying CKEditor instances on the fly and saving the contents entered into the editor window.
+ +
Basic usage of the API
+
Using the CKEditor JavaScript API to interact with the editor at runtime.
+ +
XHTML-compliant style
+
Configuring CKEditor to produce XHTML 1.1 compliant attributes and styles.
+ +
Read-only mode
+
Using the readOnly API to block introducing changes to the editor contents.
+ +
"Tab" key-based navigation
+
Navigating among editor instances with tab key.
+ + + +
Using the JavaScript API to customize dialog windows
+
Using the dialog windows API to customize dialog windows without changing the original editor code.
+ +
Using the "Enter" key in CKEditor
+
Configuring the behavior of Enter and Shift+Enter keys.
+ +
Output for Flash
+
Configuring CKEditor to produce HTML code that can be used with Adobe Flash.
+ +
Output HTML
+
Configuring CKEditor to produce legacy HTML 4 code.
+ +
Toolbar Configurations
+
Configuring CKEditor to display full or custom toolbar layout.
+ +
+
+
+ + + diff --git a/src/main/webapp/ckeditor/samples/inlineall.html b/src/main/webapp/ckeditor/samples/inlineall.html new file mode 100644 index 0000000..250f0c5 --- /dev/null +++ b/src/main/webapp/ckeditor/samples/inlineall.html @@ -0,0 +1,311 @@ + + + + + + Massive inline editing — CKEditor Sample + + + + + + +
+

CKEditor Samples » Massive inline editing

+
+

This sample page demonstrates the inline editing feature - CKEditor instances will be created automatically from page elements with contentEditable attribute set to value true:

+
<div contenteditable="true" > ... </div>
+

Click inside of any element below to start editing.

+
+
+
+ +
+
+
+

+ Fusce vitae porttitor +

+

+ + Lorem ipsum dolor sit amet dolor. Duis blandit vestibulum faucibus a, tortor. + +

+

+ Proin nunc justo felis mollis tincidunt, risus risus pede, posuere cubilia Curae, Nullam euismod, enim. Etiam nibh ultricies dolor ac dignissim erat volutpat. Vivamus fermentum nisl nulla sem in metus. Maecenas wisi. Donec nec erat volutpat. +

+
+

+ Fusce vitae porttitor a, euismod convallis nisl, blandit risus tortor, pretium. + Vehicula vitae, imperdiet vel, ornare enim vel sodales rutrum +

+
+
+

+ Libero nunc, rhoncus ante ipsum non ipsum. Nunc eleifend pede turpis id sollicitudin fringilla. Phasellus ultrices, velit ac arcu. +

+
+

Pellentesque nunc. Donec suscipit erat. Pellentesque habitant morbi tristique ullamcorper.

+

Mauris mattis feugiat lectus nec mauris. Nullam vitae ante.

+
+
+
+
+

+ Integer condimentum sit amet +

+

+ Aenean nonummy a, mattis varius. Cras aliquet. + Praesent magna non mattis ac, rhoncus nunc, rhoncus eget, cursus pulvinar mollis.

+

Proin id nibh. Sed eu libero posuere sed, lectus. Phasellus dui gravida gravida feugiat mattis ac, felis.

+

Integer condimentum sit amet, tempor elit odio, a dolor non ante at sapien. Sed ac lectus. Nulla ligula quis eleifend mi, id leo velit pede cursus arcu id nulla ac lectus. Phasellus vestibulum. Nunc viverra enim quis diam.

+
+
+

+ Praesent wisi accumsan sit amet nibh +

+

Donec ullamcorper, risus tortor, pretium porttitor. Morbi quam quis lectus non leo.

+

Integer faucibus scelerisque. Proin faucibus at, aliquet vulputate, odio at eros. Fusce gravida, erat vitae augue. Fusce urna fringilla gravida.

+

In hac habitasse platea dictumst. Praesent wisi accumsan sit amet nibh. Maecenas orci luctus a, lacinia quam sem, posuere commodo, odio condimentum tempor, pede semper risus. Suspendisse pede. In hac habitasse platea dictumst. Nam sed laoreet sit amet erat. Integer.

+
+
+
+
+

+ CKEditor logo +

+

Quisque justo neque, mattis sed, fermentum ultrices posuere cubilia Curae, Vestibulum elit metus, quis placerat ut, lectus. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi.

+

+ Nullam laoreet vel consectetuer tellus suscipit +

+
    +
  • Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis.
  • +
  • Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi.
  • +
  • Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.
  • +
+

Quisque justo neque, mattis sed, fermentum ultrices posuere cubilia Curae, Vestibulum elit metus, quis placerat ut, lectus.

+

Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis.

+

Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi. Sed in nonummy faucibus turpis. Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.

+
+
+
+
+ Tags of this article: +

+ inline, editing, floating, CKEditor +

+
+
+ + + diff --git a/src/main/webapp/ckeditor/samples/inlinebycode.html b/src/main/webapp/ckeditor/samples/inlinebycode.html new file mode 100644 index 0000000..fe627d0 --- /dev/null +++ b/src/main/webapp/ckeditor/samples/inlinebycode.html @@ -0,0 +1,121 @@ + + + + + + Inline Editing by Code — CKEditor Sample + + + + + +

+ CKEditor Samples » Inline Editing by Code +

+
+

+ This sample shows how to create an inline editor instance of CKEditor. It is created + with a JavaScript call using the following code: +

+
+// This property tells CKEditor to not activate every element with contenteditable=true element.
+CKEDITOR.disableAutoInline = true;
+
+var editor = CKEDITOR.inline( document.getElementById( 'editable' ) );
+
+

+ Note that editable in the code above is the id + attribute of the <div> element to be converted into an inline instance. +

+
+
+

Saturn V carrying Apollo 11 Apollo 11

+ +

Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

+ +

Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.

+ +

Broadcasting and quotes

+ +

Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

+ +
+

One small step for [a] man, one giant leap for mankind.

+
+ +

Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

+ +
+

[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

+
+ +

Technical details

+ + + + + + + + + + + + + + + + + + + + + + + +
Mission crew
PositionAstronaut
CommanderNeil A. Armstrong
Command Module PilotMichael Collins
Lunar Module PilotEdwin "Buzz" E. Aldrin, Jr.
+ +

Launched by a Saturn V rocket from Kennedy Space Center in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of NASA's Apollo program. The Apollo spacecraft had three parts:

+ +
    +
  1. Command Module with a cabin for the three astronauts which was the only part which landed back on Earth
  2. +
  3. Service Module which supported the Command Module with propulsion, electrical power, oxygen and water
  4. +
  5. Lunar Module for landing on the Moon.
  6. +
+ +

After being sent to the Moon by the Saturn V's upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the Sea of Tranquility. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the Pacific Ocean on July 24.

+ +
+

Source: Wikipedia.org

+
+ + + + + diff --git a/src/main/webapp/ckeditor/samples/inlinetextarea.html b/src/main/webapp/ckeditor/samples/inlinetextarea.html new file mode 100644 index 0000000..9da5ed3 --- /dev/null +++ b/src/main/webapp/ckeditor/samples/inlinetextarea.html @@ -0,0 +1,110 @@ + + + + + + Replace Textarea with Inline Editor — CKEditor Sample + + + + + +

+ CKEditor Samples » Replace Textarea with Inline Editor +

+
+

+ You can also create an inline editor from a textarea + element. In this case the textarea will be replaced + by a div element with inline editing enabled. +

+
+// "article-body" is the name of a textarea element.
+var editor = CKEDITOR.inline( 'article-body' );
+
+
+
+

This is a sample form with some fields

+

+ Title:
+

+

+ Article Body (Textarea converted to CKEditor):
+ +

+

+ +

+
+ + + + + diff --git a/src/main/webapp/ckeditor/samples/jquery.html b/src/main/webapp/ckeditor/samples/jquery.html new file mode 100644 index 0000000..97afe86 --- /dev/null +++ b/src/main/webapp/ckeditor/samples/jquery.html @@ -0,0 +1,100 @@ + + + + + + jQuery Adapter — CKEditor Sample + + + + + + + + +

+ CKEditor Samples » Create Editors with jQuery +

+
+
+

+ This sample shows how to use the jQuery adapter. + Note that you have to include both CKEditor and jQuery scripts before including the adapter. +

+ +
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
+<script src="/ckeditor/ckeditor.js"></script>
+<script src="/ckeditor/adapters/jquery.js"></script>
+
+ +

Then you can replace HTML elements with a CKEditor instance using the ckeditor() method.

+ +
+$( document ).ready( function() {
+	$( 'textarea#editor1' ).ckeditor();
+} );
+
+
+ +

Inline Example

+ +
+

Saturn V carrying Apollo 11Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

+

Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth. +

Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

+

One small step for [a] man, one giant leap for mankind.

Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

+
+ +
+ +

Classic (iframe-based) Example

+ + + +

+ + + + + +

+
+ + + diff --git a/src/main/webapp/ckeditor/samples/plugins/dialog/assets/my_dialog.js b/src/main/webapp/ckeditor/samples/plugins/dialog/assets/my_dialog.js new file mode 100644 index 0000000..3d8f369 --- /dev/null +++ b/src/main/webapp/ckeditor/samples/plugins/dialog/assets/my_dialog.js @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +CKEDITOR.dialog.add( 'myDialog', function( editor ) { + return { + title: 'My Dialog', + minWidth: 400, + minHeight: 200, + contents: [ + { + id: 'tab1', + label: 'First Tab', + title: 'First Tab', + elements: [ + { + id: 'input1', + type: 'text', + label: 'Text Field' + }, + { + id: 'select1', + type: 'select', + label: 'Select Field', + items: [ + [ 'option1', 'value1' ], + [ 'option2', 'value2' ] + ] + } + ] + }, + { + id: 'tab2', + label: 'Second Tab', + title: 'Second Tab', + elements: [ + { + id: 'button1', + type: 'button', + label: 'Button Field' + } + ] + } + ] + }; +} ); + diff --git a/src/main/webapp/ckeditor/samples/plugins/dialog/dialog.html b/src/main/webapp/ckeditor/samples/plugins/dialog/dialog.html new file mode 100644 index 0000000..b4940b2 --- /dev/null +++ b/src/main/webapp/ckeditor/samples/plugins/dialog/dialog.html @@ -0,0 +1,187 @@ + + + + + + Using API to Customize Dialog Windows — CKEditor Sample + + + + + + + + + +

+ CKEditor Samples » Using CKEditor Dialog API +

+
+

+ This sample shows how to use the + CKEditor Dialog API + to customize CKEditor dialog windows without changing the original editor code. + The following customizations are being done in the example below: +

+

+ For details on how to create this setup check the source code of this sample page. +

+
+

A custom dialog is added to the editors using the pluginsLoaded event, from an external dialog definition file:

+
    +
  1. Creating a custom dialog window – "My Dialog" dialog window opened with the "My Dialog" toolbar button.
  2. +
  3. Creating a custom button – Add button to open the dialog with "My Dialog" toolbar button.
  4. +
+ + +

The below editor modify the dialog definition of the above added dialog using the dialogDefinition event:

+
    +
  1. Adding dialog tab – Add new tab "My Tab" to dialog window.
  2. +
  3. Removing a dialog window tab – Remove "Second Tab" page from the dialog window.
  4. +
  5. Adding dialog window fields – Add "My Custom Field" to the dialog window.
  6. +
  7. Removing dialog window field – Remove "Select Field" selection field from the dialog window.
  8. +
  9. Setting default values for dialog window fields – Set default value of "Text Field" text field.
  10. +
  11. Setup initial focus for dialog window – Put initial focus on "My Custom Field" text field.
  12. +
+ + + + + diff --git a/src/main/webapp/ckeditor/samples/plugins/enterkey/enterkey.html b/src/main/webapp/ckeditor/samples/plugins/enterkey/enterkey.html new file mode 100644 index 0000000..f49d9d7 --- /dev/null +++ b/src/main/webapp/ckeditor/samples/plugins/enterkey/enterkey.html @@ -0,0 +1,103 @@ + + + + + + ENTER Key Configuration — CKEditor Sample + + + + + + + + +

+ CKEditor Samples » ENTER Key Configuration +

+
+

+ This sample shows how to configure the Enter and Shift+Enter keys + to perform actions specified in the + enterMode + and shiftEnterMode + parameters, respectively. + You can choose from the following options: +

+
    +
  • ENTER_P – new <p> paragraphs are created;
  • +
  • ENTER_BR – lines are broken with <br> elements;
  • +
  • ENTER_DIV – new <div> blocks are created.
  • +
+

+ The sample code below shows how to configure CKEditor to create a <div> block when Enter key is pressed. +

+
+CKEDITOR.replace( 'textarea_id', {
+	enterMode: CKEDITOR.ENTER_DIV
+});
+

+ Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

+
+
+ When Enter is pressed:
+ +
+
+ When Shift+Enter is pressed:
+ +
+
+
+

+
+ +

+

+ +

+
+ + + diff --git a/src/main/webapp/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla b/src/main/webapp/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla new file mode 100644 index 0000000..27e68cc Binary files /dev/null and b/src/main/webapp/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla differ diff --git a/src/main/webapp/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf b/src/main/webapp/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf new file mode 100644 index 0000000..dbe17b6 Binary files /dev/null and b/src/main/webapp/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf differ diff --git a/src/main/webapp/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js b/src/main/webapp/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js new file mode 100644 index 0000000..95fdf0a --- /dev/null +++ b/src/main/webapp/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js @@ -0,0 +1,18 @@ +var swfobject=function(){function u(){if(!s){try{var a=d.getElementsByTagName("body")[0].appendChild(d.createElement("span"));a.parentNode.removeChild(a)}catch(b){return}s=!0;for(var a=x.length,c=0;cf){f++;setTimeout(arguments.callee,10);return}a.removeChild(b);c=null;D()})()}else D()}function D(){var a=p.length;if(0e.wk))t(c,!0),f&&(g.success=!0,g.ref=E(c),f(g));else if(p[b].expressInstall&&F()){g={};g.data=p[b].expressInstall;g.width=d.getAttribute("width")||"0";g.height=d.getAttribute("height")||"0";d.getAttribute("class")&&(g.styleclass=d.getAttribute("class"));d.getAttribute("align")&&(g.align=d.getAttribute("align"));for(var h={},d=d.getElementsByTagName("param"),j=d.length,k=0;ke.wk)}function G(a,b,c,f){A=!0;H=f||null;N={success:!1,id:c};var g=n(c);if(g){"OBJECT"==g.nodeName?(w=I(g),B=null):(w=g,B=c);a.id= +O;if(typeof a.width==i||!/%$/.test(a.width)&&310>parseInt(a.width,10))a.width="310";if(typeof a.height==i||!/%$/.test(a.height)&&137>parseInt(a.height,10))a.height="137";d.title=d.title.slice(0,47)+" - Flash Player Installation";f=e.ie&&e.win?"ActiveX":"PlugIn";f="MMredirectURL="+m.location.toString().replace(/&/g,"%26")+"&MMplayerType="+f+"&MMdoctitle="+d.title;b.flashvars=typeof b.flashvars!=i?b.flashvars+("&"+f):f;e.ie&&(e.win&&4!=g.readyState)&&(f=d.createElement("div"),c+="SWFObjectNew",f.setAttribute("id", +c),g.parentNode.insertBefore(f,g),g.style.display="none",function(){g.readyState==4?g.parentNode.removeChild(g):setTimeout(arguments.callee,10)}());J(a,b,c)}}function W(a){if(e.ie&&e.win&&4!=a.readyState){var b=d.createElement("div");a.parentNode.insertBefore(b,a);b.parentNode.replaceChild(I(a),b);a.style.display="none";(function(){4==a.readyState?a.parentNode.removeChild(a):setTimeout(arguments.callee,10)})()}else a.parentNode.replaceChild(I(a),a)}function I(a){var b=d.createElement("div");if(e.win&& +e.ie)b.innerHTML=a.innerHTML;else if(a=a.getElementsByTagName(r)[0])if(a=a.childNodes)for(var c=a.length,f=0;fe.wk)return f;if(g)if(typeof a.id==i&&(a.id=c),e.ie&&e.win){var o="",h;for(h in a)a[h]!=Object.prototype[h]&&("data"==h.toLowerCase()?b.movie=a[h]:"styleclass"==h.toLowerCase()?o+=' class="'+a[h]+'"':"classid"!=h.toLowerCase()&&(o+=" "+ +h+'="'+a[h]+'"'));h="";for(var j in b)b[j]!=Object.prototype[j]&&(h+='');g.outerHTML='"+h+"";C[C.length]=a.id;f=n(a.id)}else{j=d.createElement(r);j.setAttribute("type",y);for(var k in a)a[k]!=Object.prototype[k]&&("styleclass"==k.toLowerCase()?j.setAttribute("class",a[k]):"classid"!=k.toLowerCase()&&j.setAttribute(k,a[k]));for(o in b)b[o]!=Object.prototype[o]&&"movie"!=o.toLowerCase()&& +(a=j,h=o,k=b[o],c=d.createElement("param"),c.setAttribute("name",h),c.setAttribute("value",k),a.appendChild(c));g.parentNode.replaceChild(j,g);f=j}return f}function P(a){var b=n(a);b&&"OBJECT"==b.nodeName&&(e.ie&&e.win?(b.style.display="none",function(){if(4==b.readyState){var c=n(a);if(c){for(var f in c)"function"==typeof c[f]&&(c[f]=null);c.parentNode.removeChild(c)}}else setTimeout(arguments.callee,10)}()):b.parentNode.removeChild(b))}function n(a){var b=null;try{b=d.getElementById(a)}catch(c){}return b} +function U(a,b,c){a.attachEvent(b,c);v[v.length]=[a,b,c]}function z(a){var b=e.pv,a=a.split(".");a[0]=parseInt(a[0],10);a[1]=parseInt(a[1],10)||0;a[2]=parseInt(a[2],10)||0;return b[0]>a[0]||b[0]==a[0]&&b[1]>a[1]||b[0]==a[0]&&b[1]==a[1]&&b[2]>=a[2]?!0:!1}function Q(a,b,c,f){if(!e.ie||!e.mac){var g=d.getElementsByTagName("head")[0];if(g){c=c&&"string"==typeof c?c:"screen";f&&(K=l=null);if(!l||K!=c)f=d.createElement("style"),f.setAttribute("type","text/css"),f.setAttribute("media",c),l=g.appendChild(f), +e.ie&&(e.win&&typeof d.styleSheets!=i&&0\.;]/.exec(a)&&typeof encodeURIComponent!=i?encodeURIComponent(a):a}var i="undefined",r="object",y="application/x-shockwave-flash", +O="SWFObjectExprInst",m=window,d=document,q=navigator,T=!1,x=[function(){T?V():D()}],p=[],C=[],v=[],w,B,H,N,s=!1,A=!1,l,K,R=!0,e=function(){var a=typeof d.getElementById!=i&&typeof d.getElementsByTagName!=i&&typeof d.createElement!=i,b=q.userAgent.toLowerCase(),c=q.platform.toLowerCase(),f=c?/win/.test(c):/win/.test(b),c=c?/mac/.test(c):/mac/.test(b),b=/webkit/.test(b)?parseFloat(b.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,g=!+"\v1",e=[0,0,0],h=null;if(typeof q.plugins!=i&&typeof q.plugins["Shockwave Flash"]== +r){if((h=q.plugins["Shockwave Flash"].description)&&!(typeof q.mimeTypes!=i&&q.mimeTypes[y]&&!q.mimeTypes[y].enabledPlugin))T=!0,g=!1,h=h.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),e[0]=parseInt(h.replace(/^(.*)\..*$/,"$1"),10),e[1]=parseInt(h.replace(/^.*\.(.*)\s.*$/,"$1"),10),e[2]=/[a-zA-Z]/.test(h)?parseInt(h.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}else if(typeof m.ActiveXObject!=i)try{var j=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");if(j&&(h=j.GetVariable("$version")))g=!0,h=h.split(" ")[1].split(","), +e=[parseInt(h[0],10),parseInt(h[1],10),parseInt(h[2],10)]}catch(k){}return{w3:a,pv:e,wk:b,ie:g,win:f,mac:c}}();(function(){e.w3&&((typeof d.readyState!=i&&"complete"==d.readyState||typeof d.readyState==i&&(d.getElementsByTagName("body")[0]||d.body))&&u(),s||(typeof d.addEventListener!=i&&d.addEventListener("DOMContentLoaded",u,!1),e.ie&&e.win&&(d.attachEvent("onreadystatechange",function(){"complete"==d.readyState&&(d.detachEvent("onreadystatechange",arguments.callee),u())}),m==top&&function(){if(!s){try{d.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee, +0);return}u()}}()),e.wk&&function(){s||(/loaded|complete/.test(d.readyState)?u():setTimeout(arguments.callee,0))}(),M(u)))})();(function(){e.ie&&e.win&&window.attachEvent("onunload",function(){for(var a=v.length,b=0;be.wk)&&a&&b&&c&&d&&g?(t(b,!1),L(function(){c+="";d+="";var e={};if(k&&typeof k===r)for(var l in k)e[l]=k[l];e.data=a;e.width=c;e.height=d;l={};if(j&&typeof j===r)for(var p in j)l[p]=j[p];if(h&&typeof h===r)for(var q in h)l.flashvars=typeof l.flashvars!=i?l.flashvars+("&"+q+"="+h[q]):q+"="+h[q];if(z(g))p=J(e,l,b),e.id== +b&&t(b,!0),n.success=!0,n.ref=p;else{if(o&&F()){e.data=o;G(e,l,b,m);return}t(b,!0)}m&&m(n)})):m&&m(n)},switchOffAutoHideShow:function(){R=!1},ua:e,getFlashPlayerVersion:function(){return{major:e.pv[0],minor:e.pv[1],release:e.pv[2]}},hasFlashPlayerVersion:z,createSWF:function(a,b,c){if(e.w3)return J(a,b,c)},showExpressInstall:function(a,b,c,d){e.w3&&F()&&G(a,b,c,d)},removeSWF:function(a){e.w3&&P(a)},createCSS:function(a,b,c,d){e.w3&&Q(a,b,c,d)},addDomLoadEvent:L,addLoadEvent:M,getQueryParamValue:function(a){var b= +d.location.search||d.location.hash;if(b){/\?/.test(b)&&(b=b.split("?")[1]);if(null==a)return S(b);for(var b=b.split("&"),c=0;c + + + + + Output for Flash — CKEditor Sample + + + + + + + + + + + +

+ CKEditor Samples » Producing Flash Compliant HTML Output +

+
+

+ This sample shows how to configure CKEditor to output + HTML code that can be used with + + Adobe Flash. + The code will contain a subset of standard HTML elements like <b>, + <i>, and <p> as well as HTML attributes. +

+

+ To add a CKEditor instance outputting Flash compliant HTML code, load the editor using a standard + JavaScript call, and define CKEditor features to use HTML elements and attributes. +

+

+ For details on how to create this setup check the source code of this sample page. +

+
+

+ To see how it works, create some content in the editing area of CKEditor on the left + and send it to the Flash object on the right side of the page by using the + Send to Flash button. +

+ + + + + +
+ + +

+ +

+
+
+
+ + + diff --git a/src/main/webapp/ckeditor/samples/plugins/htmlwriter/outputhtml.html b/src/main/webapp/ckeditor/samples/plugins/htmlwriter/outputhtml.html new file mode 100644 index 0000000..d857b4e --- /dev/null +++ b/src/main/webapp/ckeditor/samples/plugins/htmlwriter/outputhtml.html @@ -0,0 +1,221 @@ + + + + + + HTML Compliant Output — CKEditor Sample + + + + + + + + + +

+ CKEditor Samples » Producing HTML Compliant Output +

+
+

+ This sample shows how to configure CKEditor to output valid + HTML 4.01 code. + Traditional HTML elements like <b>, + <i>, and <font> are used in place of + <strong>, <em>, and CSS styles. +

+

+ To add a CKEditor instance outputting legacy HTML 4.01 code, load the editor using a standard + JavaScript call, and define CKEditor features to use the HTML compliant elements and attributes. +

+

+ A snippet of the configuration code can be seen below; check the source of this page for + full definition: +

+
+CKEDITOR.replace( 'textarea_id', {
+	coreStyles_bold: { element: 'b' },
+	coreStyles_italic: { element: 'i' },
+
+	fontSize_style: {
+		element: 'font',
+		attributes: { 'size': '#(size)' }
+	}
+
+	...
+});
+
+
+

+ + + +

+

+ +

+
+ + + diff --git a/src/main/webapp/ckeditor/samples/plugins/magicline/magicline.html b/src/main/webapp/ckeditor/samples/plugins/magicline/magicline.html new file mode 100644 index 0000000..1638f4c --- /dev/null +++ b/src/main/webapp/ckeditor/samples/plugins/magicline/magicline.html @@ -0,0 +1,206 @@ + + + + + + Using Magicline plugin — CKEditor Sample + + + + + + + +

+ CKEditor Samples » Using Magicline plugin +

+
+

+ This sample shows the advantages of Magicline plugin + which is to enhance the editing process. Thanks to this plugin, + a number of difficult focus spaces which are inaccessible due to + browser issues can now be focused. +

+

+ Magicline plugin shows a red line with a handler + which, when clicked, inserts a paragraph and allows typing. To see this, + focus an editor and move your mouse above the focus space you want + to access. The plugin is enabled by default so no additional + configuration is necessary. +

+
+
+ +
+

+ This editor uses a default Magicline setup. +

+
+ + +
+
+
+ +
+

+ This editor is using a blue line. +

+
+CKEDITOR.replace( 'editor2', {
+	magicline_color: 'blue'
+});
+
+ + +
+ + + diff --git a/src/main/webapp/ckeditor/samples/plugins/toolbar/toolbar.html b/src/main/webapp/ckeditor/samples/plugins/toolbar/toolbar.html new file mode 100644 index 0000000..7d7a99e --- /dev/null +++ b/src/main/webapp/ckeditor/samples/plugins/toolbar/toolbar.html @@ -0,0 +1,232 @@ + + + + + + Toolbar Configuration — CKEditor Sample + + + + + + + +

+ CKEditor Samples » Toolbar Configuration +

+
+

+ This sample page demonstrates editor with loaded full toolbar (all registered buttons) and, if + current editor's configuration modifies default settings, also editor with modified toolbar. +

+ +

Since CKEditor 4 there are two ways to configure toolbar buttons.

+ +

By config.toolbar

+ +

+ You can explicitly define which buttons are displayed in which groups and in which order. + This is the more precise setting, but less flexible. If newly added plugin adds its + own button you'll have to add it manually to your config.toolbar setting as well. +

+ +

To add a CKEditor instance with custom toolbar setting, insert the following JavaScript call to your code:

+ +
+CKEDITOR.replace( 'textarea_id', {
+	toolbar: [
+		{ name: 'document', items: [ 'Source', '-', 'NewPage', 'Preview', '-', 'Templates' ] },	// Defines toolbar group with name (used to create voice label) and items in 3 subgroups.
+		[ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ],			// Defines toolbar group without name.
+		'/',																					// Line break - next group will be placed in new line.
+		{ name: 'basicstyles', items: [ 'Bold', 'Italic' ] }
+	]
+});
+ +

By config.toolbarGroups

+ +

+ You can define which groups of buttons (like e.g. basicstyles, clipboard + and forms) are displayed and in which order. Registered buttons are associated + with toolbar groups by toolbar property in their definition. + This setting's advantage is that you don't have to modify toolbar configuration + when adding/removing plugins which register their own buttons. +

+ +

To add a CKEditor instance with custom toolbar groups setting, insert the following JavaScript call to your code:

+ +
+CKEDITOR.replace( 'textarea_id', {
+	toolbarGroups: [
+		{ name: 'document',	   groups: [ 'mode', 'document' ] },			// Displays document group with its two subgroups.
+ 		{ name: 'clipboard',   groups: [ 'clipboard', 'undo' ] },			// Group's name will be used to create voice label.
+ 		'/',																// Line break - next group will be placed in new line.
+ 		{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
+ 		{ name: 'links' }
+	]
+
+	// NOTE: Remember to leave 'toolbar' property with the default value (null).
+});
+
+ + + +
+

Full toolbar configuration

+

Below you can see editor with full toolbar, generated automatically by the editor.

+

+ Note: To create editor instance with full toolbar you don't have to set anything. + Just leave toolbar and toolbarGroups with the default, null values. +

+ +

+	
+ + + + + + diff --git a/src/main/webapp/ckeditor/samples/plugins/wysiwygarea/fullpage.html b/src/main/webapp/ckeditor/samples/plugins/wysiwygarea/fullpage.html new file mode 100644 index 0000000..8c6f2e8 --- /dev/null +++ b/src/main/webapp/ckeditor/samples/plugins/wysiwygarea/fullpage.html @@ -0,0 +1,77 @@ + + + + + + Full Page Editing — CKEditor Sample + + + + + + + + + +

+ CKEditor Samples » Full Page Editing +

+
+

+ This sample shows how to configure CKEditor to edit entire HTML pages, from the + <html> tag to the </html> tag. +

+

+ The CKEditor instance below is inserted with a JavaScript call using the following code: +

+
+CKEDITOR.replace( 'textarea_id', {
+	fullPage: true,
+	allowedContent: true
+});
+
+

+ Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

+

+ The allowedContent in the code above is set to true to disable content filtering. + Setting this option is not obligatory, but in full page mode there is a strong chance that one may want be able to freely enter any HTML content in source mode without any limitations. +

+
+
+ + + +

+ +

+
+ + + diff --git a/src/main/webapp/ckeditor/samples/readonly.html b/src/main/webapp/ckeditor/samples/readonly.html new file mode 100644 index 0000000..cf609df --- /dev/null +++ b/src/main/webapp/ckeditor/samples/readonly.html @@ -0,0 +1,73 @@ + + + + + + Using the CKEditor Read-Only API — CKEditor Sample + + + + + +

+ CKEditor Samples » Using the CKEditor Read-Only API +

+
+

+ This sample shows how to use the + setReadOnly + API to put editor into the read-only state that makes it impossible for users to change the editor contents. +

+

+ For details on how to create this setup check the source code of this sample page. +

+
+
+

+ +

+

+ + +

+
+ + + diff --git a/src/main/webapp/ckeditor/samples/replacebyclass.html b/src/main/webapp/ckeditor/samples/replacebyclass.html new file mode 100644 index 0000000..6baea4c --- /dev/null +++ b/src/main/webapp/ckeditor/samples/replacebyclass.html @@ -0,0 +1,57 @@ + + + + + + Replace Textareas by Class Name — CKEditor Sample + + + + +

+ CKEditor Samples » Replace Textarea Elements by Class Name +

+
+

+ This sample shows how to automatically replace all <textarea> elements + of a given class with a CKEditor instance. +

+

+ To replace a <textarea> element, simply assign it the ckeditor + class, as in the code below: +

+
+<textarea class="ckeditor" name="editor1"></textarea>
+
+

+ Note that other <textarea> attributes (like id or name) need to be adjusted to your document. +

+
+
+

+ + +

+

+ +

+
+ + + diff --git a/src/main/webapp/ckeditor/samples/replacebycode.html b/src/main/webapp/ckeditor/samples/replacebycode.html new file mode 100644 index 0000000..8e7d7f7 --- /dev/null +++ b/src/main/webapp/ckeditor/samples/replacebycode.html @@ -0,0 +1,56 @@ + + + + + + Replace Textarea by Code — CKEditor Sample + + + + +

+ CKEditor Samples » Replace Textarea Elements Using JavaScript Code +

+
+
+

+ This editor is using an <iframe> element-based editing area, provided by the Wysiwygarea plugin. +

+
+CKEDITOR.replace( 'textarea_id' )
+
+
+ + +

+ +

+
+ + + diff --git a/src/main/webapp/ckeditor/samples/sample.css b/src/main/webapp/ckeditor/samples/sample.css new file mode 100644 index 0000000..faa0fbe --- /dev/null +++ b/src/main/webapp/ckeditor/samples/sample.css @@ -0,0 +1,365 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre +{ + line-height: 1.5; +} + +body +{ + padding: 10px 30px; +} + +input, textarea, select, option, optgroup, button, td, th +{ + font-size: 100%; +} + +pre +{ + -moz-tab-size: 4; + -o-tab-size: 4; + -webkit-tab-size: 4; + tab-size: 4; +} + +pre, code, kbd, samp, tt +{ + font-family: monospace,monospace; + font-size: 1em; +} + +body { + width: 960px; + margin: 0 auto; +} + +code +{ + background: #f3f3f3; + border: 1px solid #ddd; + padding: 1px 4px; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +abbr +{ + border-bottom: 1px dotted #555; + cursor: pointer; +} + +.new, .beta +{ + text-transform: uppercase; + font-size: 10px; + font-weight: bold; + padding: 1px 4px; + margin: 0 0 0 5px; + color: #fff; + float: right; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.new +{ + background: #FF7E00; + border: 1px solid #DA8028; + text-shadow: 0 1px 0 #C97626; + + -moz-box-shadow: 0 2px 3px 0 #FFA54E inset; + -webkit-box-shadow: 0 2px 3px 0 #FFA54E inset; + box-shadow: 0 2px 3px 0 #FFA54E inset; +} + +.beta +{ + background: #18C0DF; + border: 1px solid #19AAD8; + text-shadow: 0 1px 0 #048CAD; + font-style: italic; + + -moz-box-shadow: 0 2px 3px 0 #50D4FD inset; + -webkit-box-shadow: 0 2px 3px 0 #50D4FD inset; + box-shadow: 0 2px 3px 0 #50D4FD inset; +} + +h1.samples +{ + color: #0782C1; + font-size: 200%; + font-weight: normal; + margin: 0; + padding: 0; +} + +h1.samples a +{ + color: #0782C1; + text-decoration: none; + border-bottom: 1px dotted #0782C1; +} + +.samples a:hover +{ + border-bottom: 1px dotted #0782C1; +} + +h2.samples +{ + color: #000000; + font-size: 130%; + margin: 15px 0 0 0; + padding: 0; +} + +p, blockquote, address, form, pre, dl, h1.samples, h2.samples +{ + margin-bottom: 15px; +} + +ul.samples +{ + margin-bottom: 15px; +} + +.clear +{ + clear: both; +} + +fieldset +{ + margin: 0; + padding: 10px; +} + +body, input, textarea +{ + color: #333333; + font-family: Arial, Helvetica, sans-serif; +} + +body +{ + font-size: 75%; +} + +a.samples +{ + color: #189DE1; + text-decoration: none; +} + +form +{ + margin: 0; + padding: 0; +} + +pre.samples +{ + background-color: #F7F7F7; + border: 1px solid #D7D7D7; + overflow: auto; + padding: 0.25em; + white-space: pre-wrap; /* CSS 2.1 */ + word-wrap: break-word; /* IE7 */ +} + +#footer +{ + clear: both; + padding-top: 10px; +} + +#footer hr +{ + margin: 10px 0 15px 0; + height: 1px; + border: solid 1px gray; + border-bottom: none; +} + +#footer p +{ + margin: 0 10px 10px 10px; + float: left; +} + +#footer #copy +{ + float: right; +} + +#outputSample +{ + width: 100%; + table-layout: fixed; +} + +#outputSample thead th +{ + color: #dddddd; + background-color: #999999; + padding: 4px; + white-space: nowrap; +} + +#outputSample tbody th +{ + vertical-align: top; + text-align: left; +} + +#outputSample pre +{ + margin: 0; + padding: 0; +} + +.description +{ + border: 1px dotted #B7B7B7; + margin-bottom: 10px; + padding: 10px 10px 0; + overflow: hidden; +} + +label +{ + display: block; + margin-bottom: 6px; +} + +/** + * CKEditor editables are automatically set with the "cke_editable" class + * plus cke_editable_(inline|themed) depending on the editor type. + */ + +/* Style a bit the inline editables. */ +.cke_editable.cke_editable_inline +{ + cursor: pointer; +} + +/* Once an editable element gets focused, the "cke_focus" class is + added to it, so we can style it differently. */ +.cke_editable.cke_editable_inline.cke_focus +{ + box-shadow: inset 0px 0px 20px 3px #ddd, inset 0 0 1px #000; + outline: none; + background: #eee; + cursor: text; +} + +/* Avoid pre-formatted overflows inline editable. */ +.cke_editable_inline pre +{ + white-space: pre-wrap; + word-wrap: break-word; +} + +/** + * Samples index styles. + */ + +.twoColumns, +.twoColumnsLeft, +.twoColumnsRight +{ + overflow: hidden; +} + +.twoColumnsLeft, +.twoColumnsRight +{ + width: 45%; +} + +.twoColumnsLeft +{ + float: left; +} + +.twoColumnsRight +{ + float: right; +} + +dl.samples +{ + padding: 0 0 0 40px; +} +dl.samples > dt +{ + display: list-item; + list-style-type: disc; + list-style-position: outside; + margin: 0 0 3px; +} +dl.samples > dd +{ + margin: 0 0 3px; +} +.warning +{ + color: #ff0000; + background-color: #FFCCBA; + border: 2px dotted #ff0000; + padding: 15px 10px; + margin: 10px 0; +} + +/* Used on inline samples */ + +blockquote +{ + font-style: italic; + font-family: Georgia, Times, "Times New Roman", serif; + padding: 2px 0; + border-style: solid; + border-color: #ccc; + border-width: 0; +} + +.cke_contents_ltr blockquote +{ + padding-left: 20px; + padding-right: 8px; + border-left-width: 5px; +} + +.cke_contents_rtl blockquote +{ + padding-left: 8px; + padding-right: 20px; + border-right-width: 5px; +} + +img.right { + border: 1px solid #ccc; + float: right; + margin-left: 15px; + padding: 5px; +} + +img.left { + border: 1px solid #ccc; + float: left; + margin-right: 15px; + padding: 5px; +} + +.marker +{ + background-color: Yellow; +} diff --git a/src/main/webapp/ckeditor/samples/sample.js b/src/main/webapp/ckeditor/samples/sample.js new file mode 100644 index 0000000..b96b3bf --- /dev/null +++ b/src/main/webapp/ckeditor/samples/sample.js @@ -0,0 +1,50 @@ +/** + * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +// Tool scripts for the sample pages. +// This file can be ignored and is not required to make use of CKEditor. + +( function() { + CKEDITOR.on( 'instanceReady', function( ev ) { + // Check for sample compliance. + var editor = ev.editor, + meta = CKEDITOR.document.$.getElementsByName( 'ckeditor-sample-required-plugins' ), + requires = meta.length ? CKEDITOR.dom.element.get( meta[ 0 ] ).getAttribute( 'content' ).split( ',' ) : [], + missing = [], + i; + + if ( requires.length ) { + for ( i = 0; i < requires.length; i++ ) { + if ( !editor.plugins[ requires[ i ] ] ) + missing.push( '' + requires[ i ] + '' ); + } + + if ( missing.length ) { + var warn = CKEDITOR.dom.element.createFromHtml( + '
' + + 'To fully experience this demo, the ' + missing.join( ', ' ) + ' plugin' + ( missing.length > 1 ? 's are' : ' is' ) + ' required.' + + '
' + ); + warn.insertBefore( editor.container ); + } + } + + // Set icons. + var doc = new CKEDITOR.dom.document( document ), + icons = doc.find( '.button_icon' ); + + for ( i = 0; i < icons.count(); i++ ) { + var icon = icons.getItem( i ), + name = icon.getAttribute( 'data-icon' ), + style = CKEDITOR.skin.getIconStyle( name, ( CKEDITOR.lang.dir == 'rtl' ) ); + + icon.addClass( 'cke_button_icon' ); + icon.addClass( 'cke_button__' + name + '_icon' ); + icon.setAttribute( 'style', style ); + icon.setStyle( 'float', 'none' ); + + } + } ); +} )(); diff --git a/src/main/webapp/ckeditor/samples/sample_posteddata.php b/src/main/webapp/ckeditor/samples/sample_posteddata.php new file mode 100644 index 0000000..7637104 --- /dev/null +++ b/src/main/webapp/ckeditor/samples/sample_posteddata.php @@ -0,0 +1,16 @@ +
+
+-------------------------------------------------------------------------------------------
+  CKEditor - Posted Data
+
+  We are sorry, but your Web server does not support the PHP language used in this script.
+
+  Please note that CKEditor can be used with any other server-side language than just PHP.
+  To save the content created with CKEditor you need to read the POST data on the server
+  side and write it to a file or the database.
+
+  Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+  For licensing, see LICENSE.md or http://ckeditor.com/license
+-------------------------------------------------------------------------------------------
+
+
*/ include "assets/posteddata.php"; ?> diff --git a/src/main/webapp/ckeditor/samples/tabindex.html b/src/main/webapp/ckeditor/samples/tabindex.html new file mode 100644 index 0000000..8c2eb41 --- /dev/null +++ b/src/main/webapp/ckeditor/samples/tabindex.html @@ -0,0 +1,75 @@ + + + + + + TAB Key-Based Navigation — CKEditor Sample + + + + + + +

+ CKEditor Samples » TAB Key-Based Navigation +

+
+

+ This sample shows how tab key navigation among editor instances is + affected by the tabIndex attribute from + the original page element. Use TAB key to move between the editors. +

+
+

+ +

+
+

+ +

+

+ +

+ + + diff --git a/src/main/webapp/ckeditor/samples/uicolor.html b/src/main/webapp/ckeditor/samples/uicolor.html new file mode 100644 index 0000000..9a42c78 --- /dev/null +++ b/src/main/webapp/ckeditor/samples/uicolor.html @@ -0,0 +1,69 @@ + + + + + + UI Color Picker — CKEditor Sample + + + + +

+ CKEditor Samples » UI Color +

+
+

+ This sample shows how to automatically replace <textarea> elements + with a CKEditor instance with an option to change the color of its user interface.
+ Note:The UI skin color feature depends on the CKEditor skin + compatibility. The Moono and Kama skins are examples of skins that work with it. +

+
+
+

+ This editor instance has a UI color value defined in configuration to change the skin color, + To specify the color of the user interface, set the uiColor property: +

+
+CKEDITOR.replace( 'textarea_id', {
+	uiColor: '#14B8C4'
+});
+

+ Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

+

+ + +

+

+ +

+
+ + + diff --git a/src/main/webapp/ckeditor/samples/uilanguages.html b/src/main/webapp/ckeditor/samples/uilanguages.html new file mode 100644 index 0000000..f428fdb --- /dev/null +++ b/src/main/webapp/ckeditor/samples/uilanguages.html @@ -0,0 +1,119 @@ + + + + + + User Interface Globalization — CKEditor Sample + + + + + +

+ CKEditor Samples » User Interface Languages +

+
+

+ This sample shows how to automatically replace <textarea> elements + with a CKEditor instance with an option to change the language of its user interface. +

+

+ It pulls the language list from CKEditor _languages.js file that contains the list of supported languages and creates + a drop-down list that lets the user change the UI language. +

+

+ By default, CKEditor automatically localizes the editor to the language of the user. + The UI language can be controlled with two configuration options: + language and + + defaultLanguage. The defaultLanguage setting specifies the + default CKEditor language to be used when a localization suitable for user's settings is not available. +

+

+ To specify the user interface language that will be used no matter what language is + specified in user's browser or operating system, set the language property: +

+
+CKEDITOR.replace( 'textarea_id', {
+	// Load the German interface.
+	language: 'de'
+});
+

+ Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

+
+
+

+ Available languages ( languages!):
+ +
+ + (You may see strange characters if your system does not support the selected language) + +

+

+ + +

+
+ + + diff --git a/src/main/webapp/ckeditor/samples/xhtmlstyle.html b/src/main/webapp/ckeditor/samples/xhtmlstyle.html new file mode 100644 index 0000000..600cddc --- /dev/null +++ b/src/main/webapp/ckeditor/samples/xhtmlstyle.html @@ -0,0 +1,231 @@ + + + + + + XHTML Compliant Output — CKEditor Sample + + + + + + +

+ CKEditor Samples » Producing XHTML Compliant Output +

+
+

+ This sample shows how to configure CKEditor to output valid + XHTML 1.1 code. + Deprecated elements (<font>, <u>) or attributes + (size, face) will be replaced with XHTML compliant code. +

+

+ To add a CKEditor instance outputting valid XHTML code, load the editor using a standard + JavaScript call and define CKEditor features to use the XHTML compliant elements and styles. +

+

+ A snippet of the configuration code can be seen below; check the source of this page for + full definition: +

+
+CKEDITOR.replace( 'textarea_id', {
+	contentsCss: 'assets/outputxhtml.css',
+
+	coreStyles_bold: {
+		element: 'span',
+		attributes: { 'class': 'Bold' }
+	},
+	coreStyles_italic: {
+		element: 'span',
+		attributes: { 'class': 'Italic' }
+	},
+
+	...
+});
+
+
+

+ + + +

+

+ +

+
+ + + diff --git a/src/main/webapp/ckeditor/skins/moono/dialog.css b/src/main/webapp/ckeditor/skins/moono/dialog.css new file mode 100644 index 0000000..76c4651 --- /dev/null +++ b/src/main/webapp/ckeditor/skins/moono/dialog.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/src/main/webapp/ckeditor/skins/moono/dialog_ie.css b/src/main/webapp/ckeditor/skins/moono/dialog_ie.css new file mode 100644 index 0000000..1474e90 --- /dev/null +++ b/src/main/webapp/ckeditor/skins/moono/dialog_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0} \ No newline at end of file diff --git a/src/main/webapp/ckeditor/skins/moono/dialog_ie7.css b/src/main/webapp/ckeditor/skins/moono/dialog_ie7.css new file mode 100644 index 0000000..ebe0b78 --- /dev/null +++ b/src/main/webapp/ckeditor/skins/moono/dialog_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important} \ No newline at end of file diff --git a/src/main/webapp/ckeditor/skins/moono/dialog_ie8.css b/src/main/webapp/ckeditor/skins/moono/dialog_ie8.css new file mode 100644 index 0000000..566f3c2 --- /dev/null +++ b/src/main/webapp/ckeditor/skins/moono/dialog_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block} \ No newline at end of file diff --git a/src/main/webapp/ckeditor/skins/moono/dialog_iequirks.css b/src/main/webapp/ckeditor/skins/moono/dialog_iequirks.css new file mode 100644 index 0000000..f8887c7 --- /dev/null +++ b/src/main/webapp/ckeditor/skins/moono/dialog_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:""} \ No newline at end of file diff --git a/src/main/webapp/ckeditor/skins/moono/editor.css b/src/main/webapp/ckeditor/skins/moono/editor.css new file mode 100644 index 0000000..9616d79 --- /dev/null +++ b/src/main/webapp/ckeditor/skins/moono/editor.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/src/main/webapp/ckeditor/skins/moono/editor_gecko.css b/src/main/webapp/ckeditor/skins/moono/editor_gecko.css new file mode 100644 index 0000000..66de2de --- /dev/null +++ b/src/main/webapp/ckeditor/skins/moono/editor_gecko.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/src/main/webapp/ckeditor/skins/moono/editor_ie.css b/src/main/webapp/ckeditor/skins/moono/editor_ie.css new file mode 100644 index 0000000..a7ee066 --- /dev/null +++ b/src/main/webapp/ckeditor/skins/moono/editor_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/src/main/webapp/ckeditor/skins/moono/editor_ie7.css b/src/main/webapp/ckeditor/skins/moono/editor_ie7.css new file mode 100644 index 0000000..6eece07 --- /dev/null +++ b/src/main/webapp/ckeditor/skins/moono/editor_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/src/main/webapp/ckeditor/skins/moono/editor_ie8.css b/src/main/webapp/ckeditor/skins/moono/editor_ie8.css new file mode 100644 index 0000000..1f4dbdc --- /dev/null +++ b/src/main/webapp/ckeditor/skins/moono/editor_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/src/main/webapp/ckeditor/skins/moono/editor_iequirks.css b/src/main/webapp/ckeditor/skins/moono/editor_iequirks.css new file mode 100644 index 0000000..48d7989 --- /dev/null +++ b/src/main/webapp/ckeditor/skins/moono/editor_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/src/main/webapp/ckeditor/skins/moono/icons.png b/src/main/webapp/ckeditor/skins/moono/icons.png new file mode 100644 index 0000000..1ec992d Binary files /dev/null and b/src/main/webapp/ckeditor/skins/moono/icons.png differ diff --git a/src/main/webapp/ckeditor/skins/moono/icons_hidpi.png b/src/main/webapp/ckeditor/skins/moono/icons_hidpi.png new file mode 100644 index 0000000..6e103c0 Binary files /dev/null and b/src/main/webapp/ckeditor/skins/moono/icons_hidpi.png differ diff --git a/src/main/webapp/ckeditor/skins/moono/images/arrow.png b/src/main/webapp/ckeditor/skins/moono/images/arrow.png new file mode 100644 index 0000000..0d1eb39 Binary files /dev/null and b/src/main/webapp/ckeditor/skins/moono/images/arrow.png differ diff --git a/src/main/webapp/ckeditor/skins/moono/images/close.png b/src/main/webapp/ckeditor/skins/moono/images/close.png new file mode 100644 index 0000000..04b9c97 Binary files /dev/null and b/src/main/webapp/ckeditor/skins/moono/images/close.png differ diff --git a/src/main/webapp/ckeditor/skins/moono/images/hidpi/close.png b/src/main/webapp/ckeditor/skins/moono/images/hidpi/close.png new file mode 100644 index 0000000..8abca8e Binary files /dev/null and b/src/main/webapp/ckeditor/skins/moono/images/hidpi/close.png differ diff --git a/src/main/webapp/ckeditor/skins/moono/images/hidpi/lock-open.png b/src/main/webapp/ckeditor/skins/moono/images/hidpi/lock-open.png new file mode 100644 index 0000000..aa5e740 Binary files /dev/null and b/src/main/webapp/ckeditor/skins/moono/images/hidpi/lock-open.png differ diff --git a/src/main/webapp/ckeditor/skins/moono/images/hidpi/lock.png b/src/main/webapp/ckeditor/skins/moono/images/hidpi/lock.png new file mode 100644 index 0000000..5404b06 Binary files /dev/null and b/src/main/webapp/ckeditor/skins/moono/images/hidpi/lock.png differ diff --git a/src/main/webapp/ckeditor/skins/moono/images/hidpi/refresh.png b/src/main/webapp/ckeditor/skins/moono/images/hidpi/refresh.png new file mode 100644 index 0000000..1ebef34 Binary files /dev/null and b/src/main/webapp/ckeditor/skins/moono/images/hidpi/refresh.png differ diff --git a/src/main/webapp/ckeditor/skins/moono/images/lock-open.png b/src/main/webapp/ckeditor/skins/moono/images/lock-open.png new file mode 100644 index 0000000..3b256c0 Binary files /dev/null and b/src/main/webapp/ckeditor/skins/moono/images/lock-open.png differ diff --git a/src/main/webapp/ckeditor/skins/moono/images/lock.png b/src/main/webapp/ckeditor/skins/moono/images/lock.png new file mode 100644 index 0000000..c127f9e Binary files /dev/null and b/src/main/webapp/ckeditor/skins/moono/images/lock.png differ diff --git a/src/main/webapp/ckeditor/skins/moono/images/refresh.png b/src/main/webapp/ckeditor/skins/moono/images/refresh.png new file mode 100644 index 0000000..a1a061c Binary files /dev/null and b/src/main/webapp/ckeditor/skins/moono/images/refresh.png differ diff --git a/src/main/webapp/ckeditor/skins/moono/readme.md b/src/main/webapp/ckeditor/skins/moono/readme.md new file mode 100644 index 0000000..1b48dd2 --- /dev/null +++ b/src/main/webapp/ckeditor/skins/moono/readme.md @@ -0,0 +1,51 @@ +"Moono" Skin +==================== + +This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor +[skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by +the CKEditor team. "Moono" is maintained by the core developers. + +For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK) +documentation. + +Features +------------------- +"Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency. +It comes with the following features: + +- Chameleon feature with brightness, +- high-contrast compatibility, +- graphics source provided in SVG. + +Directory Structure +------------------- + +CSS parts: +- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance, +- **mainui.css**: the file contains styles of entire editor outline structures, +- **toolbar.css**: the file contains styles of the editor toolbar space (top), +- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar, +- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded +until the first panel open up, +- **elementspath.css**: the file contains styles of the editor elements path bar (bottom), +- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down, +it's not loaded until the first menu open up, +- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open, +- **reset.css**: the file defines the basis of style resets among all editor UI spaces, +- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference, +- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks. + +Other parts: +- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature, +- **icons/**: contains all skin defined icons, +- **images/**: contains a fill general used images, +- **dev/**: contains SVG source of the skin icons. + +License +------- + +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). + +See LICENSE.md for more information. diff --git a/src/main/webapp/ckeditor/styles.js b/src/main/webapp/ckeditor/styles.js new file mode 100644 index 0000000..48661b1 --- /dev/null +++ b/src/main/webapp/ckeditor/styles.js @@ -0,0 +1,111 @@ +/** + * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +// This file contains style definitions that can be used by CKEditor plugins. +// +// The most common use for it is the "stylescombo" plugin, which shows a combo +// in the editor toolbar, containing all styles. Other plugins instead, like +// the div plugin, use a subset of the styles on their feature. +// +// If you don't have plugins that depend on this file, you can simply ignore it. +// Otherwise it is strongly recommended to customize this file to match your +// website requirements and design properly. + +CKEDITOR.stylesSet.add( 'default', [ + /* Block Styles */ + + // These styles are already available in the "Format" combo ("format" plugin), + // so they are not needed here by default. You may enable them to avoid + // placing the "Format" combo in the toolbar, maintaining the same features. + /* + { name: 'Paragraph', element: 'p' }, + { name: 'Heading 1', element: 'h1' }, + { name: 'Heading 2', element: 'h2' }, + { name: 'Heading 3', element: 'h3' }, + { name: 'Heading 4', element: 'h4' }, + { name: 'Heading 5', element: 'h5' }, + { name: 'Heading 6', element: 'h6' }, + { name: 'Preformatted Text',element: 'pre' }, + { name: 'Address', element: 'address' }, + */ + + { name: 'Italic Title', element: 'h2', styles: { 'font-style': 'italic' } }, + { name: 'Subtitle', element: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } }, + { + name: 'Special Container', + element: 'div', + styles: { + padding: '5px 10px', + background: '#eee', + border: '1px solid #ccc' + } + }, + + /* Inline Styles */ + + // These are core styles available as toolbar buttons. You may opt enabling + // some of them in the Styles combo, removing them from the toolbar. + // (This requires the "stylescombo" plugin) + /* + { name: 'Strong', element: 'strong', overrides: 'b' }, + { name: 'Emphasis', element: 'em' , overrides: 'i' }, + { name: 'Underline', element: 'u' }, + { name: 'Strikethrough', element: 'strike' }, + { name: 'Subscript', element: 'sub' }, + { name: 'Superscript', element: 'sup' }, + */ + + { name: 'Marker', element: 'span', attributes: { 'class': 'marker' } }, + + { name: 'Big', element: 'big' }, + { name: 'Small', element: 'small' }, + { name: 'Typewriter', element: 'tt' }, + + { name: 'Computer Code', element: 'code' }, + { name: 'Keyboard Phrase', element: 'kbd' }, + { name: 'Sample Text', element: 'samp' }, + { name: 'Variable', element: 'var' }, + + { name: 'Deleted Text', element: 'del' }, + { name: 'Inserted Text', element: 'ins' }, + + { name: 'Cited Work', element: 'cite' }, + { name: 'Inline Quotation', element: 'q' }, + + { name: 'Language: RTL', element: 'span', attributes: { 'dir': 'rtl' } }, + { name: 'Language: LTR', element: 'span', attributes: { 'dir': 'ltr' } }, + + /* Object Styles */ + + { + name: 'Styled image (left)', + element: 'img', + attributes: { 'class': 'left' } + }, + + { + name: 'Styled image (right)', + element: 'img', + attributes: { 'class': 'right' } + }, + + { + name: 'Compact table', + element: 'table', + attributes: { + cellpadding: '5', + cellspacing: '0', + border: '1', + bordercolor: '#ccc' + }, + styles: { + 'border-collapse': 'collapse' + } + }, + + { name: 'Borderless Table', element: 'table', styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } }, + { name: 'Square Bulleted List', element: 'ul', styles: { 'list-style-type': 'square' } } +] ); + diff --git a/src/main/webapp/ckeditorUpload/2017/00/GZHa8ugSMuklaK8ZvPDr.jpg b/src/main/webapp/ckeditorUpload/2017/00/GZHa8ugSMuklaK8ZvPDr.jpg new file mode 100644 index 0000000..030ab8a Binary files /dev/null and b/src/main/webapp/ckeditorUpload/2017/00/GZHa8ugSMuklaK8ZvPDr.jpg differ diff --git a/src/main/webapp/ckeditorUpload/2017/00/HnAyBmqbiguvuqx96UqY.jpg b/src/main/webapp/ckeditorUpload/2017/00/HnAyBmqbiguvuqx96UqY.jpg new file mode 100644 index 0000000..78704a0 Binary files /dev/null and b/src/main/webapp/ckeditorUpload/2017/00/HnAyBmqbiguvuqx96UqY.jpg differ diff --git a/src/main/webapp/ckeditorUpload/2017/00/KSvRqvYTjolSLoy6USy6.jpg b/src/main/webapp/ckeditorUpload/2017/00/KSvRqvYTjolSLoy6USy6.jpg new file mode 100644 index 0000000..a587c96 Binary files /dev/null and b/src/main/webapp/ckeditorUpload/2017/00/KSvRqvYTjolSLoy6USy6.jpg differ diff --git a/src/main/webapp/ckeditorUpload/2017/00/MefBfwmtUFcRzC3o4lXC.jpg b/src/main/webapp/ckeditorUpload/2017/00/MefBfwmtUFcRzC3o4lXC.jpg new file mode 100644 index 0000000..fa4fd41 Binary files /dev/null and b/src/main/webapp/ckeditorUpload/2017/00/MefBfwmtUFcRzC3o4lXC.jpg differ diff --git a/src/main/webapp/ckeditorUpload/2017/00/R72xlHZXs4HeTSzUVxhv.jpg b/src/main/webapp/ckeditorUpload/2017/00/R72xlHZXs4HeTSzUVxhv.jpg new file mode 100644 index 0000000..fa4fd41 Binary files /dev/null and b/src/main/webapp/ckeditorUpload/2017/00/R72xlHZXs4HeTSzUVxhv.jpg differ diff --git a/src/main/webapp/ckeditorUpload/2017/00/V6ed5upVuN57H0zZvvRV.jpg b/src/main/webapp/ckeditorUpload/2017/00/V6ed5upVuN57H0zZvvRV.jpg new file mode 100644 index 0000000..fa4fd41 Binary files /dev/null and b/src/main/webapp/ckeditorUpload/2017/00/V6ed5upVuN57H0zZvvRV.jpg differ diff --git a/src/main/webapp/ckeditorUpload/2017/00/cNjTENStEwHOhDyIpfdV.jpg b/src/main/webapp/ckeditorUpload/2017/00/cNjTENStEwHOhDyIpfdV.jpg new file mode 100644 index 0000000..fa4fd41 Binary files /dev/null and b/src/main/webapp/ckeditorUpload/2017/00/cNjTENStEwHOhDyIpfdV.jpg differ diff --git a/src/main/webapp/ckeditorUpload/2017/00/kv4tytKkDdmyoWhwHoQU.jpg b/src/main/webapp/ckeditorUpload/2017/00/kv4tytKkDdmyoWhwHoQU.jpg new file mode 100644 index 0000000..757c2a6 Binary files /dev/null and b/src/main/webapp/ckeditorUpload/2017/00/kv4tytKkDdmyoWhwHoQU.jpg differ diff --git a/src/main/webapp/ckeditorUpload/2017/00/n5JZPM1LZUixJjT0sxap.jpg b/src/main/webapp/ckeditorUpload/2017/00/n5JZPM1LZUixJjT0sxap.jpg new file mode 100644 index 0000000..030ab8a Binary files /dev/null and b/src/main/webapp/ckeditorUpload/2017/00/n5JZPM1LZUixJjT0sxap.jpg differ diff --git a/src/main/webapp/ckeditorUpload/2017/00/n5YdvaTC50kTyUZM3wBr.jpg b/src/main/webapp/ckeditorUpload/2017/00/n5YdvaTC50kTyUZM3wBr.jpg new file mode 100644 index 0000000..78704a0 Binary files /dev/null and b/src/main/webapp/ckeditorUpload/2017/00/n5YdvaTC50kTyUZM3wBr.jpg differ diff --git a/src/main/webapp/ckeditorUpload/2017/00/pcwm3I4alfoBxHxQUltn.jpg b/src/main/webapp/ckeditorUpload/2017/00/pcwm3I4alfoBxHxQUltn.jpg new file mode 100644 index 0000000..78704a0 Binary files /dev/null and b/src/main/webapp/ckeditorUpload/2017/00/pcwm3I4alfoBxHxQUltn.jpg differ diff --git a/src/main/webapp/css/common.css b/src/main/webapp/css/common.css new file mode 100644 index 0000000..ac7f8d2 --- /dev/null +++ b/src/main/webapp/css/common.css @@ -0,0 +1,1976 @@ +body { + background: #fff; + font-family: "Nanum Gothic", "돋움", dotum, sans-serif; + padding: 0px; + margin: 0px ; + font-size: 14px; + font-weight: normal; + color: #484848; +} + +/* Styles for reset +-----------------------------------------------------------*/ + +ul, ol { + list-style: none; +} + +a img { + border: none; +} + +a { + color: #484848; + border: none; +} + +a:hover { + text-decoration: underline; +} + +a:visited { + text-decoration: none; +} + +a:link { + text-decoration: none; +} + +a:active { + text-decoration: underline; +} + +a:focus { + text-decoration: none; + outline: none; +} + +table { + padding: 0; + border-spacing: 0px; + border: 0; +} + +#table { + width: 1000px; + overflow: hidden; + overflow-x : auto; +} + +#table table { + border-collapse: collapse; + border-spacing: 0; + width: 100%; + border-left: 0; + border-right: 0; +} + +#table table { + width: 100%; +} + +.table table { + width: 100%; +} + +/* Styles for helper +-----------------------------------------------------------*/ + +.hidden { + position: absolute; + left: -10000%; + top: 0; + overflow: hidden; + width: 1px; + height: 1px; + font-size: 0; + line-height: 0; + text-indent: -10000px; +} + +.text-center { + text-align: center; +} + +.pull-right { + float: right; +} + +.mt-20 { + margin-top: 20px; +} + +/*chorme input bg reset*/ + +input:-webkit-autofill { + -webkit-box-shadow: 0 0 0 100px #fff inset; + -moz-box-shadow: 0 0 0 100px #fff inset; + box-shadow: 0 0 0 100px #fff inset; +} + +input:-webkit-autofill { transition: background-color 5000s ease-in-out 0s;} + +.margin_left { + margin-left: 10px; +} + +.margin-top input { + margin-top: 3px; +} + +/* Styles for password +-----------------------------------------------------------*/ + +#pwMenu { + display: none; + position: fixed; + _position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 500; +} + +#pwMenu .dimBg { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #000; + opacity: .5; + filter: alpha(opacity=50); +} + +.mini_window { + z-index:100; + border:1px solid #4a5057; + left: 50%; + top: 28%; + margin-left: -230px; + width: 460px; + visibility: visible; + position: absolute; + background-color: #fff; +} + +.password-pop h3 { + display: block; + padding: 15px 14px; + background-color: #4a5057; + font-size: 14px; + color: #fff; +} + +.border-style { + margin-bottom: 20px; + border-top: 0 !important; + border-bottom: 1px solid #8e8e8e; +} + +.password-pop .boardviewinfo { + margin-right: 10px; + margin-bottom: 10px; +} + +.password-pop .tbl_add { + width: 100%; + border-top: 0 !important; +} + +.tbl_add tr td.w-256 input[type="password"]{ + height: 28px; + width: 256px; + border: 1px solid #ccc; + padding: 0px 2%; + vertical-align: middle; +} + +#initPwMenu { + display: none; + position: fixed; + _position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 500; +} + +#initPwMenu .dimBg { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #000; + opacity: .5; + filter: alpha(opacity=50); +} + +/* Styles for lay-out +-----------------------------------------------------------*/ + +#wrap { + min-width: 1000px; + background: none; + color: #484848; + text-align: left; +} + +.sub_menu li a { + font-size: 12px; + color: #484848; +} + +.sub_menu li { + height: 14px; + line-height: 14px; +} + +/* Styles for footer +-----------------------------------------------------------*/ + +#footer .footer-content { + overflow: hidden; + width: 1000px; + margin: 0 auto; +} + +#footer .footer-banner { + position: relative; + height: 54px; + background: #f8f8f8; + border-top: 1px solid #d4d4d4; +} + +#footer .footer-banner .list { + overflow: hidden; + width: 100%; + white-space: nowrap; + text-align:right; + /* padding-left: 465px; */ +} + +#footer .footer-banner .list li { + position: relative; + display: inline-block; + padding: 0 10px; + line-height: 54px; + /* float:right; */ +} + +#footer .footer-banner .list li a { + color: #333; +} + +#footer .footer-banner .list li:first-child { + padding-left: 0; +} + +#footer .footer-banner .list li:first-child:after { + width: 0px; +} + +#footer .footer-banner .list li:after { + display: block; + content: ''; + position: absolute; + left: 0px; + top: 21px; + height: 13px; + width: 1px; + background: #bebebe; +} + +#footer .footer-banner .list .top_btn { + float: right; + background: #525252; +} + +#footer .footer-banner .list .top_btn a { + display: block; + color: #fff; + font-weight: bold; +} + +#footer .footer-banner .list .top_btn a span { + padding-right: 20px; + background: url(/source/korean/images/main/top_arrow.gif) no-repeat center right; +} + +#footer .footer-bottom { + border-top: 1px solid #d4d4d4; +} + +#footer .footer-bottom .footer-content { + padding: 30px 0; +} + +.footer-content .footer-logo { + float: left; + width: 170px; + margin-right: 30px; + padding-left: 1px; +} + +.footer-content .footer-info .footer-copyright { + margin-top: 5px; + font-size: 14px; + line-height: 26px; + color: #000000; + text-align: left; +} + + + +/* Styles for header +-----------------------------------------------------------*/ + +#header { + position: relative; +} + +#header:before { + content: ''; + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 60px; + border-top: 1px solid #e1e1e1; + z-index: -1; +} + +.header-gnb .all-menu { + float: right; + border-left: 1px solid #f1f1f1; + border-right: 1px solid #f1f1f1; +} + +.header-gnb .gnb-menu .all-menu a { + display: block; + font-size: 0; + line-height: 0; +} + +.top-gnb { + width: 1000px; + margin: 0 auto; +} + +.header-gnb { + overflow: hidden; + width: 1000px; + margin: 0 auto; + height: 60px; + z-index:1000; +} + +.header-gnb .gnb-menu > li { + float: left; + width: 156px; + text-align: center; +} + +.header-gnb .gnb-menu > li > a { + position: relative; + display: block; + font-size: 15px; + font-weight: bold; + color: #404040; + line-height: 60px; + border-left: 1px solid #f1f1f1; +} + + +/*.header-gnb .gnb-menu > li > a:hover { + color: #336bb8; +}*/ + +.header_user .top-gnb ul#menu1 li { + float: left; + position: relative; +} + +.header_user .top-gnb ul#menu1 li a { + display: block; + padding: 12px 10px; + font-size: 12px; + font-weight: bold; +} + +.header_user .top-gnb ul#menu1 li:first-child:after { + width: 0px; +} + +.header_user .top-gnb ul#menu1 li:after { + display: block; + content: ''; + position: absolute; + top: 13px; + height: 14px; + width: 1px; + background: #aaa; +} + +.submenu { + width: 156px; + display: none; + overflow: hidden; + position: absolute; + height: 321px; + font-size: 13px; + z-index: 1001; +} + +.submenu > ul { + margin-top: 36px; + height: 285px; + border-left: 1px dotted #e1e1e1; +} + +.submenu ul:last-child { + border-right: 1px dotted #e1e1e1; +} + +.submenu > ul > li { + padding: 0 10px 20px 10px; + font-size: 14px; + text-align: left; + letter-spacing: -1px; +} + +.submenu:hover:before { + content: ""; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 4px; + background: #336bb8; +} + +.submenu:hover { + background: #f3f3f3; + color: #fff; +} + +.submenu ul li a { + font-weight: 500; + color: #404040; + -webkit-transform: translateZ(0); + transform: translateZ(0); + box-shadow: 0 0 1px rgba(0, 0, 0, 0); + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -moz-osx-font-smoothing: grayscale; + -webkit-transition-duration: 0.3s; + transition-duration: 0.3s; + -webkit-transition-property: color, background-color; + transition-property: color, background-color; +} + +.submenu ul li a:hover { + color: #2082dd; + font-weight: bold; + text-decoration: underline; +} + +#menuBg { + display: none; + position: absolute; + left: 0; + top: 179px; + min-width: 1000px; + width: 100%; + height: 320px; + background: #fafafa; + z-index: 100; + border-top: 1px solid #e1e1e1; + border-bottom: 1px solid #e1e1e1; +} + +.gnb-menu-right { + float: right; +} + +.gnb-menu-right li { + float: left; + position: relative; +} + +.gnb-menu-right span { + display: block; + line-height: 40px; + font-size: 12px; + font-weight: bold; +} + +.gnb-menu-right li a { + padding: 12px 8px; + font-size: 12px; + font-weight: bold; + line-height: 40px; +} + +.gnb-menu-right li.logout { + font-size: 12px; + font-weight: bold; + line-height: 39px; +} + +.gnb-menu-right li.logout { + background: url("../../images/cmmn/logout.png") no-repeat 2px center; +} + +.gnb-menu-right li.logout > a { + padding-left: 35px; +} + +.header_user { + position: relative; + height: 40px; + background: #f5f5f5; + border-bottom: 1px solid #d5d5d5; +} + +.logo { + width: 1000px; + height: 78px; + margin: 0 auto; +} + +.logo h1 { + width : 160px; + height : 60px; + float: left; + padding: 18px 0 0; + margin-right: 5px; +} + +.logo h1:nth-child(1) { + margin-top : -10px; +} + +.logo h1:nth-child(2) { + margin-top : 0px; +} + + + +/* Styles for container +-----------------------------------------------------------*/ + +/*Location*/ + +.location { + position: relative; + height: 50px; + background: #4a5057; + z-index: 10; +} + +.location-content { + position: relative; + width: 1000px; + height: 50px; + margin: 0 auto; + border-left: 1px solid #3f454c; + box-sizing: border-box; +} + +.location-content > li { + float: left; + border-right: 1px solid #3f454c; +} + +.location-content > li.home > a { + display: block; + width: 44px; + padding: 17px 0 17px; + line-height: 0; + text-align: center; +} + +.location-content > li.now-page > a { + display: block; + padding: 9px 20px 10px 20px; + font-weight: 700; + line-height: 31px; + color: #fff; +} + +.location-content > li.page > a { + display: block; + padding: 9px 40px 10px 20px; + background: url("../../images/cmmn/location_arrow.png") no-repeat 85% 50%; + font-weight: 700; + line-height: 31px; + color: #fff; +} + +/*content*/ + +.content { + width: 1000px; + margin: 0 auto 160px; + outline: none; +} + +.title-area { + position: relative; + padding: 45px 0 40px; + text-align: left; +} + +.title-area .page-title { + position: relative; + /*display: inline-block;*/ + display: block; + margin: 0; + padding: 0 0 10px 0; + background: none; + font-size: 26px; + line-height: 45px; + font-weight: 700; + color: #333; +} + +.title-area .page-title:after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 4px; + background: #044796; +} + +.title-area .page-title li span { + font-size: 16px; +} + +/*.title-area .page-title:after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 3px; + background: #044796; +}*/ + +/* Styles for boardList +-----------------------------------------------------------*/ + +/*page info*/ + +.pageinfo { + overflow: hidden; + margin-bottom: 10px; +} + +.pageinfo .left { + float: left; + color: #333; + font-size: 13px; + padding: 1.333em 0 0; +} + +.pageinfo .left li { + display: inline-block; + margin-right: 3px; +} + +.pageinfo .left li em { + color: #1663bc; + font-weight: bold; + padding-left: 3px; + font-style: normal; +} + +.pageinfo .right { + float: right; +} + +.pageinfo .right li { + display: inline-block; + margin-left: 3px; +} + + +/*board table*/ +.tbl_list { + border-bottom: 1px solid #8e8e8e; + border-top: 2px solid #2d2d2d; +} + +.tbl_list thead th { + padding: 13px 5px; + background-color: #f8f8f8; + border-bottom: 1px solid #8e8e8e; + text-align: center; + color: #333; +} + +.tbl_list_col { + border-bottom: none !important; + padding: 8px 10px !important; +} + +.tbl_list thead tr:nth-child(2) th{ + padding: 8px 10px; +} + +.tbl_list tbody td { + word-break: break-all; +} + +.tbl_list tbody td { + padding: 13px 5px; + border-bottom: 1px dotted #dcdcdc; +} + +.tbl_list tbody tr:last-child td { + border-bottom: 0; +} + +.tbl_list tbody tr:last-child td { + border-bottom: 0; +} + +.tbl_list tbody td a { + color: #333; + -moz-osx-font-smoothing: grayscale; + -webkit-transition-duration: 0.3s; + transition-duration: 0.3s; + -webkit-transition-property: color, background-color; + transition-property: color, background-color; +} + +.tbl_list tbody td a:hover { + color: #333; + text-decoration: underline; +} + +/*btn*/ + +.pageinfo .btn-style > li > a { + border: 1px solid #9b9b9b; + display: block; + width: 34px; + height: 34px; + font-size: 0; + line-height: 0; + text-indent: -10000%; +} + +.pageinfo .btn-style-text > li > a { + display: block; + padding: 0 10px; + line-height: 28px; + border: 1px solid #9b9b9b; + font-size: 13px; + font-weight: 700; + text-align: center; + color: #333; +} + +.board_buttom .right { + float: right; +} + +.board_buttom .btn-style > li > a { + border: 1px solid #557799; + display: block; + width: 80px; + height: 34px; + color: #fff; + line-height: 34px; + text-align: center; +} + +#search { + position: relative; + padding: 30px 167px 30px 234px; + margin-bottom: 30px; + background: #f5f5f5; +} + +#search .form_group select { + position: absolute; + top: 30px; + left: 50px; + width: 180px; + height: 39px; + margin-right: 3px; + padding: 8px 10px 8px 10px; + border: 1px solid #d7d7d7; + font-size: 13px; +} + +#search .form_group input { + width: 100%; + height: 39px; + border: 1px solid #d7d7d7; + line-height: 39px; + text-indent: 10px; + box-sizing: border-box; +} + +.search2 { + position: relative; + padding: 30px 30px; + margin-bottom: 30px; + background: #f5f5f5; + overflow:hidden; +} + +.search2 ul li { + vertical-align: middle; +} + +.search2 .btn_blue , .search2 .btn_gray{ + height: 39px; + line-height: 39px; + padding: 0 10px 0 10px; +} + +.m-bottom { + margin-bottom: 1px !important; +} + +.m-top { + margin-top: 9px; +} + +.search2 .form_search select { + width: 180px; + height: 39px; + padding: 8px 10px 8px 10px; + border: 1px solid #d7d7d7; + font-size: 13px; +} + +.search2 .form_search2 select { + width: 380px; + height: 39px; + padding: 8px 10px 8px 10px; + border: 1px solid #d7d7d7; + font-size: 13px; +} + +.search2 .form_search3 select { + width: 120px; + height: 39px; + padding: 8px 10px 8px 10px; + border: 1px solid #d7d7d7; + font-size: 13px; +} + +.search2 ul { + overflow:hidden; +} + +.search2 ul li { + vertical-align:middle +} + +.search2 ul li label { + font-weight: bold; +} + +.search2 input[type="text"] { + height: 39px; + border: 1px solid #d7d7d7; + line-height: 39px; + text-indent: 10px; + box-sizing: border-box; +} + +.search2 li.w-300 input[type="text"] { + width: 300px; +} + +.search2 li.w-94 input[type="text"] { + width: 94px; +} + +.search2 input[type="radio"] { + border: 1px solid #d7d7d7; + line-height: 39px; + text-indent: 10px; + box-sizing: border-box; +} + +.search2 input[type="button"] { + border: none; + display: inline-block; + border-radius: 3px; + height: 39px; + line-height: 39px; + background: #393d49; + color: #fff; + font-weight: 700; + vertical-align: middle; + text-indent: 0; + padding: 0 20px; + cursor: pointer; +} + +.search2 input[type="button"].gray { + background: #555; + cursor: pointer; +} + +.search2 input#name { + height: 39px; + width: 200px; +} + +.search2 .w-320 input { + width: 320px; +} + +.search2 .w-240 input { + width: 240px; +} + +.search2 .w-130 input { + width: 130px; +} + +.search2 .margin-left { + margin-left: 14px; +} + +.search2 .ml-5 { + margin-left: 5px; +} + +.search2 .form_radio input { + margin: 0 8px 0 6px; +} + +.search2 ul li { + display: inline-block; +} + +.search2 .label_marign li > label { + margin-left: 4px; +} + +.search2 .label_marign li.radio-group { + height: 14px; + width: 1px; + background: #d7d7d7; + margin: 0 14px; +} + +.search3 { + position: relative; + height: 245px; + padding: 20px; + background-color: #f5f5f5; +} + +.search3 .search_list { + float: left; + height: 245px; +} + +.search3 .search_list:first-child { + margin-right: 10px; +} + +.search3 .search_list:last-child { + margin-left: 10px; +} + +.search4 { + position: relative; + padding: 20px; + background-color: #f5f5f5; +} +.search4 .search_list_wrap{ + overflow:hidden; +} + +.search4 .search_list { + float: left; + overflow:hidden; + margin-left:8px; +} + +.search4 .search_list .list-box { + position: relative; + width:234px; +} + +.search4 .search_list:first-child{ + margin-left:0; +} + +.search4 .search_list .list-box .select_list { + height: 140px; + border-right: 1px solid #d7d7d7; + border-bottom: 1px solid #d7d7d7; + overflow-y: scroll; + background: #fff; + font-size: 13px; +} + +.search_list .list1 { + width: 199px; +} + +.search_list .list2 { + width: 120px; +} + +.search_list .list3 { + width: 150px; +} + +.search_list .list4 { + width: 157px; +} + +.search_list .list5 { + width: 157px; +} + +.search_list .list6 { + width: 157px; +} + +.search_list .list-box { + position: relative; + float: left; +} + +.search_list .list-box .select_list { + height: 210px; + border-right: 1px solid #d7d7d7; + border-bottom: 1px solid #d7d7d7; + overflow-y: scroll; + background: #fff; + font-size: 13px; +} + +.search_list .list-box .select_list li { + position: relative; + font-size: 13px; + line-height: 21px; +} + +.search_list .list1 .select_list { + border-left: 1px solid #d7d7d7; +} + +.search_list .list3 .select_list { + border-left: 1px solid #d7d7d7; +} + +.select_title { + padding: 0; + margin: 0; + line-height: 34px; + text-align: center; + color: #fff; + font-size: 13px; + font-weight: 700; + background-color: #5e7188; +} + +.select_title input[type=checkbox] { + margin-left: 10px; + position: absolute; + margin-top: 11px; +} +.select_title input[type=radio] { + margin-left: 10px; + position: absolute; + margin-top: 11px; +} + +.list1 .select_title:after { + display: block; + content: ''; + position: absolute; + top: 13px; + right: 2px; + height: 14px; + width: 1px; + background: #4d6889; +} + +.list3 .select_title:after , +.list4 .select_title:after , +.list5 .select_title:after { + display: block; + content: ''; + position: absolute; + top: 13px; + right: 2px; + height: 14px; + width: 1px; + background: #4d6889; +} + +.search_list .list-box .select_list li input[type=checkbox] { + margin-left: 10px; + vertical-align: middle; +} +.search_list .list-box .select_list li input[type=radio] { + margin-left: 10px; + vertical-align: middle; +} + + +.search_list .list-box .select_list label { + display: inline-block; + vertical-align: middle; + padding-left: 4px; + /* width: 90px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap;*/ +} + +.inp_btn { + position: absolute; + top: 30px; + right: 50px; +} + +.btn_blue { + display: inline-block; + padding: 12px 30px 11px; + border-radius: 3px; + background: #393d49; + color: #fff; + font-weight: 700; + vertical-align: middle; +} + +.btn_blue a { + color: #fff; +} + +.btn_gray { + display: inline-block; + padding: 12px 30px 11px; + border-radius: 3px; + background: #555; + color: #fff; + font-weight: 700; + vertical-align: middle; +} + +.btn_gray a { + color: #fff; +} + +.btn_default { + display: inline-block; + padding: 8px 20px 8px; + border-radius: 3px; + color: #fff; + font-weight: 700; + vertical-align: middle; + border: 1px solid #9b9b9b; +} + +.btn_default a { + color: #333333; +} + +.btn_set { + width: 36px; + height: 36px; + font-size: 0; + line-height: 0; + text-indent: -10000%; +} + +.btn_delete { + background: url("../../images/cmmn/delete.png"); +} + +.btn_reset { + background: url("../../images/cmmn/reset.png"); +} + +.btn_excel { + background: url("../../images/cmmn/excel.png"); +} + +.btn_print { + background: url("../../images/cmmn/print.png"); +} + + +.btn_graph { + background: url("../../images/cmmn/graph.png"); +} + +.btn_update { + background: url("../../images/cmmn/update.png"); +} + +.btn_filter { + background: url("../../images/cmmn/filter.png"); +} + +/* +.btn_delete:hover { + background: url("../../images/cmmn/delete_on.png"); +} + +.btn_reset:hover { + background: url("../../images/cmmn/reset_on.png"); +} + +.btn_excel:hover { + background: url("../../images/cmmn/excel_on.png"); +} + +.btn_print:hover { + background: url("../../images/cmmn/print_on.png"); +} + +.btn_graph:hover { + background: url("../../images/cmmn/graph_on.png"); +} + +.btn_update:hover { + background: url("../../images/cmmn/update_on.png"); +} +.btn_filter:hover { + background: url("../../images/cmmn/filter_on.png"); +} +*/ + +.btn_create { + background: url(../../images/cmmn/create.png); + background-repeat: no-repeat; + background-position: 8px 50%; +} + +.btn_create { + background-color: #557799; + padding-left: 20px; + border-radius: 3px; +} + +/*paging*/ + +#paging { + clear: both; + width: 100%; + margin: 2.666em auto 0; + line-height: normal; + text-align: center; +} + +#paging strong { + border-color: #557799; + background: #557799; + color: #fff; + width: 33px; + height: 34px; + font-size: 12px; + line-height: 34px; + display: inline-block; + vertical-align: middle; + white-space: nowrap; + overflow: hidden; + text-decoration: none !important; +} + +#paging a { + border: 1px solid #dddddd; + color: #333; + width: 34px; + height: 34px; + font-size: 12px; + line-height: 34px; + display: inline-block; + vertical-align: middle; + white-space: nowrap; + overflow: hidden; + text-decoration: none !important; +} + +.board_buttom { + display: block; + margin: 20px 0; + text-align: right; +} + +/* Styles for boardView +-----------------------------------------------------------*/ +.tbl_view { + display: block; + margin-bottom: 20px; + border-top: 2px solid #2d2d2d; + border-bottom: 1px solid #2d2d2d; + word-break: break-all; +} + +.tbl_view thead th.tbl_title { + padding: 14px 15px; + background-color: #f8f8f8; + font-size: 16px; + font-weight: bold; + color: #333; + text-align: left; +} + +.tbl_view thead th { + padding: 12px 15px; +} + +.tbl_view thead tr:first-child th { + border-top: none; + background-color: #f8f8f8; +} + +.tbl_view-col { + background-color: #f8f8f8; +} + +.tbl_view thead tr td, .tbl_view thead tr th { + border-top: 1px solid #dcdcdc; + text-align: left; +} + +.tbl_view thead tr th label { + text-align: left; +} + +.tbl_view thead td { + padding: 12px 15px; +} + +.tbl_view thead td a { + color: #333; +} + +.tbl_view thead td a:hover { + text-decoration: underline; +} + +.tbl_view tbody .tbl_content td.view { + padding: 40px 10px; + border-top: 1px solid #dcdcdc; + text-align: left; + vertical-align: top; + line-height: 21px; +} + +.tbl_view tbody tr:first-child td { + border-top: 1px solid #dcdcdc; +} + +.boardviewinfo { + overflow: hidden; + margin-bottom: 40px; +} + +.boardviewinfo .right { + float: right; +} + +.boardviewinfo .btn-style > li { + display: inline-block; + text-align: center; +} + +.boardviewinfo .btn-style > li > a { + display: block; + padding: 0 10px; + line-height: 27px; + border: 1px solid #d7d7d7; + border-radius: 3px; + background: #fff; + font-size: 13px; + font-weight: 700; + text-align: center; + color: #333; +} + +.opinion { + position: relative; + height: 40px; + padding: 30px 30px; + margin-bottom: 30px; + border: 1px solid #e5e7e9; + background: #f5f7f9; +} + +.opinion li { + display: inline-block; +} + +.opinion ul li { + vertical-align: middle; +} + +.opinion .btn_blue { + height: 40px; + line-height: 40px; + padding: 0 30px 0 30px !important; +} + +#comment { + position: relative; + margin: 0 0 -1px 0; + line-height: 1.333; + letter-spacing: -1px; + overflow: hidden; +} + +#comment li { + display: block; + padding: 14px 10px; + border-top: 1px solid #e5e7e9; +} + +#comment li b { + margin-right: 10px; +} + +#comment li b:after { + content:"|"; + padding-left: 10px; + color: #e5e7e9; + font-weight: 100 !important; +} + +#comment .delate { + margin-top: -2px; + float: right; + display: inline-block; + padding: 2px 6px; + border: 1px solid #d7d7d7; + border-radius: 3px; + background: #fff; + font-size: 13px; + font-weight: 700; + text-align: center; + color: #333; +} + +.comment-img { + loat: left; + position: absolute; + top: 15px; + width: 46px; + height: 46px; + border-radius: 50%; + border: 12px solid #fff; + background: #fff url("../../images/cmmn/comment.png"); + background-size: contain; + vertical-align: middle; +} +.opinion .form_input { + padding-left: 100px; +} + +.opinion .form_input input { + width: 710px; + height: 40px; + border: 1px solid #d7d7d7; + line-height: 40px; + text-indent: 10px; + box-sizing: border-box; + margin-right: 3px; + font-size: 13px; +} + +/* Styles for boardAdd +-----------------------------------------------------------*/ + +.tbl_add { + margin-bottom: 20px; + border-top: 2px solid #353535; + border-bottom: 1px solid #8e8e8e; +} + +.tbl_add tr.th-bg { + background: #f8f8f8; + font-weight: bold; +} + +.tbl_add tr th { + font-weight: 600; + padding: 8px 8px 8px 14px; + background: #f8f8f8; + text-align: left; + line-height: 28px; + border-top: 1px solid #ddd; +} + +.tbl_add thead .border th { + border-top: 0 ; + border-bottom: 1px solid #ddd ; +} + +.tbl_add tbody tr td.title { + font-weight: bold; +} + +.tbl_add tr td { + overflow: hidden; + min-width: 70px; + line-height: 28px; +} + +.tbl_add tr td input[type="text"] { + height: 28px; + line-height: 28px; + width: 80%; + border: 1px solid #ccc; + padding: 0px 10px; + vertical-align: middle; +} + +.tbl_add tr td.w-82 input[type="text"] { + width:82px; +} + +.tbl_add tr td.w-124 input[type="text"] { + width:124px; +} + +.tbl_add tr td.w-138 input[type="text"] { + width:138px; +} + +.tbl_add tr td.w-158 input[type="text"] { + width:158px; +} + +.tbl_add tr td.w-192 input[type="text"] { + width:192px; +} +.tbl_add tr td.w-214 input[type="text"] { + width:214px; +} + +.tbl_add tr td.iw-320 input[type="text"] { + width:320px; +} + +.tbl_add tr td input[type="password"] { + height: 28px; + line-height: 28px; + width: 30%; + border: 1px solid #ccc; + padding: 0px 2%; + vertical-align: middle; +} + +.tbl_add tr td textarea { + height: 28px; + width: 80%; + border: 1px solid #ccc; + padding: 8px 2%; + vertical-align: middle; + line-height: 20px; +} + +.tbl_add tr td .tbl_addtext { + margin-right: 4px; +} + +.tbl_add .form_search select { + margin-right: 3px; + padding: 3px 3px 3px 3px; + height: 30px; + width: 100%; + vertical-align: middle; + border: 1px solid #ccc; + font-size: 13px; +} + +.tbl_add .form_search.sw-156 select { + width: 156px; +} + +.tbl_add .form_search.sw-200 select { + width: 200px; +} + +.tbl_add .form_search.sw-320 select { + width: 320px; +} + +.tbl_add .form_search. select { + margin-top: -1px; + vertical-align: middle; + padding-right: 1px; + padding-right: 2px \0/IE8 !important; + padding-left: 2px \0/IE8 !important; +} + +.tbl_add .form_select select { + padding: 3px 3px 3px 3px; + height: 30px; + width: 84%; + vertical-align: middle; + border: 1px solid #ccc; + font-size: 13px; + vertical-align: middle; +} + +.tbl_add .form_day select { + padding: 3px 3px 3px 3px; + height: 30px; + width: 38%; + vertical-align: middle; + border: 1px solid #ccc; + font-size: 13px; + vertical-align: middle; +} + +.tbl_add tr td.form_day input[type="text"] { + height: 30px; + width: 38%; + vertical-align: middle; + border: 1px solid #ccc; + font-size: 13px; + vertical-align: middle; +} + +.tbl_add .form_day span { + padding: 0 4px; +} + +.tbl_add #place2_div select , .tbl_add #place3_div select { + margin-right: 3px; + padding: 3px 3px 3px 3px; + height: 30px; + width: 84%; + vertical-align: middle; + border: 1px solid #ccc; + font-size: 13px; + vertical-align: middle; +} + +.tbl_add select#scholarship { + width: 33.6% !important; +} + +.tbl_add select#place2 { + width: 57.6% !important; +} + +.tbl_add tbody tr:first-child td, .tbl_add tbody tr:first-child th { + border-top: none; +} + +.tbl_add tbody tr td { + border-top: 1px solid #ddd; + padding: 10px; +} + +.tbl_add tr td p input { + margin-bottom: 4px; +} + +.tbl_add tr td p:last-child input { + margin-bottom: 0; +} + +.tbl_add .search > button[type="button"] { + padding: 0 8px 0 8px; + height: 30px; + border: 1px solid #666; + border-radius: 3px; + background: #666; + font-size: 13px; + font-weight: 700; + text-align: center; + color: #fff; + cursor: pointer; +} + + +/* Styles for table_listveiw +-----------------------------------------------------------*/ + +.tbl_listview { + border-bottom: 1px solid #8e8e8e; + border-top: 2px solid #2d2d2d; +} + +.tbl_listview thead tr th { + background-color: #f8f8f8; + padding: 13px 10px; + border-left: 1px solid #dcdcdc; + text-align: center; + border-bottom: 0px; +} + +.tbl_listview thead tr th:first-child { + border-left: 0; +} + +.tbl_listview thead tr th:last-child { + border-right: 0; +} + +.tbl_listview tbody tr td:first-child { + border-left: 0; +} + +.tbl_listview tbody tr td:last-child { + border-right: 0; +} + +.tbl_listview tbody tr td { + font-weight: 500; + padding: 13px 8px; + border-top: 1px solid #dcdcdc; + border-left: 1px solid #dcdcdc; +} + +.tbl_listview tbody tr td ul li { + padding: 2px 0; +} + +/* Styles tbl_listview2 +-----------------------------------------------------------*/ + +.tbl_listview2 { + border-bottom: 1px solid #8e8e8e; + border-top: 2px solid #2d2d2d; +} + +.tbl_listview2 thead tr th { + background-color: #f8f8f8; + padding: 10px 8px; + border-left: 1px solid #dcdcdc; + border-bottom: 1px solid #dcdcdc; + text-align: center; +} + +.tbl_listview2 thead tr:first-child th:first-child { + border-left: 0; +} + +.tbl_listview2 tbody tr td:first-child { + border-left: 0; +} + +.tbl_listview2 tbody tr:first-child td { + border-top: 0 !important; +} + +.tbl_listview2 tbody tr td { + font-weight: 500; + padding: 13px 8px; + border-top: 1px solid #dcdcdc; + border-left: 1px solid #dcdcdc; +} + +.pageinfo .left2 { + float: left; +} +.pageinfo .left2 > li > a { + border: 1px solid #557799; + display: block; + width: 80px; + height: 34px; + color: #fff; + line-height: 34px; + text-align: center; +} + +.order { + cursor: pointer; +} + + +/* Styles tbl_listview3 +-----------------------------------------------------------*/ + +.tbl_listview3 { + width: 1600px !important; +} + +.tbl_listview3 { + border-bottom: 1px solid #8e8e8e; + border-top: 2px solid #2d2d2d; +} + +.tbl_listview3 thead tr th { + padding: 8px 10px; + background-color: #f8f8f8; + border-left: 1px solid #dcdcdc; + border-bottom: 1px solid #dcdcdc; + text-align: center; +} + +.tbl_listview3 thead tr:first-child th:first-child { + border-left: 0; +} + +.tbl_listview3 tbody tr td:first-child { + border-left: 0; + padding: 6px 8px; +} + +.tbl_listview3 tbody tr:first-child td { + border-top: 0 !important; +} + +.tbl_listview3 tbody tr td { + padding: 6px 2px; + font-weight: 500; + border-top: 1px solid #dcdcdc; + border-left: 1px solid #dcdcdc; +} + +.tbl_listview3 tbody tr:last-child td { + background-color: #f7f7f7; + font-weight:bold +} + + +/* Styles tbl_list3 +-----------------------------------------------------------*/ + +.tbl_list3 { + border-bottom: 1px solid #8e8e8e; + border-top: 2px solid #2d2d2d; +} + +.tbl_list3 thead th { + padding: 6px 4px; + background-color: #f8f8f8; + border-bottom: 1px solid #8e8e8e; + text-align: center; + color: #333; +} + +.tbl_list3_col { + border-bottom: none !important; +} + +.tbl_list3 thead tr:nth-child(2) th{ +} + +.tbl_list3 tbody td { + word-break: break-all; +} + +.tbl_list3 tbody td { + padding: 13px 4px; + border-bottom: 1px dotted #dcdcdc; +} + +.tbl_list3 tbody tr:last-child td { + border-bottom: 0; +} + +.tbl_list3 tbody tr:last-child td { + border-bottom: 0; +} + +.tbl_list3 tbody td a { + color: #333; +} + +.tbl_list3 tbody td a:hover { + color: #333; + text-decoration: underline; + font-weight: bold; +} + + +.tbl_list tbody td a:hover { + color: #333; + text-decoration: underline; + font-weight: bold; +} + + +/* ui-widget input resset 사용자 수정 +-----------------------------------------------------------*/ +#divCmmnMemberEditPopup .tbl_add { + margin-bottom: 0 !important; + border-top: 0 !important; +} + +.ui-widget-content { + border: 0 !important; +} + +.ui-dialog { + border: 1px solid #4a5057 !important; +} + +#ui-datepicker-div { + border: 1px solid #c5c5c5 !important; +} + +.ui-dialog .ui-dialog-titlebar-close { + margin: -10px 5px 0 0 !important; +} + +.ui-dialog-titlebar { + text-align: left !important; +} + +.ui-widget-overlay { + background: #000 !important; + opacity: .5 !important; +} + +.ui-corner-all { + border-radius: 0 !important; +} + +.ui-dialog { + padding: 0 !important; +} + +.ui-dialog-titlebar { + padding: 15px 14px !important; + background-color: #4a5057 !important; + font-size: 14px !important; + color: #fff !important; + border: 0 !important; +} + +.ui-dialog .ui-dialog-content { + padding: 0 !important; +} + +.ui-dialog .ui-dialog-buttonpane button { + padding: 0 10px !important; + line-height: 27px !important; + border: 1px solid #d7d7d7 !important; + border-radius: 3px !important; + background: #fff !important; + font-size: 13px !important; + font-weight: 700 !important; + text-align: center !important; + color: #333 !important; +} + +.ui-dialog .ui-dialog-buttonpane { + margin-top: 0 !important; +} + +.search > * { + vertical-align: middle; +} + + diff --git a/src/main/webapp/css/egov.css b/src/main/webapp/css/egov.css new file mode 100644 index 0000000..0cc3a6f --- /dev/null +++ b/src/main/webapp/css/egov.css @@ -0,0 +1,257 @@ +/********************************************************************************/ +/* */ +/* Design RIAN */ +/* Date : 2007-03-21 */ +/* */ +/* */ +/********************************************************************************/ +* {margin:0;padding:0;} +* html {height:1px;} +body {margin:0; padding:0; font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; font-size:12px; color:#666; scroll:auto;} +/*table, tr, td, th {font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; font-size:11px; color:#333333;}*/ +caption{visibility:hidden} + +/* +.listtd {padding:10px 5px 8px 5px; border-bottom:1px solid #e5e5e5;} +.listtds {padding:10px 5px 8px 5px; border:1px solid #e5e5e5;} + +*/ + + +/*th {background-color:#F3F5E0; background:url(../../images/rte/th_bg.gif) 0 0 repeat; height:26px; text-align:center; vertical-align:middle; color:#003366;}*/ +img {border:0; vertical-align:middle;} +/*p { height:20px; margin:0; padding:5 0 0 0;}*/ +.check ul {margin:0; padding:0; float:left;} +.check li {list-style-type:none; float:left; margin:0 0 0 0; padding:0 0 0 3px;} +.top {vertical-align:top;} +/* +a:link { font-size:11px; font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; color:#3A5870; text-decoration:none; line-height:100%;} +a:visited { font-size:11px; font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; color:#3A5870; text-decoration:none} +a:active { font-size:11px; font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; color:#339999; text-decoration:none;} +a:hover { font-size:11px; font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; color:#339999; text-decoration:none;}*/ + +/*#command div { margin:0 auto;}*/ +.login {position:relative; margin:0; padding:0 0 0 0px; text-align:left; vertical-align:top; padding:52px 0px 0px 270px; /*overflow:hidden;*/ width:330px; height:260px;background:url(../../images/rte/login_bg.jpg) 0 0 no-repeat; } +.login_en {position:relative; margin:0; padding:0 0 0 0px; text-align:left; vertical-align:top; padding:52px 0px 0px 270px; /*overflow:hidden;*/ width:330px; height:260px;background:url(../../images/rte/login_bg_en.jpg) 0 0 no-repeat; } +.error {position:relative; margin:0; padding:0 0 0 0px; text-align:left; vertical-align:top; padding:120px 0px 0px 80px; /*overflow:hidden;*/ width:520px; height:260px;background:url(../../images/rte/error_bg.jpg) 0 0 no-repeat; } +.error_en {position:relative; margin:0; padding:0 0 0 0px; text-align:left; vertical-align:top; padding:120px 0px 0px 80px; /*overflow:hidden;*/ width:520px; height:260px;background:url(../../images/rte/error_bg_en.jpg) 0 0 no-repeat; } +#logo {margin:0; padding:0; text-align:left; /*overflow:hidden;*/ width:910px;} +/*#header {height:74px;}*/ +#top {width:910px;} +.menu { text-align:center; height:38px; margin:0; padding:13px 0 0 0;} +.menu ul {display:inline; width:910px;} +.menu li {display:inline; list-style-type:none; margin:0; padding:14px 28px 0 28px; background:url(../../images/rte/civilappeal_topmn_bar.jpg) 0 15px no-repeat;} +.menu li.last {width:1px; padding:15px 0 0 0; background:url(../../images/rte/civilappeal_topmn_bar.jpg) 0 0 no-repeat;} +.menu a.top:link {font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; font-weight:bold; color:#FFFFFF; text-decoration:none; font-size:12px;} +.menu a.top:visited {font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; font-weight:bold; color:#FFFFFF; text-decoration:none; font-size:12px;} +.menu a.top:hover {font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; font-weight:bold; color: #00CCFF; text-decoration:none; font-size:12px;} +.menu a.top:active {font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; font-weight:bold; color:#FFFFFF; text-decoration:none; font-size:12px;} + +.menu .on a.top:link {font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; font-weight:bold; color:#00CCFF; text-decoration:none; font-size:12px;} +.menu .on a.top:visited {font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; font-weight:bold; color:#00CCFF; text-decoration:none; font-size:12px;} +.menu .on a.top:hover {font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; font-weight:bold; color: #00CCFF; text-decoration:none; font-size:12px;} +.menu .on a.top:active {font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; font-weight:bold; color:#00CCFF; text-decoration:none; font-size:12px;} + +.right_area {float:right; height:38px; margin:0; padding:0 8px 0 0; background:url(../../images/rte/civilappeal_topmn_bg11.jpg) right no-repeat;} +#sub {float:left; padding:10px 10px 10px 10px; /*overflow:hidden;*/width:180px; margin-right:30px;} +#sub .login {width:180px; height:70px; text-align:left; vertical-align:top; padding:5px 0 0 0; background:url(../../images/rte/civilappeal_login_bg.jpg) right no-repeat; margin-bottom:10px;} +#sub .login_en {width:180px; height:70px; text-align:left; vertical-align:top; padding:5px 0 0 0; background:url(../../images/rte/civilappeal_login_bg_en.jpg) right no-repeat; margin-bottom:10px;} +#sub .sub_menu {width:150px; height:300px; text-align:left; vertical-align:top; background:url(../../images/rte/civilappeal_leftmenu_bg.jpg) 0 0 no-repeat; padding-top:40px; padding-left:15px; padding-right:15px; padding-bottom:0px;} +#sub .sub_menu dl {width:150px;} +#sub .sub_menu dd {font-weight:bold; padding-left:0px; padding-right:0px; padding-bottom:0px; padding-top:10px; margin:0;} +#sub .sub_menu dt {list-style:none; padding-left:0px; padding-right:0px; padding-bottom:0px; padding-top:8px; margin:0px;} +#sub .sub_menu_en {width:150px; height:300px; text-align:left; vertical-align:top; background:url(../../images/rte/civilappeal_leftmenu_bg_en.jpg) 0 0 no-repeat; padding-top:40px; padding-left:15px; padding-right:15px; padding-bottom:0px;} +#sub .sub_menu_en dl {width:150px;} +#sub .sub_menu_en dd {font-weight:bold; padding-left:0px; padding-right:0px; padding-bottom:0px; padding-top:10px; margin:0;} +#sub .sub_menu_en dt {list-style:none; padding-left:0px; padding-right:0px; padding-bottom:0px; padding-top:8px; margin:0px;} +#content {/*float:left; text-align:left;overflow:hidden;width:880px; background-color:#FFFFFF; padding:10px 0px 10px 0px;*/} +#content_pop {/*float:left; text-align:left; overflow:hidden;width:880px; background-color:#FFFFFF; padding:10px 10px 10px 10px;*/} +/*#title {text-align:left; margin:0 0 10 0; padding:0; height:30px; border-bottom:1px solid #e5e5e5; width:880px;}*/ +/*#title ul {float:left; margin:0; padding:0;} +#title li {list-style-type:none; width:880px; padding:3px 0px 2px 0px; float:left; font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; font-size:16px; font-weight:bold; color:#000000;}*/ +#title .location {float:right; height:20px; margin:0; padding:5 0 0 0; font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; font-size:11px;} +#foot {margin:0; padding:0 0 0 0; text-align:left; /*overflow:hidden;*/ height:40px; clear:both; background-color:#F7F7F7; border-top:1px solid #e5e5e5; font-family:Tahoma; font-size:11px; color:#999999;} +/*#search {float:right; margin:0; padding:10px 0 10px 0; width:880px;}* +#search ul {margin:0; float:right;} +#search li {list-style-type:none; float:left; margin:0 0 0 0; padding:0 0 0 3px;} +/*#table {margin:0 0 10px 0; padding:0 0 0 0; width:880px;}*/ +/*.table {margin:0 0 10px 0; padding:0 0 0 0; width:880px;}*/ +#paging {padding:0 0 0 0; text-align:center; width:880px;} +#paging ul {display:inline;} +#paging li {display:inline; list-style-type:none; padding:0 10px 0 10px; font-family: Tahoma; font-size:11px; color: #333333;} +#paging li.pre10 {padding:0 2px 0 2px;} +#paging li.next1 {padding:0 2px 0 2px;} +#paging li.line {background:url(../../images/rte/paging_line.gif) 0 2px no-repeat;} +#paging li.first {padding:0 5px 0 0;} +#paging li.last {background:url(../../images/rte/paging_line.gif) 0 2px no-repeat; padding:0 5px 0 0;} +#sysbtn {/*text-align:right; padding:0; margin:0;*/} +#sysbtn ul {/*margin:0; padding:0; float:left; display:inline;*/} +#sysbtn li {/*list-style-type:none; margin:0 auto; padding:0 0 0 3px; float:left; display:inline;*/} +.sysbtn {text-align:right; padding:0; margin:0;} +.sysbtn ul {margin:0; padding:0; float:left; display:inline;} +.sysbtn li {list-style-type:none; margin:0 auto; padding:0 0 0 3px; float:left; display:inline;} + +#sysbtn1 {text-align:left; padding-top:10px; padding-bottom:0px; margin-bottom:0px; width:880px;} +#sysbtn1 ul {margin:0; padding:0; float:left; display:inline;} +#sysbtn1 li {list-style-type:none; margin:0 0 0 0; padding:0 0 0 3px; float:left; display:inline;} +#idwrap {float:left; padding-top:0px; padding-bottom:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; margin-top:0px; padding-left:0px; padding-right:0px; } +#idwrap ul {float:left; padding:0; margin:0;} +#idwrap li {list-style-type:none; float:left; margin:0; padding-right:3px;} +button {cursor:hand; border:0px solid #FFFFFF; padding:0px 0px 0px 0px; background-color:#FFFFFF; white-space:nowrap;} +/*.btn_blue {float:none; background:url(../../images/rte/btn_bg_l.gif) 0 0 no-repeat; height:20px; padding:1px 0px 10px 10px; margin:0px 0px 0px 0px;}*/ +.btn_blue_l {float:left; background:url(../../images/rte/btn_bg_l.gif) 0 0 no-repeat; height:20px; padding:0px 0px 0px 10px; margin:0px 0px 0px 0px;} +.btn_blue_r {float:left; background:url(../../images/rte/btn_bg_r.gif) 0 0 no-repeat; background-position:right; height:20px; font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; font-size:11px; color:#000000; margin:0px 0px 0px 0px; padding-top:0px; _padding-top:0px; padding-left:10px; padding-right:10px; padding-bottom:0px; text-align:center;} +/*input { height:20px; font-family:"占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲"; font-size:12px; color:#000000; padding:2px 2px 0px 2px; margin-top:0px; _margin-top:-1px;}*/ +select {font-family:'占쎈쐻占쎈짗占쎌굲占쎈쐻占쎈짗占쎌굲'; font-size:12px; margin-top:0px; height:20px; padding-top:0px;} +.tb {width:100%; bordercolor:#D3E2EC; bordercolordark:#FFFFFF; BORDER-TOP:#C2D0DB 2px solid; BORDER-LEFT:#ffffff 1px solid; BORDER-RIGHT:#ffffff 1px solid; BORDER-BOTTOM:#C2D0DB 1px solid; border-collapse: collapse;} + +/*input.txt {height:18px; background-color:#FFF; border:1px solid #BCC8D8; padding-top:2px; color:#5e5e5e; cursor:text;}*/ +input.essentiality {height:18px; background-color:#ebebeb; border:1px solid #BCC8D8; padding-top:2px; color:#000; cursor:text;} + +/* Layout */ +#wrap{margin-left:0px;width:100%;background: url("../../images/body/background_sky.jpg") no-repeat 0 0;height:59px;} +/*#footer{clear:both;width:100%;font-size:100%;border-top:2px solid #dddddd;}*/ +#header{/*padding-top:5px;*/} +#leftmenu{display:none; z-index: 1000; margin-top: 100px; position:absolute; width:200px;min-height:440px; height:auto !important; height:100%; } +/*#container{float:left;width:1100px; margin-top:0px;min-height:440px; height:auto !important; height:440px;}*/ +#mopaslogo{float:left;padding-top:10px;padding-left:10px;} +#copyright{float:left;font-size:90%;padding-top:20px;padding-left:20px; letter-spacing: -1px;} +#logoarea{float:left;padding-left:10px;} +#languagearea{width:890px;padding-top:20px} +#langImg{float:right;padding-left:10px;} +#project_title{float:left;padding-top:7px;padding-left:14px;font-size:130%;letter-spacing:-1px;} +#project_title .maintitle{color:#e68c0d;font-weight:bold;} +#LoginStatus fieldset{border:3px solid #C9E8F3;padding:5px;width:160px;margin-left:10px;margin-top:20px;height:40px;;display:inline;} +#LoginStatus ul li{padding-bottom:5px; list-style-type:none;} +#nav{margin-left:10px;margin-top:10px;margin-bottom:10px;background: url("../../images/leftmenu/leftmenu_repeat.gif") repeat-y scroll 0 0 transparent; margin-bottom: 10px;} +.navtop{ + background: url("../../images/leftmenu/leftmenu_top.gif") no-repeat scroll left top transparent; + padding: 0px 3px 3px 15px;height:10px;} +#nav ul{list-style-type:none;} +#nav a{} +#nav ul li{ + background: url("../../images/leftmenu/bl_depth01.gif") no-repeat 140px 8px; + border-top: 1px solid #EAEAEA; + padding: 4px 6px 1px;} +#nav ul li ul{border-top: 1px solid #EAEAEA;} +#nav ul li ul li { +background: url("../../images/leftmenu/snbmenu_board.gif") no-repeat scroll 0 11px transparent; +border: medium none; +font-size: 0.92em; +line-height: 1.27em; +margin: 0; background-color:#f2f2f2; +} +.nav_style{width:150px;padding-left:14px;} +.leftmenu_dept01{font-weight:bold;margin-top:10px;} + + +.dept02 a{font-weight:normal;} +.dept02 a:link { + color: #666666; + font-size: 11px; + letter-spacing: -1px; + line-height: 180%; + text-decoration: none; +} +.dept02 a:visited { + color: #666666; + font-size: 11px; + letter-spacing: -1px; + line-height: 180%; + text-decoration: none; +} + +.dept02 a:active { + color: blue; + font-size: 11px; + letter-spacing: -1px; + line-height: 180%; + text-decoration: none; +} +.dept02 a:hover { + color: blue; + font-family: "�뜝�럥利삣뜝�룞�삕"; + font-size: 11px; + letter-spacing: -1px; + line-height: 180%; + text-decoration: none; +} +.bottom{ + background: url("../../images/leftmenu/leftmenu_bottom.gif") no-repeat scroll left bottom transparent; + padding: 0px 3px 3px 15px;height:10px;} + +.tableBackImg{ + background: url("../../images/error/blue_bg.jpg") + } + +/* + 2016.09.30 + �뜝�럩肉ュ뜝�럡�돮亦껋꼻�삕 + - 嶺뚮∥��占쎈� 占쎈퉲�겫�룞�삕�뜝�럥�뱺 �뜝�럥�렊占쎈ご�뜝占� �뤆�룄�뫊占쎌끋�뜝�럥由� style �뜝�럩�쓤�뜝�럩�뮔 +*/ + +.header_menu ul{list-style-type: none;margin: 0; padding: 0;overflow: hidden;display: inline-block;} +.header_menu li{float:left;list-style:none;padding-left: 5px;} +.header_user{text-align:right;} +#menu1{text-align:right;} +.current{font-weight: bold;} + +.sub_menu{width:100%;height:20px;text-align:right;margin-bottom:10px;} +.sub_menu ul{list-style-type: none;margin: 0; padding: 0;overflow: hidden;display: inline-block;} +.sub_menu li{float:left;list-style:none;padding-left: 5px;} +.sub_menu li a {font-size:12px;} + + + +/* + 2016.10.27 + �뜝�럩肉ュ뜝�럡�돮亦껋꼻�삕 + - 嶺뚮∥��占쎈� 占쎈퉲�겫�룞�삕�뜝�럥�뱺 �뜝�럥�렊占쎈ご�뜝占� �뤆�룄�뫊占쎌끋�뜝�럥由� style �뜝�럩�쓤�뜝�럩�뮔 +*/ + +/* + .memberAdd td {border:1px #C8C8C8 solid; padding:1px;} +.memberAdd input, .memberAdd select {height:18px; background-color:#FFF; border:1px solid #BCC8D8; padding-top:2px; color:#5e5e5e; cursor:text;} +*/ +/* + 2016.11.17~22 + �뜝�럩肉ュ뜝�럡�돮亦껋꼻�삕 + - 嶺뚮∥��占쎈� 占쎈퉲�겫�룞�삕�뜝�럥�뱺 �뜝�럥�렊占쎈ご�뜝占� �뤆�룄�뫊占쎌끋�뜝�럥由� style �뜝�럩�쓤�뜝�럩�뮔 +*/ +/*#pwMenu table {width:400px;} +#pwMenu table td {border:1px #C8C8C8 solid; padding:1px;} +#pwMenu input {width:90%;height:18px; background-color:#FFF; border:1px solid #BCC8D8; padding-top:2px; color:#5e5e5e; cursor:text;} + +/*.placeList {margin-bottom: 15px;height:40px;} +.placeList ul {margin:0; padding:0; float:left;} +.placeList li {list-style-type:none; float:left; margin:0 0 0 0; padding:0 0 0 3px;border: 1px solid #000;padding: 1px;} +.memberList {text-align: center;} +.memberList td {padding:20px; width:200px;text-align: center;} +.memberList td .image img {border: 1px solid #000;} +.memberList ul {margin:0 auto; padding: 1px;width:200px;} +.memberList li {list-style-type:none; margin:0 0 0 0; padding:0 0 0 3px;} +.memberList .value {width:90px;display:inline-block;} +.memberList .key {width:50px;display:inline-block;text-align:right;font-weight: bold; padding-right: 3px;} +*/ + +/* + 2016.11.07 + 濚밸㉡�삕�뜝�럥嫄쀦쾬�꼻�삕 + - textarea �뼨轅명�∽옙沅� �뜝�럥裕욃뜝�룞�삕�뜝�럩逾� 嶺뚯쉻�삕�뜝�럩�젧 +*/ +textarea.ta {width:100%; min-height:100px;} + +/* + 2016.12.14 �뜝�럥由��뜝�럩寃ョ춯�쉻�삕 + td �뤆�룊�삕�뜝�럩�뮧�뜝�럥�몥 �뜝�럩�젧�뜝�럩議� +*/ +.tbtd_caption.txt_center {text-align: center;} +.tbtd_content.txt_center {text-align: center;} + +/* + 2016.12.14 �뜝�럥由��뜝�럩寃ョ춯�쉻�삕 + �뤆�룆踰∽옙占� �뜝�럡�돰�뜝�럡留� +*/ +.highlight { + background-color: #fe9; +} diff --git a/src/main/webapp/css/fonts/NanumGothic-Bold.eot b/src/main/webapp/css/fonts/NanumGothic-Bold.eot new file mode 100644 index 0000000..3cc7cf7 Binary files /dev/null and b/src/main/webapp/css/fonts/NanumGothic-Bold.eot differ diff --git a/src/main/webapp/css/fonts/NanumGothic-Bold.ttf b/src/main/webapp/css/fonts/NanumGothic-Bold.ttf new file mode 100644 index 0000000..c24b0e7 Binary files /dev/null and b/src/main/webapp/css/fonts/NanumGothic-Bold.ttf differ diff --git a/src/main/webapp/css/fonts/NanumGothic-Bold.woff b/src/main/webapp/css/fonts/NanumGothic-Bold.woff new file mode 100644 index 0000000..2dde3b8 Binary files /dev/null and b/src/main/webapp/css/fonts/NanumGothic-Bold.woff differ diff --git a/src/main/webapp/css/fonts/NanumGothic-Bold.woff2 b/src/main/webapp/css/fonts/NanumGothic-Bold.woff2 new file mode 100644 index 0000000..3a8ba51 Binary files /dev/null and b/src/main/webapp/css/fonts/NanumGothic-Bold.woff2 differ diff --git a/src/main/webapp/css/fonts/NanumGothic-ExtraBold.eot b/src/main/webapp/css/fonts/NanumGothic-ExtraBold.eot new file mode 100644 index 0000000..1e4a173 Binary files /dev/null and b/src/main/webapp/css/fonts/NanumGothic-ExtraBold.eot differ diff --git a/src/main/webapp/css/fonts/NanumGothic-ExtraBold.ttf b/src/main/webapp/css/fonts/NanumGothic-ExtraBold.ttf new file mode 100644 index 0000000..c85adc7 Binary files /dev/null and b/src/main/webapp/css/fonts/NanumGothic-ExtraBold.ttf differ diff --git a/src/main/webapp/css/fonts/NanumGothic-ExtraBold.woff b/src/main/webapp/css/fonts/NanumGothic-ExtraBold.woff new file mode 100644 index 0000000..72994aa Binary files /dev/null and b/src/main/webapp/css/fonts/NanumGothic-ExtraBold.woff differ diff --git a/src/main/webapp/css/fonts/NanumGothic-ExtraBold.woff2 b/src/main/webapp/css/fonts/NanumGothic-ExtraBold.woff2 new file mode 100644 index 0000000..ab15e47 Binary files /dev/null and b/src/main/webapp/css/fonts/NanumGothic-ExtraBold.woff2 differ diff --git a/src/main/webapp/css/fonts/NanumGothic-Regular.eot b/src/main/webapp/css/fonts/NanumGothic-Regular.eot new file mode 100644 index 0000000..7494146 Binary files /dev/null and b/src/main/webapp/css/fonts/NanumGothic-Regular.eot differ diff --git a/src/main/webapp/css/fonts/NanumGothic-Regular.ttf b/src/main/webapp/css/fonts/NanumGothic-Regular.ttf new file mode 100644 index 0000000..c14ce88 Binary files /dev/null and b/src/main/webapp/css/fonts/NanumGothic-Regular.ttf differ diff --git a/src/main/webapp/css/fonts/NanumGothic-Regular.woff b/src/main/webapp/css/fonts/NanumGothic-Regular.woff new file mode 100644 index 0000000..eebb7bc Binary files /dev/null and b/src/main/webapp/css/fonts/NanumGothic-Regular.woff differ diff --git a/src/main/webapp/css/fonts/NanumGothic-Regular.woff2 b/src/main/webapp/css/fonts/NanumGothic-Regular.woff2 new file mode 100644 index 0000000..4499032 Binary files /dev/null and b/src/main/webapp/css/fonts/NanumGothic-Regular.woff2 differ diff --git a/src/main/webapp/css/lib/images/ui-icons_444444_256x240.png b/src/main/webapp/css/lib/images/ui-icons_444444_256x240.png new file mode 100644 index 0000000..19f664d Binary files /dev/null and b/src/main/webapp/css/lib/images/ui-icons_444444_256x240.png differ diff --git a/src/main/webapp/css/lib/images/ui-icons_555555_256x240.png b/src/main/webapp/css/lib/images/ui-icons_555555_256x240.png new file mode 100644 index 0000000..e965f6d Binary files /dev/null and b/src/main/webapp/css/lib/images/ui-icons_555555_256x240.png differ diff --git a/src/main/webapp/css/lib/images/ui-icons_777620_256x240.png b/src/main/webapp/css/lib/images/ui-icons_777620_256x240.png new file mode 100644 index 0000000..9785948 Binary files /dev/null and b/src/main/webapp/css/lib/images/ui-icons_777620_256x240.png differ diff --git a/src/main/webapp/css/lib/images/ui-icons_777777_256x240.png b/src/main/webapp/css/lib/images/ui-icons_777777_256x240.png new file mode 100644 index 0000000..323c456 Binary files /dev/null and b/src/main/webapp/css/lib/images/ui-icons_777777_256x240.png differ diff --git a/src/main/webapp/css/lib/images/ui-icons_cc0000_256x240.png b/src/main/webapp/css/lib/images/ui-icons_cc0000_256x240.png new file mode 100644 index 0000000..45ac778 Binary files /dev/null and b/src/main/webapp/css/lib/images/ui-icons_cc0000_256x240.png differ diff --git a/src/main/webapp/css/lib/images/ui-icons_ffffff_256x240.png b/src/main/webapp/css/lib/images/ui-icons_ffffff_256x240.png new file mode 100644 index 0000000..fe41d2d Binary files /dev/null and b/src/main/webapp/css/lib/images/ui-icons_ffffff_256x240.png differ diff --git a/src/main/webapp/css/lib/jquery-ui.css b/src/main/webapp/css/lib/jquery-ui.css new file mode 100644 index 0000000..c3cf4dc --- /dev/null +++ b/src/main/webapp/css/lib/jquery-ui.css @@ -0,0 +1,1313 @@ +/*! jQuery UI - v1.12.1 - 2016-10-23 +* http://jqueryui.com +* Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); /* support: IE8 */ +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; + pointer-events: none; +} + + +/* Icons +----------------------------------*/ +.ui-icon { + display: inline-block; + vertical-align: middle; + margin-top: -.25em; + position: relative; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + +.ui-widget-icon-block { + left: 50%; + margin-left: -8px; + display: block; +} + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + font-size: 100%; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: 0; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + cursor: pointer; + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} +.ui-menu .ui-menu-item-wrapper { + position: relative; + padding: 3px 1em 3px .4em; +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item-wrapper { + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} +.ui-button { + padding: .4em 1em; + display: inline-block; + position: relative; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + /* Support: IE <= 11 */ + overflow: visible; +} + +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} + +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2em; + box-sizing: border-box; + text-indent: -9999px; + white-space: nowrap; +} + +/* no icon support for input elements */ +input.ui-button.ui-button-icon-only { + text-indent: 0; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon { + position: absolute; + top: 50%; + left: 50%; + margin-top: -8px; + margin-left: -8px; +} + +.ui-button.ui-icon-notext .ui-icon { + padding: 0; + width: 2.1em; + height: 2.1em; + text-indent: -9999px; + white-space: nowrap; + +} + +input.ui-button.ui-icon-notext .ui-icon { + width: auto; + height: auto; + text-indent: 0; + white-space: normal; + padding: .4em 1em; +} + +/* workarounds */ +/* Support: Firefox 5 - 40 */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-controlgroup { + vertical-align: middle; + display: inline-block; +} +.ui-controlgroup > .ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; +} +.ui-controlgroup > .ui-controlgroup-item:focus, +.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { + z-index: 9999; +} +.ui-controlgroup-vertical > .ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; +} +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; +} +.ui-controlgroup .ui-controlgroup-label { + padding: .4em 1em; +} +.ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; +} +.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { + border-left: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { + border-top: none; +} +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; +} + +/* Spinner specific style fixes */ +.ui-controlgroup-vertical .ui-spinner-input { + + /* Support: IE8 only, Android < 4.4 only */ + width: 75%; + width: calc( 100% - 2.4em ); +} +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; +} + +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: .12em; + border: none; +} +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-disabled { + pointer-events: none; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + +/* Icons */ +.ui-datepicker .ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + left: .5em; + top: .3em; +} +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; + background-color: #29559f; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-n { + height: 2px; + top: 0; +} +.ui-dialog .ui-resizable-e { + width: 2px; + right: 0; +} +.ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; +} +.ui-dialog .ui-resizable-w { + width: 2px; + left: 0; +} +.ui-dialog .ui-resizable-se, +.ui-dialog .ui-resizable-sw, +.ui-dialog .ui-resizable-ne, +.ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; +} +.ui-dialog .ui-resizable-se { + right: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-sw { + left: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-ne { + right: 0; + top: 0; +} +.ui-dialog .ui-resizable-nw { + left: 0; + top: 0; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: .222em 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 2em; +} +.ui-spinner-button { + width: 1.6em; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top-style: none; + border-bottom-style: none; + border-right-style: none; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; +} +.ui-widget.ui-widget-content { + border: 1px solid #c5c5c5; +} +.ui-widget-content { + border: 1px solid #dddddd; + background: #ffffff; + color: #333333; +} +.ui-widget-content a { + color: #333333; +} +.ui-widget-header { + border: 1px solid #dddddd; + background: #e9e9e9; + color: #333333; + font-weight: bold; +} +.ui-widget-header a { + color: #333333; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default, +.ui-button, + +/* We use html here because we need a greater specificity to make sure disabled +works properly when clicked or hovered */ +html .ui-button.ui-state-disabled:hover, +html .ui-button.ui-state-disabled:active { + border: 1px solid #c5c5c5; + background: #f6f6f6; + font-weight: normal; + color: #454545; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited, +a.ui-button, +a:link.ui-button, +a:visited.ui-button, +.ui-button { + color: #454545; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus, +.ui-button:hover, +.ui-button:focus { + border: 1px solid #cccccc; + background: #ededed; + font-weight: normal; + color: #2b2b2b; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited, +a.ui-button:hover, +a.ui-button:focus { + color: #2b2b2b; + text-decoration: none; +} + +.ui-visual-focus { + box-shadow: 0 0 3px 1px rgb(94, 158, 214); +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + border: 1px solid #003eff; + background: #007fff; + font-weight: normal; + color: #ffffff; +} +.ui-icon-background, +.ui-state-active .ui-icon-background { + border: #003eff; + background-color: #ffffff; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #ffffff; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #dad55e; + background: #fffa90; + color: #777620; +} +.ui-state-checked { + border: 1px solid #dad55e; + background: #fffa90; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #777620; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #f1a899; + background: #fddfdf; + color: #5f3f3f; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #5f3f3f; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #5f3f3f; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon, +.ui-button:hover .ui-icon, +.ui-button:focus .ui-icon { + background-image: url("images/ui-icons_555555_256x240.png"); +} +.ui-state-active .ui-icon, +.ui-button:active .ui-icon { + background-image: url("images/ui-icons_ffffff_256x240.png"); +} +.ui-state-highlight .ui-icon, +.ui-button .ui-state-highlight.ui-icon { + background-image: url("images/ui-icons_777620_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cc0000_256x240.png"); +} +.ui-button .ui-icon { + background-image: url("images/ui-icons_777777_256x240.png"); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-caret-1-n { background-position: 0 0; } +.ui-icon-caret-1-ne { background-position: -16px 0; } +.ui-icon-caret-1-e { background-position: -32px 0; } +.ui-icon-caret-1-se { background-position: -48px 0; } +.ui-icon-caret-1-s { background-position: -65px 0; } +.ui-icon-caret-1-sw { background-position: -80px 0; } +.ui-icon-caret-1-w { background-position: -96px 0; } +.ui-icon-caret-1-nw { background-position: -112px 0; } +.ui-icon-caret-2-n-s { background-position: -128px 0; } +.ui-icon-caret-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -65px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -65px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 1px -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 3px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 3px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 3px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 3px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ +} +.ui-widget-shadow { + -webkit-box-shadow: 0px 0px 5px #666666; + box-shadow: 0px 0px 5px #666666; +} diff --git a/src/main/webapp/css/lib/jquery.datetimepicker.css b/src/main/webapp/css/lib/jquery.datetimepicker.css new file mode 100644 index 0000000..4ed981a --- /dev/null +++ b/src/main/webapp/css/lib/jquery.datetimepicker.css @@ -0,0 +1,568 @@ +.xdsoft_datetimepicker { + box-shadow: 0 5px 15px -5px rgba(0, 0, 0, 0.506); + background: #fff; + border-bottom: 1px solid #bbb; + border-left: 1px solid #ccc; + border-right: 1px solid #ccc; + border-top: 1px solid #ccc; + color: #333; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 8px; + padding-left: 0; + padding-top: 2px; + position: absolute; + z-index: 9999; + -moz-box-sizing: border-box; + box-sizing: border-box; + display: none; +} +.xdsoft_datetimepicker.xdsoft_rtl { + padding: 8px 0 8px 8px; +} + +.xdsoft_datetimepicker iframe { + position: absolute; + left: 0; + top: 0; + width: 75px; + height: 210px; + background: transparent; + border: none; +} + +/*For IE8 or lower*/ +.xdsoft_datetimepicker button { + border: none !important; +} + +.xdsoft_noselect { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} + +.xdsoft_noselect::selection { background: transparent } +.xdsoft_noselect::-moz-selection { background: transparent } + +.xdsoft_datetimepicker.xdsoft_inline { + display: inline-block; + position: static; + box-shadow: none; +} + +.xdsoft_datetimepicker * { + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; + margin: 0; +} + +.xdsoft_datetimepicker .xdsoft_datepicker, .xdsoft_datetimepicker .xdsoft_timepicker { + display: none; +} + +.xdsoft_datetimepicker .xdsoft_datepicker.active, .xdsoft_datetimepicker .xdsoft_timepicker.active { + display: block; +} + +.xdsoft_datetimepicker .xdsoft_datepicker { + width: 224px; + float: left; + margin-left: 8px; +} +.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_datepicker { + float: right; + margin-right: 8px; + margin-left: 0; +} + +.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_datepicker { + width: 256px; +} + +.xdsoft_datetimepicker .xdsoft_timepicker { + width: 58px; + float: left; + text-align: center; + margin-left: 8px; + margin-top: 0; +} +.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker { + float: right; + margin-right: 8px; + margin-left: 0; +} + +.xdsoft_datetimepicker .xdsoft_datepicker.active+.xdsoft_timepicker { + margin-top: 8px; + margin-bottom: 3px +} + +.xdsoft_datetimepicker .xdsoft_monthpicker { + position: relative; + text-align: center; +} + +.xdsoft_datetimepicker .xdsoft_label i, +.xdsoft_datetimepicker .xdsoft_prev, +.xdsoft_datetimepicker .xdsoft_next, +.xdsoft_datetimepicker .xdsoft_today_button { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0NBRjI1NjM0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0NBRjI1NjQ0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDQ0FGMjU2MTQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDQ0FGMjU2MjQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoNEP54AAAIOSURBVHja7Jq9TsMwEMcxrZD4WpBYeKUCe+kTMCACHZh4BFfHO/AAIHZGFhYkBBsSEqxsLCAgXKhbXYOTxh9pfJVP+qutnZ5s/5Lz2Y5I03QhWji2GIcgAokWgfCxNvcOCCGKqiSqhUp0laHOne05vdEyGMfkdxJDVjgwDlEQgYQBgx+ULJaWSXXS6r/ER5FBVR8VfGftTKcITNs+a1XpcFoExREIDF14AVIFxgQUS+h520cdud6wNkC0UBw6BCO/HoCYwBhD8QCkQ/x1mwDyD4plh4D6DDV0TAGyo4HcawLIBBSLDkHeH0Mg2yVP3l4TQMZQDDsEOl/MgHQqhMNuE0D+oBh0CIr8MAKyazBH9WyBuKxDWgbXfjNf32TZ1KWm/Ap1oSk/R53UtQ5xTh3LUlMmT8gt6g51Q9p+SobxgJQ/qmsfZhWywGFSl0yBjCLJCMgXail3b7+rumdVJ2YRss4cN+r6qAHDkPWjPjdJCF4n9RmAD/V9A/Wp4NQassDjwlB6XBiCxcJQWmZZb8THFilfy/lfrTvLghq2TqTHrRMTKNJ0sIhdo15RT+RpyWwFdY96UZ/LdQKBGjcXpcc1AlSFEfLmouD+1knuxBDUVrvOBmoOC/rEcN7OQxKVeJTCiAdUzUJhA2Oez9QTkp72OTVcxDcXY8iKNkxGAJXmJCOQwOa6dhyXsOa6XwEGAKdeb5ET3rQdAAAAAElFTkSuQmCC); +} + +.xdsoft_datetimepicker .xdsoft_label i { + opacity: 0.5; + background-position: -92px -19px; + display: inline-block; + width: 9px; + height: 20px; + vertical-align: middle; +} + +.xdsoft_datetimepicker .xdsoft_prev { + float: left; + background-position: -20px 0; +} +.xdsoft_datetimepicker .xdsoft_today_button { + float: left; + background-position: -70px 0; + margin-left: 5px; +} + +.xdsoft_datetimepicker .xdsoft_next { + float: right; + background-position: 0 0; +} + +.xdsoft_datetimepicker .xdsoft_next, +.xdsoft_datetimepicker .xdsoft_prev , +.xdsoft_datetimepicker .xdsoft_today_button { + background-color: transparent; + background-repeat: no-repeat; + border: 0 none; + cursor: pointer; + display: block; + height: 30px; + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + outline: medium none; + overflow: hidden; + padding: 0; + position: relative; + text-indent: 100%; + white-space: nowrap; + width: 20px; + min-width: 0; +} + +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_next { + float: none; + background-position: -40px -15px; + height: 15px; + width: 30px; + display: block; + margin-left: 14px; + margin-top: 7px; +} +.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker .xdsoft_prev, +.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker .xdsoft_next { + float: none; + margin-left: 0; + margin-right: 14px; +} + +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev { + background-position: -40px 0; + margin-bottom: 7px; + margin-top: 0; +} + +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box { + height: 151px; + overflow: hidden; + border-bottom: 1px solid #ddd; +} + +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div { + background: #f5f5f5; + border-top: 1px solid #ddd; + color: #666; + font-size: 12px; + text-align: center; + border-collapse: collapse; + cursor: pointer; + border-bottom-width: 0; + height: 25px; + line-height: 25px; +} + +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div > div:first-child { + border-top-width: 0; +} + +.xdsoft_datetimepicker .xdsoft_today_button:hover, +.xdsoft_datetimepicker .xdsoft_next:hover, +.xdsoft_datetimepicker .xdsoft_prev:hover { + opacity: 1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; +} + +.xdsoft_datetimepicker .xdsoft_label { + display: inline; + position: relative; + z-index: 9999; + margin: 0; + padding: 5px 3px; + font-size: 14px; + line-height: 20px; + font-weight: bold; + background-color: #fff; + float: left; + width: 182px; + text-align: center; + cursor: pointer; +} + +.xdsoft_datetimepicker .xdsoft_label:hover>span { + text-decoration: underline; +} + +.xdsoft_datetimepicker .xdsoft_label:hover i { + opacity: 1.0; +} + +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select { + border: 1px solid #ccc; + position: absolute; + right: 0; + top: 30px; + z-index: 101; + display: none; + background: #fff; + max-height: 160px; + overflow-y: hidden; +} + +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_monthselect{ right: -7px } +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_yearselect{ right: 2px } +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover { + color: #fff; + background: #ff8000; +} + +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option { + padding: 2px 10px 2px 5px; + text-decoration: none !important; +} + +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current { + background: #33aaff; + box-shadow: #178fe5 0 1px 3px 0 inset; + color: #fff; + font-weight: 700; +} + +.xdsoft_datetimepicker .xdsoft_month { + width: 100px; + text-align: right; +} + +.xdsoft_datetimepicker .xdsoft_calendar { + clear: both; +} + +.xdsoft_datetimepicker .xdsoft_year{ + width: 48px; + margin-left: 5px; +} + +.xdsoft_datetimepicker .xdsoft_calendar table { + border-collapse: collapse; + width: 100%; + +} + +.xdsoft_datetimepicker .xdsoft_calendar td > div { + padding-right: 5px; +} + +.xdsoft_datetimepicker .xdsoft_calendar th { + height: 25px; +} + +.xdsoft_datetimepicker .xdsoft_calendar td,.xdsoft_datetimepicker .xdsoft_calendar th { + width: 14.2857142%; + background: #f5f5f5; + border: 1px solid #ddd; + color: #666; + font-size: 12px; + text-align: right; + vertical-align: middle; + padding: 0; + border-collapse: collapse; + cursor: pointer; + height: 25px; +} +.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar td,.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar th { + width: 12.5%; +} + +.xdsoft_datetimepicker .xdsoft_calendar th { + background: #f1f1f1; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today { + color: #33aaff; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_highlighted_default { + background: #ffe9d2; + box-shadow: #ffb871 0 1px 4px 0 inset; + color: #000; +} +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_highlighted_mint { + background: #c1ffc9; + box-shadow: #00dd1c 0 1px 4px 0 inset; + color: #000; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default, +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current { + background: #33aaff; + box-shadow: #178fe5 0 1px 3px 0 inset; + color: #fff; + font-weight: 700; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month, +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled, +.xdsoft_datetimepicker .xdsoft_time_box >div >div.xdsoft_disabled { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + cursor: default; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled { + opacity: 0.2; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)"; +} + +.xdsoft_datetimepicker .xdsoft_calendar td:hover, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div:hover { + color: #fff !important; + background: #ff8000 !important; + box-shadow: none !important; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current.xdsoft_disabled:hover, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div.xdsoft_current.xdsoft_disabled:hover { + background: #33aaff !important; + box-shadow: #178fe5 0 1px 3px 0 inset !important; + color: #fff !important; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled:hover, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_disabled:hover { + color: inherit !important; + background: inherit !important; + box-shadow: inherit !important; +} + +.xdsoft_datetimepicker .xdsoft_calendar th { + font-weight: 700; + text-align: center; + color: #999; + cursor: default; +} + +.xdsoft_datetimepicker .xdsoft_copyright { + color: #ccc !important; + font-size: 10px; + clear: both; + float: none; + margin-left: 8px; +} + +.xdsoft_datetimepicker .xdsoft_copyright a { color: #eee !important } +.xdsoft_datetimepicker .xdsoft_copyright a:hover { color: #aaa !important } + +.xdsoft_time_box { + position: relative; + border: 1px solid #ccc; +} +.xdsoft_scrollbar >.xdsoft_scroller { + background: #ccc !important; + height: 20px; + border-radius: 3px; +} +.xdsoft_scrollbar { + position: absolute; + width: 7px; + right: 0; + top: 0; + bottom: 0; + cursor: pointer; +} +.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_scrollbar { + left: 0; + right: auto; +} +.xdsoft_scroller_box { + position: relative; +} + +.xdsoft_datetimepicker.xdsoft_dark { + box-shadow: 0 5px 15px -5px rgba(255, 255, 255, 0.506); + background: #000; + border-bottom: 1px solid #444; + border-left: 1px solid #333; + border-right: 1px solid #333; + border-top: 1px solid #333; + color: #ccc; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box { + border-bottom: 1px solid #222; +} +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div { + background: #0a0a0a; + border-top: 1px solid #222; + color: #999; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label { + background-color: #000; +} +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select { + border: 1px solid #333; + background: #000; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover { + color: #000; + background: #007fff; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current { + background: #cc5500; + box-shadow: #b03e00 0 1px 3px 0 inset; + color: #000; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label i, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_prev, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_next, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_today_button { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUExQUUzOTA0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUExQUUzOTE0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQTFBRTM4RTQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQTFBRTM4RjQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pp0VxGEAAAIASURBVHja7JrNSgMxEMebtgh+3MSLr1T1Xn2CHoSKB08+QmR8Bx9A8e7RixdB9CKCoNdexIugxFlJa7rNZneTbLIpM/CnNLsdMvNjM8l0mRCiQ9Ye61IKCAgZAUnH+mU3MMZaHYChBnJUDzWOFZdVfc5+ZFLbrWDeXPwbxIqrLLfaeS0hEBVGIRQCEiZoHQwtlGSByCCdYBl8g8egTTAWoKQMRBRBcZxYlhzhKegqMOageErsCHVkk3hXIFooDgHB1KkHIHVgzKB4ADJQ/A1jAFmAYhkQqA5TOBtocrKrgXwQA8gcFIuAIO8sQSA7hidvPwaQGZSaAYHOUWJABhWWw2EMIH9QagQERU4SArJXo0ZZL18uvaxejXt/Em8xjVBXmvFr1KVm/AJ10tRe2XnraNqaJvKE3KHuUbfK1E+VHB0q40/y3sdQSxY4FHWeKJCunP8UyDdqJZenT3ntVV5jIYCAh20vT7ioP8tpf6E2lfEMwERe+whV1MHjwZB7PBiCxcGQWwKZKD62lfGNnP/1poFAA60T7rF1UgcKd2id3KDeUS+oLWV8DfWAepOfq00CgQabi9zjcgJVYVD7PVzQUAUGAQkbNJTBICDhgwYTjDYD6XeW08ZKh+A4pYkzenOxXUbvZcWz7E8ykRMnIHGX1XPl+1m2vPYpL+2qdb8CDAARlKFEz/ZVkAAAAABJRU5ErkJggg==); +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th { + background: #0a0a0a; + border: 1px solid #222; + color: #999; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th { + background: #0e0e0e; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_today { + color: #cc5500; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_highlighted_default { + background: #ffe9d2; + box-shadow: #ffb871 0 1px 4px 0 inset; + color:#000; +} +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_highlighted_mint { + background: #c1ffc9; + box-shadow: #00dd1c 0 1px 4px 0 inset; + color:#000; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_default, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_current, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current { + background: #cc5500; + box-shadow: #b03e00 0 1px 3px 0 inset; + color: #000; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td:hover, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div:hover { + color: #000 !important; + background: #007fff !important; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th { + color: #666; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright { color: #333 !important } +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a { color: #111 !important } +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a:hover { color: #555 !important } + +.xdsoft_dark .xdsoft_time_box { + border: 1px solid #333; +} + +.xdsoft_dark .xdsoft_scrollbar >.xdsoft_scroller { + background: #333 !important; +} +.xdsoft_datetimepicker .xdsoft_save_selected { + display: block; + border: 1px solid #dddddd !important; + margin-top: 5px; + width: 100%; + color: #454551; + font-size: 13px; +} +.xdsoft_datetimepicker .blue-gradient-button { + font-family: "museo-sans", "Book Antiqua", sans-serif; + font-size: 12px; + font-weight: 300; + color: #82878c; + height: 28px; + position: relative; + padding: 4px 17px 4px 33px; + border: 1px solid #d7d8da; + background: -moz-linear-gradient(top, #fff 0%, #f4f8fa 73%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(73%, #f4f8fa)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #fff 0%, #f4f8fa 73%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #fff 0%, #f4f8fa 73%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #fff 0%, #f4f8fa 73%); + /* IE10+ */ + background: linear-gradient(to bottom, #fff 0%, #f4f8fa 73%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff', endColorstr='#f4f8fa',GradientType=0 ); +/* IE6-9 */ +} +.xdsoft_datetimepicker .blue-gradient-button:hover, .xdsoft_datetimepicker .blue-gradient-button:focus, .xdsoft_datetimepicker .blue-gradient-button:hover span, .xdsoft_datetimepicker .blue-gradient-button:focus span { + color: #454551; + background: -moz-linear-gradient(top, #f4f8fa 0%, #FFF 73%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f4f8fa), color-stop(73%, #FFF)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #f4f8fa 0%, #FFF 73%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #f4f8fa 0%, #FFF 73%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #f4f8fa 0%, #FFF 73%); + /* IE10+ */ + background: linear-gradient(to bottom, #f4f8fa 0%, #FFF 73%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4f8fa', endColorstr='#FFF',GradientType=0 ); + /* IE6-9 */ +} diff --git a/src/main/webapp/css/lib/jquery.datetimepicker.full.min.js b/src/main/webapp/css/lib/jquery.datetimepicker.full.min.js new file mode 100644 index 0000000..a55d541 --- /dev/null +++ b/src/main/webapp/css/lib/jquery.datetimepicker.full.min.js @@ -0,0 +1,2 @@ +var DateFormatter;!function(){"use strict";var e,t,a,r,n,o;n=864e5,o=3600,e=function(e,t){return"string"==typeof e&&"string"==typeof t&&e.toLowerCase()===t.toLowerCase()},t=function(e,a,r){var n=r||"0",o=e.toString();return o.lengths?"20":"19")+i):4===f&&(y.year=s),h=!0;break;case"m":case"n":case"M":case"F":isNaN(i)?(d=p.monthsShort.indexOf(i),d>-1&&(y.month=d+1),d=p.months.indexOf(i),d>-1&&(y.month=d+1)):s>=1&&12>=s&&(y.month=s),h=!0;break;case"d":case"j":s>=1&&31>=s&&(y.day=s),h=!0;break;case"g":case"h":u=r.indexOf("a")>-1?r.indexOf("a"):r.indexOf("A")>-1?r.indexOf("A"):-1,c=n[u],u>-1?(l=e(c,p.meridiem[0])?0:e(c,p.meridiem[1])?12:-1,s>=1&&12>=s&&l>-1?y.hour=s+l:s>=0&&23>=s&&(y.hour=s)):s>=0&&23>=s&&(y.hour=s),g=!0;break;case"G":case"H":s>=0&&23>=s&&(y.hour=s),g=!0;break;case"i":s>=0&&59>=s&&(y.min=s),g=!0;break;case"s":s>=0&&59>=s&&(y.sec=s),g=!0}if(h===!0&&y.year&&y.month&&y.day)y.date=new Date(y.year,y.month-1,y.day,y.hour,y.min,y.sec,0);else{if(g!==!0)return!1;y.date=new Date(0,0,0,y.hour,y.min,y.sec,0)}return y.date},guessDate:function(e,t){if("string"!=typeof e)return e;var a,r,n,o,i=this,s=e.replace(i.separators,"\x00").split("\x00"),d=/^[djmn]/g,u=t.match(i.validParts),l=new Date,f=0;if(!d.test(u[0]))return e;for(r=0;r0&&s.splice(r+1,0,n.substr(f))}return l},parseFormat:function(e,a){var r,i=this,s=i.dateSettings,d=/\\?(.?)/gi,u=function(e,t){return r[e]?r[e]():t};return r={d:function(){return t(r.j(),2)},D:function(){return s.daysShort[r.w()]},j:function(){return a.getDate()},l:function(){return s.days[r.w()]},N:function(){return r.w()||7},w:function(){return a.getDay()},z:function(){var e=new Date(r.Y(),r.n()-1,r.j()),t=new Date(r.Y(),0,1);return Math.round((e-t)/n)},W:function(){var e=new Date(r.Y(),r.n()-1,r.j()-r.N()+3),a=new Date(e.getFullYear(),0,4);return t(1+Math.round((e-a)/n/7),2)},F:function(){return s.months[a.getMonth()]},m:function(){return t(r.n(),2)},M:function(){return s.monthsShort[a.getMonth()]},n:function(){return a.getMonth()+1},t:function(){return new Date(r.Y(),r.n(),0).getDate()},L:function(){var e=r.Y();return e%4===0&&e%100!==0||e%400===0?1:0},o:function(){var e=r.n(),t=r.W(),a=r.Y();return a+(12===e&&9>t?1:1===e&&t>9?-1:0)},Y:function(){return a.getFullYear()},y:function(){return r.Y().toString().slice(-2)},a:function(){return r.A().toLowerCase()},A:function(){var e=r.G()<12?0:1;return s.meridiem[e]},B:function(){var e=a.getUTCHours()*o,r=60*a.getUTCMinutes(),n=a.getUTCSeconds();return t(Math.floor((e+r+n+o)/86.4)%1e3,3)},g:function(){return r.G()%12||12},G:function(){return a.getHours()},h:function(){return t(r.g(),2)},H:function(){return t(r.G(),2)},i:function(){return t(a.getMinutes(),2)},s:function(){return t(a.getSeconds(),2)},u:function(){return t(1e3*a.getMilliseconds(),6)},e:function(){var e=/\((.*)\)/.exec(String(a))[1];return e||"Coordinated Universal Time"},T:function(){var e=(String(a).match(i.tzParts)||[""]).pop().replace(i.tzClip,"");return e||"UTC"},I:function(){var e=new Date(r.Y(),0),t=Date.UTC(r.Y(),0),a=new Date(r.Y(),6),n=Date.UTC(r.Y(),6);return e-t!==a-n?1:0},O:function(){var e=a.getTimezoneOffset(),r=Math.abs(e);return(e>0?"-":"+")+t(100*Math.floor(r/60)+r%60,4)},P:function(){var e=r.O();return e.substr(0,3)+":"+e.substr(3,2)},Z:function(){return 60*-a.getTimezoneOffset()},c:function(){return"Y-m-d\\TH:i:sP".replace(d,u)},r:function(){return"D, d M Y H:i:s O".replace(d,u)},U:function(){return a.getTime()/1e3||0}},u(e,e)},formatDate:function(e,t){var a,r,n,o,i,s=this,d="";if("string"==typeof e&&(e=s.parseDate(e,t),e===!1))return!1;if(e instanceof Date){for(n=t.length,a=0;n>a;a++)i=t.charAt(a),"S"!==i&&(o=s.parseFormat(i,e),a!==n-1&&s.intParts.test(i)&&"S"===t.charAt(a+1)&&(r=parseInt(o),o+=s.dateSettings.ordinal(r)),d+=o);return d}return""}}}(),function(e){"function"==typeof define&&define.amd?define(["jquery","jquery-mousewheel"],e):"object"==typeof exports?module.exports=e:e(jQuery)}(function(e){"use strict";function t(e,t,a){this.date=e,this.desc=t,this.style=a}var a={i18n:{ar:{months:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],dayOfWeekShort:["ن","ث","ع","خ","ج","س","ح"],dayOfWeek:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت","الأحد"]},ro:{months:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],dayOfWeekShort:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],dayOfWeek:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"]},id:{months:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],dayOfWeekShort:["Min","Sen","Sel","Rab","Kam","Jum","Sab"],dayOfWeek:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"]},is:{months:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],dayOfWeekShort:["Sun","Mán","Þrið","Mið","Fim","Fös","Lau"],dayOfWeek:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"]},bg:{months:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],dayOfWeekShort:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],dayOfWeek:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"]},fa:{months:["فروردین","اردیبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند"],dayOfWeekShort:["یکشنبه","دوشنبه","سه شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayOfWeek:["یک‌شنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنج‌شنبه","جمعه","شنبه","یک‌شنبه"]},ru:{months:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],dayOfWeekShort:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],dayOfWeek:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"]},uk:{months:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],dayOfWeekShort:["Ндл","Пнд","Втр","Срд","Чтв","Птн","Сбт"],dayOfWeek:["Неділя","Понеділок","Вівторок","Середа","Четвер","П'ятниця","Субота"]},en:{months:["January","February","March","April","May","June","July","August","September","October","November","December"],dayOfWeekShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},el:{months:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],dayOfWeekShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayOfWeek:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"]},de:{months:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],dayOfWeekShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayOfWeek:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"]},nl:{months:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],dayOfWeekShort:["zo","ma","di","wo","do","vr","za"],dayOfWeek:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"]},tr:{months:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],dayOfWeekShort:["Paz","Pts","Sal","Çar","Per","Cum","Cts"],dayOfWeek:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"]},fr:{months:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],dayOfWeekShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],dayOfWeek:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"]},es:{months:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],dayOfWeekShort:["Dom","Lun","Mar","Mié","Jue","Vie","Sáb"],dayOfWeek:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"]},th:{months:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],dayOfWeekShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayOfWeek:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัส","ศุกร์","เสาร์","อาทิตย์"]},pl:{months:["styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień"],dayOfWeekShort:["nd","pn","wt","śr","cz","pt","sb"],dayOfWeek:["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"]},pt:{months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],dayOfWeekShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sab"],dayOfWeek:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"]},ch:{months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayOfWeekShort:["日","一","二","三","四","五","六"]},se:{months:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],dayOfWeekShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"]},kr:{months:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayOfWeekShort:["일","월","화","수","목","금","토"],dayOfWeek:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"]},it:{months:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],dayOfWeekShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayOfWeek:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"]},da:{months:["January","Februar","Marts","April","Maj","Juni","July","August","September","Oktober","November","December"],dayOfWeekShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayOfWeek:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"]},no:{months:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],dayOfWeekShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayOfWeek:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"]},ja:{months:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayOfWeekShort:["日","月","火","水","木","金","土"],dayOfWeek:["日曜","月曜","火曜","水曜","木曜","金曜","土曜"]},vi:{months:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayOfWeekShort:["CN","T2","T3","T4","T5","T6","T7"],dayOfWeek:["Chủ nhật","Thứ hai","Thứ ba","Thứ tư","Thứ năm","Thứ sáu","Thứ bảy"]},sl:{months:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],dayOfWeekShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayOfWeek:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"]},cs:{months:["Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Říjen","Listopad","Prosinec"],dayOfWeekShort:["Ne","Po","Út","St","Čt","Pá","So"]},hu:{months:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],dayOfWeekShort:["Va","Hé","Ke","Sze","Cs","Pé","Szo"],dayOfWeek:["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"]},az:{months:["Yanvar","Fevral","Mart","Aprel","May","Iyun","Iyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],dayOfWeekShort:["B","Be","Ça","Ç","Ca","C","Ş"],dayOfWeek:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"]},bs:{months:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],dayOfWeekShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayOfWeek:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"]},ca:{months:["Gener","Febrer","Març","Abril","Maig","Juny","Juliol","Agost","Setembre","Octubre","Novembre","Desembre"],dayOfWeekShort:["Dg","Dl","Dt","Dc","Dj","Dv","Ds"],dayOfWeek:["Diumenge","Dilluns","Dimarts","Dimecres","Dijous","Divendres","Dissabte"]},"en-GB":{months:["January","February","March","April","May","June","July","August","September","October","November","December"],dayOfWeekShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},et:{months:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],dayOfWeekShort:["P","E","T","K","N","R","L"],dayOfWeek:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"]},eu:{months:["Urtarrila","Otsaila","Martxoa","Apirila","Maiatza","Ekaina","Uztaila","Abuztua","Iraila","Urria","Azaroa","Abendua"],dayOfWeekShort:["Ig.","Al.","Ar.","Az.","Og.","Or.","La."],dayOfWeek:["Igandea","Astelehena","Asteartea","Asteazkena","Osteguna","Ostirala","Larunbata"]},fi:{months:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],dayOfWeekShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayOfWeek:["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"]},gl:{months:["Xan","Feb","Maz","Abr","Mai","Xun","Xul","Ago","Set","Out","Nov","Dec"],dayOfWeekShort:["Dom","Lun","Mar","Mer","Xov","Ven","Sab"],dayOfWeek:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"]},hr:{months:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],dayOfWeekShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayOfWeek:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"]},ko:{months:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayOfWeekShort:["일","월","화","수","목","금","토"],dayOfWeek:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"]},lt:{months:["Sausio","Vasario","Kovo","Balandžio","Gegužės","Birželio","Liepos","Rugpjūčio","Rugsėjo","Spalio","Lapkričio","Gruodžio"],dayOfWeekShort:["Sek","Pir","Ant","Tre","Ket","Pen","Šeš"],dayOfWeek:["Sekmadienis","Pirmadienis","Antradienis","Trečiadienis","Ketvirtadienis","Penktadienis","Šeštadienis"]},lv:{months:["Janvāris","Februāris","Marts","Aprīlis ","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],dayOfWeekShort:["Sv","Pr","Ot","Tr","Ct","Pk","St"],dayOfWeek:["Svētdiena","Pirmdiena","Otrdiena","Trešdiena","Ceturtdiena","Piektdiena","Sestdiena"]},mk:{months:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],dayOfWeekShort:["нед","пон","вто","сре","чет","пет","саб"],dayOfWeek:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"]},mn:{months:["1-р сар","2-р сар","3-р сар","4-р сар","5-р сар","6-р сар","7-р сар","8-р сар","9-р сар","10-р сар","11-р сар","12-р сар"],dayOfWeekShort:["Дав","Мяг","Лха","Пүр","Бсн","Бям","Ням"],dayOfWeek:["Даваа","Мягмар","Лхагва","Пүрэв","Баасан","Бямба","Ням"]},"pt-BR":{months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],dayOfWeekShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayOfWeek:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"]},sk:{months:["Január","Február","Marec","Apríl","Máj","Jún","Júl","August","September","Október","November","December"],dayOfWeekShort:["Ne","Po","Ut","St","Št","Pi","So"],dayOfWeek:["Nedeľa","Pondelok","Utorok","Streda","Štvrtok","Piatok","Sobota"]},sq:{months:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],dayOfWeekShort:["Die","Hën","Mar","Mër","Enj","Pre","Shtu"],dayOfWeek:["E Diel","E Hënë","E Martē","E Mërkurë","E Enjte","E Premte","E Shtunë"]},"sr-YU":{months:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],dayOfWeekShort:["Ned","Pon","Uto","Sre","čet","Pet","Sub"],dayOfWeek:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"]},sr:{months:["јануар","фебруар","март","април","мај","јун","јул","август","септембар","октобар","новембар","децембар"],dayOfWeekShort:["нед","пон","уто","сре","чет","пет","суб"],dayOfWeek:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"]},sv:{months:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],dayOfWeekShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayOfWeek:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"]},"zh-TW":{months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayOfWeekShort:["日","一","二","三","四","五","六"],dayOfWeek:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},zh:{months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayOfWeekShort:["日","一","二","三","四","五","六"],dayOfWeek:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},he:{months:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],dayOfWeekShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayOfWeek:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת","ראשון"]},hy:{months:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],dayOfWeekShort:["Կի","Երկ","Երք","Չոր","Հնգ","Ուրբ","Շբթ"],dayOfWeek:["Կիրակի","Երկուշաբթի","Երեքշաբթի","Չորեքշաբթի","Հինգշաբթի","Ուրբաթ","Շաբաթ"]},kg:{months:["Үчтүн айы","Бирдин айы","Жалган Куран","Чын Куран","Бугу","Кулжа","Теке","Баш Оона","Аяк Оона","Тогуздун айы","Жетинин айы","Бештин айы"],dayOfWeekShort:["Жек","Дүй","Шей","Шар","Бей","Жум","Ише"],dayOfWeek:["Жекшемб","Дүйшөмб","Шейшемб","Шаршемб","Бейшемби","Жума","Ишенб"]},rm:{months:["Schaner","Favrer","Mars","Avrigl","Matg","Zercladur","Fanadur","Avust","Settember","October","November","December"],dayOfWeekShort:["Du","Gli","Ma","Me","Gie","Ve","So"],dayOfWeek:["Dumengia","Glindesdi","Mardi","Mesemna","Gievgia","Venderdi","Sonda"]},ka:{months:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],dayOfWeekShort:["კვ","ორშ","სამშ","ოთხ","ხუთ","პარ","შაბ"],dayOfWeek:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"]}},value:"",rtl:!1,format:"Y/m/d H:i",formatTime:"H:i",formatDate:"Y/m/d",startDate:!1,step:60,monthChangeSpinner:!0,closeOnDateSelect:!1,closeOnTimeSelect:!0,closeOnWithoutClick:!0,closeOnInputClick:!0,timepicker:!0,datepicker:!0,weeks:!1,defaultTime:!1,defaultDate:!1,minDate:!1,maxDate:!1,minTime:!1,maxTime:!1,disabledMinTime:!1,disabledMaxTime:!1,allowTimes:[],opened:!1,initTime:!0,inline:!1,theme:"",onSelectDate:function(){},onSelectTime:function(){},onChangeMonth:function(){},onGetWeekOfYear:function(){},onChangeYear:function(){},onChangeDateTime:function(){},onShow:function(){},onClose:function(){},onGenerate:function(){},withoutCopyright:!0,inverseButton:!1,hours12:!1,next:"xdsoft_next",prev:"xdsoft_prev",dayOfWeekStart:0,parentID:"body",timeHeightInTimePicker:25,timepickerScrollbar:!0,todayButton:!0,prevButton:!0,nextButton:!0,defaultSelect:!0,scrollMonth:!0,scrollTime:!0,scrollInput:!0,lazyInit:!1,mask:!1,validateOnBlur:!0,allowBlank:!0,yearStart:1950,yearEnd:2050,monthStart:0,monthEnd:11,style:"",id:"",fixed:!1,roundTime:"round",className:"",weekends:[],highlightedDates:[],highlightedPeriods:[],allowDates:[],allowDateRe:null,disabledDates:[],disabledWeekDays:[],yearOffset:0,beforeShowDay:null,enterLikeTab:!0,showApplyButton:!1},r=null,n="en",o="en",i={meridiem:["AM","PM"]},s=function(){var t=a.i18n[o],n={days:t.dayOfWeek,daysShort:t.dayOfWeekShort,months:t.months,monthsShort:e.map(t.months,function(e){return e.substring(0,3)})};r=new DateFormatter({dateSettings:e.extend({},i,n)})};e.datetimepicker={setLocale:function(e){var t=a.i18n[e]?e:n;o!=t&&(o=t,s())},setDateFormatter:function(e){r=e},RFC_2822:"D, d M Y H:i:s O",ATOM:"Y-m-dTH:i:sP",ISO_8601:"Y-m-dTH:i:sO",RFC_822:"D, d M y H:i:s O",RFC_850:"l, d-M-y H:i:s T",RFC_1036:"D, d M y H:i:s O",RFC_1123:"D, d M Y H:i:s O",RSS:"D, d M Y H:i:s O",W3C:"Y-m-dTH:i:sP"},s(),window.getComputedStyle||(window.getComputedStyle=function(e){return this.el=e,this.getPropertyValue=function(t){var a=/(\-([a-z]){1})/g;return"float"===t&&(t="styleFloat"),a.test(t)&&(t=t.replace(a,function(e,t,a){return a.toUpperCase()})),e.currentStyle[t]||null},this}),Array.prototype.indexOf||(Array.prototype.indexOf=function(e,t){var a,r;for(a=t||0,r=this.length;r>a;a+=1)if(this[a]===e)return a;return-1}),Date.prototype.countDaysInMonth=function(){return new Date(this.getFullYear(),this.getMonth()+1,0).getDate()},e.fn.xdsoftScroller=function(t){return this.each(function(){var a,r,n,o,i,s=e(this),d=function(e){var t,a={x:0,y:0};return"touchstart"===e.type||"touchmove"===e.type||"touchend"===e.type||"touchcancel"===e.type?(t=e.originalEvent.touches[0]||e.originalEvent.changedTouches[0],a.x=t.clientX,a.y=t.clientY):("mousedown"===e.type||"mouseup"===e.type||"mousemove"===e.type||"mouseover"===e.type||"mouseout"===e.type||"mouseenter"===e.type||"mouseleave"===e.type)&&(a.x=e.clientX,a.y=e.clientY),a},u=100,l=!1,f=0,c=0,m=0,h=!1,g=0,p=function(){};return"hide"===t?void s.find(".xdsoft_scrollbar").hide():(e(this).hasClass("xdsoft_scroller_box")||(a=s.children().eq(0),r=s[0].clientHeight,n=a[0].offsetHeight,o=e('
'),i=e('
'),o.append(i),s.addClass("xdsoft_scroller_box").append(o),p=function(e){var t=d(e).y-f+g;0>t&&(t=0),t+i[0].offsetHeight>m&&(t=m-i[0].offsetHeight),s.trigger("scroll_element.xdsoft_scroller",[u?t/u:0])},i.on("touchstart.xdsoft_scroller mousedown.xdsoft_scroller",function(a){r||s.trigger("resize_scroll.xdsoft_scroller",[t]),f=d(a).y,g=parseInt(i.css("margin-top"),10),m=o[0].offsetHeight,"mousedown"===a.type||"touchstart"===a.type?(document&&e(document.body).addClass("xdsoft_noselect"),e([document.body,window]).on("touchend mouseup.xdsoft_scroller",function n(){e([document.body,window]).off("touchend mouseup.xdsoft_scroller",n).off("mousemove.xdsoft_scroller",p).removeClass("xdsoft_noselect")}),e(document.body).on("mousemove.xdsoft_scroller",p)):(h=!0,a.stopPropagation(),a.preventDefault())}).on("touchmove",function(e){h&&(e.preventDefault(),p(e))}).on("touchend touchcancel",function(){h=!1,g=0}),s.on("scroll_element.xdsoft_scroller",function(e,t){r||s.trigger("resize_scroll.xdsoft_scroller",[t,!0]),t=t>1?1:0>t||isNaN(t)?0:t,i.css("margin-top",u*t),setTimeout(function(){a.css("marginTop",-parseInt((a[0].offsetHeight-r)*t,10))},10)}).on("resize_scroll.xdsoft_scroller",function(e,t,d){var l,f;r=s[0].clientHeight,n=a[0].offsetHeight,l=r/n,f=l*o[0].offsetHeight,l>1?i.hide():(i.show(),i.css("height",parseInt(f>10?f:10,10)),u=o[0].offsetHeight-i[0].offsetHeight,d!==!0&&s.trigger("scroll_element.xdsoft_scroller",[t||Math.abs(parseInt(a.css("marginTop"),10))/(n-r)]))}),s.on("mousewheel",function(e){var t=Math.abs(parseInt(a.css("marginTop"),10));return t-=20*e.deltaY,0>t&&(t=0),s.trigger("scroll_element.xdsoft_scroller",[t/(n-r)]),e.stopPropagation(),!1}),s.on("touchstart",function(e){l=d(e),c=Math.abs(parseInt(a.css("marginTop"),10))}),s.on("touchmove",function(e){if(l){e.preventDefault();var t=d(e);s.trigger("scroll_element.xdsoft_scroller",[(c-(t.y-l.y))/(n-r)])}}),s.on("touchend touchcancel",function(){l=!1,c=0})),void s.trigger("resize_scroll.xdsoft_scroller",[t]))})},e.fn.datetimepicker=function(n,i){var s,d,u=this,l=48,f=57,c=96,m=105,h=17,g=46,p=13,y=27,v=8,b=37,D=38,k=39,x=40,T=9,S=116,w=65,O=67,M=86,_=90,W=89,F=!1,C=e.isPlainObject(n)||!n?e.extend(!0,{},a,n):e.extend(!0,{},a),P=0,A=function(e){e.on("open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart",function t(){e.is(":disabled")||e.data("xdsoft_datetimepicker")||(clearTimeout(P),P=setTimeout(function(){e.data("xdsoft_datetimepicker")||s(e),e.off("open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart",t).trigger("open.xdsoft")},100))})};return s=function(a){function i(){var e,t=!1;return C.startDate?t=j.strToDate(C.startDate):(t=C.value||(a&&a.val&&a.val()?a.val():""),t?t=j.strToDateTime(t):C.defaultDate&&(t=j.strToDateTime(C.defaultDate),C.defaultTime&&(e=j.strtotime(C.defaultTime),t.setHours(e.getHours()),t.setMinutes(e.getMinutes())))),t&&j.isValidDate(t)?J.data("changed",!0):t="",t||0}function s(t){var r=function(e,t){var a=e.replace(/([\[\]\/\{\}\(\)\-\.\+]{1})/g,"\\$1").replace(/_/g,"{digit+}").replace(/([0-9]{1})/g,"{digit$1}").replace(/\{digit([0-9]{1})\}/g,"[0-$1_]{1}").replace(/\{digit[\+]\}/g,"[0-9_]{1}");return new RegExp(a).test(t)},n=function(e){try{if(document.selection&&document.selection.createRange){var t=document.selection.createRange();return t.getBookmark().charCodeAt(2)-2}if(e.setSelectionRange)return e.selectionStart}catch(a){return 0}},o=function(e,t){if(e="string"==typeof e||e instanceof String?document.getElementById(e):e,!e)return!1;if(e.createTextRange){var a=e.createTextRange();return a.collapse(!0),a.moveEnd("character",t),a.moveStart("character",t),a.select(),!0}return e.setSelectionRange?(e.setSelectionRange(t,t),!0):!1};t.mask&&a.off("keydown.xdsoft"),t.mask===!0&&(t.mask="undefined"!=typeof moment?t.format.replace(/Y{4}/g,"9999").replace(/Y{2}/g,"99").replace(/M{2}/g,"19").replace(/D{2}/g,"39").replace(/H{2}/g,"29").replace(/m{2}/g,"59").replace(/s{2}/g,"59"):t.format.replace(/Y/g,"9999").replace(/F/g,"9999").replace(/m/g,"19").replace(/d/g,"39").replace(/H/g,"29").replace(/i/g,"59").replace(/s/g,"59")),"string"===e.type(t.mask)&&(r(t.mask,a.val())||(a.val(t.mask.replace(/[0-9]/g,"_")),o(a[0],0)),a.on("keydown.xdsoft",function(i){var s,d,u=this.value,C=i.which;if(C>=l&&f>=C||C>=c&&m>=C||C===v||C===g){for(s=n(this),d=C!==v&&C!==g?String.fromCharCode(C>=c&&m>=C?C-l:C):"_",C!==v&&C!==g||!s||(s-=1,d="_");/[^0-9_]/.test(t.mask.substr(s,1))&&s0;)s+=C===v||C===g?-1:1;if(u=u.substr(0,s)+d+u.substr(s+1),""===e.trim(u))u=t.mask.replace(/[0-9]/g,"_");else if(s===t.mask.length)return i.preventDefault(),!1;for(s+=C===v||C===g?0:1;/[^0-9_]/.test(t.mask.substr(s,1))&&s0;)s+=C===v||C===g?-1:1;r(t.mask,u)?(this.value=u,o(this,s)):""===e.trim(u)?this.value=t.mask.replace(/[0-9]/g,"_"):a.trigger("error_input.xdsoft")}else if(-1!==[w,O,M,_,W].indexOf(C)&&F||-1!==[y,D,x,b,k,S,h,T,p].indexOf(C))return!0;return i.preventDefault(),!1}))}var d,u,P,A,Y,j,H,J=e('
'),z=e(''),I=e('
'),N=e('
'),L=e('
'),E=e('
'),R=E.find(".xdsoft_time_box").eq(0),B=e('
'),V=e(''),G=e('
'),U=e('
'),q=!1,X=0;C.id&&J.attr("id",C.id),C.style&&J.attr("style",C.style),C.weeks&&J.addClass("xdsoft_showweeks"),C.rtl&&J.addClass("xdsoft_rtl"),J.addClass("xdsoft_"+C.theme),J.addClass(C.className),N.find(".xdsoft_month span").after(G),N.find(".xdsoft_year span").after(U),N.find(".xdsoft_month,.xdsoft_year").on("touchstart mousedown.xdsoft",function(t){var a,r,n=e(this).find(".xdsoft_select").eq(0),o=0,i=0,s=n.is(":visible");for(N.find(".xdsoft_select").hide(),j.currentTime&&(o=j.currentTime[e(this).hasClass("xdsoft_month")?"getMonth":"getFullYear"]()),n[s?"hide":"show"](),a=n.find("div.xdsoft_option"),r=0;r=i;)u=new t(i,d,c),l=r.formatDate(i,C.formatDate),i.setDate(i.getDate()+1),void 0!==o[l]?(f=o[l].desc,f&&f.length&&u.desc&&u.desc.length&&(o[l].desc=f+"\n"+u.desc)):o[l]=u}),C.highlightedDates=e.extend(!0,[],o)),n.disabledDates&&e.isArray(n.disabledDates)&&n.disabledDates.length&&(C.disabledDates=e.extend(!0,[],n.disabledDates)),n.disabledWeekDays&&e.isArray(n.disabledWeekDays)&&n.disabledWeekDays.length&&(C.disabledWeekDays=e.extend(!0,[],n.disabledWeekDays)),!C.open&&!C.opened||C.inline||a.trigger("open.xdsoft"),C.inline&&(q=!0,J.addClass("xdsoft_inline"),a.after(J).hide()),C.inverseButton&&(C.next="xdsoft_prev",C.prev="xdsoft_next"),C.datepicker?I.addClass("active"):I.removeClass("active"),C.timepicker?E.addClass("active"):E.removeClass("active"),C.value&&(j.setCurrentTime(C.value),a&&a.val&&a.val(j.str)),C.dayOfWeekStart=isNaN(C.dayOfWeekStart)?0:parseInt(C.dayOfWeekStart,10)%7,C.timepickerScrollbar||R.xdsoftScroller("hide"),C.minDate&&/^[\+\-](.*)$/.test(C.minDate)&&(C.minDate=r.formatDate(j.strToDateTime(C.minDate),C.formatDate)),C.maxDate&&/^[\+\-](.*)$/.test(C.maxDate)&&(C.maxDate=r.formatDate(j.strToDateTime(C.maxDate),C.formatDate)),V.toggle(C.showApplyButton),N.find(".xdsoft_today_button").css("visibility",C.todayButton?"visible":"hidden"),N.find("."+C.prev).css("visibility",C.prevButton?"visible":"hidden"),N.find("."+C.next).css("visibility",C.nextButton?"visible":"hidden"),s(C),C.validateOnBlur&&a.off("blur.xdsoft").on("blur.xdsoft",function(){if(C.allowBlank&&(!e.trim(e(this).val()).length||"string"==typeof C.mask&&e.trim(e(this).val())===C.mask.replace(/[0-9]/g,"_")))e(this).val(null),J.data("xdsoft_datetime").empty();else{var t=r.parseDate(e(this).val(),C.format);if(t)e(this).val(r.formatDate(t,C.format));else{var a=+[e(this).val()[0],e(this).val()[1]].join(""),n=+[e(this).val()[2],e(this).val()[3]].join("");e(this).val(!C.datepicker&&C.timepicker&&a>=0&&24>a&&n>=0&&60>n?[a,n].map(function(e){return e>9?e:"0"+e}).join(":"):r.formatDate(j.now(),C.format))}J.data("xdsoft_datetime").setCurrentTime(e(this).val())}J.trigger("changedatetime.xdsoft"),J.trigger("close.xdsoft")}),C.dayOfWeekStartPrev=0===C.dayOfWeekStart?6:C.dayOfWeekStart-1,J.trigger("xchange.xdsoft").trigger("afterOpen.xdsoft")},J.data("options",C).on("touchstart mousedown.xdsoft",function(e){return e.stopPropagation(),e.preventDefault(),U.hide(),G.hide(),!1}),R.append(B),R.xdsoftScroller(),J.on("afterOpen.xdsoft",function(){R.xdsoftScroller()}),J.append(I).append(E),C.withoutCopyright!==!0&&J.append(z),I.append(N).append(L).append(V),e(C.parentID).append(J),d=function(){var t=this;t.now=function(e){var a,r,n=new Date;return!e&&C.defaultDate&&(a=t.strToDateTime(C.defaultDate),n.setFullYear(a.getFullYear()),n.setMonth(a.getMonth()),n.setDate(a.getDate())),C.yearOffset&&n.setFullYear(n.getFullYear()+C.yearOffset),!e&&C.defaultTime&&(r=t.strtotime(C.defaultTime),n.setHours(r.getHours()),n.setMinutes(r.getMinutes())),n},t.isValidDate=function(e){return"[object Date]"!==Object.prototype.toString.call(e)?!1:!isNaN(e.getTime())},t.setCurrentTime=function(e,a){t.currentTime="string"==typeof e?t.strToDateTime(e):t.isValidDate(e)?e:e||a||!C.allowBlank?t.now():null,J.trigger("xchange.xdsoft")},t.empty=function(){t.currentTime=null},t.getCurrentTime=function(){return t.currentTime},t.nextMonth=function(){(void 0===t.currentTime||null===t.currentTime)&&(t.currentTime=t.now());var a,r=t.currentTime.getMonth()+1;return 12===r&&(t.currentTime.setFullYear(t.currentTime.getFullYear()+1),r=0),a=t.currentTime.getFullYear(),t.currentTime.setDate(Math.min(new Date(t.currentTime.getFullYear(),r+1,0).getDate(),t.currentTime.getDate())),t.currentTime.setMonth(r),C.onChangeMonth&&e.isFunction(C.onChangeMonth)&&C.onChangeMonth.call(J,j.currentTime,J.data("input")),a!==t.currentTime.getFullYear()&&e.isFunction(C.onChangeYear)&&C.onChangeYear.call(J,j.currentTime,J.data("input")),J.trigger("xchange.xdsoft"),r},t.prevMonth=function(){(void 0===t.currentTime||null===t.currentTime)&&(t.currentTime=t.now());var a=t.currentTime.getMonth()-1;return-1===a&&(t.currentTime.setFullYear(t.currentTime.getFullYear()-1),a=11),t.currentTime.setDate(Math.min(new Date(t.currentTime.getFullYear(),a+1,0).getDate(),t.currentTime.getDate())),t.currentTime.setMonth(a),C.onChangeMonth&&e.isFunction(C.onChangeMonth)&&C.onChangeMonth.call(J,j.currentTime,J.data("input")),J.trigger("xchange.xdsoft"),a},t.getWeekOfYear=function(t){if(C.onGetWeekOfYear&&e.isFunction(C.onGetWeekOfYear)){var a=C.onGetWeekOfYear.call(J,t);if("undefined"!=typeof a)return a}var r=new Date(t.getFullYear(),0,1);return 4!=r.getDay()&&r.setMonth(0,1+(4-r.getDay()+7)%7),Math.ceil(((t-r)/864e5+r.getDay()+1)/7)},t.strToDateTime=function(e){var a,n,o=[];return e&&e instanceof Date&&t.isValidDate(e)?e:(o=/^(\+|\-)(.*)$/.exec(e),o&&(o[2]=r.parseDate(o[2],C.formatDate)),o&&o[2]?(a=o[2].getTime()-6e4*o[2].getTimezoneOffset(),n=new Date(t.now(!0).getTime()+parseInt(o[1]+"1",10)*a)):n=e?r.parseDate(e,C.format):t.now(),t.isValidDate(n)||(n=t.now()),n)},t.strToDate=function(e){if(e&&e instanceof Date&&t.isValidDate(e))return e;var a=e?r.parseDate(e,C.formatDate):t.now(!0);return t.isValidDate(a)||(a=t.now(!0)),a},t.strtotime=function(e){if(e&&e instanceof Date&&t.isValidDate(e))return e;var a=e?r.parseDate(e,C.formatTime):t.now(!0);return t.isValidDate(a)||(a=t.now(!0)),a},t.str=function(){return r.formatDate(t.currentTime,C.format)},t.currentTime=this.now()},j=new d,V.on("touchend click",function(e){e.preventDefault(),J.data("changed",!0),j.setCurrentTime(i()),a.val(j.str()),J.trigger("close.xdsoft")}),N.find(".xdsoft_today_button").on("touchend mousedown.xdsoft",function(){J.data("changed",!0),j.setCurrentTime(0,!0),J.trigger("afterOpen.xdsoft")}).on("dblclick.xdsoft",function(){var e,t,r=j.getCurrentTime();r=new Date(r.getFullYear(),r.getMonth(),r.getDate()),e=j.strToDate(C.minDate),e=new Date(e.getFullYear(),e.getMonth(),e.getDate()),e>r||(t=j.strToDate(C.maxDate),t=new Date(t.getFullYear(),t.getMonth(),t.getDate()),r>t||(a.val(j.str()),a.trigger("change"),J.trigger("close.xdsoft")))}),N.find(".xdsoft_prev,.xdsoft_next").on("touchend mousedown.xdsoft",function(){var t=e(this),a=0,r=!1;!function n(e){t.hasClass(C.next)?j.nextMonth():t.hasClass(C.prev)&&j.prevMonth(),C.monthChangeSpinner&&(r||(a=setTimeout(n,e||100)))}(500),e([document.body,window]).on("touchend mouseup.xdsoft",function o(){clearTimeout(a),r=!0,e([document.body,window]).off("touchend mouseup.xdsoft",o)})}),E.find(".xdsoft_prev,.xdsoft_next").on("touchend mousedown.xdsoft",function(){var t=e(this),a=0,r=!1,n=110;!function o(e){var i=R[0].clientHeight,s=B[0].offsetHeight,d=Math.abs(parseInt(B.css("marginTop"),10));t.hasClass(C.next)&&s-i-C.timeHeightInTimePicker>=d?B.css("marginTop","-"+(d+C.timeHeightInTimePicker)+"px"):t.hasClass(C.prev)&&d-C.timeHeightInTimePicker>=0&&B.css("marginTop","-"+(d-C.timeHeightInTimePicker)+"px"),R.trigger("scroll_element.xdsoft_scroller",[Math.abs(parseInt(B[0].style.marginTop,10)/(s-i))]),n=n>10?10:n-10,r||(a=setTimeout(o,e||n))}(500),e([document.body,window]).on("touchend mouseup.xdsoft",function i(){clearTimeout(a),r=!0,e([document.body,window]).off("touchend mouseup.xdsoft",i)})}),u=0,J.on("xchange.xdsoft",function(t){clearTimeout(u),u=setTimeout(function(){if(void 0===j.currentTime||null===j.currentTime){if(C.allowBlank)return;j.currentTime=j.now()}for(var t,i,s,d,u,l,f,c,m,h,g="",p=new Date(j.currentTime.getFullYear(),j.currentTime.getMonth(),1,12,0,0),y=0,v=j.now(),b=!1,D=!1,k=[],x=!0,T="",S="";p.getDay()!==C.dayOfWeekStart;)p.setDate(p.getDate()-1);for(g+="",C.weeks&&(g+=""),t=0;7>t;t+=1)g+="";for(g+="",g+="",C.maxDate!==!1&&(b=j.strToDate(C.maxDate),b=new Date(b.getFullYear(),b.getMonth(),b.getDate(),23,59,59,999)),C.minDate!==!1&&(D=j.strToDate(C.minDate),D=new Date(D.getFullYear(),D.getMonth(),D.getDate()));y0?-1===C.allowDates.indexOf(r.formatDate(p,C.formatDate))&&k.push("xdsoft_disabled"):b!==!1&&p>b||D!==!1&&D>p||c&&c[0]===!1?k.push("xdsoft_disabled"):-1!==C.disabledDates.indexOf(r.formatDate(p,C.formatDate))?k.push("xdsoft_disabled"):-1!==C.disabledWeekDays.indexOf(s)?k.push("xdsoft_disabled"):a.is("[readonly]")&&k.push("xdsoft_disabled"),c&&""!==c[1]&&k.push(c[1]),j.currentTime.getMonth()!==l&&k.push("xdsoft_other_month"),(C.defaultSelect||J.data("changed"))&&r.formatDate(j.currentTime,C.formatDate)===r.formatDate(p,C.formatDate)&&k.push("xdsoft_current"),r.formatDate(v,C.formatDate)===r.formatDate(p,C.formatDate)&&k.push("xdsoft_today"),(0===p.getDay()||6===p.getDay()||-1!==C.weekends.indexOf(r.formatDate(p,C.formatDate)))&&k.push("xdsoft_weekend"),void 0!==C.highlightedDates[r.formatDate(p,C.formatDate)]&&(i=C.highlightedDates[r.formatDate(p,C.formatDate)],k.push(void 0===i.style?"xdsoft_highlighted_default":i.style),h=void 0===i.desc?"":i.desc),C.beforeShowDay&&e.isFunction(C.beforeShowDay)&&k.push(C.beforeShowDay(p)),x&&(g+="",x=!1,C.weeks&&(g+="")),g+='",p.getDay()===C.dayOfWeekStartPrev&&(g+="",x=!0),p.setDate(d+1);if(g+="
"+C.i18n[o].dayOfWeekShort[(t+C.dayOfWeekStart)%7]+"
"+f+"
'+d+"
",L.html(g),N.find(".xdsoft_label span").eq(0).text(C.i18n[o].months[j.currentTime.getMonth()]),N.find(".xdsoft_label span").eq(1).text(j.currentTime.getFullYear()),T="",S="",l="",m=function(t,n){var o,i,s=j.now(),d=C.allowTimes&&e.isArray(C.allowTimes)&&C.allowTimes.length;s.setHours(t),t=parseInt(s.getHours(),10),s.setMinutes(n),n=parseInt(s.getMinutes(),10),o=new Date(j.currentTime),o.setHours(t),o.setMinutes(n),k=[],C.minDateTime!==!1&&C.minDateTime>o||C.maxTime!==!1&&j.strtotime(C.maxTime).getTime()s.getTime()?k.push("xdsoft_disabled"):C.minDateTime!==!1&&C.minDateTime>o||C.disabledMinTime!==!1&&s.getTime()>j.strtotime(C.disabledMinTime).getTime()&&C.disabledMaxTime!==!1&&s.getTime()59||i.getMinutes()===parseInt(n,10))&&(C.defaultSelect||J.data("changed")?k.push("xdsoft_current"):C.initTime&&k.push("xdsoft_init_time")),parseInt(v.getHours(),10)===parseInt(t,10)&&parseInt(v.getMinutes(),10)===parseInt(n,10)&&k.push("xdsoft_today"),T+='
'+r.formatDate(s,C.formatTime)+"
"},C.allowTimes&&e.isArray(C.allowTimes)&&C.allowTimes.length)for(y=0;yt;t+=C.step)S=(10>y?"0":"")+y,l=(10>t?"0":"")+t,m(S,l);for(B.html(T),n="",y=0,y=parseInt(C.yearStart,10)+C.yearOffset;y<=parseInt(C.yearEnd,10)+C.yearOffset;y+=1)n+='
'+y+"
";for(U.children().eq(0).html(n),y=parseInt(C.monthStart,10),n="";y<=parseInt(C.monthEnd,10);y+=1)n+='
'+C.i18n[o].months[y]+"
";G.children().eq(0).html(n),e(J).trigger("generate.xdsoft")},10),t.stopPropagation()}).on("afterOpen.xdsoft",function(){if(C.timepicker){var e,t,a,r;B.find(".xdsoft_current").length?e=".xdsoft_current":B.find(".xdsoft_init_time").length&&(e=".xdsoft_init_time"),e?(t=R[0].clientHeight,a=B[0].offsetHeight,r=B.find(e).index()*C.timeHeightInTimePicker+1,r>a-t&&(r=a-t),R.trigger("scroll_element.xdsoft_scroller",[parseInt(r,10)/(a-t)])):R.trigger("scroll_element.xdsoft_scroller",[0])}}),P=0,L.on("touchend click.xdsoft","td",function(t){t.stopPropagation(),P+=1;var r=e(this),n=j.currentTime;return(void 0===n||null===n)&&(j.currentTime=j.now(),n=j.currentTime),r.hasClass("xdsoft_disabled")?!1:(n.setDate(1),n.setFullYear(r.data("year")),n.setMonth(r.data("month")),n.setDate(r.data("date")),J.trigger("select.xdsoft",[n]),a.val(j.str()),C.onSelectDate&&e.isFunction(C.onSelectDate)&&C.onSelectDate.call(J,j.currentTime,J.data("input"),t),J.data("changed",!0),J.trigger("xchange.xdsoft"),J.trigger("changedatetime.xdsoft"),(P>1||C.closeOnDateSelect===!0||C.closeOnDateSelect===!1&&!C.timepicker)&&!C.inline&&J.trigger("close.xdsoft"),void setTimeout(function(){P=0},200))}),B.on("touchend click.xdsoft","div",function(t){t.stopPropagation();var a=e(this),r=j.currentTime;return(void 0===r||null===r)&&(j.currentTime=j.now(),r=j.currentTime),a.hasClass("xdsoft_disabled")?!1:(r.setHours(a.data("hour")),r.setMinutes(a.data("minute")),J.trigger("select.xdsoft",[r]),J.data("input").val(j.str()),C.onSelectTime&&e.isFunction(C.onSelectTime)&&C.onSelectTime.call(J,j.currentTime,J.data("input"),t),J.data("changed",!0),J.trigger("xchange.xdsoft"),J.trigger("changedatetime.xdsoft"),void(C.inline!==!0&&C.closeOnTimeSelect===!0&&J.trigger("close.xdsoft")))}),I.on("mousewheel.xdsoft",function(e){return C.scrollMonth?(e.deltaY<0?j.nextMonth():j.prevMonth(),!1):!0}),a.on("mousewheel.xdsoft",function(e){return C.scrollInput?!C.datepicker&&C.timepicker?(A=B.find(".xdsoft_current").length?B.find(".xdsoft_current").eq(0).index():0,A+e.deltaY>=0&&A+e.deltaYc+m?(l="bottom",r=c+m-t.top):r-=m):r+a.offsetHeight>c+m&&(r=t.top-a.offsetHeight+1),0>r&&(r=0),n+a.offsetWidth>u&&(n=u-a.offsetWidth)),i=J[0],H(i,function(e){var t;return t=window.getComputedStyle(e).getPropertyValue("position"),"relative"===t&&u>=e.offsetWidth?(n-=(u-e.offsetWidth)/2,!1):void 0}),f={position:o,left:n,top:"",bottom:""},f[l]=r,J.css(f)},J.on("open.xdsoft",function(t){var a=!0;C.onShow&&e.isFunction(C.onShow)&&(a=C.onShow.call(J,j.currentTime,J.data("input"),t)),a!==!1&&(J.show(),Y(),e(window).off("resize.xdsoft",Y).on("resize.xdsoft",Y),C.closeOnWithoutClick&&e([document.body,window]).on("touchstart mousedown.xdsoft",function r(){J.trigger("close.xdsoft"),e([document.body,window]).off("touchstart mousedown.xdsoft",r)}))}).on("close.xdsoft",function(t){var a=!0;N.find(".xdsoft_month,.xdsoft_year").find(".xdsoft_select").hide(),C.onClose&&e.isFunction(C.onClose)&&(a=C.onClose.call(J,j.currentTime,J.data("input"),t)),a===!1||C.opened||C.inline||J.hide(),t.stopPropagation()}).on("toggle.xdsoft",function(){J.trigger(J.is(":visible")?"close.xdsoft":"open.xdsoft")}).data("input",a),X=0,J.data("xdsoft_datetime",j),J.setOptions(C),j.setCurrentTime(i()),a.data("xdsoft_datetimepicker",J).on("open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart",function(){a.is(":disabled")||a.data("xdsoft_datetimepicker").is(":visible")&&C.closeOnInputClick||(clearTimeout(X),X=setTimeout(function(){a.is(":disabled")||(q=!0,j.setCurrentTime(i(),!0),C.mask&&s(C),J.trigger("open.xdsoft"))},100))}).on("keydown.xdsoft",function(t){var a,r=t.which;return-1!==[p].indexOf(r)&&C.enterLikeTab?(a=e("input:visible,textarea:visible,button:visible,a:visible"),J.trigger("close.xdsoft"),a.eq(a.index(this)+1).focus(),!1):-1!==[T].indexOf(r)?(J.trigger("close.xdsoft"),!0):void 0}).on("blur.xdsoft",function(){J.trigger("close.xdsoft")})},d=function(t){var a=t.data("xdsoft_datetimepicker");a&&(a.data("xdsoft_datetime",null),a.remove(),t.data("xdsoft_datetimepicker",null).off(".xdsoft"),e(window).off("resize.xdsoft"),e([window,document.body]).off("mousedown.xdsoft touchstart"),t.unmousewheel&&t.unmousewheel())},e(document).off("keydown.xdsoftctrl keyup.xdsoftctrl").on("keydown.xdsoftctrl",function(e){e.keyCode===h&&(F=!0)}).on("keyup.xdsoftctrl",function(e){e.keyCode===h&&(F=!1)}),this.each(function(){var t,a=e(this).data("xdsoft_datetimepicker");if(a){if("string"===e.type(n))switch(n){case"show":e(this).select().focus(),a.trigger("open.xdsoft");break;case"hide":a.trigger("close.xdsoft");break;case"toggle":a.trigger("toggle.xdsoft");break;case"destroy":d(e(this));break;case"reset":this.value=this.defaultValue,this.value&&a.data("xdsoft_datetime").isValidDate(r.parseDate(this.value,C.format))||a.data("changed",!1),a.data("xdsoft_datetime").setCurrentTime(this.value);break;case"validate":t=a.data("input"),t.trigger("blur.xdsoft");break;default:a[n]&&e.isFunction(a[n])&&(u=a[n](i))}else a.setOptions(n);return 0}"string"!==e.type(n)&&(!C.lazyInit||C.open||C.inline?s(e(this)):A(e(this)))}),u},e.fn.datetimepicker.defaults=a}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e:e(jQuery)}(function(e){function t(t){var i=t||window.event,s=d.call(arguments,1),u=0,f=0,c=0,m=0,h=0,g=0;if(t=e.event.fix(i),t.type="mousewheel","detail"in i&&(c=-1*i.detail),"wheelDelta"in i&&(c=i.wheelDelta),"wheelDeltaY"in i&&(c=i.wheelDeltaY),"wheelDeltaX"in i&&(f=-1*i.wheelDeltaX),"axis"in i&&i.axis===i.HORIZONTAL_AXIS&&(f=-1*c,c=0),u=0===c?f:c,"deltaY"in i&&(c=-1*i.deltaY,u=c),"deltaX"in i&&(f=i.deltaX,0===c&&(u=-1*f)),0!==c||0!==f){if(1===i.deltaMode){var p=e.data(this,"mousewheel-line-height");u*=p,c*=p,f*=p}else if(2===i.deltaMode){var y=e.data(this,"mousewheel-page-height");u*=y,c*=y,f*=y}if(m=Math.max(Math.abs(c),Math.abs(f)),(!o||o>m)&&(o=m,r(i,m)&&(o/=40)),r(i,m)&&(u/=40,f/=40,c/=40),u=Math[u>=1?"floor":"ceil"](u/o),f=Math[f>=1?"floor":"ceil"](f/o),c=Math[c>=1?"floor":"ceil"](c/o),l.settings.normalizeOffset&&this.getBoundingClientRect){var v=this.getBoundingClientRect();h=t.clientX-v.left,g=t.clientY-v.top}return t.deltaX=f,t.deltaY=c,t.deltaFactor=o,t.offsetX=h,t.offsetY=g,t.deltaMode=0,s.unshift(t,u,f,c),n&&clearTimeout(n),n=setTimeout(a,200),(e.event.dispatch||e.event.handle).apply(this,s)}}function a(){o=null}function r(e,t){return l.settings.adjustOldDeltas&&"mousewheel"===e.type&&t%120===0}var n,o,i=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],s="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],d=Array.prototype.slice;if(e.event.fixHooks)for(var u=i.length;u;)e.event.fixHooks[i[--u]]=e.event.mouseHooks;var l=e.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var a=s.length;a;)this.addEventListener(s[--a],t,!1);else this.onmousewheel=t;e.data(this,"mousewheel-line-height",l.getLineHeight(this)),e.data(this,"mousewheel-page-height",l.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var a=s.length;a;)this.removeEventListener(s[--a],t,!1);else this.onmousewheel=null;e.removeData(this,"mousewheel-line-height"),e.removeData(this,"mousewheel-page-height")},getLineHeight:function(t){var a=e(t),r=a["offsetParent"in e.fn?"offsetParent":"parent"]();return r.length||(r=e("body")),parseInt(r.css("fontSize"),10)||parseInt(a.css("fontSize"),10)||16},getPageHeight:function(t){return e(t).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};e.fn.extend({mousewheel:function(e){return e?this.bind("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this.unbind("mousewheel",e)}})}); diff --git a/src/main/webapp/css/login.css b/src/main/webapp/css/login.css new file mode 100644 index 0000000..048122e --- /dev/null +++ b/src/main/webapp/css/login.css @@ -0,0 +1,145 @@ +body { + background: #fff; + font-family: "Nanum Gothic", "", dotum, sans-serif; + padding: 0px; + margin: 0px ; + font-size:14px; + font-weight: normal; + color: #484848; + overflow: hidden; +} + +* { + margin: 0; + padding: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.login-hedaer { + height: 80px; + background-color: #fff; +} + +.login-bg { + border-top: 3px solid #2e3440; + height: 760px; + width: 100%; + background-image:url("../../images/cmmn/login_bg.jpg"); + background-size: cover; +} + +.forms { + margin-top: 180px; + background: #fff; + box-shadow: 0 0 1px #000; + width: 470px; + overflow: hidden; + position: absolute; + padding: 0; + left: 60%; +} +.forms h1 { + padding: 0 0 10px 0; + font-size: 24px; + color: #3e3e3e; + text-align: left; +} +.forms h1 span { + color: #044796; +} +.forms .login-form { padding: 35px; } +#signup { display: none; } +.forms .tab-group { + list-style: none; + padding: 0; + margin: 0; +} +.forms .tab-group:after { + content: ""; + display: table; + clear: both; +} +.forms .tab-group li a { + display: block; + text-decoration: none; + padding: 15px; + background: #f7f7f7; + color: #888; + font-size: 16px; + float: left; + width: 50%; + text-align: center; + border-top: 3px solid transparent; + -moz-transition: all 0.4s ease-in-out; + -o-transition: all 0.4s ease-in-out; + -webkit-transition: all 0.4s ease-in-out; + transition: all 0.4s ease-in-out; +} +.forms .tab-group li a:hover { + background: #dedfdf; + color: #7d7d7d; +} +.forms .tab-group .active a { + background: #fff; + color: #336bb8; + font-weight: bold; + border-top: 3px solid #336bb8; +} +.forms input { + width: 312px; + font-size: 16px; + padding: 10px 10px; + border: 1px solid #d0d0d0; + color: #666; + border-radius: 0; + margin-bottom: 15px; + -moz-transition: all 0.4s ease-in-out; + -o-transition: all 0.4s ease-in-out; + -webkit-transition: all 0.4s ease-in-out; + transition: all 0.4s ease-in-out; + display: inline-block; +} +.forms input:focus { + outline: 0; + border-color: #2e5ed7; +} +.forms label { + width: 80px; + text-align: left; + font-size: 14px; + font-weight: bold; + color: #3d3d3d; + margin-bottom: 5px; + display: inline-block; +} +.forms .login-btn { + border-radius: 3px; + outline: none; + padding: 12px 0; + font-size: 18px; + font-weight: 300; + text-transform: uppercase; + letter-spacing: 2px; + background: #336bb8; + color: #ffffff; + cursor: pointer; + -moz-transition: all 0.4s ease-in-out; + -o-transition: all 0.4s ease-in-out; + -webkit-transition: all 0.4s ease-in-out; + transition: all 0.4s ease-in-out; + width:100%; +} +.forms .login-btn a { + color: #fff; + text-decoration: none; + font-size: 16px; +} +.forms .login-btn:hover, .login-btn:focus { background: #336bb8; } +.text-p { + font-size: 14px; + text-align: left; + color: #3e3e3e; + padding-bottom: 20px; +} diff --git a/src/main/webapp/css/login_new.css b/src/main/webapp/css/login_new.css new file mode 100644 index 0000000..ff6c20f --- /dev/null +++ b/src/main/webapp/css/login_new.css @@ -0,0 +1,395 @@ +* { + padding: 0; + margin: 0; + } + #popuplayer { + position: fixed; + top: 150px; + left: 150px; + width: 500px; + border: 1px solid #333; + background-color: #29559f; + z-index: 999999; + } + .clse { + position: relative; + width: 100%; + height: 30px; + + } + + .clse p { + position: absolute; + right: 0; + width: 60px; + height: 30px; + line-height: 30px; + text-align: center; + cursor: pointer; + color: #fff; + } + + + + .clse p:hover { + background-color: #2a66cc; + } + .popupInfo { + width: 100%; + background-color: #fff; + } + + .popupInfo ul{ + width: 100%; + } + + .popupInfo ul li { + padding: 15px 15px 15px 15px; + font-size: 16px; + } + + #dialog-confirm ol { + margin-top: 10px; + } + + #dialog-confirm ol li { + display: inline; + } + #dialog-confirm ol li a { + display: block; + width: 100%; + height: 70px; + line-height: 70px; + text-align: center; + color: #fff; + font-weight: 600; + text-decoration: none; + background-color: #29559f; + border-bottom: 1px solid #464c5e; + } + + #dialog-confirm ol li a:hover { + background-color: #2a66cc; + } + + .bordernone { + border-bottom: none; + } + + + .allClse { + text-align: right; + color: #fff; + } + .allClse input[type="checkbox"] { + vertical-align: middle; + } + + #dialog-confirm { + line-height: 1.45em; + } + + #first-confirm-popup { + ; + } + + #first-confirm-popup img{ + width: 100%; + } + + + #second-confirm-popup img{ + width: 100%; + } + + 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: inherit; + vertical-align: baseline; + text-decoration: none; + list-style: none; + } + /* HTML5 display-role reset for older browsers */ + article, aside, details, figcaption, figure, + footer, header, hgroup, menu, nav, section { + display: block; + } + body { + line-height: 1; + font-family: "Nanum Gothic", sans-serif; + } + 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; + } + +clearfix { + *zoom: 1; } + .clearfix:after { + display: block; + clear: both; + content: ''; } + +.inner { + width: 970px; + margin: 0 auto; } + +.sr_only { + position: absolute; + left: -99999px; } + +#wrap { + width: 100%; } + +/*------------- standard Set ------------*/ +.loginBox { + width: 430px; + height: 610px; + margin: 150px auto 0; + background-color: #b8b8b8; } + .loginBox > .loginBox_TopBar { + position: relative; + width: 100%; + height: 50px; + background-color: #4272b2; } + .loginBox > .loginBox_TopBar > ul { + position: absolute; + bottom: 0; + left: 50%; + margin-left: -150px; + width: 300px; + height: 40px; + } + .loginBox > .loginBox_TopBar > ul > li { + float: left; + width: 150px; + height: 40px; + background-color: #535151; } + .loginBox > .loginBox_TopBar > ul > li.on { + background-color: #fff; } + .loginBox > .loginBox_TopBar > ul > li > a { + display: block; + width: 100%; + height: 100%; + line-height: 40px; + text-align: center; + font-size: 14px; + font-weight: 600; + color: #b9b9b9; + letter-spacing: 1.5px; } + .loginBox > .loginBox_TopBar > ul > li > a.on { + color: #4272b2; } + .loginBox > .loginBox_BotBar { + position: relative; + width: 100%; + height: 560px; + background-color: green; } + .loginBox > .loginBox_BotBar > .ocean { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: #fff; + z-index: 100; } + .loginBox > .loginBox_BotBar > .ocean > .hellow { + width: 100%; + height: 200px; } + .loginBox > .loginBox_BotBar > .ocean > .hellow > h3 { + position: relative; + padding-top: 80px; + text-align: center; + font-size: 45px; + font-weight: 600; + color: #4272b2; } + + .loginBox > .loginBox_BotBar > .ocean > .hellow > .hellow_name { + padding-top: 10px; + font-size: 16px; + color: #222; + text-align: center; + font-weight: 600; + } + /* .loginBox > .loginBox_BotBar > .ocean > .hellow > h3:after { + position: absolute; + bottom: -25px; + left: 50%; + transform: translateX(-50%); + width: 235px; + font-size: 16px; + color: #222; + content: '이곳은 국제해양정보시스템입니다'; } */ + .loginBox > .loginBox_BotBar > .ocean > .id_pw { + width: 100%; + height: 90px; } + .loginBox > .loginBox_BotBar > .ocean > .id_pw > div > ul { + height: 45px; } + .loginBox > .loginBox_BotBar > .ocean > .id_pw > div > ul > li { + float: left; + font-size: 17px; + font-weight: 600; + color: #4272b2; + line-height: 45px; + text-align: center; } + .loginBox > .loginBox_BotBar > .ocean > .id_pw > div > ul > li:first-child { + width: 100px; + height: 100%; } + .loginBox > .loginBox_BotBar > .ocean > .id_pw > div > ul > li > input { + display: block; + width: 300px; + height: 30px; + margin-top: 5px; + padding-left: 10px; + border: 1px solid #4272b2; + color: #222; + letter-spacing: 2px; } + .loginBox > .loginBox_BotBar > .ocean > .id_pw > .id_section { + width: 100%; + height: 45px; } + .loginBox > .loginBox_BotBar > .ocean > .id_pw > .pw_section { + width: 100%; + height: 45px; } + .loginBox > .loginBox_BotBar > .ocean > .remember_id { + position: relative; + width: 100%; + height: 30px; + line-height: 30px; } + .loginBox > .loginBox_BotBar > .ocean > .remember_id > input[type="checkbox"] { + width: 20px; + height: 20px; + padding: 0; + margin: 0; + position: absolute; + top: 6px; + right: 120px; + background-color: transparent; + border: 2px solid #4272b2; + overflow: hidden; } + .loginBox > .loginBox_BotBar > .ocean > .remember_id > label { + position: absolute; + top: 0px; + right: 20px; + } + .loginBox > .loginBox_BotBar > .ocean > .remember_id > label > span { + font-size: 13px; } + .loginBox > .loginBox_BotBar > .ocean > .login_Sign { + width: 100%; + height: 110px; } + .loginBox > .loginBox_BotBar > .ocean > .login_Sign > div { + width: 400px; + height: 40px; + margin: 0 auto; } + .loginBox > .loginBox_BotBar > .ocean > .login_Sign > .login { + text-align: center; + margin-top: 5px; + margin-bottom: 10px; + background-color: #4272b2; } + .loginBox > .loginBox_BotBar > .ocean > .login_Sign > .login > a { + display: block; + line-height: 40px; + font-size: 16px; + letter-spacing: 3px; + color: #fff; } + .loginBox > .loginBox_BotBar > .ocean > .login_Sign > .login > input { + display: block; + width : 100%; + height : 100%; + line-height: 40px; + font-size: 16px; + letter-spacing: 3px; + color: #fff; + background-color : #29559f; + border : none; + outline : none; + cursor : pointer; + } + .loginBox > .loginBox_BotBar > .ocean > .login_Sign > .sign { + position: relative; + text-align: center; + background-color: #4272b2; } + .loginBox > .loginBox_BotBar > .ocean > .login_Sign > .sign > a { + display: block; + line-height: 40px; + font-size: 16px; + letter-spacing: 3px; + color: #fff; } + .loginBox > .loginBox_BotBar > .ocean > .login_Sign > .sign:after { + position: absolute; + bottom: -35px; + left: 50%; + transform: translateX(-13%); + + + } + .msg { + margin-right: 20px; + padding-top: 10px; + float: right; + width: 200px; + font-size: 12px; + line-height: 1.4em; + text-align: right; + } + .loginBox > .loginBox_BotBar > .ocean > .logo { + margin: 40px auto 0; + width: 182px; + height: 62px; + text-indent: -99999px; + background-image: url(images/new/logo.png); + background-repeat: no-repeat; + background-size: contain; } + .loginBox > .loginBox_BotBar > .ocean { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } + + + + #footer { + margin-top: 89px; + width: 100%; + height: 100px; + background: #191919; color: #fff; + } + + h1 {float: left; display: block; margin-top: 13px; margin-left: 100px;width: 108px; height: 72px; text-indent: -99999px; background-image: url(/images/new/f_logo.png); background-size: cover; background-position: 50% 50%; background-repeat: no-repeat;} + address {position: relative; float: left; margin-left: 30px; margin-top: 13px;} + .topic { font-size: 22px; margin-bottom: 10px; font-weight: 600; letter-spacing: 3px;} + .f_info {width: 100%;} + .f_info ul {;} + .f_info ul li {display: block; font-size: 12px; font-weight: normal; line-height: 1.7em;} + .w3c {position: absolute; top: 10px; right: -100px; width: 77px; height: 59px; background-image: url(/images/new/w3c.png); background-size: cover; text-indent: -99999px;} + + .mVisual_img {position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -1;} + .mVisual_img ul li{position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-size: cover; background-repeat: no-repeat; background-position: 50% 50%; text-indent: -99999px;} + .mVisual_img ul li.img01 {background-image: url(/images/new/img01.jpg);} + .mVisual_img ul li.img02 {background-image: url(/images/new/img02.jpg);} diff --git a/src/main/webapp/css/nanumgothic.css b/src/main/webapp/css/nanumgothic.css new file mode 100644 index 0000000..446988b --- /dev/null +++ b/src/main/webapp/css/nanumgothic.css @@ -0,0 +1,33 @@ +/* + * Nanum Gothic (Korean) http://www.google.com/fonts/earlyaccess (2017.01.24) + */ +@font-face { + font-family: 'Nanum Gothic'; + font-style: normal; + font-weight: 400; + src: url(/css/fonts/NanumGothic-Regular.eot); + src: url(/css/fonts/NanumGothic-Regular.eot?#iefix) format('embedded-opentype'), + url(/css/fonts/NanumGothic-Regular.woff2) format('woff2'), + url(/css/fonts/NanumGothic-Regular.woff) format('woff'), + url(/css/fonts/NanumGothic-Regular.ttf) format('truetype'); +} +@font-face { + font-family: 'Nanum Gothic'; + font-style: normal; + font-weight: 700; + src: url(/css/fonts/NanumGothic-Bold.eot); + src: url(/css/fonts/NanumGothic-Bold.eot?#iefix) format('embedded-opentype'), + url(/css/fonts/NanumGothic-Bold.woff2) format('woff2'), + url(/css/fonts/NanumGothic-Bold.woff) format('woff'), + url(/css/fonts/NanumGothic-Bold.ttf) format('truetype'); +} +@font-face { + font-family: 'Nanum Gothic'; + font-style: normal; + font-weight: 800; + src: url(/css/fonts/NanumGothic-ExtraBold.eot); + src: url(/css/fonts/NanumGothic-ExtraBold.eot?#iefix) format('embedded-opentype'), + url(/css/fonts/NanumGothic-ExtraBold.woff2) format('woff2'), + url(/css/fonts/NanumGothic-ExtraBold.woff) format('woff'), + url(/css/fonts/NanumGothic-ExtraBold.ttf) format('truetype'); +} \ No newline at end of file diff --git a/src/main/webapp/css/style.css b/src/main/webapp/css/style.css new file mode 100644 index 0000000..3af6a35 --- /dev/null +++ b/src/main/webapp/css/style.css @@ -0,0 +1,817 @@ +/* Styles for main +-----------------------------------------------------------*/ +#board_wrap { + position: relative; + margin-top: 40px; +} + +.board { + position: relative; + float: left; + width: 493px; + height: 277px; + border: 1px solid #ddd; +} + +#board_wrap .m-right { + margin-right: 10px; +} + +#board_wrap .m-top { + margin-top: 10px; +} + +#board_wrap:after { + display: block; + overflow: hidden; + clear: both; + content: ''; +} + +.board .inner { + padding: 20px; +} + +.board .inner .h1 { + height: 22px; + margin: 0; + color: #333; + font-size: 16px; +} + +.board .inner .h1 { + position: absolute; + padding-bottom: 6px; + border-bottom: 2px solid #044796; +} + +.board .btn_more { + position: absolute; + top: 0px; + right: 0px; + width: 51px; + height: 51px; + display: inline-block; + border: 1px solid #ddd; + border-top: none; + border-right: none; + text-align: center; +} + +.board .btn_more a { + display: block; + padding: 26px; + background: url("../../images/cmmn/more_btn.png") no-repeat center; +} +.board .btn_more :hover { + display: block; + padding: 26px; + background: url("../../images/cmmn/more_btn_on.png") no-repeat center; +} + +.board_content { + padding-top: 50px; +} + +.board_content ul li { + position: relative; + display: block; + padding: 12px 0 8px; + border-bottom: 1px dotted #ddd; +} + +.board_content ul li:last-child { + border-bottom: none; +} + +.board_content ul li a { + display: inline-block; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + width: 68%; + -moz-osx-font-smoothing: grayscale; + -webkit-transition-duration: 0.3s; + transition-duration: 0.3s; + -webkit-transition-property: color, background-color; + transition-property: color, background-color; +} + +.board_content ul li a:hover { + color: #333; + font-weight: bold; + text-decoration: underline; +} + + +.board_content ul li span.date { + float: right; +} + +/* Styles for faMember +-----------------------------------------------------------*/ +.placeList { + +} + +.placeList ul { + margin: 0 0 40px; + padding: 3% 2%; + background-color: #f5f5f5; + border: 1px solid #cbcbcb; +} + +.placeList ul li { + display: inline-block; + margin: 2px 0px; + min-width: 12%; +} + +.placeList ul li:frist-child { + color: #fff; + font-weight: bold; + background: #478edc; + border: 1px solid #478edc; +} + +.placeList ul li a { + display: block; + padding: 8px 5px; + background: #fff; + border: 1px solid #dddddd; + border-radius: 3px; + font-size: 14px; + white-space: nowrap; + text-align: center; +} + +.placeList ul li.select a, .placeList ul li:hover a { + color: #fff; + font-weight: bold; + background: #478edc; + border: 1px solid #478edc; +} + +.tbl_memberList { + border-bottom: 1px solid #8e8e8e; + border-top: 2px solid #2d2d2d; +} + +.tbl_memberList thead tr th { + background-color: #f8f8f8; + padding: 13px 10px; + border-left: 1px solid #dcdcdc; + text-align: center; +} + +.tbl_memberList thead tr th:first-child { + border-left: 0; +} + +.tbl_memberList tbody tr td:first-child { + border-left: 0; +} + +.tbl_memberList tbody tr td { + font-weight: 500; + padding: 13px 8px; + border-top: 1px solid #dcdcdc; + border-left: 1px solid #dcdcdc; +} + +.tbl_listinfo { + margin-bottom: 20px; +} + +.tbl_add .notice { + color: #1f8ae2; + font-weight: 400; +} + +.tbl_add .form_radio input:first-child { + margin: 0 8px 0 0; +} + +.pwd_desc { + color: #e64545 !important; +} + +.tbl_add .form_radio input { + margin: 0 8px 0 16px; +} + +.tbl_list_input td { + padding: 13px 4px !important; +} + +.tbl_list_input td>* { + vertical-align: middle; +} + +.tbl_list_input td input { + text-align: center; + height: 24px; + border: 1px solid #ccc; +} + +.tbl_list_input input[type="button"] { + padding: 0 3px; + height: 26px; + line-height: 26px; + border: 1px solid #d7d7d7; + border-radius: 3px; + background: #fff; + font-size: 13px; + font-weight: 700; + text-align: center; + color: #333; + cursor: pointer; +} + +.tbl_list_input input[type="radio"] { + margin: 0 6px; +} + +.tbl_list_input2 input[type="radio"] { + margin: 0 10px; +} + +.tbl_list_input2 input:first-child { + margin-left: 0px; +} + +.tbl_list_input input[type="text"] { + margin: 0 6px; +} + +#auth_control_pannel { + display: none; + border: 1px solid #d8d8d8; + background: #fff; + position: absolute; + left: 1178px; + top: 673px; + width: 160px; +} + +#auth_control_pannel_rpt { + border: 1px solid #c8c8c8; + background: #fff; + position: absolute; + left: 0; + top: 0; + display: none; + width: 160px; +} + +#auth_control_pannel ul li, #auth_control_pannel_rpt ul li { + border-top: 1px dotted #d8d8d8; + padding: 6px 6px; +} + +#auth_control_pannel ul li:first-child, #auth_control_pannel_rpt ul li:first-child + { + border-top: 0px; +} + +#auth_control_pannel ul li input[type="button"], + #auth_control_pannel_rpt ul li input[type="button"] { + padding: 0 3px; + height: 26px; + line-height: 26px; + border: 1px solid #d7d7d7; + border-radius: 3px; + background: #fff; + font-size: 13px; + font-weight: 700; + text-align: center; + color: #333; + cursor: pointer; +} + +/* Styles for weakplace +-----------------------------------------------------------*/ +#divPrintArea .tbl_listview { + margin-bottom: 20px; +} + +/* Styles for codeManage +-----------------------------------------------------------*/ +#code_tab ul { + overflow: hidden; + margin-top: 15px; +} + +#table div.inlinetable:first-child { + width: 480px; + float: left; + margin-top: 30px; +} + +#table div.inlinetable:last-child { + width: 500px; + float: left; + margin-top: 30px; +} + + +#table div.inlinetable:last-child { + margin-left: 20px; +} + +.clear:after {content:""; display:block; clear:both;} + +.code { + cursor: pointer; +} + +.addLine, .edit { + display:none; +} + +.addLine { + background-color: #f7f7f7; +} + +.code_list { + border-bottom: 1px solid #8e8e8e; + border-top: 2px solid #2d2d2d; +} + +.code_list thead th { + height: 43px; + background-color: #f8f8f8; + border-bottom: 1px solid #8e8e8e; + text-align: center; + color: #333; +} + +.code_list thead tr:nth-child(2) th{ + padding: 8px 4px; +} + +.code_list tbody td { + word-break: break-all; +} + +.code_list tbody td { + padding: 13px 4px; + border-bottom: 1px dotted #dcdcdc; +} + +.addLine .input_text input { + width: 84px; +} + +.addLine td input[type="text"] { + width: 60px; +} + +.addLine .listtd input { + width: 50px; +} + +.addLine td.w-100 input { + width: 100px; +} + + +.code_list tbody td a { + color: #333; +} + +.code_list tbody .code:hover { + text-decoration: underline; +} + +.codeInfo { + padding-bottom: 14px; +} + +.codeInfo > * { + vertical-align: middle; +} + +.codeInfo span { + margin-left: 6px; + font-weight: bold; + font-size: 14px; +} + +.codeInfo .code_btn { + float: right; + display: block; + padding: 0 10px; + line-height: 27px; + border: 1px solid #9b9b9b; + background: #fff; + font-size: 13px; + font-weight: 700; + text-align: center; + color: #333; + cursor: pointer; +} + +.code_list tbody input[type="button"] { + padding: 0 2px; + height: 26px; + line-height: 26px; + border: 1px solid #d7d7d7; + border-radius: 3px; + background: #fff; + font-size: 13px; + font-weight: 700; + text-align: center; + color: #333; + cursor: pointer; +} + +.code_list tbody input[type="button"]:last-child { + margin-top: 2px; +} + +.code_list tbody td input[type="text"] { + width: 78px; +} + +/* Styles for eduadd-popup +-----------------------------------------------------------*/ + +#divMemberSelectPopup > table { + width: 100%; +} + +.user_name { + position: relative; + text-align: left; + margin: 10px 5px 15px 5px; +} + +.user_name ul li { + display: inline-block; + vertical-align: middle; +} + +.user_name ul li label { + padding: 0 6px; +} + +.user_name input[type="text"] { + width: 200px; + height: 30px; + border: 1px solid #d7d7d7; + line-height: 30px; + text-indent: 10px; + box-sizing: border-box; +} + +.search_btn button { + display: inline-block; + height: 30px; + padding: 0 30px; + line-height: 30px; + border-radius: 3px; + background: #393d49; + color: #fff; + font-weight: 700; + vertical-align: middle; + cursor: pointer; +} + +.divMemberSelectPopup .tbl_list tbody td:nth-child(2) { + text-align: left !important; +} + +.divMemberSelectPopup .tbl_list tbody td:nth-child(3) { + text-align: left !important; +} + +.user_img img { + max-width: 100px; +} + +/* Styles for statslist +-----------------------------------------------------------*/ + +/*.tabs { + display: inline-block; + width:100%; + margin-bottom: 10px; +} + +.tabs ul { + width: 100%; + height: 37px; + border-bottom: 1px solid #d7d7d7; +} + +.tabs ul li { + float: left; + display: inline-block; + padding: 10px 15px; + font-size: 16px; + line-height: 16px; + border: 1px solid #d7d7d7; + border-left: 0; + background-color: #f5f5f5; +} + +.tabs ul li:FIRST-CHILD { + border-left: 1px solid #d7d7d7; +} + +.tabs ul li.selected { + background-color: #fff; + border-bottom: 1px solid #fff;; +} +.tabs ul li:first-child { + margin-left: 0 !important; +} + +.tabs ul li:last-child { + margin-right: 0 !important; +} + +.tabs ul li:hover p, .tabs ul li.selected p { + background: #fff; + border-top: 4px solid #5e7188; + margin-top: 0px; + padding: 1px 0px 0px; + font-weight: bold; + color: #404040; + text-decoration: none; + border-top-left-radius: 8px; + border-top-right-radius: 8px; +} + +.tabs ul li p { + display: table; + margin-top: 4px; + width: 100%; + text-align: center; + background: #fbf9f9; + border: 1px solid #dcdcdc; + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} + +.tabs ul li p a { + display: table-cell; + height: 48px; + text-align: center; + vertical-align: middle; +}*/ + +.tabs { + display: inline-block; + width: 100%; + margin-bottom: 30px; +} + +.tabs ul li { + width: 20%; + float: left; +} + +.tabs ul li a { + display: block; + height: 43px; + border: 1px solid #d7d7d7; + border-left: 0 none; + border-bottom-color: #333; + background: #f8f8f8; + line-height: 43px; + text-align: center; + color: #666; + font-weight: bold; +} + +.tabs ul li:first-child a { + border-left: 1px solid #d7d7d7; +} + +.tabs ul li.selected a { + height: 42px; + margin-left: -1px; + border: 1px solid #333; + border-top-width: 3px; + border-bottom: 0; + background: #fff; + color: #333; +} + +span.save { + color:#1665bc; + font-weight: 600; +} + +.th-bg { + background: #f8f8f8; +} + +.th-bg td { + background: #f8f8f8; +} + +.mb-checkbox label { + font-weight: bold; + margin: 0 5px; +} + +.bold { + font-weight: bold; +} + +.text_blue { + color: #478edc; +} + +.text_red { + color: #ed1c24; +} + +#divCmmnMemberEditPopup > table { + width: 100%; +} + +.w-240 select { + width: 240px !important; +} + +.iconImportant { + width: 9px; + height: 10px; + background: url("../../images/cmmn/icon_important.gif") no-repeat center; + margin-right: 3px; +} + +/* Styles for chinaadd +-----------------------------------------------------------*/ + + +.chinaAddTable .tbl_add tr td input[type="text"]{ + padding:0 4px; +} + +.tbl_add tr td input[type="text"].w-50{ + width:50px; +} + +.tbl_add tr td input[type="text"].w-66{ + width:66px; +} + +.tbl_add tr td input[type="text"].w-74{ + width:74px; +} + +.tbl_add tr td input[type="text"].w-100{ + width:100px; +} + +.tbl_add tr td input[type="text"].w-112{ + width:112px; +} + +.tbl_add tr td input[type="text"].w-320{ + width:320px; +} + +.tbl_add .form_search select.sw-102 { + width: 102px; +} + +.tbl_add .form_search select.sw-210 { + width: 210px; +} + +.tbl_add .form_search select.w-76{ + width:76px; +} + +.search2 li.w-210 select{ + width:210px; +} + +.ml-10{ + margin-left:10px; +} + +.ml-16{ + margin-left:16px; +} + +.ml-24{ + margin-left:24px; +} + +.ml-38{ + margin-left:38px; +} + +.ml-48{ + margin-left:48px; +} + +.ml-72{ + margin-left:72px; +} + + +/* Styles for chinaList +-----------------------------------------------------------*/ +.tbl_scroll_wrap{ + width:100%; + overflow-x:scroll; +} + +.tbl_scroll_b{ + max-height:660px; + overflow-y:scroll; + width: 3250px; +} + +.tbl_scroll_h table{ + width:3250px; + font-size:11px; +} + +.tbl_scroll_b table{ + width:3230px; + font-size:11px; + border-top:0; +} + +.tbl_scroll_h thead tr:last-child th{ + border-top:1px solid #dcdcdc; +} + +.tbl_scroll_h thead tr:last-child th:first-child{ + border-left:1px solid #dcdcdc; +} + +.tbl_scroll_h tbody th{ + border-top:1px solid #dcdcdc; + text-align:center; +} + +.tbl_scroll_b td{ + text-align:center; +} + +.chn_table{ + position:absolute; + top:1038px; + left:0; +} + +.chn_table .pageinfo{ + padding-top:30px; +} + +.fl { + float : left; +} + +.text_num { + text-align : right !important; +} +.text_str { + text-align : left !important; +} +.text_ct { + text-align : center !important; +} +.chn_hr{ + margin:3px 0; + border:0; + border-bottom:1px solid #898989; + +} +.search_list .list-box .select_list .chn_label{ + width:40px; + padding-left:10px; + margin-left:15px; +} +.chn_radio input[type=radio]{ + vertical-align:middle; +} +.ml-8{ + margin-left:8px; +} +.chn_loading_wrap{ + display:table; + position:fixed; + top:0; + left:0; + width:100%; + height:100%; + background:#000; + opacity:.65; + z-index:999; +} +.chn_loading{ + display:table-cell; + vertical-align:middle; + text-align:center; +} \ No newline at end of file diff --git a/src/main/webapp/fancybox/blank.gif b/src/main/webapp/fancybox/blank.gif new file mode 100644 index 0000000..35d42e8 Binary files /dev/null and b/src/main/webapp/fancybox/blank.gif differ diff --git a/src/main/webapp/fancybox/fancybox_loading.gif b/src/main/webapp/fancybox/fancybox_loading.gif new file mode 100644 index 0000000..a03a40c Binary files /dev/null and b/src/main/webapp/fancybox/fancybox_loading.gif differ diff --git a/src/main/webapp/fancybox/fancybox_loading@2x.gif b/src/main/webapp/fancybox/fancybox_loading@2x.gif new file mode 100644 index 0000000..9205aeb Binary files /dev/null and b/src/main/webapp/fancybox/fancybox_loading@2x.gif differ diff --git a/src/main/webapp/fancybox/fancybox_overlay.png b/src/main/webapp/fancybox/fancybox_overlay.png new file mode 100644 index 0000000..a439139 Binary files /dev/null and b/src/main/webapp/fancybox/fancybox_overlay.png differ diff --git a/src/main/webapp/fancybox/fancybox_sprite.png b/src/main/webapp/fancybox/fancybox_sprite.png new file mode 100644 index 0000000..fd8d5ca Binary files /dev/null and b/src/main/webapp/fancybox/fancybox_sprite.png differ diff --git a/src/main/webapp/fancybox/fancybox_sprite@2x.png b/src/main/webapp/fancybox/fancybox_sprite@2x.png new file mode 100644 index 0000000..d0e4779 Binary files /dev/null and b/src/main/webapp/fancybox/fancybox_sprite@2x.png differ diff --git a/src/main/webapp/fancybox/helpers/fancybox_buttons.png b/src/main/webapp/fancybox/helpers/fancybox_buttons.png new file mode 100644 index 0000000..0787207 Binary files /dev/null and b/src/main/webapp/fancybox/helpers/fancybox_buttons.png differ diff --git a/src/main/webapp/fancybox/helpers/jquery.fancybox-buttons.css b/src/main/webapp/fancybox/helpers/jquery.fancybox-buttons.css new file mode 100644 index 0000000..a26273a --- /dev/null +++ b/src/main/webapp/fancybox/helpers/jquery.fancybox-buttons.css @@ -0,0 +1,97 @@ +#fancybox-buttons { + position: fixed; + left: 0; + width: 100%; + z-index: 8050; +} + +#fancybox-buttons.top { + top: 10px; +} + +#fancybox-buttons.bottom { + bottom: 10px; +} + +#fancybox-buttons ul { + display: block; + width: 166px; + height: 30px; + margin: 0 auto; + padding: 0; + list-style: none; + border: 1px solid #111; + border-radius: 3px; + -webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); + -moz-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); + box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); + background: rgb(50,50,50); + background: -moz-linear-gradient(top, rgb(68,68,68) 0%, rgb(52,52,52) 50%, rgb(41,41,41) 50%, rgb(51,51,51) 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(68,68,68)), color-stop(50%,rgb(52,52,52)), color-stop(50%,rgb(41,41,41)), color-stop(100%,rgb(51,51,51))); + background: -webkit-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); + background: -o-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); + background: -ms-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); + background: linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#444444', endColorstr='#222222',GradientType=0 ); +} + +#fancybox-buttons ul li { + float: left; + margin: 0; + padding: 0; +} + +#fancybox-buttons a { + display: block; + width: 30px; + height: 30px; + text-indent: -9999px; + background-color: transparent; + background-image: url('fancybox_buttons.png'); + background-repeat: no-repeat; + outline: none; + opacity: 0.8; +} + +#fancybox-buttons a:hover { + opacity: 1; +} + +#fancybox-buttons a.btnPrev { + background-position: 5px 0; +} + +#fancybox-buttons a.btnNext { + background-position: -33px 0; + border-right: 1px solid #3e3e3e; +} + +#fancybox-buttons a.btnPlay { + background-position: 0 -30px; +} + +#fancybox-buttons a.btnPlayOn { + background-position: -30px -30px; +} + +#fancybox-buttons a.btnToggle { + background-position: 3px -60px; + border-left: 1px solid #111; + border-right: 1px solid #3e3e3e; + width: 35px +} + +#fancybox-buttons a.btnToggleOn { + background-position: -27px -60px; +} + +#fancybox-buttons a.btnClose { + border-left: 1px solid #111; + width: 35px; + background-position: -56px 0px; +} + +#fancybox-buttons a.btnDisabled { + opacity : 0.4; + cursor: default; +} \ No newline at end of file diff --git a/src/main/webapp/fancybox/helpers/jquery.fancybox-buttons.js b/src/main/webapp/fancybox/helpers/jquery.fancybox-buttons.js new file mode 100644 index 0000000..fd8b955 --- /dev/null +++ b/src/main/webapp/fancybox/helpers/jquery.fancybox-buttons.js @@ -0,0 +1,122 @@ + /*! + * Buttons helper for fancyBox + * version: 1.0.5 (Mon, 15 Oct 2012) + * @requires fancyBox v2.0 or later + * + * Usage: + * $(".fancybox").fancybox({ + * helpers : { + * buttons: { + * position : 'top' + * } + * } + * }); + * + */ +(function ($) { + //Shortcut for fancyBox object + var F = $.fancybox; + + //Add helper object + F.helpers.buttons = { + defaults : { + skipSingle : false, // disables if gallery contains single image + position : 'top', // 'top' or 'bottom' + tpl : '
' + }, + + list : null, + buttons: null, + + beforeLoad: function (opts, obj) { + //Remove self if gallery do not have at least two items + + if (opts.skipSingle && obj.group.length < 2) { + obj.helpers.buttons = false; + obj.closeBtn = true; + + return; + } + + //Increase top margin to give space for buttons + obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30; + }, + + onPlayStart: function () { + if (this.buttons) { + this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn'); + } + }, + + onPlayEnd: function () { + if (this.buttons) { + this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn'); + } + }, + + afterShow: function (opts, obj) { + var buttons = this.buttons; + + if (!buttons) { + this.list = $(opts.tpl).addClass(opts.position).appendTo('body'); + + buttons = { + prev : this.list.find('.btnPrev').click( F.prev ), + next : this.list.find('.btnNext').click( F.next ), + play : this.list.find('.btnPlay').click( F.play ), + toggle : this.list.find('.btnToggle').click( F.toggle ), + close : this.list.find('.btnClose').click( F.close ) + } + } + + //Prev + if (obj.index > 0 || obj.loop) { + buttons.prev.removeClass('btnDisabled'); + } else { + buttons.prev.addClass('btnDisabled'); + } + + //Next / Play + if (obj.loop || obj.index < obj.group.length - 1) { + buttons.next.removeClass('btnDisabled'); + buttons.play.removeClass('btnDisabled'); + + } else { + buttons.next.addClass('btnDisabled'); + buttons.play.addClass('btnDisabled'); + } + + this.buttons = buttons; + + this.onUpdate(opts, obj); + }, + + onUpdate: function (opts, obj) { + var toggle; + + if (!this.buttons) { + return; + } + + toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn'); + + //Size toggle button + if (obj.canShrink) { + toggle.addClass('btnToggleOn'); + + } else if (!obj.canExpand) { + toggle.addClass('btnDisabled'); + } + }, + + beforeClose: function () { + if (this.list) { + this.list.remove(); + } + + this.list = null; + this.buttons = null; + } + }; + +}(jQuery)); diff --git a/src/main/webapp/fancybox/helpers/jquery.fancybox-media.js b/src/main/webapp/fancybox/helpers/jquery.fancybox-media.js new file mode 100644 index 0000000..3584c8a --- /dev/null +++ b/src/main/webapp/fancybox/helpers/jquery.fancybox-media.js @@ -0,0 +1,199 @@ +/*! + * Media helper for fancyBox + * version: 1.0.6 (Fri, 14 Jun 2013) + * @requires fancyBox v2.0 or later + * + * Usage: + * $(".fancybox").fancybox({ + * helpers : { + * media: true + * } + * }); + * + * Set custom URL parameters: + * $(".fancybox").fancybox({ + * helpers : { + * media: { + * youtube : { + * params : { + * autoplay : 0 + * } + * } + * } + * } + * }); + * + * Or: + * $(".fancybox").fancybox({, + * helpers : { + * media: true + * }, + * youtube : { + * autoplay: 0 + * } + * }); + * + * Supports: + * + * Youtube + * http://www.youtube.com/watch?v=opj24KnzrWo + * http://www.youtube.com/embed/opj24KnzrWo + * http://youtu.be/opj24KnzrWo + * http://www.youtube-nocookie.com/embed/opj24KnzrWo + * Vimeo + * http://vimeo.com/40648169 + * http://vimeo.com/channels/staffpicks/38843628 + * http://vimeo.com/groups/surrealism/videos/36516384 + * http://player.vimeo.com/video/45074303 + * Metacafe + * http://www.metacafe.com/watch/7635964/dr_seuss_the_lorax_movie_trailer/ + * http://www.metacafe.com/watch/7635964/ + * Dailymotion + * http://www.dailymotion.com/video/xoytqh_dr-seuss-the-lorax-premiere_people + * Twitvid + * http://twitvid.com/QY7MD + * Twitpic + * http://twitpic.com/7p93st + * Instagram + * http://instagr.am/p/IejkuUGxQn/ + * http://instagram.com/p/IejkuUGxQn/ + * Google maps + * http://maps.google.com/maps?q=Eiffel+Tower,+Avenue+Gustave+Eiffel,+Paris,+France&t=h&z=17 + * http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16 + * http://maps.google.com/?ll=48.859463,2.292626&spn=0.000965,0.002642&t=m&z=19&layer=c&cbll=48.859524,2.292532&panoid=YJ0lq28OOy3VT2IqIuVY0g&cbp=12,151.58,,0,-15.56 + */ +(function ($) { + "use strict"; + + //Shortcut for fancyBox object + var F = $.fancybox, + format = function( url, rez, params ) { + params = params || ''; + + if ( $.type( params ) === "object" ) { + params = $.param(params, true); + } + + $.each(rez, function(key, value) { + url = url.replace( '$' + key, value || '' ); + }); + + if (params.length) { + url += ( url.indexOf('?') > 0 ? '&' : '?' ) + params; + } + + return url; + }; + + //Add helper object + F.helpers.media = { + defaults : { + youtube : { + matcher : /(youtube\.com|youtu\.be|youtube-nocookie\.com)\/(watch\?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*)).*/i, + params : { + autoplay : 1, + autohide : 1, + fs : 1, + rel : 0, + hd : 1, + wmode : 'opaque', + enablejsapi : 1 + }, + type : 'iframe', + url : '//www.youtube.com/embed/$3' + }, + vimeo : { + matcher : /(?:vimeo(?:pro)?.com)\/(?:[^\d]+)?(\d+)(?:.*)/, + params : { + autoplay : 1, + hd : 1, + show_title : 1, + show_byline : 1, + show_portrait : 0, + fullscreen : 1 + }, + type : 'iframe', + url : '//player.vimeo.com/video/$1' + }, + metacafe : { + matcher : /metacafe.com\/(?:watch|fplayer)\/([\w\-]{1,10})/, + params : { + autoPlay : 'yes' + }, + type : 'swf', + url : function( rez, params, obj ) { + obj.swf.flashVars = 'playerVars=' + $.param( params, true ); + + return '//www.metacafe.com/fplayer/' + rez[1] + '/.swf'; + } + }, + dailymotion : { + matcher : /dailymotion.com\/video\/(.*)\/?(.*)/, + params : { + additionalInfos : 0, + autoStart : 1 + }, + type : 'swf', + url : '//www.dailymotion.com/swf/video/$1' + }, + twitvid : { + matcher : /twitvid\.com\/([a-zA-Z0-9_\-\?\=]+)/i, + params : { + autoplay : 0 + }, + type : 'iframe', + url : '//www.twitvid.com/embed.php?guid=$1' + }, + twitpic : { + matcher : /twitpic\.com\/(?!(?:place|photos|events)\/)([a-zA-Z0-9\?\=\-]+)/i, + type : 'image', + url : '//twitpic.com/show/full/$1/' + }, + instagram : { + matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i, + type : 'image', + url : '//$1/p/$2/media/?size=l' + }, + google_maps : { + matcher : /maps\.google\.([a-z]{2,3}(\.[a-z]{2})?)\/(\?ll=|maps\?)(.*)/i, + type : 'iframe', + url : function( rez ) { + return '//maps.google.' + rez[1] + '/' + rez[3] + '' + rez[4] + '&output=' + (rez[4].indexOf('layer=c') > 0 ? 'svembed' : 'embed'); + } + } + }, + + beforeLoad : function(opts, obj) { + var url = obj.href || '', + type = false, + what, + item, + rez, + params; + + for (what in opts) { + if (opts.hasOwnProperty(what)) { + item = opts[ what ]; + rez = url.match( item.matcher ); + + if (rez) { + type = item.type; + params = $.extend(true, {}, item.params, obj[ what ] || ($.isPlainObject(opts[ what ]) ? opts[ what ].params : null)); + + url = $.type( item.url ) === "function" ? item.url.call( this, rez, params, obj ) : format( item.url, rez, params ); + + break; + } + } + } + + if (type) { + obj.href = url; + obj.type = type; + + obj.autoHeight = false; + } + } + }; + +}(jQuery)); \ No newline at end of file diff --git a/src/main/webapp/fancybox/helpers/jquery.fancybox-thumbs.css b/src/main/webapp/fancybox/helpers/jquery.fancybox-thumbs.css new file mode 100644 index 0000000..63d2943 --- /dev/null +++ b/src/main/webapp/fancybox/helpers/jquery.fancybox-thumbs.css @@ -0,0 +1,55 @@ +#fancybox-thumbs { + position: fixed; + left: 0; + width: 100%; + overflow: hidden; + z-index: 8050; +} + +#fancybox-thumbs.bottom { + bottom: 2px; +} + +#fancybox-thumbs.top { + top: 2px; +} + +#fancybox-thumbs ul { + position: relative; + list-style: none; + margin: 0; + padding: 0; +} + +#fancybox-thumbs ul li { + float: left; + padding: 1px; + opacity: 0.5; +} + +#fancybox-thumbs ul li.active { + opacity: 0.75; + padding: 0; + border: 1px solid #fff; +} + +#fancybox-thumbs ul li:hover { + opacity: 1; +} + +#fancybox-thumbs ul li a { + display: block; + position: relative; + overflow: hidden; + border: 1px solid #222; + background: #111; + outline: none; +} + +#fancybox-thumbs ul li img { + display: block; + position: relative; + border: 0; + padding: 0; + max-width: none; +} \ No newline at end of file diff --git a/src/main/webapp/fancybox/helpers/jquery.fancybox-thumbs.js b/src/main/webapp/fancybox/helpers/jquery.fancybox-thumbs.js new file mode 100644 index 0000000..5db3d4a --- /dev/null +++ b/src/main/webapp/fancybox/helpers/jquery.fancybox-thumbs.js @@ -0,0 +1,162 @@ + /*! + * Thumbnail helper for fancyBox + * version: 1.0.7 (Mon, 01 Oct 2012) + * @requires fancyBox v2.0 or later + * + * Usage: + * $(".fancybox").fancybox({ + * helpers : { + * thumbs: { + * width : 50, + * height : 50 + * } + * } + * }); + * + */ +(function ($) { + //Shortcut for fancyBox object + var F = $.fancybox; + + //Add helper object + F.helpers.thumbs = { + defaults : { + width : 50, // thumbnail width + height : 50, // thumbnail height + position : 'bottom', // 'top' or 'bottom' + source : function ( item ) { // function to obtain the URL of the thumbnail image + var href; + + if (item.element) { + href = $(item.element).find('img').attr('src'); + } + + if (!href && item.type === 'image' && item.href) { + href = item.href; + } + + return href; + } + }, + + wrap : null, + list : null, + width : 0, + + init: function (opts, obj) { + var that = this, + list, + thumbWidth = opts.width, + thumbHeight = opts.height, + thumbSource = opts.source; + + //Build list structure + list = ''; + + for (var n = 0; n < obj.group.length; n++) { + list += '
  • '; + } + + this.wrap = $('
    ').addClass(opts.position).appendTo('body'); + this.list = $('
      ' + list + '
    ').appendTo(this.wrap); + + //Load each thumbnail + $.each(obj.group, function (i) { + var href = thumbSource( obj.group[ i ] ); + + if (!href) { + return; + } + + $("").load(function () { + var width = this.width, + height = this.height, + widthRatio, heightRatio, parent; + + if (!that.list || !width || !height) { + return; + } + + //Calculate thumbnail width/height and center it + widthRatio = width / thumbWidth; + heightRatio = height / thumbHeight; + + parent = that.list.children().eq(i).find('a'); + + if (widthRatio >= 1 && heightRatio >= 1) { + if (widthRatio > heightRatio) { + width = Math.floor(width / heightRatio); + height = thumbHeight; + + } else { + width = thumbWidth; + height = Math.floor(height / widthRatio); + } + } + + $(this).css({ + width : width, + height : height, + top : Math.floor(thumbHeight / 2 - height / 2), + left : Math.floor(thumbWidth / 2 - width / 2) + }); + + parent.width(thumbWidth).height(thumbHeight); + + $(this).hide().appendTo(parent).fadeIn(300); + + }).attr('src', href); + }); + + //Set initial width + this.width = this.list.children().eq(0).outerWidth(true); + + this.list.width(this.width * (obj.group.length + 1)).css('left', Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5))); + }, + + beforeLoad: function (opts, obj) { + //Remove self if gallery do not have at least two items + if (obj.group.length < 2) { + obj.helpers.thumbs = false; + + return; + } + + //Increase bottom margin to give space for thumbs + obj.margin[ opts.position === 'top' ? 0 : 2 ] += ((opts.height) + 15); + }, + + afterShow: function (opts, obj) { + //Check if exists and create or update list + if (this.list) { + this.onUpdate(opts, obj); + + } else { + this.init(opts, obj); + } + + //Set active element + this.list.children().removeClass('active').eq(obj.index).addClass('active'); + }, + + //Center list + onUpdate: function (opts, obj) { + if (this.list) { + this.list.stop(true).animate({ + 'left': Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5)) + }, 150); + } + }, + + beforeClose: function () { + if (this.wrap) { + this.wrap.remove(); + } + + this.wrap = null; + this.list = null; + this.width = 0; + } + } + +}(jQuery)); \ No newline at end of file diff --git a/src/main/webapp/fancybox/jquery.fancybox.css b/src/main/webapp/fancybox/jquery.fancybox.css new file mode 100644 index 0000000..367890a --- /dev/null +++ b/src/main/webapp/fancybox/jquery.fancybox.css @@ -0,0 +1,274 @@ +/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */ +.fancybox-wrap, +.fancybox-skin, +.fancybox-outer, +.fancybox-inner, +.fancybox-image, +.fancybox-wrap iframe, +.fancybox-wrap object, +.fancybox-nav, +.fancybox-nav span, +.fancybox-tmp +{ + padding: 0; + margin: 0; + border: 0; + outline: none; + vertical-align: top; +} + +.fancybox-wrap { + position: absolute; + top: 0; + left: 0; + z-index: 8020; +} + +.fancybox-skin { + position: relative; + background: #f9f9f9; + color: #444; + text-shadow: none; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.fancybox-opened { + z-index: 8030; +} + +.fancybox-opened .fancybox-skin { + -webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); + box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); +} + +.fancybox-outer, .fancybox-inner { + position: relative; +} + +.fancybox-inner { + overflow: hidden; +} + +.fancybox-type-iframe .fancybox-inner { + -webkit-overflow-scrolling: touch; +} + +.fancybox-error { + color: #444; + font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; + margin: 0; + padding: 15px; + white-space: nowrap; +} + +.fancybox-image, .fancybox-iframe { + display: block; + width: 100%; + height: 100%; +} + +.fancybox-image { + max-width: 100%; + max-height: 100%; +} + +#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { + background-image: url('fancybox_sprite.png'); +} + +#fancybox-loading { + position: fixed; + top: 50%; + left: 50%; + margin-top: -22px; + margin-left: -22px; + background-position: 0 -108px; + opacity: 0.8; + cursor: pointer; + z-index: 8060; +} + +#fancybox-loading div { + width: 44px; + height: 44px; + background: url('fancybox_loading.gif') center center no-repeat; +} + +.fancybox-close { + position: absolute; + top: -18px; + right: -18px; + width: 36px; + height: 36px; + cursor: pointer; + z-index: 8040; +} + +.fancybox-nav { + position: absolute; + top: 0; + width: 40%; + height: 100%; + cursor: pointer; + text-decoration: none; + background: transparent url('blank.gif'); /* helps IE */ + -webkit-tap-highlight-color: rgba(0,0,0,0); + z-index: 8040; +} + +.fancybox-prev { + left: 0; +} + +.fancybox-next { + right: 0; +} + +.fancybox-nav span { + position: absolute; + top: 50%; + width: 36px; + height: 34px; + margin-top: -18px; + cursor: pointer; + z-index: 8040; + visibility: hidden; +} + +.fancybox-prev span { + left: 10px; + background-position: 0 -36px; +} + +.fancybox-next span { + right: 10px; + background-position: 0 -72px; +} + +.fancybox-nav:hover span { + visibility: visible; +} + +.fancybox-tmp { + position: absolute; + top: -99999px; + left: -99999px; + visibility: hidden; + max-width: 99999px; + max-height: 99999px; + overflow: visible !important; +} + +/* Overlay helper */ + +.fancybox-lock { + overflow: hidden !important; + width: auto; +} + +.fancybox-lock body { + overflow: hidden !important; +} + +.fancybox-lock-test { + overflow-y: hidden !important; +} + +.fancybox-overlay { + position: absolute; + top: 0; + left: 0; + overflow: hidden; + display: none; + z-index: 8010; + background: url('fancybox_overlay.png'); +} + +.fancybox-overlay-fixed { + position: fixed; + bottom: 0; + right: 0; +} + +.fancybox-lock .fancybox-overlay { + overflow: auto; + overflow-y: scroll; +} + +/* Title helper */ + +.fancybox-title { + visibility: hidden; + font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; + position: relative; + text-shadow: none; + z-index: 8050; +} + +.fancybox-opened .fancybox-title { + visibility: visible; +} + +.fancybox-title-float-wrap { + position: absolute; + bottom: 0; + right: 50%; + margin-bottom: -35px; + z-index: 8050; + text-align: center; +} + +.fancybox-title-float-wrap .child { + display: inline-block; + margin-right: -100%; + padding: 2px 20px; + background: transparent; /* Fallback for web browsers that doesn't support RGBa */ + background: rgba(0, 0, 0, 0.8); + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; + text-shadow: 0 1px 2px #222; + color: #FFF; + font-weight: bold; + line-height: 24px; + white-space: nowrap; +} + +.fancybox-title-outside-wrap { + position: relative; + margin-top: 10px; + color: #fff; +} + +.fancybox-title-inside-wrap { + padding-top: 10px; +} + +.fancybox-title-over-wrap { + position: absolute; + bottom: 0; + left: 0; + color: #fff; + padding: 10px; + background: #000; + background: rgba(0, 0, 0, .8); +} + +/*Retina graphics!*/ +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), + only screen and (min--moz-device-pixel-ratio: 1.5), + only screen and (min-device-pixel-ratio: 1.5){ + + #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { + background-image: url('fancybox_sprite@2x.png'); + background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/ + } + + #fancybox-loading div { + background-image: url('fancybox_loading@2x.gif'); + background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/ + } +} \ No newline at end of file diff --git a/src/main/webapp/fancybox/jquery.fancybox.js b/src/main/webapp/fancybox/jquery.fancybox.js new file mode 100644 index 0000000..e8e1987 --- /dev/null +++ b/src/main/webapp/fancybox/jquery.fancybox.js @@ -0,0 +1,2020 @@ +/*! + * fancyBox - jQuery Plugin + * version: 2.1.5 (Fri, 14 Jun 2013) + * @requires jQuery v1.6 or later + * + * Examples at http://fancyapps.com/fancybox/ + * License: www.fancyapps.com/fancybox/#license + * + * Copyright 2012 Janis Skarnelis - janis@fancyapps.com + * + */ + +(function (window, document, $, undefined) { + "use strict"; + + var H = $("html"), + W = $(window), + D = $(document), + F = $.fancybox = function () { + F.open.apply( this, arguments ); + }, + IE = navigator.userAgent.match(/msie/i), + didUpdate = null, + isTouch = document.createTouch !== undefined, + + isQuery = function(obj) { + return obj && obj.hasOwnProperty && obj instanceof $; + }, + isString = function(str) { + return str && $.type(str) === "string"; + }, + isPercentage = function(str) { + return isString(str) && str.indexOf('%') > 0; + }, + isScrollable = function(el) { + return (el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth > el.clientWidth) || (el.clientHeight && el.scrollHeight > el.clientHeight))); + }, + getScalar = function(orig, dim) { + var value = parseInt(orig, 10) || 0; + + if (dim && isPercentage(orig)) { + value = F.getViewport()[ dim ] / 100 * value; + } + + return Math.ceil(value); + }, + getValue = function(value, dim) { + return getScalar(value, dim) + 'px'; + }; + + $.extend(F, { + // The current version of fancyBox + version: '2.1.5', + + defaults: { + padding : 15, + margin : 20, + + width : 800, + height : 600, + minWidth : 100, + minHeight : 100, + maxWidth : 9999, + maxHeight : 9999, + pixelRatio: 1, // Set to 2 for retina display support + + autoSize : true, + autoHeight : false, + autoWidth : false, + + autoResize : true, + autoCenter : !isTouch, + fitToView : true, + aspectRatio : false, + topRatio : 0.5, + leftRatio : 0.5, + + scrolling : 'auto', // 'auto', 'yes' or 'no' + wrapCSS : '', + + arrows : true, + closeBtn : true, + closeClick : false, + nextClick : false, + mouseWheel : true, + autoPlay : false, + playSpeed : 3000, + preload : 3, + modal : false, + loop : true, + + ajax : { + dataType : 'html', + headers : { 'X-fancyBox': true } + }, + iframe : { + scrolling : 'auto', + preload : true + }, + swf : { + wmode: 'transparent', + allowfullscreen : 'true', + allowscriptaccess : 'always' + }, + + keys : { + next : { + 13 : 'left', // enter + 34 : 'up', // page down + 39 : 'left', // right arrow + 40 : 'up' // down arrow + }, + prev : { + 8 : 'right', // backspace + 33 : 'down', // page up + 37 : 'right', // left arrow + 38 : 'down' // up arrow + }, + close : [27], // escape key + play : [32], // space - start/stop slideshow + toggle : [70] // letter "f" - toggle fullscreen + }, + + direction : { + next : 'left', + prev : 'right' + }, + + scrollOutside : true, + + // Override some properties + index : 0, + type : null, + href : null, + content : null, + title : null, + + // HTML templates + tpl: { + wrap : '
    ', + image : '', + iframe : '', + error : '

    The requested content cannot be loaded.
    Please try again later.

    ', + closeBtn : '', + next : '', + prev : '' + }, + + // Properties for each animation type + // Opening fancyBox + openEffect : 'fade', // 'elastic', 'fade' or 'none' + openSpeed : 250, + openEasing : 'swing', + openOpacity : true, + openMethod : 'zoomIn', + + // Closing fancyBox + closeEffect : 'fade', // 'elastic', 'fade' or 'none' + closeSpeed : 250, + closeEasing : 'swing', + closeOpacity : true, + closeMethod : 'zoomOut', + + // Changing next gallery item + nextEffect : 'elastic', // 'elastic', 'fade' or 'none' + nextSpeed : 250, + nextEasing : 'swing', + nextMethod : 'changeIn', + + // Changing previous gallery item + prevEffect : 'elastic', // 'elastic', 'fade' or 'none' + prevSpeed : 250, + prevEasing : 'swing', + prevMethod : 'changeOut', + + // Enable default helpers + helpers : { + overlay : true, + title : true + }, + + // Callbacks + onCancel : $.noop, // If canceling + beforeLoad : $.noop, // Before loading + afterLoad : $.noop, // After loading + beforeShow : $.noop, // Before changing in current item + afterShow : $.noop, // After opening + beforeChange : $.noop, // Before changing gallery item + beforeClose : $.noop, // Before closing + afterClose : $.noop // After closing + }, + + //Current state + group : {}, // Selected group + opts : {}, // Group options + previous : null, // Previous element + coming : null, // Element being loaded + current : null, // Currently loaded element + isActive : false, // Is activated + isOpen : false, // Is currently open + isOpened : false, // Have been fully opened at least once + + wrap : null, + skin : null, + outer : null, + inner : null, + + player : { + timer : null, + isActive : false + }, + + // Loaders + ajaxLoad : null, + imgPreload : null, + + // Some collections + transitions : {}, + helpers : {}, + + /* + * Static methods + */ + + open: function (group, opts) { + if (!group) { + return; + } + + if (!$.isPlainObject(opts)) { + opts = {}; + } + + // Close if already active + if (false === F.close(true)) { + return; + } + + // Normalize group + if (!$.isArray(group)) { + group = isQuery(group) ? $(group).get() : [group]; + } + + // Recheck if the type of each element is `object` and set content type (image, ajax, etc) + $.each(group, function(i, element) { + var obj = {}, + href, + title, + content, + type, + rez, + hrefParts, + selector; + + if ($.type(element) === "object") { + // Check if is DOM element + if (element.nodeType) { + element = $(element); + } + + if (isQuery(element)) { + obj = { + href : element.data('fancybox-href') || element.attr('href'), + title : element.data('fancybox-title') || element.attr('title'), + isDom : true, + element : element + }; + + if ($.metadata) { + $.extend(true, obj, element.metadata()); + } + + } else { + obj = element; + } + } + + href = opts.href || obj.href || (isString(element) ? element : null); + title = opts.title !== undefined ? opts.title : obj.title || ''; + + content = opts.content || obj.content; + type = content ? 'html' : (opts.type || obj.type); + + if (!type && obj.isDom) { + type = element.data('fancybox-type'); + + if (!type) { + rez = element.prop('class').match(/fancybox\.(\w+)/); + type = rez ? rez[1] : null; + } + } + + if (isString(href)) { + // Try to guess the content type + if (!type) { + if (F.isImage(href)) { + type = 'image'; + + } else if (F.isSWF(href)) { + type = 'swf'; + + } else if (href.charAt(0) === '#') { + type = 'inline'; + + } else if (isString(element)) { + type = 'html'; + content = element; + } + } + + // Split url into two pieces with source url and content selector, e.g, + // "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id" + if (type === 'ajax') { + hrefParts = href.split(/\s+/, 2); + href = hrefParts.shift(); + selector = hrefParts.shift(); + } + } + + if (!content) { + if (type === 'inline') { + if (href) { + content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7 + + } else if (obj.isDom) { + content = element; + } + + } else if (type === 'html') { + content = href; + + } else if (!type && !href && obj.isDom) { + type = 'inline'; + content = element; + } + } + + $.extend(obj, { + href : href, + type : type, + content : content, + title : title, + selector : selector + }); + + group[ i ] = obj; + }); + + // Extend the defaults + F.opts = $.extend(true, {}, F.defaults, opts); + + // All options are merged recursive except keys + if (opts.keys !== undefined) { + F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false; + } + + F.group = group; + + return F._start(F.opts.index); + }, + + // Cancel image loading or abort ajax request + cancel: function () { + var coming = F.coming; + + if (!coming || false === F.trigger('onCancel')) { + return; + } + + F.hideLoading(); + + if (F.ajaxLoad) { + F.ajaxLoad.abort(); + } + + F.ajaxLoad = null; + + if (F.imgPreload) { + F.imgPreload.onload = F.imgPreload.onerror = null; + } + + if (coming.wrap) { + coming.wrap.stop(true, true).trigger('onReset').remove(); + } + + F.coming = null; + + // If the first item has been canceled, then clear everything + if (!F.current) { + F._afterZoomOut( coming ); + } + }, + + // Start closing animation if is open; remove immediately if opening/closing + close: function (event) { + F.cancel(); + + if (false === F.trigger('beforeClose')) { + return; + } + + F.unbindEvents(); + + if (!F.isActive) { + return; + } + + if (!F.isOpen || event === true) { + $('.fancybox-wrap').stop(true).trigger('onReset').remove(); + + F._afterZoomOut(); + + } else { + F.isOpen = F.isOpened = false; + F.isClosing = true; + + $('.fancybox-item, .fancybox-nav').remove(); + + F.wrap.stop(true, true).removeClass('fancybox-opened'); + + F.transitions[ F.current.closeMethod ](); + } + }, + + // Manage slideshow: + // $.fancybox.play(); - toggle slideshow + // $.fancybox.play( true ); - start + // $.fancybox.play( false ); - stop + play: function ( action ) { + var clear = function () { + clearTimeout(F.player.timer); + }, + set = function () { + clear(); + + if (F.current && F.player.isActive) { + F.player.timer = setTimeout(F.next, F.current.playSpeed); + } + }, + stop = function () { + clear(); + + D.unbind('.player'); + + F.player.isActive = false; + + F.trigger('onPlayEnd'); + }, + start = function () { + if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) { + F.player.isActive = true; + + D.bind({ + 'onCancel.player beforeClose.player' : stop, + 'onUpdate.player' : set, + 'beforeLoad.player' : clear + }); + + set(); + + F.trigger('onPlayStart'); + } + }; + + if (action === true || (!F.player.isActive && action !== false)) { + start(); + } else { + stop(); + } + }, + + // Navigate to next gallery item + next: function ( direction ) { + var current = F.current; + + if (current) { + if (!isString(direction)) { + direction = current.direction.next; + } + + F.jumpto(current.index + 1, direction, 'next'); + } + }, + + // Navigate to previous gallery item + prev: function ( direction ) { + var current = F.current; + + if (current) { + if (!isString(direction)) { + direction = current.direction.prev; + } + + F.jumpto(current.index - 1, direction, 'prev'); + } + }, + + // Navigate to gallery item by index + jumpto: function ( index, direction, router ) { + var current = F.current; + + if (!current) { + return; + } + + index = getScalar(index); + + F.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ]; + F.router = router || 'jumpto'; + + if (current.loop) { + if (index < 0) { + index = current.group.length + (index % current.group.length); + } + + index = index % current.group.length; + } + + if (current.group[ index ] !== undefined) { + F.cancel(); + + F._start(index); + } + }, + + // Center inside viewport and toggle position type to fixed or absolute if needed + reposition: function (e, onlyAbsolute) { + var current = F.current, + wrap = current ? current.wrap : null, + pos; + + if (wrap) { + pos = F._getPosition(onlyAbsolute); + + if (e && e.type === 'scroll') { + delete pos.position; + + wrap.stop(true, true).animate(pos, 200); + + } else { + wrap.css(pos); + + current.pos = $.extend({}, current.dim, pos); + } + } + }, + + update: function (e) { + var type = (e && e.type), + anyway = !type || type === 'orientationchange'; + + if (anyway) { + clearTimeout(didUpdate); + + didUpdate = null; + } + + if (!F.isOpen || didUpdate) { + return; + } + + didUpdate = setTimeout(function() { + var current = F.current; + + if (!current || F.isClosing) { + return; + } + + F.wrap.removeClass('fancybox-tmp'); + + if (anyway || type === 'load' || (type === 'resize' && current.autoResize)) { + F._setDimension(); + } + + if (!(type === 'scroll' && current.canShrink)) { + F.reposition(e); + } + + F.trigger('onUpdate'); + + didUpdate = null; + + }, (anyway && !isTouch ? 0 : 300)); + }, + + // Shrink content to fit inside viewport or restore if resized + toggle: function ( action ) { + if (F.isOpen) { + F.current.fitToView = $.type(action) === "boolean" ? action : !F.current.fitToView; + + // Help browser to restore document dimensions + if (isTouch) { + F.wrap.removeAttr('style').addClass('fancybox-tmp'); + + F.trigger('onUpdate'); + } + + F.update(); + } + }, + + hideLoading: function () { + D.unbind('.loading'); + + $('#fancybox-loading').remove(); + }, + + showLoading: function () { + var el, viewport; + + F.hideLoading(); + + el = $('
    ').click(F.cancel).appendTo('body'); + + // If user will press the escape-button, the request will be canceled + D.bind('keydown.loading', function(e) { + if ((e.which || e.keyCode) === 27) { + e.preventDefault(); + + F.cancel(); + } + }); + + if (!F.defaults.fixed) { + viewport = F.getViewport(); + + el.css({ + position : 'absolute', + top : (viewport.h * 0.5) + viewport.y, + left : (viewport.w * 0.5) + viewport.x + }); + } + }, + + getViewport: function () { + var locked = (F.current && F.current.locked) || false, + rez = { + x: W.scrollLeft(), + y: W.scrollTop() + }; + + if (locked) { + rez.w = locked[0].clientWidth; + rez.h = locked[0].clientHeight; + + } else { + // See http://bugs.jquery.com/ticket/6724 + rez.w = isTouch && window.innerWidth ? window.innerWidth : W.width(); + rez.h = isTouch && window.innerHeight ? window.innerHeight : W.height(); + } + + return rez; + }, + + // Unbind the keyboard / clicking actions + unbindEvents: function () { + if (F.wrap && isQuery(F.wrap)) { + F.wrap.unbind('.fb'); + } + + D.unbind('.fb'); + W.unbind('.fb'); + }, + + bindEvents: function () { + var current = F.current, + keys; + + if (!current) { + return; + } + + // Changing document height on iOS devices triggers a 'resize' event, + // that can change document height... repeating infinitely + W.bind('orientationchange.fb' + (isTouch ? '' : ' resize.fb') + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update); + + keys = current.keys; + + if (keys) { + D.bind('keydown.fb', function (e) { + var code = e.which || e.keyCode, + target = e.target || e.srcElement; + + // Skip esc key if loading, because showLoading will cancel preloading + if (code === 27 && F.coming) { + return false; + } + + // Ignore key combinations and key events within form elements + if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) { + $.each(keys, function(i, val) { + if (current.group.length > 1 && val[ code ] !== undefined) { + F[ i ]( val[ code ] ); + + e.preventDefault(); + return false; + } + + if ($.inArray(code, val) > -1) { + F[ i ] (); + + e.preventDefault(); + return false; + } + }); + } + }); + } + + if ($.fn.mousewheel && current.mouseWheel) { + F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) { + var target = e.target || null, + parent = $(target), + canScroll = false; + + while (parent.length) { + if (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) { + break; + } + + canScroll = isScrollable( parent[0] ); + parent = $(parent).parent(); + } + + if (delta !== 0 && !canScroll) { + if (F.group.length > 1 && !current.canShrink) { + if (deltaY > 0 || deltaX > 0) { + F.prev( deltaY > 0 ? 'down' : 'left' ); + + } else if (deltaY < 0 || deltaX < 0) { + F.next( deltaY < 0 ? 'up' : 'right' ); + } + + e.preventDefault(); + } + } + }); + } + }, + + trigger: function (event, o) { + var ret, obj = o || F.coming || F.current; + + if (!obj) { + return; + } + + if ($.isFunction( obj[event] )) { + ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1)); + } + + if (ret === false) { + return false; + } + + if (obj.helpers) { + $.each(obj.helpers, function (helper, opts) { + if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) { + F.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), obj); + } + }); + } + + D.trigger(event); + }, + + isImage: function (str) { + return isString(str) && str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i); + }, + + isSWF: function (str) { + return isString(str) && str.match(/\.(swf)((\?|#).*)?$/i); + }, + + _start: function (index) { + var coming = {}, + obj, + href, + type, + margin, + padding; + + index = getScalar( index ); + obj = F.group[ index ] || null; + + if (!obj) { + return false; + } + + coming = $.extend(true, {}, F.opts, obj); + + // Convert margin and padding properties to array - top, right, bottom, left + margin = coming.margin; + padding = coming.padding; + + if ($.type(margin) === 'number') { + coming.margin = [margin, margin, margin, margin]; + } + + if ($.type(padding) === 'number') { + coming.padding = [padding, padding, padding, padding]; + } + + // 'modal' propery is just a shortcut + if (coming.modal) { + $.extend(true, coming, { + closeBtn : false, + closeClick : false, + nextClick : false, + arrows : false, + mouseWheel : false, + keys : null, + helpers: { + overlay : { + closeClick : false + } + } + }); + } + + // 'autoSize' property is a shortcut, too + if (coming.autoSize) { + coming.autoWidth = coming.autoHeight = true; + } + + if (coming.width === 'auto') { + coming.autoWidth = true; + } + + if (coming.height === 'auto') { + coming.autoHeight = true; + } + + /* + * Add reference to the group, so it`s possible to access from callbacks, example: + * afterLoad : function() { + * this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : ''); + * } + */ + + coming.group = F.group; + coming.index = index; + + // Give a chance for callback or helpers to update coming item (type, title, etc) + F.coming = coming; + + if (false === F.trigger('beforeLoad')) { + F.coming = null; + + return; + } + + type = coming.type; + href = coming.href; + + if (!type) { + F.coming = null; + + //If we can not determine content type then drop silently or display next/prev item if looping through gallery + if (F.current && F.router && F.router !== 'jumpto') { + F.current.index = index; + + return F[ F.router ]( F.direction ); + } + + return false; + } + + F.isActive = true; + + if (type === 'image' || type === 'swf') { + coming.autoHeight = coming.autoWidth = false; + coming.scrolling = 'visible'; + } + + if (type === 'image') { + coming.aspectRatio = true; + } + + if (type === 'iframe' && isTouch) { + coming.scrolling = 'scroll'; + } + + // Build the neccessary markup + coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' ); + + $.extend(coming, { + skin : $('.fancybox-skin', coming.wrap), + outer : $('.fancybox-outer', coming.wrap), + inner : $('.fancybox-inner', coming.wrap) + }); + + $.each(["Top", "Right", "Bottom", "Left"], function(i, v) { + coming.skin.css('padding' + v, getValue(coming.padding[ i ])); + }); + + F.trigger('onReady'); + + // Check before try to load; 'inline' and 'html' types need content, others - href + if (type === 'inline' || type === 'html') { + if (!coming.content || !coming.content.length) { + return F._error( 'content' ); + } + + } else if (!href) { + return F._error( 'href' ); + } + + if (type === 'image') { + F._loadImage(); + + } else if (type === 'ajax') { + F._loadAjax(); + + } else if (type === 'iframe') { + F._loadIframe(); + + } else { + F._afterLoad(); + } + }, + + _error: function ( type ) { + $.extend(F.coming, { + type : 'html', + autoWidth : true, + autoHeight : true, + minWidth : 0, + minHeight : 0, + scrolling : 'no', + hasError : type, + content : F.coming.tpl.error + }); + + F._afterLoad(); + }, + + _loadImage: function () { + // Reset preload image so it is later possible to check "complete" property + var img = F.imgPreload = new Image(); + + img.onload = function () { + this.onload = this.onerror = null; + + F.coming.width = this.width / F.opts.pixelRatio; + F.coming.height = this.height / F.opts.pixelRatio; + + F._afterLoad(); + }; + + img.onerror = function () { + this.onload = this.onerror = null; + + F._error( 'image' ); + }; + + img.src = F.coming.href; + + if (img.complete !== true) { + F.showLoading(); + } + }, + + _loadAjax: function () { + var coming = F.coming; + + F.showLoading(); + + F.ajaxLoad = $.ajax($.extend({}, coming.ajax, { + url: coming.href, + error: function (jqXHR, textStatus) { + if (F.coming && textStatus !== 'abort') { + F._error( 'ajax', jqXHR ); + + } else { + F.hideLoading(); + } + }, + success: function (data, textStatus) { + if (textStatus === 'success') { + coming.content = data; + + F._afterLoad(); + } + } + })); + }, + + _loadIframe: function() { + var coming = F.coming, + iframe = $(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime())) + .attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling) + .attr('src', coming.href); + + // This helps IE + $(coming.wrap).bind('onReset', function () { + try { + $(this).find('iframe').hide().attr('src', '//about:blank').end().empty(); + } catch (e) {} + }); + + if (coming.iframe.preload) { + F.showLoading(); + + iframe.one('load', function() { + $(this).data('ready', 1); + + // iOS will lose scrolling if we resize + if (!isTouch) { + $(this).bind('load.fb', F.update); + } + + // Without this trick: + // - iframe won't scroll on iOS devices + // - IE7 sometimes displays empty iframe + $(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show(); + + F._afterLoad(); + }); + } + + coming.content = iframe.appendTo( coming.inner ); + + if (!coming.iframe.preload) { + F._afterLoad(); + } + }, + + _preloadImages: function() { + var group = F.group, + current = F.current, + len = group.length, + cnt = current.preload ? Math.min(current.preload, len - 1) : 0, + item, + i; + + for (i = 1; i <= cnt; i += 1) { + item = group[ (current.index + i ) % len ]; + + if (item.type === 'image' && item.href) { + new Image().src = item.href; + } + } + }, + + _afterLoad: function () { + var coming = F.coming, + previous = F.current, + placeholder = 'fancybox-placeholder', + current, + content, + type, + scrolling, + href, + embed; + + F.hideLoading(); + + if (!coming || F.isActive === false) { + return; + } + + if (false === F.trigger('afterLoad', coming, previous)) { + coming.wrap.stop(true).trigger('onReset').remove(); + + F.coming = null; + + return; + } + + if (previous) { + F.trigger('beforeChange', previous); + + previous.wrap.stop(true).removeClass('fancybox-opened') + .find('.fancybox-item, .fancybox-nav') + .remove(); + } + + F.unbindEvents(); + + current = coming; + content = coming.content; + type = coming.type; + scrolling = coming.scrolling; + + $.extend(F, { + wrap : current.wrap, + skin : current.skin, + outer : current.outer, + inner : current.inner, + current : current, + previous : previous + }); + + href = current.href; + + switch (type) { + case 'inline': + case 'ajax': + case 'html': + if (current.selector) { + content = $('
    ').html(content).find(current.selector); + + } else if (isQuery(content)) { + if (!content.data(placeholder)) { + content.data(placeholder, $('
    ').insertAfter( content ).hide() ); + } + + content = content.show().detach(); + + current.wrap.bind('onReset', function () { + if ($(this).find(content).length) { + content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false); + } + }); + } + break; + + case 'image': + content = current.tpl.image.replace('{href}', href); + break; + + case 'swf': + content = ''; + embed = ''; + + $.each(current.swf, function(name, val) { + content += ''; + embed += ' ' + name + '="' + val + '"'; + }); + + content += ''; + break; + } + + if (!(isQuery(content) && content.parent().is(current.inner))) { + current.inner.append( content ); + } + + // Give a chance for helpers or callbacks to update elements + F.trigger('beforeShow'); + + // Set scrolling before calculating dimensions + current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling)); + + // Set initial dimensions and start position + F._setDimension(); + + F.reposition(); + + F.isOpen = false; + F.coming = null; + + F.bindEvents(); + + if (!F.isOpened) { + $('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove(); + + } else if (previous.prevMethod) { + F.transitions[ previous.prevMethod ](); + } + + F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ](); + + F._preloadImages(); + }, + + _setDimension: function () { + var viewport = F.getViewport(), + steps = 0, + canShrink = false, + canExpand = false, + wrap = F.wrap, + skin = F.skin, + inner = F.inner, + current = F.current, + width = current.width, + height = current.height, + minWidth = current.minWidth, + minHeight = current.minHeight, + maxWidth = current.maxWidth, + maxHeight = current.maxHeight, + scrolling = current.scrolling, + scrollOut = current.scrollOutside ? current.scrollbarWidth : 0, + margin = current.margin, + wMargin = getScalar(margin[1] + margin[3]), + hMargin = getScalar(margin[0] + margin[2]), + wPadding, + hPadding, + wSpace, + hSpace, + origWidth, + origHeight, + origMaxWidth, + origMaxHeight, + ratio, + width_, + height_, + maxWidth_, + maxHeight_, + iframe, + body; + + // Reset dimensions so we could re-check actual size + wrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp'); + + wPadding = getScalar(skin.outerWidth(true) - skin.width()); + hPadding = getScalar(skin.outerHeight(true) - skin.height()); + + // Any space between content and viewport (margin, padding, border, title) + wSpace = wMargin + wPadding; + hSpace = hMargin + hPadding; + + origWidth = isPercentage(width) ? (viewport.w - wSpace) * getScalar(width) / 100 : width; + origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height; + + if (current.type === 'iframe') { + iframe = current.content; + + if (current.autoHeight && iframe.data('ready') === 1) { + try { + if (iframe[0].contentWindow.document.location) { + inner.width( origWidth ).height(9999); + + body = iframe.contents().find('body'); + + if (scrollOut) { + body.css('overflow-x', 'hidden'); + } + + origHeight = body.outerHeight(true); + } + + } catch (e) {} + } + + } else if (current.autoWidth || current.autoHeight) { + inner.addClass( 'fancybox-tmp' ); + + // Set width or height in case we need to calculate only one dimension + if (!current.autoWidth) { + inner.width( origWidth ); + } + + if (!current.autoHeight) { + inner.height( origHeight ); + } + + if (current.autoWidth) { + origWidth = inner.width(); + } + + if (current.autoHeight) { + origHeight = inner.height(); + } + + inner.removeClass( 'fancybox-tmp' ); + } + + width = getScalar( origWidth ); + height = getScalar( origHeight ); + + ratio = origWidth / origHeight; + + // Calculations for the content + minWidth = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth); + maxWidth = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth); + + minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight); + maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight); + + // These will be used to determine if wrap can fit in the viewport + origMaxWidth = maxWidth; + origMaxHeight = maxHeight; + + if (current.fitToView) { + maxWidth = Math.min(viewport.w - wSpace, maxWidth); + maxHeight = Math.min(viewport.h - hSpace, maxHeight); + } + + maxWidth_ = viewport.w - wMargin; + maxHeight_ = viewport.h - hMargin; + + if (current.aspectRatio) { + if (width > maxWidth) { + width = maxWidth; + height = getScalar(width / ratio); + } + + if (height > maxHeight) { + height = maxHeight; + width = getScalar(height * ratio); + } + + if (width < minWidth) { + width = minWidth; + height = getScalar(width / ratio); + } + + if (height < minHeight) { + height = minHeight; + width = getScalar(height * ratio); + } + + } else { + width = Math.max(minWidth, Math.min(width, maxWidth)); + + if (current.autoHeight && current.type !== 'iframe') { + inner.width( width ); + + height = inner.height(); + } + + height = Math.max(minHeight, Math.min(height, maxHeight)); + } + + // Try to fit inside viewport (including the title) + if (current.fitToView) { + inner.width( width ).height( height ); + + wrap.width( width + wPadding ); + + // Real wrap dimensions + width_ = wrap.width(); + height_ = wrap.height(); + + if (current.aspectRatio) { + while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) { + if (steps++ > 19) { + break; + } + + height = Math.max(minHeight, Math.min(maxHeight, height - 10)); + width = getScalar(height * ratio); + + if (width < minWidth) { + width = minWidth; + height = getScalar(width / ratio); + } + + if (width > maxWidth) { + width = maxWidth; + height = getScalar(width / ratio); + } + + inner.width( width ).height( height ); + + wrap.width( width + wPadding ); + + width_ = wrap.width(); + height_ = wrap.height(); + } + + } else { + width = Math.max(minWidth, Math.min(width, width - (width_ - maxWidth_))); + height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_))); + } + } + + if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) { + width += scrollOut; + } + + inner.width( width ).height( height ); + + wrap.width( width + wPadding ); + + width_ = wrap.width(); + height_ = wrap.height(); + + canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight; + canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight)); + + $.extend(current, { + dim : { + width : getValue( width_ ), + height : getValue( height_ ) + }, + origWidth : origWidth, + origHeight : origHeight, + canShrink : canShrink, + canExpand : canExpand, + wPadding : wPadding, + hPadding : hPadding, + wrapSpace : height_ - skin.outerHeight(true), + skinSpace : skin.height() - height + }); + + if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) { + inner.height('auto'); + } + }, + + _getPosition: function (onlyAbsolute) { + var current = F.current, + viewport = F.getViewport(), + margin = current.margin, + width = F.wrap.width() + margin[1] + margin[3], + height = F.wrap.height() + margin[0] + margin[2], + rez = { + position: 'absolute', + top : margin[0], + left : margin[3] + }; + + if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) { + rez.position = 'fixed'; + + } else if (!current.locked) { + rez.top += viewport.y; + rez.left += viewport.x; + } + + rez.top = getValue(Math.max(rez.top, rez.top + ((viewport.h - height) * current.topRatio))); + rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width) * current.leftRatio))); + + return rez; + }, + + _afterZoomIn: function () { + var current = F.current; + + if (!current) { + return; + } + + F.isOpen = F.isOpened = true; + + F.wrap.css('overflow', 'visible').addClass('fancybox-opened'); + + F.update(); + + // Assign a click event + if ( current.closeClick || (current.nextClick && F.group.length > 1) ) { + F.inner.css('cursor', 'pointer').bind('click.fb', function(e) { + if (!$(e.target).is('a') && !$(e.target).parent().is('a')) { + e.preventDefault(); + + F[ current.closeClick ? 'close' : 'next' ](); + } + }); + } + + // Create a close button + if (current.closeBtn) { + $(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) { + e.preventDefault(); + + F.close(); + }); + } + + // Create navigation arrows + if (current.arrows && F.group.length > 1) { + if (current.loop || current.index > 0) { + $(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev); + } + + if (current.loop || current.index < F.group.length - 1) { + $(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next); + } + } + + F.trigger('afterShow'); + + // Stop the slideshow if this is the last item + if (!current.loop && current.index === current.group.length - 1) { + F.play( false ); + + } else if (F.opts.autoPlay && !F.player.isActive) { + F.opts.autoPlay = false; + + F.play(); + } + }, + + _afterZoomOut: function ( obj ) { + obj = obj || F.current; + + $('.fancybox-wrap').trigger('onReset').remove(); + + $.extend(F, { + group : {}, + opts : {}, + router : false, + current : null, + isActive : false, + isOpened : false, + isOpen : false, + isClosing : false, + wrap : null, + skin : null, + outer : null, + inner : null + }); + + F.trigger('afterClose', obj); + } + }); + + /* + * Default transitions + */ + + F.transitions = { + getOrigPosition: function () { + var current = F.current, + element = current.element, + orig = current.orig, + pos = {}, + width = 50, + height = 50, + hPadding = current.hPadding, + wPadding = current.wPadding, + viewport = F.getViewport(); + + if (!orig && current.isDom && element.is(':visible')) { + orig = element.find('img:first'); + + if (!orig.length) { + orig = element; + } + } + + if (isQuery(orig)) { + pos = orig.offset(); + + if (orig.is('img')) { + width = orig.outerWidth(); + height = orig.outerHeight(); + } + + } else { + pos.top = viewport.y + (viewport.h - height) * current.topRatio; + pos.left = viewport.x + (viewport.w - width) * current.leftRatio; + } + + if (F.wrap.css('position') === 'fixed' || current.locked) { + pos.top -= viewport.y; + pos.left -= viewport.x; + } + + pos = { + top : getValue(pos.top - hPadding * current.topRatio), + left : getValue(pos.left - wPadding * current.leftRatio), + width : getValue(width + wPadding), + height : getValue(height + hPadding) + }; + + return pos; + }, + + step: function (now, fx) { + var ratio, + padding, + value, + prop = fx.prop, + current = F.current, + wrapSpace = current.wrapSpace, + skinSpace = current.skinSpace; + + if (prop === 'width' || prop === 'height') { + ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start); + + if (F.isClosing) { + ratio = 1 - ratio; + } + + padding = prop === 'width' ? current.wPadding : current.hPadding; + value = now - padding; + + F.skin[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) ) ); + F.inner[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) ); + } + }, + + zoomIn: function () { + var current = F.current, + startPos = current.pos, + effect = current.openEffect, + elastic = effect === 'elastic', + endPos = $.extend({opacity : 1}, startPos); + + // Remove "position" property that breaks older IE + delete endPos.position; + + if (elastic) { + startPos = this.getOrigPosition(); + + if (current.openOpacity) { + startPos.opacity = 0.1; + } + + } else if (effect === 'fade') { + startPos.opacity = 0.1; + } + + F.wrap.css(startPos).animate(endPos, { + duration : effect === 'none' ? 0 : current.openSpeed, + easing : current.openEasing, + step : elastic ? this.step : null, + complete : F._afterZoomIn + }); + }, + + zoomOut: function () { + var current = F.current, + effect = current.closeEffect, + elastic = effect === 'elastic', + endPos = {opacity : 0.1}; + + if (elastic) { + endPos = this.getOrigPosition(); + + if (current.closeOpacity) { + endPos.opacity = 0.1; + } + } + + F.wrap.animate(endPos, { + duration : effect === 'none' ? 0 : current.closeSpeed, + easing : current.closeEasing, + step : elastic ? this.step : null, + complete : F._afterZoomOut + }); + }, + + changeIn: function () { + var current = F.current, + effect = current.nextEffect, + startPos = current.pos, + endPos = { opacity : 1 }, + direction = F.direction, + distance = 200, + field; + + startPos.opacity = 0.1; + + if (effect === 'elastic') { + field = direction === 'down' || direction === 'up' ? 'top' : 'left'; + + if (direction === 'down' || direction === 'right') { + startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance); + endPos[ field ] = '+=' + distance + 'px'; + + } else { + startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance); + endPos[ field ] = '-=' + distance + 'px'; + } + } + + // Workaround for http://bugs.jquery.com/ticket/12273 + if (effect === 'none') { + F._afterZoomIn(); + + } else { + F.wrap.css(startPos).animate(endPos, { + duration : current.nextSpeed, + easing : current.nextEasing, + complete : F._afterZoomIn + }); + } + }, + + changeOut: function () { + var previous = F.previous, + effect = previous.prevEffect, + endPos = { opacity : 0.1 }, + direction = F.direction, + distance = 200; + + if (effect === 'elastic') { + endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px'; + } + + previous.wrap.animate(endPos, { + duration : effect === 'none' ? 0 : previous.prevSpeed, + easing : previous.prevEasing, + complete : function () { + $(this).trigger('onReset').remove(); + } + }); + } + }; + + /* + * Overlay helper + */ + + F.helpers.overlay = { + defaults : { + closeClick : true, // if true, fancyBox will be closed when user clicks on the overlay + speedOut : 200, // duration of fadeOut animation + showEarly : true, // indicates if should be opened immediately or wait until the content is ready + css : {}, // custom CSS properties + locked : !isTouch, // if true, the content will be locked into overlay + fixed : true // if false, the overlay CSS position property will not be set to "fixed" + }, + + overlay : null, // current handle + fixed : false, // indicates if the overlay has position "fixed" + el : $('html'), // element that contains "the lock" + + // Public methods + create : function(opts) { + opts = $.extend({}, this.defaults, opts); + + if (this.overlay) { + this.close(); + } + + this.overlay = $('
    ').appendTo( F.coming ? F.coming.parent : opts.parent ); + this.fixed = false; + + if (opts.fixed && F.defaults.fixed) { + this.overlay.addClass('fancybox-overlay-fixed'); + + this.fixed = true; + } + }, + + open : function(opts) { + var that = this; + + opts = $.extend({}, this.defaults, opts); + + if (this.overlay) { + this.overlay.unbind('.overlay').width('auto').height('auto'); + + } else { + this.create(opts); + } + + if (!this.fixed) { + W.bind('resize.overlay', $.proxy( this.update, this) ); + + this.update(); + } + + if (opts.closeClick) { + this.overlay.bind('click.overlay', function(e) { + if ($(e.target).hasClass('fancybox-overlay')) { + if (F.isActive) { + F.close(); + } else { + that.close(); + } + + return false; + } + }); + } + + this.overlay.css( opts.css ).show(); + }, + + close : function() { + var scrollV, scrollH; + + W.unbind('resize.overlay'); + + if (this.el.hasClass('fancybox-lock')) { + $('.fancybox-margin').removeClass('fancybox-margin'); + + scrollV = W.scrollTop(); + scrollH = W.scrollLeft(); + + this.el.removeClass('fancybox-lock'); + + W.scrollTop( scrollV ).scrollLeft( scrollH ); + } + + $('.fancybox-overlay').remove().hide(); + + $.extend(this, { + overlay : null, + fixed : false + }); + }, + + // Private, callbacks + + update : function () { + var width = '100%', offsetWidth; + + // Reset width/height so it will not mess + this.overlay.width(width).height('100%'); + + // jQuery does not return reliable result for IE + if (IE) { + offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth); + + if (D.width() > offsetWidth) { + width = D.width(); + } + + } else if (D.width() > W.width()) { + width = D.width(); + } + + this.overlay.width(width).height(D.height()); + }, + + // This is where we can manipulate DOM, because later it would cause iframes to reload + onReady : function (opts, obj) { + var overlay = this.overlay; + + $('.fancybox-overlay').stop(true, true); + + if (!overlay) { + this.create(opts); + } + + if (opts.locked && this.fixed && obj.fixed) { + if (!overlay) { + this.margin = D.height() > W.height() ? $('html').css('margin-right').replace("px", "") : false; + } + + obj.locked = this.overlay.append( obj.wrap ); + obj.fixed = false; + } + + if (opts.showEarly === true) { + this.beforeShow.apply(this, arguments); + } + }, + + beforeShow : function(opts, obj) { + var scrollV, scrollH; + + if (obj.locked) { + if (this.margin !== false) { + $('*').filter(function(){ + return ($(this).css('position') === 'fixed' && !$(this).hasClass("fancybox-overlay") && !$(this).hasClass("fancybox-wrap") ); + }).addClass('fancybox-margin'); + + this.el.addClass('fancybox-margin'); + } + + scrollV = W.scrollTop(); + scrollH = W.scrollLeft(); + + this.el.addClass('fancybox-lock'); + + W.scrollTop( scrollV ).scrollLeft( scrollH ); + } + + this.open(opts); + }, + + onUpdate : function() { + if (!this.fixed) { + this.update(); + } + }, + + afterClose: function (opts) { + // Remove overlay if exists and fancyBox is not opening + // (e.g., it is not being open using afterClose callback) + //if (this.overlay && !F.isActive) { + if (this.overlay && !F.coming) { + this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this )); + } + } + }; + + /* + * Title helper + */ + + F.helpers.title = { + defaults : { + type : 'float', // 'float', 'inside', 'outside' or 'over', + position : 'bottom' // 'top' or 'bottom' + }, + + beforeShow: function (opts) { + var current = F.current, + text = current.title, + type = opts.type, + title, + target; + + if ($.isFunction(text)) { + text = text.call(current.element, current); + } + + if (!isString(text) || $.trim(text) === '') { + return; + } + + title = $('
    ' + text + '
    '); + + switch (type) { + case 'inside': + target = F.skin; + break; + + case 'outside': + target = F.wrap; + break; + + case 'over': + target = F.inner; + break; + + default: // 'float' + target = F.skin; + + title.appendTo('body'); + + if (IE) { + title.width( title.width() ); + } + + title.wrapInner(''); + + //Increase bottom margin so this title will also fit into viewport + F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) ); + break; + } + + title[ (opts.position === 'top' ? 'prependTo' : 'appendTo') ](target); + } + }; + + // jQuery plugin initialization + $.fn.fancybox = function (options) { + var index, + that = $(this), + selector = this.selector || '', + run = function(e) { + var what = $(this).blur(), idx = index, relType, relVal; + + if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) { + relType = options.groupAttr || 'data-fancybox-group'; + relVal = what.attr(relType); + + if (!relVal) { + relType = 'rel'; + relVal = what.get(0)[ relType ]; + } + + if (relVal && relVal !== '' && relVal !== 'nofollow') { + what = selector.length ? $(selector) : that; + what = what.filter('[' + relType + '="' + relVal + '"]'); + idx = what.index(this); + } + + options.index = idx; + + // Stop an event from bubbling if everything is fine + if (F.open(what, options) !== false) { + e.preventDefault(); + } + } + }; + + options = options || {}; + index = options.index || 0; + + if (!selector || options.live === false) { + that.unbind('click.fb-start').bind('click.fb-start', run); + + } else { + D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run); + } + + this.filter('[data-fancybox-start=1]').trigger('click'); + + return this; + }; + + // Tests that need a body at doc ready + D.ready(function() { + var w1, w2; + + if ( $.scrollbarWidth === undefined ) { + // http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth + $.scrollbarWidth = function() { + var parent = $('
    ').appendTo('body'), + child = parent.children(), + width = child.innerWidth() - child.height( 99 ).innerWidth(); + + parent.remove(); + + return width; + }; + } + + if ( $.support.fixedPosition === undefined ) { + $.support.fixedPosition = (function() { + var elem = $('
    ').appendTo('body'), + fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 ); + + elem.remove(); + + return fixed; + }()); + } + + $.extend(F.defaults, { + scrollbarWidth : $.scrollbarWidth(), + fixed : $.support.fixedPosition, + parent : $('body') + }); + + //Get real width of page scroll-bar + w1 = $(window).width(); + + H.addClass('fancybox-lock-test'); + + w2 = $(window).width(); + + H.removeClass('fancybox-lock-test'); + + $("").appendTo("head"); + }); + +}(window, document, jQuery)); \ No newline at end of file diff --git a/src/main/webapp/fancybox/jquery.fancybox.pack.js b/src/main/webapp/fancybox/jquery.fancybox.pack.js new file mode 100644 index 0000000..73f7578 --- /dev/null +++ b/src/main/webapp/fancybox/jquery.fancybox.pack.js @@ -0,0 +1,46 @@ +/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */ +(function(r,G,f,v){var J=f("html"),n=f(r),p=f(G),b=f.fancybox=function(){b.open.apply(this,arguments)},I=navigator.userAgent.match(/msie/i),B=null,s=G.createTouch!==v,t=function(a){return a&&a.hasOwnProperty&&a instanceof f},q=function(a){return a&&"string"===f.type(a)},E=function(a){return q(a)&&0
    ',image:'',iframe:'",error:'

    The requested content cannot be loaded.
    Please try again later.

    ',closeBtn:'',next:'',prev:''},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0, +openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1, +isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=t(a)?f(a).get():[a]),f.each(a,function(e,c){var k={},g,h,j,m,l;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),t(c)?(k={href:c.data("fancybox-href")||c.attr("href"),title:c.data("fancybox-title")||c.attr("title"),isDom:!0,element:c},f.metadata&&f.extend(!0,k, +c.metadata())):k=c);g=d.href||k.href||(q(c)?c:null);h=d.title!==v?d.title:k.title||"";m=(j=d.content||k.content)?"html":d.type||k.type;!m&&k.isDom&&(m=c.data("fancybox-type"),m||(m=(m=c.prop("class").match(/fancybox\.(\w+)/))?m[1]:null));q(g)&&(m||(b.isImage(g)?m="image":b.isSWF(g)?m="swf":"#"===g.charAt(0)?m="inline":q(c)&&(m="html",j=c)),"ajax"===m&&(l=g.split(/\s+/,2),g=l.shift(),l=l.shift()));j||("inline"===m?g?j=f(q(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):k.isDom&&(j=c):"html"===m?j=g:!m&&(!g&& +k.isDom)&&(m="inline",j=c));f.extend(k,{href:g,type:m,content:j,title:h,selector:l});a[e]=k}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==v&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1!==b.trigger("onCancel")&&(b.hideLoading(),b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(),b.coming=null,b.current|| +b._afterZoomOut(a))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(!b.isOpen||!0===a?(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut()):(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&&(b.player.timer= +setTimeout(b.next,b.current.playSpeed))},c=function(){d();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};if(!0===a||!b.player.isActive&&!1!==a){if(b.current&&(b.current.loop||b.current.index=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==v&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,k;c&&(k=b._getPosition(d),a&&"scroll"===a.type?(delete k.position,c.stop(!0,!0).animate(k,200)):(c.css(k),e.pos=f.extend({},e.dim,k)))},update:function(a){var d= +a&&a.type,e=!d||"orientationchange"===d;e&&(clearTimeout(B),B=null);b.isOpen&&!B&&(B=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),B=null)},e&&!s?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,s&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"),b.trigger("onUpdate")), +b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('
    ').click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){if(27===(a.which||a.keyCode))a.preventDefault(),b.cancel()});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}))},getViewport:function(){var a=b.current&&b.current.locked||!1,d={x:n.scrollLeft(), +y:n.scrollTop()};a?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=s&&r.innerWidth?r.innerWidth:n.width(),d.h=s&&r.innerHeight?r.innerHeight:n.height());return d},unbindEvents:function(){b.wrap&&t(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");n.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(n.bind("orientationchange.fb"+(s?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&p.bind("keydown.fb",function(e){var c=e.which||e.keyCode,k=e.target||e.srcElement; +if(27===c&&b.coming)return!1;!e.ctrlKey&&(!e.altKey&&!e.shiftKey&&!e.metaKey&&(!k||!k.type&&!f(k).is("[contenteditable]")))&&f.each(d,function(d,k){if(1h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();if(0!==c&&!j&&1g||0>k)b.next(0>g?"up":"right");d.preventDefault()}}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,e){if(e&&b.helpers[d]&&f.isFunction(b.helpers[d][a]))b.helpers[d][a](f.extend(!0, +{},b.helpers[d].defaults,e),c)});p.trigger(a)}},isImage:function(a){return q(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return q(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=l(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&&(d.padding=[c,c,c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1, +mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"===c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio= +!0);"iframe"===c&&s&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(s?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,w(d.padding[a]))});b.trigger("onReady");if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href"); +"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width=this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload= +this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,d=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",s?"auto":a.iframe.scrolling).attr("src",a.href); +f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);s||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||b._afterLoad()},_preloadImages:function(){var a=b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload, +e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,k,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove());b.unbindEvents();e=a.content;c=a.type;k=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin, +outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("
    ").html(e).find(a.selector):t(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('
    ').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder",!1)}));break;case "image":e=a.tpl.image.replace("{href}", +g);break;case "swf":e='',h="",f.each(a.swf,function(a,b){e+='';h+=" "+a+'="'+b+'"'}),e+='"}(!t(e)||!e.parent().is(a.inner))&&a.inner.append(e);b.trigger("beforeShow");a.inner.css("overflow","yes"===k?"scroll": +"no"===k?"hidden":k);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(b.isOpened){if(d.prevMethod)b.transitions[d.prevMethod]()}else f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,k=b.skin,g=b.inner,h=b.current,c=h.width,j=h.height,m=h.minWidth,u=h.minHeight,n=h.maxWidth,p=h.maxHeight,s=h.scrolling,q=h.scrollOutside? +h.scrollbarWidth:0,x=h.margin,y=l(x[1]+x[3]),r=l(x[0]+x[2]),v,z,t,C,A,F,B,D,H;e.add(k).add(g).width("auto").height("auto").removeClass("fancybox-tmp");x=l(k.outerWidth(!0)-k.width());v=l(k.outerHeight(!0)-k.height());z=y+x;t=r+v;C=E(c)?(a.w-z)*l(c)/100:c;A=E(j)?(a.h-t)*l(j)/100:j;if("iframe"===h.type){if(H=h.content,h.autoHeight&&1===H.data("ready"))try{H[0].contentWindow.document.location&&(g.width(C).height(9999),F=H.contents().find("body"),q&&F.css("overflow-x","hidden"),A=F.outerHeight(!0))}catch(G){}}else if(h.autoWidth|| +h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(C),h.autoHeight||g.height(A),h.autoWidth&&(C=g.width()),h.autoHeight&&(A=g.height()),g.removeClass("fancybox-tmp");c=l(C);j=l(A);D=C/A;m=l(E(m)?l(m,"w")-z:m);n=l(E(n)?l(n,"w")-z:n);u=l(E(u)?l(u,"h")-t:u);p=l(E(p)?l(p,"h")-t:p);F=n;B=p;h.fitToView&&(n=Math.min(a.w-z,n),p=Math.min(a.h-t,p));z=a.w-y;r=a.h-r;h.aspectRatio?(c>n&&(c=n,j=l(c/D)),j>p&&(j=p,c=l(j*D)),cz||y>r)&&(c>m&&j>u)&&!(19n&&(c=n,j=l(c/D)),g.width(c).height(j),e.width(c+x),a=e.width(),y=e.height();else c=Math.max(m,Math.min(c,c-(a-z))),j=Math.max(u,Math.min(j,j-(y-r)));q&&("auto"===s&&jz||y>r)&&c>m&&j>u;c=h.aspectRatio?cu&&j
    ').appendTo(b.coming?b.coming.parent:a.parent);this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(n.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay",function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive? +b.close():d.close(),!1});this.overlay.css(a.css).show()},close:function(){var a,b;n.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),a=n.scrollTop(),b=n.scrollLeft(),this.el.removeClass("fancybox-lock"),n.scrollTop(a).scrollLeft(b));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%");I?(b=Math.max(G.documentElement.offsetWidth,G.body.offsetWidth), +p.width()>b&&(a=p.width())):p.width()>n.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var e=this.overlay;f(".fancybox-overlay").stop(!0,!0);e||this.create(a);a.locked&&(this.fixed&&b.fixed)&&(e||(this.margin=p.height()>n.height()?f("html").css("margin-right").replace("px",""):!1),b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){var e,c;b.locked&&(!1!==this.margin&&(f("*").filter(function(){return"fixed"=== +f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin")),e=n.scrollTop(),c=n.scrollLeft(),this.el.addClass("fancybox-lock"),n.scrollTop(e).scrollLeft(c));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float",position:"bottom"},beforeShow:function(a){var d= +b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(q(e)&&""!==f.trim(e)){d=f('
    '+e+"
    ");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"),I&&d.width(d.width()),d.wrapInner(''),b.current.margin[2]+=Math.abs(l(d.css("margin-bottom")))}d["top"===a.position?"prependTo":"appendTo"](c)}}};f.fn.fancybox=function(a){var d, +e=f(this),c=this.selector||"",k=function(g){var h=f(this).blur(),j=d,k,l;!g.ctrlKey&&(!g.altKey&&!g.shiftKey&&!g.metaKey)&&!h.is(".fancybox-wrap")&&(k=a.groupAttr||"data-fancybox-group",l=h.attr(k),l||(k="rel",l=h.get(0)[k]),l&&(""!==l&&"nofollow"!==l)&&(h=c.length?f(c):e,h=h.filter("["+k+'="'+l+'"]'),j=h.index(this)),a.index=j,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;!c||!1===a.live?e.unbind("click.fb-start").bind("click.fb-start",k):p.undelegate(c,"click.fb-start").delegate(c+ +":not('.fancybox-item, .fancybox-nav')","click.fb-start",k);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,d;f.scrollbarWidth===v&&(f.scrollbarWidth=function(){var a=f('
    ').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});if(f.support.fixedPosition===v){a=f.support;d=f('
    ').appendTo("body");var e=20=== +d[0].offsetTop||15===d[0].offsetTop;d.remove();a.fixedPosition=e}f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(r).width();J.addClass("fancybox-lock-test");d=f(r).width();J.removeClass("fancybox-lock-test");f("").appendTo("head")})})(window,document,jQuery); \ No newline at end of file diff --git a/src/main/webapp/images/IE9-Windows7-x64-kor.exe b/src/main/webapp/images/IE9-Windows7-x64-kor.exe new file mode 100644 index 0000000..5e0f764 Binary files /dev/null and b/src/main/webapp/images/IE9-Windows7-x64-kor.exe differ diff --git a/src/main/webapp/images/IE9-Windows7-x86-kor.exe b/src/main/webapp/images/IE9-Windows7-x86-kor.exe new file mode 100644 index 0000000..79ab18f Binary files /dev/null and b/src/main/webapp/images/IE9-Windows7-x86-kor.exe differ diff --git a/src/main/webapp/images/QnA/Step1.png b/src/main/webapp/images/QnA/Step1.png new file mode 100644 index 0000000..4f45319 Binary files /dev/null and b/src/main/webapp/images/QnA/Step1.png differ diff --git a/src/main/webapp/images/QnA/Step2.png b/src/main/webapp/images/QnA/Step2.png new file mode 100644 index 0000000..2f68b6e Binary files /dev/null and b/src/main/webapp/images/QnA/Step2.png differ diff --git a/src/main/webapp/images/QnA/Step3.png b/src/main/webapp/images/QnA/Step3.png new file mode 100644 index 0000000..56e181b Binary files /dev/null and b/src/main/webapp/images/QnA/Step3.png differ diff --git a/src/main/webapp/images/QnA/Title.png b/src/main/webapp/images/QnA/Title.png new file mode 100644 index 0000000..c63fb24 Binary files /dev/null and b/src/main/webapp/images/QnA/Title.png differ diff --git a/src/main/webapp/images/basic_img.jpg b/src/main/webapp/images/basic_img.jpg new file mode 100644 index 0000000..9deae2b Binary files /dev/null and b/src/main/webapp/images/basic_img.jpg differ diff --git a/src/main/webapp/images/body/background_sky.jpg b/src/main/webapp/images/body/background_sky.jpg new file mode 100644 index 0000000..9272d27 Binary files /dev/null and b/src/main/webapp/images/body/background_sky.jpg differ diff --git a/src/main/webapp/images/cmmn/all-btn.png b/src/main/webapp/images/cmmn/all-btn.png new file mode 100644 index 0000000..ddd358d Binary files /dev/null and b/src/main/webapp/images/cmmn/all-btn.png differ diff --git a/src/main/webapp/images/cmmn/blank_1x1.png b/src/main/webapp/images/cmmn/blank_1x1.png new file mode 100644 index 0000000..95007b9 Binary files /dev/null and b/src/main/webapp/images/cmmn/blank_1x1.png differ diff --git a/src/main/webapp/images/cmmn/btn_page_next1.gif b/src/main/webapp/images/cmmn/btn_page_next1.gif new file mode 100644 index 0000000..f62b526 Binary files /dev/null and b/src/main/webapp/images/cmmn/btn_page_next1.gif differ diff --git a/src/main/webapp/images/cmmn/btn_page_next10.gif b/src/main/webapp/images/cmmn/btn_page_next10.gif new file mode 100644 index 0000000..c69ca28 Binary files /dev/null and b/src/main/webapp/images/cmmn/btn_page_next10.gif differ diff --git a/src/main/webapp/images/cmmn/btn_page_pre1.gif b/src/main/webapp/images/cmmn/btn_page_pre1.gif new file mode 100644 index 0000000..8ccebc1 Binary files /dev/null and b/src/main/webapp/images/cmmn/btn_page_pre1.gif differ diff --git a/src/main/webapp/images/cmmn/btn_page_pre10.gif b/src/main/webapp/images/cmmn/btn_page_pre10.gif new file mode 100644 index 0000000..2504ee6 Binary files /dev/null and b/src/main/webapp/images/cmmn/btn_page_pre10.gif differ diff --git a/src/main/webapp/images/cmmn/comment.png b/src/main/webapp/images/cmmn/comment.png new file mode 100644 index 0000000..db38b0b Binary files /dev/null and b/src/main/webapp/images/cmmn/comment.png differ diff --git a/src/main/webapp/images/cmmn/create.png b/src/main/webapp/images/cmmn/create.png new file mode 100644 index 0000000..8128037 Binary files /dev/null and b/src/main/webapp/images/cmmn/create.png differ diff --git a/src/main/webapp/images/cmmn/deleate_on.png b/src/main/webapp/images/cmmn/deleate_on.png new file mode 100644 index 0000000..3ea387d Binary files /dev/null and b/src/main/webapp/images/cmmn/deleate_on.png differ diff --git a/src/main/webapp/images/cmmn/delete.png b/src/main/webapp/images/cmmn/delete.png new file mode 100644 index 0000000..9dc7ebe Binary files /dev/null and b/src/main/webapp/images/cmmn/delete.png differ diff --git a/src/main/webapp/images/cmmn/excel.png b/src/main/webapp/images/cmmn/excel.png new file mode 100644 index 0000000..0cad7c0 Binary files /dev/null and b/src/main/webapp/images/cmmn/excel.png differ diff --git a/src/main/webapp/images/cmmn/excel_on.png b/src/main/webapp/images/cmmn/excel_on.png new file mode 100644 index 0000000..24d27b8 Binary files /dev/null and b/src/main/webapp/images/cmmn/excel_on.png differ diff --git a/src/main/webapp/images/cmmn/filter.png b/src/main/webapp/images/cmmn/filter.png new file mode 100644 index 0000000..f5c31e2 Binary files /dev/null and b/src/main/webapp/images/cmmn/filter.png differ diff --git a/src/main/webapp/images/cmmn/graph.png b/src/main/webapp/images/cmmn/graph.png new file mode 100644 index 0000000..f262203 Binary files /dev/null and b/src/main/webapp/images/cmmn/graph.png differ diff --git a/src/main/webapp/images/cmmn/home.png b/src/main/webapp/images/cmmn/home.png new file mode 100644 index 0000000..0ea6b6f Binary files /dev/null and b/src/main/webapp/images/cmmn/home.png differ diff --git a/src/main/webapp/images/cmmn/icon_date.gif b/src/main/webapp/images/cmmn/icon_date.gif new file mode 100644 index 0000000..6937a80 Binary files /dev/null and b/src/main/webapp/images/cmmn/icon_date.gif differ diff --git a/src/main/webapp/images/cmmn/icon_important.gif b/src/main/webapp/images/cmmn/icon_important.gif new file mode 100644 index 0000000..612d258 Binary files /dev/null and b/src/main/webapp/images/cmmn/icon_important.gif differ diff --git a/src/main/webapp/images/cmmn/kcg-original.png b/src/main/webapp/images/cmmn/kcg-original.png new file mode 100644 index 0000000..dbbc080 Binary files /dev/null and b/src/main/webapp/images/cmmn/kcg-original.png differ diff --git a/src/main/webapp/images/cmmn/kcg.png b/src/main/webapp/images/cmmn/kcg.png new file mode 100644 index 0000000..5e5528e Binary files /dev/null and b/src/main/webapp/images/cmmn/kcg.png differ diff --git a/src/main/webapp/images/cmmn/loading.gif b/src/main/webapp/images/cmmn/loading.gif new file mode 100644 index 0000000..1c9a58c Binary files /dev/null and b/src/main/webapp/images/cmmn/loading.gif differ diff --git a/src/main/webapp/images/cmmn/location_arrow.png b/src/main/webapp/images/cmmn/location_arrow.png new file mode 100644 index 0000000..41251ab Binary files /dev/null and b/src/main/webapp/images/cmmn/location_arrow.png differ diff --git a/src/main/webapp/images/cmmn/login_bg.jpg b/src/main/webapp/images/cmmn/login_bg.jpg new file mode 100644 index 0000000..0c4904a Binary files /dev/null and b/src/main/webapp/images/cmmn/login_bg.jpg differ diff --git a/src/main/webapp/images/cmmn/logout.png b/src/main/webapp/images/cmmn/logout.png new file mode 100644 index 0000000..048e55d Binary files /dev/null and b/src/main/webapp/images/cmmn/logout.png differ diff --git a/src/main/webapp/images/cmmn/more_btn.png b/src/main/webapp/images/cmmn/more_btn.png new file mode 100644 index 0000000..fe6a639 Binary files /dev/null and b/src/main/webapp/images/cmmn/more_btn.png differ diff --git a/src/main/webapp/images/cmmn/more_btn_on.png b/src/main/webapp/images/cmmn/more_btn_on.png new file mode 100644 index 0000000..db44255 Binary files /dev/null and b/src/main/webapp/images/cmmn/more_btn_on.png differ diff --git a/src/main/webapp/images/cmmn/mpss.png b/src/main/webapp/images/cmmn/mpss.png new file mode 100644 index 0000000..5b34763 Binary files /dev/null and b/src/main/webapp/images/cmmn/mpss.png differ diff --git a/src/main/webapp/images/cmmn/noImage.png b/src/main/webapp/images/cmmn/noImage.png new file mode 100644 index 0000000..1009bbf Binary files /dev/null and b/src/main/webapp/images/cmmn/noImage.png differ diff --git a/src/main/webapp/images/cmmn/order_asc.gif b/src/main/webapp/images/cmmn/order_asc.gif new file mode 100644 index 0000000..554c734 Binary files /dev/null and b/src/main/webapp/images/cmmn/order_asc.gif differ diff --git a/src/main/webapp/images/cmmn/order_desc.gif b/src/main/webapp/images/cmmn/order_desc.gif new file mode 100644 index 0000000..16a89e0 Binary files /dev/null and b/src/main/webapp/images/cmmn/order_desc.gif differ diff --git a/src/main/webapp/images/cmmn/print.png b/src/main/webapp/images/cmmn/print.png new file mode 100644 index 0000000..499b44a Binary files /dev/null and b/src/main/webapp/images/cmmn/print.png differ diff --git a/src/main/webapp/images/cmmn/print_on.png b/src/main/webapp/images/cmmn/print_on.png new file mode 100644 index 0000000..0e57a98 Binary files /dev/null and b/src/main/webapp/images/cmmn/print_on.png differ diff --git a/src/main/webapp/images/cmmn/reset.png b/src/main/webapp/images/cmmn/reset.png new file mode 100644 index 0000000..d5904eb Binary files /dev/null and b/src/main/webapp/images/cmmn/reset.png differ diff --git a/src/main/webapp/images/cmmn/reset_on.png b/src/main/webapp/images/cmmn/reset_on.png new file mode 100644 index 0000000..ed4aa36 Binary files /dev/null and b/src/main/webapp/images/cmmn/reset_on.png differ diff --git a/src/main/webapp/images/cmmn/title.png b/src/main/webapp/images/cmmn/title.png new file mode 100644 index 0000000..c5c47e9 Binary files /dev/null and b/src/main/webapp/images/cmmn/title.png differ diff --git a/src/main/webapp/images/cmmn/update.png b/src/main/webapp/images/cmmn/update.png new file mode 100644 index 0000000..81c1d79 Binary files /dev/null and b/src/main/webapp/images/cmmn/update.png differ diff --git a/src/main/webapp/images/error/blue_bg.jpg b/src/main/webapp/images/error/blue_bg.jpg new file mode 100644 index 0000000..bd71e98 Binary files /dev/null and b/src/main/webapp/images/error/blue_bg.jpg differ diff --git a/src/main/webapp/images/error/danger.jpg b/src/main/webapp/images/error/danger.jpg new file mode 100644 index 0000000..9ce70f1 Binary files /dev/null and b/src/main/webapp/images/error/danger.jpg differ diff --git a/src/main/webapp/images/error/er_logo.jpg b/src/main/webapp/images/error/er_logo.jpg new file mode 100644 index 0000000..c63a773 Binary files /dev/null and b/src/main/webapp/images/error/er_logo.jpg differ diff --git a/src/main/webapp/images/error/go_main.jpg b/src/main/webapp/images/error/go_main.jpg new file mode 100644 index 0000000..e14ae6c Binary files /dev/null and b/src/main/webapp/images/error/go_main.jpg differ diff --git a/src/main/webapp/images/error/goback_page.jpg b/src/main/webapp/images/error/goback_page.jpg new file mode 100644 index 0000000..d3cb933 Binary files /dev/null and b/src/main/webapp/images/error/goback_page.jpg differ diff --git a/src/main/webapp/images/etc/sitemap.jpg b/src/main/webapp/images/etc/sitemap.jpg new file mode 100644 index 0000000..d7d428d Binary files /dev/null and b/src/main/webapp/images/etc/sitemap.jpg differ diff --git a/src/main/webapp/images/etc/top_qna1.gif b/src/main/webapp/images/etc/top_qna1.gif new file mode 100644 index 0000000..c88c6ab Binary files /dev/null and b/src/main/webapp/images/etc/top_qna1.gif differ diff --git a/src/main/webapp/images/etc/top_qna2.gif b/src/main/webapp/images/etc/top_qna2.gif new file mode 100644 index 0000000..0dfb35f Binary files /dev/null and b/src/main/webapp/images/etc/top_qna2.gif differ diff --git a/src/main/webapp/images/etc/top_qna3.gif b/src/main/webapp/images/etc/top_qna3.gif new file mode 100644 index 0000000..4ad347e Binary files /dev/null and b/src/main/webapp/images/etc/top_qna3.gif differ diff --git a/src/main/webapp/images/etc/top_qna4.gif b/src/main/webapp/images/etc/top_qna4.gif new file mode 100644 index 0000000..49ef903 Binary files /dev/null and b/src/main/webapp/images/etc/top_qna4.gif differ diff --git a/src/main/webapp/images/footer/img_mopas_gray.gif b/src/main/webapp/images/footer/img_mopas_gray.gif new file mode 100644 index 0000000..4b87988 Binary files /dev/null and b/src/main/webapp/images/footer/img_mopas_gray.gif differ diff --git a/src/main/webapp/images/footer/mpss-footer.png b/src/main/webapp/images/footer/mpss-footer.png new file mode 100644 index 0000000..d7dcf38 Binary files /dev/null and b/src/main/webapp/images/footer/mpss-footer.png differ diff --git a/src/main/webapp/images/header/en.gif b/src/main/webapp/images/header/en.gif new file mode 100644 index 0000000..62d1b48 Binary files /dev/null and b/src/main/webapp/images/header/en.gif differ diff --git a/src/main/webapp/images/header/img_egovframe_logo.gif b/src/main/webapp/images/header/img_egovframe_logo.gif new file mode 100644 index 0000000..e2642eb Binary files /dev/null and b/src/main/webapp/images/header/img_egovframe_logo.gif differ diff --git a/src/main/webapp/images/header/jp.gif b/src/main/webapp/images/header/jp.gif new file mode 100644 index 0000000..2c4887d Binary files /dev/null and b/src/main/webapp/images/header/jp.gif differ diff --git a/src/main/webapp/images/header/kr.gif b/src/main/webapp/images/header/kr.gif new file mode 100644 index 0000000..795eaa4 Binary files /dev/null and b/src/main/webapp/images/header/kr.gif differ diff --git a/src/main/webapp/images/ieSetting.png b/src/main/webapp/images/ieSetting.png new file mode 100644 index 0000000..b81bcc1 Binary files /dev/null and b/src/main/webapp/images/ieSetting.png differ diff --git a/src/main/webapp/images/jquery/ui-bg_flat_0_aaaaaa_40x100.png b/src/main/webapp/images/jquery/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000..5b5dab2 Binary files /dev/null and b/src/main/webapp/images/jquery/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/src/main/webapp/images/jquery/ui-bg_flat_0_eeeeee_40x100.png b/src/main/webapp/images/jquery/ui-bg_flat_0_eeeeee_40x100.png new file mode 100644 index 0000000..e44f861 Binary files /dev/null and b/src/main/webapp/images/jquery/ui-bg_flat_0_eeeeee_40x100.png differ diff --git a/src/main/webapp/images/jquery/ui-bg_flat_55_ffffff_40x100.png b/src/main/webapp/images/jquery/ui-bg_flat_55_ffffff_40x100.png new file mode 100644 index 0000000..ac8b229 Binary files /dev/null and b/src/main/webapp/images/jquery/ui-bg_flat_55_ffffff_40x100.png differ diff --git a/src/main/webapp/images/jquery/ui-bg_flat_75_ffffff_40x100.png b/src/main/webapp/images/jquery/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 0000000..ac8b229 Binary files /dev/null and b/src/main/webapp/images/jquery/ui-bg_flat_75_ffffff_40x100.png differ diff --git a/src/main/webapp/images/jquery/ui-bg_glass_65_ffffff_1x400.png b/src/main/webapp/images/jquery/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000..42ccba2 Binary files /dev/null and b/src/main/webapp/images/jquery/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/src/main/webapp/images/jquery/ui-bg_highlight-soft_100_f6f6f6_1x100.png b/src/main/webapp/images/jquery/ui-bg_highlight-soft_100_f6f6f6_1x100.png new file mode 100644 index 0000000..5dcfaa9 Binary files /dev/null and b/src/main/webapp/images/jquery/ui-bg_highlight-soft_100_f6f6f6_1x100.png differ diff --git a/src/main/webapp/images/jquery/ui-bg_highlight-soft_25_0073ea_1x100.png b/src/main/webapp/images/jquery/ui-bg_highlight-soft_25_0073ea_1x100.png new file mode 100644 index 0000000..7226bdb Binary files /dev/null and b/src/main/webapp/images/jquery/ui-bg_highlight-soft_25_0073ea_1x100.png differ diff --git a/src/main/webapp/images/jquery/ui-bg_highlight-soft_50_dddddd_1x100.png b/src/main/webapp/images/jquery/ui-bg_highlight-soft_50_dddddd_1x100.png new file mode 100644 index 0000000..b47a4da Binary files /dev/null and b/src/main/webapp/images/jquery/ui-bg_highlight-soft_50_dddddd_1x100.png differ diff --git a/src/main/webapp/images/jquery/ui-icons_0073ea_256x240.png b/src/main/webapp/images/jquery/ui-icons_0073ea_256x240.png new file mode 100644 index 0000000..6b852b6 Binary files /dev/null and b/src/main/webapp/images/jquery/ui-icons_0073ea_256x240.png differ diff --git a/src/main/webapp/images/jquery/ui-icons_454545_256x240.png b/src/main/webapp/images/jquery/ui-icons_454545_256x240.png new file mode 100644 index 0000000..59bd45b Binary files /dev/null and b/src/main/webapp/images/jquery/ui-icons_454545_256x240.png differ diff --git a/src/main/webapp/images/jquery/ui-icons_666666_256x240.png b/src/main/webapp/images/jquery/ui-icons_666666_256x240.png new file mode 100644 index 0000000..f87de1c Binary files /dev/null and b/src/main/webapp/images/jquery/ui-icons_666666_256x240.png differ diff --git a/src/main/webapp/images/jquery/ui-icons_ff0084_256x240.png b/src/main/webapp/images/jquery/ui-icons_ff0084_256x240.png new file mode 100644 index 0000000..0ca605d Binary files /dev/null and b/src/main/webapp/images/jquery/ui-icons_ff0084_256x240.png differ diff --git a/src/main/webapp/images/jquery/ui-icons_ffffff_256x240.png b/src/main/webapp/images/jquery/ui-icons_ffffff_256x240.png new file mode 100644 index 0000000..42f8f99 Binary files /dev/null and b/src/main/webapp/images/jquery/ui-icons_ffffff_256x240.png differ diff --git a/src/main/webapp/images/leftmenu/bl_depth01.gif b/src/main/webapp/images/leftmenu/bl_depth01.gif new file mode 100644 index 0000000..ee55ce6 Binary files /dev/null and b/src/main/webapp/images/leftmenu/bl_depth01.gif differ diff --git a/src/main/webapp/images/leftmenu/leftmenu_bottom.gif b/src/main/webapp/images/leftmenu/leftmenu_bottom.gif new file mode 100644 index 0000000..7bfcf5e Binary files /dev/null and b/src/main/webapp/images/leftmenu/leftmenu_bottom.gif differ diff --git a/src/main/webapp/images/leftmenu/leftmenu_repeat.gif b/src/main/webapp/images/leftmenu/leftmenu_repeat.gif new file mode 100644 index 0000000..28ae6a2 Binary files /dev/null and b/src/main/webapp/images/leftmenu/leftmenu_repeat.gif differ diff --git a/src/main/webapp/images/leftmenu/leftmenu_top.gif b/src/main/webapp/images/leftmenu/leftmenu_top.gif new file mode 100644 index 0000000..9471297 Binary files /dev/null and b/src/main/webapp/images/leftmenu/leftmenu_top.gif differ diff --git a/src/main/webapp/images/leftmenu/logout.jpg b/src/main/webapp/images/leftmenu/logout.jpg new file mode 100644 index 0000000..a4b0a0e Binary files /dev/null and b/src/main/webapp/images/leftmenu/logout.jpg differ diff --git a/src/main/webapp/images/new/f_logo.png b/src/main/webapp/images/new/f_logo.png new file mode 100644 index 0000000..2280228 Binary files /dev/null and b/src/main/webapp/images/new/f_logo.png differ diff --git a/src/main/webapp/images/new/img01.jpg b/src/main/webapp/images/new/img01.jpg new file mode 100644 index 0000000..d63beaf Binary files /dev/null and b/src/main/webapp/images/new/img01.jpg differ diff --git a/src/main/webapp/images/new/img02.jpg b/src/main/webapp/images/new/img02.jpg new file mode 100644 index 0000000..9831196 Binary files /dev/null and b/src/main/webapp/images/new/img02.jpg differ diff --git a/src/main/webapp/images/new/logo.png b/src/main/webapp/images/new/logo.png new file mode 100644 index 0000000..9b8ad43 Binary files /dev/null and b/src/main/webapp/images/new/logo.png differ diff --git a/src/main/webapp/images/new/mpss-footer_01.png b/src/main/webapp/images/new/mpss-footer_01.png new file mode 100644 index 0000000..0351f78 Binary files /dev/null and b/src/main/webapp/images/new/mpss-footer_01.png differ diff --git a/src/main/webapp/images/new/mpss_01.jpg b/src/main/webapp/images/new/mpss_01.jpg new file mode 100644 index 0000000..d0f6232 Binary files /dev/null and b/src/main/webapp/images/new/mpss_01.jpg differ diff --git a/src/main/webapp/images/new/mpss_01.png b/src/main/webapp/images/new/mpss_01.png new file mode 100644 index 0000000..acfb770 Binary files /dev/null and b/src/main/webapp/images/new/mpss_01.png differ diff --git a/src/main/webapp/images/new/mvisual.jpg b/src/main/webapp/images/new/mvisual.jpg new file mode 100644 index 0000000..c05d301 Binary files /dev/null and b/src/main/webapp/images/new/mvisual.jpg differ diff --git a/src/main/webapp/images/new/popup01.jpg b/src/main/webapp/images/new/popup01.jpg new file mode 100644 index 0000000..0d91887 Binary files /dev/null and b/src/main/webapp/images/new/popup01.jpg differ diff --git a/src/main/webapp/images/new/popup02.jpg b/src/main/webapp/images/new/popup02.jpg new file mode 100644 index 0000000..07bdfc9 Binary files /dev/null and b/src/main/webapp/images/new/popup02.jpg differ diff --git a/src/main/webapp/images/new/w3c.png b/src/main/webapp/images/new/w3c.png new file mode 100644 index 0000000..a30fed8 Binary files /dev/null and b/src/main/webapp/images/new/w3c.png differ diff --git a/src/main/webapp/images/rte/btn_bg_l.gif b/src/main/webapp/images/rte/btn_bg_l.gif new file mode 100644 index 0000000..11341a6 Binary files /dev/null and b/src/main/webapp/images/rte/btn_bg_l.gif differ diff --git a/src/main/webapp/images/rte/btn_bg_r.gif b/src/main/webapp/images/rte/btn_bg_r.gif new file mode 100644 index 0000000..be5b8c5 Binary files /dev/null and b/src/main/webapp/images/rte/btn_bg_r.gif differ diff --git a/src/main/webapp/images/rte/paging_line.gif b/src/main/webapp/images/rte/paging_line.gif new file mode 100644 index 0000000..0fa7654 Binary files /dev/null and b/src/main/webapp/images/rte/paging_line.gif differ diff --git a/src/main/webapp/images/rte/th_bg.gif b/src/main/webapp/images/rte/th_bg.gif new file mode 100644 index 0000000..e3f80fc Binary files /dev/null and b/src/main/webapp/images/rte/th_bg.gif differ diff --git a/src/main/webapp/images/rte/title_dot.gif b/src/main/webapp/images/rte/title_dot.gif new file mode 100644 index 0000000..f2658f9 Binary files /dev/null and b/src/main/webapp/images/rte/title_dot.gif differ diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp new file mode 100644 index 0000000..1e55611 --- /dev/null +++ b/src/main/webapp/index.jsp @@ -0,0 +1,2 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> + diff --git a/src/main/webapp/js/commons.js b/src/main/webapp/js/commons.js new file mode 100644 index 0000000..d5398ef --- /dev/null +++ b/src/main/webapp/js/commons.js @@ -0,0 +1,45 @@ +function printDiv(printThis) { + var win = window.open(); + self.focus() + win.document.open(""); + win.document.write('<'+'html'+'><'+'head'+'>'); + win.document.write( "" ); + win.document.write( "" ); + win.document.write( "" ); + win.document.write('<'+'style'+'>'); + win.document.write('body, td { font-family: Verdana; font-size: 6pt;}'); + win.document.write('<'+'/'+'style'+'><'+'/'+'head'+'><'+'body'+'>'); + win.document.write(printThis); + win.document.write("" ); + win.document.write('<'+'/'+'body'+'><'+'/'+'html'+'>'); + win.document.close(); + + // 이미지가 포함된 경우 이미지가 출력되지 않아, 인쇄 페이지 내 onload 이벤트에서 출력 및 닫기 함수 호출 + //win.print(); + //win.close(); +} + +function domEvent(e){ + if (!e && window.event) { + var we = new Object; + if (window.event.target) { + we.target = window.event.target; + } else { + we.target = window.event.srcElement; + } + if (window.event.keyCode) { + we.keyCode = window.event.keyCode; + } else { + we.keyCode = window.event.which; + } + we.clientX = window.event.clientX; + we.clientY = window.event.clientY; + we.screenX = window.event.screenX; + we.screenY = window.event.screenY; + we.preventDefault = function () { + window.event.returnValue = false; + }; + return we; + } + return e; +} \ No newline at end of file diff --git a/src/main/webapp/js/function.js b/src/main/webapp/js/function.js new file mode 100644 index 0000000..17c7fbd --- /dev/null +++ b/src/main/webapp/js/function.js @@ -0,0 +1,25 @@ +$(function(){ + console.log("CONTACT") + var $loginTopBtn = $(".loginBox_TopBar").find("li > a"); + var nowIdx = 0; + + + $(document).ready(function(){ + $loginTopBtn.eq(nowIdx).addClass("on").siblings().removeClass("on"); + $loginTopBtn.parent().eq(nowIdx).addClass("on").siblings().removeClass("on"); + $(".loginBox_BotBar > div").hide().eq(nowIdx).show(); + })//end of winjdow load + + $loginTopBtn.on("click", function(){ + nowIdx = $loginTopBtn.index($(this)); + console.log("nowIdx", nowIdx) + + $loginTopBtn.eq(nowIdx).addClass("on").parent().siblings().children().removeClass("on"); + $loginTopBtn.parent().eq(nowIdx).addClass("on").siblings().removeClass("on"); + + $(".loginBox_BotBar > div").eq(nowIdx).show().siblings().hide(); + + + + })//end of TopBar > li > a click event +})//end of fun diff --git a/src/main/webapp/js/jquery_3.3.1.min.js b/src/main/webapp/js/jquery_3.3.1.min.js new file mode 100644 index 0000000..4d9b3a2 --- /dev/null +++ b/src/main/webapp/js/jquery_3.3.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.3.1 | (c) JS 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(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),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("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(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 fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){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[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.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},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.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},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(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?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===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]||oe.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]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(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(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("