keys1 = imRedisService.getRedisTemplate().keys(pattern1);
87 | int cnt1 = 0;
88 | int cnt2 = 0;
89 | if (keys != null) {
90 | for (String key : keys1) {
91 | ReadMessage readMessage = imRedisService.getReadMessage(key);
92 | if (readMessage != null) {
93 | int rid = readMessage.getRead_user_id();
94 | int sid = readMessage.getSend_user_id();
95 | Timestamp time = readMessage.getTime();
96 | try {
97 | ReadMessage rm = readMessageService.getReadMessage(rid, sid);
98 | if (rm != null) {
99 | if (!rm.getTime().equals(time)) {
100 | readMessageService.updateReadMessage(rid, sid, time);
101 | cnt1++;
102 | } else {
103 | cnt2++;
104 | }
105 | } else {
106 | readMessageService.insertReadMessage(readMessage);
107 | cnt1++;
108 | }
109 | // 清空缓存
110 | imRedisService.remove(key);
111 | } catch (Exception e) {
112 | log.error("【定时任务】 Redis出错!");
113 | }
114 | }
115 | }
116 | }
117 | log.info("【定时任务】 " + cnt1 + "条已读回执已插入或更新到MySQL。");
118 | if (cnt2 != 0) {
119 | log.info("【定时任务】 " + cnt2 + "条已读回执无需持久化到MySQL。");
120 | }
121 | log.info("【定时任务】 结束!");
122 | }
123 | }
124 |
--------------------------------------------------------------------------------
/src/main/resources/logback-spring.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | %d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) --- [%15.15(%thread)] %cyan(%-40.40(%logger{40})) : %msg%n
19 |
20 | UTF-8
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | logs/project_info.log
31 |
32 | true
33 |
34 | ERROR
35 | DENY
36 | ACCEPT
37 |
38 |
41 |
42 |
43 |
44 |
45 | logs/project_info.%d.%i.log
46 |
48 | 30
49 |
50 | 20GB
51 |
52 | 10MB
53 |
54 |
55 |
56 |
57 | %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%15.15(%thread)] %-40.40(%logger{40}) : %msg%n
58 |
59 | UTF-8
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 | logs/project_error.log
70 |
71 | true
72 |
73 |
74 | ERROR
75 |
76 |
79 |
80 |
81 |
82 |
83 | logs/project_error.%d.%i.log
84 |
86 | 30
87 |
88 | 20GB
89 |
90 | 10MB
91 |
92 |
93 |
94 |
95 | %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%15.15(%thread)] %-40.40(%logger{40}) : %msg%n
96 |
97 | UTF-8
98 |
99 |
100 |
101 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
--------------------------------------------------------------------------------
/src/main/resources/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/src/main/resources/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/src/main/resources/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/src/main/resources/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/src/main/resources/static/bootstrap-3.3.7-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/resources/static/chat/css/reset.min.css:
--------------------------------------------------------------------------------
1 | html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}table{border-collapse:collapse;border-spacing:0}
--------------------------------------------------------------------------------
/src/main/resources/static/chat/img/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/chat/img/1.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/chat/img/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/chat/img/2.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/chat/img/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/chat/img/3.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/chat/img/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/chat/img/4.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/chat/img/5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/chat/img/5.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/chat/img/6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/chat/img/6.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/chat/img/attachment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/chat/img/attachment.png
--------------------------------------------------------------------------------
/src/main/resources/static/chat/img/groupicon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/chat/img/groupicon.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/chat/img/image.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/chat/img/image.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/chat/img/name-type.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/chat/img/name-type.png
--------------------------------------------------------------------------------
/src/main/resources/static/chat/img/send.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/chat/img/send.png
--------------------------------------------------------------------------------
/src/main/resources/static/chat/img/smiley.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/chat/img/smiley.png
--------------------------------------------------------------------------------
/src/main/resources/static/chat/js/chatroom.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/chat/js/chatroom.js
--------------------------------------------------------------------------------
/src/main/resources/static/css/LoginCSS.css:
--------------------------------------------------------------------------------
1 | #j1{
2 | margin-bottom: 0px;
3 | background: url("../images/bg.jpg");
4 | background-position: center center;
5 | background-size: cover;
6 | background-repeat: no-repeat;
7 |
8 | }
9 |
10 | #LoginForm{
11 | margin-left: 10px;
12 | margin-right: 10px;
13 | }
14 |
15 | #j2{
16 | margin-bottom: 0px;
17 | background-image: url("../images/bg.JPG");
18 | background-position: center center;
19 | background-size: cover;
20 | background-repeat: no-repeat;
21 | }
22 |
23 | #RegisterForm{
24 | margin-left: 10px;
25 | margin-right: 10px;
26 | }
27 |
28 | .n{
29 |
30 | }
31 |
32 | .buttom {
33 | text-align: center;
34 | padding-left: 30px;
35 | position: fixed;
36 | bottom: 0px;
37 | left: 0;
38 | height: 40px;
39 | width: 100%;
40 | line-height: 40px;
41 | text-align: center;
42 | font-size: 10px;
43 | background-color: rgba(0,0,0,0.3);
44 | }
45 |
46 | .modbg{
47 | background: url("../images/githubpagesearchbg.jpg");
48 | background-position: center center;
49 | background-size: cover;
50 | position: fixed;
51 | width: 100%;
52 | background-repeat: no-repeat;
53 | background-size: cover;
54 | }
55 |
56 | body{
57 | display:inline-block;
58 | background-repeat: no-repeat;
59 | background-size: 100% 100%;
60 | background-attachment: fixed;
61 | padding-top: 40px;
62 | }
63 |
64 | html, body{
65 | height: 100%;
66 | overflow: auto;
67 | }
68 |
--------------------------------------------------------------------------------
/src/main/resources/static/css/chatroom.css:
--------------------------------------------------------------------------------
1 | .modbg{
2 | background: url("../images/githubpagesearchbg.jpg");
3 | background-position: center center;
4 | background-size: cover;
5 | position: fixed;
6 | width: 100%;
7 | background-repeat: no-repeat;
8 | background-size: cover;
9 | }
10 |
11 | html, body{
12 | height: 100%;
13 | overflow: auto;
14 | }
15 | /*设置背景样式*/
16 | body{
17 | display:inline-block;
18 | background-repeat: no-repeat;
19 | background-size: 100% 100%;
20 | background-attachment: fixed;
21 | padding-top: 40px;
22 | }
23 |
24 | .buttom {
25 | text-align: center;
26 | padding-left: 30px;
27 | position: fixed;
28 | bottom: 0px;
29 | left: 0;
30 | height: 40px;
31 | width: 100%;
32 | line-height: 40px;
33 | font-size: 10px;
34 | background-color: rgba(0,0,0,0.3);
35 | }
36 |
37 | .chatComponent {
38 | margin: 0 auto;
39 | width: 750px;
40 | background: #444753;
41 | border-radius: 5px;
42 | }
43 |
44 | .people-list {
45 | width: 30%;
46 | float: left;
47 | }
48 |
49 | .people-list .search {
50 | padding: 20px;
51 | }
52 |
53 | .people-list input {
54 | border-radius: 3px;
55 | border: none;
56 | padding: 14px;
57 | color: white;
58 | background: #6A6C75;
59 | width: 90%;
60 | font-size: 14px;
61 | }
62 |
63 | .search_text {
64 | outline: none;
65 | border: 2px solid #a7aab5;
66 | height: 30px;
67 | width: 100%;
68 | box-sizing: border-box;
69 | text-indent: 6px;
70 | font-size: 13px;
71 | padding: 5px;
72 | border-radius: 10px 10px 10px 10px;
73 | }
74 | /* 输入框聚焦 */
75 | input:focus {
76 | color: #000;
77 | background-color: #fff;
78 | border-color: #4e6ef2 !important;
79 | border-radius: 10px 10px 10px 10px;
80 | }
81 |
82 |
83 |
--------------------------------------------------------------------------------
/src/main/resources/static/css/githubPageSearch.css:
--------------------------------------------------------------------------------
1 |
2 | input {
3 | outline: none;
4 | border: 2px solid #a7aab5;
5 | height: 45px;
6 | width: 85%;
7 | box-sizing: border-box;
8 | text-indent: 6px;
9 | font-size: 16px;
10 | border-radius: 10px 0 0 10px;
11 | }
12 | /* 输入框聚焦 */
13 | input:focus {
14 | color: #000;
15 | background-color: #fff;
16 | border-color: #4e6ef2 !important;
17 | border-radius: 10px 0 0 10px;
18 | }
19 | .searchbutton {
20 | font-size: 17px;
21 | }
22 |
23 | .buttonx {
24 | height: 45px;
25 | width: 15%;
26 | float: right;
27 | border: none;
28 | color: white;
29 | box-sizing: border-box;
30 | background-color: #4e6ef2;
31 | border-radius: 0 10px 10px 0;
32 | cursor: pointer;
33 | }
34 | .imges {
35 | margin: 0 auto;
36 | }
37 | .cen {
38 | text-align: center;
39 | margin-bottom: 80px;
40 | }
41 | .buttom {
42 | text-align: center;
43 | padding-left: 30px;
44 | position: fixed;
45 | bottom: 0px;
46 | left: 0;
47 | height: 40px;
48 | width: 100%;
49 | line-height: 40px;
50 | text-align: center;
51 | font-size: 10px;
52 | background-color: rgba(0,0,0,0.3);
53 | }
54 |
55 | /* 登录按钮的下拉登录图片 */
56 | .settings {
57 | position: relative;
58 | left: 13px;
59 | background-color: #4e71f2;
60 | color: #fff;
61 | border-radius: 5px;
62 | font-size: 12px;
63 | width: 50px;
64 | height: 25px;
65 | display: inline-block;
66 | }
67 | .dropdown-settings {
68 | position: relative;
69 | display: inline-block;
70 | }
71 |
72 | .dropdown-content-settings {
73 | display: none;
74 | position: absolute;
75 | right: -10px;
76 | background-color: #f9f9f9;
77 | min-width: 160px;
78 | box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
79 | }
80 |
81 | .dropdown-settings:hover .dropdown-content-settings {
82 | display: block;
83 | }
84 |
85 | .modbg{
86 | background: url("../images/githubpagesearchbg.jpg");
87 | background-position: center center;
88 | background-size: cover;
89 | position: fixed;
90 | width: 100%;
91 | background-repeat: no-repeat;
92 | background-size: cover;
93 | }
94 |
95 | body{
96 | display:inline-block;
97 | background-repeat: no-repeat;
98 | background-size: 100% 100%;
99 | background-attachment: fixed;
100 | padding-top: 40px;
101 | }
102 |
103 | html, body{
104 | height: 100%;
105 | overflow: auto;
106 | }
107 |
108 | #circle{
109 | margin: 20px auto;
110 | width: 45px;
111 | height: 45px;
112 | border: 5px white solid;
113 | border-left-color: #ff5500;
114 | border-right-color:#0c80fe;
115 | border-radius: 100%;
116 | animation: loading1 1s infinite linear;
117 | }
118 | @keyframes loading1{
119 | from{transform: rotate(0deg)}to{transform: rotate(360deg)}
120 | }
--------------------------------------------------------------------------------
/src/main/resources/static/css/homepage.css:
--------------------------------------------------------------------------------
1 | html, body{
2 | height: 100%;
3 | overflow: auto;
4 | }
5 | /*设置背景样式*/
6 | body{
7 | display:inline-block;
8 | background-repeat: no-repeat;
9 | background-size: 100% 100%;
10 | background-attachment: fixed;
11 | padding-top: 40px;
12 | }
13 |
14 | /*头像样式*/
15 | .icon{
16 | width: 140px;
17 | height: 140px;
18 | border-radius: 50%;
19 | background-repeat: no-repeat;
20 | -webkit-border-radius: 100px;
21 | -moz-border-radius: 100px;
22 | overflow: hidden;
23 | /*position: fixed;*/
24 | position: relative;
25 | left: 50%;
26 | top: 27%;
27 | padding-bottom: 100px;
28 | margin-left: -70px;
29 | animation: icon_animation 3s infinite alternate;
30 | animation-timing-function: ease-in-out;
31 | -webkit-transition: transform 3S;
32 | }
33 |
34 | /*网站图标样式*/
35 | .title{
36 | background-repeat: no-repeat;
37 | position: fixed;
38 | left: 50px;
39 | top: 20px;
40 | }
41 |
42 | /*头像动画*/
43 | @keyframes icon_animation{
44 | 0% {top: 27%;}
45 | 50% {top: 30%;}
46 | 100% {top: 27%;}
47 | }
48 |
49 | /*鼠标悬停头像旋转*/
50 | .icon:hover{
51 | transform: rotate(360deg);
52 | }
53 |
54 | /*背景和首页文字样式*/
55 | .modbg{
56 | background: url("../images/lynbg.jpg");
57 | background-position: center center;
58 | background-size: cover;
59 | position: fixed;
60 | width: 100%;
61 | background-repeat: no-repeat;
62 | background-size: cover;
63 | }
64 |
65 | .header-words{
66 | /*首选字体琥珀*/
67 | font-family: "STHupo","Microsoft YaHei","宋体",sans-serif;
68 | }
69 |
70 | /*留言板样式*/
71 | .talk{
72 | font-family: "宋体";
73 | margin-top: 40px;
74 | }
75 |
76 | /*留言列表样式*/
77 | .message_list_title{
78 | margin-top: 40px;
79 | }
80 |
81 | .message-content{
82 | height: 200px;
83 | width: 100%;
84 | padding-top: 30px;
85 | padding-left: 15px;
86 | border-radius: 10px;
87 | font-size: large;
88 | }
89 |
90 | /*电子书下载和近期的文章list-group滚动条设置*/
91 | #scroll-2{
92 | width:200px;
93 | height:200px;
94 | overflow:auto;
95 | margin-bottom: 20px;
96 | }
97 | #scroll-2 div{
98 | width:400px;
99 | height:400px;
100 | }
101 | #scroll-2::-webkit-scrollbar{
102 | width:4px;
103 | height:4px;
104 | }
105 | #scroll-2::-webkit-scrollbar-track{
106 | background: #f6f6f6;
107 | border-radius:2px;
108 | }
109 | #scroll-2::-webkit-scrollbar-thumb{
110 | background: #aaa;
111 | border-radius:2px;
112 | }
113 | #scroll-2::-webkit-scrollbar-thumb:hover{
114 | background: #747474;
115 | }
116 | #scroll-2::-webkit-scrollbar-corner{
117 | background: #f6f6f6;
118 | }
119 |
120 | .booklist{
121 |
122 | }
123 | .blog{
124 |
125 | }
126 | .blog-more{
127 |
128 | }
129 |
130 | .buttom {
131 | text-align: center;
132 | padding-left: 30px;
133 | position: fixed;
134 | bottom: 0px;
135 | left: 0;
136 | height: 40px;
137 | width: 100%;
138 | line-height: 40px;
139 | text-align: center;
140 | font-size: 10px;
141 | background-color: rgba(0,0,0,0.3);
142 | }
143 |
--------------------------------------------------------------------------------
/src/main/resources/static/font-awesome-4.7.0/HELP-US-OUT.txt:
--------------------------------------------------------------------------------
1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project,
2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome,
3 | comprehensive icon sets or copy and paste your own.
4 |
5 | Please. Check it out.
6 |
7 | -Dave Gandy
8 |
--------------------------------------------------------------------------------
/src/main/resources/static/font-awesome-4.7.0/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/font-awesome-4.7.0/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/src/main/resources/static/font-awesome-4.7.0/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/font-awesome-4.7.0/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/src/main/resources/static/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/src/main/resources/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/src/main/resources/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/src/main/resources/static/font-awesome-4.7.0/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/resources/static/font-awesome-4.7.0/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 | .@{fa-css-prefix}-pull-left { float: left; }
11 | .@{fa-css-prefix}-pull-right { float: right; }
12 |
13 | .@{fa-css-prefix} {
14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; }
15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; }
16 | }
17 |
18 | /* Deprecated as of 4.4.0 */
19 | .pull-right { float: right; }
20 | .pull-left { float: left; }
21 |
22 | .@{fa-css-prefix} {
23 | &.pull-left { margin-right: .3em; }
24 | &.pull-right { margin-left: .3em; }
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/resources/static/font-awesome-4.7.0/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/@fa-line-height-base 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 |
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/resources/static/font-awesome-4.7.0/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/resources/static/font-awesome-4.7.0/less/font-awesome.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.7.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 | @import "screen-reader.less";
19 |
--------------------------------------------------------------------------------
/src/main/resources/static/font-awesome-4.7.0/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/resources/static/font-awesome-4.7.0/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/resources/static/font-awesome-4.7.0/less/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | .fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base 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 |
12 | }
13 |
14 | .fa-icon-rotate(@degrees, @rotation) {
15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})";
16 | -webkit-transform: rotate(@degrees);
17 | -ms-transform: rotate(@degrees);
18 | transform: rotate(@degrees);
19 | }
20 |
21 | .fa-icon-flip(@horiz, @vert, @rotation) {
22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)";
23 | -webkit-transform: scale(@horiz, @vert);
24 | -ms-transform: scale(@horiz, @vert);
25 | transform: scale(@horiz, @vert);
26 | }
27 |
28 |
29 | // Only display content to screen readers. A la Bootstrap 4.
30 | //
31 | // See: http://a11yproject.com/posts/how-to-hide-content/
32 |
33 | .sr-only() {
34 | position: absolute;
35 | width: 1px;
36 | height: 1px;
37 | padding: 0;
38 | margin: -1px;
39 | overflow: hidden;
40 | clip: rect(0,0,0,0);
41 | border: 0;
42 | }
43 |
44 | // Use in conjunction with .sr-only to only display content when it's focused.
45 | //
46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
47 | //
48 | // Credit: HTML5 Boilerplate
49 |
50 | .sr-only-focusable() {
51 | &:active,
52 | &:focus {
53 | position: static;
54 | width: auto;
55 | height: auto;
56 | margin: 0;
57 | overflow: visible;
58 | clip: auto;
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/resources/static/font-awesome-4.7.0/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/resources/static/font-awesome-4.7.0/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/resources/static/font-awesome-4.7.0/less/screen-reader.less:
--------------------------------------------------------------------------------
1 | // Screen Readers
2 | // -------------------------
3 |
4 | .sr-only { .sr-only(); }
5 | .sr-only-focusable { .sr-only-focusable(); }
6 |
--------------------------------------------------------------------------------
/src/main/resources/static/font-awesome-4.7.0/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/resources/static/font-awesome-4.7.0/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/resources/static/font-awesome-4.7.0/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 | .#{$fa-css-prefix}-pull-left { float: left; }
11 | .#{$fa-css-prefix}-pull-right { float: right; }
12 |
13 | .#{$fa-css-prefix} {
14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
16 | }
17 |
18 | /* Deprecated as of 4.4.0 */
19 | .pull-right { float: right; }
20 | .pull-left { float: left; }
21 |
22 | .#{$fa-css-prefix} {
23 | &.pull-left { margin-right: .3em; }
24 | &.pull-right { margin-left: .3em; }
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/resources/static/font-awesome-4.7.0/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}/#{$fa-line-height-base} 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 |
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/resources/static/font-awesome-4.7.0/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/resources/static/font-awesome-4.7.0/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/resources/static/font-awesome-4.7.0/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/resources/static/font-awesome-4.7.0/scss/_mixins.scss:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | @mixin fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} 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 |
12 | }
13 |
14 | @mixin fa-icon-rotate($degrees, $rotation) {
15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
16 | -webkit-transform: rotate($degrees);
17 | -ms-transform: rotate($degrees);
18 | transform: rotate($degrees);
19 | }
20 |
21 | @mixin fa-icon-flip($horiz, $vert, $rotation) {
22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
23 | -webkit-transform: scale($horiz, $vert);
24 | -ms-transform: scale($horiz, $vert);
25 | transform: scale($horiz, $vert);
26 | }
27 |
28 |
29 | // Only display content to screen readers. A la Bootstrap 4.
30 | //
31 | // See: http://a11yproject.com/posts/how-to-hide-content/
32 |
33 | @mixin sr-only {
34 | position: absolute;
35 | width: 1px;
36 | height: 1px;
37 | padding: 0;
38 | margin: -1px;
39 | overflow: hidden;
40 | clip: rect(0,0,0,0);
41 | border: 0;
42 | }
43 |
44 | // Use in conjunction with .sr-only to only display content when it's focused.
45 | //
46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
47 | //
48 | // Credit: HTML5 Boilerplate
49 |
50 | @mixin sr-only-focusable {
51 | &:active,
52 | &:focus {
53 | position: static;
54 | width: auto;
55 | height: auto;
56 | margin: 0;
57 | overflow: visible;
58 | clip: auto;
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/resources/static/font-awesome-4.7.0/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/resources/static/font-awesome-4.7.0/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/resources/static/font-awesome-4.7.0/scss/_screen-reader.scss:
--------------------------------------------------------------------------------
1 | // Screen Readers
2 | // -------------------------
3 |
4 | .sr-only { @include sr-only(); }
5 | .sr-only-focusable { @include sr-only-focusable(); }
6 |
--------------------------------------------------------------------------------
/src/main/resources/static/font-awesome-4.7.0/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/resources/static/font-awesome-4.7.0/scss/font-awesome.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.7.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 | @import "screen-reader";
19 |
--------------------------------------------------------------------------------
/src/main/resources/static/images/bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/bg.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/images/bg2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/bg2.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/images/bg3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/bg3.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/images/bg4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/bg4.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/images/bg5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/bg5.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/images/githubpagesearch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/githubpagesearch.png
--------------------------------------------------------------------------------
/src/main/resources/static/images/githubpagesearch_25.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/githubpagesearch_25.png
--------------------------------------------------------------------------------
/src/main/resources/static/images/githubpagesearch_40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/githubpagesearch_40.png
--------------------------------------------------------------------------------
/src/main/resources/static/images/githubpagesearchbg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/githubpagesearchbg.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/images/icon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/icon.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/images/icon150.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/icon150.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/images/lynbg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/lynbg.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/images/lynbg1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/lynbg1.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/images/newtitle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/newtitle.png
--------------------------------------------------------------------------------
/src/main/resources/static/images/pic1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/pic1.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/images/pic2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/pic2.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/images/pic5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/pic5.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/images/title.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/title.png
--------------------------------------------------------------------------------
/src/main/resources/static/images/title1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/title1.png
--------------------------------------------------------------------------------
/src/main/resources/static/images/title150_70.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiepl1997/xpllyn/88b2f83b25e87cd1adc75600a1bf5e894bb028b9/src/main/resources/static/images/title150_70.png
--------------------------------------------------------------------------------
/src/main/resources/static/js/functions.js:
--------------------------------------------------------------------------------
1 | // // 图标元素淡入
2 | // function load_animation(){
3 | // $(document).ready(function() {
4 | // $("#titleimg").show(function() {
5 | // $("#titleimg").hide();
6 | // $("#titleimg").fadeIn(2000);
7 | // });
8 | // $("#icon_xpl").show(function() {
9 | // $("#icon_xpl").hide();
10 | // $("#icon_xpl").fadeIn(3000);
11 | // });
12 | // });
13 | // }
14 |
15 | // //xpllyn图标动画
16 | // function title_animation(){
17 | // $(document).ready(function() {
18 | // $("#titleimg").mouseenter(function(event) {
19 | // $("#titleimg").animate({
20 | // height: '90px',
21 | // width: '180px'
22 | // },"fast");
23 | // });
24 | // $("#titleimg").mouseleave(function(event) {
25 | // $("#titleimg").animate({
26 | // height: '70px',
27 | // width: '150px'
28 | // },"fast")
29 | // });
30 | // });
31 | // }
32 |
33 | $(document).ready(function() {
34 | //提交留言按钮 by xiepl1997 at 2019-8-24
35 | $("#submit_message").click(function(event) {
36 | if($("#message").val().trim() == ''){
37 | alert("未填写留言哦~");
38 | return;
39 | }
40 | else{
41 |
42 | var str = $("#message").val().trim();
43 | var param = {
44 | message : str,
45 | type : 'insertMessage'
46 | };
47 |
48 | $.ajax({
49 | url: './insertMessage',
50 | type: 'POST',
51 | contentType: 'application/x-www-form-urlencoded',
52 | // data: JSON.stringify(param),
53 | data: param,
54 | beforeSend : function(){
55 | $("#loading").modal('show');
56 | },
57 | success : function(messageList){
58 | if(messageList == null){
59 | alert("提交失败");
60 | return;
61 | }
62 | else{
63 | // $("#message").val("").focus();
64 | // var htmls = "\n" +
65 | // "\n" +
66 | // "\n" +
67 | // "\n" +
68 | // "\n" +
69 | // "\n" +
70 | // "";
71 | // $("#message_group").innerHTML(htmls);
72 | var htmls = "";
73 | var count = messageList.length;
74 | if(count > 8){
75 | count = 8;
76 | }
77 | for(var i = 0; i < count; i++){
78 | // var span = Date.parse(messageList[i].create_time);
79 | var dt = new Date(messageList[i].create_time);
80 | var timeStr = dt.getFullYear() + '-' + (dt.getMonth() + 1) + '-' + dt.getDate() + ' ' + dt.getHours() + ':' + dt.getMinutes() + ':' + dt.getSeconds();
81 |
82 | htmls += "";
83 | htmls += "" + messageList[i].name + "
";
84 | htmls += "" + escapeHTML(messageList[i].content) + "
";
85 | htmls += "" + timeStr + "
";
86 | htmls += "";
87 | }
88 | //htmls += "……More……
";
89 | $("#message_group").html(htmls);
90 | $("#message").val("");
91 | alert("感谢您的留言!");
92 | }
93 | },
94 | error : function (data) {
95 | alert("提交失败!");
96 | },
97 | complete : function(){
98 | $("#loading").modal('hide');
99 | }
100 | })
101 |
102 |
103 |
104 | }
105 | });
106 |
107 | //显示全部留言 by xiepl1997 at 2019-8-25
108 | $("#show_all_message").click(function () {
109 | $.ajax({
110 | url: './getAllMessages',
111 | type: 'GET',
112 | dataType: 'json',
113 | success: function (mList) {
114 | var htmls = "";
115 | for(var i = 0; i < mList.length; i++){
116 | // var span = new Date(messageList[i].create_time);
117 | var dt = new Date(mList[i].create_time);
118 | var timeStr = dt.getFullYear() + '-' + (dt.getMonth() + 1) + '-' + dt.getDate() + ' ' + dt.getHours() + ':' + dt.getMinutes() + ':' + dt.getSeconds();
119 |
120 | if(i%2 == 0)
121 | htmls += "";
122 | else
123 | htmls += "";
124 | htmls += "" + mList[i].name + "
";
125 | htmls += "" + escapeHTML(mList[i].content) + "
";
126 | htmls += "" + timeStr + "
";
127 | htmls += "";
128 | }
129 | $("#all_message").html(htmls);
130 | },
131 | error : function (data) {
132 | alert("获取失败!");
133 | }
134 | })
135 | })
136 |
137 | //用户点击电子书,插入一条日志
138 | $(".booklist").click(function (e) {
139 | var str = $(this).attr("download"); //获取书名
140 | var param = {
141 | name : str,
142 | type : 'book_download'
143 | };
144 | $.ajax({
145 | url: './ebook_download',
146 | type: 'post',
147 | contentType: 'application/x-www-form-urlencoded',
148 | data: param,
149 | success: function (log) {
150 |
151 | }
152 | })
153 | })
154 |
155 | //用户点击文章时,插入一条日志
156 | $(".blog").click(function (e) {
157 | var str = $(this).children("h4").text();
158 | var param = {
159 | name : str,
160 | type : 'readBlog'
161 | };
162 | $.ajax({
163 | url: './read_blog',
164 | type: 'post',
165 | contentType: 'application/x-www-form-urlencoded',
166 | data: param,
167 | success: function (log) {
168 |
169 | }
170 | })
171 | })
172 |
173 | //用户点击“更多文章”时,插入一条日志
174 | $(".blog-more").click(function (e) {
175 | var param = {
176 | name : '....more....',
177 | type : 'readMoreBlog'
178 | };
179 | $.ajax({
180 | url: './read_blog_more',
181 | type: 'post',
182 | contentType: 'application/x-www-form-urlencoded',
183 | data: param,
184 | success: function (log) {
185 |
186 | }
187 | })
188 | })
189 | });
190 |
191 | /**
192 | * function:显示注册界面
193 | * date:2020/2/4
194 | * @constructor
195 | */
196 | function ShowRegister() {
197 | $("#c1").removeAttr("hidden");
198 | }
199 |
200 | /**
201 | *. 转义html(防XSS攻击)
202 | *. @param str 字符串
203 | */
204 | function escapeHTML (str) {
205 | return str.replace(
206 | /[&<>'"]/g,
207 | tag =>
208 | ({
209 | '&': '&',
210 | '<': '<',
211 | '>': '>',
212 | "'": ''',
213 | '"': '"'
214 | }[tag] || tag)
215 | );
216 | }
217 |
218 |
219 |
220 |
--------------------------------------------------------------------------------
/src/main/resources/static/js/jq-paginator.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * jq-paginator v2.0.2
3 | * http://jqPaginator.keenwon.com
4 | */
5 |
6 | (function () {
7 | 'use strict';
8 |
9 | /* eslint-env jquery */
10 |
11 | var $ = jQuery;
12 |
13 | $.jqPaginator = function (el, options) {
14 | if (!(this instanceof $.jqPaginator)) {
15 | return new $.jqPaginator(el, options)
16 | }
17 |
18 | var self = this;
19 |
20 | self.$container = $(el);
21 |
22 | self.$container.data('jqPaginator', self);
23 |
24 | self.init = function () {
25 | if (options.first || options.prev || options.next || options.last || options.page) {
26 | options = $.extend(
27 | {},
28 | {
29 | first: '',
30 | prev: '',
31 | next: '',
32 | last: '',
33 | page: ''
34 | },
35 | options
36 | );
37 | }
38 |
39 | self.options = $.extend({}, $.jqPaginator.defaultOptions, options);
40 |
41 | self.verify();
42 |
43 | self.extendJquery();
44 |
45 | self.render();
46 |
47 | self.fireEvent(this.options.currentPage, 'init');
48 | };
49 |
50 | self.verify = function () {
51 | var opts = self.options;
52 |
53 | if (!self.isNumber(opts.totalPages)) {
54 | throw new Error('[jqPaginator] type error: totalPages')
55 | }
56 |
57 | if (!self.isNumber(opts.totalCounts)) {
58 | throw new Error('[jqPaginator] type error: totalCounts')
59 | }
60 |
61 | if (!self.isNumber(opts.pageSize)) {
62 | throw new Error('[jqPaginator] type error: pageSize')
63 | }
64 |
65 | if (!self.isNumber(opts.currentPage)) {
66 | throw new Error('[jqPaginator] type error: currentPage')
67 | }
68 |
69 | if (!self.isNumber(opts.visiblePages)) {
70 | throw new Error('[jqPaginator] type error: visiblePages')
71 | }
72 |
73 | if (!opts.totalPages && !opts.totalCounts) {
74 | throw new Error('[jqPaginator] totalCounts or totalPages is required')
75 | }
76 |
77 | if (!opts.totalPages && opts.totalCounts && !opts.pageSize) {
78 | throw new Error('[jqPaginator] pageSize is required')
79 | }
80 |
81 | if (opts.totalCounts && opts.pageSize) {
82 | opts.totalPages = Math.ceil(opts.totalCounts / opts.pageSize);
83 | }
84 |
85 | if (opts.currentPage < 1 || opts.currentPage > opts.totalPages) {
86 | throw new Error('[jqPaginator] currentPage is incorrect')
87 | }
88 |
89 | if (opts.totalPages < 1) {
90 | throw new Error('[jqPaginator] totalPages cannot be less currentPage')
91 | }
92 | };
93 |
94 | self.extendJquery = function () {
95 | $.fn.jqPaginatorHTML = function (s) {
96 | return s
97 | ? this.before(s).remove()
98 | : $('')
99 | .append(this.eq(0).clone())
100 | .html()
101 | };
102 | };
103 |
104 | self.render = function () {
105 | self.renderHtml();
106 | self.setStatus();
107 | self.bindEvents();
108 | };
109 |
110 | self.renderHtml = function () {
111 | var html = [];
112 |
113 | var pages = self.getPages();
114 | for (var i = 0, j = pages.length; i < j; i++) {
115 | html.push(self.buildItem('page', pages[i]));
116 | }
117 |
118 | self.isEnable('prev') && html.unshift(self.buildItem('prev', self.options.currentPage - 1));
119 | self.isEnable('first') && html.unshift(self.buildItem('first', 1));
120 | self.isEnable('statistics') && html.unshift(self.buildItem('statistics'));
121 | self.isEnable('next') && html.push(self.buildItem('next', self.options.currentPage + 1));
122 | self.isEnable('last') && html.push(self.buildItem('last', self.options.totalPages));
123 |
124 | if (self.options.wrapper) {
125 | self.$container.html(
126 | $(self.options.wrapper)
127 | .html(html.join(''))
128 | .jqPaginatorHTML()
129 | );
130 | } else {
131 | self.$container.html(html.join(''));
132 | }
133 | };
134 |
135 | self.buildItem = function (type, pageData) {
136 | var html = self.options[type]
137 | .replace(/{{page}}/g, pageData)
138 | .replace(/{{totalPages}}/g, self.options.totalPages)
139 | .replace(/{{totalCounts}}/g, self.options.totalCounts);
140 |
141 | return $(html)
142 | .attr({
143 | 'jp-role': type,
144 | 'jp-data': pageData
145 | })
146 | .jqPaginatorHTML()
147 | };
148 |
149 | self.setStatus = function () {
150 | var options = self.options;
151 |
152 | if (!self.isEnable('first') || options.currentPage === 1) {
153 | $('[jp-role=first]', self.$container).addClass(options.disableClass);
154 | }
155 | if (!self.isEnable('prev') || options.currentPage === 1) {
156 | $('[jp-role=prev]', self.$container).addClass(options.disableClass);
157 | }
158 | if (!self.isEnable('next') || options.currentPage >= options.totalPages) {
159 | $('[jp-role=next]', self.$container).addClass(options.disableClass);
160 | }
161 | if (!self.isEnable('last') || options.currentPage >= options.totalPages) {
162 | $('[jp-role=last]', self.$container).addClass(options.disableClass);
163 | }
164 |
165 | $('[jp-role=page]', self.$container).removeClass(options.activeClass);
166 | $('[jp-role=page][jp-data=' + options.currentPage + ']', self.$container).addClass(options.activeClass);
167 | };
168 |
169 | self.getPages = function () {
170 | var pages = [];
171 |
172 | var visiblePages = self.options.visiblePages;
173 |
174 | var currentPage = self.options.currentPage;
175 |
176 | var totalPages = self.options.totalPages;
177 |
178 | if (visiblePages > totalPages) {
179 | visiblePages = totalPages;
180 | }
181 |
182 | var half = Math.floor(visiblePages / 2);
183 | var start = currentPage - half + 1 - (visiblePages % 2);
184 | var end = currentPage + half;
185 |
186 | if (start < 1) {
187 | start = 1;
188 | end = visiblePages;
189 | }
190 | if (end > totalPages) {
191 | end = totalPages;
192 | start = 1 + totalPages - visiblePages;
193 | }
194 |
195 | var itPage = start;
196 | while (itPage <= end) {
197 | pages.push(itPage);
198 | itPage++;
199 | }
200 |
201 | return pages
202 | };
203 |
204 | self.isNumber = function (value) {
205 | var type = typeof value;
206 | return type === 'number' || type === 'undefined'
207 | };
208 |
209 | self.isEnable = function (type) {
210 | return self.options[type] && typeof self.options[type] === 'string'
211 | };
212 |
213 | self.switchPage = function (pageIndex) {
214 | self.options.currentPage = pageIndex;
215 | self.render();
216 | };
217 |
218 | self.fireEvent = function (pageIndex, type) {
219 | return typeof self.options.onPageChange !== 'function' || self.options.onPageChange(pageIndex, type) !== false
220 | };
221 |
222 | self.callMethod = function (method, options) {
223 | switch (method) {
224 | case 'option':
225 | self.options = $.extend({}, self.options, options);
226 | self.verify();
227 | self.render();
228 | break
229 | case 'destroy':
230 | self.$container.empty();
231 | self.$container.removeData('jqPaginator');
232 | break
233 | default:
234 | throw new Error('[jqPaginator] method "' + method + '" does not exist')
235 | }
236 |
237 | return self.$container
238 | };
239 |
240 | self.bindEvents = function () {
241 | var opts = self.options;
242 |
243 | self.$container.off();
244 | self.$container.on('click', '[jp-role]', function () {
245 | var $el = $(this);
246 | if ($el.hasClass(opts.disableClass) || $el.hasClass(opts.activeClass)) {
247 | return
248 | }
249 |
250 | var pageIndex = +$el.attr('jp-data');
251 | if (self.fireEvent(pageIndex, 'change')) {
252 | self.switchPage(pageIndex);
253 | }
254 | });
255 | };
256 |
257 | self.init();
258 |
259 | return self.$container
260 | };
261 |
262 | $.jqPaginator.defaultOptions = {
263 | wrapper: '',
264 | first: '
First',
265 | prev: 'Previous',
266 | next: 'Next',
267 | last: 'Last',
268 | page: '{{page}}',
269 | totalPages: 0,
270 | totalCounts: 0,
271 | pageSize: 0,
272 | currentPage: 1,
273 | visiblePages: 7,
274 | disableClass: 'disabled',
275 | activeClass: 'active',
276 | onPageChange: null
277 | };
278 |
279 | $.fn.jqPaginator = function () {
280 | var self = this;
281 |
282 | var args = Array.prototype.slice.call(arguments);
283 |
284 | if (typeof args[0] === 'string') {
285 | var $instance = $(self).data('jqPaginator');
286 | if (!$instance) {
287 | throw new Error('[jqPaginator] the element is not instantiated')
288 | } else {
289 | return $instance.callMethod(args[0], args[1])
290 | }
291 | } else {
292 | return new $.jqPaginator(this, args[0])
293 | }
294 | };
295 |
296 | }());
297 |
--------------------------------------------------------------------------------
/src/main/resources/templates/commons/footer.html:
--------------------------------------------------------------------------------
1 |