From ead9533be336867816345aa3c50e9462dd1ca40c Mon Sep 17 00:00:00 2001 From: deepzz0 Date: Sun, 2 Oct 2016 00:11:15 +0800 Subject: [PATCH] update --- Dockerfile | 6 +- conf/app.yml | 14 +- .../nginx/{eiblog.conf => domain/deepzz.conf} | 65 ++++-- conf/nginx/ip.blacklist | 0 conf/nginx/nginx.conf | 188 +++++++++++------- conf/scts/aviator.sct | Bin 0 -> 119 bytes conf/scts/digicert.sct | Bin 0 -> 119 bytes conf/ssl/dhparams.pem | 8 + conf/ssl/domain.key | 27 +++ conf/ssl/domain.pem | 65 ++++++ conf/ssl/session_ticket.key | 1 + conf/tpl/feedTpl.xml | 2 +- .../tpl/opensearchTpl.xml | 8 +- db.go | 7 +- disqus.go | 4 +- docker-compose.yml | 7 +- elasticsearch.go | 2 +- front.go | 17 +- main.go | 14 +- pingrpc.go | 1 + router.go | 4 + setting/setting.go | 2 +- static/BingSiteAuth.xml | 0 static/blog.css | 1 - static/crossdoamin.xml | 6 + static/favicon.ico | Bin 0 -> 16958 bytes {conf => static}/robots.txt | 0 views/admin/login.html | 2 +- views/admin/post.html | 15 +- views/homeLayout.html | 2 +- views/st_ana_js.js | 19 +- views/st_blog_css.css | 2 +- views/st_blog_js.js | 2 +- xml.go | 49 +++-- 34 files changed, 359 insertions(+), 181 deletions(-) rename conf/nginx/{eiblog.conf => domain/deepzz.conf} (66%) create mode 100644 conf/nginx/ip.blacklist create mode 100644 conf/scts/aviator.sct create mode 100644 conf/scts/digicert.sct create mode 100644 conf/ssl/dhparams.pem create mode 100644 conf/ssl/domain.key create mode 100644 conf/ssl/domain.pem create mode 100644 conf/ssl/session_ticket.key rename static/opensearch.xml => conf/tpl/opensearchTpl.xml (50%) create mode 100644 pingrpc.go create mode 100644 static/BingSiteAuth.xml delete mode 100644 static/blog.css create mode 100644 static/crossdoamin.xml create mode 100644 static/favicon.ico rename {conf => static}/robots.txt (100%) diff --git a/Dockerfile b/Dockerfile index e676ff7..a4d3583 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,15 @@ FROM ubuntu:trusty MAINTAINER deepzz +RUN apt-get update +RUN apt-get install -y ca-certificates + ADD conf /eiblog/conf ADD static /eiblog/static ADD views /eiblog/views ADD eiblog /eiblog/eiblog -EXPOSE 80 -EXPOSE 443 +EXPOSE 9000 WORKDIR /eiblog ENTRYPOINT ["./eiblog"] \ No newline at end of file diff --git a/conf/app.yml b/conf/app.yml index c2103ef..6f5788b 100644 --- a/conf/app.yml +++ b/conf/app.yml @@ -1,7 +1,7 @@ # 静态文件版本 staticversion: 2 # 运行模式 dev or prod -runmode: dev +runmode: prod # 回收箱保留48小时 trash: -48 # 定时清理回收箱,%d小时 @@ -15,11 +15,11 @@ length: 200 # 截取预览标识 identifier: # favicon -favicon: //st.deepzz.com/static/img/favicon.png +favicon: //st.deepzz.com/static/img/favicon.ico # 起始ID,预留id不时之需, 不用管 startid: 11 # 静态文件地址, 后台js,css在用, cdn: //domain.com -static: //127.0.0.1:8080 +static: //deepzz.com # elasticsearch url searchurl: http://elasticsearch:9200 # 评论相关 @@ -33,13 +33,13 @@ modes: dev: # don't modify enablehttp: true - httpport: 8080 - domain: 127.0.0.1:8080 + httpport: 9000 + domain: deepzz.com prod: # you can fix certfile, keyfile, domain enablehttp: true - httpport: 80 - enablehttps: true + httpport: 9000 + enablehttps: false httpsport: 443 certfile: conf/certs/domain.pem keyfile: conf/certs/domain.key diff --git a/conf/nginx/eiblog.conf b/conf/nginx/domain/deepzz.conf similarity index 66% rename from conf/nginx/eiblog.conf rename to conf/nginx/domain/deepzz.conf index 26eb50f..8348407 100644 --- a/conf/nginx/eiblog.conf +++ b/conf/nginx/domain/deepzz.conf @@ -4,24 +4,25 @@ server { server_name www.deepzz.com deepzz.com; server_tokens off; - include /data/eiblog/nginx/ip.blacklist; + include /data/eiblog/conf/nginx/ip.blacklist; + # 现在一般证书是内置的。可以注释该项 # https://imququ.com/post/certificate-transparency.html#toc-2 # ssl_ct on; - # ssl_ct_static_scts /home/jerry/www/scts; + # ssl_ct_static_scts /data/eiblog/conf/scts; # 中间证书 + 站点证书 - ssl_certificate /data/eiblog/conf/certs/chained.pem; + ssl_certificate /data/eiblog/conf/ssl/domain.pem; # 创建 CSR 文件时用的密钥 - ssl_certificate_key /data/eiblog/conf/certs/domain.key; + ssl_certificate_key /data/eiblog/conf/ssl/domain.key; # openssl dhparam -out dhparams.pem 2048 # https://weakdh.org/sysadmin.html ssl_dhparam /data/eiblog/conf/ssl/dhparams.pem; # https://github.com/cloudflare/sslconfig/blob/master/conf - ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; + ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; # 如果启用了 RSA + ECDSA 双证书,Cipher Suite 可以参考以下配置: # ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5; @@ -37,19 +38,19 @@ server { # openssl rand 48 > session_ticket.key # 单机部署可以不指定 ssl_session_ticket_key - ssl_session_ticket_key /data/eiblog/conf/ssl/session_ticket.key; + # ssl_session_ticket_key /data/eiblog/conf/ssl/session_ticket.key; ssl_stapling on; ssl_stapling_verify on; # 根证书 + 中间证书 # https://imququ.com/post/why-can-not-turn-on-ocsp-stapling.html - # ssl_trusted_certificate /home/jerry/www/ssl/full_chained.pem; + # ssl_trusted_certificate /data/eiblog/conf/ssl/full_chained.pem; resolver 114.114.114.114 valid=300s; resolver_timeout 10s; - access_log /data/eiblog/log/nginx.log; + access_log /data/eiblog/logdata/nginx.log; if ($request_method !~ ^(GET|HEAD|POST|OPTIONS)$ ) { return 444; @@ -59,8 +60,9 @@ server { rewrite ^/(.*)$ https://deepzz.com/$1 permanent; } + # webmaster 站点验证相关 location ~* (robots\.txt|favicon\.ico|crossdomain\.xml|google4c90d18e696bdcf8\.html|BingSiteAuth\.xml)$ { - root /home/jerry/www/imququ.com/www/static; + root /data/eiblog/static; expires 1d; } @@ -80,7 +82,7 @@ server { } location ^~ /static/ { - root /home/jerry/www/imququ.com/www; + root /data/eiblog; add_header Access-Control-Allow-Origin *; expires max; } @@ -96,13 +98,14 @@ server { add_header X-Content-Type-Options nosniff; - proxy_set_header X-Via QingDao.Aliyun; + # proxy_set_header X-Via QingDao.Aliyun; proxy_set_header Connection ""; - proxy_set_header Host imququ.com; + proxy_set_header Host deepzz.com; proxy_set_header X-Real_IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-XSS-Protection 1; mode=block; - proxy_pass http://127.0.0.1:9095; + proxy_pass http://127.0.0.1:9000; } location / { @@ -111,8 +114,11 @@ server { add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; add_header X-Frame-Options deny; add_header X-Content-Type-Options nosniff; - add_header Content-Security-Policy "default-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' blob: https:; img-src data: https: http://ip.qgy18.com; style-src 'unsafe-inline' https:; child-src https:; connect-src 'self' https://translate.googleapis.com; frame-src https://disqus.com https://www.slideshare.net"; - add_header Public-Key-Pins 'pin-sha256="YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg="; pin-sha256="aef6IF2UF6jNEwA2pNmP7kpgT6NFSdt7Tqf5HzaIGWI="; max-age=2592000; includeSubDomains'; + # 改deepzz相关的 + add_header Content-Security-Policy "default-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' blob: https:; img-src data: https: https://st.deepzz.com; style-src 'unsafe-inline' https:; child-src https:; connect-src 'self' https://translate.googleapis.com; frame-src https://disqus.com https://www.slideshare.net"; + # 中间证书证书指纹 + # https://imququ.com/post/http-public-key-pinning.html + add_header Public-Key-Pins 'pin-sha256="JbQbUG5JMJUoI6brnx0x3vZF6jilxsapbXGVfjhN8Fg="; pin-sha256="YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg="; max-age=2592000; includeSubDomains'; add_header Cache-Control no-cache; proxy_ignore_headers Set-Cookie; @@ -120,13 +126,13 @@ server { proxy_hide_header Vary; proxy_hide_header X-Powered-By; - proxy_set_header X-Via QingDao.Aliyun; + # proxy_set_header X-Via QingDao.Aliyun; proxy_set_header Connection ""; proxy_set_header Host deepzz.com; proxy_set_header X-Real_IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_pass http://127.0.0.1:9095; + proxy_pass http://127.0.0.1:9000; } } @@ -148,4 +154,29 @@ server { location / { rewrite ^/(.*)$ https://deepzz.com/$1 permanent; } +} + +# 原博客,内部做的转发 +server { + server_name blog.deepzz.com; + access_log /dev/null; + + location / { + rewrite ^/(.*)$ https://blog.deepzz.com/$1 permanent; + } +} + +server { + listen 443; + server_name blog.deepzz.com; + + add_header Strict-Transport-Security "max-age=31536000"; + add_header X-Frame-Options deny; + add_header X-Content-Type-Options nosniff; + add_header X-Xss-Protection "1; mode=block;"; + + + location / { + proxy_pass https://127.0.0.1:9010; + } } \ No newline at end of file diff --git a/conf/nginx/ip.blacklist b/conf/nginx/ip.blacklist new file mode 100644 index 0000000..e69de29 diff --git a/conf/nginx/nginx.conf b/conf/nginx/nginx.conf index 239e3c7..b6ffe6c 100644 --- a/conf/nginx/nginx.conf +++ b/conf/nginx/nginx.conf @@ -1,95 +1,131 @@ -user www-data; -worker_processes 4; -pid /run/nginx.pid; + +#user nobody; +worker_processes 1; + +#error_log logs/error.log; +#error_log logs/error.log notice; +#error_log logs/error.log info; + +#pid logs/nginx.pid; + events { - worker_connections 768; - # multi_accept on; + worker_connections 1024; } + http { + include mime.types; + default_type application/octet-stream; + charset UTF-8; + #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + # '$status $body_bytes_sent "$http_referer" ' + # '"$http_user_agent" "$http_x_forwarded_for"'; - ## - # Basic Settings - ## + #access_log logs/access.log main; - sendfile on; - tcp_nopush on; - tcp_nodelay on; - keepalive_timeout 65; - types_hash_max_size 2048; - # server_tokens off; + sendfile on; + tcp_nopush on; + tcp_nodelay on; - # server_names_hash_bucket_size 64; - # server_name_in_redirect off; + #keepalive_timeout 0; + keepalive_timeout 65; - include /etc/nginx/mime.types; - default_type application/octet-stream; - - ## - # Logging Settings - ## + gzip on; + gzip_vary on; - access_log /var/log/nginx/access.log; - error_log /var/log/nginx/error.log; + gzip_comp_level 6; + gzip_buffers 16 8k; - ## - # Gzip Settings - ## + gzip_min_length 1000; + gzip_proxied any; + gzip_disable "msie6"; - gzip on; - gzip_disable "msie6"; + gzip_http_version 1.0; - gzip_min_length 1000; - gzip_vary on; - gzip_proxied any; - gzip_comp_level 6; - gzip_buffers 16 8k; - gzip_http_version 1.1; - gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml; - ## - # nginx-naxsi config - ## - # Uncomment it if you installed nginx-naxsi - ## + gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml; - #include /etc/nginx/naxsi_core.rules; + server { + listen 80; + server_name localhost; - ## - # nginx-passenger config - ## - # Uncomment it if you installed nginx-passenger - ## + #charset koi8-r; - #passenger_root /usr; - #passenger_ruby /usr/bin/ruby; + #access_log logs/host.access.log main; - ## - # Virtual Host Configs - ## + location / { + root html; + index index.html index.htm; + } - include /etc/nginx/conf.d/*.conf; - include /etc/nginx/sites-enabled/*; + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + + # proxy the PHP scripts to Apache listening on 127.0.0.1:80 + # + #location ~ \.php$ { + # proxy_pass http://127.0.0.1; + #} + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + #location ~ \.php$ { + # root html; + # fastcgi_pass 127.0.0.1:9000; + # fastcgi_index index.php; + # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; + # include fastcgi_params; + #} + + # deny access to .htaccess files, if Apache's document root + # concurs with nginx's one + # + #location ~ /\.ht { + # deny all; + #} + } + + + # another virtual host using mix of IP-, name-, and port-based configuration + # + #server { + # listen 8000; + # listen somename:8080; + # server_name somename alias another.alias; + + # location / { + # root html; + # index index.html index.htm; + # } + #} + + + # HTTPS server + # + #server { + # listen 443 ssl; + # server_name localhost; + + # ssl_certificate cert.pem; + # ssl_certificate_key cert.key; + + # ssl_session_cache shared:SSL:1m; + # ssl_session_timeout 5m; + + # ssl_ciphers HIGH:!aNULL:!MD5; + # ssl_prefer_server_ciphers on; + + # location / { + # root html; + # index index.html index.htm; + # } + #} + + include /data/eiblog/conf/nginx/domain/*.conf; } - - -#mail { -# # See sample authentication script at: -# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript -# -# # auth_http localhost/auth.php; -# # pop3_capabilities "TOP" "USER"; -# # imap_capabilities "IMAP4rev1" "UIDPLUS"; -# -# server { -# listen localhost:110; -# protocol pop3; -# proxy on; -# } -# -# server { -# listen localhost:143; -# protocol imap; -# proxy on; -# } -#} \ No newline at end of file diff --git a/conf/scts/aviator.sct b/conf/scts/aviator.sct new file mode 100644 index 0000000000000000000000000000000000000000..e35739593cdc4033de0c576fc306a8eb955d141b GIT binary patch literal 119 zcmV--0EqtpX!e-+A7p~QI*jhQC>>1vaZz1olhj1f3TLdlPfz>A00042>cW>r000C7 z07x)K0wDmT@C9uhav?mWD2IN!oH4i-B%7wwbciv-wJe)c0>%FVApo(3?XYLY1ZXov Z3YBw0Il!F^HSikBH~v#Da7&-s4qen>G1>qC literal 0 HcmV?d00001 diff --git a/conf/scts/digicert.sct b/conf/scts/digicert.sct new file mode 100644 index 0000000000000000000000000000000000000000..55a9d065484e5f0847392b27ca28164d072b1db9 GIT binary patch literal 119 zcmV--0EqtpRul%BFW18C)AixKM6y1|Ms~TpnGsyT@06HT)``&F00043b?+{E000C7 z07x)K0wDm@xcBzGM}7u{RAiNItXSXJSVw{Qb+#+App*J@#uefaOf)& ZjPGkb`ll|iQXkDFhpSyWfk=06ZhebQG?4%R literal 0 HcmV?d00001 diff --git a/conf/ssl/dhparams.pem b/conf/ssl/dhparams.pem new file mode 100644 index 0000000..4022005 --- /dev/null +++ b/conf/ssl/dhparams.pem @@ -0,0 +1,8 @@ +-----BEGIN DH PARAMETERS----- +MIIBCAKCAQEAzkJoGFJJGMXQBVIq0DFom7qI3vD7Z8JMQnfCLpoi9AfqW6kGq/bR +FhK9fuRkO+GdzZasx1mSNRQeX8GdaQM4GUn0yel7fxlxNC59mxo++P8NvmxQ47l4 +K9QpIRuqxa5UKIG6g3N5pkLwGjcD9a79v4DJn4XA9cVjRYc4BnYmiArgaMFOmGPy +KmvU/VhFv8fnxSfn8uCmAGSuHmfbjx5TMfCqaeXzmmhyvpSl88JZfGlwOtXcOU0K +O2JhNRKtaicZlevC8gtpFDNYKnf4K9kiUVmq0JLvuzOxN05sQoPYFCvgMFIYf+ND +Jwtv7FWF2hQV3y1Xms7ja4776FcP9QlKuwIBAg== +-----END DH PARAMETERS----- diff --git a/conf/ssl/domain.key b/conf/ssl/domain.key new file mode 100644 index 0000000..957ea32 --- /dev/null +++ b/conf/ssl/domain.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAmUN+euOPxGgtCrNrRzbmtXXLpUEdFlYnVRmhoG60n3m1RUFq +a/wN9e95oViHKrXfUzU6cGnsmHZ0Vcls/WQZ7Z8nZ6J6ZrjRASa88I1pFyrKlC9F +FzZF/8Gfh0zkP7Pp4hNl+gMkLFIVueFNNPrQLldNva95aWomqtFJ80/3RghV2NL/ +DdT0XLmkvWT7NFIu5e1xwflzaA4d5Dr5Sxt2dehnhXSsK8yTB8DCsEgB73S5Eo9Y +lFk2udHpl/6h9MV8Tu+LA3D2KXj+IBTJwn9haEm3eXqEoAP+rH5UD3ycodc4Pe// +5tJaWCUZcgWdFDf89mYaIAsE6C9oMj/f4r2ygwIDAQABAoIBAAZZG9OGOm21rOvt +C4v7E6o/c0xoeoZy0hU9xwqIm1WhqmbwczJ+0as2nJCYxJx5xQLCySVf1cto2J+3 +BJsoOsSzW2P5AF3h2NJV4uyJxukNPi/OF2wDNPoHcI6fmjKjRpQ1HnuxBp4JVloJ +IXQI0Xeh6RfqvTonCev4WDpKPSE65b6ztStVAIm/uetfqLbHHXN5SyCojaWPKcOI +kEvfZZjhzuEeCq9nJ5aVpPCpVxqG+1/OnxHoxQ6/ABT6q01US/mQMOZ2nCHR/DYC +r26DU7zNrOtaFgerNlTnVeKgAy0KC0J727q1fpXbSbACayKiQsHlz5XBvsX5aKcv +CO/P7YkCgYEAxkNh+siSHvcMbi9Gx2A4+CVFk4YEd0q8Ublap2hXf8rJRSGML1bW +g3F0iG2nKKYOQpLXPVLAhxm0jtX+OPGyOai/QzILLwLAPx9ugeJOXAcklBPixdMi +SUNs7ycVHgQMg1wK/5Xhzeyh12lyF9Ks7/KYLEZ8bE6fMrMPVY/+pckCgYEAxeVf +TIHKdhMt1XSNkoUhogUZvGHOAbcbcgmN9SO5x/WiVvlk8jQuOOszU+4yJyaXp2rs +sekyjaA0GVte1V9YvKZ0tGZDKGPGdwuxgkf0Ev6l8UT2KLtRRn4tYGJ+/wMnDavM +LZPss4Za++8ygsB988W+OngO5lYdnMF4fHls6+sCgYBJKJ4kAxTgNjsxAWL1uQzs +jBxTZnWJa1t4MJRCB9+ZuUNxrgJjiYCYeioNGaE//55tdG/WIg4HDDYzKsWnT5B7 +dEg3TGUSEMrNwBRv+wj9LmmR9pCMfO8+55Fv4hUJwWa4piMs0qrC6NmDelZucf/8 +fqEmXVAWSyC1fZtf8EV/+QKBgQCIWnbDXFqH6McX4Gr7nceCv0jwR+ONwwCiHns1 +gRws7s6gZs5rJBEFHuoK1oCwASNVM5NLMoamls/O+Onq0vttYLPg6OU1GypQNDpm +rfU6cUMdboq9nfNuQto5IySlySJLhSf174qUV+qw1CtVdBRUttdPqhF6G7PjolrG +SVQHaQKBgQC63BTyKwxUEdWdU5oKkmBv9nKpJNeGrHQanFygYhnZcXURDiGPr/sY +X/oMukIKLu73PH/VsVq8EfvWRsyJrSovrqZTGIhqvL0JlvmqJ89vlpQSm/cwzrLA +kNYtXfswl67dSwHcrUQ7vvSJWBAoxHTBQEvcV6ffUQW3t2jgjZ71oA== +-----END RSA PRIVATE KEY----- diff --git a/conf/ssl/domain.pem b/conf/ssl/domain.pem new file mode 100644 index 0000000..52f7f87 --- /dev/null +++ b/conf/ssl/domain.pem @@ -0,0 +1,65 @@ +-----BEGIN CERTIFICATE----- +MIIFyDCCBLCgAwIBAgIQL+zOTGJbRDujAYL+Ju6BDDANBgkqhkiG9w0BAQsFADCB +lzELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs +IEluYy4xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxHTAbBgNVBAsT +FERvbWFpbiBWYWxpZGF0ZWQgU1NMMSEwHwYDVQQDExhUcnVzdEFzaWEgRFYgU1NM +IENBIC0gRzUwHhcNMTYwODMxMDAwMDAwWhcNMTcwODMxMjM1OTU5WjAXMRUwEwYD +VQQDDAwqLmRlZXB6ei5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCZQ35644/EaC0Ks2tHNua1dculQR0WVidVGaGgbrSfebVFQWpr/A3173mhWIcq +td9TNTpwaeyYdnRVyWz9ZBntnydnonpmuNEBJrzwjWkXKsqUL0UXNkX/wZ+HTOQ/ +s+niE2X6AyQsUhW54U00+tAuV029r3lpaiaq0UnzT/dGCFXY0v8N1PRcuaS9ZPs0 +Ui7l7XHB+XNoDh3kOvlLG3Z16GeFdKwrzJMHwMKwSAHvdLkSj1iUWTa50emX/qH0 +xXxO74sDcPYpeP4gFMnCf2FoSbd5eoSgA/6sflQPfJyh1zg97//m0lpYJRlyBZ0U +N/z2ZhogCwToL2gyP9/ivbKDAgMBAAGjggKNMIICiTAjBgNVHREEHDAaggwqLmRl +ZXB6ei5jb22CCmRlZXB6ei5jb20wCQYDVR0TBAIwADBhBgNVHSAEWjBYMFYGBmeB +DAECATBMMCMGCCsGAQUFBwIBFhdodHRwczovL2Quc3ltY2IuY29tL2NwczAlBggr +BgEFBQcCAjAZDBdodHRwczovL2Quc3ltY2IuY29tL3JwYTAfBgNVHSMEGDAWgBRt +WMd/GufhPy6mjJc1Qrv00zisPzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYI +KwYBBQUHAwEGCCsGAQUFBwMCMIGbBggrBgEFBQcBAQSBjjCBizA8BggrBgEFBQcw +AYYwaHR0cDovL3RydXN0YXNpYTItb2NzcC5kaWdpdGFsY2VydHZhbGlkYXRpb24u +Y29tMEsGCCsGAQUFBzAChj9odHRwOi8vdHJ1c3Rhc2lhMi1haWEuZGlnaXRhbGNl +cnR2YWxpZGF0aW9uLmNvbS90cnVzdGFzaWFnNS5jcnQwggEEBgorBgEEAdZ5AgQC +BIH1BIHyAPAAdgDd6x0reg1PpiCLga2BaHB+Lo6dAdVciI09EcTNtuy+zAAAAVbf +IVw3AAAEAwBHMEUCIEAjEfQw6guzwAUvOg7odMLsEt+msEBdEL3nPBU3bdgdAiEA ++XbyaL/WjeB+K6ICRvH7caki4gBbxGHDrsCcrhIpEDAAdgCkuQmQtBhYFIe7E6LM +Z3AKPDWYBPkb37jjd80OyA3cEAAAAVbfIV3DAAAEAwBHMEUCIAkPqq/ZORARqlYn +8th65SLQM4f/10428QJSfVn6qn+sAiEAhotgQvwB5w2NtZlCpFHL8ESSJTjVu1YN +FVvemugJ788wDQYJKoZIhvcNAQELBQADggEBAD2cLVIL39x+wGKgYA68MmRPKweg +tiniflJU9EBssG3ry6apc014wvh/fGS02uQMkd+ZiyjwAExuNISqNlQ2NaEbVfKR +kgR8kka2fmaTlYASWkHWPAiLq28kFQro2mXBurZkb9WQWTgrCrYRX2y4UJ7fvrjw +q+VHgwmS/vtEoB7gGC1gM5oIiXdalJlqxc2OJ1NW7O3SpM/EoGYD+M6WPianeecY +w37BDCiWlbX/+6PcRk3v8D+2GTdhjn5KUJH+Tbqi5bNSkCoxF4eFY6yiS1MDFJnp +Yv+CHlHLNhqR7g59URv1+QCBgT7XHuBjNVtq2lX608W9X2mTQH0SRucqRUc= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFZTCCBE2gAwIBAgIQOhAOfxCeGsWcxf/2QNXkQjANBgkqhkiG9w0BAQsFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMTYwODExMDAwMDAwWhcNMjYwODEwMjM1OTU5WjCBlzEL +MAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMsIElu +Yy4xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxHTAbBgNVBAsTFERv +bWFpbiBWYWxpZGF0ZWQgU1NMMSEwHwYDVQQDExhUcnVzdEFzaWEgRFYgU1NMIENB +IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC39aSJZG/97x3a +6Qmuc9+MubagegRAVUmFYHTYTs8IKB2pM7wXN7W8mekdZaEgUjDFxvRBK/DhTb7U +8ONLsKKdT86aOhzbz2noCTn9wPWnGwkg+/4YKg/dPQQdV9tMsSu0cwqInWHxSAkm +AI1hYFC9D7Sf7Hp/5cRcD+dK454YMRzNOGLQnCVI8JEqrz6o9SOvQNTqTcfqt6DC +0UlXG+MPD1eNPjlzf1Vwaab+VSTgySoC+Ikbq2VsdykeOiGXW/OIiASH7+2LcR05 +PmQ7GEOlM8yzoVojFpM8sHz+WxI05ZOPri5+vX3HhHHjWr5432G0dVmgohnZvlVZ +oy8XrlbpAgMBAAGjggF2MIIBcjASBgNVHRMBAf8ECDAGAQH/AgEAMC8GA1UdHwQo +MCYwJKAioCCGHmh0dHA6Ly9zLnN5bWNiLmNvbS9wY2EzLWc1LmNybDAOBgNVHQ8B +Af8EBAMCAQYwLgYIKwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5z +eW1jZC5jb20wYQYDVR0gBFowWDBWBgZngQwBAgEwTDAjBggrBgEFBQcCARYXaHR0 +cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5 +bWNiLmNvbS9ycGEwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCkGA1Ud +EQQiMCCkHjAcMRowGAYDVQQDExFTeW1hbnRlY1BLSS0yLTYwMTAdBgNVHQ4EFgQU +bVjHfxrn4T8upoyXNUK79NM4rD8wHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnzQzn6 +Aq8zMTMwDQYJKoZIhvcNAQELBQADggEBABUphhBbeG7scE3EveIN0dOjXPgwgQi8 +I2ZAKYm6DawoGz1lEJVdvFmkyMbP973X80b7mKmn0nNbe1kjA4M0O0hHaMM1ZaEv +7e9vHEAoGyysMO6HzPWYMkyNxcCV7Nos2Uv4RvLDpQHh7P4Kt6fUU13ipcynrtQD +1lFUM0yoTzwwFsPu3Pk+94hL58ErqwqJQwxoHMgLIQeMVHeNKcWFy1bddSbIbCWU +Zs6cMxhrra062ZCpDCbxyEaFNGAtYQMqNz55Z/14XgSUONZ/cJTns6QKhpcgTOwB +fnNzRnk+aWreP7osKhXlz4zs+llP7goBDKFOMMtoEXx3YjJCKgpqmBU= +-----END CERTIFICATE----- + diff --git a/conf/ssl/session_ticket.key b/conf/ssl/session_ticket.key new file mode 100644 index 0000000..c80651d --- /dev/null +++ b/conf/ssl/session_ticket.key @@ -0,0 +1 @@ +`*d٘\H =3`)jIu8%k+7H \ No newline at end of file diff --git a/conf/tpl/feedTpl.xml b/conf/tpl/feedTpl.xml index 46a7568..3e9c410 100644 --- a/conf/tpl/feedTpl.xml +++ b/conf/tpl/feedTpl.xml @@ -3,7 +3,7 @@ {{.Title}} {{if .EnableHttps}}https://{{else}}http://{{end}}{{.Domain}} - + {{.SubTitle}} zh-CN {{.BuildDate}} diff --git a/static/opensearch.xml b/conf/tpl/opensearchTpl.xml similarity index 50% rename from static/opensearch.xml rename to conf/tpl/opensearchTpl.xml index c8b4d9d..0e97f5e 100644 --- a/static/opensearch.xml +++ b/conf/tpl/opensearchTpl.xml @@ -1,6 +1,6 @@ - + - Deepzz's Blog - 不抛弃,不放弃 - + {{.BTitle}} + {{.SubTitle}} + \ No newline at end of file diff --git a/db.go b/db.go index aab795c..6d1d1bd 100644 --- a/db.go +++ b/db.go @@ -11,7 +11,6 @@ import ( "time" "github.com/EiBlog/blackfriday" - "github.com/EiBlog/eiblog/helper" "github.com/EiBlog/eiblog/setting" "github.com/EiBlog/utils/logd" db "github.com/EiBlog/utils/mgo" @@ -95,7 +94,7 @@ func init() { // 启动定时器 go timer() // 获取评论数量 - // go CommentsCount() + go CommentsCount() } // 读取或初始化帐号信息 @@ -106,7 +105,7 @@ func loadAccount() (a *Account) { if err == mgo.ErrNotFound { a = &Account{ Username: setting.Conf.Account.Username, - Password: helper.EncryptPasswd(setting.Conf.Account.Username, setting.Conf.Account.Password), + Password: EncryptPasswd(setting.Conf.Account.Username, setting.Conf.Account.Password), Email: setting.Conf.Account.Email, PhoneN: setting.Conf.Account.PhoneNumber, Address: setting.Conf.Account.Address, @@ -173,7 +172,7 @@ func generateMarkdown() { buffer.WriteString(serie.Desc) buffer.WriteString("\n\n") for _, artc := range serie.Articles { - // * [标题一](/post/hello-world.html) (Man 02, 2006) + //eg. * [标题一](/post/hello-world.html) (Man 02, 2006) buffer.WriteString("* [" + artc.Title + "](/post/" + artc.Slug + ".html) (" + artc.CreateTime.Format("Jan 02, 2006") + ")\n") } buffer.WriteByte('\n') diff --git a/disqus.go b/disqus.go index 2dd7837..3c9f388 100644 --- a/disqus.go +++ b/disqus.go @@ -27,9 +27,9 @@ func CommentsCount() { return } baseUrl := setting.Conf.Disqus.URL + "?api_key=" + setting.Conf.Disqus.PublicKey + "&forum=" + setting.Conf.Disqus.ShortName + "&" - domain := "http:" + runmode.Domain + domain := "http://" + runmode.Domain if runmode.EnableHttps { - domain = "https:" + runmode.Domain + domain = "https://" + runmode.Domain } var count, index int for index < len(Ei.Articles) { diff --git a/docker-compose.yml b/docker-compose.yml index cbe0b83..2ff2010 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: image: mongo:3.2 container_name: eidb volumes: - - /data/eiblog/db:/data/db + - /data/eiblog/mgodb:/data/db restart: always elasticsearch: image: elasticsearch:2.4 @@ -26,11 +26,10 @@ services: volumes: - /data/eiblog/logdata:/eiblog/logdata - /data/eiblog/conf:/eiblog/conf + - /data/eiblog/static:/eiblog/static links: - elasticsearch - mongodb ports: - - "443:443" - - "80:80" - - "8080:8080" + - "9000:9000" restart: always \ No newline at end of file diff --git a/elasticsearch.go b/elasticsearch.go index 76e1fc0..ce6ac2e 100644 --- a/elasticsearch.go +++ b/elasticsearch.go @@ -145,7 +145,7 @@ func ElasticIndex(artc *Article) error { "content": artc.Content, "slug": artc.Slug, "tags": artc.Tags, - "create_time": artc.CreateTime.Format("2006-01-02"), + "create_time": artc.CreateTime, } b, _ := json.Marshal(mapping) return IndexOrUpdateDocument(INDEX, TYPE, artc.ID, b) diff --git a/front.go b/front.go index 7c16c24..b2257ec 100644 --- a/front.go +++ b/front.go @@ -79,7 +79,7 @@ func GetBase() gin.H { func HandleHomePage(c *gin.Context) { h := GetBase() h["Version"] = StaticVersion(c) - h["Title"] = Ei.BTitle + h["Title"] = Ei.BTitle + " | " + Ei.SubTitle h["Path"] = c.Request.URL.Path h["HomePage"] = true h["CurrentPage"] = "blog-home" @@ -198,25 +198,22 @@ func HandleSearchPage(c *gin.Context) { c.HTML(http.StatusOK, "homeLayout.html", h) } +func HandleBeacon(c *gin.Context) {} + func HandleFeed(c *gin.Context) { - http.ServeFile(c.Writer, c.Request, "conf/feed.xml") + http.ServeFile(c.Writer, c.Request, "static/feed.xml") } func HandleOpenSearch(c *gin.Context) { - c.Header("Content-Type", "application/xml; charset=utf-8") - c.Writer.WriteString("\n") - c.HTML(http.StatusOK, "opensearch.xml", gin.H{ - "BTitle": Ei.BTitle, - "SubTitle": Ei.SubTitle, - }) + http.ServeFile(c.Writer, c.Request, "static/opensearch.xml") } func HandleRobots(c *gin.Context) { - http.ServeFile(c.Writer, c.Request, "conf/robots.txt") + http.ServeFile(c.Writer, c.Request, "static/robots.txt") } func HandleSitemap(c *gin.Context) { - http.ServeFile(c.Writer, c.Request, "conf/sitemap.xml") + http.ServeFile(c.Writer, c.Request, "static/sitemap.xml") } func HandleComments(c *gin.Context) { diff --git a/main.go b/main.go index b7b5be7..65c7ca5 100644 --- a/main.go +++ b/main.go @@ -2,18 +2,14 @@ package main import ( - "net/http" - _ "net/http/pprof" - - "github.com/EiBlog/utils/logd" +// "net/http" +// _ "net/http/pprof" ) func main() { - // set log print level - logd.SetLevel(logd.Ldebug) // pprof - go func() { - http.ListenAndServe(":6060", nil) - }() + // go func() { + // http.ListenAndServe(":6060", nil) + // }() Run() } diff --git a/pingrpc.go b/pingrpc.go new file mode 100644 index 0000000..85f0393 --- /dev/null +++ b/pingrpc.go @@ -0,0 +1 @@ +package main \ No newline at end of file diff --git a/router.go b/router.go index 6a490ee..deb9059 100644 --- a/router.go +++ b/router.go @@ -19,6 +19,8 @@ var runmode = setting.Conf.Modes[setting.Conf.RunMode] func init() { if setting.Conf.RunMode == setting.PROD { gin.SetMode(gin.ReleaseMode) + // set log print level + logd.SetLevel(logd.Lerror) } router = gin.Default() store := sessions.NewCookieStore([]byte("eiblog321")) @@ -49,7 +51,9 @@ func init() { router.GET("/series.html", HandleSeriesPage) router.GET("/archives.html", HandleArchivesPage) router.GET("/search.html", HandleSearchPage) + router.GET("/beacon.html", HandleBeacon) router.GET("/data/comment", HandleComments) + router.GET("/rss.html", HandleFeed) router.GET("/feed", HandleFeed) router.GET("/opensearch.xml", HandleOpenSearch) router.GET("/sitemap.xml", HandleSitemap) diff --git a/setting/setting.go b/setting/setting.go index 8141f9b..777d509 100644 --- a/setting/setting.go +++ b/setting/setting.go @@ -81,7 +81,7 @@ func init() { data, err = ioutil.ReadFile(path.Join(dir, "blackip.yml")) checkError(err) err = yaml.Unmarshal(data, BlackIP) - chekError(err) + checkError(err) } func checkError(err error) { diff --git a/static/BingSiteAuth.xml b/static/BingSiteAuth.xml new file mode 100644 index 0000000..e69de29 diff --git a/static/blog.css b/static/blog.css deleted file mode 100644 index b3d9fde..0000000 --- a/static/blog.css +++ /dev/null @@ -1 +0,0 @@ -*{margin:0;padding:0}html,body{height:100%}body{background:#ddd;color:#666;font-size:14px;font-family:"-apple-system","Open Sans","HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,sans-serif}::selection,::-moz-selection,::-webkit-selection{background-color:#2479CC;color:#eee}h1{font-size:2em}h3{font-size:1.3em}h4{font-size:1.1em}a{color:#2479CC;text-decoration:none}article{border-bottom:1px solid #ddd;border-top:1px solid #fff;padding:30px 0;position:relative}.container{max-width:1600px;min-height:100%;position:relative}.left-col{background-color:#007b8b;background-image:url(//st.deepzz.com/static/img/bg04.jpg);background-size:cover;height:100%;position:fixed;width:270px}.mid-col{background:#fff;left:0;margin-left:270px;min-height:100%;position:absolute;right:0}article .meta{color:#555;float:right;font-size:.9em;line-height:2;position:relative;text-align:right;width:auto}article .meta a{color:#999}article h1.title{color:#333;font-size:2em;font-weight:300;line-height:35px;margin-bottom:25px}article h1.title a{color:#333;transition:color .3s}.mid-col .mid-col-container{padding:0 70px 0 40px}article .meta .date,article .meta .comment,article .meta .tags{position:relative}article h1.title a:hover{color:#2479CC}#header{border-bottom:none;height:auto;line-height:30px;margin-left:50px;padding:30px 0;width:100%}#main-nav{margin-left:0}#main-nav,#sub-nav{float:none;margin-top:15px}#sub-nav{position:relative}#content{margin:0 auto;width:100%}#header a{color:#efefef;text-shadow:0 1px #666;transition:color .3s}#header h1{float:none;font-weight:300;font-size:30px}#main-nav ul li{display:block;margin-left:0;position:relative}#header .subtitle{color:#ccc}#sub-nav .social{margin-bottom:10px}#header a:hover{color:#ccc}#header .profilepic a{background-image:url(//st.deepzz.com/static/img/deepzz.jpg);background-size:160px 160px;border-radius:50%;display:block;height:160px;margin:15px 0 20px -10px;width:160px}#sub-nav .social a{background-size:20px 20px;background-position:center center;background-repeat:no-repeat;border-radius:50%;display:inline-block;height:28px;margin:0 6px 15px;opacity:.75;text-indent:-9999px;transition:opacity .3s;vertical-align:middle;width:28px}#sub-nav .social a:hover{opacity:1}#sub-nav .social a:first-of-type{margin-left:0}#sub-nav .social a:last-of-type{margin-right:0}#sub-nav .social a.twitter{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAABOklEQVR4Ae3QM4DXYQCH8W+2m7Jt15Ztc8u29myba1O2NbXlmrJ11nP8+31/GO+uz/psj7z6jzYsZBPL6KogylBM3tCDS/wDkrjNIOWgC4MorgC2MlgWLCXSesZzCWinAEoA0FAG9MOsE1VorFw0AiCd/orBF2Klc4HT3KaDctGQgF2RY+iETTzlFUAx/hDwlfmhxFjMrigS6wmXwGnG0kCiO2aTFI17xPrES8zmKhzt2MRo3uPdGIWjOgDxeNdOkbiCH/EUVyTq48cZxWIQ3g2TCTXZwT/c/ZAJpbnOOeJwN01mrMaLZ7JjO+5qywljeMRHErEZL3cM4Cdmy+SGFhzCZobMqM5E1rCM/TzB5gXdZEMZ+vMYu7cslDuqMZcrfCUkleccoL+8ozHjWcsujnGIDcyjF2VV8GUCCH5vOpRoTxYAAAAASUVORK5CYII=");background-color:#55cff8;border:1px solid #55CFF8}#sub-nav .social a.search{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAB6klEQVR4Ac3RM4AdURSA4RPbto06tm3btm3b7GLbttOsjWdrPG9OdFejRZWv/a8vqDM2s46nNot7vSusA5KrQfYk13CvYt6IXvwtiIKBuuWYnJAXsia+hPcEqhBtrsVZ2bu96EFN3LufpUGPfwCivoDNVQG00I0wHfqVY4GtG93G3Ne9mY/CNLGgRYxFgjdYOkMG9tkSptbDoMY3JW2PpCKgYGuLqWy1QYk3/YsSx5UFVdxAJPxnQc7eEgl6HmjiXpAv9cTlliXnWvwnaCkMmhxDkTA0liX2PPnpH6AjujIStsGyFHzwL/hugQ5P/qCHXHSGLIl3/wXqLuhwFsQAecYpskSfJX8cDTri6iBh7C1LrnmpqZLOCeYgkVBTlpJqIcGdAU1iHDlnkkqkPyHB9wBVuB8J5zqVbG+FhIiGrqDg24gprP5CoIa/hancuxNKQCpDk8BdTOWcBuqYIpIXUwWpwBXHButSzw76OWZARX1sAOrYWpIdsyDIfq8D6gylqFc6E3kkJOp7I9DiGMeFoQL9JLkeVQVpTMF/bwLaTB08O9inQqgQzf6kb7pWmpqTr6yNPiQk7nNjyD6+NlJIiKKnGWQfVZO3IyG9h5z4VEFwkTP8gJz5UoWNQhQDTBvIqeS2zA77SPgv/AJ8KLqSzEcuZAAAAABJRU5ErkJggg==");background-color:#afb6ca;border:1px solid #afb6ca}#sub-nav .social a.rss{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAABd0lEQVR4Ae3UA+zXQRiA8Tfbtm3briHbtm03ZLuGbNsas227hvik27v7ffH33Gd+hvNJhCEbc5lCRyqTXMKCPnzlHRfYyhgqEUdCi3PYPrOeehIaHMTtLv0kpDiPt3s0lpCgFff5hLetxJeQICaZacBMbuL0mlISGpRgOU7NJXRIyyICdZDQohQ3sDUTP5RkNXPpRj5xYC22QuKNMxhcY3TgdWYKis9EFy8cxvaNMWJhBoqdwVxldZncotiKooq4MQov1UTxROsL8UI6qjDBNZNK1jajWos/anEBW3ox2KjtifhzbdptrSncM/PFUFCDta7WtkLcyEJj6ojBAjB+Ete1D5+IJoEYrj9ADlPugNFPDF5qKyc2qoF6RNS/rbKWS2KwWNtAsbEbW01TH2jJZkozLSvFxklsTV2voJ0pRbQcFRs9sCXRO2EwzZTUWm5KIPZi0ERbdm1rTImu5as40YFFTKd4QBvIcpazgFxamv0ty2ggf/33CwQ70ADWDdQbAAAAAElFTkSuQmCC");background-color:#ef7522;border:1px solid #ef7522}#sub-nav .social a.twitter:hover{border:1px solid #24c1f6}#sub-nav .social a.search:hover{border:1px solid #909ab6}#sub-nav .social a.rss:hover{border:1px solid #cf5d0f}article input.runcode,article button{-webkit-appearance:none;background:#12b0e6;border:none;border-radius:0;box-shadow:inset 0 -5px 20px rgba(0,0,0,.1);color:#fff;cursor:pointer;font-size:14px;line-height:1;margin-top:10px;padding:0.625em .5em}article button{margin-top:0}article input.runcode:hover,article input.runcode:focus,article input.runcode:active,article button:hover,article button:focus,article button:active{background:#f6ad08}article strong{font-weight:700}article em{font-style:italic}article blockquote{background-color:#f8f8f8;border-left:5px solid #2479CC;margin-top:10px;overflow:hidden;padding:15px 20px}article code{background-color:#f2f2f2;border-radius:5px;font-family:Consolas,Monaco,'Andale Mono',monospace;font-size:80%;margin:0 2px;padding:4px 5px;vertical-align:middle}article pre{background-color:#f8f8f8;border-left:5px solid #ccc;color:#5d6a6a;font-size:14px;line-height:1.6;overflow:hidden;padding:0.6em;position:relative;white-space:pre-wrap;word-break:break-all;word-wrap:break-word}article img{border:1px solid #ccc;display:block;margin:10px 0 5px;max-width:100%;padding:0}article table{border:0;border-collapse:collapse;border-spacing:0}article pre code{background-color:transparent;border-radius:0 0 0 0;border:0;display:block;font-size:100%;margin:0;padding:0;position:relative}article table th,article table td{border:0}article table th{border-bottom:2px solid #848484;padding:6px 20px;text-align:left}article table td{border-bottom:1px solid #d0d0d0;padding:6px 20px}article .copyright-info{font-size:14px}article .expire-tips{background-color:#ffffc0;border:1px solid #e2e2e2;border-left:5px solid #fff000;color:#333;font-size:15px;padding:5px 10px}article .post-info{font-size:14px}article .entry-content{color:#444;font-size:16px;font-family:Arial,'Hiragino Sans GB',冬青黑,'Microsoft YaHei',微软雅黑,SimSun,宋体,Helvetica,Tahoma,'Arial sans-serif';-webkit-font-smoothing:antialiased;line-height:1.8;word-wrap:break-word}article img.loaded{height:auto!important}article .entry-content p,article .entry-content blockquote,article .entry-content ul,article .entry-content ol,article .entry-content dl,article .entry-content table,article .entry-content iframe,article .entry-content h1,article .entry-content h2,article .entry-content h3,article .entry-content h4,article .entry-content h5,article .entry-content h6,article .entry-content p,article .entry-content pre{margin-top:16px}article pre b.name{color:#eee;font-family:"Consolas","Liberation Mono",Courier,monospace;font-size:60px;line-height:1;pointer-events:none;position:absolute;right:10px;top:10px}article .entry-content .date{color:#999;font-size:14px}article .entry-content a:hover{text-decoration:underline}article .entry-content ul ul,article .entry-content ul ol,article .entry-content ul dl,article .entry-content ol ul,article .entry-content ol ol,article .entry-content ol dl,article .entry-content dl ul,article .entry-content dl ol,article .entry-content dl dl,article .entry-content blockquote > p:first-of-type{margin-top:0}.page-navi{border-top:1px solid #fff;border-bottom:1px solid #ddd;line-height:20px;overflow:hidden;padding:20px 0;position:relative;width:100%}article.post-search{padding-bottom:0}article .entry-content ul,article .entry-content ol,article .entry-content dl{margin-left:25px}.page-navi .prev{float:left}.page-navi .next{float:right}.page-navi .center{margin:auto;text-align:center;width:80px}#comments{border-top:1px solid #fff;border-bottom:1px solid #ddd;min-height:350px;padding:20px 0}#switch_thread_mode{font-size:14px;font-weight:400;margin-left:8px}#disqus_thread,#simple_thread{line-height:1.6}#footer{border-top:1px solid #fff;font-size:.9em;line-height:1.8;padding:15px 70px 15px 40px;text-align:center;width:auto}#searchResult{min-height:350px}#toc-container,#toc{float:right}#toc{border:1px solid #e2e2e2;font-size:14px;margin:0 0 15px 20px;max-width:260px;min-width:120px;padding:6px}#search form{position:relative}#toc strong{border-bottom:1px solid #e2e2e2;display:block}#toc p{margin:0;padding:0 4px}#toc ul{margin:.5em .5em .5em 1.5em}#toc ul ul{margin-top:0;margin-bottom:0}#footer .beian{color:#666}#search .wrapper{margin-right:72px}#search .submit{-webkit-appearance:none;background-color:#e7e7e7;border:1px solid #bbb;border-left:0;border-radius:0;color:#222;display:block;font-size:16px;height:40px;outline:0;position:absolute;right:0;top:0;width:72px}#searchResult .info{border-bottom:1px solid #ddd;color:#676767;font-size:13px;padding:15px 0}#searchResult .no-result{background-color:#fff4c2;border:1px solid #fc3;font-size:13px;margin:15px 0;padding:5px}#searchResult .loading,#searchResult .hot-words{margin-top:20px}#searchResult .item{border-bottom:1px solid #ddd;padding:10px 0 20px}#comments h1.title{font-size:25px;font-weight:300;line-height:35px;margin-bottom:10px}#search .wrapper input{-webkit-appearance:none;border:1px solid #bbb;border-radius:0;box-sizing:border-box;display:block;font-size:16px;height:40px;outline:0;padding:4px 6px;width:100%}#searchResult .hot-words a{margin-right:20px}#searchResult .item:last-of-type{border-bottom:0}#searchResult .item .title{margin:5px 0}#searchResult .item .desc{font-size:14px;overflow:hidden}#searchResult .item .img{border:1px solid #ccc;float:left;height:81px;margin:4px 8px 0 0;width:108px}#searchResult .item .summary{-webkit-box-orient:vertical;display:block;display:-webkit-box;-webkit-line-clamp:4;line-height:22px;max-height:88px;text-overflow:ellipsis}#searchResult .item .title a{font-size:17px}#searchResult .item .img img{border:0;margin:0;width:100%}#searchResult .item .title b,#searchResult .item .desc b{color:#C00;font-weight:400}#searchResult .item .title .type{background-color:#eee;border-radius:3px;color:#888;display:inline-block;font-size:12px;margin-right:6px;padding:0 4px;position:relative;top:-1px}.hljs-comment,.diff .hljs-header,.hljs-doctype,.hljs-pi,.lisp .hljs-string,.hljs-javadoc{color:#999}.hljs-keyword,.hljs-winutils,.method,.hljs-addition,.css .hljs-tag,.hljs-request,.hljs-status,.nginx .hljs-title{color:#859900}.hljs-number,.hljs-command,.hljs-string,.hljs-tag .hljs-value,.hljs-rule .hljs-value,.hljs-phpdoc,.hljs-dartdoc,.tex .hljs-formula,.hljs-regexp,.hljs-hexcolor,.hljs-link_url{color:#2aa198}.hljs-title,.hljs-localvars,.hljs-chunk,.hljs-decorator,.hljs-built_in,.hljs-identifier,.vhdl .hljs-literal,.hljs-id,.css .hljs-function,.hljs-name{color:#268bd2}.hljs-attribute,.hljs-variable,.lisp .hljs-body,.smalltalk .hljs-number,.hljs-constant,.hljs-class .hljs-title,.hljs-parent,.hljs-type,.hljs-link_reference{color:#b58900}.hljs-preprocessor,.hljs-preprocessor .hljs-keyword,.hljs-pragma,.hljs-shebang,.hljs-symbol,.hljs-symbol .hljs-string,.diff .hljs-change,.hljs-special,.hljs-attr_selector,.hljs-subst,.hljs-cdata,.css .hljs-pseudo,.hljs-header{color:#cb4b16}.hljs-deletion,.hljs-important{color:#dc322f}.hljs-link_label{color:#6c71c4}.goog-te-gadget-simple{background-color:rgba(0,0,0,.6)!important;border:none!important;border-radius:0 6px 0 0}.goog-te-gadget img{opacity:.8}.tex .hljs-formula{background:#eee8d5}.goog-te-gadget-simple .goog-te-menu-value{color:#ccc!important}#google_translate_element{bottom:-1px;left:0;margin:0;position:fixed}@media screen and (max-width:1024px){article{padding-bottom:15px}.left-col{width:210px}.mid-col{margin-left:210px}.mid-col .mid-col-container{padding:0 20px}#header{margin-left:30px}#footer{padding:15px 20px}article h1.title,article .entry-content{margin-left:0}}@media screen and (max-width:640px){#header{margin-left:0;padding:20px 0;text-align:center}#main-nav{margin-top:10px}#main-nav ul li{display:inline;margin:0 10px;text-align:center}#header .profilepic a{background-image:url(//st.deepzz.com/static/img/deepzz_small.jpg);background-size:100% 100%;height:56px;left:12px;margin:0;position:absolute;top:12px;width:56px}#sub-nav .social,#sub-nav .social a{margin-bottom:0}article{padding:15px 0}.left-col{background-image:none;position:relative;width:100%}.mid-col{float:none;margin-left:0;width:100%}article .meta{margin-top:15px;position:static;width:auto}.mid-col .mid-col-container{padding:0 10px}.mid-col article .meta{float:none;overflow:hidden}article .meta .date,article .meta .comment,article .meta .tags{display:inline;margin-right:5px;padding-left:0}article .meta .date{margin-right:30px}#footer{padding:15px 10px}#toc{margin:0}#toc,#toc-container{float:none}#sub-nav .social a{opacity:1}}#simple_thread ol,#simple_thread ul{list-style:none;list-style-type:none}#simple_thread > .thread{color:#2a2e2e;font-family:"Helvetica Neue",arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#simple_thread .avatar{float:left}#simple_thread .publisher-anchor-color a{color:#2479cc!important}#simple_thread .clearfix:after,#simple_thread .clearfix:before{clear:both;content:"";display:table;line-height:0}#simple_thread .active .publisher-nav-color::after{background-color:#2479cc!important}#simple_thread .avatar .user,#simple_thread .avatar img{border-radius:3px;display:block}#simple_thread .nav{border-bottom:2px solid #e7e9ee;margin:0 0 20px;position:relative}#simple_thread .tab-conversation{float:left}#simple_thread .btn{background:#778289;background:rgba(29,47,58,.6);border:none;border-radius:3px;color:#fff;display:inline-block;font-weight:500;line-height:1.1;padding:10px 16px;text-shadow:none;transition:background .2s}#simple_thread .post-content{margin-bottom:24px;position:relative;transition:all .2s ease-in-out}#simple_thread .post-body{overflow:hidden}#simple_thread .post-header{font-size:13px;line-height:1;margin-bottom:3px;padding-right:46px}#simple_thread .avatar img{height:48px;width:48px}#simple_thread .nav-tab > a{color:#7f919e;display:block;font-weight:700;line-height:1;margin:0;padding:0;position:relative;transition:all .2s ease-in-out}#simple_thread .tab-conversation > a{font-size:15px;margin-right:15px;padding:12px 0;text-transform:capitalize}#simple_thread .post-body spoiler{background:#7f919e;color:transparent;display:inline;padding:0 .5em}#simple_thread .post-header a{color:#7f919e;line-height:1}#simple_thread .avatar .user{background:#dbdfe4;padding:0;position:relative;z-index:100}#simple_thread .post .avatar{margin-right:12px}#simple_thread .btn:hover{background:#606d75;background:rgba(29,47,58,.7);color:#fff}#simple_thread .btn.active,#simple_thread .btn:active{background:#2e9fff;transition:none}#simple_thread .btn.busy{background:#ebeef2;color:#999;text-shadow:none}#simple_thread .post-content .indicator{border-radius:3px;height:48px;left:0;position:absolute;top:0;width:5px}#simple_thread .post-content.target{padding-left:12px}#simple_thread .post-header .author{color:#656c7a;font-weight:700}#simple_thread .post-header .time-ago{color:#7f919e;font-weight:500;font-size:12px}#simple_thread .tab-conversation.active > a{color:#2a2e2e!important}#simple_thread .post-body a[data-dsq-mention]{font-weight:700}#simple_thread .post-body spoiler:hover,#simple_thread .post-body spoiler:focus{background:#e7e9ee;color:inherit}#simple_thread .btn.busy:active,#simple_thread .btn.busy:hover{background:#ebeef2;cursor:not-allowed;text-shadow:none}#simple_thread .post-content.target > .avatar{left:12px}#simple_thread .post-content.target .indicator{background:#ffc62e}#simple_thread .tab-conversation.active > a:after{background:#2e9fff;bottom:-2px;content:" ";display:block;height:2px;left:0;position:absolute;right:0}#simple_thread .post-body a[data-dsq-mention]:before{content:'@'}#simple_thread .post-header .author,#simple_thread .post-body-inner p{font-family:"Helvetica Neue","PingFangSC-Regular",arial,sans-serif}#simple_thread .post-meta{display:inline-block}#simple_thread .load-more{margin:0 0 24px}#simple_thread .post-body-inner p{font-size:15px;line-height:21px;margin:0 0 15px;word-wrap:break-word}#simple_thread .post-meta .bullet{color:#c2c6cc;line-height:1.4;padding:0}#simple_thread .children .post{margin-left:60px}#simple_thread .load-more .btn{display:block;font-size:13px;font-weight:400;padding:11px 14px;text-align:center}#simple_thread.mobile .post-header{font-size:14px;line-height:18px;margin-bottom:4px;padding-right:0;position:relative;top:-4px}#simple_thread.mobile .post-body-inner{clear:left;overflow:visible;position:relative;top:-4px}#simple_thread.mobile .post-body{display:block;overflow:visible}#simple_thread .post-body-inner p:last-child{margin:0}#simple_thread.mobile .avatar img{height:30px;width:30px}#simple_thread .children .children .post{margin-left:48px}#simple_thread.mobile .post-header .post-byline{display:block;overflow:hidden;padding-right:15px;text-overflow:ellipsis;white-space:nowrap}#simple_thread.mobile .post-header .author{font-size:15px;line-height:18px}#simple_thread.mobile .post-meta .bullet,#simple_thread.mobile .tab-conversation.active > a > span{display:none}#simple_thread.mobile .post-list .post .post-content{margin:0;padding:0;margin-bottom:16px;transition:none}#simple_thread.mobile .post-list .post .children{border-left:2px solid #e7e9ee;padding-left:17px}#simple_thread .children .post .avatar .user img{width:36px}#simple_thread .children .post .avatar .user img,#simple_thread .children .post .indicator{height:36px}#simple_thread .children .children .children .children .post{margin-left:0}#simple_thread.mobile .post-list .post .post-content .indicator{height:30px}#simple_thread.mobile .post-list .post .children .post,#simple_thread.mobile .post-list .post .children .post .post-content .post-body{margin-left:0}#simple_thread.mobile .post-list .post .post-content .avatar img{height:30px;width:30px}#simple_thread.mobile .post-list .post .children li:only-child{margin-bottom:20px}#simple_thread .children .children .children .children .post .post-body{margin-left:48px}#simple_thread .children .children .children .children .post .indicator{left:0}#simple_thread.mobile .post-list .post .post-content.target .avatar{margin-left:8px}#simple_thread.mobile .post-list .post .children .children .children{border-left:none;padding-left:0} \ No newline at end of file diff --git a/static/crossdoamin.xml b/static/crossdoamin.xml new file mode 100644 index 0000000..527f133 --- /dev/null +++ b/static/crossdoamin.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..471939273fb3c5a15d459b73a0b157191fc944c7 GIT binary patch literal 16958 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 literal 0 HcmV?d00001 diff --git a/conf/robots.txt b/static/robots.txt similarity index 100% rename from conf/robots.txt rename to static/robots.txt diff --git a/views/admin/login.html b/views/admin/login.html index 77cd519..10ea841 100644 --- a/views/admin/login.html +++ b/views/admin/login.html @@ -5,7 +5,7 @@ - Login | {{.BTitle}} + 登录 | {{.BTitle}} diff --git a/views/admin/post.html b/views/admin/post.html index e8cbaa7..7fc514b 100644 --- a/views/admin/post.html +++ b/views/admin/post.html @@ -96,8 +96,8 @@ }); })(); - - + + - - - + + + - - + + {{if .Version}}{{end}}{{if .Version}}{{else}}{{end}}
{{if .HomePage}} {{template "home" .}} {{else if .ArticlePage}} {{template "article" .}}{{else if .SeriesPage}}{{template "series" .}}{{else if .ArchivesPage}}{{template "archives" .}} {{else if .BlogrollPage}}{{template "blogroll" .}}{{else if .AboutPage}}{{template "about" .}}{{else if .SearchPage}} {{template "search" .}}{{else if .NotFoundPage}}{{template "notfound"}} {{end}}
{{if .Version}}{{else}}{{end}} {{if .Version}}{{else}}{{end}}{{if .Version}}{{else}}{{end}} \ No newline at end of file +{{.Title}}{{if .Version}}{{end}}{{if .Version}}{{else}}{{end}}
{{if .HomePage}} {{template "home" .}} {{else if .ArticlePage}} {{template "article" .}}{{else if .SeriesPage}}{{template "series" .}}{{else if .ArchivesPage}}{{template "archives" .}} {{else if .BlogrollPage}}{{template "blogroll" .}}{{else if .AboutPage}}{{template "about" .}}{{else if .SearchPage}} {{template "search" .}}{{else if .NotFoundPage}}{{template "notfound"}} {{end}}
{{if .Version}}{{else}}{{end}}{{if .Version}}{{else}}{{end}}{{if .Version}}{{else}}{{end}}{{if .Version}}{{else}}{{end}} \ No newline at end of file diff --git a/views/st_ana_js.js b/views/st_ana_js.js index 658d6c9..86992b2 100644 --- a/views/st_ana_js.js +++ b/views/st_ana_js.js @@ -1,23 +1,8 @@ {{define "ana_js"}} -(function(i, s, o, g, r, a, m) { - i['GoogleAnalyticsObject'] = r; - i[r] = i[r] || function() { - (i[r].q = i[r].q || []).push(arguments) - }, i[r].l = 1 * new Date(); - a = s.createElement(o), - m = s.getElementsByTagName(o)[0]; - a.async = 1; - a.src = g; - m.parentNode.insertBefore(a, m) -})(window, document, 'script', 'https://o7msui8ho.qnssl.com/js/analytics.js', 'ga'); - -ga('create', 'UA-77251712-1', 'auto'); -ga('send', 'pageview'); ! function(e, n, o, t) { var a = e.screen, r = encodeURIComponent, - i = ["tid=UA-5422922-2", "dl=" + r(n.URL), "dt=" + r(n.title), "dr=" + r(n.referrer), "dp=" + r(t.pathname), "ul=" + (o.language || o.browserLanguage).toLowerCase(), "sd=" + a.colorDepth + "-bit", "sr=" + a.width + "x" + a.height, "_=" + +new Date], + i = ["tid=UA-77251712-1", "dl=" + r(n.URL), "dt=" + r(n.title), "dr=" + r(n.referrer), "dp=" + r(t.pathname), "ul=" + (o.language || o.browserLanguage).toLowerCase(), "sd=" + a.colorDepth + "-bit", "sr=" + a.width + "x" + a.height, "_=" + +new Date], c = "?" + i.join("&"); - e.__beacon_img = new Image, e.__beacon_img.src = "/beacon.html" + c -}(window, document, navigator, location); + e.__beacon_img = new Image, e.__beacon_img.src = "/beacon.html" + c }(window, document, navigator, location); {{end}} diff --git a/views/st_blog_css.css b/views/st_blog_css.css index 2451b3a..eea8495 100644 --- a/views/st_blog_css.css +++ b/views/st_blog_css.css @@ -1,3 +1,3 @@ {{define "blog_css"}} -*{margin:0;padding:0}html,body{height:100%}body{background:#ddd;color:#666;font-size:14px;font-family:"-apple-system","Open Sans","HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,sans-serif}::selection,::-moz-selection,::-webkit-selection{background-color:#2479cc;color:#eee}h1{font-size:2em}h3{font-size:1.3em}h4{font-size:1.1em}a{color:#2479cc;text-decoration:none}article{border-bottom:1px solid #ddd;border-top:1px solid #fff;padding:30px 0;position:relative}.container{max-width:1600px;min-height:100%;position:relative}.left-col{background-color:#50514c;background-image:url(//st.deepzz.com/static/img/bg04.jpg);background-size:cover;height:100%;position:fixed;width:270px}.mid-col{background:#fff;left:0;margin-left:270px;min-height:100%;position:absolute;right:0}article .meta{color:#555;float:right;font-size:.9em;line-height:2;position:relative;text-align:right;width:auto}article .meta a{color:#999}article h1.title{color:#333;font-size:2em;font-weight:300;line-height:35px;margin-bottom:25px}article h1.title a{color:#333;transition:color .3s}.mid-col .mid-col-container{padding:0 70px 0 40px}article .meta .date,article .meta .comment,article .meta .tags{position:relative}article .meta .date-modified{display:none}article h1.title a:hover{color:#2479cc}#header{border-bottom:0;height:auto;line-height:30px;margin-left:50px;padding:30px 0;width:100%}#main-nav{margin-left:0}#main-nav,#sub-nav{float:none;margin-top:15px}#sub-nav{position:relative}#content{margin:0 auto;width:100%}#header a{color:#efefef;text-shadow:0 1px #666;transition:color .3s}#header h1{float:none;font-weight:300;font-size:30px}#main-nav ul li{display:block;margin-left:0;position:relative}#header .subtitle{color:#ccc}#sub-nav .social{margin-bottom:10px}#header a:hover{color:#ccc}#header .profilepic a{background-image:url(//st.deepzz.com/static/img/deepzz.jpg);background-size:160px 160px;border-radius:50%;display:block;height:160px;margin:15px 0 20px -10px;width:160px}#sub-nav .social a{background-size:20px 20px;background-position:center center;background-repeat:no-repeat;border-radius:50%;display:inline-block;height:28px;margin:0 6px 15px;opacity:.75;text-indent:-9999px;transition:opacity .3s;vertical-align:middle;width:28px}#sub-nav .social a:hover{opacity:1}#sub-nav .social a:first-of-type{margin-left:0}#sub-nav .social a:last-of-type{margin-right:0}#sub-nav .social a.twitter{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAABOklEQVR4Ae3QM4DXYQCH8W+2m7Jt15Ztc8u29myba1O2NbXlmrJ11nP8+31/GO+uz/psj7z6jzYsZBPL6KogylBM3tCDS/wDkrjNIOWgC4MorgC2MlgWLCXSesZzCWinAEoA0FAG9MOsE1VorFw0AiCd/orBF2Klc4HT3KaDctGQgF2RY+iETTzlFUAx/hDwlfmhxFjMrigS6wmXwGnG0kCiO2aTFI17xPrES8zmKhzt2MRo3uPdGIWjOgDxeNdOkbiCH/EUVyTq48cZxWIQ3g2TCTXZwT/c/ZAJpbnOOeJwN01mrMaLZ7JjO+5qywljeMRHErEZL3cM4Cdmy+SGFhzCZobMqM5E1rCM/TzB5gXdZEMZ+vMYu7cslDuqMZcrfCUkleccoL+8ozHjWcsujnGIDcyjF2VV8GUCCH5vOpRoTxYAAAAASUVORK5CYII=");background-color:#55cff8;border:1px solid #55cff8}#sub-nav .social a.search{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAB6klEQVR4Ac3RM4AdURSA4RPbto06tm3btm3b7GLbttOsjWdrPG9OdFejRZWv/a8vqDM2s46nNot7vSusA5KrQfYk13CvYt6IXvwtiIKBuuWYnJAXsia+hPcEqhBtrsVZ2bu96EFN3LufpUGPfwCivoDNVQG00I0wHfqVY4GtG93G3Ne9mY/CNLGgRYxFgjdYOkMG9tkSptbDoMY3JW2PpCKgYGuLqWy1QYk3/YsSx5UFVdxAJPxnQc7eEgl6HmjiXpAv9cTlliXnWvwnaCkMmhxDkTA0liX2PPnpH6AjujIStsGyFHzwL/hugQ5P/qCHXHSGLIl3/wXqLuhwFsQAecYpskSfJX8cDTri6iBh7C1LrnmpqZLOCeYgkVBTlpJqIcGdAU1iHDlnkkqkPyHB9wBVuB8J5zqVbG+FhIiGrqDg24gprP5CoIa/hancuxNKQCpDk8BdTOWcBuqYIpIXUwWpwBXHButSzw76OWZARX1sAOrYWpIdsyDIfq8D6gylqFc6E3kkJOp7I9DiGMeFoQL9JLkeVQVpTMF/bwLaTB08O9inQqgQzf6kb7pWmpqTr6yNPiQk7nNjyD6+NlJIiKKnGWQfVZO3IyG9h5z4VEFwkTP8gJz5UoWNQhQDTBvIqeS2zA77SPgv/AJ8KLqSzEcuZAAAAABJRU5ErkJggg==");background-color:#afb6ca;border:1px solid #afb6ca}#sub-nav .social a.rss{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAABd0lEQVR4Ae3UA+zXQRiA8Tfbtm3briHbtm03ZLuGbNsas227hvik27v7ffH33Gd+hvNJhCEbc5lCRyqTXMKCPnzlHRfYyhgqEUdCi3PYPrOeehIaHMTtLv0kpDiPt3s0lpCgFff5hLetxJeQICaZacBMbuL0mlISGpRgOU7NJXRIyyICdZDQohQ3sDUTP5RkNXPpRj5xYC22QuKNMxhcY3TgdWYKis9EFy8cxvaNMWJhBoqdwVxldZncotiKooq4MQov1UTxROsL8UI6qjDBNZNK1jajWos/anEBW3ox2KjtifhzbdptrSncM/PFUFCDta7WtkLcyEJj6ojBAjB+Ete1D5+IJoEYrj9ADlPugNFPDF5qKyc2qoF6RNS/rbKWS2KwWNtAsbEbW01TH2jJZkozLSvFxklsTV2voJ0pRbQcFRs9sCXRO2EwzZTUWm5KIPZi0ERbdm1rTImu5as40YFFTKd4QBvIcpazgFxamv0ty2ggf/33CwQ70ADWDdQbAAAAAElFTkSuQmCC");background-color:#ef7522;border:1px solid #ef7522}#sub-nav .social a.twitter:hover{border:1px solid #24c1f6}#sub-nav .social a.search:hover{border:1px solid #909ab6}#sub-nav .social a.rss:hover{border:1px solid #cf5d0f}article input.runcode,article button{-webkit-appearance:none;background:#12b0e6;border:0;border-radius:0;box-shadow:inset 0 -5px 20px rgba(0,0,0,.1);color:#fff;cursor:pointer;font-size:14px;line-height:1;margin-top:10px;padding:.625em .5em}article button{margin-top:0}article input.runcode:hover,article input.runcode:focus,article input.runcode:active,article button:hover,article button:focus,article button:active{background:#f6ad08}article strong{font-weight:700}article em{font-style:italic}article blockquote{background-color:#f8f8f8;border-left:5px solid #2479cc;margin-top:10px;overflow:hidden;padding:15px 20px}article code{background-color:#f2f2f2;border-radius:5px;font-family:Consolas,Monaco,'Andale Mono',monospace;font-size:80%;margin:0 2px;padding:4px 5px;vertical-align:middle}article pre{background-color:#f8f8f8;border-left:5px solid #ccc;color:#5d6a6a;font-size:14px;line-height:1.6;overflow:hidden;padding:.6em;position:relative;white-space:pre-wrap;word-break:break-word;word-wrap:break-word}article img{border:1px solid #ccc;display:block;margin:10px 0 5px;max-width:100%;padding:0}article table{border:0;border-collapse:collapse;border-spacing:0}article pre code{background-color:transparent;border-radius:0;border:0;display:block;font-size:100%;margin:0;padding:0;position:relative}article table th,article table td{border:0}article table th{border-bottom:2px solid #848484;padding:6px 20px;text-align:left}article table td{border-bottom:1px solid #d0d0d0;padding:6px 20px}article .copyright-info{font-size:14px}article .expire-tips{background-color:#ffffc0;border:1px solid #e2e2e2;border-left:5px solid #fff000;color:#333;font-size:15px;padding:5px 10px}article .post-info{font-size:14px}article .entry-content{color:#444;font-size:16px;font-family:Arial,'Hiragino Sans GB',冬青黑,'Microsoft YaHei',微软雅黑,SimSun,宋体,Helvetica,Tahoma,'Arial sans-serif';-webkit-font-smoothing:antialiased;line-height:1.8;word-wrap:break-word}article img.loaded{height:auto!important}article .entry-content p,article .entry-content blockquote,article .entry-content ul,article .entry-content ol,article .entry-content dl,article .entry-content table,article .entry-content iframe,article .entry-content h1,article .entry-content h2,article .entry-content h3,article .entry-content h4,article .entry-content h5,article .entry-content h6,article .entry-content p,article .entry-content pre{margin-top:15px}article pre b.name{color:#eee;font-family:"Consolas","Liberation Mono",Courier,monospace;font-size:60px;line-height:1;pointer-events:none;position:absolute;right:10px;top:10px}article .entry-content .date{color:#999;font-size:14px}article .entry-content a:hover{text-decoration:underline}article .entry-content ul ul,article .entry-content ul ol,article .entry-content ul dl,article .entry-content ol ul,article .entry-content ol ol,article .entry-content ol dl,article .entry-content dl ul,article .entry-content dl ol,article .entry-content dl dl,article .entry-content blockquote>p:first-of-type{margin-top:0}.page-navi{border-top:1px solid #fff;border-bottom:1px solid #ddd;line-height:20px;overflow:hidden;padding:20px 0;position:relative;width:100%}article.post-search{padding-bottom:0}article .entry-content ul,article .entry-content ol,article .entry-content dl{margin-left:25px}.page-navi .prev{float:left}.page-navi .next{float:right}.page-navi .center{margin:auto;text-align:center;width:80px}#comments{border-top:1px solid #fff;border-bottom:1px solid #ddd;min-height:350px;padding:20px 0}#switch_thread_mode{font-size:14px;font-weight:400;margin-left:8px}#disqus_thread,#simple_thread{line-height:1.6}#footer{border-top:1px solid #fff;font-size:.9em;line-height:2.2;padding:15px 70px 15px 40px;text-align:center;width:auto}#searchResult{min-height:350px}#toc-container,#toc{float:right}#toc{border:1px solid #e2e2e2;font-size:14px;margin:0 0 15px 20px;max-width:260px;min-width:120px;padding:6px}#search form{position:relative}#toc strong{border-bottom:1px solid #e2e2e2;display:block}#toc p{margin:0;padding:0 4px}#toc ul{margin:.5em .5em .5em 1.5em}#toc ul ul{margin-top:0;margin-bottom:0}#footer .beian{color:#666}#search .wrapper{margin-right:72px}#search .submit{-webkit-appearance:none;background-color:#e7e7e7;border:1px solid #bbb;border-left:0;border-radius:0;color:#222;display:block;font-size:16px;height:40px;outline:0;position:absolute;right:0;top:0;width:72px;cursor:pointer;}#searchResult .info{border-bottom:1px solid #ddd;color:#676767;font-size:13px;padding:15px 0}#searchResult .no-result{background-color:#fff4c2;border:1px solid #fc3;font-size:13px;margin:15px 0;padding:5px}#searchResult .loading,#searchResult .hot-words{margin-top:20px}#searchResult .item{border-bottom:1px solid #ddd;padding:10px 0 20px}#comments h1.title{font-size:25px;font-weight:300;line-height:35px;margin-bottom:10px}#search .wrapper input{-webkit-appearance:none;border:1px solid #bbb;border-radius:0;box-sizing:border-box;display:block;font-size:16px;height:40px;outline:0;padding:4px 6px;width:100%}#searchResult .hot-words a{margin-right:20px}#searchResult .item:last-of-type{border-bottom:0}#searchResult .item .title{margin:5px 0}#searchResult .item .desc{font-size:14px;overflow:hidden}#searchResult .item .img{border:1px solid #ccc;float:left;height:81px;margin:4px 8px 0 0;width:108px}#searchResult .item .summary{-webkit-box-orient:vertical;display:block;display:-webkit-box;-webkit-line-clamp:4;line-height:22px;max-height:88px;text-overflow:ellipsis}#searchResult .item .title a{font-size:17px}#searchResult .item .img img{border:0;margin:0;width:100%}#searchResult .item .title b,#searchResult .item .desc b{color:#C00;font-weight:400}#searchResult .item .title .type{background-color:#eee;border-radius:3px;color:#888;display:inline-block;font-size:12px;margin-right:6px;padding:0 4px;position:relative;top:-1px}.hljs-comment,.diff .hljs-header,.hljs-doctype,.hljs-pi,.lisp .hljs-string,.hljs-javadoc{color:#999}.hljs-keyword,.hljs-winutils,.method,.hljs-addition,.css .hljs-tag,.hljs-request,.hljs-status,.nginx .hljs-title{color:#859900}.hljs-number,.hljs-command,.hljs-string,.hljs-tag .hljs-value,.hljs-rule .hljs-value,.hljs-phpdoc,.hljs-dartdoc,.tex .hljs-formula,.hljs-regexp,.hljs-hexcolor,.hljs-link_url{color:#2aa198}.hljs-title,.hljs-localvars,.hljs-chunk,.hljs-decorator,.hljs-built_in,.hljs-identifier,.vhdl .hljs-literal,.hljs-id,.css .hljs-function,.hljs-name{color:#268bd2}.hljs-attribute,.hljs-variable,.lisp .hljs-body,.smalltalk .hljs-number,.hljs-constant,.hljs-class .hljs-title,.hljs-parent,.hljs-type,.hljs-link_reference{color:#b58900}.hljs-preprocessor,.hljs-preprocessor .hljs-keyword,.hljs-pragma,.hljs-shebang,.hljs-symbol,.hljs-symbol .hljs-string,.diff .hljs-change,.hljs-special,.hljs-attr_selector,.hljs-subst,.hljs-cdata,.css .hljs-pseudo,.hljs-header{color:#cb4b16}.hljs-deletion,.hljs-important{color:#dc322f}.hljs-link_label{color:#6c71c4}.goog-te-gadget-simple{background-color:rgba(0,0,0,.6)!important;border:none!important;border-radius:0 6px 0 0}.goog-te-gadget img{opacity:.8}.tex .hljs-formula{background:#eee8d5}.goog-te-gadget-simple .goog-te-menu-value{color:#ccc!important}#google_translate_element{bottom:-1px;left:0;margin:0;position:fixed}@media screen and (max-width:1024px){article{padding-bottom:15px}.left-col{width:210px}.mid-col{margin-left:210px}.mid-col .mid-col-container{padding:0 20px}#header{margin-left:30px}#footer{padding:15px 20px}article h1.title,article .entry-content{margin-left:0}}@media screen and (max-width:640px){#header{margin-left:0;padding:20px 0;text-align:center}#main-nav{margin-top:10px}#main-nav ul li{display:inline;margin:0 10px;text-align:center}#header .profilepic a{background-image:url(//st.imququ.com/static/img/blog/ququ_small.jpg);background-size:100% 100%;height:56px;left:12px;margin:0;position:absolute;top:12px;width:56px}#sub-nav .social,#sub-nav .social a{margin-bottom:0}article{padding:20px 0}.left-col{background-image:none;position:relative;width:100%}.mid-col{float:none;margin-left:0;width:100%}article .meta{margin-bottom:10px;position:static;width:auto}.mid-col .mid-col-container{padding:0 10px}.mid-col article .meta{float:none;overflow:hidden}article .meta .date,article .meta .comment,article .meta .tags{display:inline;margin-right:5px;padding-left:0}article .meta .date{margin-right:30px}#footer{padding:15px 10px}#toc{margin:0}#toc,#toc-container{float:none}#sub-nav .social a{opacity:1}}#simple_thread ol,#simple_thread ul{list-style:none;list-style-type:none}#simple_thread>.thread{color:#2a2e2e;font-family:"Helvetica Neue",arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#simple_thread .avatar{float:left}#simple_thread .publisher-anchor-color a{color:#2479cc!important}#simple_thread .clearfix:after,#simple_thread .clearfix:before{clear:both;content:"";display:table;line-height:0}#simple_thread .active .publisher-nav-color::after{background-color:#2479cc!important}#simple_thread .avatar .user,#simple_thread .avatar img{border-radius:3px;display:block}#simple_thread .nav{border-bottom:2px solid #e7e9ee;margin:0 0 20px;position:relative}#simple_thread .tab-conversation{float:left}#simple_thread .btn{background:#778289;background:rgba(29,47,58,.6);border:0;border-radius:3px;color:#fff;display:inline-block;font-weight:500;line-height:1.1;padding:10px 16px;text-shadow:none;transition:background .2s}#simple_thread .post-content{margin-bottom:24px;position:relative;transition:all .2s ease-in-out}#simple_thread .post-body{overflow:hidden}#simple_thread .post-header{font-size:13px;line-height:1;margin-bottom:3px;padding-right:46px}#simple_thread .avatar img{height:48px;width:48px}#simple_thread .nav-tab>a{color:#7f919e;display:block;font-weight:700;line-height:1;margin:0;padding:0;position:relative;transition:all .2s ease-in-out}#simple_thread .tab-conversation>a{font-size:15px;margin-right:15px;padding:12px 0;text-transform:capitalize}#simple_thread .post-body spoiler{background:#7f919e;color:transparent;display:inline;padding:0 .5em}#simple_thread .post-header a{color:#7f919e;line-height:1}#simple_thread .avatar .user{background:#dbdfe4;padding:0;position:relative;z-index:100}#simple_thread .post .avatar{margin-right:12px}#simple_thread .btn:hover{background:#606d75;background:rgba(29,47,58,.7);color:#fff}#simple_thread .btn.active,#simple_thread .btn:active{background:#2e9fff;transition:none}#simple_thread .btn.busy{background:#ebeef2;color:#999;text-shadow:none}#simple_thread .post-content .indicator{border-radius:3px;height:48px;left:0;position:absolute;top:0;width:5px}#simple_thread .post-content.target{padding-left:12px}#simple_thread .post-header .author{color:#656c7a;font-weight:700}#simple_thread .post-header .time-ago{color:#7f919e;font-weight:500;font-size:12px}#simple_thread .tab-conversation.active>a{color:#2a2e2e!important}#simple_thread .post-body a[data-dsq-mention]{font-weight:700}#simple_thread .post-body spoiler:hover,#simple_thread .post-body spoiler:focus{background:#e7e9ee;color:inherit}#simple_thread .btn.busy:active,#simple_thread .btn.busy:hover{background:#ebeef2;cursor:not-allowed;text-shadow:none}#simple_thread .post-content.target>.avatar{left:12px}#simple_thread .post-content.target .indicator{background:#ffc62e}#simple_thread .tab-conversation.active>a:after{background:#2e9fff;bottom:-2px;content:" ";display:block;height:2px;left:0;position:absolute;right:0}#simple_thread .post-body a[data-dsq-mention]:before{content:'@'}#simple_thread .post-header .author,#simple_thread .post-body-inner p{font-family:"Helvetica Neue","PingFangSC-Regular",arial,sans-serif}#simple_thread .post-meta{display:inline-block}#simple_thread .load-more{margin:0 0 24px}#simple_thread .post-body-inner p{font-size:15px;line-height:21px;margin:0 0 15px;word-wrap:break-word}#simple_thread .media a{margin-right:10px}#simple_thread .post-meta .bullet{color:#c2c6cc;line-height:1.4;padding:0}#simple_thread .children .post{margin-left:60px}#simple_thread .load-more .btn{display:block;font-size:13px;font-weight:400;padding:11px 14px;text-align:center}#simple_thread.mobile .post-header{font-size:14px;line-height:18px;margin-bottom:4px;padding-right:0;position:relative;top:-4px}#simple_thread.mobile .post-body-inner{clear:left;overflow:visible;position:relative;top:-4px}#simple_thread.mobile .post-body{display:block;overflow:visible}#simple_thread .post-body-inner p:last-child{margin:0}#simple_thread.mobile .avatar img{height:30px;width:30px}#simple_thread .children .children .post{margin-left:48px}#simple_thread.mobile .post-header .post-byline{display:block;overflow:hidden;padding-right:15px;text-overflow:ellipsis;white-space:nowrap}#simple_thread.mobile .post-header .author{font-size:15px;line-height:18px}#simple_thread.mobile .post-meta .bullet,#simple_thread.mobile .tab-conversation.active>a>span{display:none}#simple_thread.mobile .post-list .post .post-content{margin:0;padding:0;margin-bottom:16px;transition:none}#simple_thread.mobile .post-list .post .children{border-left:2px solid #e7e9ee;padding-left:17px}#simple_thread .children .post .avatar .user img{width:36px}#simple_thread .children .post .avatar .user img,#simple_thread .children .post .indicator{height:36px}#simple_thread .children .children .children .children .post{margin-left:0}#simple_thread.mobile .post-list .post .post-content .indicator{height:30px}#simple_thread.mobile .post-list .post .children .post,#simple_thread.mobile .post-list .post .children .post .post-content .post-body{margin-left:0}#simple_thread.mobile .post-list .post .post-content .avatar img{height:30px;width:30px}#simple_thread.mobile .post-list .post .children li:only-child{margin-bottom:20px}#simple_thread .children .children .children .children .post .post-body{margin-left:48px}#simple_thread .children .children .children .children .post .indicator{left:0}#simple_thread.mobile .post-list .post .post-content.target .avatar{margin-left:8px}#simple_thread.mobile .post-list .post .children .children .children{border-left:none;padding-left:0} +*{margin:0;padding:0}html,body{height:100%}body{background:#ddd;color:#666;font-size:14px;font-family:"-apple-system","Open Sans","HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,sans-serif}::selection,::-moz-selection,::-webkit-selection{background-color:#2479cc;color:#eee}h1{font-size:2em}h3{font-size:1.3em}h4{font-size:1.1em}a{color:#2479cc;text-decoration:none}article{border-bottom:1px solid #ddd;border-top:1px solid #fff;padding:30px 0;position:relative}.container{max-width:1600px;min-height:100%;position:relative}.left-col{background-color:#50514c;background-image:url(//st.deepzz.com/static/img/bg04.jpg);background-size:cover;height:100%;position:fixed;width:270px}.mid-col{background:#fff;left:0;margin-left:270px;min-height:100%;position:absolute;right:0}article .meta{color:#555;float:right;font-size:.9em;line-height:2;position:relative;text-align:right;width:auto}article .meta a{color:#999}article h1.title{color:#333;font-size:2em;font-weight:300;line-height:35px;margin-bottom:25px}article h1.title a{color:#333;transition:color .3s}.mid-col .mid-col-container{padding:0 70px 0 40px}article .meta .date,article .meta .comment,article .meta .tags{position:relative}article .meta .date-modified{display:none}article h1.title a:hover{color:#2479cc}#header{border-bottom:0;height:auto;line-height:30px;margin-left:50px;padding:30px 0;width:100%}#main-nav{margin-left:0}#main-nav,#sub-nav{float:none;margin-top:15px}#sub-nav{position:relative}#content{margin:0 auto;width:100%}#header a{color:#efefef;text-shadow:0 1px #666;transition:color .3s}#header h1{float:none;font-weight:300;font-size:30px}#main-nav ul li{display:block;margin-left:0;position:relative}#header .subtitle{color:#ccc}#sub-nav .social{margin-bottom:10px}#header a:hover{color:#ccc}#header .profilepic a{background-image:url(//st.deepzz.com/static/img/deepzz.jpg);background-size:160px 160px;border-radius:50%;display:block;height:160px;margin:15px 0 20px -10px;width:160px}#sub-nav .social a{background-size:20px 20px;background-position:center center;background-repeat:no-repeat;border-radius:50%;display:inline-block;height:28px;margin:0 6px 15px;opacity:.75;text-indent:-9999px;transition:opacity .3s;vertical-align:middle;width:28px}#sub-nav .social a:hover{opacity:1}#sub-nav .social a:first-of-type{margin-left:0}#sub-nav .social a:last-of-type{margin-right:0}#sub-nav .social a.twitter{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAABOklEQVR4Ae3QM4DXYQCH8W+2m7Jt15Ztc8u29myba1O2NbXlmrJ11nP8+31/GO+uz/psj7z6jzYsZBPL6KogylBM3tCDS/wDkrjNIOWgC4MorgC2MlgWLCXSesZzCWinAEoA0FAG9MOsE1VorFw0AiCd/orBF2Klc4HT3KaDctGQgF2RY+iETTzlFUAx/hDwlfmhxFjMrigS6wmXwGnG0kCiO2aTFI17xPrES8zmKhzt2MRo3uPdGIWjOgDxeNdOkbiCH/EUVyTq48cZxWIQ3g2TCTXZwT/c/ZAJpbnOOeJwN01mrMaLZ7JjO+5qywljeMRHErEZL3cM4Cdmy+SGFhzCZobMqM5E1rCM/TzB5gXdZEMZ+vMYu7cslDuqMZcrfCUkleccoL+8ozHjWcsujnGIDcyjF2VV8GUCCH5vOpRoTxYAAAAASUVORK5CYII=");background-color:#55cff8;border:1px solid #55cff8}#sub-nav .social a.search{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAB6klEQVR4Ac3RM4AdURSA4RPbto06tm3btm3b7GLbttOsjWdrPG9OdFejRZWv/a8vqDM2s46nNot7vSusA5KrQfYk13CvYt6IXvwtiIKBuuWYnJAXsia+hPcEqhBtrsVZ2bu96EFN3LufpUGPfwCivoDNVQG00I0wHfqVY4GtG93G3Ne9mY/CNLGgRYxFgjdYOkMG9tkSptbDoMY3JW2PpCKgYGuLqWy1QYk3/YsSx5UFVdxAJPxnQc7eEgl6HmjiXpAv9cTlliXnWvwnaCkMmhxDkTA0liX2PPnpH6AjujIStsGyFHzwL/hugQ5P/qCHXHSGLIl3/wXqLuhwFsQAecYpskSfJX8cDTri6iBh7C1LrnmpqZLOCeYgkVBTlpJqIcGdAU1iHDlnkkqkPyHB9wBVuB8J5zqVbG+FhIiGrqDg24gprP5CoIa/hancuxNKQCpDk8BdTOWcBuqYIpIXUwWpwBXHButSzw76OWZARX1sAOrYWpIdsyDIfq8D6gylqFc6E3kkJOp7I9DiGMeFoQL9JLkeVQVpTMF/bwLaTB08O9inQqgQzf6kb7pWmpqTr6yNPiQk7nNjyD6+NlJIiKKnGWQfVZO3IyG9h5z4VEFwkTP8gJz5UoWNQhQDTBvIqeS2zA77SPgv/AJ8KLqSzEcuZAAAAABJRU5ErkJggg==");background-color:#afb6ca;border:1px solid #afb6ca}#sub-nav .social a.rss{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAABd0lEQVR4Ae3UA+zXQRiA8Tfbtm3briHbtm03ZLuGbNsas227hvik27v7ffH33Gd+hvNJhCEbc5lCRyqTXMKCPnzlHRfYyhgqEUdCi3PYPrOeehIaHMTtLv0kpDiPt3s0lpCgFff5hLetxJeQICaZacBMbuL0mlISGpRgOU7NJXRIyyICdZDQohQ3sDUTP5RkNXPpRj5xYC22QuKNMxhcY3TgdWYKis9EFy8cxvaNMWJhBoqdwVxldZncotiKooq4MQov1UTxROsL8UI6qjDBNZNK1jajWos/anEBW3ox2KjtifhzbdptrSncM/PFUFCDta7WtkLcyEJj6ojBAjB+Ete1D5+IJoEYrj9ADlPugNFPDF5qKyc2qoF6RNS/rbKWS2KwWNtAsbEbW01TH2jJZkozLSvFxklsTV2voJ0pRbQcFRs9sCXRO2EwzZTUWm5KIPZi0ERbdm1rTImu5as40YFFTKd4QBvIcpazgFxamv0ty2ggf/33CwQ70ADWDdQbAAAAAElFTkSuQmCC");background-color:#ef7522;border:1px solid #ef7522}#sub-nav .social a.twitter:hover{border:1px solid #24c1f6}#sub-nav .social a.search:hover{border:1px solid #909ab6}#sub-nav .social a.rss:hover{border:1px solid #cf5d0f}article input.runcode,article button{-webkit-appearance:none;background:#12b0e6;border:0;border-radius:0;box-shadow:inset 0 -5px 20px rgba(0,0,0,.1);color:#fff;cursor:pointer;font-size:14px;line-height:1;margin-top:10px;padding:.625em .5em}article button{margin-top:0}article input.runcode:hover,article input.runcode:focus,article input.runcode:active,article button:hover,article button:focus,article button:active{background:#f6ad08}article strong{font-weight:700}article em{font-style:italic}article blockquote{background-color:#f8f8f8;border-left:5px solid #2479cc;margin-top:10px;overflow:hidden;padding:15px 20px}article code{background-color:#f2f2f2;border-radius:5px;font-family:Consolas,Monaco,'Andale Mono',monospace;font-size:80%;margin:0 2px;padding:4px 5px;vertical-align:middle}article pre{background-color:#f8f8f8;border-left:5px solid #ccc;color:#5d6a6a;font-size:14px;line-height:1.6;overflow:hidden;padding:.6em;position:relative;white-space:pre-wrap;word-break:break-word;word-wrap:break-word}article img{border:1px solid #ccc;display:block;margin:10px 0 5px;max-width:100%;padding:0}article table{border:0;border-collapse:collapse;border-spacing:0}article pre code{background-color:transparent;border-radius:0;border:0;display:block;font-size:100%;margin:0;padding:0;position:relative}article table th,article table td{border:0}article table th{border-bottom:2px solid #848484;padding:6px 20px;text-align:left}article table td{border-bottom:1px solid #d0d0d0;padding:6px 20px}article .copyright-info{font-size:14px}article .expire-tips{background-color:#ffffc0;border:1px solid #e2e2e2;border-left:5px solid #fff000;color:#333;font-size:15px;padding:5px 10px}article .post-info{font-size:14px}article .entry-content{color:#444;font-size:16px;font-family:Arial,'Hiragino Sans GB',冬青黑,'Microsoft YaHei',微软雅黑,SimSun,宋体,Helvetica,Tahoma,'Arial sans-serif';-webkit-font-smoothing:antialiased;line-height:1.8;word-wrap:break-word}article img.loaded{height:auto!important}article .entry-content p,article .entry-content blockquote,article .entry-content ul,article .entry-content ol,article .entry-content dl,article .entry-content table,article .entry-content iframe,article .entry-content h1,article .entry-content h2,article .entry-content h3,article .entry-content h4,article .entry-content h5,article .entry-content h6,article .entry-content p,article .entry-content pre{margin-top:15px}article pre b.name{color:#eee;font-family:"Consolas","Liberation Mono",Courier,monospace;font-size:60px;line-height:1;pointer-events:none;position:absolute;right:10px;top:10px}article .entry-content .date{color:#999;font-size:14px}article .entry-content a:hover{text-decoration:underline}article .entry-content ul ul,article .entry-content ul ol,article .entry-content ul dl,article .entry-content ol ul,article .entry-content ol ol,article .entry-content ol dl,article .entry-content dl ul,article .entry-content dl ol,article .entry-content dl dl,article .entry-content blockquote>p:first-of-type{margin-top:0}.page-navi{border-top:1px solid #fff;border-bottom:1px solid #ddd;line-height:20px;overflow:hidden;padding:20px 0;position:relative;width:100%}article.post-search{padding-bottom:0}article .entry-content ul,article .entry-content ol,article .entry-content dl{margin-left:25px}.page-navi .prev{float:left}.page-navi .next{float:right}.page-navi .center{margin:auto;text-align:center;width:80px}#comments{border-top:1px solid #fff;border-bottom:1px solid #ddd;min-height:350px;padding:20px 0}#switch_thread_mode{font-size:14px;font-weight:400;margin-left:8px}#disqus_thread,#simple_thread{line-height:1.6}#footer{border-top:1px solid #fff;font-size:.9em;line-height:2.2;padding:15px 70px 15px 40px;text-align:center;width:auto}#searchResult{min-height:350px}#toc-container,#toc{float:right}#toc{border:1px solid #e2e2e2;font-size:14px;margin:0 0 15px 20px;max-width:260px;min-width:120px;padding:6px}#search form{position:relative}#toc strong{border-bottom:1px solid #e2e2e2;display:block}#toc p{margin:0;padding:0 4px}#toc ul{margin:.5em .5em .5em 1.5em}#toc ul ul{margin-top:0;margin-bottom:0}#footer .beian{color:#666}#search .wrapper{margin-right:72px}#search .submit{-webkit-appearance:none;background-color:#e7e7e7;border:1px solid #bbb;border-left:0;border-radius:0;color:#222;display:block;font-size:16px;height:40px;outline:0;position:absolute;right:0;top:0;width:72px;cursor:pointer;}#searchResult .info{border-bottom:1px solid #ddd;color:#676767;font-size:13px;padding:15px 0}#searchResult .no-result{background-color:#fff4c2;border:1px solid #fc3;font-size:13px;margin:15px 0;padding:5px}#searchResult .loading,#searchResult .hot-words{margin-top:20px}#searchResult .item{border-bottom:1px solid #ddd;padding:10px 0 20px}#comments h1.title{font-size:25px;font-weight:300;line-height:35px;margin-bottom:10px}#search .wrapper input{-webkit-appearance:none;border:1px solid #bbb;border-radius:0;box-sizing:border-box;display:block;font-size:16px;height:40px;outline:0;padding:4px 6px;width:100%}#searchResult .hot-words a{margin-right:20px}#searchResult .item:last-of-type{border-bottom:0}#searchResult .item .title{margin:5px 0}#searchResult .item .desc{font-size:14px;overflow:hidden}#searchResult .item .img{border:1px solid #ccc;float:left;height:81px;margin:4px 8px 0 0;width:108px}#searchResult .item .summary{-webkit-box-orient:vertical;display:block;display:-webkit-box;-webkit-line-clamp:4;line-height:22px;max-height:88px;text-overflow:ellipsis}#searchResult .item .title a{font-size:17px}#searchResult .item .img img{border:0;margin:0;width:100%}#searchResult .item .title b,#searchResult .item .desc b{color:#C00;font-weight:400}#searchResult .item .title .type{background-color:#eee;border-radius:3px;color:#888;display:inline-block;font-size:12px;margin-right:6px;padding:0 4px;position:relative;top:-1px}.hljs-comment,.diff .hljs-header,.hljs-doctype,.hljs-pi,.lisp .hljs-string,.hljs-javadoc{color:#999}.hljs-keyword,.hljs-winutils,.method,.hljs-addition,.css .hljs-tag,.hljs-request,.hljs-status,.nginx .hljs-title{color:#859900}.hljs-number,.hljs-command,.hljs-string,.hljs-tag .hljs-value,.hljs-rule .hljs-value,.hljs-phpdoc,.hljs-dartdoc,.tex .hljs-formula,.hljs-regexp,.hljs-hexcolor,.hljs-link_url{color:#2aa198}.hljs-title,.hljs-localvars,.hljs-chunk,.hljs-decorator,.hljs-built_in,.hljs-identifier,.vhdl .hljs-literal,.hljs-id,.css .hljs-function,.hljs-name{color:#268bd2}.hljs-attribute,.hljs-variable,.lisp .hljs-body,.smalltalk .hljs-number,.hljs-constant,.hljs-class .hljs-title,.hljs-parent,.hljs-type,.hljs-link_reference{color:#b58900}.hljs-preprocessor,.hljs-preprocessor .hljs-keyword,.hljs-pragma,.hljs-shebang,.hljs-symbol,.hljs-symbol .hljs-string,.diff .hljs-change,.hljs-special,.hljs-attr_selector,.hljs-subst,.hljs-cdata,.css .hljs-pseudo,.hljs-header{color:#cb4b16}.hljs-deletion,.hljs-important{color:#dc322f}.hljs-link_label{color:#6c71c4}.goog-te-gadget-simple{background-color:rgba(0,0,0,.6)!important;border:none!important;border-radius:0 6px 0 0}.goog-te-gadget img{opacity:.8}.tex .hljs-formula{background:#eee8d5}.goog-te-gadget-simple .goog-te-menu-value{color:#ccc!important}#google_translate_element{bottom:-1px;left:0;margin:0;position:fixed}@media screen and (max-width:1024px){article{padding-bottom:15px}.left-col{width:210px}.mid-col{margin-left:210px}.mid-col .mid-col-container{padding:0 20px}#header{margin-left:30px}#footer{padding:15px 20px}article h1.title,article .entry-content{margin-left:0}}@media screen and (max-width:640px){#header{margin-left:0;padding:20px 0;text-align:center}#main-nav{margin-top:10px}#main-nav ul li{display:inline;margin:0 10px;text-align:center}#header .profilepic a{background-image:url(//st.deepzz.com/static/img/deepzz_small.jpg);background-size:100% 100%;height:56px;left:12px;margin:0;position:absolute;top:12px;width:56px}#sub-nav .social,#sub-nav .social a{margin-bottom:0}article{padding:20px 0}.left-col{background-image:none;position:relative;width:100%}.mid-col{float:none;margin-left:0;width:100%}article .meta{margin-bottom:10px;position:static;width:auto}.mid-col .mid-col-container{padding:0 10px}.mid-col article .meta{float:none;overflow:hidden}article .meta .date,article .meta .comment,article .meta .tags{display:inline;margin-right:5px;padding-left:0}article .meta .date{margin-right:30px}#footer{padding:15px 10px}#toc{margin:0}#toc,#toc-container{float:none}#sub-nav .social a{opacity:1}}#simple_thread ol,#simple_thread ul{list-style:none;list-style-type:none}#simple_thread>.thread{color:#2a2e2e;font-family:"Helvetica Neue",arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#simple_thread .avatar{float:left}#simple_thread .publisher-anchor-color a{color:#2479cc!important}#simple_thread .clearfix:after,#simple_thread .clearfix:before{clear:both;content:"";display:table;line-height:0}#simple_thread .active .publisher-nav-color::after{background-color:#2479cc!important}#simple_thread .avatar .user,#simple_thread .avatar img{border-radius:3px;display:block}#simple_thread .nav{border-bottom:2px solid #e7e9ee;margin:0 0 20px;position:relative}#simple_thread .tab-conversation{float:left}#simple_thread .btn{background:#778289;background:rgba(29,47,58,.6);border:0;border-radius:3px;color:#fff;display:inline-block;font-weight:500;line-height:1.1;padding:10px 16px;text-shadow:none;transition:background .2s}#simple_thread .post-content{margin-bottom:24px;position:relative;transition:all .2s ease-in-out}#simple_thread .post-body{overflow:hidden}#simple_thread .post-header{font-size:13px;line-height:1;margin-bottom:3px;padding-right:46px}#simple_thread .avatar img{height:48px;width:48px}#simple_thread .nav-tab>a{color:#7f919e;display:block;font-weight:700;line-height:1;margin:0;padding:0;position:relative;transition:all .2s ease-in-out}#simple_thread .tab-conversation>a{font-size:15px;margin-right:15px;padding:12px 0;text-transform:capitalize}#simple_thread .post-body spoiler{background:#7f919e;color:transparent;display:inline;padding:0 .5em}#simple_thread .post-header a{color:#7f919e;line-height:1}#simple_thread .avatar .user{background:#dbdfe4;padding:0;position:relative;z-index:100}#simple_thread .post .avatar{margin-right:12px}#simple_thread .btn:hover{background:#606d75;background:rgba(29,47,58,.7);color:#fff}#simple_thread .btn.active,#simple_thread .btn:active{background:#2e9fff;transition:none}#simple_thread .btn.busy{background:#ebeef2;color:#999;text-shadow:none}#simple_thread .post-content .indicator{border-radius:3px;height:48px;left:0;position:absolute;top:0;width:5px}#simple_thread .post-content.target{padding-left:12px}#simple_thread .post-header .author{color:#656c7a;font-weight:700}#simple_thread .post-header .time-ago{color:#7f919e;font-weight:500;font-size:12px}#simple_thread .tab-conversation.active>a{color:#2a2e2e!important}#simple_thread .post-body a[data-dsq-mention]{font-weight:700}#simple_thread .post-body spoiler:hover,#simple_thread .post-body spoiler:focus{background:#e7e9ee;color:inherit}#simple_thread .btn.busy:active,#simple_thread .btn.busy:hover{background:#ebeef2;cursor:not-allowed;text-shadow:none}#simple_thread .post-content.target>.avatar{left:12px}#simple_thread .post-content.target .indicator{background:#ffc62e}#simple_thread .tab-conversation.active>a:after{background:#2e9fff;bottom:-2px;content:" ";display:block;height:2px;left:0;position:absolute;right:0}#simple_thread .post-body a[data-dsq-mention]:before{content:'@'}#simple_thread .post-header .author,#simple_thread .post-body-inner p{font-family:"Helvetica Neue","PingFangSC-Regular",arial,sans-serif}#simple_thread .post-meta{display:inline-block}#simple_thread .load-more{margin:0 0 24px}#simple_thread .post-body-inner p{font-size:15px;line-height:21px;margin:0 0 15px;word-wrap:break-word}#simple_thread .media a{margin-right:10px}#simple_thread .post-meta .bullet{color:#c2c6cc;line-height:1.4;padding:0}#simple_thread .children .post{margin-left:60px}#simple_thread .load-more .btn{display:block;font-size:13px;font-weight:400;padding:11px 14px;text-align:center}#simple_thread.mobile .post-header{font-size:14px;line-height:18px;margin-bottom:4px;padding-right:0;position:relative;top:-4px}#simple_thread.mobile .post-body-inner{clear:left;overflow:visible;position:relative;top:-4px}#simple_thread.mobile .post-body{display:block;overflow:visible}#simple_thread .post-body-inner p:last-child{margin:0}#simple_thread.mobile .avatar img{height:30px;width:30px}#simple_thread .children .children .post{margin-left:48px}#simple_thread.mobile .post-header .post-byline{display:block;overflow:hidden;padding-right:15px;text-overflow:ellipsis;white-space:nowrap}#simple_thread.mobile .post-header .author{font-size:15px;line-height:18px}#simple_thread.mobile .post-meta .bullet,#simple_thread.mobile .tab-conversation.active>a>span{display:none}#simple_thread.mobile .post-list .post .post-content{margin:0;padding:0;margin-bottom:16px;transition:none}#simple_thread.mobile .post-list .post .children{border-left:2px solid #e7e9ee;padding-left:17px}#simple_thread .children .post .avatar .user img{width:36px}#simple_thread .children .post .avatar .user img,#simple_thread .children .post .indicator{height:36px}#simple_thread .children .children .children .children .post{margin-left:0}#simple_thread.mobile .post-list .post .post-content .indicator{height:30px}#simple_thread.mobile .post-list .post .children .post,#simple_thread.mobile .post-list .post .children .post .post-content .post-body{margin-left:0}#simple_thread.mobile .post-list .post .post-content .avatar img{height:30px;width:30px}#simple_thread.mobile .post-list .post .children li:only-child{margin-bottom:20px}#simple_thread .children .children .children .children .post .post-body{margin-left:48px}#simple_thread .children .children .children .children .post .indicator{left:0}#simple_thread.mobile .post-list .post .post-content.target .avatar{margin-left:8px}#simple_thread.mobile .post-list .post .children .children .children{border-left:none;padding-left:0} {{end}} diff --git a/views/st_blog_js.js b/views/st_blog_js.js index 4fbf5a2..5d2e7c7 100644 --- a/views/st_blog_js.js +++ b/views/st_blog_js.js @@ -1,3 +1,3 @@ {{define "blog_js"}} -$(".entry-content > pre code").each(function(i,block){hljs.highlightBlock(block)});var stringProto=String.prototype;stringProto.decode4Html=function(){return this.replace(/<[^>]*>/gi,"")},stringProto.decode4Html=function(){var e=document.createElement("div");return e.innerHTML=this.stripTags(),e.childNodes[0]?e.childNodes[0].nodeValue||"":""},function(e){e.disqus_shortname="deepzz",$.each(["CURRENT_PAGE","CDN_DOMAIN"],function(t,n){e[n]="";var r=$("#"+n);r&&(e[n]=r.val())})}(this),function(e){function t(t){var n,r,i={selector:null,height:200};i=$.extend(i,t),n=i.height,r=function(){var t=$(e).scrollTop(),r=$(e).height()+t;$(i.selector).find("img[data-src]").each(function(){var e=$(this);setTimeout(function(){var i,o=e.offset(),a=e.height();o.top>r+n||o.top+a
'+(t.url?'':'')+'
'+t.message+'
    '+n(t.children)+"
";return r}function n(e){var n,r;if(!e||!e.length){return""}for(n="",r=0;r没有找到任何评论数据~

点此发表评论 \xbb

'}var t='';return t}function i(){a||(a=!0,$.get("/data/comment",{id:e.simple_config.id,cursor:s},function(t){console.log(t.data);var i,u;a=!1,t&&0==t.errno?(s?(i=n(t.data.comments),o.find(".post-list").append(i)):(i=r(t.data),o.html(i),$(e).trigger("hashchange","scrollIntoView")),u=o.find(".load-more a"),t.data.next?u.removeClass("busy"):u.hide(),s=t.data.next,$(e).trigger("scroll")):o.hide()}))}var o=$("#simple_thread"),a=!1,s="";o.on("click",".load-more a",function(e){e.preventDefault(),$(this).addClass("busy"),i()}).on("click",".time-ago",function(e){e.preventDefault(),location.hash="simple-"+$(this).data("id")}),$(e).on("hashchange",function(t,n){var r,i=location.hash.match(/#(?:comment|simple)-(\d+)/);i&&(r=o.find("#post-"+i[1]),r.length&&(o.find(".post-content.target").removeClass("target"),r.find(">.post-content").addClass("target"),n&&$(e).scrollTop(r.offset().top-90)))}),/(iPhone|Android)/.test(navigator.userAgent)&&o.addClass("mobile"),e.initSimpleThread=i}(window,document),function(e,t){return"127.0.0.1"!=t.domain&&"192.168.99.100"!=t.domain&&"deepzz.com"!=t.domain?void (location.href=location.href.replace(/(https?:\/\/[^\/]+)\//i,"//deepzz.com/")):void $(function(){lazyLoad({selector:"#content",height:100}),function(){var e=$("#content"),t=e.find("img"),n=e.width();t.each(function(){var e=$(this),t=0|e.attr("width"),r=0|e.attr("height"),i=e.prop("complete");t>n&&e.attr("height",Math.ceil(r/t*n)),e.prop("src")&&(i?e.addClass("loaded"):e.on("load",function(){e.addClass("loaded")}))})}(),function(){if("search-post"==CURRENT_PAGE){var e=$("#keyword");e.val()||e.focus()}}(),function(){var t,n,r,i=$("#disqus_thread"),o=$("#simple_thread"),a=!1,s=!1,u=$("#switch_thread_mode");u.length&&(e.disqus_config=function(){this.language="en",this.page.url=i.data("url"),this.page.identifier=i.data("identifier")},e.simple_config={id:o.data("id")},t=function(){i.show(),o.hide(),u.html('「切换到评论浏览模式」'),localStorage.comment_type="disqus_thread",a||(a=!0,i.html("评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理;或者切换到评论浏览模式。"),$.getScript("//deepzz.disqus.com/embed.js"))},n=function(){i.hide(),o.show(),u.html('「切换到评论完整模式」'),localStorage.comment_type="simple_thread",s||(s=!0,o.html("评论加载中...

注:本模式仅供浏览,如需发表评论请切换到评论完整模式。"),e.initSimpleThread())},r=function(){var e=location.hash;return"#simple_thread"==e||/#simple-\d+$/.test(e)?(n(),!0):"#disqus_thread"==e||/#comment-\d+$/.test(e)?(t(),!0):void 0},$(e).on("hashchange",r),setTimeout(function(){/#(simple|comment)-\d+$/.test(location.hash)&&$("#comments").get(0).scrollIntoView();var o=setInterval(function(){var a=i.offset().top,s=$(e).scrollTop();if(Math.abs(a-s)<1000){if(clearTimeout(o),r()){return}if("simple_thread"==localStorage.comment_type){return void n()}t()}},150)},250))}()})}(this,document),function(e){$(function(){$(".entry-content pre").each(function(e){var t,n,r,i=$(this),o=i.find("code");if(o.length&&o.prop("className")&&(o.hasClass("language-html")&&(t="__HTML_CODE_"+e,o.prop("id",t),n=$(''),n.insertAfter(i)),o.html().split("\n").length>3&&o.prop("className").indexOf("language")>-1)){r=o.prop("className").replace("language-","").toUpperCase();$(''+r+"").insertBefore(o)}}),$(".entry-content input.runcode").each(function(){var t=$(this);t.click(function(t){var n,r,i;t.preventDefault(),n=$("#"+$(this).data("id")).html().stripTags().decode4Html(),r=e.open("","_preview",""),i=r.document,i.open(),i.write(n),i.close()})})})}(this),function(){$(function(){$(".entry-content img[data-replace]").each(function(){var e=$(this);e.click(function(){var t,n,r,i,o=1000*(e.data("dur")||20);e.css("cursor")&&(t="/static/img/blank.gif",n=e.prop("src"),r=e.data("replace"),e.prop("src",t),e.css("cursor",""),i=new Image,i.onload=function(){e.prop("src",r),setTimeout(function(){e.prop("src",n),e.css("cursor","pointer")},o)},i.src=r)}),e.css("cursor","pointer")})})}(this); +$(".entry-content > pre code").each(function(i,block){hljs.highlightBlock(block)});var stringProto=String.prototype;stringProto.decode4Html=function(){return this.replace(/<[^>]*>/gi,"")},stringProto.decode4Html=function(){var e=document.createElement("div");return e.innerHTML=this.stripTags(),e.childNodes[0]?e.childNodes[0].nodeValue||"":""},function(e){e.disqus_shortname="deepzz",$.each(["CURRENT_PAGE","CDN_DOMAIN"],function(t,n){e[n]="";var r=$("#"+n);r&&(e[n]=r.val())})}(this),function(e){function t(t){var n,r,i={selector:null,height:200};i=$.extend(i,t),n=i.height,r=function(){var t=$(e).scrollTop(),r=$(e).height()+t;$(i.selector).find("img[data-src]").each(function(){var e=$(this);setTimeout(function(){var i,o=e.offset(),a=e.height();o.top>r+n||o.top+a
'+(t.url?'':'')+'
'+t.message+'
    '+n(t.children)+"
";return r}function n(e){var n,r;if(!e||!e.length){return""}for(n="",r=0;r没有找到任何评论数据~

点此发表评论 \xbb

'}var t='';return t}function i(){a||(a=!0,$.get("/data/comment",{id:e.simple_config.id,cursor:s},function(t){var i,u;a=!1,t&&0==t.errno?(s?(i=n(t.data.comments),o.find(".post-list").append(i)):(i=r(t.data),o.html(i),$(e).trigger("hashchange","scrollIntoView")),u=o.find(".load-more a"),t.data.next?u.removeClass("busy"):u.hide(),s=t.data.next,$(e).trigger("scroll")):o.hide()}))}var o=$("#simple_thread"),a=!1,s="";o.on("click",".load-more a",function(e){e.preventDefault(),$(this).addClass("busy"),i()}).on("click",".time-ago",function(e){e.preventDefault(),location.hash="simple-"+$(this).data("id")}),$(e).on("hashchange",function(t,n){var r,i=location.hash.match(/#(?:comment|simple)-(\d+)/);i&&(r=o.find("#post-"+i[1]),r.length&&(o.find(".post-content.target").removeClass("target"),r.find(">.post-content").addClass("target"),n&&$(e).scrollTop(r.offset().top-90)))}),/(iPhone|Android)/.test(navigator.userAgent)&&o.addClass("mobile"),e.initSimpleThread=i}(window,document),function(e,t){return"127.0.0.1"!=t.domain&&"192.168.99.100"!=t.domain&&"deepzz.com"!=t.domain?void (location.href=location.href.replace(/(https?:\/\/[^\/]+)\//i,"//deepzz.com/")):void $(function(){lazyLoad({selector:"#content",height:100}),function(){var e=$("#content"),t=e.find("img"),n=e.width();t.each(function(){var e=$(this),t=0|e.attr("width"),r=0|e.attr("height"),i=e.prop("complete");t>n&&e.attr("height",Math.ceil(r/t*n)),e.prop("src")&&(i?e.addClass("loaded"):e.on("load",function(){e.addClass("loaded")}))})}(),function(){if("search-post"==CURRENT_PAGE){var e=$("#keyword");e.val()||e.focus()}}(),function(){var t,n,r,i=$("#disqus_thread"),o=$("#simple_thread"),a=!1,s=!1,u=$("#switch_thread_mode");u.length&&(e.disqus_config=function(){this.language="en",this.page.url=i.data("url"),this.page.identifier=i.data("identifier")},e.simple_config={id:o.data("id")},t=function(){i.show(),o.hide(),u.html('「切换到评论浏览模式」'),localStorage.comment_type="disqus_thread",a||(a=!0,i.html("评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理;或者切换到评论浏览模式。"),$.getScript("//deepzz.disqus.com/embed.js"))},n=function(){i.hide(),o.show(),u.html('「切换到评论完整模式」'),localStorage.comment_type="simple_thread",s||(s=!0,o.html("评论加载中...

注:本模式仅供浏览,如需发表评论请切换到评论完整模式。"),e.initSimpleThread())},r=function(){var e=location.hash;return"#simple_thread"==e||/#simple-\d+$/.test(e)?(n(),!0):"#disqus_thread"==e||/#comment-\d+$/.test(e)?(t(),!0):void 0},$(e).on("hashchange",r),setTimeout(function(){/#(simple|comment)-\d+$/.test(location.hash)&&$("#comments").get(0).scrollIntoView();var o=setInterval(function(){var a=i.offset().top,s=$(e).scrollTop();if(Math.abs(a-s)<1000){if(clearTimeout(o),r()){return}if("simple_thread"==localStorage.comment_type){return void n()}t()}},150)},250))}()})}(this,document),function(e){$(function(){$(".entry-content pre").each(function(e){var t,n,r,i=$(this),o=i.find("code");if(o.length&&o.prop("className")&&(o.hasClass("language-html")&&(t="__HTML_CODE_"+e,o.prop("id",t),n=$(''),n.insertAfter(i)),o.html().split("\n").length>3&&o.prop("className").indexOf("language")>-1)){r=o.prop("className").replace("language-","").toUpperCase();$(''+r+"").insertBefore(o)}}),$(".entry-content input.runcode").each(function(){var t=$(this);t.click(function(t){var n,r,i;t.preventDefault(),n=$("#"+$(this).data("id")).html().stripTags().decode4Html(),r=e.open("","_preview",""),i=r.document,i.open(),i.write(n),i.close()})})})}(this),function(){$(function(){$(".entry-content img[data-replace]").each(function(){var e=$(this);e.click(function(){var t,n,r,i,o=1000*(e.data("dur")||20);e.css("cursor")&&(t="/static/img/blank.gif",n=e.prop("src"),r=e.data("replace"),e.prop("src",t),e.css("cursor",""),i=new Image,i.onload=function(){e.prop("src",r),setTimeout(function(){e.prop("src",n),e.css("cursor","pointer")},o)},i.src=r)}),e.css("cursor","pointer")})})}(this); {{end}} diff --git a/xml.go b/xml.go index 5456c71..9b3df6a 100644 --- a/xml.go +++ b/xml.go @@ -24,12 +24,17 @@ func init() { if err != nil { logd.Fatal(err) } - + doOpensearch() go doFeed() go doSitemap() } func doFeed() { + tpl := tpls.Lookup("feedTpl.xml") + if tpl == nil { + logd.Error("not found feedTpl.") + return + } _, _, artcs := PageList(1, FEED_COUNT) buildDate := time.Now() params := map[string]interface{}{ @@ -41,17 +46,12 @@ func doFeed() { "Artcs": artcs, } - f, err := os.OpenFile("conf/feed.xml", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.ModePerm) + f, err := os.OpenFile("static/feed.xml", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.ModePerm) if err != nil { logd.Error(err) return } defer f.Close() - tpl := tpls.Lookup("feedTpl.xml") - if tpl == nil { - logd.Error(err) - return - } err = tpl.Execute(f, params) if err != nil { logd.Error(err) @@ -61,18 +61,18 @@ func doFeed() { } func doSitemap() { + tpl := tpls.Lookup("sitemapTpl.xml") + if tpl == nil { + logd.Error("not found sitemapTpl.") + return + } params := map[string]interface{}{"Artcs": Ei.Articles, "Domain": runmode.Domain, "Enablehttps": runmode.EnableHttps} - f, err := os.OpenFile("conf/sitemap.xml", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.ModePerm) + f, err := os.OpenFile("static/sitemap.xml", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.ModePerm) if err != nil { logd.Error(err) return } defer f.Close() - tpl := tpls.Lookup("sitemapTpl.xml") - if tpl == nil { - logd.Error(err) - return - } err = tpl.Execute(f, params) if err != nil { logd.Error(err) @@ -80,3 +80,26 @@ func doSitemap() { } time.AfterFunc(time.Hour*24, doFeed) } + +func doOpensearch() { + tpl := tpls.Lookup("opensearchTpl.xml") + if tpl == nil { + logd.Error("not found opensearchTpl.") + return + } + params := map[string]string{ + "BTitle": Ei.BTitle, + "SubTitle": Ei.SubTitle, + } + f, err := os.OpenFile("static/opensearch.xml", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.ModePerm) + if err != nil { + logd.Error(err) + return + } + defer f.Close() + err = tpl.Execute(f, params) + if err != nil { + logd.Error(err) + return + } +}