keywords){
29 | this.wiki = wiki;
30 | this.user = user;
31 | this.keywords = keywords;
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/com/libqa/web/view/wiki/DisplayWikiLike.java:
--------------------------------------------------------------------------------
1 | package com.libqa.web.view.wiki;
2 |
3 | import com.libqa.web.domain.WikiLike;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 |
7 | /**
8 | * Created by songanji on 2015. 12. 6..
9 | */
10 | @Data
11 | @AllArgsConstructor
12 | public class DisplayWikiLike {
13 | private Integer result;
14 | private WikiLike wikiLike;
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | # Hibernate config
2 | spring.jpa.hibernate.ddl-auto=update
3 | spring.jpa.generate-ddl=false
4 | spring.jpa.database=MYSQL
5 | spring.jpa.show-sql=false
6 | spring.jpa.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
7 | spring.jpa.properties.hibernate.format_sql=false
8 | spring.datasource.validation-query=SELECT 1
9 | spring.datasource.test-on-borrow=true
10 | spring.datasource.test-on-return=true
11 | spring.datasource.tomcat.validation-interval=20000
12 |
13 | # JDBC
14 | spring.datasource.url=jdbc:mysql://localhost:3306/howling?useUnicode=true&charaterEncoding=utf-8
15 | spring.datasource.username=howlingproject
16 | spring.datasource.password=libqa2014
17 | spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
18 | spring.datasource.maxIdle=20
19 | spring.datasource.maxActive=200
20 | spring.datasource.maxWait=10000
21 |
22 | # file Size
23 | multipart.maxFileSize=10Mb
24 |
25 | # log level config
26 | logging.level.root=INFO
27 | logging.level.org.springframework.web=WARN
28 | logging.level.org.hibernate=WARN
29 |
30 | # server
31 | server.port=8080
32 |
33 | # libqa configuration
34 | libqa.viewResolver.cached=false
35 | libqa.file.uploadPath=~/libqa/files
--------------------------------------------------------------------------------
/src/main/resources/banner.txt:
--------------------------------------------------------------------------------
1 | _ _ _ _ _ _ _
2 | | | | | _____ __ (_)_ __ __ _ | | (_) |__ __ _ __ _
3 | | |_| |/ _ \ \ /\ / / | | '_ \ / _` |_____| | | | '_ \ / _` |/ _` |
4 | | _ | (_) \ V V /| | | | | | (_| |_____| |___| | |_) | (_| | (_| |
5 | |_| |_|\___/ \_/\_/ |_|_|_| |_|\__, | |_____|_|_.__/ \__, |\__,_|
6 | |___/ |_|
--------------------------------------------------------------------------------
/src/main/resources/log4jdbc.log4j2.properties:
--------------------------------------------------------------------------------
1 | log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
--------------------------------------------------------------------------------
/src/main/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/main/resources/mail.properties:
--------------------------------------------------------------------------------
1 | mail.protocol=smtp
2 | mail.host=smtp.gmail.com
3 | mail.port=587
4 | mail.encoding:UTF-8
5 | mail.smtp.auth=true
6 | mail.smtp.starttls.enable=true
7 | mail.from=libqa \uC790\uB3D9 \uBC1C\uC1A1
8 | mail.username=LibQA
9 | mail.password=libqa2014
10 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/common/_keywordList.hbs:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/error/401.hbs:
--------------------------------------------------------------------------------
1 | {{#partial "title"}}LibQA~{{/partial}}
2 |
3 | {{# partial "content" }}
4 |
5 |
Not Authorized
6 |
Sorry, but you are not authorized to view this page. :(
7 |
8 | {{/partial}}
9 |
10 | {{> template/base}}
11 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/error/403.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 | Created by IntelliJ IDEA.
3 | User: yion
4 | Date: 2014. 12. 7.
5 | Time: 16:20
6 | To change this template use File | Settings | File Templates.
7 | --}}
8 | {{#partial "style"}}
9 | {{!-- 여기에 사용자 css 정의 --}}
10 |
11 | {{/partial}}
12 |
13 | {{#partial "plugin-style"}}
14 | {{!-- 여기에 .css 파일 경로 --}}
15 |
16 | {{/partial}}
17 | {{#partial "script-header"}}
18 |
19 | {{/partial}}
20 |
21 | {{#partial "title"}}LibQA~{{/partial}}
22 |
23 | {{# partial "content" }}
24 |
25 |
26 |
Access is denied
27 |
{{msg}}
28 |
29 | {{/partial}}
30 |
31 |
32 | {{# partial "script-page" }}
33 |
36 | {{/partial}}
37 |
38 | {{> template/base}}
39 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/error/404.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 | Created by IntelliJ IDEA.
3 | User: yion
4 | Date: 2014. 12. 7.
5 | Time: 16:20
6 | To change this template use File | Settings | File Templates.
7 | --}}
8 | {{#partial "style"}}
9 | {{!-- 여기에 사용자 css 정의 --}}
10 |
11 | {{/partial}}
12 |
13 | {{#partial "plugin-style"}}
14 | {{!-- 여기에 .css 파일 경로 --}}
15 |
16 | {{/partial}}
17 | {{#partial "script-header"}}
18 |
19 | {{/partial}}
20 |
21 | {{#partial "title"}}LibQA~{{/partial}}
22 |
23 | {{# partial "content" }}
24 |
25 |
26 |
Page Not found :(
27 |
{{msg}}
28 |
29 |
30 | {{/partial}}
31 |
32 |
33 | {{# partial "script-page" }}
34 |
37 | {{/partial}}
38 |
39 | {{> template/base}}
40 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/error/500.hbs:
--------------------------------------------------------------------------------
1 | {{#partial "title"}}LibQA~{{/partial}}
2 |
3 | {{# partial "content" }}
4 |
5 |
Server Error
6 |
Sorry, but there was an error with the server that prevented this page from being displayed. :(
7 |
8 | {{/partial}}
9 |
10 | {{> template/base}}
11 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/feed/template/reply.hbs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |

5 |
6 |
7 | {{userNick}}
8 | {{insertDate}}
9 |
10 |
11 |
{{feedReplyContent}}
12 |
13 |
14 | ({{likeFeedAction.count}})
15 |
16 |
17 | ({{claimFeedAction.count}})
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/qa/template/_fileList.hbs:
--------------------------------------------------------------------------------
1 | {{#each data}}
2 |
14 | {{/each}}
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/qa/template/_mainList.hbs:
--------------------------------------------------------------------------------
1 | {{#each data}}
2 |
3 |
4 |
{{title}}
5 |
6 | {{#each keywords}}
7 | {{#keywordBadge keywordName}}{{/keywordBadge}}
8 | {{/each}}
9 |
10 |
11 |
28 |
29 | {{/each}}
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/qa/template/_noData.hbs:
--------------------------------------------------------------------------------
1 |
2 | 작성된 Q&A가 없습니다.
3 |
4 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/qa/template/_qaBest.hbs:
--------------------------------------------------------------------------------
1 | {{#unless bestQAContents}}
2 |
3 | 최근에 작성된 Q&A가 없습니다.
4 |
5 | {{/unless}}
6 |
7 | {{#each bestQAContents}}
8 |
29 | {{/each}}
30 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/search/form/qa.hbs:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/search/form/space.hbs:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/search/form/wiki.hbs:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/space/template/_activityList.hbs:
--------------------------------------------------------------------------------
1 | {{#if spaceActivityLists}}
2 | {{#each spaceActivityLists}}
3 |
15 | {{/each}}
16 | 더보기
17 |
18 | {{^}}
19 |
24 | {{/if}}
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/space/template/_activityRight.hbs:
--------------------------------------------------------------------------------
1 | {{#if spaceActivityLists}}
2 | {{#each spaceActivityLists}}
3 |
15 | {{/each}}
16 | 더보기
17 |
18 | {{^}}
19 |
24 | {{/if}}
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/space/template/_allSpaceList.hbs:
--------------------------------------------------------------------------------
1 | {{#each spaceMainList}}
2 |
3 |
4 |
5 |
{{title}}
6 |
7 | {{#each keywords}}
8 | {{#keywordBadge keywordName}}{{/keywordBadge}}
9 | {{/each}}
10 |
11 |
12 |
26 |
27 | {{/each}}
28 |
29 | {{#unless spaceMainList}}
30 |
31 | 생성된 공간이 없습니다.
32 |
33 | {{/unless}}
34 |
35 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/space/template/_myfavoriteList.hbs:
--------------------------------------------------------------------------------
1 | {{#if myFavoriteSpaceList}}
2 | {{#each myFavoriteSpaceList}}
3 |
4 |
5 | {{> common/_keywordBadge}}
6 |
{{title}}
7 |
8 |
25 |
26 | {{/each}}
27 | {{^}}
28 |
29 | 즐겨찾기 공간이 없습니다.
30 |
31 | {{/if}}
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/space/template/_spaceTopMenu.hbs:
--------------------------------------------------------------------------------
1 |
4 |
16 |
17 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/space/template/_userList.hbs:
--------------------------------------------------------------------------------
1 |
2 | {{#if userList}}
3 | {{#each userList}}
4 |
5 | |
6 | {{userNick}} |
7 | {{userEmail}} |
8 | {{role}} |
9 |
10 | {{/each}}
11 | {{^}}
12 |
13 | 회원 정보가 없습니다. |
14 |
15 |
16 | {{/if}}
17 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/template/guest.hbs:
--------------------------------------------------------------------------------
1 |
2 |
3 | Sign Up
4 |
5 |
6 |
7 |
8 | Log in
9 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/template/login.hbs:
--------------------------------------------------------------------------------
1 |
2 | Profile
3 |
4 |
5 | 비밀번호변경
6 |
7 |
8 |
9 | Inbox
10 |
11 |
12 |
13 |
14 |
15 | Log Out
16 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/template/temp.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 | Created by IntelliJ IDEA.
3 | User: yion
4 | Date: 2014. 12. 7.
5 | Time: 16:20
6 | To change this template use File | Settings | File Templates.
7 | --}}
8 | {{#partial "style"}}
9 | {{!-- 여기에 사용자 css 정의 --}}
10 |
11 | {{/partial}}
12 |
13 | {{#partial "plugin-style"}}
14 | {{!-- 여기에 .css 파일 경로 --}}
15 |
16 | {{/partial}}
17 | {{#partial "script-header"}}
18 |
19 | {{/partial}}
20 |
21 | {{#partial "title"}}LibQA~{{/partial}}
22 |
23 | {{# partial "content" }}
24 |
25 |
26 | 복사용 파일
27 |
28 |
29 | {{/partial}}
30 |
31 |
32 | {{# partial "script-page" }}
33 |
36 | {{/partial}}
37 |
38 | {{> template/base}}
39 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/user/auth.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 | Created by IntelliJ IDEA.
3 | User: yion
4 | Date: 2014. 12. 7.
5 | Time: 16:20
6 | To change this template use File | Settings | File Templates.
7 | --}}
8 | {{#partial "style"}}
9 | {{!-- 여기에 사용자 css 정의 --}}
10 |
11 | {{/partial}}
12 |
13 | {{#partial "plugin-style"}}
14 | {{!-- 여기에 .css 파일 경로 --}}
15 |
16 | {{/partial}}
17 | {{#partial "script-header"}}
18 |
19 | {{/partial}}
20 |
21 | {{#partial "title"}}LibQA~{{/partial}}
22 |
23 | {{# partial "content" }}
24 |
25 |
26 | 인증 페이지.
27 | 사용자 인증 정상 처리시 로그인 처리 하여 index로 리다이렉션
28 |
29 |
30 | {{/partial}}
31 |
32 |
33 | {{# partial "script-page" }}
34 |
37 | {{/partial}}
38 |
39 | {{> template/base}}
40 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/views/user/view.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 | Created by IntelliJ IDEA.
3 | User: yion
4 | Date: 2014. 12. 7.
5 | Time: 16:20
6 | To change this template use File | Settings | File Templates.
7 | --}}
8 | {{#partial "style"}}
9 | {{!-- 여기에 사용자 css 정의 --}}
10 |
11 | {{/partial}}
12 |
13 | {{#partial "plugin-style"}}
14 | {{!-- 여기에 .css 파일 경로 --}}
15 |
16 | {{/partial}}
17 | {{#partial "script-header"}}
18 |
19 | {{/partial}}
20 |
21 | {{#partial "title"}}LibQA~{{/partial}}
22 |
23 | {{# partial "content" }}
24 |
25 |
26 | 메일 {{loginUserInfo.userEmail}}
27 | 롤 {{loginUserInfo.role}}
28 | ip {{loginUserInfo.userIp}}
29 |
30 |
31 |
32 | {{/partial}}
33 |
34 |
35 | {{# partial "script-page" }}
36 |
39 | {{/partial}}
40 |
41 | {{> template/base}}
42 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/img/2_l.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/app/js/DualEditor/img/2_l.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/img/2_m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/app/js/DualEditor/img/2_m.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/img/2_s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/app/js/DualEditor/img/2_s.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/img/3_l.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/app/js/DualEditor/img/3_l.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/img/3_m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/app/js/DualEditor/img/3_m.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/img/3_s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/app/js/DualEditor/img/3_s.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/img/4_l.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/app/js/DualEditor/img/4_l.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/img/4_m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/app/js/DualEditor/img/4_m.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/img/4_s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/app/js/DualEditor/img/4_s.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/module/mALERT.js:
--------------------------------------------------------------------------------
1 | DualEditor.markup.ALERT = function(contents){
2 | contents = contents.replace(/\[alert\]([\w\W]+?)\[alert\]/gm, " $1
");
3 | return contents;
4 | };
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/module/mALIGN.js:
--------------------------------------------------------------------------------
1 | DualEditor.markup.ALIGN = function(contents){
2 | contents = contents.replace(/\[align\:(left|right|center)\]([\w\W]+?)\[align\]/gm, "$2
");
3 | return contents;
4 | };
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/module/mBOLD.js:
--------------------------------------------------------------------------------
1 | DualEditor.markup.BOLD = function(contents){
2 | contents = contents.replace(/\*{2}([\w\W]+?)\*{2}/gm, "$1");
3 | contents = contents.replace(/\_{2}([\w\W]+?)\_{2}/gm, "$1");
4 | return contents;
5 | };
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/module/mDEL.js:
--------------------------------------------------------------------------------
1 | DualEditor.markup.DEL = function(contents){
2 | contents = contents.replace(/~~([\w\W]+?)~~/gm, "$1");
3 | return contents;
4 | };
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/module/mFIELD.js:
--------------------------------------------------------------------------------
1 | DualEditor.markup.FIELD = function(contents){
2 | //debugger;
3 | contents = contents.replace(/\[field(\|([\w\W]+?))?\]([\w\W]+?)\[field\]/gm, "");
4 | return contents;
5 | };
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/module/mFONT.js:
--------------------------------------------------------------------------------
1 | DualEditor.markup.FONT = function(contents){
2 | var rex = /\[font\|(.*?)\]([\w\W]+?)\[font\]/gm;
3 | if( contents.match(rex) == null ) return contents;
4 | var font = contents.match(rex).toString().replace(rex, "$1");
5 |
6 | var fontType;
7 | if( "돋움" == font ){
8 | fontType = "dotum";
9 | }else if( "굴림" == font ){
10 | fontType = "gulim";
11 | }else if( "궁서" == font ){
12 | fontType = "gungsuh";
13 | }else if( "바탕" == font ){
14 | fontType = "batang";
15 | }
16 |
17 | contents = contents.replace(rex, "$2");
18 | return contents;
19 | };
20 |
21 | DualEditor.markup.FONTSIZE = function(contents){
22 | contents = contents.replace(/\[size\|(.*?)\]([\w\W]+?)\[size\]/igm, "$2");
23 | return contents;
24 | };
25 |
26 | DualEditor.markup.FONTSTYLE = function(contents){
27 | var rex = /(h1\.(\s{0,}))(.*)?/igm;
28 | if( contents.match(rex) != null ){
29 | contents = contents.replace(rex, "$3
");
30 | }
31 |
32 | var rex = /(h2\.(\s{0,}))(.*)?/igm;
33 | if( contents.match(rex) != null ){
34 | contents = contents.replace(rex, "$3
");
35 | }
36 |
37 | var rex = /(h3\.(\s{0,}))(.*)?/igm;
38 | if( contents.match(rex) != null ){
39 | contents = contents.replace(rex, "$3
");
40 | }
41 |
42 | return contents;
43 | };
44 |
45 |
46 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/module/mH1.js:
--------------------------------------------------------------------------------
1 | DualEditor.markup.H1 = function(contents){
2 | contents = contents.replace(/^(
#|^#) (.*)/igm, "$2
");
3 | contents = contents.replace(/^(
##|^##) (.*)/igm, "$2
");
4 | contents = contents.replace(/^(
###|^###) (.*)/igm, "$2
");
5 |
6 | return contents;
7 | };
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/module/mHR.js:
--------------------------------------------------------------------------------
1 | DualEditor.markup.HR = function(contents){
2 | contents = contents.replace(/^
\*\*\*$/igm, "
");
3 | return contents;
4 | };
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/module/mINFO.js:
--------------------------------------------------------------------------------
1 | DualEditor.markup.INFO = function(contents){
2 | contents = contents.replace(/\[info\]([\w\W]+?)\[info\]/gm, " $1
");
3 | return contents;
4 | };
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/module/mITALIC.js:
--------------------------------------------------------------------------------
1 | DualEditor.markup.ITALIC = function(contents){
2 | contents = contents.replace(/\_([\w\W]+?)\_/gm, "$1");
3 | return contents;
4 | };
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/module/mLAYOUT.js:
--------------------------------------------------------------------------------
1 | DualEditor.markup.LAYOUT = function(contents){
2 | function replacer(match, p1, p2, offset, string) {
3 | if( idx == 0 ){
4 | p2 = ""+p2+"
";
5 | }else{
6 | p2 = "
"+p2+"
";
7 | }
8 | idx++;
9 | return p2;
10 | }
11 | if( contents.match(/(
)?\[layout\]([\W\w]+?)\[layout\]/igm) != null ){
12 | var layoutSize = contents.match(/(
)?\[layout\]([\W\w]+?)\[layout\]/igm).length;
13 | var idx = 0;
14 | if( layoutSize != null && layoutSize > 1 && layoutSize <= 4 ){
15 | contents = contents.replace(/(
)?\[layout\]([\W\w]+?)\[layout\]/igm, replacer);
16 | }
17 | }
18 | return contents;
19 | };
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/module/mLINK.js:
--------------------------------------------------------------------------------
1 | DualEditor.markup.LINK = function(contents){
2 | contents = contents.replace(/[!]\[(.*)\]\(([\w\W]+?)\)/igm,
3 | function(match, p1,p2){
4 | p2 = p2.replace(/
|<\/em>/igm,"_")
5 | return "
";
6 | }
7 | );
8 | contents = contents.replace(/\[(.*)\]\(([\w\W]+?)\)/igm,
9 | function(match, p1,p2){
10 | p1 = p1.replace(/|<\/em>/igm,"_")
11 | return ""+p1+"";
12 | }
13 | );
14 | return contents;
15 | };
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/module/mSUBERSCRIPT.js:
--------------------------------------------------------------------------------
1 | DualEditor.markup.SUBERSCRIPT = function(contents){
2 | contents = contents.replace(/\[sp\]([\w\W]+?)\[sp\]/gm, "$1");
3 | return contents;
4 | };
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/module/mSUPERSCRIPT.js:
--------------------------------------------------------------------------------
1 | DualEditor.markup.SUPERSCRIPT = function(contents){
2 | contents = contents.replace(/\[sb\]([\w\W]+?)\[sb\]/gm, "$1");
3 | return contents;
4 | };
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/module/mSyntax.js:
--------------------------------------------------------------------------------
1 | DualEditor.markup.SYNTAX = function(contents){
2 | var idx = 0;
3 | function replacer(match, p1, p2, offset, string) {
4 | var type = ["Apache","Bash","CoffeeScript","C++","C","C#","CSS","Diff","HTTP","Ini","Java","JavaScript","JSON","Makefile","Markdown","Nginx","Objective-C","Perl","PHP","Python","Ruby","SQL","HTML","XML"];
5 | var data = syntaxData[idx];
6 | p1 = p1.replace(//ig, "");
8 | for( var i=0; i< type.length; i++ ){
9 | if( type[i] == p1 ){
10 | idx++;
11 | return ""+data+"
";
12 | }
13 | }
14 | return p2;
15 | }
16 | contents = contents.replace(/\[syntax ([\w\W]+?)\]([\w\W]+?)\[syntax\]/gm, replacer);
17 | return contents;
18 | };
19 |
20 | DualEditor.markup.SYNTAX_BEFORE = function(contents){
21 | var idx = 0;
22 | function replacer(match, p1, p2, offset, string) {
23 | syntaxData.push(p2);
24 | idx++;
25 | return "[syntax "+p1+"] [syntax]";
26 | }
27 | contents.replace(/\[syntax ([\w\W]+?)\]([\w\W]+?)\[syntax\]/gm, replacer);
28 | return contents;
29 | };
30 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/module/mUNDERLINING.js:
--------------------------------------------------------------------------------
1 | DualEditor.markup.UNDERLINING = function(contents){
2 | contents = contents.replace(/([^http:])\/{2}([\w\W]+?)\/{2}/igm, "$1$2");
3 | return contents;
4 | };
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/androidstudio.css:
--------------------------------------------------------------------------------
1 | /*
2 | Date: 24 Fev 2015
3 | Author: Pedro Oliveira
4 | */
5 |
6 | .hljs {
7 | color: #a9b7c6;
8 | background: #282b2e;
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | }
13 |
14 | .hljs-number,
15 | .hljs-literal,
16 | .hljs-symbol,
17 | .hljs-bullet {
18 | color: #6897BB;
19 | }
20 |
21 | .hljs-keyword,
22 | .hljs-selector-tag,
23 | .hljs-deletion {
24 | color: #cc7832;
25 | }
26 |
27 | .hljs-variable,
28 | .hljs-template-variable,
29 | .hljs-link {
30 | color: #629755;
31 | }
32 |
33 | .hljs-comment,
34 | .hljs-quote {
35 | color: #808080;
36 | }
37 |
38 | .hljs-meta {
39 | color: #bbb529;
40 | }
41 |
42 | .hljs-string,
43 | .hljs-attribute,
44 | .hljs-addition {
45 | color: #6A8759;
46 | }
47 |
48 | .hljs-section,
49 | .hljs-title,
50 | .hljs-type {
51 | color: #ffc66d;
52 | }
53 |
54 | .hljs-name,
55 | .hljs-selector-id,
56 | .hljs-selector-class {
57 | color: #e8bf6a;
58 | }
59 |
60 | .hljs-emphasis {
61 | font-style: italic;
62 | }
63 |
64 | .hljs-strong {
65 | font-weight: bold;
66 | }
67 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/arta.css:
--------------------------------------------------------------------------------
1 | /*
2 | Date: 17.V.2011
3 | Author: pumbur
4 | */
5 |
6 | .hljs {
7 | display: block;
8 | overflow-x: auto;
9 | padding: 0.5em;
10 | background: #222;
11 | }
12 |
13 | .hljs,
14 | .hljs-subst {
15 | color: #aaa;
16 | }
17 |
18 | .hljs-section {
19 | color: #fff;
20 | }
21 |
22 | .hljs-comment,
23 | .hljs-quote,
24 | .hljs-meta {
25 | color: #444;
26 | }
27 |
28 | .hljs-string,
29 | .hljs-symbol,
30 | .hljs-bullet,
31 | .hljs-regexp {
32 | color: #ffcc33;
33 | }
34 |
35 | .hljs-number,
36 | .hljs-addition {
37 | color: #00cc66;
38 | }
39 |
40 | .hljs-built_in,
41 | .hljs-builtin-name,
42 | .hljs-literal,
43 | .hljs-type,
44 | .hljs-template-variable,
45 | .hljs-attribute,
46 | .hljs-link {
47 | color: #32aaee;
48 | }
49 |
50 | .hljs-keyword,
51 | .hljs-selector-tag,
52 | .hljs-name,
53 | .hljs-selector-id,
54 | .hljs-selector-class {
55 | color: #6644aa;
56 | }
57 |
58 | .hljs-title,
59 | .hljs-variable,
60 | .hljs-deletion,
61 | .hljs-template-tag {
62 | color: #bb1166;
63 | }
64 |
65 | .hljs-section,
66 | .hljs-doctag,
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
71 | .hljs-emphasis {
72 | font-style: italic;
73 | }
74 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/ascetic.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Original style from softwaremaniacs.org (c) Ivan Sagalaev
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: white;
12 | color: black;
13 | }
14 |
15 | .hljs-string,
16 | .hljs-variable,
17 | .hljs-template-variable,
18 | .hljs-symbol,
19 | .hljs-bullet,
20 | .hljs-section,
21 | .hljs-addition,
22 | .hljs-attribute,
23 | .hljs-link {
24 | color: #888;
25 | }
26 |
27 | .hljs-comment,
28 | .hljs-quote,
29 | .hljs-meta,
30 | .hljs-deletion {
31 | color: #ccc;
32 | }
33 |
34 | .hljs-keyword,
35 | .hljs-selector-tag,
36 | .hljs-section,
37 | .hljs-name,
38 | .hljs-type,
39 | .hljs-strong {
40 | font-weight: bold;
41 | }
42 |
43 | .hljs-emphasis {
44 | font-style: italic;
45 | }
46 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/brown-paper.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Brown Paper style from goldblog.com.ua (c) Zaripov Yura
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background:#b7a68e url(./brown-papersq.png);
12 | }
13 |
14 | .hljs-keyword,
15 | .hljs-selector-tag,
16 | .hljs-literal {
17 | color:#005599;
18 | font-weight:bold;
19 | }
20 |
21 | .hljs,
22 | .hljs-subst {
23 | color: #363c69;
24 | }
25 |
26 | .hljs-string,
27 | .hljs-title,
28 | .hljs-section,
29 | .hljs-type,
30 | .hljs-attribute,
31 | .hljs-symbol,
32 | .hljs-bullet,
33 | .hljs-built_in,
34 | .hljs-addition,
35 | .hljs-variable,
36 | .hljs-template-tag,
37 | .hljs-template-variable,
38 | .hljs-link,
39 | .hljs-name {
40 | color: #2c009f;
41 | }
42 |
43 | .hljs-comment,
44 | .hljs-quote,
45 | .hljs-meta,
46 | .hljs-deletion {
47 | color: #802022;
48 | }
49 |
50 | .hljs-keyword,
51 | .hljs-selector-tag,
52 | .hljs-literal,
53 | .hljs-doctag,
54 | .hljs-title,
55 | .hljs-section,
56 | .hljs-type,
57 | .hljs-name,
58 | .hljs-strong {
59 | font-weight: bold;
60 | }
61 |
62 | .hljs-emphasis {
63 | font-style: italic;
64 | }
65 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/brown-papersq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/brown-papersq.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/codepen-embed.css:
--------------------------------------------------------------------------------
1 | /*
2 | codepen.io Embed Theme
3 | Author: Justin Perry
4 | Original theme - https://github.com/chriskempson/tomorrow-theme
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #222;
12 | color: #fff;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-quote {
17 | color: #777;
18 | }
19 |
20 | .hljs-variable,
21 | .hljs-template-variable,
22 | .hljs-tag,
23 | .hljs-regexp,
24 | .hljs-meta,
25 | .hljs-number,
26 | .hljs-built_in,
27 | .hljs-builtin-name,
28 | .hljs-literal,
29 | .hljs-params,
30 | .hljs-symbol,
31 | .hljs-bullet,
32 | .hljs-link,
33 | .hljs-deletion {
34 | color: #ab875d;
35 | }
36 |
37 | .hljs-section,
38 | .hljs-title,
39 | .hljs-name,
40 | .hljs-selector-id,
41 | .hljs-selector-class,
42 | .hljs-type,
43 | .hljs-attribute {
44 | color: #9b869b;
45 | }
46 |
47 | .hljs-string,
48 | .hljs-keyword,
49 | .hljs-selector-tag,
50 | .hljs-addition {
51 | color: #8f9c6c;
52 | }
53 |
54 | .hljs-emphasis {
55 | font-style: italic;
56 | }
57 |
58 | .hljs-strong {
59 | font-weight: bold;
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/color-brewer.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Colorbrewer theme
4 | Original: https://github.com/mbostock/colorbrewer-theme (c) Mike Bostock
5 | Ported by Fabrício Tavares de Oliveira
6 |
7 | */
8 |
9 | .hljs {
10 | display: block;
11 | overflow-x: auto;
12 | padding: 0.5em;
13 | background: #fff;
14 | }
15 |
16 | .hljs,
17 | .hljs-subst {
18 | color: #000;
19 | }
20 |
21 | .hljs-string,
22 | .hljs-meta,
23 | .hljs-symbol,
24 | .hljs-template-tag,
25 | .hljs-template-variable,
26 | .hljs-addition {
27 | color: #756bb1;
28 | }
29 |
30 | .hljs-comment,
31 | .hljs-quote {
32 | color: #636363;
33 | }
34 |
35 | .hljs-number,
36 | .hljs-regexp,
37 | .hljs-literal,
38 | .hljs-bullet,
39 | .hljs-link {
40 | color: #31a354;
41 | }
42 |
43 | .hljs-deletion,
44 | .hljs-variable {
45 | color: #88f;
46 | }
47 |
48 |
49 |
50 | .hljs-keyword,
51 | .hljs-selector-tag,
52 | .hljs-title,
53 | .hljs-section,
54 | .hljs-built_in,
55 | .hljs-doctag,
56 | .hljs-type,
57 | .hljs-tag,
58 | .hljs-name,
59 | .hljs-selector-id,
60 | .hljs-selector-class,
61 | .hljs-strong {
62 | color: #3182bd;
63 | }
64 |
65 | .hljs-emphasis {
66 | font-style: italic;
67 | }
68 |
69 | .hljs-attribute {
70 | color: #e6550d;
71 | }
72 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/darcula.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Darcula color scheme from the JetBrains family of IDEs
4 |
5 | */
6 |
7 |
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | background: #2b2b2b;
13 | }
14 |
15 | .hljs {
16 | color: #bababa;
17 | }
18 |
19 | .hljs-strong,
20 | .hljs-emphasis {
21 | color: #a8a8a2;
22 | }
23 |
24 | .hljs-bullet,
25 | .hljs-quote,
26 | .hljs-link,
27 | .hljs-number,
28 | .hljs-regexp,
29 | .hljs-literal {
30 | color: #6896ba;
31 | }
32 |
33 | .hljs-code,
34 | .hljs-selector-class {
35 | color: #a6e22e;
36 | }
37 |
38 | .hljs-emphasis {
39 | font-style: italic;
40 | }
41 |
42 | .hljs-keyword,
43 | .hljs-selector-tag,
44 | .hljs-section,
45 | .hljs-attribute,
46 | .hljs-name,
47 | .hljs-variable {
48 | color: #cb7832;
49 | }
50 |
51 | .hljs-params {
52 | color: #b9b9b9;
53 | }
54 |
55 | .hljs-string {
56 | color: #6a8759;
57 | }
58 |
59 | .hljs-subst,
60 | .hljs-type,
61 | .hljs-built_in,
62 | .hljs-builtin-name,
63 | .hljs-symbol,
64 | .hljs-selector-id,
65 | .hljs-selector-attr,
66 | .hljs-selector-pseudo,
67 | .hljs-template-tag,
68 | .hljs-template-variable,
69 | .hljs-addition {
70 | color: #e0c46c;
71 | }
72 |
73 | .hljs-comment,
74 | .hljs-deletion,
75 | .hljs-meta {
76 | color: #7f7f7f;
77 | }
78 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/dark.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Dark style from softwaremaniacs.org (c) Ivan Sagalaev
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #444;
12 | }
13 |
14 | .hljs-keyword,
15 | .hljs-selector-tag,
16 | .hljs-literal,
17 | .hljs-section,
18 | .hljs-link {
19 | color: white;
20 | }
21 |
22 | .hljs,
23 | .hljs-subst {
24 | color: #ddd;
25 | }
26 |
27 | .hljs-string,
28 | .hljs-title,
29 | .hljs-name,
30 | .hljs-type,
31 | .hljs-attribute,
32 | .hljs-symbol,
33 | .hljs-bullet,
34 | .hljs-built_in,
35 | .hljs-addition,
36 | .hljs-variable,
37 | .hljs-template-tag,
38 | .hljs-template-variable {
39 | color: #d88;
40 | }
41 |
42 | .hljs-comment,
43 | .hljs-quote,
44 | .hljs-deletion,
45 | .hljs-meta {
46 | color: #777;
47 | }
48 |
49 | .hljs-keyword,
50 | .hljs-selector-tag,
51 | .hljs-literal,
52 | .hljs-title,
53 | .hljs-section,
54 | .hljs-doctag,
55 | .hljs-type,
56 | .hljs-name,
57 | .hljs-strong {
58 | font-weight: bold;
59 | }
60 |
61 | .hljs-emphasis {
62 | font-style: italic;
63 | }
64 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/darkula.css:
--------------------------------------------------------------------------------
1 | /*
2 | Deprecated due to a typo in the name and left here for compatibility purpose only.
3 | Please use darcula.css instead.
4 | */
5 |
6 | @import url('darcula.css');
7 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/dracula.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Dracula Theme v1.2.0
4 |
5 | https://github.com/zenorocha/dracula-theme
6 |
7 | Copyright 2015, All rights reserved
8 |
9 | Code licensed under the MIT license
10 | http://zenorocha.mit-license.org
11 |
12 | @author Éverton Ribeiro
13 | @author Zeno Rocha
14 |
15 | */
16 |
17 | .hljs {
18 | display: block;
19 | overflow-x: auto;
20 | padding: 0.5em;
21 | background: #282a36;
22 | }
23 |
24 | .hljs-keyword,
25 | .hljs-selector-tag,
26 | .hljs-literal,
27 | .hljs-section,
28 | .hljs-link {
29 | color: #8be9fd;
30 | }
31 |
32 | .hljs-function .hljs-keyword {
33 | color: #ff79c6;
34 | }
35 |
36 | .hljs,
37 | .hljs-subst {
38 | color: #f8f8f2;
39 | }
40 |
41 | .hljs-string,
42 | .hljs-title,
43 | .hljs-name,
44 | .hljs-type,
45 | .hljs-attribute,
46 | .hljs-symbol,
47 | .hljs-bullet,
48 | .hljs-addition,
49 | .hljs-variable,
50 | .hljs-template-tag,
51 | .hljs-template-variable {
52 | color: #f1fa8c;
53 | }
54 |
55 | .hljs-comment,
56 | .hljs-quote,
57 | .hljs-deletion,
58 | .hljs-meta {
59 | color: #6272a4;
60 | }
61 |
62 | .hljs-keyword,
63 | .hljs-selector-tag,
64 | .hljs-literal,
65 | .hljs-title,
66 | .hljs-section,
67 | .hljs-doctag,
68 | .hljs-type,
69 | .hljs-name,
70 | .hljs-strong {
71 | font-weight: bold;
72 | }
73 |
74 | .hljs-emphasis {
75 | font-style: italic;
76 | }
77 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/far.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | FAR Style (c) MajestiC
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #000080;
12 | }
13 |
14 | .hljs,
15 | .hljs-subst {
16 | color: #0ff;
17 | }
18 |
19 | .hljs-string,
20 | .hljs-attribute,
21 | .hljs-symbol,
22 | .hljs-bullet,
23 | .hljs-built_in,
24 | .hljs-builtin-name,
25 | .hljs-template-tag,
26 | .hljs-template-variable,
27 | .hljs-addition {
28 | color: #ff0;
29 | }
30 |
31 | .hljs-keyword,
32 | .hljs-selector-tag,
33 | .hljs-section,
34 | .hljs-type,
35 | .hljs-name,
36 | .hljs-selector-id,
37 | .hljs-selector-class,
38 | .hljs-variable {
39 | color: #fff;
40 | }
41 |
42 | .hljs-comment,
43 | .hljs-quote,
44 | .hljs-doctag,
45 | .hljs-deletion {
46 | color: #888;
47 | }
48 |
49 | .hljs-number,
50 | .hljs-regexp,
51 | .hljs-literal,
52 | .hljs-link {
53 | color: #0f0;
54 | }
55 |
56 | .hljs-meta {
57 | color: #008080;
58 | }
59 |
60 | .hljs-keyword,
61 | .hljs-selector-tag,
62 | .hljs-title,
63 | .hljs-section,
64 | .hljs-name,
65 | .hljs-strong {
66 | font-weight: bold;
67 | }
68 |
69 | .hljs-emphasis {
70 | font-style: italic;
71 | }
72 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/github-gist.css:
--------------------------------------------------------------------------------
1 | /**
2 | * GitHub Gist Theme
3 | * Author : Louis Barranqueiro - https://github.com/LouisBarranqueiro
4 | */
5 |
6 | .hljs {
7 | display: block;
8 | background: white;
9 | padding: 0.5em;
10 | color: #333333;
11 | overflow-x: auto;
12 | }
13 |
14 | .hljs-comment,
15 | .hljs-meta {
16 | color: #969896;
17 | }
18 |
19 | .hljs-string,
20 | .hljs-variable,
21 | .hljs-template-variable,
22 | .hljs-strong,
23 | .hljs-emphasis,
24 | .hljs-quote {
25 | color: #df5000;
26 | }
27 |
28 | .hljs-keyword,
29 | .hljs-selector-tag,
30 | .hljs-type {
31 | color: #a71d5d;
32 | }
33 |
34 | .hljs-literal,
35 | .hljs-symbol,
36 | .hljs-bullet,
37 | .hljs-attribute {
38 | color: #0086b3;
39 | }
40 |
41 | .hljs-section,
42 | .hljs-name {
43 | color: #63a35c;
44 | }
45 |
46 | .hljs-tag {
47 | color: #333333;
48 | }
49 |
50 | .hljs-title,
51 | .hljs-attr,
52 | .hljs-selector-id,
53 | .hljs-selector-class,
54 | .hljs-selector-attr,
55 | .hljs-selector-pseudo {
56 | color: #795da3;
57 | }
58 |
59 | .hljs-addition {
60 | color: #55a532;
61 | background-color: #eaffea;
62 | }
63 |
64 | .hljs-deletion {
65 | color: #bd2c00;
66 | background-color: #ffecec;
67 | }
68 |
69 | .hljs-link {
70 | text-decoration: underline;
71 | }
72 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/ir-black.css:
--------------------------------------------------------------------------------
1 | /*
2 | IR_Black style (c) Vasily Mikhailitchenko
3 | */
4 |
5 | .hljs {
6 | display: block;
7 | overflow-x: auto;
8 | padding: 0.5em;
9 | background: #000;
10 | color: #f8f8f8;
11 | }
12 |
13 | .hljs-comment,
14 | .hljs-quote,
15 | .hljs-meta {
16 | color: #7c7c7c;
17 | }
18 |
19 | .hljs-keyword,
20 | .hljs-selector-tag,
21 | .hljs-tag,
22 | .hljs-name {
23 | color: #96cbfe;
24 | }
25 |
26 | .hljs-attribute,
27 | .hljs-selector-id {
28 | color: #ffffb6;
29 | }
30 |
31 | .hljs-string,
32 | .hljs-selector-attr,
33 | .hljs-selector-pseudo,
34 | .hljs-addition {
35 | color: #a8ff60;
36 | }
37 |
38 | .hljs-subst {
39 | color: #daefa3;
40 | }
41 |
42 | .hljs-regexp,
43 | .hljs-link {
44 | color: #e9c062;
45 | }
46 |
47 | .hljs-title,
48 | .hljs-section,
49 | .hljs-type,
50 | .hljs-doctag {
51 | color: #ffffb6;
52 | }
53 |
54 | .hljs-symbol,
55 | .hljs-bullet,
56 | .hljs-variable,
57 | .hljs-template-variable,
58 | .hljs-literal {
59 | color: #c6c5fe;
60 | }
61 |
62 | .hljs-number,
63 | .hljs-deletion {
64 | color:#ff73fd;
65 | }
66 |
67 | .hljs-emphasis {
68 | font-style: italic;
69 | }
70 |
71 | .hljs-strong {
72 | font-weight: bold;
73 | }
74 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/magula.css:
--------------------------------------------------------------------------------
1 | /*
2 | Description: Magula style for highligh.js
3 | Author: Ruslan Keba
4 | Website: http://rukeba.com/
5 | Version: 1.0
6 | Date: 2009-01-03
7 | Music: Aphex Twin / Xtal
8 | */
9 |
10 | .hljs {
11 | display: block;
12 | overflow-x: auto;
13 | padding: 0.5em;
14 | background-color: #f4f4f4;
15 | }
16 |
17 | .hljs,
18 | .hljs-subst {
19 | color: black;
20 | }
21 |
22 | .hljs-string,
23 | .hljs-title,
24 | .hljs-symbol,
25 | .hljs-bullet,
26 | .hljs-attribute,
27 | .hljs-addition,
28 | .hljs-variable,
29 | .hljs-template-tag,
30 | .hljs-template-variable {
31 | color: #050;
32 | }
33 |
34 | .hljs-comment,
35 | .hljs-quote {
36 | color: #777;
37 | }
38 |
39 | .hljs-number,
40 | .hljs-regexp,
41 | .hljs-literal,
42 | .hljs-type,
43 | .hljs-link {
44 | color: #800;
45 | }
46 |
47 | .hljs-deletion,
48 | .hljs-meta {
49 | color: #00e;
50 | }
51 |
52 | .hljs-keyword,
53 | .hljs-selector-tag,
54 | .hljs-doctag,
55 | .hljs-title,
56 | .hljs-section,
57 | .hljs-built_in,
58 | .hljs-tag,
59 | .hljs-name {
60 | font-weight: bold;
61 | color: navy;
62 | }
63 |
64 | .hljs-emphasis {
65 | font-style: italic;
66 | }
67 |
68 | .hljs-strong {
69 | font-weight: bold;
70 | }
71 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/mono-blue.css:
--------------------------------------------------------------------------------
1 | /*
2 | Five-color theme from a single blue hue.
3 | */
4 | .hljs {
5 | display: block;
6 | overflow-x: auto;
7 | padding: 0.5em;
8 | background: #eaeef3;
9 | }
10 |
11 | .hljs {
12 | color: #00193a;
13 | }
14 |
15 | .hljs-keyword,
16 | .hljs-selector-tag,
17 | .hljs-title,
18 | .hljs-section,
19 | .hljs-doctag,
20 | .hljs-name,
21 | .hljs-strong {
22 | font-weight: bold;
23 | }
24 |
25 | .hljs-comment {
26 | color: #738191;
27 | }
28 |
29 | .hljs-string,
30 | .hljs-title,
31 | .hljs-section,
32 | .hljs-built_in,
33 | .hljs-literal,
34 | .hljs-type,
35 | .hljs-addition,
36 | .hljs-tag,
37 | .hljs-quote,
38 | .hljs-name,
39 | .hljs-selector-id,
40 | .hljs-selector-class {
41 | color: #0048ab;
42 | }
43 |
44 | .hljs-meta,
45 | .hljs-subst,
46 | .hljs-symbol,
47 | .hljs-regexp,
48 | .hljs-attribute,
49 | .hljs-deletion,
50 | .hljs-variable,
51 | .hljs-template-variable,
52 | .hljs-link,
53 | .hljs-bullet {
54 | color: #4c81c9;
55 | }
56 |
57 | .hljs-emphasis {
58 | font-style: italic;
59 | }
60 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/monokai.css:
--------------------------------------------------------------------------------
1 | /*
2 | Monokai style - ported by Luigi Maselli - http://grigio.org
3 | */
4 |
5 | .hljs {
6 | display: block;
7 | overflow-x: auto;
8 | padding: 0.5em;
9 | background: #272822; color: #ddd;
10 | }
11 |
12 | .hljs-tag,
13 | .hljs-keyword,
14 | .hljs-selector-tag,
15 | .hljs-literal,
16 | .hljs-strong,
17 | .hljs-name {
18 | color: #f92672;
19 | }
20 |
21 | .hljs-code {
22 | color: #66d9ef;
23 | }
24 |
25 | .hljs-class .hljs-title {
26 | color: white;
27 | }
28 |
29 | .hljs-attribute,
30 | .hljs-symbol,
31 | .hljs-regexp,
32 | .hljs-link {
33 | color: #bf79db;
34 | }
35 |
36 | .hljs-string,
37 | .hljs-bullet,
38 | .hljs-subst,
39 | .hljs-title,
40 | .hljs-section,
41 | .hljs-emphasis,
42 | .hljs-type,
43 | .hljs-built_in,
44 | .hljs-builtin-name,
45 | .hljs-selector-attr,
46 | .hljs-selector-pseudo,
47 | .hljs-addition,
48 | .hljs-variable,
49 | .hljs-template-tag,
50 | .hljs-template-variable {
51 | color: #a6e22e;
52 | }
53 |
54 | .hljs-comment,
55 | .hljs-quote,
56 | .hljs-deletion,
57 | .hljs-meta {
58 | color: #75715e;
59 | }
60 |
61 | .hljs-keyword,
62 | .hljs-selector-tag,
63 | .hljs-literal,
64 | .hljs-doctag,
65 | .hljs-title,
66 | .hljs-section,
67 | .hljs-type,
68 | .hljs-selector-id {
69 | font-weight: bold;
70 | }
71 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/ocean.css:
--------------------------------------------------------------------------------
1 | /* Ocean Dark Theme */
2 | /* https://github.com/gavsiu */
3 | /* Original theme - https://github.com/chriskempson/base16 */
4 |
5 | /* Ocean Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #65737e;
9 | }
10 |
11 | /* Ocean Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-tag,
15 | .hljs-name,
16 | .hljs-selector-id,
17 | .hljs-selector-class,
18 | .hljs-regexp,
19 | .hljs-deletion {
20 | color: #bf616a;
21 | }
22 |
23 | /* Ocean Orange */
24 | .hljs-number,
25 | .hljs-built_in,
26 | .hljs-builtin-name,
27 | .hljs-literal,
28 | .hljs-type,
29 | .hljs-params,
30 | .hljs-meta,
31 | .hljs-link {
32 | color: #d08770;
33 | }
34 |
35 | /* Ocean Yellow */
36 | .hljs-attribute {
37 | color: #ebcb8b;
38 | }
39 |
40 | /* Ocean Green */
41 | .hljs-string,
42 | .hljs-symbol,
43 | .hljs-bullet,
44 | .hljs-addition {
45 | color: #a3be8c;
46 | }
47 |
48 | /* Ocean Blue */
49 | .hljs-title,
50 | .hljs-section {
51 | color: #8fa1b3;
52 | }
53 |
54 | /* Ocean Purple */
55 | .hljs-keyword,
56 | .hljs-selector-tag {
57 | color: #b48ead;
58 | }
59 |
60 | .hljs {
61 | display: block;
62 | overflow-x: auto;
63 | background: #2b303b;
64 | color: #c0c5ce;
65 | padding: 0.5em;
66 | }
67 |
68 | .hljs-emphasis {
69 | font-style: italic;
70 | }
71 |
72 | .hljs-strong {
73 | font-weight: bold;
74 | }
75 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/paraiso-dark.css:
--------------------------------------------------------------------------------
1 | /*
2 | Paraíso (dark)
3 | Created by Jan T. Sott (http://github.com/idleberg)
4 | Inspired by the art of Rubens LP (http://www.rubenslp.com.br)
5 | */
6 |
7 | /* Paraíso Comment */
8 | .hljs-comment,
9 | .hljs-quote {
10 | color: #8d8687;
11 | }
12 |
13 | /* Paraíso Red */
14 | .hljs-variable,
15 | .hljs-template-variable,
16 | .hljs-tag,
17 | .hljs-name,
18 | .hljs-selector-id,
19 | .hljs-selector-class,
20 | .hljs-regexp,
21 | .hljs-link,
22 | .hljs-meta {
23 | color: #ef6155;
24 | }
25 |
26 | /* Paraíso Orange */
27 | .hljs-number,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params,
33 | .hljs-deletion {
34 | color: #f99b15;
35 | }
36 |
37 | /* Paraíso Yellow */
38 | .hljs-title,
39 | .hljs-section,
40 | .hljs-attribute {
41 | color: #fec418;
42 | }
43 |
44 | /* Paraíso Green */
45 | .hljs-string,
46 | .hljs-symbol,
47 | .hljs-bullet,
48 | .hljs-addition {
49 | color: #48b685;
50 | }
51 |
52 | /* Paraíso Purple */
53 | .hljs-keyword,
54 | .hljs-selector-tag {
55 | color: #815ba4;
56 | }
57 |
58 | .hljs {
59 | display: block;
60 | overflow-x: auto;
61 | background: #2f1e2e;
62 | color: #a39e9b;
63 | padding: 0.5em;
64 | }
65 |
66 | .hljs-emphasis {
67 | font-style: italic;
68 | }
69 |
70 | .hljs-strong {
71 | font-weight: bold;
72 | }
73 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/paraiso-light.css:
--------------------------------------------------------------------------------
1 | /*
2 | Paraíso (light)
3 | Created by Jan T. Sott (http://github.com/idleberg)
4 | Inspired by the art of Rubens LP (http://www.rubenslp.com.br)
5 | */
6 |
7 | /* Paraíso Comment */
8 | .hljs-comment,
9 | .hljs-quote {
10 | color: #776e71;
11 | }
12 |
13 | /* Paraíso Red */
14 | .hljs-variable,
15 | .hljs-template-variable,
16 | .hljs-tag,
17 | .hljs-name,
18 | .hljs-selector-id,
19 | .hljs-selector-class,
20 | .hljs-regexp,
21 | .hljs-link,
22 | .hljs-meta {
23 | color: #ef6155;
24 | }
25 |
26 | /* Paraíso Orange */
27 | .hljs-number,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params,
33 | .hljs-deletion {
34 | color: #f99b15;
35 | }
36 |
37 | /* Paraíso Yellow */
38 | .hljs-title,
39 | .hljs-section,
40 | .hljs-attribute {
41 | color: #fec418;
42 | }
43 |
44 | /* Paraíso Green */
45 | .hljs-string,
46 | .hljs-symbol,
47 | .hljs-bullet,
48 | .hljs-addition {
49 | color: #48b685;
50 | }
51 |
52 | /* Paraíso Purple */
53 | .hljs-keyword,
54 | .hljs-selector-tag {
55 | color: #815ba4;
56 | }
57 |
58 | .hljs {
59 | display: block;
60 | overflow-x: auto;
61 | background: #e7e9db;
62 | color: #4f424c;
63 | padding: 0.5em;
64 | }
65 |
66 | .hljs-emphasis {
67 | font-style: italic;
68 | }
69 |
70 | .hljs-strong {
71 | font-weight: bold;
72 | }
73 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/pojoaque.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/pojoaque.jpg
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/qtcreator_dark.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Qt Creator dark color scheme
4 |
5 | */
6 |
7 |
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | background: #000000;
13 | }
14 |
15 | .hljs,
16 | .hljs-subst,
17 | .hljs-tag,
18 | .hljs-title {
19 | color: #aaaaaa;
20 | }
21 |
22 | .hljs-strong,
23 | .hljs-emphasis {
24 | color: #a8a8a2;
25 | }
26 |
27 | .hljs-bullet,
28 | .hljs-quote,
29 | .hljs-number,
30 | .hljs-regexp,
31 | .hljs-literal {
32 | color: #ff55ff;
33 | }
34 |
35 | .hljs-code
36 | .hljs-selector-class {
37 | color: #aaaaff;
38 | }
39 |
40 | .hljs-emphasis,
41 | .hljs-stronge,
42 | .hljs-type {
43 | font-style: italic;
44 | }
45 |
46 | .hljs-keyword,
47 | .hljs-selector-tag,
48 | .hljs-function,
49 | .hljs-section,
50 | .hljs-symbol,
51 | .hljs-name {
52 | color: #ffff55;
53 | }
54 |
55 | .hljs-attribute {
56 | color: #ff5555;
57 | }
58 |
59 | .hljs-variable,
60 | .hljs-params,
61 | .hljs-class .hljs-title {
62 | color: #8888ff;
63 | }
64 |
65 | .hljs-string,
66 | .hljs-selector-id,
67 | .hljs-selector-attr,
68 | .hljs-selector-pseudo,
69 | .hljs-type,
70 | .hljs-built_in,
71 | .hljs-builtin-name,
72 | .hljs-template-tag,
73 | .hljs-template-variable,
74 | .hljs-addition,
75 | .hljs-link {
76 | color: #ff55ff;
77 | }
78 |
79 | .hljs-comment,
80 | .hljs-meta,
81 | .hljs-deletion {
82 | color: #55ffff;
83 | }
84 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/qtcreator_light.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Qt Creator light color scheme
4 |
5 | */
6 |
7 |
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | background: #ffffff;
13 | }
14 |
15 | .hljs,
16 | .hljs-subst,
17 | .hljs-tag,
18 | .hljs-title {
19 | color: #000000;
20 | }
21 |
22 | .hljs-strong,
23 | .hljs-emphasis {
24 | color: #000000;
25 | }
26 |
27 | .hljs-bullet,
28 | .hljs-quote,
29 | .hljs-number,
30 | .hljs-regexp,
31 | .hljs-literal {
32 | color: #000080;
33 | }
34 |
35 | .hljs-code
36 | .hljs-selector-class {
37 | color: #800080;
38 | }
39 |
40 | .hljs-emphasis,
41 | .hljs-stronge,
42 | .hljs-type {
43 | font-style: italic;
44 | }
45 |
46 | .hljs-keyword,
47 | .hljs-selector-tag,
48 | .hljs-function,
49 | .hljs-section,
50 | .hljs-symbol,
51 | .hljs-name {
52 | color: #808000;
53 | }
54 |
55 | .hljs-attribute {
56 | color: #800000;
57 | }
58 |
59 | .hljs-variable,
60 | .hljs-params,
61 | .hljs-class .hljs-title {
62 | color: #0055AF;
63 | }
64 |
65 | .hljs-string,
66 | .hljs-selector-id,
67 | .hljs-selector-attr,
68 | .hljs-selector-pseudo,
69 | .hljs-type,
70 | .hljs-built_in,
71 | .hljs-builtin-name,
72 | .hljs-template-tag,
73 | .hljs-template-variable,
74 | .hljs-addition,
75 | .hljs-link {
76 | color: #008000;
77 | }
78 |
79 | .hljs-comment,
80 | .hljs-meta,
81 | .hljs-deletion {
82 | color: #008000;
83 | }
84 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/rainbow.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Style with support for rainbow parens
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #474949;
12 | color: #d1d9e1;
13 | }
14 |
15 |
16 | .hljs-comment,
17 | .hljs-quote {
18 | color: #969896;
19 | font-style: italic;
20 | }
21 |
22 | .hljs-keyword,
23 | .hljs-selector-tag,
24 | .hljs-literal,
25 | .hljs-type,
26 | .hljs-addition {
27 | color: #cc99cc;
28 | }
29 |
30 | .hljs-number,
31 | .hljs-selector-attr,
32 | .hljs-selector-pseudo {
33 | color: #f99157;
34 | }
35 |
36 | .hljs-string,
37 | .hljs-doctag,
38 | .hljs-regexp {
39 | color: #8abeb7;
40 | }
41 |
42 | .hljs-title,
43 | .hljs-name,
44 | .hljs-section,
45 | .hljs-built_in {
46 | color: #b5bd68;
47 | }
48 |
49 | .hljs-variable,
50 | .hljs-template-variable,
51 | .hljs-selector-id,
52 | .hljs-class .hljs-title {
53 | color: #ffcc66;
54 | }
55 |
56 | .hljs-section,
57 | .hljs-name,
58 | .hljs-strong {
59 | font-weight: bold;
60 | }
61 |
62 | .hljs-symbol,
63 | .hljs-bullet,
64 | .hljs-subst,
65 | .hljs-meta,
66 | .hljs-link {
67 | color: #f99157;
68 | }
69 |
70 | .hljs-deletion {
71 | color: #dc322f;
72 | }
73 |
74 | .hljs-formula {
75 | background: #eee8d5;
76 | }
77 |
78 | .hljs-attr,
79 | .hljs-attribute {
80 | color: #81a2be;
81 | }
82 |
83 | .hljs-emphasis {
84 | font-style: italic;
85 | }
86 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/school-book.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | School Book style from goldblog.com.ua (c) Zaripov Yura
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 15px 0.5em 0.5em 30px;
11 | font-size: 11px;
12 | line-height:16px;
13 | }
14 |
15 | pre{
16 | background:#f6f6ae url(./school-book.png);
17 | border-top: solid 2px #d2e8b9;
18 | border-bottom: solid 1px #d2e8b9;
19 | }
20 |
21 | .hljs-keyword,
22 | .hljs-selector-tag,
23 | .hljs-literal {
24 | color:#005599;
25 | font-weight:bold;
26 | }
27 |
28 | .hljs,
29 | .hljs-subst {
30 | color: #3e5915;
31 | }
32 |
33 | .hljs-string,
34 | .hljs-title,
35 | .hljs-section,
36 | .hljs-type,
37 | .hljs-symbol,
38 | .hljs-bullet,
39 | .hljs-attribute,
40 | .hljs-built_in,
41 | .hljs-builtin-name,
42 | .hljs-addition,
43 | .hljs-variable,
44 | .hljs-template-tag,
45 | .hljs-template-variable,
46 | .hljs-link {
47 | color: #2c009f;
48 | }
49 |
50 | .hljs-comment,
51 | .hljs-quote,
52 | .hljs-deletion,
53 | .hljs-meta {
54 | color: #e60415;
55 | }
56 |
57 | .hljs-keyword,
58 | .hljs-selector-tag,
59 | .hljs-literal,
60 | .hljs-doctag,
61 | .hljs-title,
62 | .hljs-section,
63 | .hljs-type,
64 | .hljs-name,
65 | .hljs-selector-id,
66 | .hljs-strong {
67 | font-weight: bold;
68 | }
69 |
70 | .hljs-emphasis {
71 | font-style: italic;
72 | }
73 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/school-book.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/school-book.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/tomorrow.css:
--------------------------------------------------------------------------------
1 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
2 |
3 | /* Tomorrow Comment */
4 | .hljs-comment,
5 | .hljs-quote {
6 | color: #8e908c;
7 | }
8 |
9 | /* Tomorrow Red */
10 | .hljs-variable,
11 | .hljs-template-variable,
12 | .hljs-tag,
13 | .hljs-name,
14 | .hljs-selector-id,
15 | .hljs-selector-class,
16 | .hljs-regexp,
17 | .hljs-deletion {
18 | color: #c82829;
19 | }
20 |
21 | /* Tomorrow Orange */
22 | .hljs-number,
23 | .hljs-built_in,
24 | .hljs-builtin-name,
25 | .hljs-literal,
26 | .hljs-type,
27 | .hljs-params,
28 | .hljs-meta,
29 | .hljs-link {
30 | color: #f5871f;
31 | }
32 |
33 | /* Tomorrow Yellow */
34 | .hljs-attribute {
35 | color: #eab700;
36 | }
37 |
38 | /* Tomorrow Green */
39 | .hljs-string,
40 | .hljs-symbol,
41 | .hljs-bullet,
42 | .hljs-addition {
43 | color: #718c00;
44 | }
45 |
46 | /* Tomorrow Blue */
47 | .hljs-title,
48 | .hljs-section {
49 | color: #4271ae;
50 | }
51 |
52 | /* Tomorrow Purple */
53 | .hljs-keyword,
54 | .hljs-selector-tag {
55 | color: #8959a8;
56 | }
57 |
58 | .hljs {
59 | display: block;
60 | overflow-x: auto;
61 | background: white;
62 | color: #4d4d4c;
63 | padding: 0.5em;
64 | }
65 |
66 | .hljs-emphasis {
67 | font-style: italic;
68 | }
69 |
70 | .hljs-strong {
71 | font-weight: bold;
72 | }
73 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/vs.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Visual Studio-like style based on original C# coloring by Jason Diamond
4 |
5 | */
6 | .hljs {
7 | display: block;
8 | overflow-x: auto;
9 | padding: 0.5em;
10 | background: white;
11 | color: black;
12 | }
13 |
14 | .hljs-comment,
15 | .hljs-quote,
16 | .hljs-variable {
17 | color: #008000;
18 | }
19 |
20 | .hljs-keyword,
21 | .hljs-selector-tag,
22 | .hljs-built_in,
23 | .hljs-name,
24 | .hljs-tag {
25 | color: #00f;
26 | }
27 |
28 | .hljs-string,
29 | .hljs-title,
30 | .hljs-section,
31 | .hljs-attribute,
32 | .hljs-literal,
33 | .hljs-template-tag,
34 | .hljs-template-variable,
35 | .hljs-type,
36 | .hljs-addition {
37 | color: #a31515;
38 | }
39 |
40 | .hljs-deletion,
41 | .hljs-selector-attr,
42 | .hljs-selector-pseudo,
43 | .hljs-meta {
44 | color: #2b91af;
45 | }
46 |
47 | .hljs-doctag {
48 | color: #808080;
49 | }
50 |
51 | .hljs-attr {
52 | color: #f00;
53 | }
54 |
55 | .hljs-symbol,
56 | .hljs-bullet,
57 | .hljs-link {
58 | color: #00b0e8;
59 | }
60 |
61 |
62 | .hljs-emphasis {
63 | font-style: italic;
64 | }
65 |
66 | .hljs-strong {
67 | font-weight: bold;
68 | }
69 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/syntaxhiglight/styles/zenburn.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Zenburn style from voldmar.ru (c) Vladimir Epifanov
4 | based on dark.css by Ivan Sagalaev
5 |
6 | */
7 |
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | background: #3f3f3f;
13 | color: #dcdcdc;
14 | }
15 |
16 | .hljs-keyword,
17 | .hljs-selector-tag,
18 | .hljs-tag {
19 | color: #e3ceab;
20 | }
21 |
22 | .hljs-template-tag {
23 | color: #dcdcdc;
24 | }
25 |
26 | .hljs-number {
27 | color: #8cd0d3;
28 | }
29 |
30 | .hljs-variable,
31 | .hljs-template-variable,
32 | .hljs-attribute {
33 | color: #efdcbc;
34 | }
35 |
36 | .hljs-literal {
37 | color: #efefaf;
38 | }
39 |
40 | .hljs-subst {
41 | color: #8f8f8f;
42 | }
43 |
44 | .hljs-title,
45 | .hljs-name,
46 | .hljs-selector-id,
47 | .hljs-selector-class,
48 | .hljs-section,
49 | .hljs-type {
50 | color: #efef8f;
51 | }
52 |
53 | .hljs-symbol,
54 | .hljs-bullet,
55 | .hljs-link {
56 | color: #dca3a3;
57 | }
58 |
59 | .hljs-deletion,
60 | .hljs-string,
61 | .hljs-built_in,
62 | .hljs-builtin-name {
63 | color: #cc9393;
64 | }
65 |
66 | .hljs-addition,
67 | .hljs-comment,
68 | .hljs-quote,
69 | .hljs-meta {
70 | color: #7f9f7f;
71 | }
72 |
73 |
74 | .hljs-emphasis {
75 | font-style: italic;
76 | }
77 |
78 | .hljs-strong {
79 | font-weight: bold;
80 | }
81 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/DualEditor/util/fn-editor-util.js:
--------------------------------------------------------------------------------
1 | (function()
2 | {
3 | /**
4 | * @description : 사용자의 브라우저를 판별한다.
5 | * @param : None
6 | * @return : String IE, FF, SC, OP
7 | * @example : $.clientBrowser();
8 | */
9 | jQuery.clientBrowser = function()
10 | {
11 | var client = "";
12 | if(navigator.userAgent.toLowerCase().indexOf('msie') > -1){ // IE
13 | client = "IE";
14 | }else{
15 | client = "oher";
16 | }
17 | return client;
18 | };
19 |
20 | /**
21 | * @description : 화면에 레이어를 생성하여 출력한다. IE는 레이어, 기타는 console.log 를 사용한다.
22 | * @param : msg - 출력할 메시지
23 | * @return : None
24 | * @example : $.print('출력 메시지');
25 | */
26 | jQuery.print = function(msg){
27 | var browser = $.clientBrowser();
28 | if(browser == 'IE') {
29 | var $output = jQuery("#print-output");
30 |
31 | if($output.length === 0) {
32 | $output = jQuery('').appendTo('body');
33 | }
34 | jQuery('').html(msg).appendTo($output);
35 | } else {
36 | //console.log(msg);
37 | }
38 | };
39 |
40 |
41 | })(jQuery);
42 |
43 |
44 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/google/analytics.js:
--------------------------------------------------------------------------------
1 | (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
2 | (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
3 | m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
4 | })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
5 |
6 | ga('create', 'UA-83197341-1', 'auto');
7 | ga('send', 'pageview');
8 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/space/tree.js:
--------------------------------------------------------------------------------
1 | // Tree 구조의 JSON으로 자료형을 만든다.
2 | function makeTree(jsonRawData) {
3 | var treeMenu = [], arraysMap = {}, node, nodeMap;
4 |
5 | // First map the nodes of the array to an object -> create a hash table.
6 | for(var i = 0, len = jsonRawData.length; i < len; i++) {
7 | node = jsonRawData[i];
8 | arraysMap[node.id] = node;
9 | if (node.hasChild) {
10 | arraysMap[node.id]['nodes'] = [];
11 | }
12 | }
13 |
14 | for (var id in arraysMap) {
15 | if (arraysMap.hasOwnProperty(id)) {
16 | nodeMap = arraysMap[id];
17 |
18 | // Root가 아닐 경우 자식 노드로 추가함
19 | if (nodeMap.parentId) {
20 | arraysMap[nodeMap['parentId']]['nodes'].push(nodeMap);
21 | } else { // Root element 일 경우 push
22 | treeMenu.push(nodeMap);
23 | }
24 | }
25 | }
26 | return treeMenu;
27 | }
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/summernote/font/summernote.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/app/js/summernote/font/summernote.eot
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/summernote/font/summernote.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/app/js/summernote/font/summernote.ttf
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/summernote/font/summernote.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/app/js/summernote/font/summernote.woff
--------------------------------------------------------------------------------
/src/main/webapp/resource/app/js/summernote/summernote_sub.js:
--------------------------------------------------------------------------------
1 |
2 | var summertnote_sub = (function(){
3 | var summertnote_sub = {};
4 | summertnote_sub.test = function(){
5 | alert("test");
6 | };
7 | summertnote_sub.sendImage = function(file, el){
8 | var form_data = new FormData();
9 | form_data.append('uploadfile', file);
10 | $.ajax({
11 | url: "/common/uploadFile",
12 | method: "POST",
13 | type: "POST",
14 | data: form_data,
15 | enctype: 'multipart/form-data',
16 | processData: false,
17 | contentType: false,
18 | cache: false,
19 | success: function (req) {
20 | var url = req.data.filePath+"/"+req.data.savedName;
21 | url = "/imageView?path="+url;
22 | $(el).summernote('editor.insertImage', url);
23 | },
24 | error: function (e) {
25 | console.info(e);
26 | alert('업로드 중 에러가 발생했습니다. 파일 용량이 허용범위를 초과 했거나 올바르지 않은 파일 입니다.');
27 | }
28 | });
29 | };
30 | return summertnote_sub;
31 | });
32 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/images/avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/images/avatar.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/images/howling_space.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/images/howling_space.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/images/jqtree-circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/images/jqtree-circle.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/images/symbol-dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/images/symbol-dashboard.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/bootstrap-3.3.6-dist/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/bootstrap-3.3.6-dist/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/bootstrap-3.3.6-dist/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/bootstrap-3.3.6-dist/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/bootstrap-3.3.6-dist/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/bootstrap-3.3.6-dist/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/bootstrap-3.3.6-dist/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/bootstrap-3.3.6-dist/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/bootstrap-3.3.6-dist/js/npm.js:
--------------------------------------------------------------------------------
1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
2 | require('../../js/transition.js')
3 | require('../../js/alert.js')
4 | require('../../js/button.js')
5 | require('../../js/carousel.js')
6 | require('../../js/collapse.js')
7 | require('../../js/dropdown.js')
8 | require('../../js/modal.js')
9 | require('../../js/tooltip.js')
10 | require('../../js/popover.js')
11 | require('../../js/scrollspy.js')
12 | require('../../js/tab.js')
13 | require('../../js/affix.js')
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/bootstrap-theme/bootswatch/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/bootstrap-theme/bootswatch/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/bootstrap-theme/bootswatch/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/bootstrap-theme/bootswatch/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/bootstrap-theme/bootswatch/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/bootstrap-theme/bootswatch/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/bootstrap-theme/bootswatch/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/bootstrap-theme/bootswatch/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/css/bootstrap-tag-cloud/bootstrap-tag-cloud.css:
--------------------------------------------------------------------------------
1 | #tag-cloud {
2 | width: 285px;
3 | margin-left: 0;
4 | }
5 | .tag-cloud {
6 | background-color: #999999;
7 | -webkit-border-radius: 3px;
8 | -moz-border-radius: 3px;
9 | border-radius: 3px;
10 | color: #FFFFFF;
11 | cursor: pointer;
12 | display: inline-block;
13 | font-size: 12px;
14 | font-weight: bold;
15 | line-height: 21px;
16 | margin: 2px 3px 2px 2px;
17 | padding: 7px 11px;
18 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
19 | vertical-align: baseline;
20 | }
21 | .tag-cloud:after {
22 | color: #000000;
23 | content: " ×";
24 | font-size: 20px;
25 | font-weight: bold;
26 | line-height: 16px;
27 | opacity: 0.2;
28 | position: relative;
29 | text-shadow: 0 1px 0 #FFFFFF;
30 | top: 1px;
31 | }
32 |
33 | /* Colors */
34 |
35 | .tag-cloud.tag-cloud-info {
36 | background-color: #2fa4e7;
37 | }
38 | .tag-cloud.tag-cloud-success {
39 | background-color: #468847;
40 | }
41 | .tag-cloud.tag-cloud-warning {
42 | background-color: #F89406;
43 | }
44 | .tag-cloud.tag-cloud-danger {
45 | background-color: #B94A48;
46 | }
47 | .tag-cloud.tag-cloud-inverse {
48 | background-color: #333333;
49 | }
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/css/bootstrap-treeview.css:
--------------------------------------------------------------------------------
1 | /* =========================================================
2 | * bootstrap-treeview.css v1.2.0
3 | * =========================================================
4 | * Copyright 2013 Jonathan Miles
5 | * Project URL : http://www.jondmiles.com/bootstrap-treeview
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ========================================================= */
19 |
20 | .treeview .list-group-item {
21 | cursor: pointer;
22 | padding: 5px 2px 5px 5px;
23 | }
24 |
25 | .treeview span.indent {
26 | margin-left: 7px;
27 | margin-right: 7px;
28 | }
29 |
30 | .treeview span.icon {
31 | width: 12px;
32 | margin-right: 3px;
33 | }
34 |
35 | .treeview .node-disabled {
36 | color: silver;
37 | cursor: not-allowed;
38 | }
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/ekko-lightbox/dark-theme.css:
--------------------------------------------------------------------------------
1 | .modal-backdrop.in {
2 | -webkit-opacity: 0.95;
3 | -moz-opacity: 0.95;
4 | opacity: 0.95;
5 | background-color: #333333;
6 | }
7 | .ekko-lightbox .modal-content {
8 | -webkit-box-shadow: none;
9 | -moz-box-shadow: none;
10 | box-shadow: none;
11 | -webkit-border-radius: 0;
12 | -moz-border-radius: 0;
13 | border-radius: 0;
14 | border: none;
15 | background-color: transparent;
16 | }
17 | .ekko-lightbox .modal-header {
18 | border: 0;
19 | padding-left: 0;
20 | padding-right: 0;
21 | }
22 | .ekko-lightbox .modal-header .close {
23 | -webkit-opacity: 0.5;
24 | -moz-opacity: 0.5;
25 | opacity: 0.5;
26 | color: #fff;
27 | text-shadow: 0;
28 | font-weight: 100;
29 | margin-top: 5px;
30 | }
31 | .ekko-lightbox .modal-header .close:hover {
32 | -webkit-opacity: 1;
33 | -moz-opacity: 1;
34 | opacity: 1;
35 | }
36 | .ekko-lightbox .modal-header h4.modal-title {
37 | font-weight: 100;
38 | color: #fff;
39 | padding: 0;
40 | }
41 | .ekko-lightbox .modal-body {
42 | padding: 0;
43 | }
44 | .ekko-lightbox .modal-footer {
45 | -webkit-opacity: 0.9;
46 | -moz-opacity: 0.9;
47 | opacity: 0.9;
48 | border: 0;
49 | color: #fff;
50 | font-weight: 100;
51 | padding: 0;
52 | }
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/ekko-lightbox/ekko-lightbox.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Lightbox for Bootstrap 3 by @ashleydw
3 | * https://github.com/ashleydw/lightbox
4 | *
5 | * License: https://github.com/ashleydw/lightbox/blob/master/LICENSE
6 | */
7 |
8 | .ekko-lightbox-container {
9 | position: relative;
10 | }
11 |
12 | .ekko-lightbox-nav-overlay {
13 | position: absolute;
14 | top: 0;
15 | left: 0;
16 | z-index: 100;
17 | width: 100%;
18 | height: 100%;
19 | }
20 |
21 | .ekko-lightbox-nav-overlay a {
22 | z-index: 100;
23 | display: block;
24 | width: 49%;
25 | height: 100%;
26 | font-size: 30px;
27 | color: #fff;
28 | text-shadow: 2px 2px 4px #000;
29 | opacity: 0;
30 | filter: dropshadow(color=#000000, offx=2, offy=2);
31 | -webkit-transition: opacity 0.5s;
32 | -moz-transition: opacity 0.5s;
33 | -o-transition: opacity 0.5s;
34 | transition: opacity 0.5s;
35 | }
36 |
37 | .ekko-lightbox-nav-overlay a:empty {
38 | width: 49%;
39 | }
40 |
41 | .ekko-lightbox a:hover {
42 | text-decoration: none;
43 | opacity: 1;
44 | }
45 |
46 | .ekko-lightbox .glyphicon-chevron-left {
47 | left: 0;
48 | float: left;
49 | padding-left: 15px;
50 | text-align: left;
51 | }
52 |
53 | .ekko-lightbox .glyphicon-chevron-right {
54 | right: 0;
55 | float: right;
56 | padding-right: 15px;
57 | text-align: right;
58 | }
59 |
60 | .ekko-lightbox .modal-footer {
61 | text-align: left;
62 | }
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/ekko-lightbox/ekko-lightbox.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Lightbox for Bootstrap 3 by @ashleydw
3 | * https://github.com/ashleydw/lightbox
4 | *
5 | * License: https://github.com/ashleydw/lightbox/blob/master/LICENSE
6 | */.ekko-lightbox-container{position:relative}.ekko-lightbox-nav-overlay{position:absolute;top:0;left:0;z-index:100;width:100%;height:100%}.ekko-lightbox-nav-overlay a{z-index:100;display:block;width:49%;height:100%;font-size:30px;color:#fff;text-shadow:2px 2px 4px #000;opacity:0;filter:dropshadow(color=#000000,offx=2,offy=2);-webkit-transition:opacity .5s;-moz-transition:opacity .5s;-o-transition:opacity .5s;transition:opacity .5s}.ekko-lightbox-nav-overlay a:empty{width:49%}.ekko-lightbox a:hover{text-decoration:none;opacity:1}.ekko-lightbox .glyphicon-chevron-left{left:0;float:left;padding-left:15px;text-align:left}.ekko-lightbox .glyphicon-chevron-right{right:0;float:right;padding-right:15px;text-align:right}.ekko-lightbox .modal-footer{text-align:left}
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/font-awesome/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/font-awesome/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/font-awesome/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/font-awesome/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/font-awesome/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/less/animated.less:
--------------------------------------------------------------------------------
1 | // Animated Icons
2 | // --------------------------
3 |
4 | .@{fa-css-prefix}-spin {
5 | -webkit-animation: fa-spin 2s infinite linear;
6 | animation: fa-spin 2s infinite linear;
7 | }
8 |
9 | .@{fa-css-prefix}-pulse {
10 | -webkit-animation: fa-spin 1s infinite steps(8);
11 | animation: fa-spin 1s infinite steps(8);
12 | }
13 |
14 | @-webkit-keyframes fa-spin {
15 | 0% {
16 | -webkit-transform: rotate(0deg);
17 | transform: rotate(0deg);
18 | }
19 | 100% {
20 | -webkit-transform: rotate(359deg);
21 | transform: rotate(359deg);
22 | }
23 | }
24 |
25 | @keyframes fa-spin {
26 | 0% {
27 | -webkit-transform: rotate(0deg);
28 | transform: rotate(0deg);
29 | }
30 | 100% {
31 | -webkit-transform: rotate(359deg);
32 | transform: rotate(359deg);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/less/bordered-pulled.less:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em @fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .pull-right { float: right; }
11 | .pull-left { float: left; }
12 |
13 | .@{fa-css-prefix} {
14 | &.pull-left { margin-right: .3em; }
15 | &.pull-right { margin-left: .3em; }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/less/core.less:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .@{fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/less/fixed-width.less:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .@{fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/less/font-awesome.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables.less";
7 | @import "mixins.less";
8 | @import "path.less";
9 | @import "core.less";
10 | @import "larger.less";
11 | @import "fixed-width.less";
12 | @import "list.less";
13 | @import "bordered-pulled.less";
14 | @import "animated.less";
15 | @import "rotated-flipped.less";
16 | @import "stacked.less";
17 | @import "icons.less";
18 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/less/larger.less:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .@{fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .@{fa-css-prefix}-2x { font-size: 2em; }
11 | .@{fa-css-prefix}-3x { font-size: 3em; }
12 | .@{fa-css-prefix}-4x { font-size: 4em; }
13 | .@{fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/less/list.less:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: @fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .@{fa-css-prefix}-li {
11 | position: absolute;
12 | left: -@fa-li-width;
13 | width: @fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.@{fa-css-prefix}-lg {
17 | left: (-@fa-li-width + (4em / 14));
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/less/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | .fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox
12 |
13 | }
14 |
15 | .fa-icon-rotate(@degrees, @rotation) {
16 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation);
17 | -webkit-transform: rotate(@degrees);
18 | -ms-transform: rotate(@degrees);
19 | transform: rotate(@degrees);
20 | }
21 |
22 | .fa-icon-flip(@horiz, @vert, @rotation) {
23 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1);
24 | -webkit-transform: scale(@horiz, @vert);
25 | -ms-transform: scale(@horiz, @vert);
26 | transform: scale(@horiz, @vert);
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/less/path.less:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),
9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
13 | font-weight: normal;
14 | font-style: normal;
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/less/rotated-flipped.less:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
7 |
8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
10 |
11 | // Hook for IE8-9
12 | // -------------------------
13 |
14 | :root .@{fa-css-prefix}-rotate-90,
15 | :root .@{fa-css-prefix}-rotate-180,
16 | :root .@{fa-css-prefix}-rotate-270,
17 | :root .@{fa-css-prefix}-flip-horizontal,
18 | :root .@{fa-css-prefix}-flip-vertical {
19 | filter: none;
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/less/spinning.less:
--------------------------------------------------------------------------------
1 | // Spinning Icons
2 | // --------------------------
3 |
4 | .@{fa-css-prefix}-spin {
5 | -webkit-animation: spin 2s infinite linear;
6 | -moz-animation: spin 2s infinite linear;
7 | -o-animation: spin 2s infinite linear;
8 | animation: spin 2s infinite linear;
9 | }
10 |
11 | @-moz-keyframes spin {
12 | 0% { -moz-transform: rotate(0deg); }
13 | 100% { -moz-transform: rotate(359deg); }
14 | }
15 | @-webkit-keyframes spin {
16 | 0% { -webkit-transform: rotate(0deg); }
17 | 100% { -webkit-transform: rotate(359deg); }
18 | }
19 | @-o-keyframes spin {
20 | 0% { -o-transform: rotate(0deg); }
21 | 100% { -o-transform: rotate(359deg); }
22 | }
23 | @keyframes spin {
24 | 0% {
25 | -webkit-transform: rotate(0deg);
26 | transform: rotate(0deg);
27 | }
28 | 100% {
29 | -webkit-transform: rotate(359deg);
30 | transform: rotate(359deg);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/less/stacked.less:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; }
21 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/scss/_animated.scss:
--------------------------------------------------------------------------------
1 | // Spinning Icons
2 | // --------------------------
3 |
4 | .#{$fa-css-prefix}-spin {
5 | -webkit-animation: fa-spin 2s infinite linear;
6 | animation: fa-spin 2s infinite linear;
7 | }
8 |
9 | .#{$fa-css-prefix}-pulse {
10 | -webkit-animation: fa-spin 1s infinite steps(8);
11 | animation: fa-spin 1s infinite steps(8);
12 | }
13 |
14 | @-webkit-keyframes fa-spin {
15 | 0% {
16 | -webkit-transform: rotate(0deg);
17 | transform: rotate(0deg);
18 | }
19 | 100% {
20 | -webkit-transform: rotate(359deg);
21 | transform: rotate(359deg);
22 | }
23 | }
24 |
25 | @keyframes fa-spin {
26 | 0% {
27 | -webkit-transform: rotate(0deg);
28 | transform: rotate(0deg);
29 | }
30 | 100% {
31 | -webkit-transform: rotate(359deg);
32 | transform: rotate(359deg);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/scss/_bordered-pulled.scss:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em $fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .pull-right { float: right; }
11 | .pull-left { float: left; }
12 |
13 | .#{$fa-css-prefix} {
14 | &.pull-left { margin-right: .3em; }
15 | &.pull-right { margin-left: .3em; }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/scss/_core.scss:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/scss/_fixed-width.scss:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .#{$fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/scss/_larger.scss:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .#{$fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .#{$fa-css-prefix}-2x { font-size: 2em; }
11 | .#{$fa-css-prefix}-3x { font-size: 3em; }
12 | .#{$fa-css-prefix}-4x { font-size: 4em; }
13 | .#{$fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/scss/_list.scss:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: $fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .#{$fa-css-prefix}-li {
11 | position: absolute;
12 | left: -$fa-li-width;
13 | width: $fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.#{$fa-css-prefix}-lg {
17 | left: -$fa-li-width + (4em / 14);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/scss/_mixins.scss:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | @mixin fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox
12 |
13 | }
14 |
15 | @mixin fa-icon-rotate($degrees, $rotation) {
16 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
17 | -webkit-transform: rotate($degrees);
18 | -ms-transform: rotate($degrees);
19 | transform: rotate($degrees);
20 | }
21 |
22 | @mixin fa-icon-flip($horiz, $vert, $rotation) {
23 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
24 | -webkit-transform: scale($horiz, $vert);
25 | -ms-transform: scale($horiz, $vert);
26 | transform: scale($horiz, $vert);
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/scss/_path.scss:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
13 | font-weight: normal;
14 | font-style: normal;
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/scss/_rotated-flipped.scss:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
7 |
8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
10 |
11 | // Hook for IE8-9
12 | // -------------------------
13 |
14 | :root .#{$fa-css-prefix}-rotate-90,
15 | :root .#{$fa-css-prefix}-rotate-180,
16 | :root .#{$fa-css-prefix}-rotate-270,
17 | :root .#{$fa-css-prefix}-flip-horizontal,
18 | :root .#{$fa-css-prefix}-flip-vertical {
19 | filter: none;
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/scss/_spinning.scss:
--------------------------------------------------------------------------------
1 | // Spinning Icons
2 | // --------------------------
3 |
4 | .#{$fa-css-prefix}-spin {
5 | -webkit-animation: spin 2s infinite linear;
6 | -moz-animation: spin 2s infinite linear;
7 | -o-animation: spin 2s infinite linear;
8 | animation: spin 2s infinite linear;
9 | }
10 |
11 | @-moz-keyframes spin {
12 | 0% { -moz-transform: rotate(0deg); }
13 | 100% { -moz-transform: rotate(359deg); }
14 | }
15 | @-webkit-keyframes spin {
16 | 0% { -webkit-transform: rotate(0deg); }
17 | 100% { -webkit-transform: rotate(359deg); }
18 | }
19 | @-o-keyframes spin {
20 | 0% { -o-transform: rotate(0deg); }
21 | 100% { -o-transform: rotate(359deg); }
22 | }
23 | @keyframes spin {
24 | 0% {
25 | -webkit-transform: rotate(0deg);
26 | transform: rotate(0deg);
27 | }
28 | 100% {
29 | -webkit-transform: rotate(359deg);
30 | transform: rotate(359deg);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/scss/_stacked.scss:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; }
21 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/font-awesome/scss/font-awesome.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables";
7 | @import "mixins";
8 | @import "path";
9 | @import "core";
10 | @import "larger";
11 | @import "fixed-width";
12 | @import "list";
13 | @import "bordered-pulled";
14 | @import "animated";
15 | @import "rotated-flipped";
16 | @import "stacked";
17 | @import "icons";
18 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/apple-touch-icon-retina.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/apple-touch-icon-retina.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/apple-touch-icon.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/avatar.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/favicon.ico
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/grails_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/grails_logo.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/icons/cameras.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/icons/cameras.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/icons/photos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/icons/photos.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/icons/pictures.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/icons/pictures.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/skin/database_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/skin/database_add.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/skin/database_delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/skin/database_delete.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/skin/database_edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/skin/database_edit.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/skin/database_save.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/skin/database_save.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/skin/database_table.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/skin/database_table.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/skin/exclamation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/skin/exclamation.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/skin/house.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/skin/house.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/skin/information.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/skin/information.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/skin/shadow.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/skin/shadow.jpg
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/skin/sorted_asc.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/skin/sorted_asc.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/skin/sorted_desc.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/skin/sorted_desc.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/spinner.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/spinner.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/springsource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/springsource.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/tree/ajax-loader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/tree/ajax-loader.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/tree/file.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/tree/file.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/tree/folder-closed.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/tree/folder-closed.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/tree/folder.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/tree/folder.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/tree/minus.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/tree/minus.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/tree/plus.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/tree/plus.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/tree/treeview-black-line.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/tree/treeview-black-line.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/tree/treeview-black.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/tree/treeview-black.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/tree/treeview-default-line.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/tree/treeview-default-line.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/tree/treeview-default.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/tree/treeview-default.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/tree/treeview-famfamfam-line.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/tree/treeview-famfamfam-line.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/tree/treeview-famfamfam.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/tree/treeview-famfamfam.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/tree/treeview-gray-line.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/tree/treeview-gray-line.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/tree/treeview-gray.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/tree/treeview-gray.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/tree/treeview-red-line.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/tree/treeview-red-line.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/images/tree/treeview-red.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/images/tree/treeview-red.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/public/js/jquery/jquery-ui-latest.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/howlingproject/libqa/4688caf7368c4a9607189dcaffc30cec74073107/src/main/webapp/resource/public/js/jquery/jquery-ui-latest.js
--------------------------------------------------------------------------------
/src/test/java/com/libqa/application/util/FileHandlerTest.java:
--------------------------------------------------------------------------------
1 | package com.libqa.application.util;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | import static org.fest.assertions.Assertions.assertThat;
10 |
11 | @RunWith(SpringJUnit4ClassRunner.class)
12 | @SpringApplicationConfiguration(classes = FileHandlerTestConfig.class)
13 | public class FileHandlerTest {
14 |
15 | @Autowired
16 | private FileHandler sut;
17 |
18 | @Test
19 | public void serverUploadPath() {
20 | assertThat(sut.getServerUploadPath()).isEqualTo("~/libqa/files");
21 | }
22 |
23 | @Test
24 | public void generateDownloadFileName() {
25 | final String filePath = "resources/tmp/7/file.doc";
26 |
27 | String downloadFileName = sut.generateDownloadFileName(filePath);
28 |
29 | assertThat(downloadFileName).isEqualTo("file.doc");
30 | }
31 |
32 | }
--------------------------------------------------------------------------------
/src/test/java/com/libqa/application/util/FileHandlerTestConfig.java:
--------------------------------------------------------------------------------
1 | package com.libqa.application.util;
2 |
3 | import org.springframework.context.annotation.Bean;
4 | import org.springframework.context.annotation.Configuration;
5 | import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
6 |
7 | @Configuration
8 | class FileHandlerTestConfig {
9 |
10 | @Bean
11 | public static PropertySourcesPlaceholderConfigurer properties() throws Exception {
12 | return new PropertySourcesPlaceholderConfigurer();
13 | }
14 |
15 | @Bean
16 | public FileHandler fileHandler() {
17 | return new FileHandler();
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/test/java/com/libqa/application/util/HtmlContentHandlerTest.java:
--------------------------------------------------------------------------------
1 | package com.libqa.application.util;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.fest.assertions.Assertions.assertThat;
6 |
7 | public class HtmlContentHandlerTest {
8 |
9 | @Test
10 | public void urlWithLink() {
11 | final String url = "https://www.google.com?q=1234&q2=abcd";
12 | String actual = new HtmlContentHandler(url).urlWithLink().parse();
13 |
14 | assertThat(actual).isEqualTo("https://www.google.com?q=1234&q2=abcd");
16 | }
17 |
18 | @Test
19 | public void nl2br() {
20 | final String text = "line1\nline2";
21 | String actual = new HtmlContentHandler(text).nl2br().parse();
22 |
23 | assertThat(actual).isEqualTo("line1
line2");
24 | }
25 | }
--------------------------------------------------------------------------------
/src/test/java/com/libqa/testsupport/LibqaRepositoryTest.java:
--------------------------------------------------------------------------------
1 | package com.libqa.testsupport;
2 |
3 | import org.junit.runner.RunWith;
4 | import org.springframework.beans.factory.annotation.Autowired;
5 | import org.springframework.boot.test.SpringApplicationConfiguration;
6 | import org.springframework.test.context.ActiveProfiles;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 | import org.springframework.transaction.annotation.Transactional;
9 |
10 | @SpringApplicationConfiguration(classes = RepositoryTestConfiguration.class)
11 | @Transactional
12 | @ActiveProfiles("spring-test")
13 | @RunWith(SpringJUnit4ClassRunner.class)
14 | public abstract class LibqaRepositoryTest {
15 | @Autowired
16 | protected T repository;
17 | }
18 |
--------------------------------------------------------------------------------
/src/test/java/com/libqa/testsupport/RepositoryTestConfiguration.java:
--------------------------------------------------------------------------------
1 | package com.libqa.testsupport;
2 |
3 | import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
4 | import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
5 | import org.springframework.boot.orm.jpa.EntityScan;
6 | import org.springframework.context.annotation.Configuration;
7 | import org.springframework.context.annotation.Import;
8 | import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
9 |
10 | @Configuration
11 | @EntityScan(basePackages = "com.libqa.web.domain")
12 | @EnableJpaRepositories(basePackages = "com.libqa.web.repository")
13 | @Import({DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
14 | abstract class RepositoryTestConfiguration {
15 | }
16 |
--------------------------------------------------------------------------------
/src/test/java/com/libqa/web/repository/FeedActionRepositoryTest.java:
--------------------------------------------------------------------------------
1 | package com.libqa.web.repository;
2 |
3 | import com.libqa.application.enums.ActionType;
4 | import com.libqa.application.enums.PostType;
5 | import com.libqa.testsupport.LibqaRepositoryTest;
6 | import com.libqa.web.domain.FeedAction;
7 | import org.junit.Test;
8 |
9 | import java.util.List;
10 |
11 | import static org.fest.assertions.Assertions.assertThat;
12 |
13 | public class FeedActionRepositoryTest extends LibqaRepositoryTest {
14 |
15 | @Test
16 | public void findByFeedActorIdAndUserIdAndIsCanceledFalse() {
17 | final Integer feedThreadId = -1;
18 | final Integer userId = 1234;
19 | List actual = repository.findByFeedActorIdAndUserIdAndIsCanceledFalse(feedThreadId, userId);
20 | assertThat(actual.size()).isZero();
21 | }
22 |
23 | @Test
24 | public void countByFeedActorIdAndPostTypeAndActionTypeAndIsCanceledFalse() {
25 | final Integer feedReplyId = -1;
26 | final PostType postType = PostType.REPLY;
27 | final ActionType actionType = ActionType.LIKE;
28 |
29 | int count = repository.countByFeedActorIdAndPostTypeAndActionTypeAndIsCanceledFalse(
30 | feedReplyId, postType, actionType);
31 |
32 | assertThat(count).isZero();
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/test/java/com/libqa/web/repository/FeedFileRepositoryTest.java:
--------------------------------------------------------------------------------
1 | package com.libqa.web.repository;
2 |
3 | import com.libqa.testsupport.LibqaRepositoryTest;
4 | import org.junit.Test;
5 |
6 | public class FeedFileRepositoryTest extends LibqaRepositoryTest {
7 |
8 | @Test
9 | public void findByFeedFeedThreadId() {
10 | final int feedThreadId = 10000;
11 | repository.findByFeedThreadFeedThreadId(feedThreadId);
12 | }
13 | }
--------------------------------------------------------------------------------
/src/test/java/com/libqa/web/repository/FeedReplyRepositoryTest.java:
--------------------------------------------------------------------------------
1 | package com.libqa.web.repository;
2 |
3 | import com.libqa.testsupport.LibqaRepositoryTest;
4 | import com.libqa.web.domain.FeedThread;
5 | import com.libqa.web.domain.FeedReply;
6 | import org.junit.Test;
7 |
8 | import static org.fest.assertions.Assertions.assertThat;
9 |
10 |
11 | public class FeedReplyRepositoryTest extends LibqaRepositoryTest {
12 |
13 | @Test
14 | public void findOne() {
15 | FeedReply actual = repository.findOne(-1);
16 | assertThat(actual).isNull();
17 | }
18 |
19 | @Test
20 | public void countByFeedAndIsDeletedFalse() {
21 | FeedThread feedThread = new FeedThread();
22 | feedThread.setFeedThreadId(10000);
23 | Integer count = repository.countByFeedThreadAndIsDeletedFalse(feedThread);
24 | assertThat(count).isZero();
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/src/test/java/com/libqa/web/repository/QaContentRepositoryTest.java:
--------------------------------------------------------------------------------
1 | package com.libqa.web.repository;
2 |
3 | import com.libqa.application.util.PageUtil;
4 | import com.libqa.testsupport.LibqaRepositoryTest;
5 | import com.libqa.web.domain.QaContent;
6 | import org.junit.Test;
7 | import org.springframework.data.domain.PageRequest;
8 | import org.springframework.data.domain.Sort;
9 |
10 | import java.util.List;
11 |
12 | public class QaContentRepositoryTest extends LibqaRepositoryTest {
13 |
14 | @Test
15 | public void findByIsDeletedFalse() {
16 | final Integer pageSize = 10;
17 | final Sort.Order order1 = new Sort.Order(Sort.Direction.DESC, "recommendCount");
18 | final Sort.Order order2 = new Sort.Order(Sort.Direction.ASC, "nonrecommendCount");
19 | PageRequest pageRequest = PageUtil.sortPageable(pageSize, new Sort(order1, order2));
20 |
21 | List qaContents = repository.findByIsDeletedFalse(pageRequest);
22 | System.out.println(qaContents);
23 | }
24 |
25 | @Test
26 | public void findAllBySearchValue() {
27 | final String searchValue = "test";
28 | List qaContents = repository.findAllBySearchValue(searchValue);
29 | System.out.println(qaContents);
30 | }
31 | }
--------------------------------------------------------------------------------
/src/test/java/com/libqa/web/repository/SpaceRepositoryTest.java:
--------------------------------------------------------------------------------
1 | package com.libqa.web.repository;
2 |
3 | import com.libqa.testsupport.LibqaRepositoryTest;
4 | import com.libqa.web.domain.Space;
5 | import org.junit.Test;
6 |
7 | import java.util.List;
8 |
9 | public class SpaceRepositoryTest extends LibqaRepositoryTest {
10 | @Test
11 | public void findAllBySearchValue() {
12 | final String searchValue = "test";
13 | List qaContents = repository.findAllBySearchValue(searchValue);
14 | System.out.println(qaContents);
15 | }
16 | }
--------------------------------------------------------------------------------
/src/test/java/com/libqa/web/repository/WikiRepositoryTest.java:
--------------------------------------------------------------------------------
1 | package com.libqa.web.repository;
2 |
3 | import com.libqa.application.util.PageUtil;
4 | import com.libqa.testsupport.LibqaRepositoryTest;
5 | import com.libqa.web.domain.Wiki;
6 | import org.junit.Test;
7 | import org.springframework.data.domain.PageRequest;
8 |
9 | import java.util.List;
10 |
11 | public class WikiRepositoryTest extends LibqaRepositoryTest {
12 |
13 | @Test
14 | public void findBySpaceIdAndIsDeletedFalse() {
15 | final int spaceId = 90;
16 | final PageRequest pageRequest = PageUtil.sortPageable(1, PageUtil.sortId("DESC", "wikiId"));
17 | List wikies = repository.findAllBySpaceIdAndIsDeletedFalse(pageRequest, spaceId);
18 | System.out.println(wikies);
19 | }
20 |
21 | @Test
22 | public void findAllBySearchValue() {
23 | final String searchValue = "test";
24 | List qaContents = repository.findAllBySearchValue(searchValue);
25 | System.out.println(qaContents);
26 | }
27 | }
--------------------------------------------------------------------------------
/src/test/java/com/libqa/web/service/feed/FeedThreadServiceTest.java:
--------------------------------------------------------------------------------
1 | package com.libqa.web.service.feed;
2 |
3 |
4 | import com.libqa.web.domain.User;
5 | import com.libqa.web.repository.FeedThreadRepository;
6 | import org.junit.Test;
7 | import org.junit.runner.RunWith;
8 | import org.mockito.InjectMocks;
9 | import org.mockito.Mock;
10 | import org.mockito.runners.MockitoJUnitRunner;
11 | import org.springframework.data.domain.PageRequest;
12 |
13 | import static org.mockito.Matchers.any;
14 | import static org.mockito.Matchers.eq;
15 | import static org.mockito.Mockito.verify;
16 |
17 | @RunWith(MockitoJUnitRunner.class)
18 | public class FeedThreadServiceTest {
19 |
20 | @Mock
21 | private FeedThreadRepository feedThreadRepository;
22 |
23 | @InjectMocks
24 | private FeedThreadService sut;
25 |
26 | @Test
27 | public void lastId_보다_작은_사용자_피드목록을_제공한다() {
28 | final User user = userFixture();
29 | final Integer lastId = 10;
30 |
31 | sut.getRecentlyFeedThreadsByUserLessThanLastId(user, lastId);
32 |
33 | verify(feedThreadRepository).findByUserIdAndFeedThreadIdLessThanAndIsDeletedFalse(eq(user.getUserId()), eq(lastId), any(PageRequest.class));
34 | }
35 |
36 | private User userFixture() {
37 | User user = new User();
38 | user.setUserId(12345);
39 | return user;
40 | }
41 | }
--------------------------------------------------------------------------------
/src/test/java/com/libqa/web/service/search/SearchTargetPageTest.java:
--------------------------------------------------------------------------------
1 | package com.libqa.web.service.search;
2 |
3 | import com.libqa.application.enums.SearchTargetPage;
4 | import org.junit.Test;
5 |
6 | import static org.fest.assertions.Assertions.assertThat;
7 |
8 | public class SearchTargetPageTest {
9 |
10 | @Test
11 | public void isInValidatePage() {
12 | boolean result = SearchTargetPage.get("space1234").isInValidPage();
13 | assertThat(result).isTrue();
14 | }
15 |
16 | @Test
17 | public void isValidatePage() {
18 | boolean result = SearchTargetPage.get("space").isInValidPage();
19 | assertThat(result).isFalse();
20 | }
21 | }
--------------------------------------------------------------------------------
/src/test/java/com/libqa/web/view/DisplayDateTest.java:
--------------------------------------------------------------------------------
1 | package com.libqa.web.view;
2 |
3 | import com.libqa.web.view.feed.DisplayDate;
4 | import org.junit.Test;
5 |
6 | import java.time.LocalDateTime;
7 | import java.time.ZoneId;
8 | import java.util.Date;
9 |
10 | import static org.fest.assertions.Assertions.assertThat;
11 |
12 | public class DisplayDateTest {
13 |
14 | @Test
15 | public void parse() throws Exception {
16 | final LocalDateTime localDateTime = LocalDateTime.of(2015, 11, 15, 23, 29, 30);
17 | final Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
18 |
19 | String actual = DisplayDate.parse(date);
20 |
21 | assertThat(actual).isEqualTo("2015-11-15 23:29:30");
22 | }
23 | }
--------------------------------------------------------------------------------
/src/test/resources/application-spring-test.properties:
--------------------------------------------------------------------------------
1 | spring.jpa.hibernate.ddl-auto=update
2 |
3 | spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
4 | spring.jpa.properties.hibernate.show_sql=true
5 | spring.jpa.properties.hibernate.format_sql=true
6 | spring.jpa.properties.hibernate.use_sql_comments=false
7 | spring.jpa.properties.hibernate.connection.autocommit=false
8 |
9 | spring.datasource.url=jdbc:h2:~/libqa/testdb
10 | spring.datasource.username=sa
11 | spring.datasource.password=
12 | spring.datasource.driverClassName=org.h2.Driver
--------------------------------------------------------------------------------