├── .gitignore ├── .mvn └── wrapper │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── .travis.yml ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── mvnw ├── mvnw.cmd ├── pom.xml ├── readme-todos.md ├── src ├── main │ ├── java │ │ └── com │ │ │ └── smatt │ │ │ ├── SpringBlogApplication.java │ │ │ ├── addons │ │ │ ├── AssetDirective.java │ │ │ └── LocalDateTimeTemplateFormatFactory.java │ │ │ ├── config │ │ │ ├── AuthConfig.java │ │ │ ├── BlogProperties.java │ │ │ ├── Constants.java │ │ │ ├── LocalDateTimeAttributeConverter.java │ │ │ ├── Roles.java │ │ │ └── StorageProperties.java │ │ │ ├── controllers │ │ │ ├── FileUploadController.java │ │ │ ├── admin │ │ │ │ ├── AdminCategoryController.java │ │ │ │ ├── AdminIndexController.java │ │ │ │ ├── AdminPostController.java │ │ │ │ ├── AdminProfileController.java │ │ │ │ ├── AdminTagController.java │ │ │ │ └── AdminUserController.java │ │ │ ├── auth │ │ │ │ └── AuthController.java │ │ │ ├── error │ │ │ │ └── ErrorController.java │ │ │ └── front │ │ │ │ ├── CommentController.java │ │ │ │ ├── HomeController.java │ │ │ │ └── PostController.java │ │ │ ├── dao │ │ │ ├── CategoryRepository.java │ │ │ ├── CommentRepository.java │ │ │ ├── PostRepository.java │ │ │ ├── SectionRepository.java │ │ │ ├── TagRepository.java │ │ │ └── UserRepository.java │ │ │ ├── exceptions │ │ │ ├── GlobalExceptionHandler.java │ │ │ ├── MyAccessDeniedHandler.java │ │ │ ├── StorageException.java │ │ │ └── StorageFileNotFoundException.java │ │ │ ├── lib │ │ │ └── JMailChimp.java │ │ │ ├── models │ │ │ ├── Category.java │ │ │ ├── Comment.java │ │ │ ├── Contact.java │ │ │ ├── Post.java │ │ │ ├── Section.java │ │ │ ├── Tag.java │ │ │ ├── User.java │ │ │ └── UserRegistration.java │ │ │ ├── seeders │ │ │ └── DatabaseSeeder.java │ │ │ ├── service │ │ │ ├── AuthenticationService.java │ │ │ ├── CommentService.java │ │ │ ├── ContactService.java │ │ │ ├── FileSystemStorageService.java │ │ │ ├── MySecurityService.java │ │ │ ├── NewsletterService.java │ │ │ ├── PostService.java │ │ │ ├── SendConfirmLink.java │ │ │ ├── StorageService.java │ │ │ └── TokenGenerator.java │ │ │ └── utils │ │ │ ├── MyApplicationContext.java │ │ │ ├── URLHelper.java │ │ │ └── Utility.java │ └── resources │ │ ├── application-heroku.properties │ │ ├── application.properties │ │ ├── public │ │ ├── admin │ │ │ ├── css │ │ │ │ ├── AdminLTE.css │ │ │ │ ├── AdminLTE.min.css │ │ │ │ ├── animate │ │ │ │ │ └── animate.min.css │ │ │ │ ├── blockui.min.css │ │ │ │ ├── bootstrap │ │ │ │ │ ├── bootstrap-theme.css │ │ │ │ │ ├── bootstrap-theme.css.map │ │ │ │ │ ├── bootstrap-theme.min.css │ │ │ │ │ ├── bootstrap-theme.min.css.map │ │ │ │ │ ├── bootstrap.css │ │ │ │ │ ├── bootstrap.css.map │ │ │ │ │ ├── bootstrap.min.css │ │ │ │ │ └── bootstrap.min.css.map │ │ │ │ ├── fonts │ │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ │ ├── nprogress │ │ │ │ │ └── nprogress.css │ │ │ │ ├── skins │ │ │ │ │ ├── _all-skins.css │ │ │ │ │ └── skin-yellow.min.css │ │ │ │ ├── sweet-alert-animations.min.css │ │ │ │ └── sweetalert.css │ │ │ ├── images │ │ │ │ ├── Thumbs.db │ │ │ │ ├── american-express.png │ │ │ │ ├── avatar.png │ │ │ │ ├── avatar04.png │ │ │ │ ├── avatar2.png │ │ │ │ ├── avatar3.png │ │ │ │ ├── avatar5.png │ │ │ │ ├── back_disabled.png │ │ │ │ ├── back_enabled.png │ │ │ │ ├── back_enabled_hover.png │ │ │ │ ├── boxed-bg.jpg │ │ │ │ ├── boxed-bg.png │ │ │ │ ├── cropper.jpg │ │ │ │ ├── default-50x50.gif │ │ │ │ ├── default-post-picture.png │ │ │ │ ├── default-post-user.jpg │ │ │ │ ├── forward_disabled.png │ │ │ │ ├── forward_enabled.png │ │ │ │ ├── forward_enabled_hover.png │ │ │ │ ├── icons.png │ │ │ │ ├── img.jpg │ │ │ │ ├── inbox.png │ │ │ │ ├── loading.gif │ │ │ │ ├── mastercard.png │ │ │ │ ├── media.jpg │ │ │ │ ├── paypal.png │ │ │ │ ├── photo1.png │ │ │ │ ├── photo2.png │ │ │ │ ├── photo3.jpg │ │ │ │ ├── photo4.jpg │ │ │ │ ├── picture.jpg │ │ │ │ ├── prod-1.jpg │ │ │ │ ├── prod-2.jpg │ │ │ │ ├── prod-3.jpg │ │ │ │ ├── prod-4.jpg │ │ │ │ ├── prod-5.jpg │ │ │ │ ├── user.png │ │ │ │ ├── user1-128x128.jpg │ │ │ │ ├── user2-160x160.jpg │ │ │ │ ├── user3-128x128.jpg │ │ │ │ ├── user4-128x128.jpg │ │ │ │ ├── user5-128x128.jpg │ │ │ │ ├── user6-128x128.jpg │ │ │ │ ├── user7-128x128.jpg │ │ │ │ ├── user8-128x128.jpg │ │ │ │ └── visa.png │ │ │ ├── js │ │ │ │ ├── app.js │ │ │ │ ├── app.min.js │ │ │ │ ├── bootstrap │ │ │ │ │ ├── bootstrap.js │ │ │ │ │ └── bootstrap.min.js │ │ │ │ ├── demo.js │ │ │ │ ├── fastclick │ │ │ │ │ └── fastclick.min.js │ │ │ │ ├── jquery.blockUI.js │ │ │ │ ├── jquery │ │ │ │ │ └── jquery-2.2.3.min.js │ │ │ │ ├── nprogress │ │ │ │ │ └── nprogress.js │ │ │ │ ├── pages │ │ │ │ │ ├── dashboard.js │ │ │ │ │ └── dashboard2.js │ │ │ │ ├── slimscroll │ │ │ │ │ └── jquery.slimscroll.min.js │ │ │ │ ├── sweetalert.min.js │ │ │ │ ├── tinymce │ │ │ │ │ ├── jquery.tinymce.min.js │ │ │ │ │ ├── plugins │ │ │ │ │ │ ├── advlist │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── anchor │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── autolink │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── autoresize │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── autosave │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── bbcode │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── charmap │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── code │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── codesample │ │ │ │ │ │ │ ├── css │ │ │ │ │ │ │ │ └── prism.css │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── colorpicker │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── contextmenu │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── directionality │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── emoticons │ │ │ │ │ │ │ ├── img │ │ │ │ │ │ │ │ ├── smiley-cool.gif │ │ │ │ │ │ │ │ ├── smiley-cry.gif │ │ │ │ │ │ │ │ ├── smiley-embarassed.gif │ │ │ │ │ │ │ │ ├── smiley-foot-in-mouth.gif │ │ │ │ │ │ │ │ ├── smiley-frown.gif │ │ │ │ │ │ │ │ ├── smiley-innocent.gif │ │ │ │ │ │ │ │ ├── smiley-kiss.gif │ │ │ │ │ │ │ │ ├── smiley-laughing.gif │ │ │ │ │ │ │ │ ├── smiley-money-mouth.gif │ │ │ │ │ │ │ │ ├── smiley-sealed.gif │ │ │ │ │ │ │ │ ├── smiley-smile.gif │ │ │ │ │ │ │ │ ├── smiley-surprised.gif │ │ │ │ │ │ │ │ ├── smiley-tongue-out.gif │ │ │ │ │ │ │ │ ├── smiley-undecided.gif │ │ │ │ │ │ │ │ ├── smiley-wink.gif │ │ │ │ │ │ │ │ └── smiley-yell.gif │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── example │ │ │ │ │ │ │ ├── dialog.html │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── example_dependency │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── fullpage │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── fullscreen │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── hr │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── image │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── imagetools │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── importcss │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── insertdatetime │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── legacyoutput │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── link │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── lists │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── media │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── nonbreaking │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── noneditable │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── pagebreak │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── paste │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── preview │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── print │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── save │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── searchreplace │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── spellchecker │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── tabfocus │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── table │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── template │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── textcolor │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── textpattern │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── toc │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── visualblocks │ │ │ │ │ │ │ ├── css │ │ │ │ │ │ │ │ └── visualblocks.css │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ ├── visualchars │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ │ └── wordcount │ │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── skins │ │ │ │ │ │ └── lightgray │ │ │ │ │ │ │ ├── content.inline.min.css │ │ │ │ │ │ │ ├── content.min.css │ │ │ │ │ │ │ ├── fonts │ │ │ │ │ │ │ ├── tinymce-small.eot │ │ │ │ │ │ │ ├── tinymce-small.svg │ │ │ │ │ │ │ ├── tinymce-small.ttf │ │ │ │ │ │ │ ├── tinymce-small.woff │ │ │ │ │ │ │ ├── tinymce.eot │ │ │ │ │ │ │ ├── tinymce.svg │ │ │ │ │ │ │ ├── tinymce.ttf │ │ │ │ │ │ │ └── tinymce.woff │ │ │ │ │ │ │ ├── img │ │ │ │ │ │ │ ├── anchor.gif │ │ │ │ │ │ │ ├── loader.gif │ │ │ │ │ │ │ ├── object.gif │ │ │ │ │ │ │ └── trans.gif │ │ │ │ │ │ │ ├── skin.ie7.min.css │ │ │ │ │ │ │ └── skin.min.css │ │ │ │ │ ├── themes │ │ │ │ │ │ ├── inlite │ │ │ │ │ │ │ └── theme.min.js │ │ │ │ │ │ └── modern │ │ │ │ │ │ │ └── theme.min.js │ │ │ │ │ └── tinymce.min.js │ │ │ │ └── utility.js │ │ │ └── plugins │ │ │ │ ├── iCheck │ │ │ │ ├── all.css │ │ │ │ ├── flat │ │ │ │ │ ├── _all.css │ │ │ │ │ ├── aero.css │ │ │ │ │ ├── aero.png │ │ │ │ │ ├── aero@2x.png │ │ │ │ │ ├── blue.css │ │ │ │ │ ├── blue.png │ │ │ │ │ ├── blue@2x.png │ │ │ │ │ ├── flat.css │ │ │ │ │ ├── flat.png │ │ │ │ │ ├── flat@2x.png │ │ │ │ │ ├── green.css │ │ │ │ │ ├── green.png │ │ │ │ │ ├── green@2x.png │ │ │ │ │ ├── grey.css │ │ │ │ │ ├── grey.png │ │ │ │ │ ├── grey@2x.png │ │ │ │ │ ├── orange.css │ │ │ │ │ ├── orange.png │ │ │ │ │ ├── orange@2x.png │ │ │ │ │ ├── pink.css │ │ │ │ │ ├── pink.png │ │ │ │ │ ├── pink@2x.png │ │ │ │ │ ├── purple.css │ │ │ │ │ ├── purple.png │ │ │ │ │ ├── purple@2x.png │ │ │ │ │ ├── red.css │ │ │ │ │ ├── red.png │ │ │ │ │ ├── red@2x.png │ │ │ │ │ ├── yellow.css │ │ │ │ │ ├── yellow.png │ │ │ │ │ └── yellow@2x.png │ │ │ │ ├── futurico │ │ │ │ │ ├── futurico.css │ │ │ │ │ ├── futurico.png │ │ │ │ │ └── futurico@2x.png │ │ │ │ ├── icheck.js │ │ │ │ ├── icheck.min.js │ │ │ │ ├── line │ │ │ │ │ ├── _all.css │ │ │ │ │ ├── aero.css │ │ │ │ │ ├── blue.css │ │ │ │ │ ├── green.css │ │ │ │ │ ├── grey.css │ │ │ │ │ ├── line.css │ │ │ │ │ ├── line.png │ │ │ │ │ ├── line@2x.png │ │ │ │ │ ├── orange.css │ │ │ │ │ ├── pink.css │ │ │ │ │ ├── purple.css │ │ │ │ │ ├── red.css │ │ │ │ │ └── yellow.css │ │ │ │ ├── minimal │ │ │ │ │ ├── _all.css │ │ │ │ │ ├── aero.css │ │ │ │ │ ├── aero.png │ │ │ │ │ ├── aero@2x.png │ │ │ │ │ ├── blue.css │ │ │ │ │ ├── blue.png │ │ │ │ │ ├── blue@2x.png │ │ │ │ │ ├── green.css │ │ │ │ │ ├── green.png │ │ │ │ │ ├── green@2x.png │ │ │ │ │ ├── grey.css │ │ │ │ │ ├── grey.png │ │ │ │ │ ├── grey@2x.png │ │ │ │ │ ├── minimal.css │ │ │ │ │ ├── minimal.png │ │ │ │ │ ├── minimal@2x.png │ │ │ │ │ ├── orange.css │ │ │ │ │ ├── orange.png │ │ │ │ │ ├── orange@2x.png │ │ │ │ │ ├── pink.css │ │ │ │ │ ├── pink.png │ │ │ │ │ ├── pink@2x.png │ │ │ │ │ ├── purple.css │ │ │ │ │ ├── purple.png │ │ │ │ │ ├── purple@2x.png │ │ │ │ │ ├── red.css │ │ │ │ │ ├── red.png │ │ │ │ │ ├── red@2x.png │ │ │ │ │ ├── yellow.css │ │ │ │ │ ├── yellow.png │ │ │ │ │ └── yellow@2x.png │ │ │ │ ├── polaris │ │ │ │ │ ├── polaris.css │ │ │ │ │ ├── polaris.png │ │ │ │ │ └── polaris@2x.png │ │ │ │ └── square │ │ │ │ │ ├── Thumbs.db │ │ │ │ │ ├── _all.css │ │ │ │ │ ├── aero.css │ │ │ │ │ ├── aero.png │ │ │ │ │ ├── aero@2x.png │ │ │ │ │ ├── blue.css │ │ │ │ │ ├── blue.png │ │ │ │ │ ├── blue@2x.png │ │ │ │ │ ├── green.css │ │ │ │ │ ├── green.png │ │ │ │ │ ├── green@2x.png │ │ │ │ │ ├── grey.css │ │ │ │ │ ├── grey.png │ │ │ │ │ ├── grey@2x.png │ │ │ │ │ ├── orange.css │ │ │ │ │ ├── orange.png │ │ │ │ │ ├── orange@2x.png │ │ │ │ │ ├── pink.css │ │ │ │ │ ├── pink.png │ │ │ │ │ ├── pink@2x.png │ │ │ │ │ ├── purple.css │ │ │ │ │ ├── purple.png │ │ │ │ │ ├── purple@2x.png │ │ │ │ │ ├── red.css │ │ │ │ │ ├── red.png │ │ │ │ │ ├── red@2x.png │ │ │ │ │ ├── square.css │ │ │ │ │ ├── square.png │ │ │ │ │ ├── square@2x.png │ │ │ │ │ ├── yellow.css │ │ │ │ │ ├── yellow.png │ │ │ │ │ └── yellow@2x.png │ │ │ │ └── select2 │ │ │ │ ├── select2.min.css │ │ │ │ └── select2.min.js │ │ ├── font-awesome-4.7.0 │ │ │ ├── css │ │ │ │ └── font-awesome.min.css │ │ │ └── fonts │ │ │ │ ├── FontAwesome.otf │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ └── fontawesome-webfont.woff2 │ │ └── front │ │ │ ├── css │ │ │ ├── about.css │ │ │ ├── animus-style.css │ │ │ ├── blog-post-card.css │ │ │ ├── bootstrap.css │ │ │ ├── clean-blog.css │ │ │ ├── clean-blog.min.css │ │ │ ├── coffe-style.css │ │ │ ├── error-page-style.css │ │ │ ├── freelancer.css │ │ │ ├── mystyle.css │ │ │ └── prism.css │ │ │ ├── fonts │ │ │ ├── Raleway-Regular.ttf │ │ │ └── RobotoSlab-Regular.ttf │ │ │ ├── images │ │ │ ├── Thumbs.db │ │ │ ├── about-banner.jpg │ │ │ ├── about-bg.jpg │ │ │ ├── bg-banner03.jpg │ │ │ ├── c-3.jpg │ │ │ ├── contact-bg.jpg │ │ │ ├── dot.png │ │ │ ├── email-newsletter.gif │ │ │ ├── home-bg.jpg │ │ │ ├── img-sprite.png │ │ │ ├── img-sprite1.png │ │ │ ├── left.png │ │ │ ├── menu.png │ │ │ ├── mylogo.jpg │ │ │ ├── post-bg.jpg │ │ │ ├── post-sample-image.jpg │ │ │ ├── right.png │ │ │ ├── s-1.jpg │ │ │ ├── s-3.jpg │ │ │ ├── s-6.jpg │ │ │ └── sprit-1.png │ │ │ ├── js │ │ │ ├── about.js │ │ │ ├── clean-blog.js │ │ │ ├── clean-blog.min.js │ │ │ ├── contact_me.js │ │ │ ├── jqBootstrapValidation.js │ │ │ ├── jquery.flexisel.js │ │ │ └── prism.js │ │ │ ├── plugins │ │ │ ├── animate │ │ │ │ └── animate.css │ │ │ ├── jquery-easing │ │ │ │ └── jquery.easing.min.js │ │ │ ├── jssocials-1.4.0 │ │ │ │ ├── jssocials-theme-flat.css │ │ │ │ ├── jssocials.css │ │ │ │ └── jssocials.js │ │ │ └── wow │ │ │ │ └── wow.js │ │ │ └── vendor │ │ │ ├── bootstrap │ │ │ ├── css │ │ │ │ ├── bootstrap.css │ │ │ │ └── bootstrap.min.css │ │ │ ├── fonts │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ └── js │ │ │ │ ├── bootstrap.js │ │ │ │ └── bootstrap.min.js │ │ │ └── jquery │ │ │ ├── jquery.js │ │ │ └── jquery.min.js │ │ └── templates │ │ ├── admin │ │ ├── auth │ │ │ ├── email_reset.ftl │ │ │ ├── login.ftl │ │ │ ├── password_reset.ftl │ │ │ └── register.ftl │ │ ├── categories │ │ │ └── index.ftl │ │ ├── index.ftl │ │ ├── posts │ │ │ ├── edit.ftl │ │ │ ├── index.ftl │ │ │ ├── post.ftl │ │ │ └── preview.ftl │ │ ├── profile │ │ │ └── index.ftl │ │ ├── tags │ │ │ └── index.ftl │ │ └── users │ │ │ ├── create.ftl │ │ │ ├── index.ftl │ │ │ └── view.ftl │ │ ├── email │ │ ├── confirm_email.ftl │ │ ├── contact.ftl │ │ └── password_reset_email.ftl │ │ ├── error │ │ ├── 404.ftl │ │ ├── 500.ftl │ │ └── accessdenied.ftl │ │ ├── front │ │ ├── about.ftl │ │ ├── contact.ftl │ │ ├── index.ftl │ │ ├── index_old.ftl │ │ ├── index_old2.ftl │ │ ├── newsletter_subscribed.ftl │ │ ├── post.ftl │ │ ├── post_old.ftl │ │ ├── posts.ftl │ │ ├── posts_old.ftl │ │ └── search-result.ftl │ │ ├── layouts │ │ ├── admin.ftl │ │ ├── app.ftl │ │ ├── front.ftl │ │ ├── front_old.ftl │ │ └── login.ftl │ │ └── partials │ │ ├── alerts.ftl │ │ ├── comment-modal.ftl │ │ ├── comment-replies.ftl │ │ ├── comment.ftl │ │ ├── comment_old.ftl │ │ ├── footer.ftl │ │ ├── google-analytics.ftl │ │ ├── login_footer.ftl │ │ ├── most-read-article.ftl │ │ └── right-column.ftl └── test │ └── java │ └── com │ └── smatt │ ├── DBSeederTest.java │ ├── MyTest.java │ └── SpringBlogApplicationTests.java ├── tutorials └── heroku-deploy.md └── upload-dir └── .gitignore /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | !.mvn/wrapper/maven-wrapper.jar 3 | upload-dir/ 4 | tutorials/ 5 | 6 | ### STS ### 7 | .apt_generated 8 | .classpath 9 | .factorypath 10 | .project 11 | .settings 12 | .springBeans 13 | 14 | ### IntelliJ IDEA ### 15 | .idea 16 | *.iws 17 | *.iml 18 | *.ipr 19 | 20 | ### NetBeans ### 21 | nbproject/private/ 22 | build/ 23 | nbbuild/ 24 | dist/ 25 | nbdist/ 26 | .nb-gradle/ 27 | /src/main/resources/application-local.properties 28 | /src/main/resources/templates/partials/comment_old.ftl 29 | /src/main/resources/templates/partials/most-read-article.ftl 30 | /src/main/resources/templates/partials/file_upload.ftl 31 | /src/main/resources/templates/front/index_old2.ftl 32 | /src/main/resources/templates/front/index_old.ftl 33 | /src/main/resources/templates/front/post_old.ftl 34 | /src/main/resources/templates/front/posts_old.ftl 35 | /src/main/resources/templates/layouts/front_old.ftl 36 | /readme-todos.md 37 | /src/test/java/com/smatt/LocalTest.java 38 | -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: java 2 | sudo: false 3 | install: true 4 | addons: 5 | sonarcloud: 6 | organization: "seunmatt-github" 7 | token: 8 | secure: "$SONAR_TOKEN" 9 | jdk: 10 | - oraclejdk8 11 | script: 12 | - mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar 13 | cache: 14 | directories: 15 | - '$HOME/.m2/repository' 16 | - '$HOME/.sonar/cache' -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | CONTRIBUTIONS 2 | ============= 3 | 4 | Contributions are welcome. First check the feature you want to add is not in any currently 5 | open (or closed) issue. 6 | Then create an issue about it first and we can proceed from there. 7 | 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Seun Matt 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Spring Blog 2 | =========== 3 | This is a complete ready to use blog application developed with Spring Java. 4 | It has both front-end and admin back end. 5 | 6 | **Watch this space for changes. Still under Rapid Development!** 7 | 8 | Live Demo 9 | ========= 10 | [Smatt Blog](https://smattblog.herokuapp.com) 11 | 12 | Features 13 | ========= 14 | The Blog Application is full-featured. 15 | It include logic for the front-end that blog readers will interact with. 16 | The front pages are dynamic and reflect changes from the backend. 17 | 18 | The back-end has logic for administering the blog. 19 | An admin can either be a SUPER-ADMIN, EDITOR, or a WRITER 20 | 21 | A WRITER can only create posts and edit posts created by himself alone. 22 | 23 | A EDITOR can do what a WRITER can do. In addition, a EDITOR can manage all posts on the platform. 24 | 25 | A SUPER-ADMIN can manage all posts, and as well manage users on the platform. 26 | 27 | The Database is pre-seeded with a default admin account 28 | 29 | SEO Friendly - dynamic page titles and meta section contents. Very suitable for social sharing 30 | 31 | Admin Credentials 32 | ----------------- 33 | Login Url: /login 34 | 35 | Email: test@test.com 36 | 37 | Password: test123 38 | 39 | The password/email can be changed after deployment to server or installation. 40 | 41 | Deployment 42 | ========== 43 | It is a Java Web Application and thus can be deployed to: 44 | - Heroku: [Here's how to do it](tutorials/heroku-deploy.md) 45 | 46 | - Digital Ocean (_tutorial needed_) 47 | 48 | - AWS (_tutorial needed_) 49 | 50 | Relevant Tutorials 51 | =================== 52 | - 53 | 54 | Contributors 55 | ============ 56 | - [Seun Matt](https://twitter.com/SeunMatt2) 57 | 58 | Contribution 59 | ============ 60 | [Read Contribution guide here](CONTRIBUTING.md) 61 | 62 | LICENSE 63 | ======= 64 | [MIT](LICENSE) -------------------------------------------------------------------------------- /readme-todos.md: -------------------------------------------------------------------------------- 1 | Spring Blog 2 | =========== 3 | 4 | Description 5 | ------------ 6 | This is a complete ready to use blog application developed with Spring Java. It has both front-end and admin back end. 7 | It is actively under development. 8 | 9 | What has been done 10 | ------------------ 11 | - Login, Logout 12 | - Registration 13 | - Password Confirm 14 | - Password Reset 15 | - Posts Administration 16 | - Sections, Categories Admin 17 | - Role Enforcement on Dashboard 18 | - Statistics On Dashboard 19 | - Admin Users Management 20 | - User Profile Setup 21 | - Creating Captcha for login 22 | - Front-end blog home page 23 | - Reading a single blog 24 | - making the cover pic of the blog reflected 25 | - display only published posts in front-end 26 | - Blog post listings by sections and categories 27 | - Social Sharing of single blog 28 | - increasing views when a blog is read. use async 29 | - how to indicate a post is to be featured 30 | - add preview to the backend for posts when created 31 | - Blog search 32 | - handle 404 exception (500) 33 | - make exception to log errors 34 | - added db seeder 35 | - implement password reset 36 | - contact me 37 | - meta descriptions of content 38 | - section to tags 39 | - write about me 40 | - mail subscriptions 41 | 42 | What is left to be done 43 | ----------------------- 44 | 45 | Deployment 46 | ---------- 47 | - Deploying on Heroku - Done 48 | - Deploying on Digital Ocean 49 | - Deploying with Docker 50 | 51 | Tutorials 52 | --------- 53 | - Spring Security in Spring Boot: Custom User Registration, Authentication and Email Verification 54 | - How I Build A Complete Blogging Web App with Spring Boot. 55 | - How to display java.time.LocalDateTime in Freemarker Template - 56 | - How to use JPA Life-Cycle Annotations to Automatically update created_at and updated_at database fields 57 | - Efficient Coding Using Service 58 | - How to handle file upload in Spring Boot 59 | - How to run database seeder in Spring Boot - DONE 60 | - How to send email in Spring 61 | - How to setup google recaptcha 62 | 63 | Bugs 64 | ------ -------------------------------------------------------------------------------- /src/main/java/com/smatt/addons/AssetDirective.java: -------------------------------------------------------------------------------- 1 | package com.smatt.addons; 2 | 3 | import com.smatt.utils.MyApplicationContext; 4 | import freemarker.core.Environment; 5 | import freemarker.template.*; 6 | import org.springframework.context.ApplicationContext; 7 | 8 | import javax.servlet.http.HttpServletRequest; 9 | import java.io.IOException; 10 | import java.io.Writer; 11 | import java.util.Map; 12 | 13 | /** 14 | * Created by smatt on 23/03/2017. 15 | * This class will accepts a relative url to static files (css/js/images) and will print the complete file path to the 16 | * body 17 | * e.g. usage 18 | * 19 | * <@asset url='relativeUrl' /> 20 | */ 21 | 22 | public class AssetDirective implements TemplateDirectiveModel { 23 | 24 | ApplicationContext context; 25 | 26 | HttpServletRequest request; 27 | 28 | public AssetDirective() { 29 | context = MyApplicationContext.getApplicationContext(); 30 | } 31 | 32 | @Override 33 | public void execute(Environment environment, Map map, TemplateModel[] templateModels, TemplateDirectiveBody templateDirectiveBody) throws TemplateException, IOException { 34 | 35 | if (map.isEmpty() || map.size() > 1 || map.get("url") == null) { 36 | throw new TemplateModelException( 37 | "This directive <@asset url='relativeUrl'> require one parameter only."); 38 | } 39 | 40 | if (templateModels.length != 0) { 41 | throw new TemplateModelException( 42 | "This directive doesn't allow loop variables."); 43 | } 44 | 45 | if(templateDirectiveBody != null) { 46 | throw new TemplateModelException("This directive <@asset url='relativeUrl'> doesn't allow a body"); 47 | } 48 | 49 | Writer out = environment.getOut(); 50 | out.write(context.getEnvironment().getProperty("server.servlet-path") + map.get("url")); 51 | // out.write(URLHelper.getBaseUrl(request) + map.get("url")); 52 | 53 | } 54 | 55 | } 56 | 57 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/config/Constants.java: -------------------------------------------------------------------------------- 1 | package com.smatt.config; 2 | 3 | /** 4 | * Created by smatt on 26/04/2017. 5 | */ 6 | public class Constants { 7 | public static final String INTENDED_URI = "intentPath"; //this is the path being visited before login was triggered 8 | public static final String LOGGED_IN_USER = "user"; 9 | 10 | public static final String ROLE_WRITER = "WRITER"; 11 | public static final String ROLE_EDITOR = "EDITOR"; 12 | public static final String ROLE_SUPER_ADMIN = "SUPER_ADMIN"; 13 | 14 | public static final int TOKEN_LENGTH = 10; 15 | 16 | public static final String CATEGORY_ANNOUNCEMENT = "Announcement"; 17 | 18 | public static final int MAX_POST_PER_PAGE = 8; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/config/LocalDateTimeAttributeConverter.java: -------------------------------------------------------------------------------- 1 | package com.smatt.config; 2 | 3 | import javax.persistence.AttributeConverter; 4 | import javax.persistence.Converter; 5 | import java.sql.Timestamp; 6 | import java.time.LocalDateTime; 7 | 8 | /** 9 | * Created by smatt on 22/05/2017. 10 | */ 11 | @Converter(autoApply = true) 12 | public class LocalDateTimeAttributeConverter implements AttributeConverter { 13 | 14 | @Override 15 | public Timestamp convertToDatabaseColumn(LocalDateTime locDateTime) { 16 | return (locDateTime == null ? null : Timestamp.valueOf(locDateTime)); 17 | } 18 | 19 | @Override 20 | public LocalDateTime convertToEntityAttribute(Timestamp sqlTimestamp) { 21 | return (sqlTimestamp == null ? null : sqlTimestamp.toLocalDateTime()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/config/Roles.java: -------------------------------------------------------------------------------- 1 | package com.smatt.config; 2 | 3 | /** 4 | * Created by smatt on 26/04/2017. 5 | */ 6 | public enum Roles { 7 | WRITER, //can only modify posts created by him 8 | EDITOR, //can modify any posts, but no admin privileges to the Users management 9 | SUPER_ADMIN; //can do just about anything 10 | } 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/controllers/error/ErrorController.java: -------------------------------------------------------------------------------- 1 | package com.smatt.controllers.error; 2 | 3 | import org.springframework.stereotype.Controller; 4 | import org.springframework.ui.ModelMap; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | import org.springframework.web.bind.annotation.RequestMapping; 7 | 8 | import javax.servlet.http.HttpServletRequest; 9 | 10 | /** 11 | * Created by smatt on 21/06/2017. 12 | */ 13 | @Controller 14 | @RequestMapping(value = "/error") 15 | public class ErrorController { 16 | 17 | 18 | @GetMapping(value = "/404") 19 | public String handle404() { 20 | return "error/404"; 21 | } 22 | 23 | @GetMapping(value = {"/", "/500", ""}) 24 | public String handleGeneralError() { 25 | return "error/500"; 26 | } 27 | 28 | @GetMapping(value = "/accessdenied") 29 | public String handleAccessDenied() { 30 | return "error/accessdenied"; 31 | } 32 | 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/dao/CategoryRepository.java: -------------------------------------------------------------------------------- 1 | package com.smatt.dao; 2 | 3 | import com.smatt.models.Category; 4 | import org.springframework.data.repository.CrudRepository; 5 | 6 | /** 7 | * Created by smatt on 22/04/2017. 8 | */ 9 | public interface CategoryRepository extends CrudRepository { 10 | public Category findByCategory(String category); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/dao/CommentRepository.java: -------------------------------------------------------------------------------- 1 | package com.smatt.dao; 2 | 3 | import com.smatt.models.Comment; 4 | import org.springframework.data.jpa.repository.Query; 5 | import org.springframework.data.repository.CrudRepository; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * Created by smatt on 21/07/2017. 11 | */ 12 | public interface CommentRepository extends CrudRepository { 13 | 14 | @Query("SELECT c FROM Comment c WHERE c.postId = ?1 AND c.parentCommentId = null ORDER BY c.createdAt DESC") 15 | List findDirectComments(String postId); 16 | 17 | @Query("SELECT c FROM Comment c WHERE c.postId = ?1 AND c.parentCommentId = ?2 ORDER BY c.createdAt ASC") 18 | List findCommentReplies(String postId, String commentId); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/dao/PostRepository.java: -------------------------------------------------------------------------------- 1 | package com.smatt.dao; 2 | 3 | import com.smatt.models.Category; 4 | import com.smatt.models.Post; 5 | import com.smatt.models.User; 6 | import org.springframework.data.domain.Page; 7 | import org.springframework.data.domain.Pageable; 8 | import org.springframework.data.jpa.repository.Modifying; 9 | import org.springframework.data.jpa.repository.Query; 10 | import org.springframework.data.repository.CrudRepository; 11 | 12 | import javax.persistence.Transient; 13 | import java.time.LocalDateTime; 14 | import java.util.Date; 15 | import java.util.List; 16 | 17 | /** 18 | * Created by smatt on 22/03/2017. 19 | */ 20 | public interface PostRepository extends CrudRepository { 21 | 22 | List findByAuthor(User author); 23 | 24 | @Query("select p from Post p where p.published = true and p.category like ?1 order by p.createdAt desc") 25 | Page findByCategory(Category category, Pageable pageable); 26 | 27 | @Query("select p from Post p where p.published = true and p.category like ?1 and p.id <> ?2 order by p.createdAt desc") 28 | List findRelatedInCategory(Category category, String excludeId); 29 | 30 | //this method will get all posts, sort 31 | @Query("select p from Post p") 32 | List findAllPosts(Pageable pageable); 33 | 34 | // any caller that want to use this can specify the sorting order via the Pageable interface 35 | @Query("select p from Post p where p.published = true") 36 | List findAllPublishedPosts(Pageable p); 37 | 38 | // this is meant to be listing all posts 39 | @Query("select p from Post p where p.published = true order by p.createdAt desc") 40 | Page findAllPublishedPostsPaged(Pageable p); 41 | 42 | @Query("select p from Post p where p.featured = true and p.published = true order by p.createdAt desc") 43 | List findFeaturedPosts(Pageable p); 44 | 45 | Page findByPostContaining(String keyword, Pageable p); 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/dao/SectionRepository.java: -------------------------------------------------------------------------------- 1 | package com.smatt.dao; 2 | 3 | import com.smatt.models.Section; 4 | import org.springframework.data.repository.CrudRepository; 5 | 6 | /** 7 | * Created by smatt on 22/04/2017. 8 | */ 9 | public interface SectionRepository extends CrudRepository { 10 | Section findBySection(String section); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/dao/TagRepository.java: -------------------------------------------------------------------------------- 1 | package com.smatt.dao; 2 | 3 | import com.smatt.models.Tag; 4 | import org.springframework.data.repository.CrudRepository; 5 | 6 | /** 7 | * Created by smatt on 26/08/2017. 8 | */ 9 | public interface TagRepository extends CrudRepository { 10 | Tag findByTag(String tag); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/dao/UserRepository.java: -------------------------------------------------------------------------------- 1 | package com.smatt.dao; 2 | 3 | import com.smatt.models.User; 4 | import org.springframework.data.repository.CrudRepository; 5 | import org.springframework.jdbc.core.JdbcTemplate; 6 | 7 | /** 8 | * Created by smatt on 22/03/2017. 9 | */ 10 | 11 | // This will be AUTO IMPLEMENTED by Spring into a Bean called userRepository 12 | public interface UserRepository extends CrudRepository { 13 | public User findByUsername(String username); 14 | public User findByEmail(String email); 15 | public User findByToken(String token); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/exceptions/GlobalExceptionHandler.java: -------------------------------------------------------------------------------- 1 | package com.smatt.exceptions; 2 | 3 | 4 | import org.apache.log4j.Logger; 5 | import org.springframework.stereotype.Controller; 6 | import org.springframework.web.bind.annotation.ControllerAdvice; 7 | import org.springframework.web.bind.annotation.ExceptionHandler; 8 | import org.springframework.web.servlet.config.annotation.EnableWebMvc; 9 | 10 | import javax.servlet.http.HttpServletRequest; 11 | 12 | /** 13 | * Created by smatt on 10/04/2017. 14 | */ 15 | @ControllerAdvice 16 | @Controller 17 | public class GlobalExceptionHandler { 18 | 19 | Logger logger = Logger.getLogger(GlobalExceptionHandler.class); 20 | 21 | @ExceptionHandler(Exception.class) 22 | public String generalExceptionHandler(Exception e) { 23 | logger.info("Global Exception Handler Invoked ! " + e.getMessage()); 24 | e.printStackTrace(); 25 | return "redirect:/error/500"; 26 | } 27 | 28 | 29 | 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/exceptions/MyAccessDeniedHandler.java: -------------------------------------------------------------------------------- 1 | package com.smatt.exceptions; 2 | 3 | import org.apache.log4j.Logger; 4 | import org.springframework.security.access.AccessDeniedException; 5 | import org.springframework.security.web.access.AccessDeniedHandler; 6 | import org.springframework.web.bind.annotation.ControllerAdvice; 7 | 8 | import javax.servlet.ServletException; 9 | import javax.servlet.http.HttpServletRequest; 10 | import javax.servlet.http.HttpServletResponse; 11 | import java.io.IOException; 12 | 13 | /** 14 | * Created by smatt on 10/04/2017. 15 | */ 16 | @ControllerAdvice 17 | public class MyAccessDeniedHandler implements AccessDeniedHandler { 18 | 19 | Logger logger = Logger.getLogger(MyAccessDeniedHandler.class); 20 | 21 | public MyAccessDeniedHandler() { 22 | 23 | } 24 | 25 | @Override 26 | public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AccessDeniedException e) throws IOException, ServletException { 27 | logger.info("Access denied Handler Invoked!"); 28 | e.printStackTrace(); 29 | httpServletResponse.sendRedirect("/error/accessdenied"); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/exceptions/StorageException.java: -------------------------------------------------------------------------------- 1 | package com.smatt.exceptions; 2 | 3 | public class StorageException extends RuntimeException { 4 | 5 | public StorageException(String message) { 6 | super(message); 7 | } 8 | 9 | public StorageException(String message, Throwable cause) { 10 | super(message, cause); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/exceptions/StorageFileNotFoundException.java: -------------------------------------------------------------------------------- 1 | package com.smatt.exceptions; 2 | 3 | public class StorageFileNotFoundException extends StorageException { 4 | 5 | public StorageFileNotFoundException(String message) { 6 | super(message); 7 | } 8 | 9 | public StorageFileNotFoundException(String message, Throwable cause) { 10 | super(message, cause); 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/java/com/smatt/models/Contact.java: -------------------------------------------------------------------------------- 1 | package com.smatt.models; 2 | 3 | import org.apache.commons.lang3.StringUtils; 4 | 5 | /** 6 | * Created by smatt on 16/07/2017. 7 | */ 8 | public class Contact { 9 | 10 | private String name, email, message; 11 | 12 | public Contact(){ } 13 | 14 | public String getName() { 15 | return name; 16 | } 17 | 18 | public void setName(String name) { 19 | this.name = name; 20 | } 21 | 22 | public String getEmail() { 23 | return email; 24 | } 25 | 26 | public void setEmail(String email) { 27 | this.email = email; 28 | } 29 | 30 | public String getMessage() { 31 | return message; 32 | } 33 | 34 | public void setMessage(String message) { 35 | this.message = message; 36 | } 37 | 38 | public boolean isValidDetails() { 39 | return !StringUtils.isEmpty(this.email) 40 | && !StringUtils.isEmpty(this.name) 41 | && !StringUtils.isEmpty(this.message); 42 | } 43 | 44 | @Override 45 | public String toString() { 46 | return "Name: " + this.name + 47 | "\nEmail: " + this.email 48 | + "\nMessage: " + this.message; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/models/Section.java: -------------------------------------------------------------------------------- 1 | package com.smatt.models; 2 | 3 | import org.apache.commons.lang3.RandomStringUtils; 4 | import org.apache.commons.lang3.StringUtils; 5 | 6 | import javax.persistence.*; 7 | import java.time.LocalDateTime; 8 | 9 | /** 10 | * Created by smatt on 22/04/2017. 11 | */ 12 | @Entity 13 | @Table(name = "sections") 14 | public class Section { 15 | 16 | @Id 17 | private String id; 18 | @Column(unique = true) 19 | private String section; 20 | private LocalDateTime createdAt; 21 | private LocalDateTime updatedAt; 22 | 23 | 24 | public Section() {} 25 | 26 | public Section(String section) { 27 | this.section = section; 28 | } 29 | 30 | public String getId() { 31 | return id; 32 | } 33 | 34 | public void setId(String id) { 35 | this.id = id; 36 | } 37 | 38 | public String getSection() { 39 | return section; 40 | } 41 | 42 | public void setSection(String section) { 43 | this.section = section; 44 | } 45 | 46 | public LocalDateTime getCreatedAt() { 47 | return createdAt; 48 | } 49 | 50 | public void setCreatedAt(LocalDateTime createdAt) { 51 | this.createdAt = createdAt; 52 | } 53 | 54 | public LocalDateTime getUpdatedAt() { 55 | return updatedAt; 56 | } 57 | 58 | public void setUpdatedAt(LocalDateTime updatedAt) { 59 | this.updatedAt = updatedAt; 60 | } 61 | 62 | @PrePersist 63 | public void preSave() { 64 | if(createdAt == null) { 65 | createdAt = LocalDateTime.now(); 66 | } 67 | if(StringUtils.isEmpty(id)) { 68 | id = RandomStringUtils.randomAlphanumeric(10); 69 | } 70 | 71 | //always a new one 72 | updatedAt = LocalDateTime.now(); 73 | } 74 | 75 | @PreUpdate 76 | public void preUpdate() { 77 | updatedAt = LocalDateTime.now(); 78 | } 79 | 80 | @Override 81 | public String toString() { 82 | return "Section: " + getSection(); 83 | } 84 | 85 | } 86 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/service/MySecurityService.java: -------------------------------------------------------------------------------- 1 | package com.smatt.service; 2 | 3 | import com.smatt.config.Constants; 4 | import com.smatt.dao.UserRepository; 5 | import com.smatt.models.User; 6 | import org.apache.log4j.Logger; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.security.core.Authentication; 9 | import org.springframework.security.core.context.SecurityContextHolder; 10 | import org.springframework.security.core.userdetails.UserDetails; 11 | import org.springframework.security.web.authentication.logout.CookieClearingLogoutHandler; 12 | import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler; 13 | import org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices; 14 | import org.springframework.stereotype.Service; 15 | 16 | import javax.servlet.http.HttpServletRequest; 17 | import javax.servlet.http.HttpServletResponse; 18 | import javax.servlet.http.HttpSession; 19 | import java.io.IOException; 20 | 21 | /** 22 | * Created by smatt on 23/04/2017. 23 | */ 24 | @Service 25 | public class MySecurityService { 26 | 27 | 28 | public static String findLoggedInUsername() { 29 | Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 30 | if(auth != null && auth.getPrincipal() != null && auth.getPrincipal() instanceof UserDetails) { 31 | return ((UserDetails) auth.getPrincipal()).getUsername(); 32 | } 33 | return null; 34 | } 35 | 36 | 37 | 38 | public static void doLogout(HttpServletRequest request, HttpServletResponse response) { 39 | Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 40 | new SecurityContextLogoutHandler().logout(request, response, auth ); 41 | new CookieClearingLogoutHandler(AbstractRememberMeServices.SPRING_SECURITY_REMEMBER_ME_COOKIE_KEY).logout(request, response, auth); 42 | } 43 | 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/service/NewsletterService.java: -------------------------------------------------------------------------------- 1 | package com.smatt.service; 2 | 3 | import com.smatt.config.BlogProperties; 4 | import com.smatt.lib.JMailChimp; 5 | import io.vavr.control.Try; 6 | import org.apache.log4j.Logger; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.scheduling.annotation.Async; 9 | import org.springframework.stereotype.Service; 10 | 11 | /** 12 | * Created by smatt on 29/08/2017. 13 | */ 14 | @Service 15 | public class NewsletterService { 16 | 17 | private BlogProperties blogProperties; 18 | private Logger logger = Logger.getLogger(NewsletterService.class); 19 | 20 | @Autowired 21 | public NewsletterService(BlogProperties mP) { 22 | this.blogProperties = mP; 23 | } 24 | 25 | 26 | @Async 27 | public void subscribe(String email) { 28 | 29 | JMailChimp jMailChimp = new JMailChimp(blogProperties.getMailChimpApiKey(), blogProperties.getMailChimpApiRoot()); 30 | 31 | String result = Try.of(() -> jMailChimp.addSubscriber(email, blogProperties.getMailChimpListId(), JMailChimp.STATUS.PENDING)) 32 | .recover(e -> "Error Adding Subscriber " + email + " to mailing list. \n" + e.getLocalizedMessage()) 33 | .get(); 34 | 35 | logger.info("NewsletterService.subscribe: " + result); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/service/StorageService.java: -------------------------------------------------------------------------------- 1 | package com.smatt.service; 2 | 3 | import org.springframework.core.io.Resource; 4 | import org.springframework.web.multipart.MultipartFile; 5 | 6 | import java.nio.file.Path; 7 | import java.util.stream.Stream; 8 | 9 | /** 10 | * Created by smatt on 19/04/2017. 11 | */ 12 | 13 | 14 | public interface StorageService { 15 | 16 | void init(); 17 | 18 | String store(MultipartFile file); 19 | 20 | Stream loadAll(); 21 | 22 | Path load(String filename); 23 | 24 | Resource loadAsResource(String filename); 25 | 26 | void delete(String filename); 27 | 28 | void deleteAll(); 29 | 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/service/TokenGenerator.java: -------------------------------------------------------------------------------- 1 | package com.smatt.service; 2 | 3 | import org.apache.log4j.Logger; 4 | import org.springframework.stereotype.Service; 5 | 6 | import java.security.SecureRandom; 7 | 8 | /** 9 | * Created by smatt on 29/04/2017. 10 | */ 11 | @Service 12 | public class TokenGenerator { 13 | 14 | private SecureRandom secureRandom; 15 | private static final String AB = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 16 | Logger logger = Logger.getLogger(TokenGenerator.class); 17 | 18 | public TokenGenerator() { 19 | secureRandom = new SecureRandom(); 20 | } 21 | 22 | public String getToken(int lenght) { 23 | StringBuilder sb = new StringBuilder(lenght); 24 | for( int i = 0; i < lenght; i++ ) 25 | sb.append( AB.charAt( secureRandom.nextInt(AB.length()) ) ); 26 | 27 | return sb.toString(); 28 | } 29 | 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/utils/MyApplicationContext.java: -------------------------------------------------------------------------------- 1 | package com.smatt.utils; 2 | 3 | import org.springframework.beans.BeansException; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.context.ApplicationContext; 6 | import org.springframework.context.ApplicationContextAware; 7 | import org.springframework.context.annotation.Configuration; 8 | 9 | import javax.servlet.http.HttpServletRequest; 10 | 11 | /** 12 | * Created by smatt on 24/03/2017. 13 | */ 14 | 15 | @Configuration 16 | public class MyApplicationContext implements ApplicationContextAware { 17 | 18 | public static ApplicationContext context; 19 | public static HttpServletRequest request; 20 | 21 | public MyApplicationContext() { } 22 | 23 | @Override 24 | public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 25 | this.context = applicationContext; 26 | } 27 | 28 | public static HttpServletRequest getRequest() { 29 | return request; 30 | } 31 | 32 | @Autowired 33 | public static void setRequest(HttpServletRequest request) { 34 | MyApplicationContext.request = request; 35 | } 36 | 37 | public static ApplicationContext getApplicationContext() { 38 | return context; 39 | } 40 | 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/utils/URLHelper.java: -------------------------------------------------------------------------------- 1 | package com.smatt.utils; 2 | 3 | import javax.servlet.http.HttpServletRequest; 4 | 5 | /** 6 | * Created by smatt on 08/05/2017. 7 | */ 8 | public class URLHelper { 9 | 10 | /* 11 | * @param HttpServletRequest Object 12 | * @returns a string representation of the full base url and port 13 | * e.g. http://localhost:9000 14 | * */ 15 | public static String getBaseUrl(HttpServletRequest request) { 16 | if(request.getServerName().contains("localhost")) { 17 | return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort(); 18 | } 19 | return request.getScheme() + "://" + request.getServerName(); 20 | } 21 | 22 | 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/smatt/utils/Utility.java: -------------------------------------------------------------------------------- 1 | package com.smatt.utils; 2 | 3 | import org.jsoup.Jsoup; 4 | 5 | /** 6 | * Created by smatt on 05/08/2017. 7 | */ 8 | public class Utility { 9 | 10 | public static String makePreviewText(String htmlContent) { 11 | String text = Jsoup.parse(htmlContent).getElementsByTag("p").first().html(); 12 | if(text.length() > 150) { 13 | return text.substring(0, 150); 14 | } 15 | return text; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/resources/application-heroku.properties: -------------------------------------------------------------------------------- 1 | #app settings 2 | app.name=Spring Blog 3 | app.description=This is a full fledged Blog Website designed with Spring Framework in Java 4 | 5 | 6 | #server 7 | server.port 8 | server.servlet-path=/ 9 | server.context-path=/ 10 | 11 | #spring mvc properties 12 | spring.mvc.throw-exception-if-no-handler-found=true 13 | spring.http.multipart.max-file-size=30MB 14 | spring.http.multipart.max-request-size=30MB 15 | 16 | #spring-data properties 17 | spring.jpa.hibernate.ddl-auto=update 18 | spring.datasource.url 19 | spring.datasource.username 20 | spring.datasource.password 21 | spring.jpa.show-sql=false 22 | 23 | #freemarker 24 | spring.freemarker.suffix=.ftl 25 | spring.freemarker.expose-spring-macro-helpers=true 26 | 27 | #logging.level.org.springframework=DEBUG 28 | 29 | #email settings 30 | spring.mail.host=smtp.mailtrap.io 31 | spring.mail.port=25 32 | spring.mail.username=mailtrap-username 33 | spring.mail.password=mailtrap-password 34 | spring.mail.properties.mail.smtp.auth=true 35 | from-email=contact@spring-blog.com 36 | admin-contact=example@gmail.com 37 | #spring.mail.properties.mail.smtp.starttls.enable=true 38 | 39 | #SmattBlog Properties 40 | smattblog.mailChimpApiKey=YOUR_MAIL_CHIMP_API_KEY. -------------------------------------------------------------------------------- /src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | #app settings 2 | app.name=Spring Blog 3 | app.description=This is a full fledged Blog Website designed with Spring Framework in Java 4 | appp.env=local 5 | 6 | #server 7 | server.port=9000 8 | server.servlet-path=/ 9 | server.context-path=/ 10 | 11 | #spring mvc properties 12 | spring.mvc.throw-exception-if-no-handler-found=true 13 | spring.http.multipart.max-file-size=30MB 14 | spring.http.multipart.max-request-size=30MB 15 | 16 | #spring-data properties 17 | spring.jpa.hibernate.ddl-auto=update 18 | spring.datasource.url=jdbc:mysql://localhost:3306/spring-blog 19 | spring.datasource.username=database_username 20 | spring.datasource.password=database_password 21 | spring.jpa.show-sql=false 22 | hibernate.dialect=MYSQL 23 | 24 | #freemarker 25 | spring.freemarker.suffix=.ftl 26 | spring.freemarker.expose-spring-macro-helpers=true 27 | 28 | #logging.level.org.springframework=DEBUG 29 | 30 | #email settings 31 | spring.mail.host=smtp.mailtrap.io 32 | spring.mail.port=25 33 | spring.mail.username=mailtrap-username 34 | spring.mail.password=mailtrap-password 35 | spring.mail.properties.mail.smtp.auth=true 36 | from-email=contact@spring-blog.com 37 | admin-contact=example@mail.com 38 | #spring.mail.properties.mail.smtp.starttls.enable=true 39 | 40 | #SmattBlog Properties 41 | smattblog.mailChimpApiKey=YOUR_MAIL_CHIMP_API_KEY. -------------------------------------------------------------------------------- /src/main/resources/public/admin/css/blockui.min.css: -------------------------------------------------------------------------------- 1 | .blockUI.blockOverlay{-webkit-border-radius:.25rem;border-radius:.25rem}.block-msg-default,.block-msg-message-loader{border:none!important;background-color:transparent!important}.block-msg-default .fa{font-size:42px;color:#fff;display:inline-block;width:42px;height:40px}.block-msg-default h6{margin-top:8px;color:#fff;font-size:17px;line-height:24px}.block-msg-message-loader .blockui-default-message{padding:20px;-webkit-border-radius:.25rem;border-radius:.25rem;color:#102943;font-size:17px;background:#fff} -------------------------------------------------------------------------------- /src/main/resources/public/admin/css/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/css/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/main/resources/public/admin/css/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/css/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/main/resources/public/admin/css/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/css/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/main/resources/public/admin/css/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/css/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /src/main/resources/public/admin/css/nprogress/nprogress.css: -------------------------------------------------------------------------------- 1 | /* Make clicks pass-through */ 2 | #nprogress { 3 | pointer-events: none; 4 | } 5 | 6 | #nprogress .bar { 7 | background: #29d; 8 | 9 | position: fixed; 10 | z-index: 1031; 11 | top: 0; 12 | left: 0; 13 | 14 | width: 100%; 15 | height: 2px; 16 | } 17 | 18 | /* Fancy blur effect */ 19 | #nprogress .peg { 20 | display: block; 21 | position: absolute; 22 | right: 0px; 23 | width: 100px; 24 | height: 100%; 25 | box-shadow: 0 0 10px #29d, 0 0 5px #29d; 26 | opacity: 1.0; 27 | 28 | -webkit-transform: rotate(3deg) translate(0px, -4px); 29 | -ms-transform: rotate(3deg) translate(0px, -4px); 30 | transform: rotate(3deg) translate(0px, -4px); 31 | } 32 | 33 | /* Remove these to get rid of the spinner */ 34 | #nprogress .spinner { 35 | display: block; 36 | position: fixed; 37 | z-index: 1031; 38 | top: 15px; 39 | right: 15px; 40 | } 41 | 42 | #nprogress .spinner-icon { 43 | width: 18px; 44 | height: 18px; 45 | box-sizing: border-box; 46 | 47 | border: solid 2px transparent; 48 | border-top-color: #29d; 49 | border-left-color: #29d; 50 | border-radius: 50%; 51 | 52 | -webkit-animation: nprogress-spinner 400ms linear infinite; 53 | animation: nprogress-spinner 400ms linear infinite; 54 | } 55 | 56 | .nprogress-custom-parent { 57 | overflow: hidden; 58 | position: relative; 59 | } 60 | 61 | .nprogress-custom-parent #nprogress .spinner, 62 | .nprogress-custom-parent #nprogress .bar { 63 | position: absolute; 64 | } 65 | 66 | @-webkit-keyframes nprogress-spinner { 67 | 0% { -webkit-transform: rotate(0deg); } 68 | 100% { -webkit-transform: rotate(360deg); } 69 | } 70 | @keyframes nprogress-spinner { 71 | 0% { transform: rotate(0deg); } 72 | 100% { transform: rotate(360deg); } 73 | } 74 | 75 | -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/Thumbs.db -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/american-express.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/american-express.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/avatar.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/avatar04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/avatar04.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/avatar2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/avatar2.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/avatar3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/avatar3.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/avatar5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/avatar5.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/back_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/back_disabled.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/back_enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/back_enabled.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/back_enabled_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/back_enabled_hover.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/boxed-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/boxed-bg.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/boxed-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/boxed-bg.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/cropper.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/cropper.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/default-50x50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/default-50x50.gif -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/default-post-picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/default-post-picture.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/default-post-user.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/default-post-user.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/forward_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/forward_disabled.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/forward_enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/forward_enabled.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/forward_enabled_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/forward_enabled_hover.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/icons.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/img.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/inbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/inbox.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/loading.gif -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/mastercard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/mastercard.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/media.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/media.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/paypal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/paypal.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/photo1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/photo1.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/photo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/photo2.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/photo3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/photo3.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/photo4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/photo4.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/picture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/picture.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/prod-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/prod-1.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/prod-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/prod-2.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/prod-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/prod-3.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/prod-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/prod-4.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/prod-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/prod-5.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/user.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/user1-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/user1-128x128.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/user2-160x160.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/user2-160x160.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/user3-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/user3-128x128.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/user4-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/user4-128x128.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/user5-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/user5-128x128.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/user6-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/user6-128x128.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/user7-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/user7-128x128.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/user8-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/user8-128x128.jpg -------------------------------------------------------------------------------- /src/main/resources/public/admin/images/visa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/images/visa.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/advlist/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("advlist",function(e){function t(t){return e.$.contains(e.getBody(),t)}function n(e){return e&&/^(OL|UL|DL)$/.test(e.nodeName)&&t(e)}function r(e,t){var n=[];return t&&tinymce.each(t.split(/[ ,]/),function(e){n.push({text:e.replace(/\-/g," ").replace(/\b\w/g,function(e){return e.toUpperCase()}),data:"default"==e?"":e})}),n}function i(t,n){e.undoManager.transact(function(){var r,i=e.dom,o=e.selection;if(r=i.getParent(o.getNode(),"ol,ul"),!r||r.nodeName!=t||n===!1){var a={"list-style-type":n?n:""};e.execCommand("UL"==t?"InsertUnorderedList":"InsertOrderedList",!1,a)}r=i.getParent(o.getNode(),"ol,ul"),r&&tinymce.util.Tools.each(i.select("ol,ul",r).concat([r]),function(e){e.nodeName!==t&&n!==!1&&(e=i.rename(e,t)),i.setStyle(e,"listStyleType",n?n:null),e.removeAttribute("data-mce-style")}),e.focus()})}function o(t){var n=e.dom.getStyle(e.dom.getParent(e.selection.getNode(),"ol,ul"),"listStyleType")||"";t.control.items().each(function(e){e.active(e.settings.data===n)})}var a,s,l=function(e,t){var n=e.settings.plugins?e.settings.plugins:"";return tinymce.util.Tools.inArray(n.split(/[ ,]/),t)!==-1};a=r("OL",e.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman")),s=r("UL",e.getParam("advlist_bullet_styles","default,circle,disc,square"));var c=function(t){return function(){var r=this;e.on("NodeChange",function(e){var i=tinymce.util.Tools.grep(e.parents,n);r.active(i.length>0&&i[0].nodeName===t)})}};l(e,"lists")&&(e.addCommand("ApplyUnorderedListStyle",function(e,t){i("UL",t["list-style-type"])}),e.addCommand("ApplyOrderedListStyle",function(e,t){i("OL",t["list-style-type"])}),e.addButton("numlist",{type:a.length>0?"splitbutton":"button",tooltip:"Numbered list",menu:a,onPostRender:c("OL"),onshow:o,onselect:function(e){i("OL",e.control.settings.data)},onclick:function(){i("OL",!1)}}),e.addButton("bullist",{type:s.length>0?"splitbutton":"button",tooltip:"Bullet list",onPostRender:c("UL"),menu:s,onshow:o,onselect:function(e){i("UL",e.control.settings.data)},onclick:function(){i("UL",!1)}}))}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/anchor/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("anchor",function(e){var t=function(e){return!e.attr("href")&&(e.attr("id")||e.attr("name"))&&!e.firstChild},n=function(e){return function(n){for(var r=0;rn&&(t=n)}return t}function i(e,t){1!=e.nodeType||e.hasChildNodes()?s.setStart(e,r(e,t)):s.setStartBefore(e)}function o(e,t){1!=e.nodeType||e.hasChildNodes()?s.setEnd(e,r(e,t)):s.setEndAfter(e)}var s,l,c,u,d,f,p,m,g,h;if("A"!=e.selection.getNode().tagName){if(s=e.selection.getRng(!0).cloneRange(),s.startOffset<5){if(m=s.endContainer.previousSibling,!m){if(!s.endContainer.firstChild||!s.endContainer.firstChild.nextSibling)return;m=s.endContainer.firstChild.nextSibling}if(g=m.length,i(m,g),o(m,g),s.endOffset<5)return;l=s.endOffset,u=m}else{if(u=s.endContainer,3!=u.nodeType&&u.firstChild){for(;3!=u.nodeType&&u.firstChild;)u=u.firstChild;3==u.nodeType&&(i(u,0),o(u,u.nodeValue.length))}l=1==s.endOffset?2:s.endOffset-1-t}c=l;do i(u,l>=2?l-2:0),o(u,l>=1?l-1:0),l-=1,h=s.toString();while(" "!=h&&""!==h&&160!=h.charCodeAt(0)&&l-2>=0&&h!=n);s.toString()==n||160==s.toString().charCodeAt(0)?(i(u,l),o(u,c),l+=1):0===s.startOffset?(i(u,0),o(u,c)):(i(u,l),o(u,c)),f=s.toString(),"."==f.charAt(f.length-1)&&o(u,c-1),f=s.toString(),p=f.match(a),p&&("www."==p[1]?p[1]="http://www.":/@$/.test(p[1])&&!/^mailto:/.test(p[1])&&(p[1]="mailto:"+p[1]),d=e.selection.getBookmark(),e.selection.setRng(s),e.execCommand("createlink",!1,p[1]+p[2]),e.settings.default_link_target&&e.dom.setAttrib(e.selection.getNode(),"target",e.settings.default_link_target),e.selection.moveToBookmark(d),e.nodeChanged())}}var o,a=/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+\-]+@)(.+)$/i;return e.settings.autolink_pattern&&(a=e.settings.autolink_pattern),e.on("keydown",function(t){if(13==t.keyCode)return r(e)}),tinymce.Env.ie?void e.on("focus",function(){if(!o){o=!0;try{e.execCommand("AutoUrlDetect",!1,!0)}catch(e){}}}):(e.on("keypress",function(n){if(41==n.keyCode)return t(e)}),void e.on("keyup",function(t){if(32==t.keyCode)return n(e)}))}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/autoresize/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("autoresize",function(e){function t(){return e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen()}function n(r){var a,s,l,c,u,d,f,p,m,g,h,v,b=tinymce.DOM;if(s=e.getDoc()){if(l=s.body,c=s.documentElement,u=i.autoresize_min_height,!l||r&&"setcontent"===r.type&&r.initial||t())return void(l&&c&&(l.style.overflowY="auto",c.style.overflowY="auto"));f=e.dom.getStyle(l,"margin-top",!0),p=e.dom.getStyle(l,"margin-bottom",!0),m=e.dom.getStyle(l,"padding-top",!0),g=e.dom.getStyle(l,"padding-bottom",!0),h=e.dom.getStyle(l,"border-top-width",!0),v=e.dom.getStyle(l,"border-bottom-width",!0),d=l.offsetHeight+parseInt(f,10)+parseInt(p,10)+parseInt(m,10)+parseInt(g,10)+parseInt(h,10)+parseInt(v,10),(isNaN(d)||d<=0)&&(d=tinymce.Env.ie?l.scrollHeight:tinymce.Env.webkit&&0===l.clientHeight?0:l.offsetHeight),d>i.autoresize_min_height&&(u=d),i.autoresize_max_height&&d>i.autoresize_max_height?(u=i.autoresize_max_height,l.style.overflowY="auto",c.style.overflowY="auto"):(l.style.overflowY="hidden",c.style.overflowY="hidden",l.scrollTop=0),u!==o&&(a=u-o,b.setStyle(e.iframeElement,"height",u+"px"),o=u,tinymce.isWebKit&&a<0&&n(r))}}function r(t,i,o){tinymce.util.Delay.setEditorTimeout(e,function(){n({}),t--?r(t,i,o):o&&o()},i)}var i=e.settings,o=0;e.settings.inline||(i.autoresize_min_height=parseInt(e.getParam("autoresize_min_height",e.getElement().offsetHeight),10),i.autoresize_max_height=parseInt(e.getParam("autoresize_max_height",0),10),e.on("init",function(){var t,n;t=e.getParam("autoresize_overflow_padding",1),n=e.getParam("autoresize_bottom_margin",50),t!==!1&&e.dom.setStyles(e.getBody(),{paddingLeft:t,paddingRight:t}),n!==!1&&e.dom.setStyles(e.getBody(),{paddingBottom:n})}),e.on("nodechange setcontent keyup FullscreenStateChanged",n),e.getParam("autoresize_on_init",!0)&&e.on("init",function(){r(20,100,function(){r(5,1e3)})}),e.addCommand("mceAutoResize",n))}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/code/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("code",function(e){function t(){var t=e.windowManager.open({title:"Source code",body:{type:"textbox",name:"code",multiline:!0,minWidth:e.getParam("code_dialog_width",600),minHeight:e.getParam("code_dialog_height",Math.min(tinymce.DOM.getViewPort().h-200,500)),spellcheck:!1,style:"direction: ltr; text-align: left"},onSubmit:function(t){e.focus(),e.undoManager.transact(function(){e.setContent(t.data.code)}),e.selection.setCursorLocation(),e.nodeChanged()}});t.find("#code").value(e.getContent({source_view:!0}))}e.addCommand("mceCodeEditor",t),e.addButton("code",{icon:"code",tooltip:"Source code",onclick:t}),e.addMenuItem("code",{icon:"code",text:"Source code",context:"tools",onclick:t})}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/colorpicker/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("colorpicker",function(e){function t(t,n){function r(e){var t=new tinymce.util.Color(e),n=t.toRgb();o.fromJSON({r:n.r,g:n.g,b:n.b,hex:t.toHex().substr(1)}),i(t.toHex())}function i(e){o.find("#preview")[0].getEl().style.background=e}var o=e.windowManager.open({title:"Color",items:{type:"container",layout:"flex",direction:"row",align:"stretch",padding:5,spacing:10,items:[{type:"colorpicker",value:n,onchange:function(){var e=this.rgb();o&&(o.find("#r").value(e.r),o.find("#g").value(e.g),o.find("#b").value(e.b),o.find("#hex").value(this.value().substr(1)),i(this.value()))}},{type:"form",padding:0,labelGap:5,defaults:{type:"textbox",size:7,value:"0",flex:1,spellcheck:!1,onchange:function(){var e,t,n=o.find("colorpicker")[0];return e=this.name(),t=this.value(),"hex"==e?(t="#"+t,r(t),void n.value(t)):(t={r:o.find("#r").value(),g:o.find("#g").value(),b:o.find("#b").value()},n.value(t),void r(t))}},items:[{name:"r",label:"R",autofocus:1},{name:"g",label:"G"},{name:"b",label:"B"},{name:"hex",label:"#",value:"000000"},{name:"preview",type:"container",border:1}]}]},onSubmit:function(){t("#"+this.toJSON().hex)}});r(n)}e.settings.color_picker_callback||(e.settings.color_picker_callback=t)}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/contextmenu/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("contextmenu",function(e){var t,n,r=e.settings.contextmenu_never_use_native,i=function(e){return e.ctrlKey&&!r},o=function(){return tinymce.Env.mac&&tinymce.Env.webkit},a=function(){return n===!0};return e.on("mousedown",function(t){o()&&2===t.button&&!i(t)&&e.selection.isCollapsed()&&e.once("contextmenu",function(t){e.selection.placeCaretAt(t.clientX,t.clientY)})}),e.on("contextmenu",function(r){var o;if(!i(r)){if(r.preventDefault(),o=e.settings.contextmenu||"link openlink image inserttable | cell row column deletetable",t)t.show();else{var a=[];tinymce.each(o.split(/[ ,]/),function(t){var n=e.menuItems[t];"|"==t&&(n={text:t}),n&&(n.shortcut="",a.push(n))});for(var s=0;s'}),e+=""}),e+=""}var r=[["cool","cry","embarassed","foot-in-mouth"],["frown","innocent","kiss","laughing"],["money-mouth","sealed","smile","surprised"],["tongue-out","undecided","wink","yell"]];e.addButton("emoticons",{type:"panelbutton",panel:{role:"application",autohide:!0,html:n,onclick:function(t){var n=e.dom.getParent(t.target,"a");n&&(e.insertContent(''+n.getAttribute('),this.hide())}},tooltip:"Emoticons"})}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/example/dialog.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Custom dialog

