├── src
└── main
│ ├── webapp
│ ├── resource
│ │ ├── ueditor-1.4.3
│ │ │ ├── themes
│ │ │ │ ├── iframe.css
│ │ │ │ └── default
│ │ │ │ │ └── images
│ │ │ │ │ ├── arrow.png
│ │ │ │ │ ├── icons.gif
│ │ │ │ │ ├── icons.png
│ │ │ │ │ ├── lock.gif
│ │ │ │ │ ├── scale.png
│ │ │ │ │ ├── word.gif
│ │ │ │ │ ├── anchor.gif
│ │ │ │ │ ├── charts.png
│ │ │ │ │ ├── loading.gif
│ │ │ │ │ ├── spacer.gif
│ │ │ │ │ ├── upload.png
│ │ │ │ │ ├── arrow_down.png
│ │ │ │ │ ├── arrow_up.png
│ │ │ │ │ ├── button-bg.gif
│ │ │ │ │ ├── cursor_h.gif
│ │ │ │ │ ├── cursor_h.png
│ │ │ │ │ ├── cursor_v.gif
│ │ │ │ │ ├── cursor_v.png
│ │ │ │ │ ├── filescan.png
│ │ │ │ │ ├── icons-all.gif
│ │ │ │ │ ├── loaderror.png
│ │ │ │ │ ├── pagebreak.gif
│ │ │ │ │ ├── sortable.png
│ │ │ │ │ ├── sparator_v.png
│ │ │ │ │ ├── toolbar_bg.png
│ │ │ │ │ ├── videologo.gif
│ │ │ │ │ ├── wordpaste.png
│ │ │ │ │ ├── cancelbutton.gif
│ │ │ │ │ ├── highlighted.gif
│ │ │ │ │ ├── dialog-title-bg.png
│ │ │ │ │ ├── unhighlighted.gif
│ │ │ │ │ ├── neweditor-tab-bg.png
│ │ │ │ │ ├── table-cell-align.png
│ │ │ │ │ └── tangram-colorpicker.png
│ │ │ ├── lang
│ │ │ │ ├── en
│ │ │ │ │ └── images
│ │ │ │ │ │ ├── copy.png
│ │ │ │ │ │ ├── button.png
│ │ │ │ │ │ ├── music.png
│ │ │ │ │ │ ├── upload.png
│ │ │ │ │ │ ├── addimage.png
│ │ │ │ │ │ ├── background.png
│ │ │ │ │ │ ├── deleteenable.png
│ │ │ │ │ │ ├── localimage.png
│ │ │ │ │ │ ├── deletedisable.png
│ │ │ │ │ │ ├── listbackground.png
│ │ │ │ │ │ ├── rotateleftdisable.png
│ │ │ │ │ │ ├── rotateleftenable.png
│ │ │ │ │ │ ├── rotaterightenable.png
│ │ │ │ │ │ ├── alldeletebtnupskin.png
│ │ │ │ │ │ ├── rotaterightdisable.png
│ │ │ │ │ │ └── alldeletebtnhoverskin.png
│ │ │ │ └── zh-cn
│ │ │ │ │ └── images
│ │ │ │ │ ├── copy.png
│ │ │ │ │ ├── music.png
│ │ │ │ │ ├── upload.png
│ │ │ │ │ └── localimage.png
│ │ │ ├── dialogs
│ │ │ │ ├── table
│ │ │ │ │ ├── dragicon.png
│ │ │ │ │ ├── edittip.html
│ │ │ │ │ └── edittable.css
│ │ │ │ ├── emotion
│ │ │ │ │ └── images
│ │ │ │ │ │ ├── 0.gif
│ │ │ │ │ │ ├── bface.gif
│ │ │ │ │ │ ├── cface.gif
│ │ │ │ │ │ ├── fface.gif
│ │ │ │ │ │ ├── tface.gif
│ │ │ │ │ │ ├── wface.gif
│ │ │ │ │ │ ├── yface.gif
│ │ │ │ │ │ ├── jxface2.gif
│ │ │ │ │ │ └── neweditor-tab-bg.png
│ │ │ │ ├── image
│ │ │ │ │ └── images
│ │ │ │ │ │ ├── bg.png
│ │ │ │ │ │ ├── icons.gif
│ │ │ │ │ │ ├── icons.png
│ │ │ │ │ │ ├── image.png
│ │ │ │ │ │ ├── progress.png
│ │ │ │ │ │ ├── success.gif
│ │ │ │ │ │ ├── success.png
│ │ │ │ │ │ └── alignicon.jpg
│ │ │ │ ├── video
│ │ │ │ │ └── images
│ │ │ │ │ │ ├── bg.png
│ │ │ │ │ │ ├── icons.gif
│ │ │ │ │ │ ├── icons.png
│ │ │ │ │ │ ├── image.png
│ │ │ │ │ │ ├── progress.png
│ │ │ │ │ │ ├── success.gif
│ │ │ │ │ │ ├── success.png
│ │ │ │ │ │ ├── file-icons.gif
│ │ │ │ │ │ ├── file-icons.png
│ │ │ │ │ │ ├── left_focus.jpg
│ │ │ │ │ │ ├── none_focus.jpg
│ │ │ │ │ │ ├── right_focus.jpg
│ │ │ │ │ │ └── center_focus.jpg
│ │ │ │ ├── scrawl
│ │ │ │ │ └── images
│ │ │ │ │ │ ├── brush.png
│ │ │ │ │ │ ├── empty.png
│ │ │ │ │ │ ├── redo.png
│ │ │ │ │ │ ├── redoH.png
│ │ │ │ │ │ ├── scale.png
│ │ │ │ │ │ ├── size.png
│ │ │ │ │ │ ├── undo.png
│ │ │ │ │ │ ├── undoH.png
│ │ │ │ │ │ ├── addimg.png
│ │ │ │ │ │ ├── delimg.png
│ │ │ │ │ │ ├── delimgH.png
│ │ │ │ │ │ ├── emptyH.png
│ │ │ │ │ │ ├── eraser.png
│ │ │ │ │ │ └── scaleH.png
│ │ │ │ ├── template
│ │ │ │ │ ├── images
│ │ │ │ │ │ ├── bg.gif
│ │ │ │ │ │ ├── pre0.png
│ │ │ │ │ │ ├── pre1.png
│ │ │ │ │ │ ├── pre2.png
│ │ │ │ │ │ ├── pre3.png
│ │ │ │ │ │ └── pre4.png
│ │ │ │ │ ├── template.html
│ │ │ │ │ └── template.css
│ │ │ │ ├── attachment
│ │ │ │ │ ├── images
│ │ │ │ │ │ ├── bg.png
│ │ │ │ │ │ ├── icons.gif
│ │ │ │ │ │ ├── icons.png
│ │ │ │ │ │ ├── image.png
│ │ │ │ │ │ ├── progress.png
│ │ │ │ │ │ ├── success.gif
│ │ │ │ │ │ ├── success.png
│ │ │ │ │ │ ├── alignicon.gif
│ │ │ │ │ │ ├── alignicon.png
│ │ │ │ │ │ ├── file-icons.gif
│ │ │ │ │ │ └── file-icons.png
│ │ │ │ │ └── fileTypeImages
│ │ │ │ │ │ ├── icon_chm.gif
│ │ │ │ │ │ ├── icon_doc.gif
│ │ │ │ │ │ ├── icon_exe.gif
│ │ │ │ │ │ ├── icon_jpg.gif
│ │ │ │ │ │ ├── icon_mp3.gif
│ │ │ │ │ │ ├── icon_mv.gif
│ │ │ │ │ │ ├── icon_pdf.gif
│ │ │ │ │ │ ├── icon_ppt.gif
│ │ │ │ │ │ ├── icon_psd.gif
│ │ │ │ │ │ ├── icon_rar.gif
│ │ │ │ │ │ ├── icon_txt.gif
│ │ │ │ │ │ ├── icon_xls.gif
│ │ │ │ │ │ └── icon_default.png
│ │ │ │ ├── background
│ │ │ │ │ └── images
│ │ │ │ │ │ ├── bg.png
│ │ │ │ │ │ └── success.png
│ │ │ │ ├── charts
│ │ │ │ │ ├── images
│ │ │ │ │ │ ├── charts0.png
│ │ │ │ │ │ ├── charts1.png
│ │ │ │ │ │ ├── charts2.png
│ │ │ │ │ │ ├── charts3.png
│ │ │ │ │ │ ├── charts4.png
│ │ │ │ │ │ └── charts5.png
│ │ │ │ │ └── chart.config.js
│ │ │ │ ├── wordimage
│ │ │ │ │ ├── imageUploader.swf
│ │ │ │ │ └── fClipboard_ueditor.swf
│ │ │ │ ├── help
│ │ │ │ │ ├── help.css
│ │ │ │ │ └── help.js
│ │ │ │ ├── spechars
│ │ │ │ │ └── spechars.html
│ │ │ │ ├── music
│ │ │ │ │ ├── music.html
│ │ │ │ │ └── music.css
│ │ │ │ ├── preview
│ │ │ │ │ └── preview.html
│ │ │ │ └── anchor
│ │ │ │ │ └── anchor.html
│ │ │ ├── third-party
│ │ │ │ ├── video-js
│ │ │ │ │ ├── font
│ │ │ │ │ │ ├── vjs.eot
│ │ │ │ │ │ ├── vjs.ttf
│ │ │ │ │ │ └── vjs.woff
│ │ │ │ │ └── video-js.swf
│ │ │ │ ├── webuploader
│ │ │ │ │ ├── Uploader.swf
│ │ │ │ │ └── webuploader.css
│ │ │ │ ├── zeroclipboard
│ │ │ │ │ └── ZeroClipboard.swf
│ │ │ │ └── highcharts
│ │ │ │ │ └── modules
│ │ │ │ │ ├── heatmap.js
│ │ │ │ │ ├── no-data-to-display.js
│ │ │ │ │ └── heatmap.src.js
│ │ │ └── READ ME.txt
│ │ ├── img
│ │ │ ├── logo.png
│ │ │ ├── arrow2.gif
│ │ │ ├── avatar.png
│ │ │ ├── bullet.png
│ │ │ ├── favicon.ico
│ │ │ ├── meta_bg.gif
│ │ │ ├── search.png
│ │ │ ├── title.gif
│ │ │ ├── upload.png
│ │ │ ├── right_bg.gif
│ │ │ ├── search_ie.png
│ │ │ ├── type
│ │ │ │ ├── code.png
│ │ │ │ ├── text.png
│ │ │ │ ├── archive.png
│ │ │ │ └── document.png
│ │ │ ├── background.gif
│ │ │ ├── left_arrow.png
│ │ │ ├── return_top1.gif
│ │ │ ├── return_top2.gif
│ │ │ ├── right_arrow.png
│ │ │ └── background_header.gif
│ │ ├── font
│ │ │ ├── icomoon-zblog.eot
│ │ │ ├── icomoon-zblog.ttf
│ │ │ └── icomoon-zblog.woff
│ │ ├── zdialog
│ │ │ ├── image
│ │ │ │ ├── ico.png
│ │ │ │ └── alert_btn.png
│ │ │ ├── alert.js
│ │ │ └── alert.css
│ │ ├── webuploader-0.1.5
│ │ │ ├── Uploader.swf
│ │ │ └── webuploader.css
│ │ ├── bootstrap-tree
│ │ │ └── bootstrap-treeview.min.css
│ │ ├── Font-Awesome-3.2.1
│ │ │ └── font
│ │ │ │ ├── FontAwesome.otf
│ │ │ │ ├── fontawesome-webfont.eot
│ │ │ │ ├── fontawesome-webfont.ttf
│ │ │ │ └── fontawesome-webfont.woff
│ │ ├── bootstrap-3.3.1
│ │ │ ├── fonts
│ │ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ │ └── glyphicons-halflings-regular.woff
│ │ │ └── js
│ │ │ │ └── npm.js
│ │ ├── js
│ │ │ ├── ie6.js
│ │ │ ├── backend
│ │ │ │ ├── admin.upload.js
│ │ │ │ ├── admin.link.js
│ │ │ │ ├── admin.user.js
│ │ │ │ ├── sidebar.js
│ │ │ │ ├── admin.comment.js
│ │ │ │ ├── admin.category.js
│ │ │ │ └── zblog.admin.js
│ │ │ └── jscript.js
│ │ ├── error
│ │ │ ├── 404.html
│ │ │ ├── 500.html
│ │ │ └── unauthenticated.html
│ │ └── epiceditor-0.2.3
│ │ │ └── themes
│ │ │ └── editor
│ │ │ ├── epic-light.css
│ │ │ └── epic-dark.css
│ ├── META-INF
│ │ └── MANIFEST.MF
│ ├── robots.txt
│ ├── index.jsp
│ └── WEB-INF
│ │ ├── jsp
│ │ ├── common
│ │ │ ├── recent.html
│ │ │ ├── archive.html
│ │ │ ├── tagcloud.html
│ │ │ ├── link.html
│ │ │ ├── header.html
│ │ │ ├── footer.jsp
│ │ │ └── head.jsp
│ │ ├── backend
│ │ │ └── common
│ │ │ │ ├── pagination.jsp
│ │ │ │ ├── bootstrap.jsp
│ │ │ │ └── navbar.jsp
│ │ └── sitemap.jsp
│ │ └── tld
│ │ └── function.tld
│ ├── java
│ └── com
│ │ └── zblog
│ │ ├── core
│ │ ├── dal
│ │ │ ├── mapper
│ │ │ │ ├── LinkMapper.java
│ │ │ │ ├── UserMapper.java
│ │ │ │ ├── OptionMapper.java
│ │ │ │ ├── TagMapper.java
│ │ │ │ ├── UploadMapper.java
│ │ │ │ ├── CommentMapper.java
│ │ │ │ ├── BaseMapper.java
│ │ │ │ ├── CategoryMapper.java
│ │ │ │ └── PostMapper.java
│ │ │ ├── constants
│ │ │ │ ├── CategoryConstants.java
│ │ │ │ ├── CommentConstants.java
│ │ │ │ ├── UserConstants.java
│ │ │ │ ├── OptionConstants.java
│ │ │ │ └── PostConstants.java
│ │ │ └── entity
│ │ │ │ ├── Tag.java
│ │ │ │ ├── Upload.java
│ │ │ │ ├── Category.java
│ │ │ │ ├── Link.java
│ │ │ │ ├── Option.java
│ │ │ │ ├── BaseEntity.java
│ │ │ │ └── User.java
│ │ ├── plugin
│ │ │ ├── TreeItem.java
│ │ │ ├── ApplicationContextUtil.java
│ │ │ └── TreeUtils.java
│ │ ├── tag
│ │ │ ├── FirstTag.java
│ │ │ ├── LastTag.java
│ │ │ ├── PrevTag.java
│ │ │ ├── NextTag.java
│ │ │ └── AbstartTagSupport.java
│ │ ├── lucene
│ │ │ ├── LuceneException.java
│ │ │ ├── DocConverter.java
│ │ │ └── LuceneUtils.java
│ │ ├── util
│ │ │ ├── UrlUtil.java
│ │ │ ├── CollectionUtils.java
│ │ │ ├── IpUtils.java
│ │ │ ├── IdGenerator.java
│ │ │ ├── CommRegular.java
│ │ │ ├── PostTagHelper.java
│ │ │ ├── Threads.java
│ │ │ ├── StringUtils.java
│ │ │ ├── JdbcUtils.java
│ │ │ └── DateUtils.java
│ │ ├── Constants.java
│ │ ├── WebConstants.java
│ │ ├── feed
│ │ │ ├── ArticleAdapter.java
│ │ │ └── Channel.java
│ │ └── security
│ │ │ └── Hex.java
│ │ ├── service
│ │ ├── freemarker
│ │ │ ├── ftl
│ │ │ │ ├── recent.html
│ │ │ │ ├── link.html
│ │ │ │ ├── archive.html
│ │ │ │ ├── tagcloud.html
│ │ │ │ └── post.html
│ │ │ └── FreeMarkerException.java
│ │ ├── shiro
│ │ │ ├── StatelessToken.java
│ │ │ └── StatelessDefaultSubjectFactory.java
│ │ ├── vo
│ │ │ ├── UploadVO.java
│ │ │ ├── PageVO.java
│ │ │ ├── MailVO.java
│ │ │ ├── PostVO.java
│ │ │ ├── CommentVO.java
│ │ │ ├── OSInfo.java
│ │ │ └── Global.java
│ │ ├── LinkService.java
│ │ ├── UserService.java
│ │ ├── TagService.java
│ │ ├── BaseService.java
│ │ ├── OptionsService.java
│ │ ├── UploadService.java
│ │ └── email
│ │ │ └── MailSenderService.java
│ │ ├── web
│ │ ├── backend
│ │ │ └── form
│ │ │ │ ├── validator
│ │ │ │ ├── CategoryFormValidator.java
│ │ │ │ ├── MailFormValidator.java
│ │ │ │ ├── LinkFormValidator.java
│ │ │ │ ├── LoginFormValidator.java
│ │ │ │ ├── OptionFormValidator.java
│ │ │ │ └── PostFormValidator.java
│ │ │ │ ├── MailOption.java
│ │ │ │ ├── PostOption.java
│ │ │ │ ├── LoginForm.java
│ │ │ │ └── GeneralOption.java
│ │ ├── support
│ │ │ ├── WebContextFactory.java
│ │ │ ├── ServletRequestReaderArgumentsResolver.java
│ │ │ └── WebContext.java
│ │ ├── listener
│ │ │ └── InitApplicationListener.java
│ │ ├── front
│ │ │ ├── controller
│ │ │ │ ├── TagController.java
│ │ │ │ ├── CategoryController.java
│ │ │ │ └── PageController.java
│ │ │ └── validator
│ │ │ │ └── CommentValidator.java
│ │ └── filter
│ │ │ └── XssHttpServletRequestWrapper.java
│ │ └── biz
│ │ ├── VisitStatManager.java
│ │ └── EhCacheManager.java
│ └── resources
│ ├── jdbc.properties
│ ├── dic
│ └── stopword.dic
│ ├── IKAnalyzer.cfg.xml
│ ├── mybatis
│ ├── OptionMapper.xml
│ ├── LinkMapper.xml
│ ├── TagMapper.xml
│ ├── UploadMapper.xml
│ └── UserMapper.xml
│ ├── config
│ ├── spring-service.xml
│ └── mybatis.xml
│ └── log4j.properties
├── .gitignore
└── README.md
/src/main/webapp/resource/ueditor-1.4.3/themes/iframe.css:
--------------------------------------------------------------------------------
1 | /*可以在这里添加你自己的css*/
2 |
--------------------------------------------------------------------------------
/src/main/webapp/META-INF/MANIFEST.MF:
--------------------------------------------------------------------------------
1 | Manifest-Version: 1.0
2 | Class-Path:
3 |
4 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/logo.png
--------------------------------------------------------------------------------
/src/main/webapp/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow: /backend/
3 | Disallow: /resource/
4 | Disallow: /xmlrpc/
5 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/arrow2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/arrow2.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/avatar.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/bullet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/bullet.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/favicon.ico
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/meta_bg.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/meta_bg.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/search.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/title.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/title.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/upload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/upload.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/right_bg.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/right_bg.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/search_ie.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/search_ie.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/type/code.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/type/code.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/type/text.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/type/text.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/background.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/background.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/left_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/left_arrow.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/return_top1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/return_top1.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/return_top2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/return_top2.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/right_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/right_arrow.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/type/archive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/type/archive.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/font/icomoon-zblog.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/font/icomoon-zblog.eot
--------------------------------------------------------------------------------
/src/main/webapp/resource/font/icomoon-zblog.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/font/icomoon-zblog.ttf
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/type/document.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/type/document.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/zdialog/image/ico.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/zdialog/image/ico.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/font/icomoon-zblog.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/font/icomoon-zblog.woff
--------------------------------------------------------------------------------
/src/main/webapp/resource/img/background_header.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/img/background_header.gif
--------------------------------------------------------------------------------
/src/main/webapp/index.jsp:
--------------------------------------------------------------------------------
1 | <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 |
3 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/zdialog/image/alert_btn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/zdialog/image/alert_btn.png
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/jsp/common/recent.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/webuploader-0.1.5/Uploader.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/webuploader-0.1.5/Uploader.swf
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/jsp/common/archive.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/mapper/LinkMapper.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.mapper;
2 |
3 | public interface LinkMapper extends BaseMapper{
4 |
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/bootstrap-tree/bootstrap-treeview.min.css:
--------------------------------------------------------------------------------
1 | .list-group-item{cursor:pointer}span.indent{margin-left:10px;margin-right:10px}span.icon{margin-right:5px}
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/copy.png
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/jsp/common/tagcloud.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/Font-Awesome-3.2.1/font/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/Font-Awesome-3.2.1/font/FontAwesome.otf
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/table/dragicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/table/dragicon.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/button.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/music.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/music.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/upload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/upload.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/zh-cn/images/copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/zh-cn/images/copy.png
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/jsp/common/link.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/0.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/0.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/image/images/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/image/images/bg.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/bg.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/addimage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/addimage.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/zh-cn/images/music.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/zh-cn/images/music.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/zh-cn/images/upload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/zh-cn/images/upload.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/image/images/icons.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/image/images/icons.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/image/images/icons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/image/images/icons.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/image/images/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/image/images/image.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/brush.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/brush.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/empty.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/redo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/redo.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/redoH.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/redoH.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/scale.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/scale.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/size.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/size.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/undo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/undo.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/undoH.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/undoH.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/template/images/bg.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/template/images/bg.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/icons.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/icons.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/icons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/icons.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/image.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/background.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/deleteenable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/deleteenable.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/localimage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/localimage.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/arrow.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/icons.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/icons.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/icons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/icons.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/lock.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/lock.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/scale.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/scale.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/word.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/word.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/Font-Awesome-3.2.1/font/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/Font-Awesome-3.2.1/font/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/src/main/webapp/resource/Font-Awesome-3.2.1/font/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/Font-Awesome-3.2.1/font/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/bg.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/background/images/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/background/images/bg.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/charts/images/charts0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/charts/images/charts0.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/charts/images/charts1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/charts/images/charts1.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/charts/images/charts2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/charts/images/charts2.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/charts/images/charts3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/charts/images/charts3.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/charts/images/charts4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/charts/images/charts4.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/charts/images/charts5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/charts/images/charts5.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/bface.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/bface.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/cface.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/cface.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/fface.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/fface.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/tface.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/tface.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/wface.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/wface.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/yface.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/yface.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/image/images/progress.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/image/images/progress.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/image/images/success.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/image/images/success.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/image/images/success.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/image/images/success.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/addimg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/addimg.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/delimg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/delimg.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/delimgH.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/delimgH.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/emptyH.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/emptyH.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/eraser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/eraser.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/scaleH.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/scrawl/images/scaleH.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/template/images/pre0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/template/images/pre0.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/template/images/pre1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/template/images/pre1.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/template/images/pre2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/template/images/pre2.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/template/images/pre3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/template/images/pre3.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/template/images/pre4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/template/images/pre4.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/progress.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/progress.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/success.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/success.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/success.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/success.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/deletedisable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/deletedisable.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/listbackground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/listbackground.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/zh-cn/images/localimage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/zh-cn/images/localimage.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/anchor.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/anchor.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/charts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/charts.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/loading.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/spacer.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/spacer.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/upload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/upload.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/third-party/video-js/font/vjs.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/third-party/video-js/font/vjs.eot
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/third-party/video-js/font/vjs.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/third-party/video-js/font/vjs.ttf
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/third-party/video-js/video-js.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/third-party/video-js/video-js.swf
--------------------------------------------------------------------------------
/src/main/webapp/resource/Font-Awesome-3.2.1/font/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/Font-Awesome-3.2.1/font/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/icons.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/icons.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/icons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/icons.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/image.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/jxface2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/jxface2.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/image/images/alignicon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/image/images/alignicon.jpg
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/file-icons.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/file-icons.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/file-icons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/file-icons.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/left_focus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/left_focus.jpg
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/none_focus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/none_focus.jpg
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/right_focus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/right_focus.jpg
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/wordimage/imageUploader.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/wordimage/imageUploader.swf
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/rotateleftdisable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/rotateleftdisable.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/rotateleftenable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/rotateleftenable.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/rotaterightenable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/rotaterightenable.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/arrow_down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/arrow_down.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/arrow_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/arrow_up.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/button-bg.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/button-bg.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/cursor_h.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/cursor_h.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/cursor_h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/cursor_h.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/cursor_v.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/cursor_v.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/cursor_v.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/cursor_v.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/filescan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/filescan.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/icons-all.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/icons-all.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/loaderror.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/loaderror.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/pagebreak.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/pagebreak.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/sortable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/sortable.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/sparator_v.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/sparator_v.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/toolbar_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/toolbar_bg.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/videologo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/videologo.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/wordpaste.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/wordpaste.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/third-party/video-js/font/vjs.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/third-party/video-js/font/vjs.woff
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/third-party/webuploader/Uploader.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/third-party/webuploader/Uploader.swf
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/progress.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/progress.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/success.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/success.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/success.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/success.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/background/images/success.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/background/images/success.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/center_focus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/video/images/center_focus.jpg
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/alldeletebtnupskin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/alldeletebtnupskin.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/rotaterightdisable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/rotaterightdisable.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/cancelbutton.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/cancelbutton.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/highlighted.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/highlighted.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/bootstrap-3.3.1/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/bootstrap-3.3.1/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/src/main/webapp/resource/bootstrap-3.3.1/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/bootstrap-3.3.1/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/src/main/webapp/resource/bootstrap-3.3.1/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/bootstrap-3.3.1/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/alignicon.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/alignicon.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/alignicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/alignicon.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/file-icons.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/file-icons.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/file-icons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/images/file-icons.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/wordimage/fClipboard_ueditor.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/wordimage/fClipboard_ueditor.swf
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/alldeletebtnhoverskin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/lang/en/images/alldeletebtnhoverskin.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/dialog-title-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/dialog-title-bg.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/unhighlighted.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/unhighlighted.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/neweditor-tab-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/emotion/images/neweditor-tab-bg.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/neweditor-tab-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/neweditor-tab-bg.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/table-cell-align.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/table-cell-align.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/third-party/zeroclipboard/ZeroClipboard.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/third-party/zeroclipboard/ZeroClipboard.swf
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # maven ignore
2 | target/
3 | /src/test/
4 | *.DS_Store
5 | /src/main/webapp/post
6 | /src/main/webapp/log
7 |
8 | # eclipse ignore
9 | .settings/
10 | .project
11 | .classpath
12 | .tern-project
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_chm.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_chm.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_doc.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_doc.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_exe.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_exe.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_jpg.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_jpg.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_mp3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_mp3.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_mv.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_mv.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_pdf.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_pdf.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_ppt.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_ppt.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_psd.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_psd.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_rar.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_rar.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_txt.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_txt.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_xls.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_xls.gif
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/tangram-colorpicker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/themes/default/images/tangram-colorpicker.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhouit/Zblog/HEAD/src/main/webapp/resource/ueditor-1.4.3/dialogs/attachment/fileTypeImages/icon_default.png
--------------------------------------------------------------------------------
/src/main/webapp/resource/js/ie6.js:
--------------------------------------------------------------------------------
1 | $(function(){
2 | $("#post_mask").css("height",$(document).height());
3 | /* ie6 a设置display:block不能自动宽度*/
4 | var width=$(".post_content:eq(0)").width()-2;
5 | $(".title a").css("width",width);
6 | });
--------------------------------------------------------------------------------
/src/main/webapp/resource/error/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 404
5 |
6 |
7 |
8 | 404
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/error/500.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 500
5 |
6 |
7 |
8 | 500
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/freemarker/ftl/recent.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/main/resources/jdbc.properties:
--------------------------------------------------------------------------------
1 | # Properties file for JDBC configuration
2 | #
3 | # Place this file in the root CLASSPATH
4 | jdbc.driverClassName=com.mysql.jdbc.Driver
5 | jdbc.url=jdbc\:mysql\://127.0.0.1\:3306/zblog?characterEncoding\=UTF-8
6 | jdbc.username=root
7 | jdbc.password=12345
8 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/epiceditor-0.2.3/themes/editor/epic-light.css:
--------------------------------------------------------------------------------
1 | html { padding:10px; }
2 |
3 | body {
4 | border:0;
5 | background:#fcfcfc;
6 | font-family:monospace;
7 | font-size:14px;
8 | padding:10px;
9 | line-height:1.35em;
10 | margin:0;
11 | padding:0;
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/freemarker/ftl/link.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/constants/CategoryConstants.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.constants;
2 |
3 | public class CategoryConstants{
4 | private CategoryConstants(){
5 | }
6 |
7 | /**
8 | * 顶级默认分类名称
9 | */
10 | public static final String ROOT = "Root";
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/error/unauthenticated.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | unauthenticated
5 |
6 |
7 |
8 | 未授权,请登录!!!
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/epiceditor-0.2.3/themes/editor/epic-dark.css:
--------------------------------------------------------------------------------
1 | html { padding:10px; }
2 |
3 | body {
4 | border:0;
5 | background:rgb(41,41,41);
6 | font-family:monospace;
7 | font-size:14px;
8 | padding:10px;
9 | color:#ddd;
10 | line-height:1.35em;
11 | margin:0;
12 | padding:0;
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/plugin/TreeItem.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.plugin;
2 |
3 | import java.util.Collection;
4 |
5 | public interface TreeItem {
6 |
7 | public String getId();
8 |
9 | public String getParent();
10 |
11 | public Collection getChildren();
12 |
13 | public void addChild(T child);
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/freemarker/ftl/archive.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/mapper/UserMapper.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.mapper;
2 |
3 | import org.apache.ibatis.annotations.Param;
4 |
5 | import com.zblog.core.dal.entity.User;
6 |
7 | public interface UserMapper extends BaseMapper{
8 |
9 | User loadByNameAndPass(@Param("username")String username,@Param("password")String password);
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/freemarker/ftl/tagcloud.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/main/resources/dic/stopword.dic:
--------------------------------------------------------------------------------
1 | a
2 | an
3 | and
4 | are
5 | as
6 | at
7 | be
8 | but
9 | by
10 | for
11 | if
12 | in
13 | into
14 | is
15 | it
16 | my
17 | no
18 | not
19 | of
20 | on
21 | or
22 | such
23 | that
24 | the
25 | their
26 | then
27 | there
28 | these
29 | they
30 | this
31 | to
32 | was
33 | will
34 | with
35 | 和
36 | 与
37 | 的
38 | 地
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/mapper/OptionMapper.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.mapper;
2 |
3 | public interface OptionMapper extends BaseMapper{
4 |
5 | String getOptionValue(String name);
6 |
7 | /**
8 | * 以select .. for update,注意此方法须在事务中执行
9 | *
10 | * @param name
11 | * @return
12 | */
13 | String getOptionValueForUpdate(String name);
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/resources/IKAnalyzer.cfg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | IK Analyzer 扩展配置
5 |
8 |
9 | dic/stopword.dic;
10 |
11 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/mapper/TagMapper.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.mapper;
2 |
3 | import java.util.List;
4 |
5 | import com.zblog.core.dal.entity.Tag;
6 |
7 | public interface TagMapper extends BaseMapper{
8 |
9 | public int insertBatch(List list);
10 |
11 | public int deleteByPostid(String postid);
12 |
13 | public List getTagsByPost(String postid);
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/jsp/common/header.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/js/backend/admin.upload.js:
--------------------------------------------------------------------------------
1 | zblog.register("zblog.upload");
2 |
3 | zblog.upload.remove=function(uploadid){
4 | $.ajax({
5 | type:"DELETE",
6 | url:zblog.getDomainLink("uploads/"+uploadid),
7 | dataType:"json",
8 | success:function(data){
9 | if(data&&data.success){
10 | window.location.reload();
11 | }else{
12 | alert(data.msg);
13 | }
14 | }
15 | });
16 | }
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/constants/CommentConstants.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.constants;
2 |
3 | public class CommentConstants{
4 | private CommentConstants(){
5 | }
6 |
7 | /* 评论状态 */
8 | public static final String TYPE_WAIT = "wait";
9 | public static final String TYPE_APPROVE = "approve";
10 | public static final String TYPE_REJECT = "reject";
11 | public static final String TYPE_TRASH = "trash";
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/jsp/common/footer.jsp:
--------------------------------------------------------------------------------
1 | <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 |
9 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/tag/FirstTag.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.tag;
2 |
3 | import javax.servlet.jsp.JspException;
4 | import javax.servlet.jsp.tagext.TagSupport;
5 |
6 | public class FirstTag extends AbstartTagSupport{
7 | private static final long serialVersionUID = 1L;
8 |
9 | @Override
10 | public int doStartTag() throws JspException{
11 | setPageAttribute(1);
12 | return TagSupport.EVAL_BODY_INCLUDE;
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/help/help.css:
--------------------------------------------------------------------------------
1 | .wrapper{width: 370px;margin: 10px auto;zoom: 1;}
2 | .tabbody{height: 360px;}
3 | .tabbody .panel{width:100%;height: 360px;position: absolute;background: #fff;}
4 | .tabbody .panel h1{font-size:26px;margin: 5px 0 0 5px;}
5 | .tabbody .panel p{font-size:12px;margin: 5px 0 0 5px;}
6 | .tabbody table{width:90%;line-height: 20px;margin: 5px 0 0 5px;;}
7 | .tabbody table thead{font-weight: bold;line-height: 25px;}
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/entity/Tag.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.entity;
2 |
3 | public class Tag extends BaseEntity{
4 | private String name;
5 | private String postid;
6 |
7 | public String getName(){
8 | return name;
9 | }
10 |
11 | public void setName(String name){
12 | this.name = name;
13 | }
14 |
15 | public String getPostid(){
16 | return postid;
17 | }
18 |
19 | public void setPostid(String postid){
20 | this.postid = postid;
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/freemarker/FreeMarkerException.java:
--------------------------------------------------------------------------------
1 | package com.zblog.service.freemarker;
2 |
3 | /**
4 | *
5 | * freemarker静态化异常
6 | *
7 | *
8 | * @author zhou
9 | *
10 | */
11 | public class FreeMarkerException extends Exception{
12 | private static final long serialVersionUID = 1L;
13 |
14 | public FreeMarkerException(String msg){
15 | super(msg);
16 | }
17 |
18 | public FreeMarkerException(String msg, Throwable t){
19 | super(msg, t);
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/js/backend/admin.link.js:
--------------------------------------------------------------------------------
1 | zblog.register("zblog.link");
2 |
3 | zblog.link.remove=function(linkid){
4 | $.ajax({
5 | type:"DELETE",
6 | url:zblog.getDomainLink("links/"+linkid),
7 | dataType:"json",
8 | success:function(data){
9 | if(data&&data.success){
10 | window.location.reload();
11 | }else{
12 | alert(data.msg);
13 | }
14 | }
15 | });
16 | }
17 |
18 | zblog.link.edit=function(linkid){
19 | window.location.href=zblog.getDomainLink("links/edit?lid="+linkid);
20 | }
--------------------------------------------------------------------------------
/src/main/webapp/resource/js/backend/admin.user.js:
--------------------------------------------------------------------------------
1 | zblog.register("zblog.user");
2 |
3 | zblog.user.remove=function(userid){
4 | $.ajax({
5 | type:"DELETE",
6 | url:zblog.getDomainLink("users/"+userid),
7 | dataType:"json",
8 | success:function(data){
9 | if(data&&data.success){
10 | window.location.reload();
11 | }else{
12 | alert(data.msg);
13 | }
14 | }
15 | });
16 | }
17 |
18 | zblog.user.edit=function(userid){
19 | window.location.href=zblog.getDomainLink("users/edit?uid="+userid);
20 | }
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/backend/form/validator/CategoryFormValidator.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.backend.form.validator;
2 |
3 | import com.zblog.core.dal.entity.Category;
4 | import com.zblog.core.plugin.JMap;
5 | import com.zblog.core.util.StringUtils;
6 |
7 | public class CategoryFormValidator{
8 |
9 | public static JMap validateInsert(Category category){
10 | JMap form = JMap.create();
11 | if(StringUtils.isBlank(category.getName())){
12 | form.put("msg", "分类名称不能为空");
13 | }
14 |
15 | return form;
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/lucene/LuceneException.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.lucene;
2 | import org.springframework.dao.DataAccessException;
3 |
4 | /**
5 | * Lucene索引操作异常,此处继承spring的dao异常
6 | *
7 | * @author zhou
8 | *
9 | */
10 | public class LuceneException extends DataAccessException{
11 |
12 | private static final long serialVersionUID = 1L;
13 |
14 | public LuceneException(String msg){
15 | super(msg);
16 | }
17 |
18 | public LuceneException(String msg, Throwable t){
19 | super(msg, t);
20 | }
21 |
22 | }
--------------------------------------------------------------------------------
/src/main/webapp/resource/bootstrap-3.3.1/js/npm.js:
--------------------------------------------------------------------------------
1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
2 | require('../../js/transition.js')
3 | require('../../js/alert.js')
4 | require('../../js/button.js')
5 | require('../../js/carousel.js')
6 | require('../../js/collapse.js')
7 | require('../../js/dropdown.js')
8 | require('../../js/modal.js')
9 | require('../../js/tooltip.js')
10 | require('../../js/popover.js')
11 | require('../../js/scrollspy.js')
12 | require('../../js/tab.js')
13 | require('../../js/affix.js')
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/support/WebContextFactory.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.support;
2 |
3 | public class WebContextFactory{
4 |
5 | private static final ThreadLocal WEB_CONTEXT_HOLDER = new ThreadLocal();
6 |
7 | private WebContextFactory(){
8 | }
9 |
10 | public static WebContext get(){
11 | return WEB_CONTEXT_HOLDER.get();
12 | }
13 |
14 | public static void set(WebContext context){
15 | WEB_CONTEXT_HOLDER.set(context);
16 | }
17 |
18 | public static void remove(){
19 | WEB_CONTEXT_HOLDER.set(null);
20 | }
21 |
22 | }
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/third-party/highcharts/modules/heatmap.js:
--------------------------------------------------------------------------------
1 | (function(b){var k=b.seriesTypes,l=b.each;k.heatmap=b.extendClass(k.map,{colorKey:"z",useMapGeometry:!1,pointArrayMap:["y","z"],translate:function(){var c=this,b=c.options,i=Number.MAX_VALUE,j=Number.MIN_VALUE;c.generatePoints();l(c.data,function(a){var e=a.x,f=a.y,d=a.z,g=(b.colsize||1)/2,h=(b.rowsize||1)/2;a.path=["M",e-g,f-h,"L",e+g,f-h,"L",e+g,f+h,"L",e-g,f+h,"Z"];a.shapeType="path";a.shapeArgs={d:c.translatePath(a.path)};typeof d==="number"&&(d>j?j=d:d model = getPagination().getModel();
14 |
15 | if(model.getPageIndex() > 1){
16 | setPageAttribute(model.getTotalPage());
17 | return TagSupport.EVAL_BODY_INCLUDE;
18 | }else{
19 | return TagSupport.SKIP_BODY;
20 | }
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/tag/PrevTag.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.tag;
2 |
3 | import javax.servlet.jsp.JspException;
4 | import javax.servlet.jsp.tagext.TagSupport;
5 |
6 | import com.zblog.core.plugin.PageModel;
7 |
8 | public class PrevTag extends AbstartTagSupport{
9 | private static final long serialVersionUID = 1L;
10 |
11 | @Override
12 | public int doStartTag() throws JspException{
13 | PageModel> model = getPagination().getModel();
14 |
15 | if(model.getPageIndex() > 1){
16 | setPageAttribute(model.getPageIndex() - 1);
17 | return TagSupport.EVAL_BODY_INCLUDE;
18 | }else{
19 | return TagSupport.SKIP_BODY;
20 | }
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/zdialog/alert.js:
--------------------------------------------------------------------------------
1 | zdialog={
2 | _create:function(){
3 | var _mask=document.createElement("div");
4 | _mask.setAttribute("class","alert_mask");
5 | _mask.style.width = $(document).width()+"px";
6 | _mask.style.height = $(document).height()+"px";
7 | _mask.style.display = "block";
8 | document.body.appendChild(_mask);
9 | },
10 | show:function(id){
11 | this._create();
12 | var box=$("#"+id);
13 | box.css("top",($(window).height()-box.height())/2);
14 | box.css("left",($(window).width()-box.width())/2);
15 | box.show();
16 | },
17 | hide:function(id){
18 | $(".alert_mask").remove();
19 | $("#"+id).hide();
20 | }
21 | }
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/tag/NextTag.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.tag;
2 |
3 | import javax.servlet.jsp.JspException;
4 | import javax.servlet.jsp.tagext.TagSupport;
5 |
6 | import com.zblog.core.plugin.PageModel;
7 |
8 | public class NextTag extends AbstartTagSupport{
9 | private static final long serialVersionUID = 1L;
10 |
11 | @Override
12 | public int doStartTag() throws JspException{
13 | PageModel> model = getPagination().getModel();
14 |
15 | if(model.getPageIndex() < model.getTotalPage()){
16 | setPageAttribute(model.getPageIndex() + 1);
17 | return TagSupport.EVAL_BODY_INCLUDE;
18 | }else{
19 | return TagSupport.SKIP_BODY;
20 | }
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/third-party/webuploader/webuploader.css:
--------------------------------------------------------------------------------
1 | .webuploader-container {
2 | position: relative;
3 | }
4 | .webuploader-element-invisible {
5 | position: absolute !important;
6 | clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
7 | clip: rect(1px,1px,1px,1px);
8 | }
9 | .webuploader-pick {
10 | position: relative;
11 | display: inline-block;
12 | cursor: pointer;
13 | background: #00b7ee;
14 | padding: 10px 15px;
15 | color: #fff;
16 | text-align: center;
17 | border-radius: 3px;
18 | overflow: hidden;
19 | }
20 | .webuploader-pick-hover {
21 | background: #00a2d4;
22 | }
23 |
24 | .webuploader-pick-disable {
25 | opacity: 0.6;
26 | pointer-events:none;
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/listener/InitApplicationListener.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.listener;
2 |
3 | import javax.servlet.ServletContextEvent;
4 | import javax.servlet.ServletContextListener;
5 |
6 | import com.zblog.core.WebConstants;
7 |
8 | public class InitApplicationListener implements ServletContextListener{
9 |
10 | @Override
11 | public void contextInitialized(ServletContextEvent sce){
12 | WebConstants.APPLICATION_PATH = sce.getServletContext().getRealPath("/");
13 | /* 给log4j设置环境变量,必须要在jvm加载log4j.properties前设置 */
14 | System.setProperty("log4jHome", WebConstants.APPLICATION_PATH);
15 | }
16 |
17 | @Override
18 | public void contextDestroyed(ServletContextEvent sce){
19 |
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/resources/mybatis/OptionMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
10 |
11 |
14 |
15 |
16 | replace into options(id, name, value) values (#{id}, #{name}, #{value})
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/util/UrlUtil.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.util;
2 |
3 | import java.io.UnsupportedEncodingException;
4 | import java.net.URLDecoder;
5 | import java.net.URLEncoder;
6 |
7 | import com.zblog.core.Constants;
8 |
9 | public class UrlUtil{
10 |
11 | public static String encode(String url){
12 | try{
13 | return URLEncoder.encode(url, Constants.ENCODING_UTF_8.name());
14 | }catch(UnsupportedEncodingException e){
15 | return url;
16 | }
17 | }
18 |
19 | public static String decode(String url){
20 | try{
21 | return URLDecoder.decode(url, Constants.ENCODING_UTF_8.name());
22 | }catch(UnsupportedEncodingException e){
23 | return url;
24 | }
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/mapper/UploadMapper.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.mapper;
2 |
3 | import java.util.List;
4 |
5 | import org.apache.ibatis.annotations.Param;
6 |
7 | import com.zblog.core.dal.entity.Upload;
8 |
9 | public interface UploadMapper extends BaseMapper{
10 |
11 | List listByPostid(String postid);
12 |
13 | /**
14 | * 更新上传文件记录对应的文章ID
15 | *
16 | * @param postid
17 | * @param imgpaths
18 | * @return
19 | */
20 | public int updatePostid(@Param("postid") String postid, @Param("imgpaths") List imgpaths);
21 |
22 | /**
23 | * 将所有postid的记录置空,非删除记录
24 | *
25 | * @param postid
26 | */
27 | public void setNullPostid(String postid);
28 |
29 | public int deleteByPostid(String postid);
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/vo/PageVO.java:
--------------------------------------------------------------------------------
1 | package com.zblog.service.vo;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | import com.zblog.core.dal.entity.Post;
7 | import com.zblog.core.plugin.TreeItem;
8 |
9 | /**
10 | * 页面业务对象
11 | *
12 | * @author zhou
13 | *
14 | */
15 | public class PageVO extends Post implements TreeItem{
16 | private List children;
17 |
18 | public void setChildren(List children){
19 | this.children = children;
20 | }
21 |
22 | @Override
23 | public List getChildren(){
24 | return children;
25 | }
26 |
27 | @Override
28 | public void addChild(PageVO comment){
29 | if(children == null)
30 | setChildren(new ArrayList());
31 |
32 | getChildren().add(comment);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/backend/form/validator/MailFormValidator.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.backend.form.validator;
2 |
3 | import com.zblog.core.plugin.JMap;
4 | import com.zblog.core.util.StringUtils;
5 | import com.zblog.web.backend.form.MailOption;
6 |
7 | public class MailFormValidator{
8 |
9 | public static JMap validate(MailOption form){
10 | JMap result = JMap.create();
11 | if(StringUtils.isBlank(form.getHost())){
12 | result.put("host", "请输入host");
13 | }
14 |
15 | if(form.getPort() < 10){
16 | result.put("port", "请输入合法端口号");
17 | }
18 |
19 | if(StringUtils.isBlank(form.getUsername())){
20 | result.put("username", "请输入用户名");
21 | }
22 |
23 | if(StringUtils.isBlank(form.getPassword())){
24 | result.put("password", "请输入密码");
25 | }
26 |
27 | return result;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/js/backend/admin.comment.js:
--------------------------------------------------------------------------------
1 | zblog.register("zblog.comment");
2 |
3 | zblog.comment.remove=function(commentid){
4 | $.ajax({
5 | type:"DELETE",
6 | url:zblog.getDomainLink("comments/"+commentid),
7 | dataType:"json",
8 | success:function(data){
9 | if(data&&data.success){
10 | window.location.reload();
11 | }else{
12 | alert(data.msg);
13 | }
14 | }
15 | });
16 | }
17 |
18 | zblog.comment.approve=function(commentid,status){
19 | $.ajax({
20 | type:"PUT",
21 | url:zblog.getDomainLink("comments/"+commentid),
22 | dataType:"json",
23 | data:{'status':status},
24 | success:function(data){
25 | if(data&&data.success){
26 | window.location.reload();
27 | }else{
28 | alert(data.msg);
29 | }
30 | }
31 | });
32 | }
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/LinkService.java:
--------------------------------------------------------------------------------
1 | package com.zblog.service;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.stereotype.Service;
5 |
6 | import com.zblog.core.dal.entity.Link;
7 | import com.zblog.core.dal.mapper.BaseMapper;
8 | import com.zblog.core.dal.mapper.LinkMapper;
9 | import com.zblog.core.plugin.PageModel;
10 |
11 | @Service
12 | public class LinkService extends BaseService{
13 | @Autowired
14 | private LinkMapper linkMapper;
15 |
16 | public PageModel list(int pageIndex,int pageSize){
17 | PageModel pageModel=new PageModel<>(pageIndex, pageSize);
18 | list(pageModel);
19 |
20 | return pageModel;
21 | }
22 |
23 | @Override
24 | protected BaseMapper getMapper(){
25 | return linkMapper;
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/entity/Upload.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.entity;
2 |
3 | /**
4 | * 文章、页面的元数据,如文章包含的图片等待
5 | *
6 | * @author zhou
7 | *
8 | */
9 | public class Upload extends BaseEntity{
10 | /* 对应文章id */
11 | private String postid;
12 | /* 图片名称 */
13 | private String name;
14 | /* 图片访问路径 */
15 | private String path;
16 |
17 | public String getPostid(){
18 | return postid;
19 | }
20 |
21 | public void setPostid(String postid){
22 | this.postid = postid;
23 | }
24 |
25 | public String getName(){
26 | return name;
27 | }
28 |
29 | public void setName(String name){
30 | this.name = name;
31 | }
32 |
33 | public String getPath(){
34 | return path;
35 | }
36 |
37 | public void setPath(String path){
38 | this.path = path;
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/mapper/CommentMapper.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.mapper;
2 |
3 | import java.util.List;
4 |
5 | import org.apache.ibatis.annotations.Param;
6 |
7 | import com.zblog.core.plugin.JMap;
8 | import com.zblog.service.vo.CommentVO;
9 |
10 | public interface CommentMapper extends BaseMapper{
11 |
12 | List listRecent();
13 |
14 | List listCountByGroupStatus();
15 |
16 | /**
17 | * 根据postid获取被批准的评论和指定creator的评论
18 | *
19 | * @param postid
20 | * @param creator
21 | * @return
22 | */
23 | List listByPost(@Param("postid") String postid, @Param("creator") String creator);
24 |
25 | /**
26 | * 更改comment的状态
27 | *
28 | * @param commentid
29 | */
30 | int setStatus(@Param("commentid") String commentid, @Param("status") String status);
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/backend/form/MailOption.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.backend.form;
2 |
3 | public class MailOption{
4 | private String host;
5 | private int port;
6 | private String username;
7 | private String password;
8 |
9 | public String getHost(){
10 | return host;
11 | }
12 |
13 | public void setHost(String host){
14 | this.host = host;
15 | }
16 |
17 | public int getPort(){
18 | return port;
19 | }
20 |
21 | public void setPort(int port){
22 | this.port = port;
23 | }
24 |
25 | public String getUsername(){
26 | return username;
27 | }
28 |
29 | public void setUsername(String username){
30 | this.username = username;
31 | }
32 |
33 | public String getPassword(){
34 | return password;
35 | }
36 |
37 | public void setPassword(String password){
38 | this.password = password;
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/mapper/BaseMapper.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.mapper;
2 |
3 | import java.util.List;
4 |
5 | import com.zblog.core.plugin.PageModel;
6 |
7 | public interface BaseMapper{
8 |
9 | /**
10 | * 新增记录
11 | *
12 | * @param t
13 | */
14 | public int insert(T t);
15 |
16 | /**
17 | * 根据ID查询记录
18 | *
19 | * @param id
20 | * @return
21 | */
22 | public T loadById(String id);
23 |
24 | public List list(PageModel model);
25 |
26 | public List list();
27 |
28 | /**
29 | * 根据ID删除记录
30 | *
31 | * @param id
32 | */
33 | public int deleteById(String id);
34 |
35 | /**
36 | * 更新记录
37 | *
38 | * @param t
39 | */
40 | public int update(T t);
41 |
42 | /**
43 | * 获取记录总数
44 | */
45 | public long count();
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/vo/MailVO.java:
--------------------------------------------------------------------------------
1 | package com.zblog.service.vo;
2 |
3 | import java.util.List;
4 |
5 | public class MailVO{
6 | private String from;
7 | private List to;
8 | private String subject;
9 | private String content;
10 |
11 | public String getFrom(){
12 | return from;
13 | }
14 |
15 | public void setFrom(String from){
16 | this.from = from;
17 | }
18 |
19 | public List getTo(){
20 | return to;
21 | }
22 |
23 | public void setTo(List to){
24 | this.to = to;
25 | }
26 |
27 | public String getSubject(){
28 | return subject;
29 | }
30 |
31 | public void setSubject(String subject){
32 | this.subject = subject;
33 | }
34 |
35 | public String getContent(){
36 | return content;
37 | }
38 |
39 | public void setContent(String content){
40 | this.content = content;
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/jsp/backend/common/pagination.jsp:
--------------------------------------------------------------------------------
1 | <%@ taglib prefix="page" uri="/WEB-INF/tld/pagination.tld" %>
2 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/Constants.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core;
2 |
3 | import java.nio.charset.Charset;
4 | import java.nio.charset.StandardCharsets;
5 | import java.util.Locale;
6 |
7 | public final class Constants{
8 | private Constants(){
9 | }
10 |
11 | /**
12 | * 程序默认字符集
13 | */
14 | public static final Charset ENCODING_UTF_8 = StandardCharsets.UTF_8;
15 | /**
16 | * 定义统一Locale.CHINA,程序中所有和Locale相关操作均默认使用此Locale
17 | */
18 | public static final Locale LOCALE_CHINA = Locale.CHINA;
19 |
20 | public static final String COOKIE_CONTEXT_ID = "c_id";
21 | public static final String COOKIE_USER_NAME = "un";
22 |
23 | /**
24 | * csrf表单提交token名称
25 | */
26 | public static final String CSRF_TOKEN = "CSRFToken";
27 | /**
28 | * csrf的cookie名称
29 | */
30 | public static final String COOKIE_CSRF_TOKEN = "x-csrf-token";
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/entity/Category.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.entity;
2 |
3 | public class Category extends BaseEntity{
4 | private String name;
5 | private int leftv;
6 | private int rightv;
7 | /* 是否显示 */
8 | private boolean visible = true;
9 |
10 | public String getName(){
11 | return name;
12 | }
13 |
14 | public void setName(String name){
15 | this.name = name;
16 | }
17 |
18 | public int getLeftv(){
19 | return leftv;
20 | }
21 |
22 | public void setLeftv(int leftv){
23 | this.leftv = leftv;
24 | }
25 |
26 | public int getRightv(){
27 | return rightv;
28 | }
29 |
30 | public void setRightv(int rightv){
31 | this.rightv = rightv;
32 | }
33 |
34 | public boolean isVisible(){
35 | return visible;
36 | }
37 |
38 | public void setVisible(boolean visible){
39 | this.visible = visible;
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/vo/PostVO.java:
--------------------------------------------------------------------------------
1 | package com.zblog.service.vo;
2 |
3 | import java.util.List;
4 |
5 | import com.zblog.core.dal.entity.Category;
6 | import com.zblog.core.dal.entity.Post;
7 | import com.zblog.core.dal.entity.User;
8 |
9 | /**
10 | * 文章业务对象
11 | *
12 | * @author zhou
13 | *
14 | */
15 | public class PostVO extends Post{
16 | private User user;
17 | private Category category;
18 | private List tags;
19 |
20 | public User getUser(){
21 | return user;
22 | }
23 |
24 | public void setUser(User user){
25 | this.user = user;
26 | }
27 |
28 | public Category getCategory(){
29 | return category;
30 | }
31 |
32 | public void setCategory(Category category){
33 | this.category = category;
34 | }
35 |
36 | public List getTags(){
37 | return tags;
38 | }
39 |
40 | public void setTags(List tags){
41 | this.tags = tags;
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/entity/Link.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.entity;
2 |
3 | public class Link extends BaseEntity{
4 | private String name;
5 | private String url;
6 | /* 注释 */
7 | private String notes;
8 | /* 可见性 */
9 | private boolean visible = true;
10 |
11 | public String getName(){
12 | return name;
13 | }
14 |
15 | public void setName(String name){
16 | this.name = name;
17 | }
18 |
19 | public String getUrl(){
20 | return url;
21 | }
22 |
23 | public void setUrl(String url){
24 | this.url = url;
25 | }
26 |
27 | public String getNotes(){
28 | return notes;
29 | }
30 |
31 | public void setNotes(String notes){
32 | this.notes = notes;
33 | }
34 |
35 | public boolean isVisible(){
36 | return visible;
37 | }
38 |
39 | public void setVisible(boolean visible){
40 | this.visible = visible;
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/entity/Option.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.entity;
2 |
3 | /**
4 | * 站点选项,id和name为一致
5 | *
6 | * @author zhou
7 | *
8 | */
9 | public class Option extends BaseEntity{
10 | private String id;
11 | private String name;
12 | private String value;
13 |
14 | public Option(){
15 | }
16 |
17 | public Option(String name, String value){
18 | this.name = name;
19 | this.value = value;
20 | }
21 |
22 | public String getId(){
23 | return id;
24 | }
25 |
26 | public void setId(String id){
27 | this.id = id;
28 | }
29 |
30 | public String getName(){
31 | return name;
32 | }
33 |
34 | public void setName(String name){
35 | this.name = name;
36 | }
37 |
38 | public String getValue(){
39 | return value;
40 | }
41 |
42 | public void setValue(String value){
43 | this.value = value;
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/backend/form/validator/LinkFormValidator.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.backend.form.validator;
2 |
3 | import com.zblog.core.dal.entity.Link;
4 | import com.zblog.core.plugin.JMap;
5 | import com.zblog.core.util.CommRegular;
6 | import com.zblog.core.util.StringUtils;
7 |
8 | public class LinkFormValidator{
9 |
10 | public static JMap validateInsert(Link link){
11 | JMap form = JMap.create();
12 | if(StringUtils.isBlank(link.getName())){
13 | form.put("name", "需填写链接名称");
14 | }else if(StringUtils.isBlank(link.getUrl()) || !link.getUrl().matches(CommRegular.DOMAIN)){
15 | form.put("url", "链接格式不正确");
16 | }
17 |
18 | return form;
19 | }
20 |
21 | public static JMap validateUpdate(Link link){
22 | JMap form = validateInsert(link);
23 | if(StringUtils.isBlank(link.getId())){
24 | form.put("msg", "ID不合法");
25 | }
26 |
27 | return form;
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/UserService.java:
--------------------------------------------------------------------------------
1 | package com.zblog.service;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.stereotype.Service;
5 |
6 | import com.zblog.core.dal.entity.User;
7 | import com.zblog.core.dal.mapper.BaseMapper;
8 | import com.zblog.core.dal.mapper.UserMapper;
9 | import com.zblog.core.plugin.PageModel;
10 |
11 | @Service
12 | public class UserService extends BaseService{
13 | @Autowired
14 | private UserMapper userMapper;
15 |
16 | public PageModel list(int pageIndex, int pageSize){
17 | PageModel page = new PageModel<>(pageIndex, pageSize);
18 | super.list(page);
19 | return page;
20 | }
21 |
22 | public User login(String username,String password){
23 | return userMapper.loadByNameAndPass(username, password);
24 | }
25 |
26 | @Override
27 | protected BaseMapper getMapper(){
28 | return userMapper;
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/entity/BaseEntity.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.entity;
2 |
3 | import java.util.Date;
4 |
5 | public class BaseEntity{
6 | private String id;
7 | private Date createTime;
8 | private String creator;
9 | private Date lastUpdate;
10 |
11 | public String getId(){
12 | return id;
13 | }
14 |
15 | public void setId(String id){
16 | this.id = id;
17 | }
18 |
19 | public Date getCreateTime(){
20 | return createTime;
21 | }
22 |
23 | public void setCreateTime(Date createTime){
24 | this.createTime = createTime;
25 | }
26 |
27 | public String getCreator(){
28 | return creator;
29 | }
30 |
31 | public void setCreator(String creator){
32 | this.creator = creator;
33 | }
34 |
35 | public Date getLastUpdate(){
36 | return lastUpdate;
37 | }
38 |
39 | public void setLastUpdate(Date lastUpdate){
40 | this.lastUpdate = lastUpdate;
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/spechars/spechars.html:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
8 |
14 |
15 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/util/CollectionUtils.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.util;
2 |
3 | import java.util.Collection;
4 | import java.util.Map;
5 | import java.util.Objects;
6 |
7 | public class CollectionUtils{
8 |
9 | private CollectionUtils(){
10 | }
11 |
12 | public static boolean isEmpty(Collection> collect){
13 | return collect == null || collect.isEmpty();
14 | }
15 |
16 | public static boolean isEmpty(Map, ?> map){
17 | return (map == null) || map.isEmpty();
18 | }
19 |
20 | public static boolean isEmpty(T[] array){
21 | return array == null || array.length == 0;
22 | }
23 |
24 | public static K getKeyByValue(Map map, V value){
25 | K result = null;
26 | for(Map.Entry entry : map.entrySet()){
27 | if(Objects.equals(entry.getValue(), value)){
28 | result = entry.getKey();
29 | break;
30 | }
31 | }
32 |
33 | return result;
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/tag/AbstartTagSupport.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.tag;
2 |
3 | import javax.servlet.jsp.JspException;
4 | import javax.servlet.jsp.tagext.TagSupport;
5 |
6 | abstract class AbstartTagSupport extends TagSupport{
7 | private static final long serialVersionUID = 1L;
8 |
9 | protected void setPageAttribute(int pageNumber){
10 |
11 | pageContext.setAttribute("pageNumber", pageNumber);
12 | pageContext.setAttribute("pageUrl", getPagination().getPageUrl() + pageNumber);
13 | }
14 |
15 | protected void clearPageAttribute(){
16 | pageContext.removeAttribute("pageNumber");
17 | pageContext.removeAttribute("pageUrl");
18 | }
19 |
20 | @Override
21 | public int doEndTag() throws JspException{
22 | clearPageAttribute();
23 | return super.doEndTag();
24 | }
25 |
26 | protected Pagination> getPagination(){
27 | return (Pagination>) findAncestorWithClass(this, Pagination.class);
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/WebConstants.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core;
2 |
3 | public class WebConstants{
4 | private WebConstants(){
5 | }
6 |
7 | /**
8 | * 站点标题前缀
9 | */
10 | public static final String PRE_TITLE_KEY = "ptitle";
11 |
12 | public static String APPLICATION_PATH;
13 | public static final String PREFIX = "/WEB-INF/jsp/";
14 | private static String DOMAIN;
15 |
16 | /**
17 | * 以/backend开头,非/login结尾
18 | */
19 | static final String BACKEND_URL = "^/backend.*(? list();
14 |
15 | Category loadByName(String name);
16 |
17 | /**
18 | * 获取指定分类的子分类
19 | *
20 | * @param category
21 | * @return
22 | */
23 | List loadChildren(Category category);
24 |
25 | void updateInsertLeftv(int rightv);
26 |
27 | void updateInsertRightv(int rightv);
28 |
29 | void delete(@Param("leftv") int leftv, @Param("rightv") int rightv);
30 |
31 | void updateDeleteLeftv(@Param("leftv") int leftv, @Param("length") int length);
32 |
33 | void updateDeleteRightv(@Param("rightv") int rightv, @Param("length") int length);
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/backend/form/PostOption.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.backend.form;
2 |
3 | /**
4 | * 文章设置表单
5 | *
6 | * @author zhou
7 | *
8 | */
9 | public class PostOption{
10 | /**
11 | * 博客页面至多显示数
12 | */
13 | private int maxshow;
14 | /**
15 | * 允许文章评论
16 | */
17 | private boolean allowComment;
18 | /**
19 | * 默认文章分类
20 | */
21 | private String defaultCategory;
22 |
23 | public int getMaxshow(){
24 | return maxshow;
25 | }
26 |
27 | public void setMaxshow(int maxshow){
28 | this.maxshow = maxshow;
29 | }
30 |
31 | public boolean isAllowComment(){
32 | return allowComment;
33 | }
34 |
35 | public void setAllowComment(boolean allowComment){
36 | this.allowComment= allowComment;
37 | }
38 |
39 | public String getDefaultCategory(){
40 | return defaultCategory;
41 | }
42 |
43 | public void setDefaultCategory(String defaultCategory){
44 | this.defaultCategory = defaultCategory;
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/constants/OptionConstants.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.constants;
2 |
3 | public final class OptionConstants{
4 | private OptionConstants(){
5 | }
6 |
7 | /**
8 | * 站点标题
9 | */
10 | public static final String TITLE = "title";
11 | /**
12 | * 站点副标题
13 | */
14 | public static final String SUBTITLE = "subtitle";
15 | /**
16 | * 站点描述
17 | */
18 | public static final String DESCRIPTION = "description";
19 | /**
20 | * 站点关键字
21 | */
22 | public static final String KEYWORDS = "keywords";
23 |
24 | /**
25 | * 前台每个页面最多显示数
26 | */
27 | public static final String MAXSHOW = "post_maxshow";
28 | /**
29 | * 文章默认分类ID
30 | */
31 | public static final String DEFAULT_CATEGORY_ID = "post_defaultCategory";
32 | /**
33 | * 是否允许文章评论
34 | */
35 | public static final String ALLOW_COMMENT = "post_allowComment";
36 |
37 | /**
38 | * 文章ID生产机制
39 | */
40 | public static final String POSTID = "postid";
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Zblog
2 | =======
3 |
4 | a java blog
5 | ---------------
6 |
7 | ### 核心功能
8 | 1. 文章/页面发布、分类、统计阅读次数。
9 | 2. 提供文章形式的RSS聚合。
10 | 3. 提供链接的添加、归类功能。
11 | 4. 附件上传添加管理功能。
12 | 5. 评论的管理,垃圾信息过滤功能。
13 | 6. 文章静态html页面生成。
14 | 7. 会员注册登录,后台管理功能。
15 | 8. lucene实现的站内搜索。
16 | 9. 防xss、csrf攻击。
17 | 10. 支持metaWeblog Api(支持windows live writer等离线博客编写)
18 | 11. WordPress站点xml文件导入功能(支持文章、附件及标签)
19 | 12. 文章标签tag功能、私密文章支持、文章归档
20 | 13. 文章markdown/富文本编辑支持、快速编辑
21 | 14. 响应式布局支持
22 |
23 | #### TODO
24 | * 评论邮件提醒、近期评论
25 |
26 | ### 技术选型
27 |
28 | #### 后端
29 | * Ioc容器 Spring
30 | * Web框架 SpringMVC
31 | * Orm框架 MyBatis
32 | * 安全权限 Shiro
33 | * 搜索工具 Lucene
34 | * 缓存 Ehcache
35 | * 静态化 FreeMarker
36 | * 视图模板 Jsp/Jstl/JspTaglib
37 | * 其它 Jsoup(xss过滤)、fastjson、IKAnalyzer
38 |
39 | #### 前端
40 | * jQuery js框架
41 | * Bootstrap 后台界面
42 | * UEditor/EpicEditor 编辑器
43 | * WebUploader 文件上传
44 | * font-wesome/icomoon.io 字体/图标
45 |
46 | ### 支持浏览器
47 | * 前台 ie6+
48 | * 后台 chrome/firefox/ie9+
49 |
50 | ### 作者博客
51 | (http://www.zhouhaocheng.cn)
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/vo/CommentVO.java:
--------------------------------------------------------------------------------
1 | package com.zblog.service.vo;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | import com.zblog.core.dal.entity.Comment;
7 | import com.zblog.core.dal.entity.Post;
8 | import com.zblog.core.plugin.TreeItem;
9 |
10 | /**
11 | * 评论业务对象
12 | *
13 | * @author zhou
14 | *
15 | */
16 | public class CommentVO extends Comment implements TreeItem{
17 | private Post post;
18 | private List children;
19 |
20 | public Post getPost(){
21 | return post;
22 | }
23 |
24 | public void setPost(Post post){
25 | this.post = post;
26 | }
27 |
28 | public void setChildren(List children){
29 | this.children = children;
30 | }
31 |
32 | @Override
33 | public List getChildren(){
34 | return children;
35 | }
36 |
37 | @Override
38 | public void addChild(CommentVO comment){
39 | if(children == null)
40 | setChildren(new ArrayList());
41 |
42 | getChildren().add(comment);
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/constants/PostConstants.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.constants;
2 |
3 | public class PostConstants{
4 | private PostConstants(){
5 | }
6 |
7 | /* 文章类型 */
8 | public static final String TYPE_POST = "post";
9 | public static final String TYPE_PAGE = "page";
10 | /* 文章评论状态 */
11 | public static final String COMMENT_OPEN = "open";
12 | public static final String COMMENT_CLOSE = "close";
13 | /* 文章状态,发布、回收站 */
14 | public static final String POST_PUBLISH = "publish";
15 | public static final String POST_SECRET = "secret";
16 | public static final String POST_TRASH = "trash";
17 |
18 | /* 所有创建者 */
19 | public static final String POST_CREATOR_ALL = "all";
20 |
21 | /**
22 | * 默认文章的parent
23 | */
24 | public static final String DEFAULT_PARENT = "Root";
25 |
26 | /* 文章摘要长度 (此为post表中excerpt的varchar(350)) */
27 | public static final int EXCERPT_LENGTH = 350;
28 |
29 | /**
30 | * 初始化postid
31 | */
32 | public static final int INIT_POST_ID = 5;
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/TagService.java:
--------------------------------------------------------------------------------
1 | package com.zblog.service;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 |
8 | import com.zblog.core.dal.entity.Tag;
9 | import com.zblog.core.dal.mapper.BaseMapper;
10 | import com.zblog.core.dal.mapper.TagMapper;
11 |
12 | @Service
13 | public class TagService extends BaseService{
14 | @Autowired
15 | private TagMapper tagMapper;
16 |
17 | public List listTagsByPost(String postid){
18 | return tagMapper.getTagsByPost(postid);
19 | }
20 |
21 | /**
22 | * 插入文章标签记录
23 | *
24 | * @param tag
25 | * @return
26 | */
27 | public int insertBatch(List tags){
28 | return tagMapper.insertBatch(tags);
29 | }
30 |
31 | public int deleteByPostid(String postid){
32 | return tagMapper.deleteByPostid(postid);
33 | }
34 |
35 | @Override
36 | protected BaseMapper getMapper(){
37 | return tagMapper;
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/table/edittip.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 表格删除提示
5 |
6 |
17 |
18 |
19 |
27 |
32 |
33 |
--------------------------------------------------------------------------------
/src/main/resources/mybatis/LinkMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
9 |
12 |
13 |
14 | insert into link(id,name,url,notes,visible,creator,createTime)
15 | values(#{id}, #{name}, #{url}, #{notes}, #{visible}, #{creator}, #{createTime})
16 |
17 |
18 |
19 | update link set name=#{name},url=#{url},notes=#{notes} where id=#{id}
20 |
21 |
22 |
23 | delete from link where id = #{id}
24 |
25 |
26 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/support/ServletRequestReaderArgumentsResolver.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.support;
2 |
3 | import javax.servlet.http.HttpServletRequest;
4 |
5 | import org.springframework.core.MethodParameter;
6 | import org.springframework.web.bind.support.WebDataBinderFactory;
7 | import org.springframework.web.context.request.NativeWebRequest;
8 | import org.springframework.web.method.support.HandlerMethodArgumentResolver;
9 | import org.springframework.web.method.support.ModelAndViewContainer;
10 |
11 | public class ServletRequestReaderArgumentsResolver implements HandlerMethodArgumentResolver{
12 |
13 | @Override
14 | public boolean supportsParameter(MethodParameter parameter){
15 | return parameter.getParameterType() == ServletRequestReader.class;
16 | }
17 |
18 | @Override
19 | public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
20 | NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception{
21 | return new ServletRequestReader(webRequest.getNativeRequest(HttpServletRequest.class));
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/template/template.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/BaseService.java:
--------------------------------------------------------------------------------
1 | package com.zblog.service;
2 |
3 | import java.util.List;
4 |
5 | import com.zblog.core.dal.entity.BaseEntity;
6 | import com.zblog.core.dal.mapper.BaseMapper;
7 | import com.zblog.core.plugin.PageModel;
8 |
9 | public abstract class BaseService{
10 |
11 | public int insert(T t){
12 | return getMapper().insert(t);
13 | }
14 |
15 | public T loadById(String id){
16 | return getMapper().loadById(id);
17 | }
18 |
19 | public void list(PageModel model){
20 | List result = getMapper().list(model);
21 | model.setContent(result);
22 | }
23 |
24 | public List list(){
25 | return getMapper().list();
26 | }
27 |
28 | public int update(T t){
29 | return getMapper().update(t);
30 | }
31 |
32 | public int deleteById(String id){
33 | return getMapper().deleteById(id);
34 | }
35 |
36 | public long count(){
37 | return getMapper().count();
38 | }
39 |
40 | protected abstract BaseMapper getMapper();
41 | }
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/jsp/backend/common/bootstrap.jsp:
--------------------------------------------------------------------------------
1 | <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 |
3 |
4 |
5 |
6 | ${g.title} Admin
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/lucene/DocConverter.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.lucene;
2 |
3 | import java.util.Arrays;
4 | import java.util.Collection;
5 |
6 | import org.apache.lucene.document.Document;
7 | import org.apache.lucene.index.IndexableField;
8 |
9 | import com.zblog.core.plugin.JMap;
10 |
11 | public class DocConverter{
12 |
13 | private DocConverter(){
14 | }
15 |
16 | public static JMap convert(Document obj){
17 | JMap mc = JMap.create();
18 | for(IndexableField field : obj.getFields()){
19 | mc.put(field.name(), field.stringValue());
20 | }
21 |
22 | return mc;
23 | }
24 |
25 | public static JMap convert(Document obj, String... filters){
26 | return convert(obj, Arrays.asList(filters));
27 | }
28 |
29 | public static JMap convert(Document obj, Collection filters){
30 | JMap mc = JMap.create();
31 | for(IndexableField field : obj.getFields()){
32 | if(filters.contains(field.name()))
33 | continue;
34 | mc.put(field.name(), field.stringValue());
35 | }
36 |
37 | return mc;
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/util/IpUtils.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.util;
2 |
3 | import javax.servlet.http.HttpServletRequest;
4 |
5 | class IpUtils{
6 |
7 | private IpUtils(){
8 | }
9 |
10 | /**
11 | * 获取客户端真实IP
12 | *
13 | * @param request
14 | */
15 | public static String getIp(HttpServletRequest request){
16 | String ip = request.getHeader("x-forwarded-for");
17 | if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
18 | ip = request.getHeader("Proxy-Client-IP");
19 | }
20 | if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
21 | ip = request.getHeader("WL-Proxy-Client-IP");
22 | }
23 | if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
24 | ip = request.getHeader("X-Real-IP");
25 | }
26 | if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
27 | ip = request.getRemoteAddr();
28 | }
29 |
30 | // 多级反向代理检测
31 | if(ip != null && ip.indexOf(",") > 0){
32 | ip = ip.trim().split(",")[0];
33 | }
34 |
35 | return ip;
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/music/music.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 插入音乐
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
19 |
20 |
21 |
22 |
31 |
32 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/util/IdGenerator.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.util;
2 |
3 | import java.util.UUID;
4 |
5 | public class IdGenerator{
6 |
7 | private IdGenerator(){
8 | }
9 |
10 | private static String digits(long val, int digits){
11 | long hi = 1L << (digits * 4);
12 | return NumberUtils.toString(hi | (val & (hi - 1)), NumberUtils.MAX_RADIX).substring(1);
13 | }
14 |
15 | /**
16 | * 以62进制(字母加数字)生成19位UUID,最短的UUID
17 | *
18 | * @return
19 | */
20 | public static String uuid19(){
21 | UUID uuid = UUID.randomUUID();
22 | StringBuilder sb = new StringBuilder();
23 | sb.append(digits(uuid.getMostSignificantBits() >> 32, 8));
24 | sb.append(digits(uuid.getMostSignificantBits() >> 16, 4));
25 | sb.append(digits(uuid.getMostSignificantBits(), 4));
26 | sb.append(digits(uuid.getLeastSignificantBits() >> 48, 4));
27 | sb.append(digits(uuid.getLeastSignificantBits(), 12));
28 | return sb.toString();
29 | }
30 |
31 | public static String uuid32(){
32 | UUID uuid = UUID.randomUUID();
33 | return uuid.toString().replaceAll("-", "");
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/template/template.css:
--------------------------------------------------------------------------------
1 | .wrap{ padding: 5px;font-size: 14px;}
2 | .left{width:425px;float: left;}
3 | .right{width:160px;border: 1px solid #ccc;float: right;padding: 5px;margin-right: 5px;}
4 | .right .pre{height: 332px;overflow-y: auto;}
5 | .right .preitem{border: white 1px solid;margin: 5px 0;padding: 2px 0;}
6 | .right .preitem:hover{background-color: lemonChiffon;cursor: pointer;border: #ccc 1px solid;}
7 | .right .preitem img{display: block;margin: 0 auto;width:100px;}
8 | .clear{clear: both;}
9 | .top{height:26px;line-height: 26px;padding: 5px;}
10 | .bottom{height:320px;width:100%;margin: 0 auto;}
11 | .transparent{ background: url("images/bg.gif") repeat;}
12 | .bottom table tr td{border:1px dashed #ccc;}
13 | #colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;}
14 | .border_style1{padding:2px;border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;}
15 | p{margin: 5px 0}
16 | table{clear:both;margin-bottom:10px;border-collapse:collapse;word-break:break-all;}
17 | li{clear:both}
18 | ol{padding-left:40px; }
--------------------------------------------------------------------------------
/src/main/resources/mybatis/TagMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
9 |
10 |
13 |
14 |
15 | insert into tag(id,name,postid,createTime) values
16 |
17 | (#{item.id}, #{item.name}, #{item.postid}, #{item.createTime})
18 |
19 |
20 |
21 |
22 | delete from tag where postid=#{postid}
23 |
24 |
25 |
26 | delete from tag where id=#{id}
27 |
28 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/backend/form/validator/LoginFormValidator.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.backend.form.validator;
2 |
3 | import com.zblog.core.plugin.JMap;
4 | import com.zblog.core.util.CommRegular;
5 | import com.zblog.core.util.StringUtils;
6 | import com.zblog.web.backend.form.LoginForm;
7 |
8 | public class LoginFormValidator{
9 | private static String guard;
10 |
11 | /**
12 | * 设置防止恶意登录token,由spring注入
13 | *
14 | * @param guard
15 | */
16 | public static void setLoginGuard(String guard){
17 | LoginFormValidator.guard = guard;
18 | }
19 |
20 | public static JMap validateLogin(LoginForm form){
21 | JMap result = JMap.create();
22 | /* 防止用户恶意登录 */
23 | if(!guard.equals(form.getGuard())){
24 | result.put("msg", "请不要尝试登录了!");
25 | }else if(StringUtils.isBlank(form.getUsername()) || !form.getUsername().matches(CommRegular.USERNAME)){
26 | result.put("msg", "请输入正确的用户名");
27 | }else if(StringUtils.isBlank(form.getPassword()) || !form.getPassword().matches(CommRegular.PASSWD)){
28 | result.put("msg", "密码输入有误");
29 | }
30 |
31 | return result;
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/feed/ArticleAdapter.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.feed;
2 |
3 | import java.util.Date;
4 |
5 | import com.zblog.core.feed.Channel.Article;
6 | import com.zblog.service.vo.PostVO;
7 |
8 | public class ArticleAdapter implements Article{
9 | private PostVO post;
10 |
11 | public ArticleAdapter(PostVO post){
12 | this.post = post;
13 | }
14 |
15 | @Override
16 | public String getTitle(){
17 | return post.getTitle();
18 | }
19 |
20 | @Override
21 | public String getLink(){
22 | return "/posts/" + post.getId();
23 | }
24 |
25 | @Override
26 | public String getCategory(){
27 | return post.getCategory().getName();
28 | }
29 |
30 | @Override
31 | public String getAuthor(){
32 | return post.getUser().getNickName();
33 | }
34 |
35 | @Override
36 | public String getDescription(){
37 | return post.getExcerpt();
38 | }
39 |
40 | @Override
41 | public String getContent(){
42 | return post.getContent();
43 | }
44 |
45 | @Override
46 | public Date getPubDate(){
47 | return post.getCreateTime();
48 | }
49 |
50 | @Override
51 | public String getGuid(){
52 | return getLink();
53 | }
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/front/controller/TagController.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.front.controller;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.stereotype.Controller;
5 | import org.springframework.ui.Model;
6 | import org.springframework.web.bind.annotation.PathVariable;
7 | import org.springframework.web.bind.annotation.RequestMapping;
8 | import org.springframework.web.bind.annotation.RequestMethod;
9 | import org.springframework.web.bind.annotation.RequestParam;
10 |
11 | import com.zblog.biz.PostManager;
12 | import com.zblog.core.WebConstants;
13 |
14 | @Controller
15 | @RequestMapping("/tags")
16 | public class TagController{
17 | @Autowired
18 | private PostManager postManager;
19 |
20 | @RequestMapping(value = "/{tagName}", method = RequestMethod.GET)
21 | public String post(@PathVariable("tagName") String tagName,
22 | @RequestParam(value = "page", defaultValue = "1") int page, Model model){
23 | model.addAttribute("page", postManager.listByTag(tagName, page, 10));
24 |
25 | model.addAttribute("tag", tagName);
26 | model.addAttribute(WebConstants.PRE_TITLE_KEY, tagName);
27 | return "index";
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/backend/form/LoginForm.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.backend.form;
2 |
3 | public class LoginForm{
4 | private String username;
5 | private String password;
6 | private boolean remeber;
7 | /* 防止后台暴力破解的字段 */
8 | private String guard;
9 | private String redirectURL;
10 |
11 | public String getUsername(){
12 | return username;
13 | }
14 |
15 | public void setUsername(String username){
16 | this.username = username;
17 | }
18 |
19 | public String getPassword(){
20 | return password;
21 | }
22 |
23 | public void setPassword(String password){
24 | this.password = password;
25 | }
26 |
27 | public boolean isRemeber(){
28 | return remeber;
29 | }
30 |
31 | public void setRemeber(boolean remeber){
32 | this.remeber = remeber;
33 | }
34 |
35 | public String getGuard(){
36 | return guard;
37 | }
38 |
39 | public void setGuard(String guard){
40 | this.guard = guard;
41 | }
42 |
43 | public String getRedirectURL(){
44 | return redirectURL;
45 | }
46 |
47 | public void setRedirectURL(String redirectURL){
48 | this.redirectURL = redirectURL;
49 | }
50 |
51 | }
52 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/zdialog/alert.css:
--------------------------------------------------------------------------------
1 | .zdialog{left:460px;top:30px;display:none;position: fixed;z-index: 1000;min-height: 110px;background-color: #FFFFFF;border: 5px solid #B2B2B2;padding-bottom: 10px;text-align: left;min-width: 418px;z-index: 1000;}
2 | .zdialog .zheader{color: #666666;background-color: #F6F6F6;border-bottom: 1px solid #E8E8E8;height: 37px;line-height: 37px;}
3 | .zdialog .zheader .title{margin:0px;cursor: move;font-size: 14px;padding-left: 15px;text-shadow: 1px 1px 0 #E8E8E8;line-height: 37px;}
4 | .zheader .toclose{height: 20px;position: absolute;right: 8px;top: 8px;width: 20px;background: url("image/ico.png") no-repeat scroll -20px 0;display: block;overflow: hidden;text-indent: -999em;}
5 | .zdialog .zcontent{color: #666666;padding-bottom: 4px;text-align: center;padding: 16px 30px 4px;}
6 | .zdialog .zfooter{margin-left: 0;padding: 10px 0;text-align: center;}
7 | .zdialog .zfooter input.zbutton{display: inline-block;font-size: 14px;height: 39px;line-height: 37px;text-align: center;text-shadow: 0 1px 0 #FFFFFF;width: 109px;background-image: url("image/alert_btn.png");border-width: 0px;cursor: pointer;}
8 |
9 | .alert_mask{background:#000000;position:absolute;left:0px;top:0px;display:none;z-index:999;filter:alpha(opacity=50);opacity:0.5 !important; }
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/backend/form/GeneralOption.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.backend.form;
2 |
3 | /**
4 | * 默认设置表单
5 | *
6 | * @author zhou
7 | *
8 | */
9 | public class GeneralOption{
10 | private String title;
11 | private String subtitle;
12 | private String description;
13 | private String keywords;
14 | private String weburl;
15 |
16 | public String getTitle(){
17 | return title;
18 | }
19 |
20 | public void setTitle(String title){
21 | this.title = title;
22 | }
23 |
24 | public String getSubtitle(){
25 | return subtitle;
26 | }
27 |
28 | public void setSubtitle(String subtitle){
29 | this.subtitle = subtitle;
30 | }
31 |
32 | public String getDescription(){
33 | return description;
34 | }
35 |
36 | public void setDescription(String description){
37 | this.description = description;
38 | }
39 |
40 | public String getKeywords(){
41 | return keywords;
42 | }
43 |
44 | public void setKeywords(String keywords){
45 | this.keywords = keywords;
46 | }
47 |
48 | public String getWeburl(){
49 | return weburl;
50 | }
51 |
52 | public void setWeburl(String weburl){
53 | this.weburl = weburl;
54 | }
55 |
56 | }
57 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/util/CommRegular.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.util;
2 |
3 | /**
4 | * 通用正则表达式
5 | *
6 | * @author zhou
7 | *
8 | */
9 | public class CommRegular{
10 | /**
11 | * 首位不为数字,字符长度为2-15的用户名
12 | */
13 | public static final String USERNAME = "^[a-zA-Z\u4e00-\u9fa5][_a-zA-Z0-9\u4e00-\u9fa5]{1,14}$";
14 |
15 | /**
16 | * 必须要包含数字和大小写字母6-16位密码
17 | *
18 | * - ^开始标记
19 | * - (?=.*\\d) 保证字符串包含一个数字
20 | * - (?=.*[a-z]) 保证字符串一个小写字母
21 | * - (?=.*[A-Z]) 保证字符串包含一个大写字母
22 | * - [0-9a-zA-Z]{6,16} 保证字符串长度为6-16
23 | * - $结束标记
24 | *
25 | */
26 | public static final String COMPLEX_PASSWD = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{6,16}$";
27 |
28 | public static final String PASSWD = "^\\S{6,16}$";
29 |
30 | /**
31 | * md5正则
32 | */
33 | public static final String MD5 = "[0-9a-z-A-Z]{32}";
34 |
35 | /**
36 | * 邮箱正则
37 | */
38 | public static final String EMAIL = "^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$";
39 |
40 | /**
41 | * http域名正则,暂不支持ip
42 | */
43 | public static final String DOMAIN = "^https?://[a-zA-Z0-9\\._-]+(:\\d{2,4})?(/\\w+/?)?$";
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/OptionsService.java:
--------------------------------------------------------------------------------
1 | package com.zblog.service;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.stereotype.Service;
5 |
6 | import com.zblog.core.dal.entity.Option;
7 | import com.zblog.core.dal.mapper.BaseMapper;
8 | import com.zblog.core.dal.mapper.OptionMapper;
9 |
10 | @Service
11 | public class OptionsService extends BaseService{
12 | @Autowired
13 | private OptionMapper optionMapper;
14 |
15 | public String getOptionValue(String name){
16 | return optionMapper.getOptionValue(name);
17 | }
18 |
19 | /**
20 | * 以select .. for update,注意此方法须在事务中执行
21 | *
22 | * @param name
23 | * @return
24 | */
25 | public String getOptionValueForUpdate(String name){
26 | return optionMapper.getOptionValueForUpdate(name);
27 | }
28 |
29 | /**
30 | * 此处为MySQL的replace into, 注意这需要主键id一致
31 | *
32 | * @param name
33 | * @param value
34 | */
35 | public void updateOptionValue(String name, String value){
36 | Option option = new Option(name, value);
37 | option.setId(name);
38 | optionMapper.update(option);
39 | }
40 |
41 | @Override
42 | protected BaseMapper getMapper(){
43 | return optionMapper;
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/jsp/common/head.jsp:
--------------------------------------------------------------------------------
1 | <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 |
3 |
4 |
5 |
6 |
7 | ${ptitle}${ptitle!=null?' | ':''}${g.title}
8 |
9 |
10 |
11 |
12 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/freemarker/ftl/post.html:
--------------------------------------------------------------------------------
1 | <#if post.type="post">
2 |
9 | #if>
10 |
11 |
12 |
${post.title}
13 |
${post.content}
14 |
15 |
34 |
35 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/support/WebContext.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.support;
2 |
3 | import javax.servlet.http.HttpServletRequest;
4 | import javax.servlet.http.HttpServletResponse;
5 |
6 | import com.zblog.core.dal.entity.User;
7 |
8 | public class WebContext{
9 | private String sid;
10 | private int loginId;
11 | private User user;
12 | private HttpServletRequest request;
13 | private HttpServletResponse response;
14 |
15 | public WebContext(HttpServletRequest request, HttpServletResponse response){
16 | this.request = request;
17 | this.response = response;
18 | }
19 |
20 | public String getSid(){
21 | return sid;
22 | }
23 |
24 | public void setSid(String sid){
25 | this.sid = sid;
26 | }
27 |
28 | public int getLoginId(){
29 | return loginId;
30 | }
31 |
32 | public void setLoginId(int loginId){
33 | this.loginId = loginId;
34 | }
35 |
36 | public User getUser(){
37 | return user;
38 | }
39 |
40 | public void setUser(User user){
41 | this.user = user;
42 | }
43 |
44 | public boolean isLogon(){
45 | return user != null;
46 | }
47 |
48 | public HttpServletRequest getRequest(){
49 | return request;
50 | }
51 |
52 | public HttpServletResponse getResponse(){
53 | return response;
54 | }
55 |
56 | }
57 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/js/backend/admin.category.js:
--------------------------------------------------------------------------------
1 | zblog.register("zblog.category");
2 | $(function(){
3 | $.ajax({
4 | type:"GET",
5 | url:zblog.getDomainLink("categorys/index"),
6 | dataType:"json",
7 | success:function(data){
8 | if(!data) return ;
9 | $('#tree').treeview({data:data,nodeIcon:"glyphicon glyphicon-star-empty"});
10 | }
11 | });
12 | });
13 |
14 | zblog.category.insert=function(){
15 | var newCategory=$("#newCategory").val();
16 | if(!newCategory) return ;
17 |
18 | var select = $("#tree .node-selected");
19 | $.ajax({
20 | type:"POST",
21 | url:zblog.getDomainLink("categorys"),
22 | dataType:"json",
23 | data:{parent:select.text(),name:newCategory},
24 | success:function(msg){
25 | if(msg&&msg.success){
26 | window.location.reload();
27 | zdialog.hide('insert-box');
28 | }else{
29 | alert(msg.msg);
30 | }
31 | }
32 | });
33 | }
34 |
35 | zblog.category.remove=function(){
36 | var select = $("#tree .node-selected").text();
37 | if(!select) return ;
38 |
39 | $.ajax({
40 | type:"DELETE",
41 | url:zblog.getDomainLink("categorys/"+select),
42 | dataType:"json",
43 | success:function(msg){
44 | if(msg&&msg.success){
45 | window.location.reload();
46 | }else{
47 | alert("删除失败");
48 | }
49 | }
50 | });
51 | }
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/util/PostTagHelper.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.util;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Arrays;
5 | import java.util.Collections;
6 | import java.util.List;
7 |
8 | import com.zblog.core.dal.entity.Post;
9 | import com.zblog.core.dal.entity.Tag;
10 |
11 | /**
12 | * Post标签工具类
13 | *
14 | * @author zhou
15 | *
16 | */
17 | public class PostTagHelper{
18 |
19 | private PostTagHelper(){
20 | }
21 |
22 | /**
23 | *
24 | * @param post
25 | * @param tagsByComma
26 | * 以逗号分隔的字符串
27 | * @param creator
28 | * @return
29 | */
30 | public static List from(Post post, String tagsByComma, String creator){
31 | return !StringUtils.isBlank(tagsByComma) ? from(post, Arrays.asList(tagsByComma.split(",")), creator) : Collections
32 | . emptyList();
33 | }
34 |
35 | public static List from(Post post, List tags, String creator){
36 | List list = new ArrayList<>();
37 | if(!CollectionUtils.isEmpty(tags)){
38 | for(String tag : tags){
39 | Tag t = new Tag();
40 | t.setId(IdGenerator.uuid19());
41 | t.setName(tag.trim());
42 | t.setCreateTime(post.getLastUpdate());
43 | t.setPostid(post.getId());
44 | t.setCreator(creator);
45 | list.add(t);
46 | }
47 | }
48 |
49 | return list;
50 | }
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/util/Threads.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.util;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | /**
7 | * 线程工具类
8 | *
9 | * @author zhou
10 | *
11 | */
12 | public class Threads {
13 | private Threads() {
14 | }
15 |
16 | /**
17 | * 获取当前调用方法调用栈
18 | *
19 | * @return
20 | */
21 | public static List getCallStack() {
22 | StackTraceElement[] ste = Thread.currentThread().getStackTrace();
23 | List result = new ArrayList<>(ste.length);
24 | for (int i = 0; i < ste.length; i++) {
25 | result.add(ste[i].getClassName() + "." + ste[i].getMethodName() + "(" + ste[i].getLineNumber() + ")");
26 | }
27 |
28 | return result;
29 | }
30 |
31 | /**
32 | * 执行obj的wait方法
33 | *
34 | * @param obj
35 | */
36 | public static void waitQuietly(Object obj) {
37 | try {
38 | obj.wait();
39 | } catch (InterruptedException e) {
40 | e.printStackTrace();
41 | }
42 | }
43 |
44 | public static void sleepQuietly(long millis) {
45 | try {
46 | Thread.sleep(millis);
47 | } catch (InterruptedException e) {
48 | e.printStackTrace();
49 | }
50 | }
51 |
52 | public static Throwable getRootCause(Throwable t) {
53 | Throwable cause = null;
54 | while ((cause = t.getCause()) != null) {
55 | t = cause;
56 | }
57 | return t;
58 | }
59 |
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/lucene/LuceneUtils.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.lucene;
2 |
3 | import java.io.IOException;
4 |
5 | import org.apache.lucene.analysis.TokenStream;
6 | import org.apache.lucene.document.FieldType;
7 | import org.apache.lucene.index.FieldInfo.IndexOptions;
8 |
9 | public class LuceneUtils{
10 |
11 | private LuceneUtils(){
12 | }
13 |
14 | public static FieldType directType(){
15 | FieldType directType = new FieldType();
16 | directType.setIndexed(true);
17 | directType.setIndexOptions(IndexOptions.DOCS_ONLY);
18 | directType.setStored(true);
19 |
20 | return directType;
21 | }
22 |
23 | public static FieldType searchType(){
24 | FieldType searchType = new FieldType();
25 | searchType.setIndexed(true);
26 | searchType.setStored(true);
27 | /* 设置分词 */
28 | searchType.setTokenized(true);
29 |
30 | return searchType;
31 | }
32 |
33 | public static FieldType storeType(){
34 | FieldType storeType = new FieldType();
35 | storeType.setStored(true);
36 | storeType.setIndexed(false);
37 |
38 | return storeType;
39 | }
40 |
41 | public static void closeQuietly(TokenStream stream){
42 | if(stream == null)
43 | return;
44 |
45 | try{
46 | stream.close();
47 | }catch(IOException e){
48 | e.printStackTrace();
49 | }
50 | }
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/filter/XssHttpServletRequestWrapper.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.filter;
2 |
3 | import javax.servlet.http.HttpServletRequest;
4 | import javax.servlet.http.HttpServletRequestWrapper;
5 |
6 | import org.springframework.web.util.HtmlUtils;
7 |
8 | /**
9 | * xss过滤包装器
10 | *
11 | * @author zhou
12 | *
13 | */
14 | class XssHttpServletRequestWrapper extends HttpServletRequestWrapper{
15 |
16 | public XssHttpServletRequestWrapper(HttpServletRequest request){
17 | super(request);
18 | }
19 |
20 | @Override
21 | public String getHeader(String name){
22 | String value = super.getHeader(name);
23 | return value == null ? null : cleanXSS(value);
24 | }
25 |
26 | @Override
27 | public String getParameter(String name){
28 | String value = super.getParameter(name);
29 | return value == null ? null : cleanXSS(value);
30 | }
31 |
32 | @Override
33 | public String[] getParameterValues(String name){
34 | String[] values = super.getParameterValues(name);
35 | if(values == null)
36 | return null;
37 |
38 | String[] result = new String[values.length];
39 | for(int i = 0; i < result.length; i++){
40 | result[i] = cleanXSS(values[i]);
41 | }
42 |
43 | return result;
44 | }
45 |
46 | private String cleanXSS(String value){
47 | return HtmlUtils.htmlEscape(value);
48 | }
49 |
50 | }
51 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/backend/form/validator/OptionFormValidator.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.backend.form.validator;
2 |
3 | import com.zblog.core.plugin.JMap;
4 | import com.zblog.core.util.StringUtils;
5 | import com.zblog.web.backend.form.GeneralOption;
6 | import com.zblog.web.backend.form.PostOption;
7 |
8 | public class OptionFormValidator{
9 |
10 | public static JMap validateGeneral(GeneralOption option){
11 | JMap form = JMap.create();
12 | if(StringUtils.isBlank(option.getTitle())){
13 | form.put("title", "需填写站点名称名称");
14 | }
15 | if(StringUtils.isBlank(option.getSubtitle())){
16 | form.put("subtitle", "需填写副标题");
17 | }
18 | if(StringUtils.isBlank(option.getDescription())){
19 | form.put("description", "需填写站点描述");
20 | }
21 | if(StringUtils.isBlank(option.getKeywords())){
22 | form.put("keywords", "需填写站点关键字");
23 | }
24 | if(StringUtils.isBlank(option.getWeburl())){
25 | form.put("weburl", "需填写网站url");
26 | }
27 |
28 | return form;
29 | }
30 |
31 | public static JMap validatePost(PostOption option){
32 | JMap form = JMap.create();
33 | if(option.getMaxshow() < 1){
34 | form.put("maxshow", "格式错误");
35 | }
36 |
37 | if(StringUtils.isBlank(option.getDefaultCategory())){
38 | form.put("defaultCategory", "默认分类格式错误");
39 | }
40 |
41 | return form;
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/preview/preview.html:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
40 |
--------------------------------------------------------------------------------
/src/main/resources/config/spring-service.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/src/main/resources/log4j.properties:
--------------------------------------------------------------------------------
1 | #######################################################################
2 | # Categories and levels
3 | #######################################################################
4 |
5 | log4j.rootLogger=debug,ConApp,FileApp
6 | log4j.logger.org.apache.ibatis = debug
7 | log4j.logger.org.apache.shiro = warn
8 | log4j.logger.org.mybatis.spring = warn
9 | log4j.logger.org.springframework = warn
10 | log4j.logger.net.sf.ehcache=info
11 |
12 |
13 | #######################################################################
14 | # Appenders
15 | #######################################################################
16 |
17 | # ConApp is set to be a ConsoleAppender.
18 | log4j.appender.ConApp=org.apache.log4j.ConsoleAppender
19 | # ConApp uses PatternLayout.
20 | log4j.appender.ConApp.layout=org.apache.log4j.PatternLayout
21 | # Define Pattern
22 | log4j.appender.ConApp.layout.ConversionPattern=%p %d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %c %m%n
23 |
24 | # FileApp
25 | #log4j.appender.FileApp=org.apache.log4j.RollingFileAppender
26 | log4j.appender.FileApp=org.apache.log4j.DailyRollingFileAppender
27 | log4j.appender.FileApp.File=${log4jHome}/log/log_
28 | log4j.appender.FileApp.DatePattern =yyyy-MM-dd'.log'
29 | log4j.appender.FileApp.layout=org.apache.log4j.PatternLayout
30 | log4j.appender.FileApp.layout.ConversionPattern=%p %d{yyyy/MM/dd HH:mm:ss} %5p %c{1}:%L - %m%n
31 | log4j.appender.FileApp.Append=true
--------------------------------------------------------------------------------
/src/main/webapp/resource/js/jscript.js:
--------------------------------------------------------------------------------
1 | $(function(){
2 | var menu_show=false;
3 | $("#menu_button").click(function(){
4 | if(menu_show){
5 | $("#header").animate({"right":0},500);
6 | $("#content").animate({"right":0},500,function(){
7 | $("#menu").hide();
8 | });
9 | }else{
10 | $("#menu").css("height",$(document).height()).show();
11 | $("#header").animate({"right":"70%"},500);
12 | $("#content").animate({"right":"70%"},500);
13 | }
14 |
15 | menu_show = !menu_show;
16 |
17 | return false;
18 | });
19 |
20 | $(window).bind('resize', function() {
21 | if($(window).width()>770&&menu_show){
22 | $("#header").css("right", 0);
23 | $("#content").css("right", 0);
24 | $("#menu").css("height","auto").show();
25 | }
26 | });
27 |
28 | var ie6=!-[1,]&&!window.XMLHttpRequest;
29 | if(ie6) return ;
30 |
31 | jQuery.easing.easeOutExpo = function (x, t, b, c, d) {
32 | return -c * ((t=t/d-1)*t*t*t - 1) + b;
33 | };
34 |
35 | var topBtn = $('#return_top');
36 | topBtn.hide();
37 | $(window).scroll(function () {
38 | if ($(this).scrollTop() > 100) {
39 | topBtn.fadeIn();
40 | } else {
41 | topBtn.fadeOut();
42 | }
43 | });
44 |
45 | topBtn.click(function () {
46 | $('body,html').animate({scrollTop: 0}, 1000, 'easeOutExpo');
47 | return false;
48 | });
49 | });
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/third-party/highcharts/modules/no-data-to-display.js:
--------------------------------------------------------------------------------
1 | /*
2 | Highcharts JS v3.0.6 (2013-10-04)
3 | Plugin for displaying a message when there is no data visible in chart.
4 |
5 | (c) 2010-2013 Highsoft AS
6 | Author: Øystein Moseng
7 |
8 | License: www.highcharts.com/license
9 | */
10 | (function(c){function f(){return!!this.points.length}function g(){this.hasData()?this.hideNoData():this.showNoData()}var d=c.seriesTypes,e=c.Chart.prototype,h=c.getOptions(),i=c.extend;i(h.lang,{noData:"No data to display"});h.noData={position:{x:0,y:0,align:"center",verticalAlign:"middle"},attr:{},style:{fontWeight:"bold",fontSize:"12px",color:"#60606a"}};d.pie.prototype.hasData=f;if(d.gauge)d.gauge.prototype.hasData=f;if(d.waterfall)d.waterfall.prototype.hasData=f;c.Series.prototype.hasData=function(){return this.dataMax!==
11 | void 0&&this.dataMin!==void 0};e.showNoData=function(a){var b=this.options,a=a||b.lang.noData,b=b.noData;if(!this.noDataLabel)this.noDataLabel=this.renderer.label(a,0,0,null,null,null,null,null,"no-data").attr(b.attr).css(b.style).add(),this.noDataLabel.align(i(this.noDataLabel.getBBox(),b.position),!1,"plotBox")};e.hideNoData=function(){if(this.noDataLabel)this.noDataLabel=this.noDataLabel.destroy()};e.hasData=function(){for(var a=this.series,b=a.length;b--;)if(a[b].hasData()&&!a[b].options.isInternal)return!0;
12 | return!1};e.callbacks.push(function(a){c.addEvent(a,"load",g);c.addEvent(a,"redraw",g)})})(Highcharts);
13 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/js/backend/zblog.admin.js:
--------------------------------------------------------------------------------
1 | if(typeof com=="undefined"){
2 | var zblog={};
3 | }
4 |
5 | //增加命名空间 使用方法:zblog.register('bbb.ccc','admin.zhou');
6 | zblog.register =function(){
7 | var result={},temp;
8 | for(var i=0;i0){
41 | csrfInput.val(csrfValue);
42 | }else{
43 | $(this).append("");
44 | }
45 | });
46 | });
47 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/backend/form/validator/PostFormValidator.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.backend.form.validator;
2 |
3 | import com.zblog.core.dal.constants.PostConstants;
4 | import com.zblog.core.dal.entity.Post;
5 | import com.zblog.core.plugin.JMap;
6 | import com.zblog.core.util.StringUtils;
7 |
8 | public class PostFormValidator{
9 |
10 | public static JMap validatePublish(Post post){
11 | return validatePost(post, true);
12 | }
13 |
14 | public static JMap validateUpdate(Post post){
15 | JMap form = validatePublish(post);
16 | if(StringUtils.isBlank(post.getId())){
17 | form.put("msg", "文章ID不合法");
18 | }
19 |
20 | return form;
21 | }
22 |
23 | public static JMap validateFastUpdate(Post post){
24 | JMap form = validatePost(post, false);
25 | if(StringUtils.isBlank(post.getId())){
26 | form.put("msg", "文章ID不合法");
27 | }
28 |
29 | return form;
30 | }
31 |
32 | private static JMap validatePost(Post post, boolean verifyContent){
33 | JMap form = JMap.create();
34 | if(StringUtils.isBlank(post.getTitle())){
35 | form.put("msg", "文章标题未填写");
36 | }else if(verifyContent && StringUtils.isBlank(post.getContent())){
37 | form.put("msg", "请填写文章内容");
38 | }else if(PostConstants.TYPE_POST.equals(post.getType()) && StringUtils.isBlank(post.getCategoryid())){
39 | form.put("msg", "请选择文章分类");
40 | }
41 |
42 | return form;
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/third-party/highcharts/modules/heatmap.src.js:
--------------------------------------------------------------------------------
1 | (function (Highcharts) {
2 | var seriesTypes = Highcharts.seriesTypes,
3 | each = Highcharts.each;
4 |
5 | seriesTypes.heatmap = Highcharts.extendClass(seriesTypes.map, {
6 | colorKey: 'z',
7 | useMapGeometry: false,
8 | pointArrayMap: ['y', 'z'],
9 | translate: function () {
10 | var series = this,
11 | options = series.options,
12 | dataMin = Number.MAX_VALUE,
13 | dataMax = Number.MIN_VALUE;
14 |
15 | series.generatePoints();
16 |
17 | each(series.data, function (point) {
18 | var x = point.x,
19 | y = point.y,
20 | value = point.z,
21 | xPad = (options.colsize || 1) / 2,
22 | yPad = (options.rowsize || 1) / 2;
23 |
24 | point.path = [
25 | 'M', x - xPad, y - yPad,
26 | 'L', x + xPad, y - yPad,
27 | 'L', x + xPad, y + yPad,
28 | 'L', x - xPad, y + yPad,
29 | 'Z'
30 | ];
31 |
32 | point.shapeType = 'path';
33 | point.shapeArgs = {
34 | d: series.translatePath(point.path)
35 | };
36 |
37 | if (typeof value === 'number') {
38 | if (value > dataMax) {
39 | dataMax = value;
40 | } else if (value < dataMin) {
41 | dataMin = value;
42 | }
43 | }
44 | });
45 |
46 | series.translateColors(dataMin, dataMax);
47 | },
48 |
49 | getBox: function () {}
50 |
51 | });
52 |
53 | }(Highcharts));
54 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/UploadService.java:
--------------------------------------------------------------------------------
1 | package com.zblog.service;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 |
8 | import com.zblog.core.dal.entity.Upload;
9 | import com.zblog.core.dal.mapper.BaseMapper;
10 | import com.zblog.core.dal.mapper.UploadMapper;
11 | import com.zblog.core.plugin.PageModel;
12 | import com.zblog.service.vo.UploadVO;
13 |
14 | @Service
15 | public class UploadService extends BaseService{
16 | @Autowired
17 | private UploadMapper uploadMapper;
18 |
19 | public PageModel list(int pageIndex, int pageSize){
20 | PageModel pageModel = new PageModel<>(pageIndex, pageSize);
21 | list(pageModel);
22 |
23 | return pageModel;
24 | }
25 |
26 | public List listByPostid(String postid){
27 | return uploadMapper.listByPostid(postid);
28 | }
29 |
30 | public void updatePostid(String postid, List imgpaths){
31 | uploadMapper.updatePostid(postid, imgpaths);
32 | }
33 |
34 | /**
35 | * 将所有postid的记录置空,非删除记录
36 | *
37 | * @param postid
38 | */
39 | public void setNullPostid(String postid){
40 | uploadMapper.setNullPostid(postid);
41 | }
42 |
43 | public void deleteByPostid(String postid){
44 | uploadMapper.deleteByPostid(postid);
45 | }
46 |
47 | @Override
48 | protected BaseMapper getMapper(){
49 | return uploadMapper;
50 | }
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/vo/OSInfo.java:
--------------------------------------------------------------------------------
1 | package com.zblog.service.vo;
2 |
3 | import javax.servlet.ServletContext;
4 |
5 | import com.zblog.web.support.WebContextFactory;
6 |
7 | /**
8 | * 系统信息
9 | *
10 | * @author zhou
11 | *
12 | */
13 | public class OSInfo{
14 | private String osName;
15 | private String osVersion;
16 | private String javaVersion;
17 | private String serverInfo;
18 | private long totalMemory;
19 |
20 | private OSInfo(){
21 | }
22 |
23 | public String getOsName(){
24 | return osName;
25 | }
26 |
27 | public String getOsVersion(){
28 | return osVersion;
29 | }
30 |
31 | public String getJavaVersion(){
32 | return javaVersion;
33 | }
34 |
35 | /**
36 | * 获取服务器信息
37 | *
38 | * @return
39 | */
40 | public String getServerInfo(){
41 | return serverInfo;
42 | }
43 |
44 | /**
45 | * 获取java进程内存大小,以M为单位
46 | *
47 | * @return
48 | */
49 | public long getTotalMemory(){
50 | return totalMemory;
51 | }
52 |
53 | public static OSInfo getCurrentOSInfo(){
54 | OSInfo instance = new OSInfo();
55 | instance.osName = System.getProperty("os.name");
56 | instance.osVersion = System.getProperty("os.version");
57 | instance.javaVersion = System.getProperty("java.version");
58 | ServletContext sc = WebContextFactory.get().getRequest().getServletContext();
59 | instance.serverInfo = sc.getServerInfo();
60 | instance.totalMemory = Runtime.getRuntime().totalMemory() / 1024 / 1024;
61 |
62 | return instance;
63 | }
64 |
65 | }
66 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/plugin/ApplicationContextUtil.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.plugin;
2 |
3 | import org.springframework.beans.BeansException;
4 | import org.springframework.context.ApplicationContext;
5 | import org.springframework.context.ApplicationContextAware;
6 |
7 | /**
8 | *
9 | * 获取spring bean的工具类
10 | *
11 | *
12 | * 注:spring-servlet.xml中的bean并不由ApplicationContext管理, 它由DispatcherServlet管理
13 | *
14 | *
15 | * @author zhou
16 | *
17 | */
18 | public class ApplicationContextUtil implements ApplicationContextAware{
19 | static ApplicationContext context;
20 |
21 | @Override
22 | public void setApplicationContext(ApplicationContext applicationContext) throws BeansException{
23 | context = applicationContext;
24 | }
25 |
26 | /**
27 | * 根据提供的bean名称得到相应的类
28 | *
29 | * @param name
30 | * bean名称
31 | */
32 | public static Object getBean(String name){
33 | return context.getBean(name);
34 | }
35 |
36 | /**
37 | * 根据提供的指定类型的类得到相应的类
38 | *
39 | * @param servName
40 | * bean名称
41 | */
42 | public static T getBean(Class clazz){
43 | return context.getBean(clazz);
44 | }
45 |
46 | /**
47 | * 根据提供的bean名称得到对应于指定类型的类
48 | *
49 | * @param name
50 | * bean名称
51 | * @param clazz
52 | * 返回的bean类型,若类型不匹配,将抛出异常
53 | */
54 | public static T getBean(String name, Class clazz){
55 | return context.getBean(name, clazz);
56 | }
57 |
58 | }
59 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/util/StringUtils.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.util;
2 |
3 | import java.util.Collection;
4 |
5 | public final class StringUtils{
6 |
7 | private StringUtils(){
8 | }
9 |
10 | public static boolean isBlank(String str){
11 | return str == null || str.trim().length() == 0;
12 | }
13 |
14 | public static String join(Collection collect, String delimiter){
15 | StringBuilder result = new StringBuilder();
16 | for(String temp : collect){
17 | result.append(temp).append(delimiter);
18 | }
19 |
20 | if(!collect.isEmpty())
21 | result.delete(result.length() - delimiter.length(), result.length());
22 |
23 | return result.toString();
24 | }
25 |
26 | public static String trimLeft(String source){
27 | if(isBlank(source))
28 | return null;
29 |
30 | int index = 0;
31 | for(; index < source.length(); index++){
32 | if(source.charAt(index) > 32)
33 | break;
34 | }
35 |
36 | return source.substring(index);
37 | }
38 |
39 | public static String trimRight(String source){
40 | if(isBlank(source))
41 | return null;
42 |
43 | int index = source.length() - 1;
44 | for(; index >= 0; index--){
45 | if(source.charAt(index) > 32)
46 | break;
47 | }
48 |
49 | return source.substring(0, index + 1);
50 | }
51 |
52 | public static String emptyDefault(String ifEmpty, String defaults){
53 | return isBlank(ifEmpty) ? defaults : ifEmpty;
54 | }
55 |
56 | }
57 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/front/controller/CategoryController.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.front.controller;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.stereotype.Controller;
5 | import org.springframework.ui.Model;
6 | import org.springframework.web.bind.annotation.PathVariable;
7 | import org.springframework.web.bind.annotation.RequestMapping;
8 | import org.springframework.web.bind.annotation.RequestMethod;
9 | import org.springframework.web.bind.annotation.RequestParam;
10 |
11 | import com.zblog.biz.PostManager;
12 | import com.zblog.core.WebConstants;
13 | import com.zblog.core.dal.entity.Category;
14 | import com.zblog.service.CategoryService;
15 |
16 | @Controller
17 | @RequestMapping("/categorys")
18 | public class CategoryController{
19 | @Autowired
20 | private PostManager postManager;
21 | @Autowired
22 | private CategoryService categoryService;
23 |
24 | @RequestMapping(value = "/{categoryName}", method = RequestMethod.GET)
25 | public String post(@PathVariable("categoryName") String categoryName,
26 | @RequestParam(value = "page", defaultValue = "1") int page, Model model){
27 | Category category = categoryService.loadByName(categoryName);
28 | if(category != null){
29 | model.addAttribute("page", postManager.listByCategory(category, page, 10));
30 | }
31 |
32 | model.addAttribute("category", categoryName);
33 | model.addAttribute(WebConstants.PRE_TITLE_KEY, categoryName);
34 | return "index";
35 | }
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/biz/VisitStatManager.java:
--------------------------------------------------------------------------------
1 | package com.zblog.biz;
2 |
3 | import java.util.Map;
4 | import java.util.concurrent.ConcurrentHashMap;
5 | import java.util.concurrent.ConcurrentMap;
6 |
7 | import org.slf4j.Logger;
8 | import org.slf4j.LoggerFactory;
9 | import org.springframework.beans.factory.annotation.Autowired;
10 | import org.springframework.stereotype.Component;
11 |
12 | import com.zblog.service.PostService;
13 | import com.zblog.service.vo.PostVO;
14 |
15 | /**
16 | * 文章的访问统计
17 | *
18 | * @author zhou
19 | *
20 | */
21 | @Component
22 | public class VisitStatManager{
23 | private static final Logger logger = LoggerFactory.getLogger(VisitStatManager.class);
24 | @Autowired
25 | private PostService postService;
26 | private ConcurrentMap visit = new ConcurrentHashMap<>();
27 |
28 | public void flush(){
29 | ConcurrentMap copy = visit;
30 | visit = new ConcurrentHashMap();
31 | if(!copy.isEmpty()){
32 | logger.debug("flush visit stat to database");
33 | }
34 |
35 | for(Map.Entry entry : copy.entrySet()){
36 | postService.addRcount(entry.getKey(), entry.getValue());
37 | }
38 | copy.clear();
39 | copy = null;
40 | }
41 |
42 | public void record(String postid){
43 | Integer count = visit.get(postid);
44 | /* 该数据,并发问题忽略 */
45 | visit.put(postid, count == null ? 1 : count + 1);
46 | /* 此处更新文章阅读数 */
47 | PostVO p = postService.loadById(postid);
48 | /* 此处实际为更改缓存中数据 */
49 | p.setRcount(p.getRcount() + 1);
50 | }
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/vo/Global.java:
--------------------------------------------------------------------------------
1 | package com.zblog.service.vo;
2 |
3 | import java.util.Calendar;
4 | import java.util.Date;
5 |
6 | import com.zblog.core.dal.constants.OptionConstants;
7 | import com.zblog.core.plugin.ApplicationContextUtil;
8 | import com.zblog.service.OptionsService;
9 |
10 | /**
11 | * view中使用的的对象
12 | *
13 | * @author zhou
14 | *
15 | */
16 | public class Global{
17 | private String domain;
18 |
19 | public Global(String domain){
20 | this.domain = domain;
21 | }
22 |
23 | public String getTitle(){
24 | return getOptionValue(OptionConstants.TITLE);
25 | }
26 |
27 | public String getSubtitle(){
28 | return getOptionValue(OptionConstants.SUBTITLE);
29 | }
30 |
31 | public String getDescription(){
32 | return getOptionValue(OptionConstants.DESCRIPTION);
33 | }
34 |
35 | public String getKeywords(){
36 | return getOptionValue(OptionConstants.KEYWORDS);
37 | }
38 |
39 | public boolean isAllowComment(){
40 | return Boolean.parseBoolean(getOptionValue(OptionConstants.ALLOW_COMMENT));
41 | }
42 |
43 | public int getYear(){
44 | Calendar calendar = Calendar.getInstance();
45 | calendar.setTime(new Date());
46 | return calendar.get(Calendar.YEAR);
47 | }
48 |
49 | public String getDomain(){
50 | return domain;
51 | }
52 |
53 | private static String getOptionValue(String name){
54 | OptionsService optionsService = ApplicationContextUtil.getBean(OptionsService.class);
55 | return optionsService.getOptionValue(name);
56 | }
57 |
58 | }
59 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/front/controller/PageController.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.front.controller;
2 |
3 | import javax.servlet.http.HttpServletRequest;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Controller;
7 | import org.springframework.ui.Model;
8 | import org.springframework.web.bind.annotation.PathVariable;
9 | import org.springframework.web.bind.annotation.RequestMapping;
10 |
11 | import com.zblog.biz.CommentManager;
12 | import com.zblog.biz.PostManager;
13 | import com.zblog.biz.VisitStatManager;
14 | import com.zblog.core.WebConstants;
15 | import com.zblog.core.util.CookieUtil;
16 | import com.zblog.service.vo.PostVO;
17 |
18 | @Controller
19 | @RequestMapping("/pages")
20 | public class PageController{
21 | @Autowired
22 | private PostManager postManager;
23 | @Autowired
24 | private CommentManager commentManager;
25 | @Autowired
26 | private VisitStatManager visitStatManager;
27 |
28 | @RequestMapping("/{pageid}")
29 | public String page(@PathVariable("pageid") String pageid, HttpServletRequest request, Model model){
30 | PostVO post = postManager.loadReadById(pageid);
31 | if(post != null){
32 | visitStatManager.record(pageid);
33 | model.addAttribute(WebConstants.PRE_TITLE_KEY, post.getTitle());
34 | model.addAttribute("post", post);
35 | model.addAttribute("comments",
36 | commentManager.getAsTree(pageid, new CookieUtil(request, null).getCookie("comment_author")));
37 | }
38 |
39 | return post != null ? "post" : "404";
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/web/front/validator/CommentValidator.java:
--------------------------------------------------------------------------------
1 | package com.zblog.web.front.validator;
2 |
3 | import com.zblog.core.dal.entity.Comment;
4 | import com.zblog.core.plugin.JMap;
5 | import com.zblog.core.util.CommRegular;
6 | import com.zblog.core.util.StringUtils;
7 |
8 | public class CommentValidator{
9 |
10 | public static JMap validate(Comment comment){
11 | JMap result = JMap.create();
12 | if(StringUtils.isBlank(comment.getPostid())){
13 | result.put("msg", "文章id不合法");
14 | }else if(StringUtils.isBlank(comment.getEmail()) || !comment.getEmail().matches(CommRegular.EMAIL)){
15 | result.put("msg", "邮箱格式不合法");
16 | }else if(StringUtils.isBlank(comment.getUrl()) || !comment.getUrl().matches(CommRegular.DOMAIN)){
17 | result.put("msg", "站点格式不合法 ");
18 | }else if(StringUtils.isBlank(comment.getCreator())){
19 | result.put("msg", "需填写用户昵称");
20 | }else if(comment.isApproved()){
21 | result.put("msg", "非法请求");
22 | }else if(StringUtils.isBlank(comment.getContent())){
23 | result.put("msg", "请填写评价内容");
24 | }else if(!isChinese(comment.getContent())){
25 | result.put("msg", "评价内容必须包含中文");
26 | }
27 |
28 | return result;
29 | }
30 |
31 | /**
32 | * 判断是否包含中文,但不能判断是否是中文标点
33 | *
34 | * @param str
35 | * @return
36 | */
37 | private static boolean isChinese(String str){
38 | for(int i = 0; i < str.length(); i++){
39 | char c = str.charAt(i);
40 | if((c >= 0x4e00) && (c <= 0x9fbb)){
41 | return true;
42 | }
43 | }
44 |
45 | return false;
46 | }
47 |
48 | }
49 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/feed/Channel.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.feed;
2 |
3 | import java.util.Date;
4 | import java.util.List;
5 |
6 | public class Channel{
7 | private String domain;
8 | private String logoUrl;
9 | private String title;
10 | private String description;
11 | private List items;
12 |
13 | public Channel(){
14 | }
15 |
16 | public Channel(String domain, String logoUrl){
17 | this.domain = domain;
18 | this.logoUrl = logoUrl;
19 | }
20 |
21 | public String getDomain(){
22 | return domain;
23 | }
24 |
25 | public void setDomain(String domain){
26 | this.domain = domain;
27 | }
28 |
29 | public String getLogoUrl(){
30 | return logoUrl;
31 | }
32 |
33 | public void setLogoUrl(String logoUrl){
34 | this.logoUrl = logoUrl;
35 | }
36 |
37 | public String getTitle(){
38 | return title;
39 | }
40 |
41 | public void setTitle(String title){
42 | this.title = title;
43 | }
44 |
45 | public String getDescription(){
46 | return description;
47 | }
48 |
49 | public void setDescription(String description){
50 | this.description = description;
51 | }
52 |
53 | public void setItems(List items){
54 | this.items = items;
55 | }
56 |
57 | public List getItems(){
58 | return items;
59 | }
60 |
61 | public static interface Article{
62 | String getTitle();
63 |
64 | String getLink();
65 |
66 | String getCategory();
67 |
68 | String getAuthor();
69 |
70 | String getDescription();
71 |
72 | public String getContent();
73 |
74 | Date getPubDate();
75 |
76 | String getGuid();
77 | }
78 |
79 | }
80 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/jsp/backend/common/navbar.jsp:
--------------------------------------------------------------------------------
1 | <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 | <%@ taglib prefix="z" uri="/WEB-INF/tld/function.tld" %>
3 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/table/edittable.css:
--------------------------------------------------------------------------------
1 | body{
2 | overflow: hidden;
3 | width: 540px;
4 | }
5 | .wrapper {
6 | margin: 10px auto 0;
7 | font-size: 12px;
8 | overflow: hidden;
9 | width: 520px;
10 | height: 315px;
11 | }
12 |
13 | .clear {
14 | clear: both;
15 | }
16 |
17 | .wrapper .left {
18 | float: left;
19 | margin-left: 10px;;
20 | }
21 |
22 | .wrapper .right {
23 | float: right;
24 | border-left: 2px dotted #EDEDED;
25 | padding-left: 15px;
26 | }
27 |
28 | .section {
29 | margin-bottom: 15px;
30 | width: 240px;
31 | overflow: hidden;
32 | }
33 |
34 | .section h3 {
35 | font-weight: bold;
36 | padding: 5px 0;
37 | margin-bottom: 10px;
38 | border-bottom: 1px solid #EDEDED;
39 | font-size: 12px;
40 | }
41 |
42 | .section ul {
43 | list-style: none;
44 | overflow: hidden;
45 | clear: both;
46 |
47 | }
48 |
49 | .section li {
50 | float: left;
51 | width: 120px;;
52 | }
53 |
54 | .section .tone {
55 | width: 80px;;
56 | }
57 |
58 | .section .preview {
59 | width: 220px;
60 | }
61 |
62 | .section .preview table {
63 | text-align: center;
64 | vertical-align: middle;
65 | color: #666;
66 | }
67 |
68 | .section .preview caption {
69 | font-weight: bold;
70 | }
71 |
72 | .section .preview td {
73 | border-width: 1px;
74 | border-style: solid;
75 | height: 22px;
76 | }
77 |
78 | .section .preview th {
79 | border-style: solid;
80 | border-color: #DDD;
81 | border-width: 2px 1px 1px 1px;
82 | height: 22px;
83 | background-color: #F7F7F7;
84 | }
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/entity/User.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.entity;
2 |
3 | import com.zblog.core.dal.constants.UserConstants;
4 |
5 | public class User extends BaseEntity{
6 | private String nickName;
7 | private String realName;
8 | private String password;
9 | private String email;
10 | /* 用户账号状态 */
11 | private String status = UserConstants.USER_STATUS_NORMAL;
12 | private String role = UserConstants.USER_ROLE_CONTRIBUTOR;
13 | private String description;
14 |
15 | public String getNickName(){
16 | return nickName;
17 | }
18 |
19 | public void setNickName(String nickName){
20 | this.nickName = nickName;
21 | }
22 |
23 | public String getRealName(){
24 | return realName;
25 | }
26 |
27 | public void setRealName(String realName){
28 | this.realName = realName;
29 | }
30 |
31 | public String getPassword(){
32 | return password;
33 | }
34 |
35 | public void setPassword(String password){
36 | this.password = password;
37 | }
38 |
39 | public String getEmail(){
40 | return email;
41 | }
42 |
43 | public void setEmail(String email){
44 | this.email = email;
45 | }
46 |
47 | public String getStatus(){
48 | return status;
49 | }
50 |
51 | public void setStatus(String status){
52 | this.status = status;
53 | }
54 |
55 | public String getRole(){
56 | return role;
57 | }
58 |
59 | public void setRole(String role){
60 | this.role = role;
61 | }
62 |
63 | public String getDescription(){
64 | return description;
65 | }
66 |
67 | public void setDescription(String description){
68 | this.description = description;
69 | }
70 |
71 | }
72 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/plugin/TreeUtils.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.plugin;
2 |
3 | import java.util.Iterator;
4 | import java.util.List;
5 |
6 | import com.zblog.core.util.StringUtils;
7 |
8 | public class TreeUtils{
9 |
10 | private TreeUtils(){
11 | }
12 |
13 | /**
14 | * 根据指定的list构建森林
15 | *
16 | * @param list
17 | */
18 | public static > void rebuildTree(List list){
19 | while(!solve(list)){
20 | Iterator it = list.iterator();
21 | while(it.hasNext()){
22 | T item = it.next();
23 | if(hasChild(list, item.getId()))
24 | continue;
25 |
26 | if(!StringUtils.isBlank(item.getParent())){
27 | /* 获取item父节点 */
28 | for(T temp : list){
29 | if(item.getParent().equals(temp.getId())){
30 | it.remove();
31 | temp.addChild(item);
32 | break;
33 | }
34 | }
35 | }
36 | }
37 | }
38 | }
39 |
40 | /**
41 | * 指定id是否有子节点
42 | *
43 | * @param list
44 | * @param id
45 | * @return
46 | */
47 | private static > boolean hasChild(List list, String id){
48 | for(T mc : list){
49 | if(id.equals(mc.getParent()))
50 | return true;
51 | }
52 | return false;
53 | }
54 |
55 | /**
56 | * 如果在当前所有顶级节点中没有任何一个有子节点,就意味着森林构建成功
57 | *
58 | * @param list
59 | * @return
60 | */
61 | private static > boolean solve(List list){
62 | for(T mc : list){
63 | if(hasChild(list, mc.getId()))
64 | return false;
65 | }
66 |
67 | return true;
68 | }
69 |
70 | }
71 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/security/Hex.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.security;
2 |
3 | /**
4 | * 字节数组工具类
5 | *
6 | * @author zhou
7 | *
8 | */
9 | public class Hex{
10 | private static final char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
11 |
12 | private Hex(){
13 | }
14 |
15 | /**
16 | * 字节数组转十六进制
17 | *
18 | * @param bytes
19 | * @return 大写形式十六进制
20 | */
21 | public static String bytes2Hex(byte[] bytes){
22 | char[] result = new char[bytes.length << 1];
23 | for(int i = 0; i < bytes.length; i++){
24 | result[2 * i] = digits[bytes[i] >>> 4 & 0x0F];
25 | result[2 * i + 1] = digits[bytes[i] & 0x0F];
26 | }
27 |
28 | return new String(result);
29 | }
30 |
31 | /**
32 | * 十六进制转字节数组
33 | *
34 | * @param hex
35 | * @return
36 | */
37 | public static byte[] hex2Bytes(String hex){
38 | byte[] result = new byte[hex.length() >> 1];
39 | for(int i = 0; i < hex.length(); i += 2){
40 | int digit = Character.digit(hex.charAt(i), 16);
41 | result[i >> 1] = (byte) (digit << 4 | Character.digit(hex.charAt(i + 1), 16));
42 | }
43 |
44 | return result;
45 | }
46 |
47 | public static int bytes2Int(byte[] buf){
48 | return ((buf[0] & 0xff) << 24) | ((buf[1] & 0xff) << 16) | ((buf[2] & 0xff) << 8) | (buf[3] & 0xff);
49 | }
50 |
51 | public static byte[] int2Bytes(int value){
52 | byte[] result = new byte[4];
53 | result[0] = (byte) (value >> 24);
54 | result[1] = (byte) (value >> 16 & 0xFF);
55 | result[2] = (byte) (value >> 8 & 0xFF);
56 | result[3] = (byte) (value & 0xFF);
57 |
58 | return result;
59 | }
60 |
61 | }
62 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/jsp/sitemap.jsp:
--------------------------------------------------------------------------------
1 | <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3 |
4 |
5 |
6 | 站点地图 - ${g.title}
7 |
8 |
9 |
10 |
18 |
19 |
20 | ${g.title} - blog.zhouhaocheng.cn's SiteMap
21 |
22 |
26 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/src/main/resources/config/mybatis.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/help/help.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created with JetBrains PhpStorm.
3 | * User: xuheng
4 | * Date: 12-9-26
5 | * Time: 下午1:06
6 | * To change this template use File | Settings | File Templates.
7 | */
8 | /**
9 | * tab点击处理事件
10 | * @param tabHeads
11 | * @param tabBodys
12 | * @param obj
13 | */
14 | function clickHandler( tabHeads,tabBodys,obj ) {
15 | //head样式更改
16 | for ( var k = 0, len = tabHeads.length; k < len; k++ ) {
17 | tabHeads[k].className = "";
18 | }
19 | obj.className = "focus";
20 | //body显隐
21 | var tabSrc = obj.getAttribute( "tabSrc" );
22 | for ( var j = 0, length = tabBodys.length; j < length; j++ ) {
23 | var body = tabBodys[j],
24 | id = body.getAttribute( "id" );
25 | body.onclick = function(){
26 | this.style.zoom = 1;
27 | };
28 | if ( id != tabSrc ) {
29 | body.style.zIndex = 1;
30 | } else {
31 | body.style.zIndex = 200;
32 | }
33 | }
34 |
35 | }
36 |
37 | /**
38 | * TAB切换
39 | * @param tabParentId tab的父节点ID或者对象本身
40 | */
41 | function switchTab( tabParentId ) {
42 | var tabElements = $G( tabParentId ).children,
43 | tabHeads = tabElements[0].children,
44 | tabBodys = tabElements[1].children;
45 |
46 | for ( var i = 0, length = tabHeads.length; i < length; i++ ) {
47 | var head = tabHeads[i];
48 | if ( head.className === "focus" )clickHandler(tabHeads,tabBodys, head );
49 | head.onclick = function () {
50 | clickHandler(tabHeads,tabBodys,this);
51 | }
52 | }
53 | }
54 | switchTab("helptab");
55 |
56 | document.getElementById('version').innerHTML = parent.UE.version;
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/tld/function.tld:
--------------------------------------------------------------------------------
1 |
2 |
6 | common function
7 | fns
8 | 1.0
9 | common function
10 | /WEB-INF/tld/function.tld
11 |
12 | cookieValue
13 | com.zblog.core.tag.FunctionHelper
14 |
15 | java.lang.String cookieValue(java.lang.String)
16 |
17 | ${z:cookieValue('name')}
18 |
19 |
20 |
21 | getDomainLink
22 | com.zblog.core.tag.FunctionHelper
23 | java.lang.String getDomainLink(java.lang.String)
24 | ${z:getDomainLink('http://github.com/')}
25 |
26 |
27 |
28 | fileExt
29 | com.zblog.core.tag.FunctionHelper
30 | java.lang.String fileExt(java.lang.String)
31 | ${z:fileExt('some.png')}
32 |
33 |
34 | join
35 | com.zblog.core.tag.FunctionHelper
36 | java.lang.String join(java.util.Collection,java.lang.String)
37 |
38 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/charts/chart.config.js:
--------------------------------------------------------------------------------
1 | /*
2 | * 图表配置文件
3 | * */
4 |
5 |
6 | //不同类型的配置
7 | var typeConfig = [
8 | {
9 | chart: {
10 | type: 'line'
11 | },
12 | plotOptions: {
13 | line: {
14 | dataLabels: {
15 | enabled: false
16 | },
17 | enableMouseTracking: true
18 | }
19 | }
20 | }, {
21 | chart: {
22 | type: 'line'
23 | },
24 | plotOptions: {
25 | line: {
26 | dataLabels: {
27 | enabled: true
28 | },
29 | enableMouseTracking: false
30 | }
31 | }
32 | }, {
33 | chart: {
34 | type: 'area'
35 | }
36 | }, {
37 | chart: {
38 | type: 'bar'
39 | }
40 | }, {
41 | chart: {
42 | type: 'column'
43 | }
44 | }, {
45 | chart: {
46 | plotBackgroundColor: null,
47 | plotBorderWidth: null,
48 | plotShadow: false
49 | },
50 | plotOptions: {
51 | pie: {
52 | allowPointSelect: true,
53 | cursor: 'pointer',
54 | dataLabels: {
55 | enabled: true,
56 | color: '#000000',
57 | connectorColor: '#000000',
58 | formatter: function() {
59 | return ''+ this.point.name +': '+ ( Math.round( this.point.percentage*100 ) / 100 ) +' %';
60 | }
61 | }
62 | }
63 | }
64 | }
65 | ];
66 |
--------------------------------------------------------------------------------
/src/main/resources/mybatis/UploadMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
10 |
11 |
14 |
15 |
18 |
19 |
22 |
23 |
24 | insert into upload(id,name,path,creator,createTime)
25 | values(#{id},#{name},#{path},#{creator},#{createTime})
26 |
27 |
28 |
29 | update upload set postid=#{postid} where path in
30 |
31 | #{item}
32 |
33 |
34 |
35 |
36 | update upload set postid=null where postid=#{postid}
37 |
38 |
39 |
40 | delete from upload where id = #{id}
41 |
42 |
43 |
44 | delete from upload where postid = #{postid}
45 |
46 |
47 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/biz/EhCacheManager.java:
--------------------------------------------------------------------------------
1 | package com.zblog.biz;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Collection;
5 | import java.util.List;
6 |
7 | import net.sf.ehcache.Cache;
8 | import net.sf.ehcache.Ehcache;
9 | import net.sf.ehcache.Statistics;
10 |
11 | import org.springframework.beans.factory.annotation.Autowired;
12 | import org.springframework.cache.ehcache.EhCacheCacheManager;
13 | import org.springframework.stereotype.Component;
14 |
15 | import com.zblog.core.plugin.JMap;
16 |
17 | @Component
18 | public class EhCacheManager{
19 | @Autowired
20 | private EhCacheCacheManager manager;
21 |
22 | /**
23 | * 获取缓存数据分析
24 | *
25 | * @return
26 | */
27 | public Collection stats(){
28 | Collection cns = manager.getCacheNames();
29 | List list = new ArrayList<>(cns.size());
30 | for(String cacheName : cns){
31 | JMap temp = JMap.create("name", cacheName);
32 | Ehcache cache = manager.getCacheManager().getEhcache(cacheName);
33 | Statistics gateway = cache.getStatistics();
34 | /* 毫秒 */
35 | temp.put("averageGetTime", gateway.getAverageGetTime());
36 | temp.put("hitCount", gateway.getCacheHits());
37 | temp.put("missCount", gateway.getCacheMisses());
38 | temp.put("size", gateway.getObjectCount());
39 | if(cache.isStatisticsEnabled()){
40 | temp.put("hitRatio", (float) gateway.getCacheHits() / (gateway.getCacheHits() + gateway.getCacheMisses()));
41 | }
42 |
43 | list.add(temp);
44 | }
45 |
46 | return list;
47 | }
48 |
49 | public void clear(String cacheName){
50 | Cache cache = manager.getCacheManager().getCache(cacheName);
51 | cache.removeAll();
52 | cache.clearStatistics();
53 | }
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/dal/mapper/PostMapper.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.dal.mapper;
2 |
3 | import java.util.List;
4 |
5 | import org.apache.ibatis.annotations.Param;
6 |
7 | import com.zblog.core.dal.entity.Post;
8 | import com.zblog.core.plugin.JMap;
9 | import com.zblog.core.plugin.PageModel;
10 | import com.zblog.service.vo.PageVO;
11 | import com.zblog.service.vo.PostVO;
12 |
13 | @SuppressWarnings("unchecked")
14 | public interface PostMapper extends BaseMapper{
15 |
16 | @Override
17 | public PostVO loadById(String postid);
18 |
19 | /**
20 | * 获取制定post的下一篇
21 | *
22 | * @param postid
23 | * @return
24 | */
25 | Post getPrevPost(String postid);
26 |
27 | /**
28 | * 获取指定post的上一篇
29 | *
30 | * @param postid
31 | * @return
32 | */
33 | Post getNextPost(String postid);
34 |
35 | /**
36 | * 获取页面(只包含ID和title)
37 | *
38 | * @param onlyParent
39 | * @return
40 | */
41 | List listPage(boolean onlyParent);
42 |
43 | /**
44 | * 列出文章归档
45 | *
46 | * @return
47 | */
48 | List listArchive();
49 |
50 | int addRcount(@Param("postid") String postid, @Param("count") int count);
51 |
52 | int addCcount(@Param("commentid") String commentid, @Param("count") int count);
53 |
54 | /**
55 | * 获取最近发表文章
56 | *
57 | * @return 文章id
58 | */
59 | List listRecent(@Param("nums") int nums, @Param("creator") String creator);
60 |
61 | List listByMonth(PageModel model);
62 |
63 | List listByCategory(PageModel model);
64 |
65 | List listByTag(PageModel model);
66 |
67 | void updateCategory(@Param("oldCategoryIds") List oldCategoryIds, @Param("newCategoryId") String newCategoryId);
68 |
69 | }
70 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/anchor/anchor.html:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
39 |
40 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/util/JdbcUtils.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.util;
2 |
3 | import java.sql.Connection;
4 | import java.sql.ResultSet;
5 | import java.sql.SQLException;
6 | import java.sql.Statement;
7 |
8 | public final class JdbcUtils{
9 |
10 | public static void close(Connection conn){
11 | if(conn != null){
12 | try{
13 | conn.close();
14 | }catch(SQLException e){
15 | e.printStackTrace();
16 | }
17 | }
18 | }
19 |
20 | public static void close(Statement sta){
21 | if(sta != null){
22 | try{
23 | sta.close();
24 | }catch(SQLException e){
25 | e.printStackTrace();
26 | }
27 | }
28 | }
29 |
30 | public static void close(ResultSet rs){
31 | if(rs != null){
32 | try{
33 | rs.close();
34 | }catch(SQLException e){
35 | e.printStackTrace();
36 | }
37 | }
38 | }
39 |
40 | public static void close(ResultSet rs, Statement sta, Connection conn){
41 | close(rs);
42 | close(sta, conn);
43 | }
44 |
45 | public static void close(Statement sta, Connection conn){
46 | close(sta);
47 | close(conn);
48 | }
49 |
50 | public static void close(ResultSet set, Statement state){
51 | close(set);
52 | close(state);
53 | }
54 |
55 | public static void rollback(Connection conn){
56 | if(conn != null){
57 | try{
58 | conn.rollback();
59 | }catch(SQLException e){
60 | e.printStackTrace();
61 | }
62 | }
63 | }
64 |
65 | public static void cancleTransaction(Connection conn){
66 | if(conn != null){
67 | try{
68 | conn.setAutoCommit(true);
69 | }catch(SQLException e){
70 | e.printStackTrace();
71 | }
72 | }
73 | }
74 |
75 | }
--------------------------------------------------------------------------------
/src/main/java/com/zblog/service/email/MailSenderService.java:
--------------------------------------------------------------------------------
1 | package com.zblog.service.email;
2 |
3 | import javax.mail.MessagingException;
4 | import javax.mail.internet.MimeMessage;
5 |
6 | import org.slf4j.Logger;
7 | import org.slf4j.LoggerFactory;
8 | import org.springframework.mail.javamail.JavaMailSenderImpl;
9 | import org.springframework.mail.javamail.MimeMessageHelper;
10 | import org.springframework.stereotype.Service;
11 |
12 | import com.zblog.core.Constants;
13 | import com.zblog.service.vo.MailVO;
14 | import com.zblog.web.backend.form.MailOption;
15 |
16 | /**
17 | * 邮件发送服务
18 | *
19 | * @author zhou
20 | *
21 | */
22 | @Service
23 | public class MailSenderService{
24 | private static final Logger logger = LoggerFactory.getLogger(MailSenderService.class);
25 |
26 | private JavaMailSenderImpl sender = new JavaMailSenderImpl();
27 | private boolean init = false;
28 |
29 | public void setServerInfo(MailOption form){
30 | sender.setHost(form.getHost());
31 | sender.setPort(form.getPort());
32 | sender.setUsername(form.getUsername());
33 | sender.setPassword(form.getPassword());
34 | init = true;
35 | }
36 |
37 | /**
38 | * 发送邮件
39 | *
40 | * @param mail
41 | */
42 | public void sendMail(MailVO mail){
43 | if(!init)
44 | return;
45 |
46 | MimeMessage message = sender.createMimeMessage();
47 | try{
48 | MimeMessageHelper helper = new MimeMessageHelper(message, true, Constants.ENCODING_UTF_8.name());
49 | helper.setFrom(mail.getFrom());
50 | helper.setTo(mail.getTo().toArray(new String[]{}));
51 | helper.setSubject(mail.getSubject());
52 | helper.setText(mail.getContent(), true);
53 | sender.send(message);
54 | }catch(MessagingException e){
55 | logger.error("send mail error", e);
56 | }
57 | }
58 |
59 | }
60 |
--------------------------------------------------------------------------------
/src/main/resources/mybatis/UserMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
10 |
11 |
15 |
16 |
19 |
20 |
23 |
24 |
25 | insert into user(id,nickName,realName,password,email,role,status,description,createTime,creator,lastUpdate)
26 | values(#{id},#{nickName},#{realName},md5(#{password}),#{email},#{role},#{status},#{description},#{createTime},#{creator},#{lastUpdate})
27 |
28 |
29 |
30 | update user set realName=#{realName},email=#{email},description=#{description}
31 |
32 | ,role=#{role}
33 |
34 |
35 | ,password=md5(#{password})
36 |
37 | where id=#{id}
38 |
39 |
40 |
41 | delete from user where id = #{id}
42 |
43 |
44 |
--------------------------------------------------------------------------------
/src/main/java/com/zblog/core/util/DateUtils.java:
--------------------------------------------------------------------------------
1 | package com.zblog.core.util;
2 |
3 | import java.text.SimpleDateFormat;
4 | import java.util.Date;
5 | import java.util.Locale;
6 |
7 | import com.zblog.core.Constants;
8 |
9 | public class DateUtils{
10 |
11 | private DateUtils(){
12 | }
13 |
14 | public static String currentDate(String pattern){
15 | return formatDate(pattern, new Date());
16 | }
17 |
18 | public static String formatDate(String pattern, Date date){
19 | SimpleDateFormat format = new SimpleDateFormat(pattern, Constants.LOCALE_CHINA);
20 | return format.format(date);
21 | }
22 |
23 | /**
24 | * 指定locale格式化日期
25 | *
26 | * @param pattern
27 | * @param date
28 | * @param locale
29 | * @return
30 | */
31 | public static String formatDate(String pattern, Date date, Locale locale){
32 | SimpleDateFormat format = new SimpleDateFormat(pattern, locale);
33 | return format.format(date);
34 | }
35 |
36 | /**
37 | * 解析日期,注:此处为严格模式解析,即20151809这样的日期会解析错误
38 | *
39 | * @param pattern
40 | * @param date
41 | * @return
42 | */
43 | public static Date parse(String pattern, String date){
44 | return parse(pattern, date, Constants.LOCALE_CHINA);
45 | }
46 |
47 | /**
48 | * 解析日期,注:此处为严格模式解析,即20151809这样的日期会解析错误
49 | *
50 | * @param pattern
51 | * @param date
52 | * @param locale
53 | * @return
54 | */
55 | public static Date parse(String pattern, String date, Locale locale){
56 | SimpleDateFormat format = new SimpleDateFormat(pattern, locale);
57 | format.setLenient(false);
58 | Date result = null;
59 | try{
60 | result = format.parse(date);
61 | }catch(Exception e){
62 | e.printStackTrace();
63 | }
64 |
65 | return result;
66 | }
67 |
68 | }
69 |
--------------------------------------------------------------------------------
/src/main/webapp/resource/ueditor-1.4.3/dialogs/music/music.css:
--------------------------------------------------------------------------------
1 | .wrapper{margin: 5px 10px;}
2 |
3 | .searchBar{height:30px;padding:7px 0 3px;text-align:center;}
4 | .searchBtn{font-size:13px;height:24px;}
5 |
6 | .resultBar{width:460px;margin:5px auto;border: 1px solid #CCC;border-radius: 5px;box-shadow: 2px 2px 5px #D3D6DA;overflow: hidden;}
7 |
8 | .listPanel{overflow: hidden;}
9 | .panelon{display:block;}
10 | .paneloff{display:none}
11 |
12 | .page{width:220px;margin:20px auto;overflow: hidden;}
13 | .pageon{float:right;width:24px;line-height:24px;height:24px;margin-right: 5px;background: none;border: none;color: #000;font-weight: bold;text-align:center}
14 | .pageoff{float:right;width:24px;line-height:24px;height:24px;cursor:pointer;background-color: #fff;
15 | border: 1px solid #E7ECF0;color: #2D64B3;margin-right: 5px;text-decoration: none;text-align:center;}
16 |
17 | .m-box{width:460px;}
18 | .m-m{float: left;line-height: 20px;height: 20px;}
19 | .m-h{height:24px;line-height:24px;padding-left: 46px;background-color:#FAFAFA;border-bottom: 1px solid #DAD8D8;font-weight: bold;font-size: 12px;color: #333;}
20 | .m-l{float:left;width:40px; }
21 | .m-t{float:left;width:140px;}
22 | .m-s{float:left;width:110px;}
23 | .m-z{float:left;width:100px;}
24 | .m-try-t{float: left;width: 60px;;}
25 |
26 | .m-try{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/try_music.gif') no-repeat ;}
27 | .m-trying{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/stop_music.gif') no-repeat ;}
28 |
29 | .loading{width:95px;height:7px;font-size:7px;margin:60px auto;background:url(http://static.tieba.baidu.com/tb/editor/images/loading.gif) no-repeat}
30 | .empty{width:300px;height:40px;padding:2px;margin:50px auto;line-height:40px; color:#006699;text-align:center;}
--------------------------------------------------------------------------------