5 | Input some text: 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/example/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("example",function(e,t){e.addButton("example",{text:"My button",icon:!1,onclick:function(){e.windowManager.open({title:"Example plugin",body:[{type:"textbox",name:"title",label:"Title"}],onsubmit:function(t){e.insertContent("Title: "+t.data.title)}})}}),e.addMenuItem("example",{text:"Example plugin",context:"tools",onclick:function(){e.windowManager.open({title:"TinyMCE site",url:t+"/dialog.html",width:600,height:400,buttons:[{text:"Insert",onclick:function(){var t=e.windowManager.getWindows()[0];e.insertContent(t.getContentWindow().document.getElementById("content").value),t.close()}},{text:"Close",onclick:"close"}]})}})}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/example_dependency/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("example_dependency",function(){},["example"]); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/fullscreen/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("fullscreen",function(e){function t(){var e,t,n=window,r=document,i=r.body;return i.offsetWidth&&(e=i.offsetWidth,t=i.offsetHeight),n.innerWidth&&n.innerHeight&&(e=n.innerWidth,t=n.innerHeight),{w:e,h:t}}function n(){var e=tinymce.DOM.getViewPort();return{x:e.x,y:e.y}}function r(e){scrollTo(e.x,e.y)}function i(){function i(){f.setStyle(g,"height",t().h-(m.clientHeight-g.clientHeight))}var p,m,g,h,v=document.body,b=document.documentElement;d=!d,m=e.getContainer(),p=m.style,g=e.getContentAreaContainer().firstChild,h=g.style,d?(u=n(),o=h.width,a=h.height,h.width=h.height="100%",l=p.width,c=p.height,p.width=p.height="",f.addClass(v,"mce-fullscreen"),f.addClass(b,"mce-fullscreen"),f.addClass(m,"mce-fullscreen"),f.bind(window,"resize",i),i(),s=i):(h.width=o,h.height=a,l&&(p.width=l),c&&(p.height=c),f.removeClass(v,"mce-fullscreen"),f.removeClass(b,"mce-fullscreen"),f.removeClass(m,"mce-fullscreen"),f.unbind(window,"resize",s),r(u)),e.fire("FullscreenStateChanged",{state:d})}var o,a,s,l,c,u,d=!1,f=tinymce.DOM;if(!e.settings.inline)return e.on("init",function(){e.addShortcut("Ctrl+Shift+F","",i)}),e.on("remove",function(){s&&f.unbind(window,"resize",s)}),e.addCommand("mceFullScreen",i),e.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Ctrl+Shift+F",selectable:!0,onClick:function(){i(),e.focus()},onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})},context:"view"}),e.addButton("fullscreen",{tooltip:"Fullscreen",shortcut:"Ctrl+Shift+F",onClick:i,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})}}),{isFullscreen:function(){return d}}}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/hr/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("hr",function(e){e.addCommand("InsertHorizontalRule",function(){e.execCommand("mceInsertContent",!1,"
")}),e.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),e.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/insertdatetime/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("insertdatetime",function(e){function t(t,n){function r(e,t){if(e=""+e,e.length'+r+"";var o=e.dom.getParent(e.selection.getStart(),"time");if(o)return void e.dom.setOuterHTML(o,r)}e.insertContent(r)}var r,i,o="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),a="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),s="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),l="January February March April May June July August September October November December".split(" "),c=[];e.addCommand("mceInsertDate",function(){n(e.getParam("insertdatetime_dateformat",e.translate("%Y-%m-%d")))}),e.addCommand("mceInsertTime",function(){n(e.getParam("insertdatetime_timeformat",e.translate("%H:%M:%S")))}),e.addButton("insertdatetime",{type:"splitbutton",title:"Insert date/time",onclick:function(){n(r||i)},menu:c}),tinymce.each(e.settings.insertdatetime_formats||["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"],function(e){i||(i=e),c.push({text:t(e),onclick:function(){r=e,n(e)}})}),e.addMenuItem("insertdatetime",{icon:"date",text:"Date/time",menu:c,context:"insert"})}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/nonbreaking/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("nonbreaking",function(e){var t=e.getParam("nonbreaking_force_tab");if(e.addCommand("mceNonBreaking",function(){e.insertContent(e.plugins.visualchars&&e.plugins.visualchars.state?' ':" "),e.dom.setAttrib(e.dom.select("span.mce-nbsp"),"data-mce-bogus","1")}),e.addButton("nonbreaking",{title:"Nonbreaking space",cmd:"mceNonBreaking"}),e.addMenuItem("nonbreaking",{text:"Nonbreaking space",cmd:"mceNonBreaking",context:"insert"}),t){var n=+t>1?+t:3;e.on("keydown",function(t){if(9==t.keyCode){if(t.shiftKey)return;t.preventDefault();for(var r=0;r0?a.charAt(r-1):"";if('"'===i)return t;if(">"===i){var o=a.lastIndexOf("<",r);if(o!==-1){var l=a.substring(o,r);if(l.indexOf('contenteditable="false"')!==-1)return t}}return''+e.dom.encode("string"==typeof n[1]?n[1]:n[0])+""}var r=o.length,a=t.content,s=tinymce.trim(i);if("raw"!=t.format){for(;r--;)a=a.replace(o[r],n);t.content=a}}var r,i,o,a="contenteditable";r=" "+tinymce.trim(e.getParam("noneditable_editable_class","mceEditable"))+" ",i=" "+tinymce.trim(e.getParam("noneditable_noneditable_class","mceNonEditable"))+" ";var s=t(r),l=t(i);o=e.getParam("noneditable_regexp"),o&&!o.length&&(o=[o]),e.on("PreInit",function(){o&&e.on("BeforeSetContent",n),e.parser.addAttributeFilter("class",function(e){for(var t,n=e.length;n--;)t=e[n],s(t)?t.attr(a,"true"):l(t)&&t.attr(a,"false")}),e.serializer.addAttributeFilter(a,function(e){for(var t,n=e.length;n--;)t=e[n],(s(t)||l(t))&&(o&&t.attr("data-mce-content")?(t.name="#text",t.type=3,t.raw=!0,t.value=t.attr("data-mce-content")):t.attr(a,null))})})}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/pagebreak/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("pagebreak",function(e){var t="mce-pagebreak",n=e.getParam("pagebreak_separator",""),r=new RegExp(n.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi"),i='';e.addCommand("mcePageBreak",function(){e.settings.pagebreak_split_block?e.insertContent("

"+i+"

"):e.insertContent(i)}),e.addButton("pagebreak",{title:"Page break",cmd:"mcePageBreak"}),e.addMenuItem("pagebreak",{text:"Page break",icon:"pagebreak",cmd:"mcePageBreak",context:"insert"}),e.on("ResolveName",function(n){"IMG"==n.target.nodeName&&e.dom.hasClass(n.target,t)&&(n.name="pagebreak")}),e.on("click",function(n){n=n.target,"IMG"===n.nodeName&&e.dom.hasClass(n,t)&&e.selection.select(n)}),e.on("BeforeSetContent",function(e){e.content=e.content.replace(r,i)}),e.on("PreInit",function(){e.serializer.addNodeFilter("img",function(t){for(var r,i,o=t.length;o--;)if(r=t[o],i=r.attr("class"),i&&i.indexOf("mce-pagebreak")!==-1){var a=r.parent;if(e.schema.getBlockElements()[a.name]&&e.settings.pagebreak_split_block){a.type=3,a.value=n,a.raw=!0,r.remove();continue}r.type=3,r.value=n,r.raw=!0}})})}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/preview/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("preview",function(e){var t=e.settings,n=!tinymce.Env.ie;e.addCommand("mcePreview",function(){e.windowManager.open({title:"Preview",width:parseInt(e.getParam("plugin_preview_width","650"),10),height:parseInt(e.getParam("plugin_preview_height","500"),10),html:'",buttons:{text:"Close",onclick:function(){this.parent().parent().close()}},onPostRender:function(){var r,i="";i+='',tinymce.each(e.contentCSS,function(t){i+=''});var o=t.body_id||"tinymce";o.indexOf("=")!=-1&&(o=e.getParam("body_id","","hash"),o=o[e.id]||o);var a=t.body_class||"";a.indexOf("=")!=-1&&(a=e.getParam("body_class","","hash"),a=a[e.id]||"");var s=' ',l=e.settings.directionality?' dir="'+e.settings.directionality+'"':"";if(r=""+i+'"+e.getContent()+s+"",n)this.getEl("body").firstChild.src="data:text/html;charset=utf-8,"+encodeURIComponent(r);else{var c=this.getEl("body").firstChild.contentWindow.document;c.open(),c.write(r),c.close()}}})}),e.addButton("preview",{title:"Preview",cmd:"mcePreview"}),e.addMenuItem("preview",{text:"Preview",cmd:"mcePreview",context:"view"})}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/print/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("print",function(e){e.addCommand("mcePrint",function(){e.getWin().print()}),e.addButton("print",{title:"Print",cmd:"mcePrint"}),e.addShortcut("Meta+P","","mcePrint"),e.addMenuItem("print",{text:"Print",cmd:"mcePrint",icon:"print",shortcut:"Meta+P",context:"file"})}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/save/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("save",function(e){function t(){var t;if(t=tinymce.DOM.getParent(e.id,"form"),!e.getParam("save_enablewhendirty",!0)||e.isDirty())return tinymce.triggerSave(),e.getParam("save_onsavecallback")?(e.execCallback("save_onsavecallback",e),void e.nodeChanged()):void(t?(e.setDirty(!1),t.onsubmit&&!t.onsubmit()||("function"==typeof t.submit?t.submit():n(e.translate("Error: Form submit field collision."))),e.nodeChanged()):n(e.translate("Error: No form element found.")))}function n(t){e.notificationManager.open({text:t,type:"error"})}function r(){var t=tinymce.trim(e.startContent);return e.getParam("save_oncancelcallback")?void e.execCallback("save_oncancelcallback",e):(e.setContent(t),e.undoManager.clear(),void e.nodeChanged())}function i(){var t=this;e.on("nodeChange dirty",function(){t.disabled(e.getParam("save_enablewhendirty",!0)&&!e.isDirty())})}e.addCommand("mceSave",t),e.addCommand("mceCancel",r),e.addButton("save",{icon:"save",text:"Save",cmd:"mceSave",disabled:!0,onPostRender:i}),e.addButton("cancel",{text:"Cancel",icon:!1,cmd:"mceCancel",disabled:!0,onPostRender:i}),e.addShortcut("Meta+S","","mceSave")}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/tabfocus/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("tabfocus",function(e){function t(e){9!==e.keyCode||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()}function n(t){function n(n){function o(e){return"BODY"===e.nodeName||"hidden"!=e.type&&"none"!=e.style.display&&"hidden"!=e.style.visibility&&o(e.parentNode)}function l(e){return/INPUT|TEXTAREA|BUTTON/.test(e.tagName)&&tinymce.get(t.id)&&e.tabIndex!=-1&&o(e)}if(s=r.select(":input:enabled,*[tabindex]:not(iframe)"),i(s,function(t,n){if(t.id==e.id)return a=n,!1}),n>0){for(c=a+1;c=0;c--)if(l(s[c]))return s[c];return null}var a,s,l,c;if(!(9!==t.keyCode||t.ctrlKey||t.altKey||t.metaKey||t.isDefaultPrevented())&&(l=o(e.getParam("tab_focus",e.getParam("tabfocus_elements",":prev,:next"))),1==l.length&&(l[1]=l[0],l[0]=":prev"),s=t.shiftKey?":prev"==l[0]?n(-1):r.get(l[0]):":next"==l[1]?n(1):r.get(l[1]))){var u=tinymce.get(s.id||s.name);s.id&&u?u.focus():tinymce.util.Delay.setTimeout(function(){tinymce.Env.webkit||window.focus(),s.focus()},10),t.preventDefault()}}var r=tinymce.DOM,i=tinymce.each,o=tinymce.explode;e.on("init",function(){e.inline&&tinymce.DOM.setAttrib(e.getBody(),"tabIndex",null),e.on("keyup",t),tinymce.Env.gecko?e.on("keypress keydown",n):e.on("keydown",n)})}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/visualblocks/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("visualblocks",function(e,t){function n(){var t=this;t.active(o),e.on("VisualBlocks",function(){t.active(e.dom.hasClass(e.getBody(),"mce-visualblocks"))})}var r,i,o;window.NodeList&&(e.addCommand("mceVisualBlocks",function(){var n,a=e.dom;r||(r=a.uniqueId(),n=a.create("link",{id:r,rel:"stylesheet",href:t+"/css/visualblocks.css"}),e.getDoc().getElementsByTagName("head")[0].appendChild(n)),e.on("PreviewFormats AfterPreviewFormats",function(t){o&&a.toggleClass(e.getBody(),"mce-visualblocks","afterpreviewformats"==t.type)}),a.toggleClass(e.getBody(),"mce-visualblocks"),o=e.dom.hasClass(e.getBody(),"mce-visualblocks"),i&&i.active(a.hasClass(e.getBody(),"mce-visualblocks")),e.fire("VisualBlocks")}),e.addButton("visualblocks",{title:"Show blocks",cmd:"mceVisualBlocks",onPostRender:n}),e.addMenuItem("visualblocks",{text:"Show blocks",cmd:"mceVisualBlocks",onPostRender:n,selectable:!0,context:"view",prependToContext:!0}),e.on("init",function(){e.settings.visualblocks_default_state&&e.execCommand("mceVisualBlocks",!1,null,{skip_focus:!0})}),e.on("remove",function(){e.dom.removeClass(e.getBody(),"mce-visualblocks")}))}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/plugins/visualchars/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("visualchars",function(e){function t(t){function n(e){return''+e+""}function o(){var e,t="";for(e in p)t+=e;return new RegExp("["+t+"]","g")}function a(){var e,t="";for(e in p)t&&(t+=","),t+="span.mce-"+p[e];return t}var s,l,c,u,d,f,p,m,g=e.getBody(),h=e.selection;if(p={"\xa0":"nbsp","\xad":"shy"},r=!r,i.state=r,e.fire("VisualChars",{state:r}),m=o(),t&&(f=h.getBookmark()),r)for(l=[],tinymce.walk(g,function(e){3==e.nodeType&&e.nodeValue&&m.test(e.nodeValue)&&l.push(e)},"childNodes"),c=0;c=0;c--)e.dom.remove(l[c],1);h.moveToBookmark(f)}function n(){var t=this;e.on("VisualChars",function(e){t.active(e.state)})}var r,i=this;e.addCommand("mceVisualChars",t),e.addButton("visualchars",{title:"Show invisible characters",cmd:"mceVisualChars",onPostRender:n}),e.addMenuItem("visualchars",{text:"Show invisible characters",cmd:"mceVisualChars",onPostRender:n,selectable:!0,context:"view",prependToContext:!0})}); -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/skins/lightgray/fonts/tinymce-small.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/js/tinymce/skins/lightgray/fonts/tinymce-small.eot -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/skins/lightgray/fonts/tinymce-small.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/js/tinymce/skins/lightgray/fonts/tinymce-small.woff -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/skins/lightgray/fonts/tinymce.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/js/tinymce/skins/lightgray/fonts/tinymce.eot -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/skins/lightgray/fonts/tinymce.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/js/tinymce/skins/lightgray/fonts/tinymce.ttf -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/skins/lightgray/fonts/tinymce.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/js/tinymce/skins/lightgray/fonts/tinymce.woff -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/skins/lightgray/img/anchor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/js/tinymce/skins/lightgray/img/anchor.gif -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/skins/lightgray/img/loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/js/tinymce/skins/lightgray/img/loader.gif -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/skins/lightgray/img/object.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/js/tinymce/skins/lightgray/img/object.gif -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/tinymce/skins/lightgray/img/trans.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/js/tinymce/skins/lightgray/img/trans.gif -------------------------------------------------------------------------------- /src/main/resources/public/admin/js/utility.js: -------------------------------------------------------------------------------- 1 | function displayWait(selector) { 2 | 3 | $(selector).block({ 4 | message: '
Processing . . .
', 5 | overlayCSS: { 6 | background: 'rgba(142, 159, 167, 0.8)', 7 | opacity: 1, 8 | cursor: 'wait' 9 | }, 10 | css: { 11 | width: '50%' 12 | }, 13 | blockMsgClass: 'block-msg-default' 14 | }); 15 | } 16 | 17 | 18 | function cancelWait(selector) { 19 | $(selector).unblock() 20 | } 21 | 22 | 23 | function loadComments (postId) { 24 | $.ajax({ 25 | type: "get", 26 | url: "/comment/read/"+postId, 27 | success: function (response) { 28 | $("#commentColumn").html(""); 29 | $("#commentColumn").append(response); 30 | }, 31 | error: function (error) { 32 | $("#commentColumn").append("Error Loading Comments Try Again pls"); 33 | } 34 | }); 35 | } 36 | 37 | 38 | function loadCommentCount(postId) { 39 | $.ajax({ 40 | type: "post", 41 | url: "/comment/count/", 42 | data: {"postId": postId, "_csrf":csrf}, 43 | success: function (response) { 44 | $("#commentCount").html("( " + response + " )"); 45 | }, 46 | error: function (error) { 47 | } 48 | }); 49 | } 50 | 51 | function loadCommentReplies (postId, commentId) { 52 | $.ajax({ 53 | type: "get", 54 | url: "/comment/replies/"+ postId + "/" + commentId, 55 | success: function (response) { 56 | $("#reply_"+commentId).html(""); 57 | $("#reply_"+commentId).append(response); 58 | cancelWait("#comment_" + commentId); 59 | $("#vreplyBt_" + commentId + "").hide("slow"); 60 | }, 61 | error: function (error) { 62 | cancelWait("#comment_" + commentId); 63 | $("#reply_" + commentId).append("Error Loading Comments Try Again pls"); 64 | } 65 | }); 66 | } 67 | -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/all.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin skins 2 | ----------------------------------- */ 3 | @import url("minimal/_all.css"); 4 | /* 5 | @import url("minimal/minimal.css"); 6 | @import url("minimal/red.css"); 7 | @import url("minimal/green.css"); 8 | @import url("minimal/blue.css"); 9 | @import url("minimal/aero.css"); 10 | @import url("minimal/grey.css"); 11 | @import url("minimal/orange.css"); 12 | @import url("minimal/yellow.css"); 13 | @import url("minimal/pink.css"); 14 | @import url("minimal/purple.css"); 15 | */ 16 | 17 | @import url("square/_all.css"); 18 | /* 19 | @import url("square/square.css"); 20 | @import url("square/red.css"); 21 | @import url("square/green.css"); 22 | @import url("square/blue.css"); 23 | @import url("square/aero.css"); 24 | @import url("square/grey.css"); 25 | @import url("square/orange.css"); 26 | @import url("square/yellow.css"); 27 | @import url("square/pink.css"); 28 | @import url("square/purple.css"); 29 | */ 30 | 31 | @import url("flat/_all.css"); 32 | /* 33 | @import url("flat/flat.css"); 34 | @import url("flat/red.css"); 35 | @import url("flat/green.css"); 36 | @import url("flat/blue.css"); 37 | @import url("flat/aero.css"); 38 | @import url("flat/grey.css"); 39 | @import url("flat/orange.css"); 40 | @import url("flat/yellow.css"); 41 | @import url("flat/pink.css"); 42 | @import url("flat/purple.css"); 43 | */ 44 | 45 | @import url("line/_all.css"); 46 | /* 47 | @import url("line/line.css"); 48 | @import url("line/red.css"); 49 | @import url("line/green.css"); 50 | @import url("line/blue.css"); 51 | @import url("line/aero.css"); 52 | @import url("line/grey.css"); 53 | @import url("line/orange.css"); 54 | @import url("line/yellow.css"); 55 | @import url("line/pink.css"); 56 | @import url("line/purple.css"); 57 | */ 58 | 59 | @import url("polaris/polaris.css"); 60 | 61 | @import url("futurico/futurico.css"); -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/aero.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, aero 2 | ----------------------------------- */ 3 | .icheckbox_flat-aero, 4 | .iradio_flat-aero { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(aero.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-aero { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-aero.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-aero.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-aero.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-aero { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-aero.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-aero.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-aero.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-aero, 51 | .iradio_flat-aero { 52 | background-image: url(aero@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/aero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/aero.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/aero@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/aero@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/blue.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, blue 2 | ----------------------------------- */ 3 | .icheckbox_flat-blue, 4 | .iradio_flat-blue { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(blue.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-blue { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-blue.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-blue.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-blue.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-blue { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-blue.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-blue.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-blue.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-blue, 51 | .iradio_flat-blue { 52 | background-image: url(blue@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/blue.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/blue@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/flat.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin flat skin, black 2 | ----------------------------------- */ 3 | .icheckbox_flat, 4 | .iradio_flat { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(flat.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat, 51 | .iradio_flat { 52 | background-image: url(flat@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/flat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/flat.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/flat@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/flat@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/green.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, green 2 | ----------------------------------- */ 3 | .icheckbox_flat-green, 4 | .iradio_flat-green { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(green.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-green { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-green.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-green.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-green.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-green { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-green.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-green.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-green.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-green, 51 | .iradio_flat-green { 52 | background-image: url(green@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/green.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/green@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/grey.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, grey 2 | ----------------------------------- */ 3 | .icheckbox_flat-grey, 4 | .iradio_flat-grey { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(grey.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-grey { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-grey.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-grey.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-grey.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-grey { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-grey.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-grey.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-grey.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-grey, 51 | .iradio_flat-grey { 52 | background-image: url(grey@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/grey.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/grey@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/grey@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/orange.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, orange 2 | ----------------------------------- */ 3 | .icheckbox_flat-orange, 4 | .iradio_flat-orange { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(orange.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-orange { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-orange.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-orange.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-orange.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-orange { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-orange.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-orange.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-orange.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-orange, 51 | .iradio_flat-orange { 52 | background-image: url(orange@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/orange.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/orange@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/orange@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/pink.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, pink 2 | ----------------------------------- */ 3 | .icheckbox_flat-pink, 4 | .iradio_flat-pink { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(pink.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-pink { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-pink.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-pink.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-pink.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-pink { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-pink.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-pink.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-pink.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-pink, 51 | .iradio_flat-pink { 52 | background-image: url(pink@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/pink.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/pink@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/pink@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/purple.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, purple 2 | ----------------------------------- */ 3 | .icheckbox_flat-purple, 4 | .iradio_flat-purple { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(purple.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-purple { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-purple.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-purple.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-purple.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-purple { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-purple.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-purple.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-purple.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-purple, 51 | .iradio_flat-purple { 52 | background-image: url(purple@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/purple.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/purple@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/purple@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/red.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, red 2 | ----------------------------------- */ 3 | .icheckbox_flat-red, 4 | .iradio_flat-red { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(red.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-red { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-red.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-red.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-red.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-red { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-red.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-red.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-red.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-red, 51 | .iradio_flat-red { 52 | background-image: url(red@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/red.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/red@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/yellow.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, yellow 2 | ----------------------------------- */ 3 | .icheckbox_flat-yellow, 4 | .iradio_flat-yellow { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(yellow.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-yellow { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-yellow.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-yellow.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-yellow.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-yellow { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-yellow.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-yellow.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-yellow.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-yellow, 51 | .iradio_flat-yellow { 52 | background-image: url(yellow@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/yellow.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/flat/yellow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/flat/yellow@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/futurico/futurico.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Futurico skin 2 | ----------------------------------- */ 3 | .icheckbox_futurico, 4 | .iradio_futurico { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 16px; 11 | height: 17px; 12 | background: url(futurico.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_futurico { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_futurico.checked { 21 | background-position: -18px 0; 22 | } 23 | .icheckbox_futurico.disabled { 24 | background-position: -36px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_futurico.checked.disabled { 28 | background-position: -54px 0; 29 | } 30 | 31 | .iradio_futurico { 32 | background-position: -72px 0; 33 | } 34 | .iradio_futurico.checked { 35 | background-position: -90px 0; 36 | } 37 | .iradio_futurico.disabled { 38 | background-position: -108px 0; 39 | cursor: default; 40 | } 41 | .iradio_futurico.checked.disabled { 42 | background-position: -126px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_futurico, 51 | .iradio_futurico { 52 | background-image: url(futurico@2x.png); 53 | -webkit-background-size: 144px 19px; 54 | background-size: 144px 19px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/futurico/futurico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/futurico/futurico.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/futurico/futurico@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/futurico/futurico@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/line/line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/line/line.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/line/line@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/line/line@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/aero.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, aero 2 | ----------------------------------- */ 3 | .icheckbox_minimal-aero, 4 | .iradio_minimal-aero { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(aero.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-aero { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-aero.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-aero.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-aero.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-aero.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-aero { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-aero.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-aero.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-aero.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-aero.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-aero, 57 | .iradio_minimal-aero { 58 | background-image: url(aero@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/aero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/aero.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/aero@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/aero@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/blue.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, blue 2 | ----------------------------------- */ 3 | .icheckbox_minimal-blue, 4 | .iradio_minimal-blue { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(blue.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-blue { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-blue.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-blue.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-blue.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-blue.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-blue { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-blue.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-blue.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-blue.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-blue.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-blue, 57 | .iradio_minimal-blue { 58 | background-image: url(blue@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/blue.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/blue@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/green.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, green 2 | ----------------------------------- */ 3 | .icheckbox_minimal-green, 4 | .iradio_minimal-green { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(green.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-green { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-green.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-green.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-green.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-green.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-green { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-green.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-green.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-green.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-green.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 1.5), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-green, 57 | .iradio_minimal-green { 58 | background-image: url(green@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/green.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/green@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/grey.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, grey 2 | ----------------------------------- */ 3 | .icheckbox_minimal-grey, 4 | .iradio_minimal-grey { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(grey.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-grey { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-grey.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-grey.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-grey.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-grey.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-grey { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-grey.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-grey.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-grey.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-grey.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 1.5), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-grey, 57 | .iradio_minimal-grey { 58 | background-image: url(grey@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/grey.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/grey@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/grey@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/minimal.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, black 2 | ----------------------------------- */ 3 | .icheckbox_minimal, 4 | .iradio_minimal { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(minimal.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal, 57 | .iradio_minimal { 58 | background-image: url(minimal@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/minimal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/minimal.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/minimal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/minimal@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/orange.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, orange 2 | ----------------------------------- */ 3 | .icheckbox_minimal-orange, 4 | .iradio_minimal-orange { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(orange.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-orange { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-orange.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-orange.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-orange.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-orange.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-orange { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-orange.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-orange.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-orange.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-orange.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 1.5), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-orange, 57 | .iradio_minimal-orange { 58 | background-image: url(orange@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/orange.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/orange@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/orange@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/pink.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, pink 2 | ----------------------------------- */ 3 | .icheckbox_minimal-pink, 4 | .iradio_minimal-pink { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(pink.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-pink { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-pink.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-pink.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-pink.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-pink.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-pink { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-pink.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-pink.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-pink.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-pink.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 1.5), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-pink, 57 | .iradio_minimal-pink { 58 | background-image: url(pink@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/pink.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/pink@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/pink@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/purple.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, purple 2 | ----------------------------------- */ 3 | .icheckbox_minimal-purple, 4 | .iradio_minimal-purple { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(purple.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-purple { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-purple.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-purple.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-purple.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-purple.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-purple { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-purple.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-purple.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-purple.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-purple.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 1.5), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-purple, 57 | .iradio_minimal-purple { 58 | background-image: url(purple@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/purple.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/purple@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/purple@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/red.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, red 2 | ----------------------------------- */ 3 | .icheckbox_minimal-red, 4 | .iradio_minimal-red { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(red.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-red { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-red.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-red.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-red.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-red.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-red { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-red.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-red.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-red.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-red.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 1.5), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-red, 57 | .iradio_minimal-red { 58 | background-image: url(red@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/red.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/red@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/yellow.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Minimal skin, yellow 2 | ----------------------------------- */ 3 | .icheckbox_minimal-yellow, 4 | .iradio_minimal-yellow { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 18px; 11 | height: 18px; 12 | background: url(yellow.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_minimal-yellow { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_minimal-yellow.hover { 21 | background-position: -20px 0; 22 | } 23 | .icheckbox_minimal-yellow.checked { 24 | background-position: -40px 0; 25 | } 26 | .icheckbox_minimal-yellow.disabled { 27 | background-position: -60px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_minimal-yellow.checked.disabled { 31 | background-position: -80px 0; 32 | } 33 | 34 | .iradio_minimal-yellow { 35 | background-position: -100px 0; 36 | } 37 | .iradio_minimal-yellow.hover { 38 | background-position: -120px 0; 39 | } 40 | .iradio_minimal-yellow.checked { 41 | background-position: -140px 0; 42 | } 43 | .iradio_minimal-yellow.disabled { 44 | background-position: -160px 0; 45 | cursor: default; 46 | } 47 | .iradio_minimal-yellow.checked.disabled { 48 | background-position: -180px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 1.5), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_minimal-yellow, 57 | .iradio_minimal-yellow { 58 | background-image: url(yellow@2x.png); 59 | -webkit-background-size: 200px 20px; 60 | background-size: 200px 20px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/yellow.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/minimal/yellow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/minimal/yellow@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/polaris/polaris.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Polaris skin 2 | ----------------------------------- */ 3 | .icheckbox_polaris, 4 | .iradio_polaris { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 29px; 11 | height: 29px; 12 | background: url(polaris.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_polaris { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_polaris.hover { 21 | background-position: -31px 0; 22 | } 23 | .icheckbox_polaris.checked { 24 | background-position: -62px 0; 25 | } 26 | .icheckbox_polaris.disabled { 27 | background-position: -93px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_polaris.checked.disabled { 31 | background-position: -124px 0; 32 | } 33 | 34 | .iradio_polaris { 35 | background-position: -155px 0; 36 | } 37 | .iradio_polaris.hover { 38 | background-position: -186px 0; 39 | } 40 | .iradio_polaris.checked { 41 | background-position: -217px 0; 42 | } 43 | .iradio_polaris.disabled { 44 | background-position: -248px 0; 45 | cursor: default; 46 | } 47 | .iradio_polaris.checked.disabled { 48 | background-position: -279px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_polaris, 57 | .iradio_polaris { 58 | background-image: url(polaris@2x.png); 59 | -webkit-background-size: 310px 31px; 60 | background-size: 310px 31px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/polaris/polaris.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/polaris/polaris.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/polaris/polaris@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/polaris/polaris@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/Thumbs.db -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/aero.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, aero 2 | ----------------------------------- */ 3 | .icheckbox_square-aero, 4 | .iradio_square-aero { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(aero.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-aero { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-aero.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-aero.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-aero.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-aero.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-aero { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-aero.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-aero.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-aero.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-aero.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-aero, 57 | .iradio_square-aero { 58 | background-image: url(aero@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/aero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/aero.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/aero@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/aero@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/blue.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, blue 2 | ----------------------------------- */ 3 | .icheckbox_square-blue, 4 | .iradio_square-blue { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(blue.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-blue { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-blue.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-blue.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-blue.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-blue.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-blue { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-blue.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-blue.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-blue.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-blue.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-blue, 57 | .iradio_square-blue { 58 | background-image: url(blue@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/blue.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/blue@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/green.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, green 2 | ----------------------------------- */ 3 | .icheckbox_square-green, 4 | .iradio_square-green { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(green.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-green { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-green.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-green.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-green.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-green.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-green { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-green.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-green.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-green.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-green.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-green, 57 | .iradio_square-green { 58 | background-image: url(green@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/green.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/green@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/grey.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, grey 2 | ----------------------------------- */ 3 | .icheckbox_square-grey, 4 | .iradio_square-grey { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(grey.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-grey { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-grey.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-grey.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-grey.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-grey.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-grey { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-grey.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-grey.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-grey.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-grey.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-grey, 57 | .iradio_square-grey { 58 | background-image: url(grey@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/grey.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/grey@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/grey@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/orange.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, orange 2 | ----------------------------------- */ 3 | .icheckbox_square-orange, 4 | .iradio_square-orange { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(orange.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-orange { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-orange.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-orange.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-orange.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-orange.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-orange { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-orange.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-orange.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-orange.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-orange.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-orange, 57 | .iradio_square-orange { 58 | background-image: url(orange@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/orange.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/orange@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/orange@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/pink.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, pink 2 | ----------------------------------- */ 3 | .icheckbox_square-pink, 4 | .iradio_square-pink { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(pink.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-pink { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-pink.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-pink.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-pink.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-pink.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-pink { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-pink.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-pink.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-pink.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-pink.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-pink, 57 | .iradio_square-pink { 58 | background-image: url(pink@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/pink.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/pink@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/pink@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/purple.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, purple 2 | ----------------------------------- */ 3 | .icheckbox_square-purple, 4 | .iradio_square-purple { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(purple.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-purple { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-purple.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-purple.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-purple.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-purple.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-purple { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-purple.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-purple.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-purple.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-purple.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-purple, 57 | .iradio_square-purple { 58 | background-image: url(purple@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/purple.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/purple@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/purple@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/red.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, red 2 | ----------------------------------- */ 3 | .icheckbox_square-red, 4 | .iradio_square-red { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(red.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-red { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-red.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-red.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-red.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-red.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-red { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-red.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-red.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-red.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-red.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-red, 57 | .iradio_square-red { 58 | background-image: url(red@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/red.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/red@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/square.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, black 2 | ----------------------------------- */ 3 | .icheckbox_square, 4 | .iradio_square { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(square.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square, 57 | .iradio_square { 58 | background-image: url(square@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/square.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/square@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/square@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/yellow.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, yellow 2 | ----------------------------------- */ 3 | .icheckbox_square-yellow, 4 | .iradio_square-yellow { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(yellow.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-yellow { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-yellow.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-yellow.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-yellow.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-yellow.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-yellow { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-yellow.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-yellow.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-yellow.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-yellow.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square-yellow, 57 | .iradio_square-yellow { 58 | background-image: url(yellow@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/yellow.png -------------------------------------------------------------------------------- /src/main/resources/public/admin/plugins/iCheck/square/yellow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/admin/plugins/iCheck/square/yellow@2x.png -------------------------------------------------------------------------------- /src/main/resources/public/font-awesome-4.7.0/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/font-awesome-4.7.0/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/main/resources/public/font-awesome-4.7.0/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/font-awesome-4.7.0/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/main/resources/public/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/main/resources/public/font-awesome-4.7.0/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/font-awesome-4.7.0/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/main/resources/public/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /src/main/resources/public/front/css/error-page-style.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Open+Sans:700"); 2 | * { 3 | margin: 0; 4 | padding: 0; 5 | font-family: "Open Sans", sans-serif; 6 | text-align: center; 7 | text-decoration: none; 8 | outline: none; 9 | border: none; 10 | -webkit-box-sizing: border-box; 11 | -moz-box-sizing: border-box; 12 | -ms-box-sizing: border-box; 13 | box-sizing: border-box; 14 | } 15 | 16 | ::selection { 17 | background: transparent; 18 | } 19 | 20 | img { 21 | max-width: 100%; 22 | -webkit-user-select: none; 23 | -moz-user-select: none; 24 | -ms-user-select: none; 25 | user-select: none; 26 | } 27 | 28 | html, body { 29 | height: 100%; 30 | } 31 | 32 | body { 33 | background: #fff; 34 | } 35 | 36 | .wrapper { 37 | position: relative; 38 | padding: 20px; 39 | } 40 | .wrapper .oops { 41 | color: #4B4F4B; 42 | font-size: 8em; 43 | letter-spacing: 0.05em; 44 | margin-top: 30px; 45 | } 46 | .wrapper .info { 47 | color: #4B4F4B; 48 | padding: 5px; 49 | } 50 | .wrapper .button { 51 | background: #056b56; 52 | color: #fff; 53 | text-transform: uppercase; 54 | padding: 10px 40px; 55 | border-radius: 50px; 56 | transition: 150ms; 57 | } 58 | .wrapper .button:hover { 59 | background: #059e80; 60 | transition: 150ms; 61 | } 62 | .wrapper .button:hover .fa-angle-left { 63 | animation: test 700ms ease-out; 64 | animation-iteration-count: infinite; 65 | } 66 | @keyframes test { 67 | to { 68 | margin-right: 20px; 69 | } 70 | } 71 | .wrapper .button .fa-angle-left { 72 | font-size: 1.2em; 73 | margin-right: 15px; 74 | } 75 | .wrapper img { 76 | padding: 10px; 77 | } 78 | -------------------------------------------------------------------------------- /src/main/resources/public/front/fonts/Raleway-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/fonts/Raleway-Regular.ttf -------------------------------------------------------------------------------- /src/main/resources/public/front/fonts/RobotoSlab-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/fonts/RobotoSlab-Regular.ttf -------------------------------------------------------------------------------- /src/main/resources/public/front/images/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/Thumbs.db -------------------------------------------------------------------------------- /src/main/resources/public/front/images/about-banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/about-banner.jpg -------------------------------------------------------------------------------- /src/main/resources/public/front/images/about-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/about-bg.jpg -------------------------------------------------------------------------------- /src/main/resources/public/front/images/bg-banner03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/bg-banner03.jpg -------------------------------------------------------------------------------- /src/main/resources/public/front/images/c-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/c-3.jpg -------------------------------------------------------------------------------- /src/main/resources/public/front/images/contact-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/contact-bg.jpg -------------------------------------------------------------------------------- /src/main/resources/public/front/images/dot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/dot.png -------------------------------------------------------------------------------- /src/main/resources/public/front/images/email-newsletter.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/email-newsletter.gif -------------------------------------------------------------------------------- /src/main/resources/public/front/images/home-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/home-bg.jpg -------------------------------------------------------------------------------- /src/main/resources/public/front/images/img-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/img-sprite.png -------------------------------------------------------------------------------- /src/main/resources/public/front/images/img-sprite1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/img-sprite1.png -------------------------------------------------------------------------------- /src/main/resources/public/front/images/left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/left.png -------------------------------------------------------------------------------- /src/main/resources/public/front/images/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/menu.png -------------------------------------------------------------------------------- /src/main/resources/public/front/images/mylogo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/mylogo.jpg -------------------------------------------------------------------------------- /src/main/resources/public/front/images/post-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/post-bg.jpg -------------------------------------------------------------------------------- /src/main/resources/public/front/images/post-sample-image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/post-sample-image.jpg -------------------------------------------------------------------------------- /src/main/resources/public/front/images/right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/right.png -------------------------------------------------------------------------------- /src/main/resources/public/front/images/s-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/s-1.jpg -------------------------------------------------------------------------------- /src/main/resources/public/front/images/s-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/s-3.jpg -------------------------------------------------------------------------------- /src/main/resources/public/front/images/s-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/s-6.jpg -------------------------------------------------------------------------------- /src/main/resources/public/front/images/sprit-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/images/sprit-1.png -------------------------------------------------------------------------------- /src/main/resources/public/front/js/about.js: -------------------------------------------------------------------------------- 1 | (function ($) { 2 | 3 | // Init Wow 4 | wow = new WOW( { 5 | animateClass: 'animated', 6 | offset: 100 7 | }); 8 | wow.init(); 9 | 10 | // Navigation scrolls 11 | $('.navbar-nav li a').bind('click', function(event) { 12 | $('.navbar-nav li').removeClass('active'); 13 | $(this).closest('li').addClass('active'); 14 | var $anchor = $(this); 15 | var nav = $($anchor.attr('href')); 16 | if (nav.length) { 17 | $('html, body').stop().animate({ 18 | scrollTop: $($anchor.attr('href')).offset().top 19 | }, 1500, 'easeInOutExpo'); 20 | 21 | event.preventDefault(); 22 | } 23 | }); 24 | 25 | // About section scroll 26 | $(".overlay-detail a").on('click', function(event) { 27 | event.preventDefault(); 28 | var hash = this.hash; 29 | $('html, body').animate({ 30 | scrollTop: $(hash).offset().top 31 | }, 900, function(){ 32 | window.location.hash = hash; 33 | }); 34 | }); 35 | 36 | //jQuery to collapse the navbar on scroll 37 | $(window).scroll(function() { 38 | if ($(".navbar-default").offset().top > 50) { 39 | $(".navbar-fixed-top").addClass("top-nav-collapse"); 40 | } else { 41 | $(".navbar-fixed-top").removeClass("top-nav-collapse"); 42 | } 43 | }); 44 | 45 | })(jQuery); -------------------------------------------------------------------------------- /src/main/resources/public/front/js/clean-blog.js: -------------------------------------------------------------------------------- 1 | // Floating label headings for the contact form 2 | $(function() { 3 | $("body").on("input propertychange", ".floating-label-form-group", function(e) { 4 | $(this).toggleClass("floating-label-form-group-with-value", !!$(e.target).val()); 5 | }).on("focus", ".floating-label-form-group", function() { 6 | $(this).addClass("floating-label-form-group-with-focus"); 7 | }).on("blur", ".floating-label-form-group", function() { 8 | $(this).removeClass("floating-label-form-group-with-focus"); 9 | }); 10 | }); 11 | 12 | // Navigation Scripts to Show Header on Scroll-Up 13 | jQuery(document).ready(function($) { 14 | var MQL = 1170; 15 | 16 | //primary navigation slide-in effect 17 | if ($(window).width() > MQL) { 18 | var headerHeight = $('.navbar-custom').height(); 19 | $(window).on('scroll', { 20 | previousTop: 0 21 | }, 22 | function() { 23 | var currentTop = $(window).scrollTop(); 24 | //check if user is scrolling up 25 | if (currentTop < this.previousTop) { 26 | //if scrolling up... 27 | if (currentTop > 0 && $('.navbar-custom').hasClass('is-fixed')) { 28 | $('.navbar-custom').addClass('is-visible'); 29 | } else { 30 | $('.navbar-custom').removeClass('is-visible is-fixed'); 31 | } 32 | } else if (currentTop > this.previousTop) { 33 | //if scrolling down... 34 | $('.navbar-custom').removeClass('is-visible'); 35 | if (currentTop > headerHeight && !$('.navbar-custom').hasClass('is-fixed')) $('.navbar-custom').addClass('is-fixed'); 36 | } 37 | this.previousTop = currentTop; 38 | }); 39 | } 40 | }); 41 | -------------------------------------------------------------------------------- /src/main/resources/public/front/js/clean-blog.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Start Bootstrap - Clean Blog v3.3.7+1 (http://startbootstrap.com/template-overviews/clean-blog) 3 | * Copyright 2013-2016 Start Bootstrap 4 | * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap/blob/gh-pages/LICENSE) 5 | */ 6 | $(function(){$("body").on("input propertychange",".floating-label-form-group",function(o){$(this).toggleClass("floating-label-form-group-with-value",!!$(o.target).val())}).on("focus",".floating-label-form-group",function(){$(this).addClass("floating-label-form-group-with-focus")}).on("blur",".floating-label-form-group",function(){$(this).removeClass("floating-label-form-group-with-focus")})}),jQuery(document).ready(function(o){var s=1170;if(o(window).width()>s){var i=o(".navbar-custom").height();o(window).on("scroll",{previousTop:0},function(){var s=o(window).scrollTop();s0&&o(".navbar-custom").hasClass("is-fixed")?o(".navbar-custom").addClass("is-visible"):o(".navbar-custom").removeClass("is-visible is-fixed"):s>this.previousTop&&(o(".navbar-custom").removeClass("is-visible"),s>i&&!o(".navbar-custom").hasClass("is-fixed")&&o(".navbar-custom").addClass("is-fixed")),this.previousTop=s})}}); -------------------------------------------------------------------------------- /src/main/resources/public/front/js/contact_me.js: -------------------------------------------------------------------------------- 1 | // Contact Form Scripts 2 | 3 | $(function() { 4 | 5 | $("#contactForm input,#contactForm textarea").jqBootstrapValidation({ 6 | preventSubmit: true, 7 | submitError: function($form, event, errors) { 8 | // additional error messages or events 9 | }, 10 | submitSuccess: function($form, event) { 11 | 12 | }, 13 | filter: function() { 14 | return $(this).is(":visible"); 15 | }, 16 | }); 17 | 18 | $("a[data-toggle=\"tab\"]").click(function(e) { 19 | e.preventDefault(); 20 | $(this).tab("show"); 21 | }); 22 | }); 23 | 24 | 25 | /*When clicking on Full hide fail/success boxes */ 26 | $('#name').focus(function() { 27 | $('#success').html(''); 28 | }); 29 | -------------------------------------------------------------------------------- /src/main/resources/public/front/plugins/jssocials-1.4.0/jssocials.css: -------------------------------------------------------------------------------- 1 | .jssocials-shares { 2 | margin: 0.2em 0; } 3 | 4 | .jssocials-shares * { 5 | box-sizing: border-box; } 6 | 7 | .jssocials-share { 8 | display: inline-block; 9 | vertical-align: top; 10 | margin: 0.3em 0.6em 0.3em 0; } 11 | 12 | .jssocials-share:last-child { 13 | margin-right: 0; } 14 | 15 | .jssocials-share-logo { 16 | width: 1em; 17 | vertical-align: middle; 18 | font-size: 1.5em; } 19 | 20 | img.jssocials-share-logo { 21 | width: auto; 22 | height: 1em; } 23 | 24 | .jssocials-share-link { 25 | display: inline-block; 26 | text-align: center; 27 | text-decoration: none; 28 | line-height: 1; } 29 | .jssocials-share-link.jssocials-share-link-count { 30 | padding-top: .2em; } 31 | .jssocials-share-link.jssocials-share-link-count .jssocials-share-count { 32 | display: block; 33 | font-size: .6em; 34 | margin: 0 -.5em -.8em -.5em; } 35 | .jssocials-share-link.jssocials-share-no-count { 36 | padding-top: .5em; } 37 | .jssocials-share-link.jssocials-share-no-count .jssocials-share-count { 38 | height: 1em; } 39 | 40 | .jssocials-share-label { 41 | padding-left: 0.3em; 42 | vertical-align: middle; } 43 | 44 | .jssocials-share-count-box { 45 | display: inline-block; 46 | height: 1.5em; 47 | padding: 0 0.3em; 48 | line-height: 1; 49 | vertical-align: middle; 50 | cursor: default; } 51 | .jssocials-share-count-box.jssocials-share-no-count { 52 | display: none; } 53 | 54 | .jssocials-share-count { 55 | line-height: 1.5em; 56 | vertical-align: middle; } 57 | -------------------------------------------------------------------------------- /src/main/resources/public/front/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/main/resources/public/front/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/main/resources/public/front/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/main/resources/public/front/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/public/front/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /src/main/resources/templates/admin/auth/email_reset.ftl: -------------------------------------------------------------------------------- 1 | <#include "../../layouts/login.ftl"/> 2 | <@login title="Account Reset" body="lockscreen"> 3 | 4 |
5 | 6 | <#include "../../partials/alerts.ftl"/> 7 | 8 | 11 | 12 | <#--
John Doe
--> 13 | 14 | 15 |
16 | 17 |
18 | User Image 19 |
20 | 21 | 22 | 23 |
24 | 25 |
26 | 27 |
28 | 29 |
30 |
31 |
32 | 33 | 34 |
35 | 36 | 37 |
38 | Enter the email associated with your account 39 |
40 | 41 |
42 | Login 43 |
44 | Register 45 |
46 | <#----> 50 |
51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/main/resources/templates/admin/auth/login.ftl: -------------------------------------------------------------------------------- 1 | <#include "../../layouts/login.ftl"/> 2 | <@login title="Admin Login" body="login-page"> 3 | 4 | 47 | 48 | -------------------------------------------------------------------------------- /src/main/resources/templates/admin/auth/password_reset.ftl: -------------------------------------------------------------------------------- 1 | <#include "../../layouts/login.ftl"/> 2 | <@login title="Admin Reset Password" body="login-page"> 3 | 4 | 38 | 39 | -------------------------------------------------------------------------------- /src/main/resources/templates/admin/users/create.ftl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/src/main/resources/templates/admin/users/create.ftl -------------------------------------------------------------------------------- /src/main/resources/templates/error/404.ftl: -------------------------------------------------------------------------------- 1 | <#include "../layouts/front.ftl"/> 2 | <@app> 3 |
4 |
5 |
6 |

404

7 |

Sorry, page not found

8 | Back to Home 9 |
10 |
11 |
12 | -------------------------------------------------------------------------------- /src/main/resources/templates/error/500.ftl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Spring Blog 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 |

500

18 |

Oops! An unexpected error has occurred! Web Master has been notified.

19 |
20 | Go HOME 21 |
22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/main/resources/templates/error/accessdenied.ftl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Spring Blog 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/main/resources/templates/front/newsletter_subscribed.ftl: -------------------------------------------------------------------------------- 1 | <#include "../layouts/front.ftl"/> 2 | <@app> 3 | 18 | -------------------------------------------------------------------------------- /src/main/resources/templates/partials/alerts.ftl: -------------------------------------------------------------------------------- 1 | <#if (error?length > 0)??> 2 |
3 | 6 | ${error}. 7 |
8 | <#else> 9 | 10 | <#if (success?length > 0)??> 11 |
12 | 15 | ${success}. 16 |
17 | <#else> 18 | 19 | <#if (status?length > 0)??> 20 |
21 | 24 | ${status}. 25 |
26 | <#else> 27 | -------------------------------------------------------------------------------- /src/main/resources/templates/partials/comment-replies.ftl: -------------------------------------------------------------------------------- 1 |
2 | <#list comments as comment> 3 |
4 |
${comment.name} ${comment.createdAt?date.@localdatetime}
5 |

${comment.comment}

6 |
7 | 8 |
9 | -------------------------------------------------------------------------------- /src/main/resources/templates/partials/comment.ftl: -------------------------------------------------------------------------------- 1 |

COMMENTS

2 |
3 |
4 | 5 | <#list comments as comment> 6 |
7 |
${comment.name} On ${comment.createdAt?date.@localdatetime}
8 |

${comment.comment}

9 |
10 |
11 |
12 | Reply 13 | View Replies 14 |
15 |
16 |
17 |
18 |
19 | 20 | 35 |
-------------------------------------------------------------------------------- /src/main/resources/templates/partials/comment_old.ftl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 | <#list comments as comment> 6 |
7 | 8 | User Image 9 | 10 |
11 | 12 | ${comment.name} 13 | ${comment.createdAt?date.@localdatetime} 14 | 15 |

${comment.comment}

16 | 17 | 18 |
19 | 20 |
21 | 22 |
23 |
24 |
25 | 26 | 27 |
28 |
29 | -------------------------------------------------------------------------------- /src/main/resources/templates/partials/footer.ftl: -------------------------------------------------------------------------------- 1 | 2 | 37 | -------------------------------------------------------------------------------- /src/main/resources/templates/partials/google-analytics.ftl: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/templates/partials/login_footer.ftl: -------------------------------------------------------------------------------- 1 | <#--
--> 2 | <#--

Gentelella Alela!

--> 3 | <#--

©2016 All Rights Reserved. Gentelella Alela! is a Bootstrap 3 template. Privacy and Terms

--> 4 | <#--
--> 5 | 6 |
7 |
8 |
9 | 35 | 36 |
37 |
38 |
-------------------------------------------------------------------------------- /src/main/resources/templates/partials/most-read-article.ftl: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |
6 |

Most Read Articles

7 |
8 | 9 |
10 | 21 |
22 | 23 | 26 | 27 |
28 | 29 |
30 |
-------------------------------------------------------------------------------- /src/main/resources/templates/partials/right-column.ftl: -------------------------------------------------------------------------------- 1 |
2 |

3 | CATEGORIES 4 |

5 | 10 |
11 |
12 |

TAGS

13 |
    14 | <#list tags as tag> 15 |
  • ${tag}
  • 16 | 17 |
18 |
19 |
20 |

NEWSLETTER

21 | Never miss an update from me again! 22 |
23 |
24 | 25 | 26 | 27 |
28 |
29 |
-------------------------------------------------------------------------------- /src/test/java/com/smatt/DBSeederTest.java: -------------------------------------------------------------------------------- 1 | package com.smatt; 2 | 3 | import com.smatt.dao.CategoryRepository; 4 | import com.smatt.dao.SectionRepository; 5 | import com.smatt.dao.UserRepository; 6 | import org.apache.log4j.Logger; 7 | import org.junit.runner.RunWith; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.boot.test.context.SpringBootTest; 10 | import org.springframework.jdbc.core.JdbcTemplate; 11 | import org.springframework.test.context.junit4.SpringRunner; 12 | 13 | /** 14 | * Created by smatt on 16/05/2017. 15 | */ 16 | //@RunWith(SpringRunner.class) 17 | //@SpringBootTest 18 | public class DBSeederTest { 19 | 20 | Logger logger = Logger.getLogger(DBSeederTest.class); 21 | 22 | @Autowired 23 | CategoryRepository categoryRepository; 24 | 25 | @Autowired 26 | SectionRepository sectionRepository; 27 | 28 | @Autowired 29 | UserRepository userRepository; 30 | 31 | @Autowired 32 | JdbcTemplate jdbcTemplate; 33 | 34 | 35 | } 36 | -------------------------------------------------------------------------------- /upload-dir/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeunMatt/spring-blog/aadea5c3e936818f3ecf09a8293f779daeff50c6/upload-dir/.gitignore --------------------------------------------------------------------------------