├── .gitignore ├── LICENSE ├── README.md └── teemo ├── pom.xml ├── sql └── teemo.sql └── src └── main ├── java ├── com │ └── teemo │ │ ├── core │ │ ├── Constants.java │ │ ├── aop │ │ │ └── MenuCacheAspect.java │ │ ├── entity │ │ │ ├── BaseEntity.java │ │ │ └── LogicDeletable.java │ │ ├── exception │ │ │ ├── UserBlockedException.java │ │ │ ├── UserException.java │ │ │ ├── UserNotExistsException.java │ │ │ └── UserPasswordIncorrectnessException.java │ │ ├── security │ │ │ ├── CurrentUserInterceptor.java │ │ │ ├── CustomCredentialsMatcher.java │ │ │ └── ShiroSecurityRealm.java │ │ └── util │ │ │ ├── DPUtil.java │ │ │ └── UserLogUtil.java │ │ ├── dao │ │ ├── DepartmentDao.java │ │ ├── DynamicPropertyDao.java │ │ ├── PermissionDao.java │ │ ├── ResourceDao.java │ │ ├── RoleDao.java │ │ ├── RoleResourcePermissionDao.java │ │ └── UserDao.java │ │ ├── dto │ │ ├── BTQueryParameter.java │ │ ├── Page.java │ │ ├── Result.java │ │ └── ResultData.java │ │ ├── entity │ │ ├── Department.java │ │ ├── DynamicProperty.java │ │ ├── Menu.java │ │ ├── Permission.java │ │ ├── Resource.java │ │ ├── ResourceNode.java │ │ ├── ResourceType.java │ │ ├── Role.java │ │ ├── RoleResourcePermission.java │ │ ├── User.java │ │ ├── UserLastOnline.java │ │ └── UserStatus.java │ │ ├── service │ │ ├── AuthorizationService.java │ │ ├── DepartmentService.java │ │ ├── DynamicPropertyService.java │ │ ├── PermissionService.java │ │ ├── ResourceService.java │ │ ├── RoleResourcePermissionService.java │ │ ├── RoleService.java │ │ └── UserService.java │ │ └── web │ │ └── controller │ │ ├── AuthController.java │ │ ├── DefaultExceptionHandler.java │ │ ├── DepartmentController.java │ │ ├── DynamicPropertyController.java │ │ ├── MainController.java │ │ ├── PermissionController.java │ │ ├── ResourceController.java │ │ ├── RoleController.java │ │ └── UserController.java └── core │ ├── cache │ └── BaseCacheAspect.java │ ├── dao │ ├── BaseDao.java │ └── Dao.java │ ├── exception │ └── SearchException.java │ ├── service │ ├── BaseService.java │ └── Service.java │ ├── support │ ├── Condition.java │ ├── CustomDateEditor.java │ ├── PageRequest.java │ ├── SearchRequest.java │ ├── Sort.java │ ├── page │ │ ├── AbstractPageRequest.java │ │ └── Pageable.java │ ├── repository │ │ ├── CollectionToStringUserType.java │ │ └── EnabledQueryCache.java │ └── search │ │ ├── AbstractSearchFilter.java │ │ ├── AbstractSearchRequest.java │ │ ├── SearchFilter.java │ │ ├── SearchOperator.java │ │ ├── SearchType.java │ │ └── Searchable.java │ ├── util │ ├── EntityUtil.java │ ├── IpUtil.java │ ├── ReflectUtil.java │ ├── SpringUtil.java │ ├── StringPool.java │ └── StringUtil.java │ └── web │ └── controller │ └── BaseController.java ├── resources ├── applicationContext.xml ├── ehcache-hibernate.xml ├── ehcache-teemo.xml ├── jdbc.properties ├── log4j.xml ├── messages.properties ├── spring-cache.xml ├── spring-jdbc.xml ├── spring-mvc.xml └── spring-shiro.xml ├── test └── com │ └── teemo │ └── service │ └── TestUserService.java └── webapp ├── WEB-INF ├── page │ ├── admin │ │ ├── dashboard.jsp │ │ ├── department │ │ │ ├── edit.jsp │ │ │ └── main.jsp │ │ ├── home.jsp │ │ ├── permission │ │ │ ├── edit.jsp │ │ │ └── main.jsp │ │ ├── property │ │ │ ├── edit.jsp │ │ │ └── main.jsp │ │ ├── resource │ │ │ ├── edit.jsp │ │ │ └── main.jsp │ │ ├── role │ │ │ ├── auth.jsp │ │ │ ├── edit.jsp │ │ │ └── main.jsp │ │ └── user │ │ │ ├── auth.jsp │ │ │ ├── edit.jsp │ │ │ ├── main.jsp │ │ │ └── profile.jsp │ ├── core.jsp │ ├── error │ │ ├── 50x.jsp │ │ ├── notfound.jsp │ │ └── unauthorized.jsp │ ├── login.jsp │ └── register.jsp └── web.xml ├── index.jsp └── static ├── css ├── animate.css ├── bootstrap-rtl.css ├── bootstrap.min.css ├── demo │ └── webuploader-demo.css ├── font-awesome.css ├── font-awesome.min.css ├── login.css ├── patterns │ ├── header-profile-skin-1.png │ ├── header-profile-skin-3.png │ ├── header-profile.png │ └── shattered.png ├── plugins │ ├── awesome-bootstrap-checkbox │ │ └── awesome-bootstrap-checkbox.css │ ├── blueimp │ │ ├── css │ │ │ ├── blueimp-gallery-indicator.css │ │ │ ├── blueimp-gallery-video.css │ │ │ ├── blueimp-gallery.css │ │ │ ├── blueimp-gallery.min.css │ │ │ └── demo.css │ │ └── img │ │ │ ├── error.png │ │ │ ├── error.svg │ │ │ ├── loading.gif │ │ │ ├── play-pause.png │ │ │ ├── play-pause.svg │ │ │ ├── video-play.png │ │ │ └── video-play.svg │ ├── bootstrap-table │ │ └── bootstrap-table.min.css │ ├── chosen │ │ ├── chosen-sprite.png │ │ ├── chosen-sprite@2x.png │ │ └── chosen.css │ ├── clockpicker │ │ └── clockpicker.css │ ├── codemirror │ │ ├── ambiance.css │ │ └── codemirror.css │ ├── colorpicker │ │ ├── css │ │ │ └── bootstrap-colorpicker.min.css │ │ └── img │ │ │ └── bootstrap-colorpicker │ │ │ ├── alpha-horizontal.png │ │ │ ├── alpha.png │ │ │ ├── hue-horizontal.png │ │ │ ├── hue.png │ │ │ └── saturation.png │ ├── cropper │ │ └── cropper.min.css │ ├── dataTables │ │ └── dataTables.bootstrap.css │ ├── datapicker │ │ └── datepicker3.css │ ├── dropzone │ │ ├── basic.css │ │ └── dropzone.css │ ├── duallistbox │ │ └── bootstrap-duallistbox.css │ ├── footable │ │ ├── fonts │ │ │ ├── footable.eot │ │ │ ├── footable.svg │ │ │ ├── footable.ttf │ │ │ └── footable.woff │ │ └── footable.core.css │ ├── fullcalendar │ │ ├── fullcalendar.css │ │ └── fullcalendar.print.css │ ├── iCheck │ │ ├── custom.css │ │ ├── green.png │ │ └── green@2x.png │ ├── images │ │ ├── sort_asc.png │ │ ├── sort_desc.png │ │ ├── sprite-skin-flat.png │ │ ├── spritemap.png │ │ └── spritemap@2x.png │ ├── ionRangeSlider │ │ ├── ion.rangeSlider.css │ │ └── ion.rangeSlider.skinFlat.css │ ├── jQueryUI │ │ ├── images │ │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ │ ├── ui-icons_222222_256x240.png │ │ │ ├── ui-icons_454545_256x240.png │ │ │ └── ui-icons_888888_256x240.png │ │ └── jquery-ui-1.10.4.custom.min.css │ ├── jasny │ │ └── jasny-bootstrap.min.css │ ├── jqgrid │ │ └── ui.jqgrid.css │ ├── jsTree │ │ ├── 32px.png │ │ ├── style.min.css │ │ └── throbber.gif │ ├── markdown │ │ └── bootstrap-markdown.min.css │ ├── morris │ │ └── morris-0.4.3.min.css │ ├── multiselect │ │ └── bootstrap-multiselect.css │ ├── nouslider │ │ └── jquery.nouislider.css │ ├── plyr │ │ ├── plyr.css │ │ └── sprite.svg │ ├── simditor │ │ └── simditor.css │ ├── steps │ │ └── jquery.steps.css │ ├── summernote │ │ ├── summernote-bs3.css │ │ └── summernote.css │ ├── sweetalert │ │ └── sweetalert.css │ ├── switchery │ │ └── switchery.css │ ├── toastr │ │ └── toastr.min.css │ ├── treeview │ │ └── bootstrap-treeview.css │ └── webuploader │ │ └── webuploader.css └── style.css ├── favicon.ico ├── favicon1.ico ├── fonts ├── FontAwesome.otf ├── fontawesome-webfont.eot ├── fontawesome-webfont.svg ├── fontawesome-webfont.ttf ├── fontawesome-webfont.woff ├── fontawesome-webfont.woff2 ├── glyphicons-halflings-regular.eot ├── glyphicons-halflings-regular.svg ├── glyphicons-halflings-regular.ttf ├── glyphicons-halflings-regular.woff └── glyphicons-halflings-regular.woff2 ├── img ├── a1.jpg ├── a2.jpg ├── a3.jpg ├── a4.jpg ├── a5.jpg ├── a6.jpg ├── a7.jpg ├── a8.jpg ├── a9.jpg ├── bg.png ├── browser.png ├── browser.psd ├── iconfont-logo.png ├── icons.png ├── index.jpg ├── index_4.jpg ├── loading-upload.gif ├── locked.png ├── login-background.jpg ├── p1.jpg ├── p2.jpg ├── p3.jpg ├── p_big1.jpg ├── p_big2.jpg ├── p_big3.jpg ├── pay.png ├── profile.jpg ├── profile_big.jpg ├── profile_girl.jpg ├── profile_small.jpg ├── progress.png ├── qr_code.png ├── sprite-skin-flat.png ├── success.png ├── user.png ├── webuploader.png └── wenku_logo.png └── js ├── admin ├── common.js ├── table.js └── validate.js ├── bootstrap.min.js ├── contabs.js ├── content.js ├── demo ├── bootstrap-table-demo.js ├── bootstrap_table_test.json ├── bootstrap_table_test2.json ├── echarts-demo.js ├── flot-demo.js ├── form-advanced-demo.js ├── form-validate-demo.js ├── layer-demo.js ├── morris-demo.js ├── peity-demo.js ├── photos.json ├── rickshaw-demo.js ├── sparkline-demo.js ├── table_base.json ├── treeview-demo.js └── webuploader-demo.js ├── hplus.js ├── jquery-ui-1.10.4.min.js ├── jquery-ui.custom.min.js ├── jquery.min.js ├── jquery.min.map ├── login.js ├── plugins ├── beautifyhtml │ └── beautifyhtml.js ├── blueimp │ └── jquery.blueimp-gallery.min.js ├── bootstrap-table │ ├── bootstrap-table-mobile.min.js │ ├── bootstrap-table.min.js │ └── locale │ │ ├── bootstrap-table-zh-CN.js │ │ └── bootstrap-table-zh-CN.min.js ├── chartJs │ └── Chart.min.js ├── chosen │ └── chosen.jquery.js ├── clockpicker │ └── clockpicker.js ├── codemirror │ ├── codemirror.js │ └── mode │ │ ├── apl │ │ ├── apl.js │ │ └── index.html │ │ ├── asterisk │ │ ├── asterisk.js │ │ └── index.html │ │ ├── clike │ │ ├── clike.js │ │ ├── index.html │ │ └── scala.html │ │ ├── clojure │ │ ├── clojure.js │ │ └── index.html │ │ ├── cobol │ │ ├── cobol.js │ │ └── index.html │ │ ├── coffeescript │ │ ├── coffeescript.js │ │ └── index.html │ │ ├── commonlisp │ │ ├── commonlisp.js │ │ └── index.html │ │ ├── css │ │ ├── css.js │ │ ├── index.html │ │ ├── less.html │ │ ├── less_test.js │ │ ├── scss.html │ │ ├── scss_test.js │ │ └── test.js │ │ ├── cypher │ │ ├── cypher.js │ │ └── index.html │ │ ├── d │ │ ├── d.js │ │ └── index.html │ │ ├── dart │ │ ├── dart.js │ │ └── index.html │ │ ├── diff │ │ ├── diff.js │ │ └── index.html │ │ ├── django │ │ ├── django.js │ │ └── index.html │ │ ├── dockerfile │ │ ├── dockerfile.js │ │ └── index.html │ │ ├── dtd │ │ ├── dtd.js │ │ └── index.html │ │ ├── dylan │ │ ├── dylan.js │ │ └── index.html │ │ ├── ebnf │ │ ├── ebnf.js │ │ └── index.html │ │ ├── ecl │ │ ├── ecl.js │ │ └── index.html │ │ ├── eiffel │ │ ├── eiffel.js │ │ └── index.html │ │ ├── erlang │ │ ├── erlang.js │ │ └── index.html │ │ ├── fortran │ │ ├── fortran.js │ │ └── index.html │ │ ├── gas │ │ ├── gas.js │ │ └── index.html │ │ ├── gfm │ │ ├── gfm.js │ │ ├── index.html │ │ └── test.js │ │ ├── gherkin │ │ ├── gherkin.js │ │ └── index.html │ │ ├── go │ │ ├── go.js │ │ └── index.html │ │ ├── groovy │ │ ├── groovy.js │ │ └── index.html │ │ ├── haml │ │ ├── haml.js │ │ ├── index.html │ │ └── test.js │ │ ├── haskell │ │ ├── haskell.js │ │ └── index.html │ │ ├── haxe │ │ ├── haxe.js │ │ └── index.html │ │ ├── htmlembedded │ │ ├── htmlembedded.js │ │ └── index.html │ │ ├── htmlmixed │ │ ├── htmlmixed.js │ │ └── index.html │ │ ├── http │ │ ├── http.js │ │ └── index.html │ │ ├── idl │ │ ├── idl.js │ │ └── index.html │ │ ├── index.html │ │ ├── jade │ │ ├── index.html │ │ └── jade.js │ │ ├── javascript │ │ ├── index.html │ │ ├── javascript.js │ │ ├── json-ld.html │ │ ├── test.js │ │ └── typescript.html │ │ ├── jinja2 │ │ ├── index.html │ │ └── jinja2.js │ │ ├── julia │ │ ├── index.html │ │ └── julia.js │ │ ├── kotlin │ │ ├── index.html │ │ └── kotlin.js │ │ ├── livescript │ │ ├── index.html │ │ └── livescript.js │ │ ├── lua │ │ ├── index.html │ │ └── lua.js │ │ ├── markdown │ │ ├── index.html │ │ ├── markdown.js │ │ └── test.js │ │ ├── meta.js │ │ ├── mirc │ │ ├── index.html │ │ └── mirc.js │ │ ├── mllike │ │ ├── index.html │ │ └── mllike.js │ │ ├── modelica │ │ ├── index.html │ │ └── modelica.js │ │ ├── nginx │ │ ├── index.html │ │ └── nginx.js │ │ ├── ntriples │ │ ├── index.html │ │ └── ntriples.js │ │ ├── octave │ │ ├── index.html │ │ └── octave.js │ │ ├── pascal │ │ ├── index.html │ │ └── pascal.js │ │ ├── pegjs │ │ ├── index.html │ │ └── pegjs.js │ │ ├── perl │ │ ├── index.html │ │ └── perl.js │ │ ├── php │ │ ├── index.html │ │ ├── php.js │ │ └── test.js │ │ ├── pig │ │ ├── index.html │ │ └── pig.js │ │ ├── properties │ │ ├── index.html │ │ └── properties.js │ │ ├── puppet │ │ ├── index.html │ │ └── puppet.js │ │ ├── python │ │ ├── index.html │ │ └── python.js │ │ ├── q │ │ ├── index.html │ │ └── q.js │ │ ├── r │ │ ├── index.html │ │ └── r.js │ │ ├── rpm │ │ ├── changes │ │ │ └── index.html │ │ ├── index.html │ │ └── rpm.js │ │ ├── rst │ │ ├── index.html │ │ └── rst.js │ │ ├── ruby │ │ ├── index.html │ │ ├── ruby.js │ │ └── test.js │ │ ├── rust │ │ ├── index.html │ │ └── rust.js │ │ ├── sass │ │ ├── index.html │ │ └── sass.js │ │ ├── scheme │ │ ├── index.html │ │ └── scheme.js │ │ ├── shell │ │ ├── index.html │ │ ├── shell.js │ │ └── test.js │ │ ├── sieve │ │ ├── index.html │ │ └── sieve.js │ │ ├── slim │ │ ├── index.html │ │ ├── slim.js │ │ └── test.js │ │ ├── smalltalk │ │ ├── index.html │ │ └── smalltalk.js │ │ ├── smarty │ │ ├── index.html │ │ └── smarty.js │ │ ├── smartymixed │ │ ├── index.html │ │ └── smartymixed.js │ │ ├── solr │ │ ├── index.html │ │ └── solr.js │ │ ├── soy │ │ ├── index.html │ │ └── soy.js │ │ ├── sparql │ │ ├── index.html │ │ └── sparql.js │ │ ├── spreadsheet │ │ ├── index.html │ │ └── spreadsheet.js │ │ ├── sql │ │ ├── index.html │ │ └── sql.js │ │ ├── stex │ │ ├── index.html │ │ ├── stex.js │ │ └── test.js │ │ ├── tcl │ │ ├── index.html │ │ └── tcl.js │ │ ├── textile │ │ ├── index.html │ │ ├── test.js │ │ └── textile.js │ │ ├── tiddlywiki │ │ ├── index.html │ │ ├── tiddlywiki.css │ │ └── tiddlywiki.js │ │ ├── tiki │ │ ├── index.html │ │ ├── tiki.css │ │ └── tiki.js │ │ ├── toml │ │ ├── index.html │ │ └── toml.js │ │ ├── tornado │ │ ├── index.html │ │ └── tornado.js │ │ ├── turtle │ │ ├── index.html │ │ └── turtle.js │ │ ├── vb │ │ ├── index.html │ │ └── vb.js │ │ ├── vbscript │ │ ├── index.html │ │ └── vbscript.js │ │ ├── velocity │ │ ├── index.html │ │ └── velocity.js │ │ ├── verilog │ │ ├── index.html │ │ ├── test.js │ │ └── verilog.js │ │ ├── xml │ │ ├── index.html │ │ ├── test.js │ │ └── xml.js │ │ ├── xquery │ │ ├── index.html │ │ ├── test.js │ │ └── xquery.js │ │ ├── yaml │ │ ├── index.html │ │ └── yaml.js │ │ └── z80 │ │ ├── index.html │ │ └── z80.js ├── colorpicker │ └── bootstrap-colorpicker.min.js ├── cropper │ └── cropper.min.js ├── dataTables │ ├── dataTables.bootstrap.js │ └── jquery.dataTables.js ├── datapicker │ └── bootstrap-datepicker.js ├── diff_match_patch │ └── diff_match_patch.js ├── dropzone │ └── dropzone.js ├── duallistbox │ └── jquery.bootstrap-duallistbox.js ├── easypiechart │ └── jquery.easypiechart.js ├── echarts │ └── echarts-all.js ├── fancybox │ ├── blank.gif │ ├── fancybox_loading.gif │ ├── fancybox_loading@2x.gif │ ├── fancybox_overlay.png │ ├── fancybox_sprite.png │ ├── fancybox_sprite@2x.png │ ├── jquery.fancybox.css │ └── jquery.fancybox.js ├── flot │ ├── curvedLines.js │ ├── jquery.flot.js │ ├── jquery.flot.pie.js │ ├── jquery.flot.resize.js │ ├── jquery.flot.spline.js │ ├── jquery.flot.symbol.js │ └── jquery.flot.tooltip.min.js ├── footable │ └── footable.all.min.js ├── fullcalendar │ ├── fullcalendar.min.js │ └── moment.min.js ├── gritter │ ├── images │ │ ├── gritter-light.png │ │ ├── gritter.png │ │ └── ie-spacer.gif │ ├── jquery.gritter.css │ └── jquery.gritter.min.js ├── iCheck │ └── icheck.min.js ├── ionRangeSlider │ ├── ion.rangeSlider.min.js │ └── jasny │ │ └── jasny-bootstrap.min.js ├── jasny │ └── jasny-bootstrap.min.js ├── jeditable │ └── jquery.jeditable.js ├── jqgrid │ ├── i18n │ │ └── grid.locale-cn.js │ └── jquery.jqGrid.min.js ├── jquery-ui │ └── jquery-ui.min.js ├── jsKnob │ └── jquery.knob.js ├── jsTree │ ├── jstree.js │ └── jstree.min.js ├── jvectormap │ ├── jquery-jvectormap-1.2.2.min.js │ └── jquery-jvectormap-world-mill-en.js ├── layer │ ├── extend │ │ └── layer.ext.js │ ├── laydate │ │ ├── laydate.js │ │ ├── need │ │ │ └── laydate.css │ │ └── skins │ │ │ └── default │ │ │ ├── icon.png │ │ │ └── laydate.css │ ├── layer.min.js │ ├── layim │ │ ├── data │ │ │ ├── chatlog.json │ │ │ ├── friend.json │ │ │ ├── group.json │ │ │ └── groups.json │ │ ├── layim.css │ │ ├── layim.js │ │ └── loading.gif │ └── skin │ │ ├── default │ │ ├── icon-ext.png │ │ ├── icon.png │ │ ├── icon_ext.png │ │ ├── loading-0.gif │ │ ├── loading-1.gif │ │ ├── loading-2.gif │ │ ├── textbg.png │ │ ├── xubox_ico0.png │ │ ├── xubox_loading0.gif │ │ ├── xubox_loading1.gif │ │ ├── xubox_loading2.gif │ │ ├── xubox_loading3.gif │ │ └── xubox_title0.png │ │ ├── layer.css │ │ ├── layer.ext.css │ │ └── moon │ │ ├── default.png │ │ └── style.css ├── markdown │ ├── bootstrap-markdown.js │ ├── bootstrap-markdown.zh.js │ ├── markdown.js │ └── to-markdown.js ├── metisMenu │ └── jquery.metisMenu.js ├── morris │ ├── morris.js │ └── raphael-2.1.0.min.js ├── multiselect │ └── bootstrap-multiselect.js ├── nestable │ └── jquery.nestable.js ├── nouslider │ └── jquery.nouislider.min.js ├── pace │ └── pace.min.js ├── peity │ └── jquery.peity.min.js ├── plyr │ └── plyr.js ├── preetyTextDiff │ └── jquery.pretty-text-diff.min.js ├── prettyfile │ └── bootstrap-prettyfile.js ├── rickshaw │ ├── rickshaw.min.js │ └── vendor │ │ └── d3.v3.js ├── simditor │ ├── hotkeys.js │ ├── hotkeys.min.js │ ├── jquery.min.js │ ├── module.js │ ├── module.min.js │ ├── simditor.js │ ├── simditor.min.js │ ├── uploader.js │ └── uploader.min.js ├── slimscroll │ └── jquery.slimscroll.min.js ├── sparkline │ └── jquery.sparkline.min.js ├── staps │ └── jquery.steps.min.js ├── suggest │ ├── bootstrap-suggest.min.js │ └── data.json ├── summernote │ ├── summernote-zh-CN.js │ └── summernote.min.js ├── sweetalert │ └── sweetalert.min.js ├── switchery │ └── switchery.js ├── toastr │ └── toastr.min.js ├── treeview │ └── bootstrap-treeview.js ├── validate │ ├── additional-methods.min.js │ ├── jquery.validate.min.js │ └── messages_zh.min.js └── webuploader │ ├── README.md │ ├── Uploader.swf │ ├── webuploader.css │ ├── webuploader.custom.js │ ├── webuploader.custom.min.js │ ├── webuploader.fis.js │ ├── webuploader.flashonly.js │ ├── webuploader.flashonly.min.js │ ├── webuploader.html5only.js │ ├── webuploader.html5only.min.js │ ├── webuploader.js │ ├── webuploader.min.js │ ├── webuploader.noimage.js │ ├── webuploader.noimage.min.js │ ├── webuploader.nolog.js │ ├── webuploader.nolog.min.js │ ├── webuploader.withoutimage.js │ └── webuploader.withoutimage.min.js └── welcome.js /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | *.class 3 | 4 | # Mobile Tools for Java (J2ME) 5 | .mtj.tmp/ 6 | 7 | # Package Files # 8 | *.jar 9 | *.war 10 | *.ear 11 | 12 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 13 | hs_err_pid* 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # teemo 2 | Teemo是一个Java EE企业级通用开发框架,提供底层抽象和常用功能,包括基础CRUD、分页、角色权限、用户管理、资源管理、部门管理、数据库监控、自定义菜单等功能,完全开源,没有任何限制,在项目代码趋于稳定之后会切换成分布式项目,欢迎Star和Fork。 3 | 4 | 该项目适合于拥有1-3年开发经验的初级程序员作为学习、参考的项目或者直接拿来作为开发的基础框架。 5 | 6 | # 演示环境 7 | 8 | - Java 1.7.0_02 9 | - Tomcat 7.0.65 10 | - Mysql 5.7.16 11 | 12 | # 账号说明 13 | 14 | - 所有账号的密码都是:123456 15 | - alibaba是超级管理员 16 | 17 | ## 用到的技术 18 | 19 | 1. orm框架:Hibernate 5.0.2 20 | 2. ioc容器:Spring 4.2.2 21 | 3. web框架:Spring MVC 4.2.2 22 | 4. 安全框架:Shiro 1.2.1 23 | 5. 数据库源:Druid 1.0.26 24 | 6. 日志组件:slf4j、log4j 25 | 7. JSON组件:fastjson 26 | 8. 任务调度:quartz 27 | 9. 模板:jsp、freemarker 28 | 10. 缓存组件:ehcache 2.5.3 29 | 30 | ## 前端 31 | 32 | `前端所有组件均可自由选择和切换` 33 | 34 | 1. 主框架:bootstrap 35 | 2. 表格组件:bootstrap table 36 | 3. 校验组件:jquery validate 37 | 4. 弹层组件:layer 38 | 99. 其他:i-checks 39 | 40 | ## 数据库 41 | 42 | 1. MySQL 5.7.16 43 | 44 | ## 文档链接 45 | 46 | 代码文档: 47 | 48 | https://beiyoufx.github.io/teemo-api-doc 49 | 50 | http://beiyoufx.oschina.io/teemo-api-doc/ 51 | 52 | 使用说明和开发指南: 53 | 54 | https://github.com/beiyoufx/teemo/wiki 55 | 56 | http://git.oschina.net/beiyoufx/teemo/wikis/home 57 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/core/Constants.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package com.teemo.core; 7 | 8 | /** 9 | * @author yongjie.teng 10 | * @date 16-10-28 下午3:24 11 | * @email yongjie.teng@foxmail.com 12 | * @package com.teemo.core 13 | */ 14 | public final class Constants { 15 | /** 16 | * 系统属性 17 | * DP_开头的属性全部从DynamicProperty表读取 18 | */ 19 | public static final String DP_SYSTEM_VERSION = "System.Version"; //用户获取当前系统的版本 20 | public static final String DP_STATIC_PATH = "Static.Path"; //系统的静态资源地址 21 | 22 | /** 23 | * 业务属性 24 | */ 25 | public static final String SESSION_USER = "SESSION_USER"; 26 | 27 | /** 28 | * 操作名称 29 | */ 30 | public static final String OP_NAME = "op"; 31 | 32 | /** 33 | * 消息key 34 | */ 35 | public static final String MESSAGE = "message"; 36 | 37 | /** 38 | * 错误key 39 | */ 40 | public static final String ERROR = "error"; 41 | 42 | /** 43 | * 上个页面地址 44 | */ 45 | public static final String BACK_URL = "BackURL"; 46 | public static final String IGNORE_BACK_URL = "ignoreBackURL"; 47 | 48 | /** 49 | * 当前请求的地址 带参数 50 | */ 51 | public static final String CURRENT_URL = "currentURL"; 52 | 53 | /** 54 | * 当前请求的地址 不带参数 55 | */ 56 | public static final String NO_QUERYSTRING_CURRENT_URL = "noQueryStringCurrentURL"; 57 | public static final String CONTEXT_PATH = "ctx"; 58 | 59 | /** 60 | * 当前登录的用户 61 | */ 62 | public static final String CURRENT_USER = "CurrentUser"; 63 | public static final String CURRENT_USERNAME = "username"; 64 | 65 | /** 66 | * 各种正则表达式 67 | */ 68 | public static final String USERNAME_PATTERN = "^[\\u4E00-\\u9FA5\\uf900-\\ufa2d_a-zA-Z][\\u4E00-\\u9FA5\\uf900-\\ufa2d\\w]{1,19}$"; 69 | public static final String MOBILE_PHONE_PATTERN = "^0{0,1}(13[0-9]|15[0-9]|14[0-9]|18[0-9])[0-9]{8}$"; 70 | public static final String EMAIL_PATTERN = "^\\w+([-.]\\w+)*@\\w+([-]\\w+)*\\.(\\w+([-]\\w+)*\\.)*[a-z]{2,3}$"; 71 | } 72 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/core/entity/BaseEntity.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package com.teemo.core.entity; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author yongjie.teng 12 | * @version 1.0 13 | * @date 16-10-21 14 | * @email yongjie.teng@foxmail.com 15 | * @package com.teemo.core.entity 16 | * @project teemo 17 | */ 18 | public abstract class BaseEntity implements Serializable { 19 | } 20 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/core/entity/LogicDeletable.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package com.teemo.core.entity; 7 | 8 | /** 9 | * 实现该接口表示实体想要逻辑删除 10 | * @author yongjie.teng 11 | * @version 1.0 12 | * @date 16-10-21 13 | * @email yongjie.teng@foxmail.com 14 | * @package com.teemo.core.entity 15 | * @project teemo 16 | */ 17 | public interface LogicDeletable { 18 | public Boolean getDeleted(); 19 | public void setDeleted(Boolean deleted); 20 | 21 | /** 22 | * 标记实体为已删除 23 | */ 24 | public void markDeleted(); 25 | } 26 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/core/exception/UserBlockedException.java: -------------------------------------------------------------------------------- 1 | package com.teemo.core.exception; 2 | 3 | /** 4 | * @author yongjie.teng 5 | * @date 16-11-21 下午7:31 6 | * @email yongjie.teng@foxmail.com 7 | * @package com.teemo.core.exception 8 | */ 9 | public class UserBlockedException extends UserException { 10 | public UserBlockedException() { 11 | super("user.blocked", null); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/core/exception/UserException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package com.teemo.core.exception; 7 | 8 | import core.util.SpringUtil; 9 | import core.util.StringUtil; 10 | 11 | /** 12 | * @author yongjie.teng 13 | * @date 16-11-7 下午5:28 14 | * @email yongjie.teng@foxmail.com 15 | * @package com.teemo.core.exception 16 | */ 17 | public class UserException extends Exception { 18 | private String code; 19 | private String defaultMessage; 20 | 21 | public UserException(String code, String defaultMessage) { 22 | this.code = code; 23 | this.defaultMessage = defaultMessage; 24 | } 25 | 26 | @Override 27 | public String getMessage() { 28 | String message = null; 29 | if (StringUtil.isNotEmpty(this.code)) { 30 | message = SpringUtil.getMessage(code); 31 | } 32 | if (message == null) { 33 | message = this.defaultMessage; 34 | } 35 | return message; 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/core/exception/UserNotExistsException.java: -------------------------------------------------------------------------------- 1 | package com.teemo.core.exception; 2 | 3 | /** 4 | * @author yongjie.teng 5 | * @date 16-11-21 下午7:23 6 | * @email yongjie.teng@foxmail.com 7 | * @package com.teemo.core.exception 8 | */ 9 | public class UserNotExistsException extends UserException { 10 | public UserNotExistsException() { 11 | super("user.not.exists", null); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/core/exception/UserPasswordIncorrectnessException.java: -------------------------------------------------------------------------------- 1 | package com.teemo.core.exception; 2 | 3 | /** 4 | * @author yongjie.teng 5 | * @date 16-11-21 下午7:30 6 | * @email yongjie.teng@foxmail.com 7 | * @package com.teemo.core.exception 8 | */ 9 | public class UserPasswordIncorrectnessException extends UserException { 10 | public UserPasswordIncorrectnessException() { 11 | super("user.password.incorrectness", null); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/core/security/CurrentUserInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.teemo.core.security; 2 | 3 | import javax.annotation.Resource; 4 | import javax.servlet.http.HttpServletRequest; 5 | import javax.servlet.http.HttpServletResponse; 6 | 7 | import com.teemo.core.Constants; 8 | import com.teemo.entity.User; 9 | import com.teemo.service.UserService; 10 | import org.apache.shiro.SecurityUtils; 11 | import org.springframework.stereotype.Component; 12 | import org.springframework.web.servlet.ModelAndView; 13 | import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; 14 | 15 | /** 16 | * A Spring MVC interceptor that adds the currentUser into the request as a request attribute before the JSP is rendered. This operation is assumed to be fast because the User should be cached in the Hibernate 17 | * second-level cache. 18 | */ 19 | @Component 20 | public class CurrentUserInterceptor extends HandlerInterceptorAdapter { 21 | 22 | @Resource 23 | private UserService userService; 24 | 25 | @Override 26 | public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { 27 | // Add the current user into the request 28 | final Long currentUserId = (Long) SecurityUtils.getSubject().getPrincipal(); 29 | User currentUser = userService.get(currentUserId); 30 | if (currentUser != null) { 31 | httpServletRequest.setAttribute(Constants.CURRENT_USER, currentUser); 32 | } 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/core/security/CustomCredentialsMatcher.java: -------------------------------------------------------------------------------- 1 | package com.teemo.core.security; 2 | 3 | import org.apache.shiro.authc.AuthenticationInfo; 4 | import org.apache.shiro.authc.AuthenticationToken; 5 | import org.apache.shiro.authc.credential.SimpleCredentialsMatcher; 6 | 7 | /** 8 | * @author yongjie.teng 9 | * @date 16-11-21 下午9:01 10 | * @email yongjie.teng@foxmail.com 11 | * @package com.teemo.core.security 12 | */ 13 | public class CustomCredentialsMatcher extends SimpleCredentialsMatcher { 14 | @Override 15 | public boolean doCredentialsMatch(AuthenticationToken authcToken, AuthenticationInfo info) { 16 | /** 17 | * 由于在UserService中已经实现了密码校验功能,因此在这里放一个空实现 18 | * 或者你也可以有一个自己的实现 19 | */ 20 | return true; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/core/util/DPUtil.java: -------------------------------------------------------------------------------- 1 | package com.teemo.core.util; 2 | 3 | import com.teemo.entity.DynamicProperty; 4 | import com.teemo.service.DynamicPropertyService; 5 | import core.util.SpringUtil; 6 | 7 | /** 8 | * @author yongjie.teng 9 | * @date 16-11-8 下午5:38 10 | * @email yongjie.teng@foxmail.com 11 | * @package com.teemo.core.util 12 | */ 13 | public final class DPUtil { 14 | private static DynamicPropertyService dynamicPropertyService; 15 | 16 | public static String getDynamicProperty(String key) { 17 | if (dynamicPropertyService == null) { 18 | dynamicPropertyService = SpringUtil.getBean("dynamicPropertyService"); 19 | } 20 | DynamicProperty dynamicProperty = dynamicPropertyService.getByPropertyKey(key); 21 | if (dynamicProperty != null) { 22 | return dynamicProperty.getDynamicPropertyValue(); 23 | } 24 | return null; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/core/util/UserLogUtil.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package com.teemo.core.util; 7 | 8 | import core.util.IpUtil; 9 | import org.slf4j.Logger; 10 | import org.slf4j.LoggerFactory; 11 | 12 | /** 13 | * @author yongjie.teng 14 | * @date 16-11-2 下午3:27 15 | * @email yongjie.teng@foxmail.com 16 | * @package com.teemo.core.util 17 | */ 18 | public class UserLogUtil { 19 | private static final Logger USER_LOGGER = LoggerFactory.getLogger("USER_LOG"); 20 | 21 | /** 22 | *

记录格式 [ip][用户名][操作][错误消息]

23 | * 注意操作如下: 24 | * loginError 登录失败 25 | * loginSuccess 登录成功 26 | * passwordError 密码错误 27 | * changePassword 修改密码 28 | * changeStatus 修改状态 29 | * 30 | * @param username 31 | * @param op 32 | * @param msg 33 | * @param args 34 | */ 35 | public static void log(String username, String op, String msg, Object... args) { 36 | StringBuilder s = new StringBuilder(); 37 | s.append(getBlock(IpUtil.getIp())); 38 | s.append(getBlock(username)); 39 | s.append(getBlock(op)); 40 | s.append(getBlock(msg)); 41 | 42 | USER_LOGGER.info(s.toString(), args); 43 | } 44 | 45 | public static String getBlock(Object msg) { 46 | if (msg == null) { 47 | msg = ""; 48 | } 49 | return "[" + msg.toString() + "]"; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/dao/DepartmentDao.java: -------------------------------------------------------------------------------- 1 | package com.teemo.dao; 2 | 3 | import com.teemo.entity.Department; 4 | import core.dao.BaseDao; 5 | import org.springframework.stereotype.Repository; 6 | 7 | /** 8 | * @author yongjie.teng 9 | * @date 16-12-15 下午8:01 10 | * @email yongjie.teng@foxmail.com 11 | * @package com.teemo.dao 12 | */ 13 | @Repository 14 | public class DepartmentDao extends BaseDao { 15 | } 16 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/dao/DynamicPropertyDao.java: -------------------------------------------------------------------------------- 1 | package com.teemo.dao; 2 | 3 | import com.teemo.entity.DynamicProperty; 4 | import core.dao.BaseDao; 5 | import core.util.StringUtil; 6 | import org.hibernate.Query; 7 | import org.springframework.stereotype.Repository; 8 | 9 | /** 10 | * @author yongjie.teng 11 | * @date 16-11-8 下午5:34 12 | * @email yongjie.teng@foxmail.com 13 | * @package com.teemo.dao 14 | */ 15 | @Repository 16 | public class DynamicPropertyDao extends BaseDao { 17 | 18 | /** 19 | * 部分更新动态属性表字段 20 | * 只更新以下字段:dynamicPropertyValue/description/modifyTime/version 21 | * @param dynamicProperty 待更新实体 22 | */ 23 | public void mergeDynamicProperty(DynamicProperty dynamicProperty) { 24 | StringBuilder sb = new StringBuilder(); 25 | sb.append("update " + DynamicProperty.class.getName() + " e set "); 26 | 27 | String[] props = new String[2]; 28 | Object[] values = new Object[2]; 29 | 30 | int pos = 0; 31 | // 拼接需要更新的字段属性名 32 | if (StringUtil.isNotEmpty(dynamicProperty.getDynamicPropertyValue())) { 33 | props[pos] = "dynamicPropertyValue"; 34 | values[pos] = dynamicProperty.getDynamicPropertyValue(); 35 | sb.append(props[pos] + " = :v_" + props[pos] + ","); 36 | pos++; 37 | } 38 | 39 | props[pos] = "description"; 40 | values[pos] = dynamicProperty.getDescription(); 41 | sb.append(props[pos] + " = :v_" + props[pos] + ","); 42 | 43 | // 拼接固定语句 44 | sb.append("modifyTime = now(), version = version + 0.1 where id = " + dynamicProperty.getId()); 45 | 46 | Query query = getSession().createQuery(sb.toString()); 47 | // 拼接需要更新的字段属性值 48 | for (int i = 0; i <= pos; i++) { 49 | query.setParameter("v_" + props[i], values[i]); 50 | } 51 | query.executeUpdate(); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/dao/PermissionDao.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package com.teemo.dao; 7 | 8 | import com.teemo.entity.Permission; 9 | import core.dao.BaseDao; 10 | import org.springframework.stereotype.Repository; 11 | 12 | /** 13 | * @author yongjie.teng 14 | * @date 16-11-22 上午9:39 15 | * @email yongjie.teng@foxmail.com 16 | * @package com.teemo.dao 17 | */ 18 | @Repository 19 | public class PermissionDao extends BaseDao { 20 | } 21 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/dao/ResourceDao.java: -------------------------------------------------------------------------------- 1 | package com.teemo.dao; 2 | 3 | import com.teemo.entity.Resource; 4 | import com.teemo.entity.RoleResourcePermission; 5 | import core.dao.BaseDao; 6 | import org.hibernate.Query; 7 | import org.springframework.stereotype.Repository; 8 | 9 | /** 10 | * @author yongjie.teng 11 | * @date 16-11-22 上午9:39 12 | * @email yongjie.teng@foxmail.com 13 | * @package com.teemo.dao 14 | */ 15 | @Repository 16 | public class ResourceDao extends BaseDao { 17 | 18 | /** 19 | * 获取根资源ID 20 | * id最小的就是根资源 21 | */ 22 | public Long getRootResourceId() { 23 | Query query = getSession().createQuery("select MIN(id) as id from " + Resource.class.getName()); 24 | return (Long) query.uniqueResult(); 25 | } 26 | 27 | /** 28 | * 根据资源主键删除资源角色关系 29 | * @param id 资源ID 30 | */ 31 | public void deleteRoleResource(Long id) { 32 | Query query = getSession().createQuery("delete from " + RoleResourcePermission.class.getName() + " e where e.resourceId = :resourceId"); 33 | query.setParameter("resourceId", id); 34 | query.executeUpdate(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/dao/RoleDao.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package com.teemo.dao; 7 | 8 | import com.teemo.entity.Role; 9 | import core.dao.BaseDao; 10 | import org.hibernate.Query; 11 | import org.springframework.stereotype.Repository; 12 | 13 | /** 14 | * @author yongjie.teng 15 | * @date 16-11-22 上午9:39 16 | * @email yongjie.teng@foxmail.com 17 | * @package com.teemo.dao 18 | */ 19 | @Repository 20 | public class RoleDao extends BaseDao { 21 | 22 | /** 23 | * 根据角色主键删除用户角色关系 24 | * @param id 角色ID 25 | */ 26 | public void deleteUserRoleById(Long id) { 27 | Query query = getSession().createSQLQuery("delete from user_role where role_id = :roleId"); 28 | query.setParameter("roleId", id); 29 | query.executeUpdate(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/dao/RoleResourcePermissionDao.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package com.teemo.dao; 7 | 8 | import com.teemo.entity.RoleResourcePermission; 9 | import core.dao.BaseDao; 10 | import org.hibernate.Query; 11 | import org.springframework.stereotype.Repository; 12 | 13 | /** 14 | * @author yongjie.teng 15 | * @date 16-12-9 下午6:13 16 | * @email yongjie.teng@foxmail.com 17 | * @package com.teemo.dao 18 | */ 19 | @Repository 20 | public class RoleResourcePermissionDao extends BaseDao { 21 | 22 | /** 23 | * 根据角色主键删除角色权限信息 24 | * @param roleId 角色ID 25 | */ 26 | public void deleteByRoleId(Long roleId) { 27 | Query query = this.getSession().createSQLQuery("delete from role_resource_permission where role_id = :roleId"); 28 | query.setParameter("roleId", roleId); 29 | query.executeUpdate(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/dto/BTQueryParameter.java: -------------------------------------------------------------------------------- 1 | package com.teemo.dto; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * Bootstrap Table 表格视图请求参数 7 | * @author yongjie.teng 8 | * @date 16-12-7 下午3:32 9 | * @email yongjie.teng@foxmail.com 10 | * @package com.teemo.dto 11 | */ 12 | public class BTQueryParameter implements Serializable { 13 | private static final long serialVersionUID = 639145165702621352L; 14 | private String searchText; 15 | private Integer pageSize; 16 | private Integer pageNumber; 17 | private String sortName; 18 | private String sortOrder; 19 | 20 | public String getSearchText() { 21 | return searchText; 22 | } 23 | 24 | public void setSearchText(String searchText) { 25 | this.searchText = searchText; 26 | } 27 | 28 | public Integer getPageSize() { 29 | return pageSize; 30 | } 31 | 32 | public void setPageSize(Integer pageSize) { 33 | this.pageSize = pageSize; 34 | } 35 | 36 | public Integer getPageNumber() { 37 | return pageNumber; 38 | } 39 | 40 | /** 41 | * Bootstrap Table的分页是从1开始的 42 | * 这里需要做兼容,将首页下标改为0 43 | * @param pageNumber 44 | */ 45 | public void setPageNumber(Integer pageNumber) { 46 | this.pageNumber = pageNumber - 1; 47 | } 48 | 49 | public String getSortName() { 50 | return sortName; 51 | } 52 | 53 | public void setSortName(String sortName) { 54 | this.sortName = sortName; 55 | } 56 | 57 | public String getSortOrder() { 58 | return sortOrder; 59 | } 60 | 61 | public void setSortOrder(String sortOrder) { 62 | this.sortOrder = sortOrder; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/dto/Page.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package com.teemo.dto; 7 | 8 | import com.alibaba.fastjson.annotation.JSONType; 9 | 10 | import java.io.Serializable; 11 | import java.util.List; 12 | 13 | /** 14 | * @author yongjie.teng 15 | * @date 16-12-7 上午9:40 16 | * @email yongjie.teng@foxmail.com 17 | * @package com.teemo.dto 18 | */ 19 | @JSONType(orders = {"currentPage", "pageSize", "total", "totalPage", "records"}) 20 | public class Page implements Serializable { 21 | private static final long serialVersionUID = -4439159377751637892L; 22 | private List records; 23 | private Integer pageSize = 1; 24 | private Integer currentPage = 0; 25 | private Long total; 26 | private Long totalPage; 27 | 28 | public List getRecords() { 29 | return records; 30 | } 31 | 32 | public void setRecords(List records) { 33 | this.records = records; 34 | } 35 | 36 | public Integer getPageSize() { 37 | return pageSize; 38 | } 39 | 40 | /** 41 | * 每页记录数最小为1 42 | * @param pageSize 每页记录数 43 | */ 44 | public void setPageSize(Integer pageSize) { 45 | if (pageSize != null && pageSize > 1) { 46 | this.pageSize = pageSize; 47 | } 48 | } 49 | 50 | public Integer getCurrentPage() { 51 | return currentPage; 52 | } 53 | 54 | /** 55 | * 页码从0开始 56 | * @param currentPage 当前页 57 | */ 58 | public void setCurrentPage(Integer currentPage) { 59 | if (currentPage != null && currentPage > 0) { 60 | this.currentPage = currentPage; 61 | } 62 | } 63 | 64 | public Long getTotal() { 65 | return total; 66 | } 67 | 68 | public void setTotal(Long total) { 69 | this.total = total; 70 | } 71 | 72 | public Long getTotalPage() { 73 | totalPage = (total + pageSize - 1) / pageSize; 74 | return totalPage; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/dto/Result.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package com.teemo.dto; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author yongjie.teng 12 | * @date 16-11-7 下午7:07 13 | * @email yongjie.teng@foxmail.com 14 | * @package com.teemo.dto 15 | */ 16 | public class Result implements Serializable { 17 | private int code; 18 | private String message; 19 | 20 | public Result(int code, String message) { 21 | this.code = code; 22 | this.message = message; 23 | } 24 | 25 | public int getCode() { 26 | return code; 27 | } 28 | 29 | public void setCode(int code) { 30 | this.code = code; 31 | } 32 | 33 | public String getMessage() { 34 | return message; 35 | } 36 | 37 | public void setMessage(String message) { 38 | this.message = message; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/dto/ResultData.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package com.teemo.dto; 7 | 8 | /** 9 | * @author yongjie.teng 10 | * @date 16-11-24 下午6:49 11 | * @email yongjie.teng@foxmail.com 12 | * @package com.teemo.dto 13 | */ 14 | public class ResultData extends Result { 15 | private Object data; 16 | public ResultData(int code, String message) { 17 | super(code, message); 18 | } 19 | 20 | public Object getData() { 21 | return data; 22 | } 23 | 24 | public void setData(Object data) { 25 | this.data = data; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/entity/ResourceType.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package com.teemo.entity; 7 | 8 | /** 9 | * @author yongjie.teng 10 | * @date 16-12-14 下午7:11 11 | * @email yongjie.teng@foxmail.com 12 | * @package com.teemo.entity 13 | */ 14 | public enum ResourceType { 15 | view("视图"),menu("菜单"),entity("实体"),url("链接"); 16 | 17 | private final String info; 18 | 19 | private ResourceType(String info) { 20 | this.info = info; 21 | } 22 | 23 | public String getInfo() { 24 | return info; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/entity/UserStatus.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package com.teemo.entity; 7 | 8 | /** 9 | * @author yongjie.teng 10 | * @date 16-11-21 下午5:38 11 | * @email yongjie.teng@foxmail.com 12 | * @package com.teemo.entity 13 | */ 14 | public enum UserStatus { 15 | normal("正常状态"),blocked("锁定状态"); 16 | 17 | private final String info; 18 | 19 | private UserStatus(String info) { 20 | this.info = info; 21 | } 22 | 23 | public String getInfo() { 24 | return info; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/service/DepartmentService.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package com.teemo.service; 7 | 8 | import com.teemo.dao.DepartmentDao; 9 | import com.teemo.entity.Department; 10 | import core.service.BaseService; 11 | import org.springframework.stereotype.Service; 12 | import org.springframework.transaction.annotation.Propagation; 13 | import org.springframework.transaction.annotation.Transactional; 14 | 15 | import javax.annotation.Resource; 16 | 17 | /** 18 | * @author yongjie.teng 19 | * @date 16-12-15 下午8:00 20 | * @email yongjie.teng@foxmail.com 21 | * @package com.teemo.service 22 | */ 23 | @Service 24 | public class DepartmentService extends BaseService { 25 | private DepartmentDao departmentDao; 26 | @Resource 27 | public void setDepartmentDao(DepartmentDao departmentDao) { 28 | this.departmentDao = departmentDao; 29 | this.dao = departmentDao; 30 | } 31 | 32 | @Transactional(propagation = Propagation.REQUIRED, rollbackFor = {RuntimeException.class}) 33 | public boolean logicDelete(Long id) { 34 | boolean result = false; 35 | if (id != null) { 36 | Department department = get(id); 37 | if (department != null && Boolean.FALSE.equals(department.getDeleted())) { 38 | department.setDeleted(Boolean.TRUE); 39 | update(department); 40 | result = true; 41 | } 42 | } 43 | return result; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/service/PermissionService.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package com.teemo.service; 7 | 8 | import com.teemo.dao.PermissionDao; 9 | import com.teemo.entity.Permission; 10 | import core.service.BaseService; 11 | import org.springframework.stereotype.Service; 12 | 13 | /** 14 | * @author yongjie.teng 15 | * @date 16-11-22 上午9:31 16 | * @email yongjie.teng@foxmail.com 17 | * @package com.teemo.service 18 | */ 19 | @Service 20 | public class PermissionService extends BaseService { 21 | private PermissionDao permissionDao; 22 | @javax.annotation.Resource 23 | public void setPermissionDao(PermissionDao permissionDao) { 24 | this.permissionDao = permissionDao; 25 | this.dao = permissionDao; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /teemo/src/main/java/com/teemo/service/RoleResourcePermissionService.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package com.teemo.service; 7 | 8 | import com.teemo.dao.RoleResourcePermissionDao; 9 | import com.teemo.entity.RoleResourcePermission; 10 | import core.service.BaseService; 11 | import org.springframework.stereotype.Service; 12 | 13 | import javax.annotation.Resource; 14 | 15 | /** 16 | * @author yongjie.teng 17 | * @date 16-12-9 下午6:12 18 | * @email yongjie.teng@foxmail.com 19 | * @package com.teemo.service 20 | */ 21 | @Service 22 | public class RoleResourcePermissionService extends BaseService { 23 | private RoleResourcePermissionDao roleResourcePermissionDao; 24 | @Resource 25 | public void setRoleResourcePermissionDao(RoleResourcePermissionDao roleResourcePermissionDao) { 26 | this.roleResourcePermissionDao = roleResourcePermissionDao; 27 | this.dao = roleResourcePermissionDao; 28 | } 29 | 30 | /** 31 | * 根据角色主键删除角色权限信息 32 | * @param roleId 角色ID 33 | */ 34 | public void deleteByRoleId(Long roleId) { 35 | if (roleId != null) { 36 | roleResourcePermissionDao.deleteByRoleId(roleId); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /teemo/src/main/java/core/exception/SearchException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package core.exception; 7 | 8 | import org.springframework.core.NestedRuntimeException; 9 | 10 | /** 11 | * @author yongjie.teng 12 | * @date 16-11-3 下午2:48 13 | * @email yongjie.teng@foxmail.com 14 | * @package core.exception 15 | */ 16 | public class SearchException extends NestedRuntimeException { 17 | 18 | public SearchException(String msg) { 19 | super(msg); 20 | } 21 | 22 | public SearchException(String msg, Throwable cause) { 23 | super(msg, cause); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /teemo/src/main/java/core/support/CustomDateEditor.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package core.support; 7 | 8 | import java.beans.PropertyEditorSupport; 9 | import java.text.DateFormat; 10 | import java.text.ParseException; 11 | import java.text.SimpleDateFormat; 12 | 13 | /** 14 | * @author yongjie.teng 15 | * @version 1.0 16 | * @date 16-10-28 17 | * @email yongjie.teng@foxmail.com 18 | * @package core.support 19 | * @project teemo 20 | */ 21 | public class CustomDateEditor extends PropertyEditorSupport { 22 | 23 | public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; 24 | public static final String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; 25 | public static final DateFormat[] ACCEPT_DATE_FORMATS = { new SimpleDateFormat(DEFAULT_DATETIME_FORMAT), new SimpleDateFormat(DEFAULT_DATE_FORMAT) }; 26 | 27 | /** 28 | * Parse the Date from the given text, using the specified DateFormat. 29 | */ 30 | 31 | public void setAsText(String text) throws IllegalArgumentException { 32 | if (text == null || text.trim().equals("")) 33 | setValue(null); 34 | for (DateFormat format : ACCEPT_DATE_FORMATS) { 35 | try { 36 | setValue(format.parse(text)); 37 | return; 38 | } catch (ParseException e) { 39 | continue; 40 | } catch (RuntimeException e) { 41 | continue; 42 | } 43 | } 44 | } 45 | 46 | /** 47 | * Format the Date as String, using the specified DateFormat. 48 | */ 49 | 50 | public String getAsText() { 51 | return (String) getValue(); 52 | } 53 | } -------------------------------------------------------------------------------- /teemo/src/main/java/core/support/PageRequest.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package core.support; 7 | 8 | import core.support.page.AbstractPageRequest; 9 | 10 | /** 11 | * 分页条件实现类 12 | * @author yongjie.teng 13 | * @date 16-11-4 下午2:35 14 | * @email yongjie.teng@foxmail.com 15 | * @package core.support 16 | */ 17 | public class PageRequest extends AbstractPageRequest { 18 | private static final long serialVersionUID = 3818454816004846209L; 19 | 20 | public static PageRequest newPageRequest(int page, int size) { 21 | return new PageRequest(page, size); 22 | } 23 | 24 | public static PageRequest newPageRequest(int page, int size, Sort sort) { 25 | return new PageRequest(page, size, sort); 26 | } 27 | 28 | public PageRequest(int page, int size, Sort.Direction direction, String... properties) { 29 | super(page, size, new Sort(direction, properties)); 30 | } 31 | 32 | public PageRequest(int page, int size, Sort sort) { 33 | super(page, size, sort); 34 | } 35 | 36 | public PageRequest(int page, int size) { 37 | super(page, size, null); 38 | } 39 | 40 | @Override 41 | public String toString() { 42 | return "PageRequest{" + 43 | "size=" + getPageSize() + 44 | ", page=" + getPageNumber() + 45 | ", sort=" + getSort() + 46 | '}'; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /teemo/src/main/java/core/support/SearchRequest.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package core.support; 7 | 8 | import core.support.page.Pageable; 9 | import core.support.search.AbstractSearchRequest; 10 | import core.support.search.SearchFilter; 11 | import core.support.search.Searchable; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | * 查询条件实现类,包括过滤条件、分页条件、排序 17 | * @author yongjie.teng 18 | * @date 16-11-3 下午6:51 19 | * @email yongjie.teng@foxmail.com 20 | * @package core.support 21 | */ 22 | public class SearchRequest extends AbstractSearchRequest { 23 | private static final long serialVersionUID = 7126784443721187450L; 24 | 25 | public static SearchRequest newSearchRequest(List filters, Sort sort, Pageable page) { 26 | return new SearchRequest(filters, sort, page); 27 | } 28 | 29 | public static SearchRequest newSearchRequest(Sort sort, Pageable page) { 30 | return new SearchRequest(sort, page); 31 | } 32 | 33 | public static SearchRequest newSearchRequest() { 34 | return new SearchRequest(); 35 | } 36 | 37 | public SearchRequest(List filters, Sort sort, Pageable page) { 38 | super(filters, sort, page); 39 | } 40 | 41 | public SearchRequest(Sort sort, Pageable page) { 42 | this(null, sort, page); 43 | } 44 | 45 | public SearchRequest() { 46 | this(null, null, null); 47 | } 48 | 49 | @Override 50 | public Searchable setPage(int pageNumber, int pageSize) { 51 | return setPage(new PageRequest(pageNumber, pageSize)); 52 | } 53 | 54 | @Override 55 | public String toString() { 56 | return "SearchRequest{" + 57 | "filters=" + getSearchFilters() + 58 | ", page=" + getPage() + 59 | ", sort=" + getSort() + 60 | '}'; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /teemo/src/main/java/core/support/page/Pageable.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package core.support.page; 7 | 8 | import core.support.Sort; 9 | 10 | /** 11 | * 分页条件接口 12 | * @author yongjie.teng 13 | * @date 16-11-3 下午6:00 14 | * @email yongjie.teng@foxmail.com 15 | * @package core.support.page 16 | */ 17 | public interface Pageable { 18 | /** 19 | * 起始页码为0 20 | * @return 当前页码 int 21 | */ 22 | public int getPageNumber(); 23 | 24 | /** 25 | * @return 每页条目大小 int 26 | */ 27 | public int getPageSize(); 28 | 29 | /** 30 | * @return 页码偏移量 31 | */ 32 | public int getOffset(); 33 | 34 | /** 35 | * @return 排序条件 {@link Sort} 36 | */ 37 | public Sort getSort(); 38 | 39 | /** 40 | * 如果当前页是第一页则返回false否则返回true 41 | * @return boolean 42 | */ 43 | public boolean hasPrevious(); 44 | } 45 | -------------------------------------------------------------------------------- /teemo/src/main/java/core/support/repository/EnabledQueryCache.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package core.support.repository; 7 | 8 | import java.lang.annotation.*; 9 | 10 | /** 11 | * 开启查询缓存 12 | * @author yongjie.teng 13 | * @date 17-1-17 上午9:53 14 | * @email yongjie.teng@foxmail.com 15 | * @package core.support.repository 16 | */ 17 | @Target(ElementType.TYPE) 18 | @Retention(RetentionPolicy.RUNTIME) 19 | @Documented 20 | public @interface EnabledQueryCache { 21 | boolean value() default true; 22 | } 23 | -------------------------------------------------------------------------------- /teemo/src/main/java/core/support/search/SearchFilter.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package core.support.search; 7 | 8 | import java.util.Collection; 9 | 10 | /** 11 | * 过滤条件接口 12 | * @author yongjie.teng 13 | * @date 16-11-3 下午3:27 14 | * @email yongjie.teng@foxmail.com 15 | * @package core.support.search 16 | */ 17 | public interface SearchFilter { 18 | /** 19 | * 获取条件连接类型 20 | * @return 条件连接类型 {@link SearchType} 21 | */ 22 | public SearchType getType(); 23 | 24 | /** 25 | * 获取需要过滤的属性名 26 | * @return 属性名 27 | */ 28 | public String getProperty(); 29 | 30 | /** 31 | * 获取操作符 32 | * @return 操作符 33 | */ 34 | public SearchOperator getOperator(); 35 | 36 | /** 37 | * 获取给定的属性值 38 | * @return 属性值 39 | */ 40 | public Object getValue(); 41 | 42 | /** 43 | * 有无子过滤条件,如or (a = 1 and b = 2) 44 | * @return boolean 45 | */ 46 | public boolean hasChildFilter(); 47 | 48 | /** 49 | * 获取子过滤条件 50 | * @return 51 | */ 52 | public Collection getChildFilters(); 53 | } 54 | -------------------------------------------------------------------------------- /teemo/src/main/java/core/support/search/SearchType.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package core.support.search; 7 | 8 | /** 9 | * WHERE过滤条件连接类型 10 | * @author yongjie.teng 11 | * @date 16-11-3 下午4:45 12 | * @email yongjie.teng@foxmail.com 13 | * @package core.support.search 14 | */ 15 | public enum SearchType { 16 | OR("OR连接", "or"), AND("AND连接","and"); 17 | 18 | private final String info; 19 | private final String type; 20 | 21 | SearchType(final String info, String type) { 22 | this.info = info; 23 | this.type = type; 24 | } 25 | 26 | public String getInfo() { 27 | return this.info; 28 | } 29 | 30 | public String getTypeStr() { 31 | return this.type; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /teemo/src/main/java/core/util/EntityUtil.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package core.util; 7 | 8 | import javax.persistence.Table; 9 | 10 | /** 11 | * @author yongjie.teng 12 | * @date 16-10-31 下午5:28 13 | * @email yongjie.teng@foxmail.com 14 | * @package core.util 15 | */ 16 | public class EntityUtil { 17 | /** 18 | * 获取使用JPA注解的实体类所对应的表名 19 | * @param clazz 20 | * @return {@link String} 21 | */ 22 | private static String getTableName(Class clazz) { 23 | Table annotation = (Table)clazz.getAnnotation(Table.class); 24 | if(annotation != null){ 25 | return annotation.name(); 26 | } 27 | return null; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /teemo/src/main/java/core/util/ReflectUtil.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package core.util; 7 | 8 | import java.lang.reflect.ParameterizedType; 9 | import java.lang.reflect.Type; 10 | 11 | /** 12 | * @author yongjie.teng 13 | * @version 1.0 14 | * @date 16-10-28 15 | * @email yongjie.teng@foxmail.com 16 | * @package core.util 17 | * @project teemo 18 | */ 19 | public class ReflectUtil { 20 | /** 21 | * 得到指定类型的泛型实参 22 | * @param clazz 23 | * @param 24 | * @return {@link Class} 25 | */ 26 | public static Class findParameterizedType(Class clazz) { 27 | Type parameterizedType = clazz.getGenericSuperclass(); 28 | //CGLIB subclass target object(泛型在父类上) 29 | if (!(parameterizedType instanceof ParameterizedType)) { 30 | parameterizedType = clazz.getSuperclass().getGenericSuperclass(); 31 | } 32 | if (!(parameterizedType instanceof ParameterizedType)) { 33 | return null; 34 | } 35 | Type[] actualTypeArguments = ((ParameterizedType) parameterizedType).getActualTypeArguments(); 36 | if (actualTypeArguments == null || actualTypeArguments.length == 0) { 37 | return null; 38 | } 39 | return (Class) actualTypeArguments[0]; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /teemo/src/main/java/core/web/controller/BaseController.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016- https://github.com/beiyoufx 3 | * 4 | * Licensed under the GPL-3.0 5 | */ 6 | package core.web.controller; 7 | 8 | import com.alibaba.fastjson.JSON; 9 | import com.alibaba.fastjson.serializer.SerializerFeature; 10 | import core.support.CustomDateEditor; 11 | import org.springframework.web.bind.WebDataBinder; 12 | import org.springframework.web.bind.annotation.InitBinder; 13 | 14 | import javax.servlet.http.HttpServletResponse; 15 | import java.io.IOException; 16 | import java.util.Date; 17 | 18 | /** 19 | * @author yongjie.teng 20 | * @version 1.0 21 | * @date 16-10-27 22 | * @email yongjie.teng@foxmail.com 23 | * @package core.web.controller 24 | * @project teemo 25 | */ 26 | public abstract class BaseController { 27 | @InitBinder 28 | public void initBinder(WebDataBinder binder) { 29 | binder.registerCustomEditor(Date.class, new CustomDateEditor()); 30 | } 31 | protected void writeJSON(HttpServletResponse response, String json) throws IOException { 32 | response.setContentType("application/json;charset=utf-8"); 33 | response.getWriter().write(json); 34 | } 35 | 36 | protected void writeJSON(HttpServletResponse response, Object obj) throws IOException { 37 | response.setContentType("application/json;charset=utf-8"); 38 | response.getWriter().write(JSON.toJSONString(obj, SerializerFeature.WriteMapNullValue)); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /teemo/src/main/resources/applicationContext.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | classpath:messages 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /teemo/src/main/resources/ehcache-hibernate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 15 | 16 | 21 | 22 | 26 | 27 | 35 | 36 | -------------------------------------------------------------------------------- /teemo/src/main/resources/ehcache-teemo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 15 | 16 | 17 | 25 | 26 | -------------------------------------------------------------------------------- /teemo/src/main/resources/jdbc.properties: -------------------------------------------------------------------------------- 1 | ds.maxActive=20 2 | ds.initialSize=1 3 | ds.maxWait=60000 4 | ds.minIdle=10 5 | ds.timeBetweenEvictionRunsMillis=60000 6 | ds.minEvictableIdleTimeMillis=300000 7 | ds.validationQuery=SELECT 'x' 8 | ds.testWhileIdle=true 9 | ds.testOnBorrow=false 10 | ds.testOnReturn=false 11 | ds.poolPreparedStatements=true 12 | ds.maxOpenPreparedStatements=20 13 | 14 | #teemo mysql database setting [Test] 15 | jdbc.type=MySql 16 | jdbc.driverClassName=com.mysql.jdbc.Driver 17 | jdbc.url=jdbc:mysql://218.245.64.180:30272/teemo?useUnicode=true&characterEncoding=utf-8 18 | jdbc.username=root 19 | jdbc.password=cxplay001 20 | 21 | -------------------------------------------------------------------------------- /teemo/src/main/resources/messages.properties: -------------------------------------------------------------------------------- 1 | #错误消息 2 | not.null=* 必须填写 3 | length.not.valid=长度必须在{min}到{max}个字符之间 4 | 5 | 6 | name.must.not.admin=名称中不能出现admin 7 | sample.age.not.valid=年龄必须在1到200之间 8 | birthday.past=出生日期必须是过去时间 9 | 10 | move.not.enough=请点击当前页面的『优化权重』,然后优化权重后重新调整位置。
注意:如果数据量很大,建议在网站使用率的情况执行 11 | 12 | upload.server.error=服务器故障,请稍后重试! 13 | upload.not.allow.extension=上传的文件类型不允许!允许的类型,请参考页面提示。 14 | upload.not.allow.flash.extension=上传的flash类型不允许!
允许的flash类型包括:.swf,.flv格式。 15 | upload.not.allow.media.extension=上传的媒体类型不允许!
允许的媒体类型包括:.swf,.flv,.mp3,.wav,.wma,.wmv,.mid,.avi,.mpg,.asf,.rm,.rmvb格式。 16 | upload.not.allow.image.extension=上传的图片类型不允许!
允许的图片类型包括:图片(.gif,.jpg,.png,.bmp)格式。 17 | upload.exceed.maxSize=上传的文件大小超出限制的文件大小!
允许的文件最大大小是:50MB! 18 | upload.filename.exceed.length=上传的文件名最长100个字符 19 | upload.conflict.error=上传的文件已经存在,默认忽略,如果需覆盖,请选择覆盖模式 20 | 21 | 22 | user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头 23 | user.password.not.valid=* 5-50个字符 24 | user.not.exists=用户不存在 25 | user.password.incorrectness=密码错误 26 | user.blocked=用户已被锁定 27 | user.password.retry.limit.exceed=密码输入错误次数太多,帐户锁定10分钟 28 | user.email.not.valid=邮箱格式错误 29 | user.mobile.phone.number.not.valid=手机号格式错误 30 | user.logout.success=退出成功 31 | user.notfound=请重新登录 32 | user.forcelogout=管理员强制退出,请重新登录 33 | user.unknown.error=未知错误,请重新登录 34 | jcaptcha.validate.error=验证码错误,请重新输入 35 | jcaptcha.validate.success=验证码输入正确 36 | 37 | ##权限 38 | no.permission=您没有数据的权限,请联系管理员添加权限 [{0}] 39 | no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}] 40 | no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}] 41 | no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}] 42 | no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}] 43 | 44 | ##消息 45 | receiver.not.exists=收件人不存在 46 | receiver.not.self=收件人不能是自己 47 | 48 | keyvalue.key.not.valid=键长度必须在{min}到{max}个字符之间 49 | keyvalue.value.not.valid=值长度必须在{min}到{max}个字符之间 50 | 51 | notification.template.not.found=没有找到名字为[{0}]的通知模板 -------------------------------------------------------------------------------- /teemo/src/main/resources/spring-cache.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /teemo/src/main/test/com/teemo/service/TestUserService.java: -------------------------------------------------------------------------------- 1 | package com.teemo.service; 2 | 3 | import com.teemo.entity.User; 4 | import core.util.SpringUtil; 5 | import org.junit.Assert; 6 | import org.junit.BeforeClass; 7 | import org.junit.Test; 8 | import org.springframework.context.support.ClassPathXmlApplicationContext; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * @author yongjie.teng 14 | * @date 16-11-7 下午3:42 15 | * @email yongjie.teng@foxmail.com 16 | * @package com.teemo.service 17 | */ 18 | public class TestUserService { 19 | private static UserService userService; 20 | @BeforeClass 21 | public static void before() { 22 | SpringUtil.ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 23 | userService = SpringUtil.getBean("userService"); 24 | } 25 | 26 | @Test 27 | public void testGet() { 28 | User user = userService.get(1L); 29 | System.out.println(user); 30 | User user2 = userService.get(1L); 31 | System.out.println(user2); 32 | } 33 | 34 | @Test 35 | public void testGetByEmail() { 36 | String email = "mayun@alibaba.com"; 37 | User user1 = userService.getByEmail(email); 38 | System.out.println(user1); 39 | User user2 = userService.getByEmail(email); 40 | System.out.println(user2); 41 | } 42 | 43 | @Test 44 | public void testGetByMobilePhone() { 45 | String mobilePhone = "123"; 46 | User user = userService.getByMobilePhone(mobilePhone); 47 | 48 | Assert.assertNotNull(user); 49 | } 50 | 51 | @Test 52 | public void testFind() { 53 | String mobilePhone = "18311113333"; 54 | List users = userService.find("mobilePhone", mobilePhone); 55 | System.out.println(users); 56 | List users2 = userService.find("mobilePhone", mobilePhone); 57 | System.out.println(users2); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/WEB-INF/page/core.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | User: yongjie.teng 3 | Date: 16-11-15 4 | Time: 下午5:32 5 | 主要用来定义和引用一些通用的数据 6 | --%> 7 | <%@ page import="com.teemo.core.util.DPUtil" %> 8 | <%@ page import="com.teemo.core.Constants" %> 9 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 10 | <% 11 | String staticPath = DPUtil.getDynamicProperty(Constants.DP_STATIC_PATH); 12 | staticPath = staticPath != null ? staticPath : request.getContextPath(); 13 | request.setAttribute("staticPath", staticPath); 14 | %> 15 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/WEB-INF/page/error/50x.jsp: -------------------------------------------------------------------------------- 1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 3 | 4 | 5 | 6 | 7 | 8 | 9 | Teemo后台 - 500 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |

20 |

500

21 |

服务器繁忙

22 | 23 |
24 | 服务器暂时不可用,请稍后重试... 25 |
26 |
27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/WEB-INF/page/error/notfound.jsp: -------------------------------------------------------------------------------- 1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 3 | 4 | 5 | 6 | 7 | 8 | 9 | Teemo后台 - 404 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |

404

21 |

页面不存在

22 | 23 |
24 | 您访问的页面不存在... 25 |
您可以返回主页看看 26 |
主页 27 |
28 |
29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/WEB-INF/page/error/unauthorized.jsp: -------------------------------------------------------------------------------- 1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 3 | 4 | 5 | 6 | 7 | 8 | 9 | Teemo后台 - 401 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |

401

21 |

未授权

22 | 23 |
24 | 您还没有权限访问该页面,请联系管理员... 25 |
您可以返回主页看看 26 |
主页 27 |
28 |
29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/index.jsp: -------------------------------------------------------------------------------- 1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 | 3 | 4 | Teemo 5 | 6 | 7 |

hello world!

8 | 9 | 10 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/patterns/header-profile-skin-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/patterns/header-profile-skin-1.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/patterns/header-profile-skin-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/patterns/header-profile-skin-3.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/patterns/header-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/patterns/header-profile.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/patterns/shattered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/patterns/shattered.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/blueimp/css/blueimp-gallery-indicator.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | /* 3 | * blueimp Gallery Indicator CSS 1.1.0 4 | * https://github.com/blueimp/Gallery 5 | * 6 | * Copyright 2013, Sebastian Tschan 7 | * https://blueimp.net 8 | * 9 | * Licensed under the MIT license: 10 | * http://www.opensource.org/licenses/MIT 11 | */ 12 | 13 | .blueimp-gallery > .indicator { 14 | position: absolute; 15 | top: auto; 16 | right: 15px; 17 | bottom: 15px; 18 | left: 15px; 19 | margin: 0 40px; 20 | padding: 0; 21 | list-style: none; 22 | text-align: center; 23 | line-height: 10px; 24 | display: none; 25 | } 26 | .blueimp-gallery > .indicator > li { 27 | display: inline-block; 28 | width: 9px; 29 | height: 9px; 30 | margin: 6px 3px 0 3px; 31 | -webkit-box-sizing: content-box; 32 | -moz-box-sizing: content-box; 33 | box-sizing: content-box; 34 | border: 1px solid transparent; 35 | background: #ccc; 36 | background: rgba(255, 255, 255, 0.25) center no-repeat; 37 | border-radius: 5px; 38 | box-shadow: 0 0 2px #000; 39 | opacity: 0.5; 40 | cursor: pointer; 41 | } 42 | .blueimp-gallery > .indicator > li:hover, 43 | .blueimp-gallery > .indicator > .active { 44 | background-color: #fff; 45 | border-color: #fff; 46 | opacity: 1; 47 | } 48 | .blueimp-gallery-controls > .indicator { 49 | display: block; 50 | /* Fix z-index issues (controls behind slide element) on Android: */ 51 | -webkit-transform: translateZ(0); 52 | -moz-transform: translateZ(0); 53 | -ms-transform: translateZ(0); 54 | -o-transform: translateZ(0); 55 | transform: translateZ(0); 56 | } 57 | .blueimp-gallery-single > .indicator { 58 | display: none; 59 | } 60 | .blueimp-gallery > .indicator { 61 | -webkit-user-select: none; 62 | -khtml-user-select: none; 63 | -moz-user-select: none; 64 | -ms-user-select: none; 65 | user-select: none; 66 | } 67 | 68 | /* IE7 fixes */ 69 | *+html .blueimp-gallery > .indicator > li { 70 | display: inline; 71 | } 72 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/blueimp/css/demo.css: -------------------------------------------------------------------------------- 1 | /* 2 | * blueimp Gallery Demo CSS 2.0.0 3 | * https://github.com/blueimp/Gallery 4 | * 5 | * Copyright 2013, Sebastian Tschan 6 | * https://blueimp.net 7 | * 8 | * Licensed under the MIT license: 9 | * http://www.opensource.org/licenses/MIT 10 | */ 11 | 12 | body { 13 | max-width: 750px; 14 | margin: 0 auto; 15 | padding: 1em; 16 | font-family: 'Lucida Grande', 'Lucida Sans Unicode', Arial, sans-serif; 17 | font-size: 1em; 18 | line-height: 1.4em; 19 | background: #222; 20 | color: #fff; 21 | -webkit-text-size-adjust: 100%; 22 | -ms-text-size-adjust: 100%; 23 | } 24 | a { 25 | color: orange; 26 | text-decoration: none; 27 | } 28 | img { 29 | border: 0; 30 | vertical-align: middle; 31 | } 32 | h1 { 33 | line-height: 1em; 34 | } 35 | h2, 36 | .links { 37 | text-align: center; 38 | } 39 | 40 | @media (min-width: 481px) { 41 | .navigation { 42 | list-style: none; 43 | padding: 0; 44 | } 45 | .navigation li { 46 | display: inline-block; 47 | } 48 | .navigation li:not(:first-child):before { 49 | content: '| '; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/blueimp/img/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/blueimp/img/error.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/blueimp/img/error.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/blueimp/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/blueimp/img/loading.gif -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/blueimp/img/play-pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/blueimp/img/play-pause.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/blueimp/img/play-pause.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/blueimp/img/video-play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/blueimp/img/video-play.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/blueimp/img/video-play.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/chosen/chosen-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/chosen/chosen-sprite.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/chosen/chosen-sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/chosen/chosen-sprite@2x.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/colorpicker/img/bootstrap-colorpicker/alpha-horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/colorpicker/img/bootstrap-colorpicker/alpha-horizontal.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/colorpicker/img/bootstrap-colorpicker/alpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/colorpicker/img/bootstrap-colorpicker/alpha.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/colorpicker/img/bootstrap-colorpicker/hue-horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/colorpicker/img/bootstrap-colorpicker/hue-horizontal.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/colorpicker/img/bootstrap-colorpicker/hue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/colorpicker/img/bootstrap-colorpicker/hue.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/colorpicker/img/bootstrap-colorpicker/saturation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/colorpicker/img/bootstrap-colorpicker/saturation.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/duallistbox/bootstrap-duallistbox.css: -------------------------------------------------------------------------------- 1 | .bootstrap-duallistbox-container .buttons { 2 | width:calc(100% + 1px); 3 | margin-bottom: -6px; 4 | box-sizing: border-box; 5 | } 6 | 7 | .bootstrap-duallistbox-container label { 8 | display: block; 9 | } 10 | 11 | .bootstrap-duallistbox-container .info { 12 | display: inline-block; 13 | margin-bottom: 5px; 14 | } 15 | 16 | .bootstrap-duallistbox-container .clear1, 17 | .bootstrap-duallistbox-container .clear2 { 18 | display: none; 19 | font-size: 10px; 20 | } 21 | 22 | .bootstrap-duallistbox-container .box1.filtered .clear1, 23 | .bootstrap-duallistbox-container .box2.filtered .clear2 { 24 | display: inline-block; 25 | } 26 | 27 | .bootstrap-duallistbox-container .move, 28 | .bootstrap-duallistbox-container .remove { 29 | width: 50%;box-sizing: border-box; 30 | } 31 | 32 | .bootstrap-duallistbox-container .btn-group .btn { 33 | border-bottom-left-radius: 0; 34 | border-bottom-right-radius: 0; 35 | } 36 | .bootstrap-duallistbox-container select { 37 | border-top-left-radius: 0; 38 | border-top-right-radius: 0; 39 | } 40 | 41 | .bootstrap-duallistbox-container .moveall, 42 | .bootstrap-duallistbox-container .removeall { 43 | width: 50%;box-sizing: border-box; 44 | } 45 | 46 | .bootstrap-duallistbox-container.bs2compatible .btn-group > .btn + .btn { 47 | margin-left: 0; 48 | } 49 | 50 | .bootstrap-duallistbox-container select { 51 | height: 300px; 52 | box-sizing: border-box; 53 | } 54 | .bootstrap-duallistbox-container select:focus{ 55 | border-color: #e5e6e7!important; 56 | } 57 | 58 | .bootstrap-duallistbox-container .filter { 59 | display: inline-block; 60 | width: 100%; 61 | height: 31px;margin-bottom:-1px; 62 | -webkit-box-sizing: border-box; 63 | -moz-box-sizing: border-box; 64 | } 65 | 66 | .bootstrap-duallistbox-container .filter.placeholder { 67 | color: #aaa; 68 | } 69 | 70 | .bootstrap-duallistbox-container.moveonselect .move, 71 | .bootstrap-duallistbox-container.moveonselect .remove { 72 | display:none; 73 | } 74 | 75 | .bootstrap-duallistbox-container.moveonselect .moveall, 76 | .bootstrap-duallistbox-container.moveonselect .removeall { 77 | width: 100%; 78 | } 79 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/footable/fonts/footable.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/footable/fonts/footable.eot -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/footable/fonts/footable.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/footable/fonts/footable.ttf -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/footable/fonts/footable.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/footable/fonts/footable.woff -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/fullcalendar/fullcalendar.print.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * FullCalendar v1.6.4 Print Stylesheet 3 | * Docs & License: http://arshaw.com/fullcalendar/ 4 | * (c) 2013 Adam Shaw 5 | */ 6 | 7 | /* 8 | * Include this stylesheet on your page to get a more printer-friendly calendar. 9 | * When including this stylesheet, use the media='print' attribute of the tag. 10 | * Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css. 11 | */ 12 | 13 | 14 | /* Events 15 | -----------------------------------------------------*/ 16 | 17 | .fc-event { 18 | background: #fff !important; 19 | color: #000 !important; 20 | } 21 | 22 | /* for vertical events */ 23 | 24 | .fc-event-bg { 25 | display: none !important; 26 | } 27 | 28 | .fc-event .ui-resizable-handle { 29 | display: none !important; 30 | } 31 | 32 | 33 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/iCheck/custom.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 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_square-green, 54 | .iradio_square-green { 55 | background-image: url(green@2x.png); 56 | -webkit-background-size: 240px 24px; 57 | background-size: 240px 24px; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/iCheck/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/iCheck/green.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/iCheck/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/iCheck/green@2x.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/images/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/images/sort_asc.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/images/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/images/sort_desc.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/images/sprite-skin-flat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/images/sprite-skin-flat.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/images/spritemap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/images/spritemap.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/images/spritemap@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/images/spritemap@2x.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/ionRangeSlider/ion.rangeSlider.skinFlat.css: -------------------------------------------------------------------------------- 1 | /* Ion.RangeSlider, Flat UI Skin 2 | // css version 1.8.5 3 | // by Denis Ineshin | ionden.com 4 | // ===================================================================================================================*/ 5 | 6 | /* ===================================================================================================================== 7 | // Skin details */ 8 | 9 | .irs-line-mid, 10 | .irs-line-left, 11 | .irs-line-right, 12 | .irs-diapason, 13 | .irs-slider { 14 | background: url(../images/sprite-skin-flat.png) repeat-x; 15 | } 16 | 17 | .irs { 18 | height: 40px; 19 | } 20 | .irs-with-grid { 21 | height: 60px; 22 | } 23 | .irs-line { 24 | height: 12px; top: 25px; 25 | } 26 | .irs-line-left { 27 | height: 12px; 28 | background-position: 0 -30px; 29 | } 30 | .irs-line-mid { 31 | height: 12px; 32 | background-position: 0 0; 33 | } 34 | .irs-line-right { 35 | height: 12px; 36 | background-position: 100% -30px; 37 | } 38 | 39 | .irs-diapason { 40 | height: 12px; top: 25px; 41 | background-position: 0 -60px; 42 | } 43 | 44 | .irs-slider { 45 | width: 16px; height: 18px; 46 | top: 22px; 47 | background-position: 0 -90px; 48 | } 49 | #irs-active-slider, .irs-slider:hover { 50 | background-position: 0 -120px; 51 | } 52 | 53 | .irs-min, .irs-max { 54 | color: #999; 55 | font-size: 10px; line-height: 1.333; 56 | text-shadow: none; 57 | top: 0; padding: 1px 3px; 58 | background: #e1e4e9; 59 | border-radius: 4px; 60 | } 61 | 62 | .irs-from, .irs-to, .irs-single { 63 | color: #fff; 64 | font-size: 10px; line-height: 1.333; 65 | text-shadow: none; 66 | padding: 1px 5px; 67 | background: #ed5565; 68 | border-radius: 4px; 69 | } 70 | .irs-from:after, .irs-to:after, .irs-single:after { 71 | position: absolute; display: block; content: ""; 72 | bottom: -6px; left: 50%; 73 | width: 0; height: 0; 74 | margin-left: -3px; 75 | overflow: hidden; 76 | border: 3px solid transparent; 77 | border-top-color: #ed5565; 78 | } 79 | 80 | 81 | .irs-grid-pol { 82 | background: #e1e4e9; 83 | } 84 | .irs-grid-text { 85 | color: #999; 86 | } 87 | 88 | .irs-disabled { 89 | } 90 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/jQueryUI/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/jQueryUI/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/jQueryUI/images/ui-bg_flat_75_ffffff_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/jQueryUI/images/ui-bg_flat_75_ffffff_40x100.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/jQueryUI/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/jQueryUI/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/jQueryUI/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/jQueryUI/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/jQueryUI/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/jQueryUI/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/jsTree/32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/jsTree/32px.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/jsTree/throbber.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/css/plugins/jsTree/throbber.gif -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/morris/morris-0.4.3.min.css: -------------------------------------------------------------------------------- 1 | .morris-hover{position:absolute;z-index:1000;}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255, 255, 255, 0.8);border:solid 2px rgba(230, 230, 230, 0.8);font-family:sans-serif;font-size:12px;text-align:center;}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0;} 2 | .morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0;} 3 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/multiselect/bootstrap-multiselect.css: -------------------------------------------------------------------------------- 1 | .multiselect-container{position:absolute;list-style-type:none;margin:0;padding:0}.multiselect-container .input-group{margin:5px}.multiselect-container>li{padding:0}.multiselect-container>li>a.multiselect-all label{font-weight:700}.multiselect-container>li.multiselect-group label{margin:0;padding:3px 20px 3px 20px;height:100%;font-weight:700}.multiselect-container>li.multiselect-group-clickable label{cursor:pointer}.multiselect-container>li>a{padding:0}.multiselect-container>li>a>label{margin:0;height:100%;cursor:pointer;font-weight:400;padding:3px 20px 3px 40px}.multiselect-container>li>a>label.radio,.multiselect-container>li>a>label.checkbox{margin:0}.multiselect-container>li>a>label>input[type=checkbox]{margin-bottom:5px}.btn-group>.btn-group:nth-child(2)>.multiselect.btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.form-inline .multiselect-container label.checkbox,.form-inline .multiselect-container label.radio{padding:3px 20px 3px 40px}.form-inline .multiselect-container li a label.checkbox input[type=checkbox],.form-inline .multiselect-container li a label.radio input[type=radio]{margin-left:-20px;margin-right:0} 2 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/switchery/switchery.css: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Main stylesheet for Switchery. 4 | * http://abpetkov.github.io/switchery/ 5 | * 6 | */ 7 | 8 | .switchery { 9 | background-color: #fff; 10 | border: 1px solid #dfdfdf; 11 | border-radius: 20px; 12 | cursor: pointer; 13 | display: inline-block; 14 | height: 30px; 15 | position: relative; 16 | vertical-align: middle; 17 | width: 50px; 18 | 19 | -webkit-box-sizing: content-box; 20 | -moz-box-sizing: content-box; 21 | box-sizing: content-box; 22 | } 23 | 24 | .switchery > small { 25 | background: #fff; 26 | border-radius: 100%; 27 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); 28 | height: 30px; 29 | position: absolute; 30 | top: 0; 31 | width: 30px; 32 | } 33 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/treeview/bootstrap-treeview.css: -------------------------------------------------------------------------------- 1 | /* ========================================================= 2 | * bootstrap-treeview.css v1.0.0 3 | * ========================================================= 4 | * Copyright 2013 Jonathan Miles 5 | * Project URL : http://www.jondmiles.com/bootstrap-treeview 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ========================================================= */ 19 | 20 | .list-group-item { 21 | cursor: pointer; 22 | } 23 | 24 | /*.list-group-item:hover { 25 | background-color: #f5f5f5; 26 | }*/ 27 | 28 | span.indent { 29 | margin-left: 10px; 30 | margin-right: 10px; 31 | } 32 | 33 | span.icon { 34 | margin-right: 5px; 35 | } 36 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/css/plugins/webuploader/webuploader.css: -------------------------------------------------------------------------------- 1 | .webuploader-container { 2 | position: relative; 3 | } 4 | .webuploader-element-invisible { 5 | position: absolute !important; 6 | clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ 7 | clip: rect(1px,1px,1px,1px); 8 | } 9 | .webuploader-pick { 10 | position: relative; 11 | display: inline-block; 12 | cursor: pointer; 13 | background: #00b7ee; 14 | padding: 10px 15px; 15 | color: #fff; 16 | text-align: center; 17 | border-radius: 3px; 18 | overflow: hidden; 19 | } 20 | .webuploader-pick-hover { 21 | background: #00a2d4; 22 | } 23 | 24 | .webuploader-pick-disable { 25 | opacity: 0.6; 26 | pointer-events:none; 27 | } 28 | 29 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/favicon.ico -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/favicon1.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/favicon1.ico -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/a1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/a1.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/a2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/a2.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/a3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/a3.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/a4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/a4.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/a5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/a5.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/a6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/a6.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/a7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/a7.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/a8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/a8.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/a9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/a9.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/bg.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/browser.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/browser.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/browser.psd -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/iconfont-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/iconfont-logo.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/icons.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/index.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/index.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/index_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/index_4.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/loading-upload.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/loading-upload.gif -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/locked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/locked.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/login-background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/login-background.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/p1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/p1.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/p2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/p2.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/p3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/p3.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/p_big1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/p_big1.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/p_big2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/p_big2.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/p_big3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/p_big3.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/pay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/pay.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/profile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/profile.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/profile_big.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/profile_big.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/profile_girl.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/profile_girl.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/profile_small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/profile_small.jpg -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/progress.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/qr_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/qr_code.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/sprite-skin-flat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/sprite-skin-flat.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/success.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/user.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/webuploader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/webuploader.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/img/wenku_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/img/wenku_logo.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/admin/common.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by yongjie.teng on 16-12-15. 3 | */ 4 | function closeCurrentFrame() { 5 | var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引 6 | parent.layer.close(index); //再执行关闭 7 | } 8 | 9 | $().ready(function () { 10 | // check box样式 11 | $('.i-checks').iCheck({ 12 | checkboxClass: 'icheckbox_square-green', 13 | radioClass: 'iradio_square-green' 14 | }); 15 | 16 | $("#cancelButton").bind("click", function() { 17 | closeCurrentFrame(); 18 | }); 19 | }) -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/admin/table.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by yongjie.teng on 16-12-08. 3 | */ 4 | function getContextPath() { 5 | var pathName = document.location.pathname; 6 | var index = pathName.substr(1).indexOf("/"); 7 | var result = pathName.substr(0, index + 1); 8 | return result; 9 | } 10 | 11 | // 初始化表格,需要先定义tableModel 12 | (function() { 13 | tableModel.table.bootstrapTable({ 14 | url: tableModel.url, 15 | responseHandler: function (res) { 16 | return {rows : res.records, total: res.total}; 17 | }, 18 | cache: true, 19 | pagination: true, 20 | sidePagination: "server", 21 | queryParamsType: "", 22 | pageNumber: 1, 23 | pageSize: 5, 24 | pageList: [5, 10, 20, 50], 25 | search: true, 26 | striped: true, 27 | showRefresh: true, 28 | showToggle: true, 29 | showColumns: true, 30 | clickToSelect: true, 31 | uniqueId: "id", 32 | icons: { 33 | refresh: 'glyphicon-repeat', 34 | toggle: 'glyphicon-list-alt', 35 | columns: 'glyphicon-list' 36 | } 37 | }); 38 | })(); 39 | 40 | function commonDelete(id) { 41 | //询问框 42 | parent.layer.confirm('删除之后不可恢复,您确定要删除吗?', { 43 | icon: 0, 44 | title: '提示', 45 | btn: ['删除','取消'], //按钮 46 | btnAlign: 'c', 47 | shadeClose: true, 48 | shade: [0.8, '#000'] //显示遮罩 49 | }, function(){ 50 | $.ajax({ 51 | url : tableModel.deleteUrl + "/" + id, 52 | type : "post", 53 | async : false, 54 | success : function(response) { 55 | if (response.code == 1) { 56 | parent.layer.msg(response.message, {icon: 1}); 57 | tableModel.table.bootstrapTable("removeByUniqueId", id); 58 | } else { 59 | parent.layer.msg(response.message, {icon: 2}); 60 | } 61 | }, 62 | error : function() { 63 | parent.layer.msg("删除失败", {icon: 2}); 64 | } 65 | }); 66 | }); 67 | } -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/admin/validate.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by yongjie.teng on 16-12-15. 3 | */ 4 | /** 5 | * 只允许数字、字母、下划线的验证 6 | */ 7 | $.validator.addMethod("alnumunderline", function(value, element){ 8 | return this.optional(element) ||/^[a-zA-Z0-9/_]+$/.test(value); 9 | }, "只能包括英文字母、数字和下划线"); 10 | 11 | /** 12 | * 只允许数字、字母的验证 13 | */ 14 | $.validator.addMethod("alnum", function(value, element){ 15 | return this.optional(element) ||/^[a-zA-Z0-9]+$/.test(value); 16 | }, "只能包括英文字母和数字"); 17 | 18 | /** 19 | * 手机号码验证 20 | */ 21 | jQuery.validator.addMethod("mobile", function(value, element) { 22 | var length = value.length; 23 | var mobile = /^(13[0-9]{9})|(18[0-9]{9})|(14[0-9]{9})|(17[0-9]{9})|(15[0-9]{9})$/; 24 | return this.optional(element) || (length == 11 && mobile.test(value)); 25 | }, "请填写正确的手机号码"); -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/content.js: -------------------------------------------------------------------------------- 1 | var $parentNode = window.parent.document; 2 | 3 | function $childNode(name) { 4 | return window.frames[name] 5 | } 6 | 7 | // tooltips 8 | $('.tooltip-demo').tooltip({ 9 | selector: "[data-toggle=tooltip]", 10 | container: "body" 11 | }); 12 | 13 | // 使用animation.css修改Bootstrap Modal 14 | $('.modal').appendTo("body"); 15 | 16 | $("[data-toggle=popover]").popover(); 17 | 18 | //折叠ibox 19 | $('.collapse-link').click(function () { 20 | var ibox = $(this).closest('div.ibox'); 21 | var button = $(this).find('i'); 22 | var content = ibox.find('div.ibox-content'); 23 | content.slideToggle(200); 24 | button.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down'); 25 | ibox.toggleClass('').toggleClass('border-bottom'); 26 | setTimeout(function () { 27 | ibox.resize(); 28 | ibox.find('[id^=map-]').resize(); 29 | }, 50); 30 | }); 31 | 32 | //关闭ibox 33 | $('.close-link').click(function () { 34 | var content = $(this).closest('div.ibox'); 35 | content.remove(); 36 | }); 37 | 38 | //判断当前页面是否在iframe中 39 | if (top == this) { 40 | var gohome = '
'; 41 | $('body').append(gohome); 42 | } 43 | 44 | //animation.css 45 | function animationHover(element, animation) { 46 | element = $(element); 47 | element.hover( 48 | function () { 49 | element.addClass('animated ' + animation); 50 | }, 51 | function () { 52 | //动画完成之前移除class 53 | window.setTimeout(function () { 54 | element.removeClass('animated ' + animation); 55 | }, 2000); 56 | }); 57 | } 58 | 59 | //拖动面板 60 | function WinMove() { 61 | var element = "[class*=col]"; 62 | var handle = ".ibox-title"; 63 | var connect = "[class*=col]"; 64 | $(element).sortable({ 65 | handle: handle, 66 | connectWith: connect, 67 | tolerance: 'pointer', 68 | forcePlaceholderSize: true, 69 | opacity: 0.8 70 | }) 71 | .disableSelection(); 72 | }; 73 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/demo/bootstrap_table_test2.json: -------------------------------------------------------------------------------- 1 | 2 | [ 3 | { 4 | "name": "asSelect", 5 | "star": 777, 6 | "license": "MIT", 7 | "description": "A jQuery plugin to select multiple elements with checkboxes and radio:)", 8 | "url": "https://github.com/amazingSurger/jquery-asSelect" 9 | }, 10 | { 11 | "name": "Bootstrap Table", 12 | "star": 778, 13 | "license": "MIT & XXX", 14 | "description": "Bootstrap table displays data in a tabular format and offers rich support to radio, checkbox, sort, pagination and so on. ", 15 | "url": "https://github.com/wenzhixin/bootstrap-table" 16 | }, 17 | { 18 | "name": "asDatepicker", 19 | "star": 779, 20 | "license": "MIT", 21 | "description": "A jQuery datepicker plugin for best .", 22 | "url": "https://github.com/amazingSurger/jquery-asDatepicker" 23 | }, 24 | { 25 | "name": "asColorpicker", 26 | "star": 780, 27 | "license": "MIT", 28 | "description": "A jQuery colorpicker for best .", 29 | "url": "https://github.com/amazingSurger/jquery-asColorpicker" 30 | } 31 | ] 32 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/demo/peity-demo.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | $("span.pie").peity("pie", { 3 | fill: ['#1ab394', '#d7d7d7', '#ffffff'] 4 | }) 5 | 6 | $(".line").peity("line",{ 7 | fill: '#1ab394', 8 | stroke:'#169c81', 9 | }) 10 | 11 | $(".bar").peity("bar", { 12 | fill: ["#1ab394", "#d7d7d7"] 13 | }) 14 | 15 | $(".bar_dashboard").peity("bar", { 16 | fill: ["#1ab394", "#d7d7d7"], 17 | width:100 18 | }) 19 | 20 | var updatingChart = $(".updating-chart").peity("line", { fill: '#1ab394',stroke:'#169c81', width: 64 }) 21 | 22 | setInterval(function() { 23 | var random = Math.round(Math.random() * 10) 24 | var values = updatingChart.text().split(",") 25 | values.shift() 26 | values.push(random) 27 | 28 | updatingChart 29 | .text(values.join(",")) 30 | .change() 31 | }, 1000); 32 | 33 | }); 34 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/demo/photos.json: -------------------------------------------------------------------------------- 1 | { 2 | "status": 1, 3 | "msg": "", 4 | "title": "JSON请求的相册", 5 | "id": 8, 6 | "start": 0, 7 | "data": [ 8 | { 9 | "name": "越来越喜欢观察微小的事物", 10 | "pid": 109, 11 | "src": "http://f8.topitme.com/8/99/b0/1100251118d0cb0998l.jpg", 12 | "thumb": "http://f8.topitme.com/8/99/b0/1100251118d0cb0998l.jpg", 13 | "area": [ 14 | 510, 15 | 287 16 | ] 17 | }, 18 | { 19 | "name": "决定,意味着对与错的并存", 20 | "pid": 110, 21 | "src": "http://t.williamgates.net/image-9A50_54058FA3.jpg", 22 | "thumb": "http://t.williamgates.net/image-9A50_54058FA3.jpg", 23 | "area": [ 24 | 690, 25 | 431 26 | ] 27 | }, 28 | { 29 | "name": "给人姐姐般温暖的的邻家女孩", 30 | "pid": 111, 31 | "src": "http://t.williamgates.net/image-E9BF_54058FA3.jpg", 32 | "thumb": "http://t.williamgates.net/image-E9BF_54058FA3.jpg", 33 | "area": [ 34 | 690, 35 | 431 36 | ] 37 | } 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/demo/sparkline-demo.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | $("#sparkline1").sparkline([34, 43, 43, 35, 44, 32, 44, 52, 25], { 3 | type: 'line', 4 | lineColor: '#17997f', 5 | fillColor: '#1ab394', 6 | }); 7 | $("#sparkline2").sparkline([5, 6, 7, 2, 0, -4, -2, 4], { 8 | type: 'bar', 9 | barColor: '#1ab394', 10 | negBarColor: '#c6c6c6'}); 11 | 12 | $("#sparkline3").sparkline([1, 1, 2], { 13 | type: 'pie', 14 | sliceColors: ['#1ab394', '#b3b3b3', '#e4f0fb']}); 15 | 16 | $("#sparkline4").sparkline([34, 43, 43, 35, 44, 32, 15, 22, 46, 33, 86, 54, 73, 53, 12, 53, 23, 65, 23, 63, 53, 42, 34, 56, 76, 15, 54, 23, 44], { 17 | type: 'line', 18 | lineColor: '#17997f', 19 | fillColor: '#ffffff', 20 | }); 21 | 22 | $("#sparkline5").sparkline([1, 1, 0, 1, -1, -1, 1, -1, 0, 0, 1, 1], { 23 | type: 'tristate', 24 | posBarColor: '#1ab394', 25 | negBarColor: '#bfbfbf'}); 26 | 27 | 28 | $("#sparkline6").sparkline([4, 6, 7, 7, 4, 3, 2, 1, 4, 4, 5, 6, 3, 4, 5, 8, 7, 6, 9, 3, 2, 4, 1, 5, 6, 4, 3, 7, ], { 29 | type: 'discrete', 30 | lineColor: '#1ab394'}); 31 | 32 | $("#sparkline7").sparkline([52, 12, 44], { 33 | type: 'pie', 34 | height: '150px', 35 | sliceColors: ['#1ab394', '#b3b3b3', '#e4f0fb']}); 36 | 37 | $("#sparkline8").sparkline([5, 6, 7, 2, 0, 4, 2, 4, 5, 7, 2, 4, 12, 14, 4, 2, 14, 12, 7], { 38 | type: 'bar', 39 | barWidth: 8, 40 | height: '150px', 41 | barColor: '#1ab394', 42 | negBarColor: '#c6c6c6'}); 43 | 44 | $("#sparkline9").sparkline([34, 43, 43, 35, 44, 32, 15, 22, 46, 33, 86, 54, 73, 53, 12, 53, 23, 65, 23, 63, 53, 42, 34, 56, 76, 15, 54, 23, 44], { 45 | type: 'line', 46 | lineWidth: 1, 47 | height: '150px', 48 | lineColor: '#17997f', 49 | fillColor: '#ffffff', 50 | }); 51 | }); 52 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/demo/table_base.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "Tid": "1", 3 | "First": "奔波儿灞", 4 | "sex": "男", 5 | "Score": "50" 6 | }, { 7 | "Tid": "2", 8 | "First": "灞波儿奔", 9 | "sex": "男", 10 | "Score": "94" 11 | }, { 12 | "Tid": "3", 13 | "First": "作家崔成浩", 14 | "sex": "男", 15 | "Score": "80" 16 | }, { 17 | "Tid": "4", 18 | "First": "韩寒", 19 | "sex": "男", 20 | "Score": "67" 21 | }, { 22 | "Tid": "5", 23 | "First": "郭敬明", 24 | "sex": "男", 25 | "Score": "100" 26 | }, { 27 | "Tid": "6", 28 | "First": "马云", 29 | "sex": "男", 30 | "Score": "77" 31 | }, { 32 | "Tid": "7", 33 | "First": "范爷", 34 | "sex": "女", 35 | "Score": "87" 36 | }] 37 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * bootstrap-table - v1.9.0 - 2015-09-30 3 | * https://github.com/wenzhixin/bootstrap-table 4 | * Copyright (c) 2015 zhixin wen 5 | * Licensed MIT License 6 | */ 7 | !function(a){"use strict";var b=function(b,c){b.options.columnsHidden.length>0&&a.each(b.columns,function(d,e){-1!==b.options.columnsHidden.indexOf(e.field)&&e.visible!==c&&b.toggleColumn(a.fn.bootstrapTable.utils.getFieldIndex(b.columns,e.field),c,!0)})},c=function(a){(a.options.height||a.options.showFooter)&&setTimeout(a.resetView,1)},d=function(a,b,d){a.options.minHeight?b<=a.options.minWidth&&d<=a.options.minHeight?e(a):b>a.options.minWidth&&d>a.options.minHeight&&f(a):b<=a.options.minWidth?e(a):b>a.options.minWidth&&f(a),c(a)},e=function(a){g(a,!1),b(a,!1)},f=function(a){g(a,!0),b(a,!0)},g=function(a,b){a.options.cardView=b,a.toggleView()},h=function(a,b){var c;return function(){var d=this,e=arguments,f=function(){c=null,a.apply(d,e)};clearTimeout(c),c=setTimeout(f,b)}};a.extend(a.fn.bootstrapTable.defaults,{mobileResponsive:!1,minWidth:562,minHeight:void 0,heightThreshold:100,checkOnInit:!0,columnsHidden:[]});var i=a.fn.bootstrapTable.Constructor,j=i.prototype.init;i.prototype.init=function(){if(j.apply(this,Array.prototype.slice.apply(arguments)),this.options.mobileResponsive&&this.options.minWidth){var b=this,c={width:a(window).width(),height:a(window).height()};if(a(window).on("resize orientationchange",h(function(){var e=a(this).height(),f=a(this).width();(Math.abs(c.height-e)>b.options.heightThreshold||c.width!=f)&&(d(b,f,e),c={width:f,height:e})},200)),this.options.checkOnInit){var e=a(window).height(),f=a(window).width();d(this,f,e),c={width:f,height:e}}}}}(jQuery); 8 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bootstrap Table Chinese translation 3 | * Author: Zhixin Wen 4 | */ 5 | (function ($) { 6 | 'use strict'; 7 | 8 | $.fn.bootstrapTable.locales['zh-CN'] = { 9 | formatLoadingMessage: function () { 10 | return '正在努力地加载数据中,请稍候……'; 11 | }, 12 | formatRecordsPerPage: function (pageNumber) { 13 | return '每页显示 ' + pageNumber + ' 条记录'; 14 | }, 15 | formatShowingRows: function (pageFrom, pageTo, totalRows) { 16 | return '显示第 ' + pageFrom + ' 到第 ' + pageTo + ' 条记录,总共 ' + totalRows + ' 条记录'; 17 | }, 18 | formatSearch: function () { 19 | return '搜索'; 20 | }, 21 | formatNoMatches: function () { 22 | return '没有找到匹配的记录'; 23 | }, 24 | formatPaginationSwitch: function () { 25 | return '隐藏/显示分页'; 26 | }, 27 | formatRefresh: function () { 28 | return '刷新'; 29 | }, 30 | formatToggle: function () { 31 | return '切换'; 32 | }, 33 | formatColumns: function () { 34 | return '列'; 35 | } 36 | }; 37 | 38 | $.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['zh-CN']); 39 | 40 | })(jQuery); 41 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * bootstrap-table - v1.9.0 - 2015-09-30 3 | * https://github.com/wenzhixin/bootstrap-table 4 | * Copyright (c) 2015 zhixin wen 5 | * Licensed MIT License 6 | */ 7 | !function(a){"use strict";a.fn.bootstrapTable.locales["zh-CN"]={formatLoadingMessage:function(){return"正在努力地加载数据中,请稍候……"},formatRecordsPerPage:function(a){return"每页显示 "+a+" 条记录"},formatShowingRows:function(a,b,c){return"显示第 "+a+" 到第 "+b+" 条记录,总共 "+c+" 条记录"},formatSearch:function(){return"搜索"},formatNoMatches:function(){return"没有找到匹配的记录"},formatPaginationSwitch:function(){return"隐藏/显示分页"},formatRefresh:function(){return"刷新"},formatToggle:function(){return"切换"},formatColumns:function(){return"列"}},a.extend(a.fn.bootstrapTable.defaults,a.fn.bootstrapTable.locales["zh-CN"])}(jQuery); 8 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/css/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: CSS mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 27 | 28 |
29 |

CSS mode

30 |
65 | 70 | 71 |

MIME types defined: text/css, text/x-scss (demo), text/x-less (demo).

72 | 73 |

Parsing/Highlighting Tests: normal, verbose.

74 | 75 |
76 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/css/less_test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function() { 5 | "use strict"; 6 | 7 | var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-less"); 8 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "less"); } 9 | 10 | MT("variable", 11 | "[variable-2 @base]: [atom #f04615];", 12 | "[qualifier .class] {", 13 | " [property width]: [variable percentage]([number 0.5]); [comment // returns `50%`]", 14 | " [property color]: [variable saturate]([variable-2 @base], [number 5%]);", 15 | "}"); 16 | 17 | MT("amp", 18 | "[qualifier .child], [qualifier .sibling] {", 19 | " [qualifier .parent] [atom &] {", 20 | " [property color]: [keyword black];", 21 | " }", 22 | " [atom &] + [atom &] {", 23 | " [property color]: [keyword red];", 24 | " }", 25 | "}"); 26 | 27 | MT("mixin", 28 | "[qualifier .mixin] ([variable dark]; [variable-2 @color]) {", 29 | " [property color]: [variable darken]([variable-2 @color], [number 10%]);", 30 | "}", 31 | "[qualifier .mixin] ([variable light]; [variable-2 @color]) {", 32 | " [property color]: [variable lighten]([variable-2 @color], [number 10%]);", 33 | "}", 34 | "[qualifier .mixin] ([variable-2 @_]; [variable-2 @color]) {", 35 | " [property display]: [atom block];", 36 | "}", 37 | "[variable-2 @switch]: [variable light];", 38 | "[qualifier .class] {", 39 | " [qualifier .mixin]([variable-2 @switch]; [atom #888]);", 40 | "}"); 41 | 42 | MT("nest", 43 | "[qualifier .one] {", 44 | " [def @media] ([property width]: [number 400px]) {", 45 | " [property font-size]: [number 1.2em];", 46 | " [def @media] [attribute print] [keyword and] [property color] {", 47 | " [property color]: [keyword blue];", 48 | " }", 49 | " }", 50 | "}"); 51 | })(); 52 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/cypher/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Cypher Mode for CodeMirror 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 17 | 30 | 31 |
32 |

Cypher Mode for CodeMirror

33 |
34 | 40 |
41 |

MIME types defined: 42 | application/x-cypher-query 43 |

44 | 62 | 63 |
64 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/dart/dart.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror"), require("../clike/clike")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror", "../clike/clike"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | var keywords = ("this super static final const abstract class extends external factory " + 15 | "implements get native operator set typedef with enum throw rethrow " + 16 | "assert break case continue default in return new deferred async await " + 17 | "try catch finally do else for if switch while import library export " + 18 | "part of show hide is").split(" "); 19 | var blockKeywords = "try catch finally do else for if switch while".split(" "); 20 | var atoms = "true false null".split(" "); 21 | var builtins = "void bool num int double dynamic var String".split(" "); 22 | 23 | function set(words) { 24 | var obj = {}; 25 | for (var i = 0; i < words.length; ++i) obj[words[i]] = true; 26 | return obj; 27 | } 28 | 29 | CodeMirror.defineMIME("application/dart", { 30 | name: "clike", 31 | keywords: set(keywords), 32 | multiLineStrings: true, 33 | blockKeywords: set(blockKeywords), 34 | builtin: set(builtins), 35 | atoms: set(atoms), 36 | hooks: { 37 | "@": function(stream) { 38 | stream.eatWhile(/[\w\$_]/); 39 | return "meta"; 40 | } 41 | } 42 | }); 43 | 44 | CodeMirror.registerHelper("hintWords", "application/dart", keywords.concat(atoms).concat(builtins)); 45 | 46 | // This is needed to make loading through meta.js work. 47 | CodeMirror.defineMode("dart", function(conf) { 48 | return CodeMirror.getMode(conf, "application/dart"); 49 | }, "clike"); 50 | }); 51 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/dart/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Dart mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Dart mode

27 |
28 | 62 |
63 | 64 | 70 | 71 |
72 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/diff/diff.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.defineMode("diff", function() { 15 | 16 | var TOKEN_NAMES = { 17 | '+': 'positive', 18 | '-': 'negative', 19 | '@': 'meta' 20 | }; 21 | 22 | return { 23 | token: function(stream) { 24 | var tw_pos = stream.string.search(/[\t ]+?$/); 25 | 26 | if (!stream.sol() || tw_pos === 0) { 27 | stream.skipToEnd(); 28 | return ("error " + ( 29 | TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, ''); 30 | } 31 | 32 | var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd(); 33 | 34 | if (tw_pos === -1) { 35 | stream.skipToEnd(); 36 | } else { 37 | stream.pos = tw_pos; 38 | } 39 | 40 | return token_name; 41 | } 42 | }; 43 | }); 44 | 45 | CodeMirror.defineMIME("text/x-diff", "diff"); 46 | 47 | }); 48 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/django/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Django template mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 27 | 28 |
29 |

Django template mode

30 |
50 | 51 | 59 | 60 |

Mode for HTML with embedded Django template markup.

61 | 62 |

MIME types defined: text/x-django

63 |
64 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/ecl/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: ECL mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

ECL mode

27 |
45 | 48 | 49 |

Based on CodeMirror's clike mode. For more information see HPCC Systems web site.

50 |

MIME types defined: text/x-ecl.

51 | 52 |
53 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/gas/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Gas mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Gas mode

27 |
28 | 50 |
51 | 52 | 58 | 59 |

Handles AT&T assembler syntax (more specifically this handles 60 | the GNU Assembler (gas) syntax.) 61 | It takes a single optional configuration parameter: 62 | architecture, which can be one of "ARM", 63 | "ARMv6" or "x86". 64 | Including the parameter adds syntax for the registers and special 65 | directives for the supplied architecture. 66 | 67 |

MIME types defined: text/x-gas

68 |
69 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/gherkin/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Gherkin mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Gherkin mode

27 |
42 | 45 | 46 |

MIME types defined: text/x-feature.

47 | 48 |
49 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/htmlembedded/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Html Embedded Scripts mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 28 | 29 |
30 |

Html Embedded Scripts mode

31 |
43 | 44 | 52 | 53 |

Mode for html embedded scripts like JSP and ASP.NET. Depends on HtmlMixed which in turn depends on 54 | JavaScript, CSS and XML.
Other dependancies include those of the scriping language chosen.

55 | 56 |

MIME types defined: application/x-aspx (ASP.NET), 57 | application/x-ejs (Embedded Javascript), application/x-jsp (JavaServer Pages)

58 |
59 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/http/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: HTTP mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

HTTP mode

27 | 28 | 29 |
39 | 40 | 43 | 44 |

MIME types defined: message/http.

45 |
46 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/idl/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: IDL mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

IDL mode

27 | 28 |
52 | 62 | 63 |

MIME types defined: text/x-idl.

64 |
65 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/javascript/typescript.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: TypeScript mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

TypeScript mode

27 | 28 | 29 |
51 | 52 | 59 | 60 |

This is a specialization of the JavaScript mode.

61 |
62 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/jinja2/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Jinja2 mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Jinja2 mode

27 |
49 | 54 |
55 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/ntriples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: NTriples mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | 28 | 29 |
30 |

NTriples mode

31 |
32 | 39 |
40 | 41 | 44 |

MIME types defined: text/n-triples.

45 |
46 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/octave/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Octave mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Octave mode

27 | 28 |
71 | 81 | 82 |

MIME types defined: text/x-octave.

83 |
84 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/pascal/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Pascal mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Pascal mode

27 | 28 | 29 |
52 | 53 | 59 | 60 |

MIME types defined: text/x-pascal.

61 |
62 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/pegjs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CodeMirror: PEG.js Mode 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 28 | 29 |
30 |

PEG.js Mode

31 |
56 | 62 |

The PEG.js Mode

63 |

Created by Forbes Lindesay.

64 |
65 | 66 | 67 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/perl/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Perl mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Perl mode

27 | 28 | 29 |
67 | 68 | 73 | 74 |

MIME types defined: text/x-perl.

75 |
76 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/pig/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Pig Latin mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Pig Latin mode

27 |
39 | 40 | 47 | 48 |

49 | Simple mode that handles Pig Latin language. 50 |

51 | 52 |

MIME type defined: text/x-pig 53 | (PIG code) 54 | 55 |

56 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/properties/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Properties files mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Properties files mode

27 |
46 | 49 | 50 |

MIME types defined: text/x-properties, 51 | text/x-ini.

52 | 53 |
54 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/ruby/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({indentUnit: 2}, "ruby"); 6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 7 | 8 | MT("divide_equal_operator", 9 | "[variable bar] [operator /=] [variable foo]"); 10 | 11 | MT("divide_equal_operator_no_spacing", 12 | "[variable foo][operator /=][number 42]"); 13 | 14 | })(); 15 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/rust/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Rust mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Rust mode

27 | 28 | 29 |
52 | 53 | 58 | 59 |

MIME types defined: text/x-rustsrc.

60 |
61 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/sass/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Sass mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 26 |
27 |

Sass mode

28 |
58 | 64 | 65 |

MIME types defined: text/x-sass.

66 |
67 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/shell/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Shell mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | 27 | 28 |
29 |

Shell mode

30 | 31 | 32 | 56 | 57 | 64 | 65 |

MIME types defined: text/x-sh.

66 |
67 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/shell/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({}, "shell"); 6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 7 | 8 | MT("var", 9 | "text [def $var] text"); 10 | MT("varBraces", 11 | "text[def ${var}]text"); 12 | MT("varVar", 13 | "text [def $a$b] text"); 14 | MT("varBracesVarBraces", 15 | "text[def ${a}${b}]text"); 16 | 17 | MT("singleQuotedVar", 18 | "[string 'text $var text']"); 19 | MT("singleQuotedVarBraces", 20 | "[string 'text ${var} text']"); 21 | 22 | MT("doubleQuotedVar", 23 | '[string "text ][def $var][string text"]'); 24 | MT("doubleQuotedVarBraces", 25 | '[string "text][def ${var}][string text"]'); 26 | MT("doubleQuotedVarPunct", 27 | '[string "text ][def $@][string text"]'); 28 | MT("doubleQuotedVarVar", 29 | '[string "][def $a$b][string "]'); 30 | MT("doubleQuotedVarBracesVarBraces", 31 | '[string "][def ${a}${b}][string "]'); 32 | 33 | MT("notAString", 34 | "text\\'text"); 35 | MT("escapes", 36 | "outside\\'\\\"\\`\\\\[string \"inside\\`\\'\\\"\\\\`\\$notAVar\"]outside\\$\\(notASubShell\\)"); 37 | 38 | MT("subshell", 39 | "[builtin echo] [quote $(whoami)] s log, stardate [quote `date`]."); 40 | MT("doubleQuotedSubshell", 41 | "[builtin echo] [string \"][quote $(whoami)][string 's log, stardate `date`.\"]"); 42 | 43 | MT("hashbang", 44 | "[meta #!/bin/bash]"); 45 | MT("comment", 46 | "text [comment # Blurb]"); 47 | 48 | MT("numbers", 49 | "[number 0] [number 1] [number 2]"); 50 | MT("keywords", 51 | "[keyword while] [atom true]; [keyword do]", 52 | " [builtin sleep] [number 3]", 53 | "[keyword done]"); 54 | MT("options", 55 | "[builtin ls] [attribute -l] [attribute --human-readable]"); 56 | MT("operator", 57 | "[def var][operator =]value"); 58 | })(); 59 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/smalltalk/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Smalltalk mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 16 | 29 | 30 |
31 |

Smalltalk mode

32 |
55 | 56 | 64 | 65 |

Simple Smalltalk mode.

66 | 67 |

MIME types defined: text/x-stsrc.

68 |
69 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/solr/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Solr mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 20 | 33 | 34 |
35 |

Solr mode

36 | 37 |
38 | 47 |
48 | 49 | 55 | 56 |

MIME types defined: text/x-solr.

57 |
58 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/soy/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Soy (Closure Template) mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 29 | 30 |
31 |

Soy (Closure Template) mode

32 |
55 | 56 | 65 | 66 |

A mode for Closure Templates (Soy).

67 |

MIME type defined: text/x-soy.

68 |
69 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/sparql/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: SPARQL mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 26 |
27 |

SPARQL mode

28 |
52 | 58 | 59 |

MIME types defined: application/sparql-query.

60 | 61 |
62 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/spreadsheet/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Spreadsheet mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 26 |
27 |

Spreadsheet mode

28 |
29 | 30 | 37 | 38 |

MIME types defined: text/x-spreadsheet.

39 | 40 |

The Spreadsheet Mode

41 |

Created by Robert Plummer

42 |
43 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/tiddlywiki/tiddlywiki.css: -------------------------------------------------------------------------------- 1 | span.cm-underlined { 2 | text-decoration: underline; 3 | } 4 | span.cm-strikethrough { 5 | text-decoration: line-through; 6 | } 7 | span.cm-brace { 8 | color: #170; 9 | font-weight: bold; 10 | } 11 | span.cm-table { 12 | color: blue; 13 | font-weight: bold; 14 | } 15 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/tiki/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Tiki wiki mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 26 |
27 |

Tiki wiki mode

28 | 29 | 30 |
87 | 88 | 94 | 95 |
96 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/tiki/tiki.css: -------------------------------------------------------------------------------- 1 | .cm-tw-syntaxerror { 2 | color: #FFF; 3 | background-color: #900; 4 | } 5 | 6 | .cm-tw-deleted { 7 | text-decoration: line-through; 8 | } 9 | 10 | .cm-tw-header5 { 11 | font-weight: bold; 12 | } 13 | .cm-tw-listitem:first-child { /*Added first child to fix duplicate padding when highlighting*/ 14 | padding-left: 10px; 15 | } 16 | 17 | .cm-tw-box { 18 | border-top-width: 0px ! important; 19 | border-style: solid; 20 | border-width: 1px; 21 | border-color: inherit; 22 | } 23 | 24 | .cm-tw-underline { 25 | text-decoration: underline; 26 | } 27 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/toml/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: TOML Mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

TOML Mode

27 |
64 | 70 |

The TOML Mode

71 |

Created by Forbes Lindesay.

72 |

MIME type defined: text/x-toml.

73 |
74 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/tornado/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Tornado template mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 27 | 28 |
29 |

Tornado template mode

30 |
50 | 51 | 59 | 60 |

Mode for HTML with embedded Tornado template markup.

61 | 62 |

MIME types defined: text/x-tornado

63 |
64 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/turtle/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Turtle mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Turtle mode

27 |
41 | 47 | 48 |

MIME types defined: text/turtle.

49 | 50 |
51 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/vbscript/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: VBScript mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

VBScript mode

27 | 28 | 29 |
46 | 47 | 53 | 54 |

MIME types defined: text/vbscript.

55 |
56 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/xml/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: XML mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

XML mode

27 |
39 | 45 |

The XML mode supports two configuration parameters:

46 |
47 |
htmlMode (boolean)
48 |
This switches the mode to parse HTML instead of XML. This 49 | means attributes do not have to be quoted, and some elements 50 | (such as br) do not require a closing tag.
51 |
alignCDATA (boolean)
52 |
Setting this to true will force the opening tag of CDATA 53 | blocks to not be indented.
54 |
55 | 56 |

MIME types defined: application/xml, text/html.

57 |
58 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/xml/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({indentUnit: 2}, "xml"), mname = "xml"; 6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), mname); } 7 | 8 | MT("matching", 9 | "[tag&bracket <][tag top][tag&bracket >]", 10 | " text", 11 | " [tag&bracket <][tag inner][tag&bracket />]", 12 | "[tag&bracket ]"); 13 | 14 | MT("nonmatching", 15 | "[tag&bracket <][tag top][tag&bracket >]", 16 | " [tag&bracket <][tag inner][tag&bracket />]", 17 | " [tag&bracket ]"); 18 | 19 | MT("doctype", 20 | "[meta ]", 21 | "[tag&bracket <][tag top][tag&bracket />]"); 22 | 23 | MT("cdata", 24 | "[tag&bracket <][tag top][tag&bracket >]", 25 | " [atom ]", 27 | "[tag&bracket ]"); 28 | 29 | // HTML tests 30 | mode = CodeMirror.getMode({indentUnit: 2}, "text/html"); 31 | 32 | MT("selfclose", 33 | "[tag&bracket <][tag html][tag&bracket >]", 34 | " [tag&bracket <][tag link] [attribute rel]=[string stylesheet] [attribute href]=[string \"/foobar\"][tag&bracket >]", 35 | "[tag&bracket ]"); 36 | 37 | MT("list", 38 | "[tag&bracket <][tag ol][tag&bracket >]", 39 | " [tag&bracket <][tag li][tag&bracket >]one", 40 | " [tag&bracket <][tag li][tag&bracket >]two", 41 | "[tag&bracket ]"); 42 | 43 | MT("valueless", 44 | "[tag&bracket <][tag input] [attribute type]=[string checkbox] [attribute checked][tag&bracket />]"); 45 | 46 | MT("pThenArticle", 47 | "[tag&bracket <][tag p][tag&bracket >]", 48 | " foo", 49 | "[tag&bracket <][tag article][tag&bracket >]bar"); 50 | 51 | })(); 52 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/codemirror/mode/z80/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Z80 assembly mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Z80 assembly mode

27 | 28 | 29 |
44 | 45 | 50 | 51 |

MIME type defined: text/x-z80.

52 |
53 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/fancybox/blank.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/fancybox/blank.gif -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/fancybox/fancybox_loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/fancybox/fancybox_loading.gif -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/fancybox/fancybox_loading@2x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/fancybox/fancybox_loading@2x.gif -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/fancybox/fancybox_overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/fancybox/fancybox_overlay.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/fancybox/fancybox_sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/fancybox/fancybox_sprite.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/fancybox/fancybox_sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/fancybox/fancybox_sprite@2x.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/gritter/images/gritter-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/gritter/images/gritter-light.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/gritter/images/gritter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/gritter/images/gritter.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/gritter/images/ie-spacer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/gritter/images/ie-spacer.gif -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/laydate/skins/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/layer/laydate/skins/default/icon.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/layim/data/chatlog.json: -------------------------------------------------------------------------------- 1 | { 2 | "status": 1, 3 | "msg": "ok", 4 | "data": [ 5 | { 6 | "id": "100001", 7 | "name": "Beaut-zihan", 8 | "time": "10:23", 9 | "face": "img/a1.jpg" 10 | }, 11 | { 12 | "id": "100002", 13 | "name": "慕容晓晓", 14 | "time": "昨天", 15 | "face": "img/a2.jpg" 16 | }, 17 | { 18 | "id": "1000033", 19 | "name": "乔峰", 20 | "time": "2014-4.22", 21 | "face": "img/a3.jpg" 22 | }, 23 | { 24 | "id": "10000333", 25 | "name": "高圆圆", 26 | "time": "2014-4.21", 27 | "face": "img/a4.jpg" 28 | } 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/layim/data/group.json: -------------------------------------------------------------------------------- 1 | { 2 | "status": 1, 3 | "msg": "ok", 4 | "data": [ 5 | { 6 | "name": "H+交流群", 7 | "nums": 36, 8 | "id": 1, 9 | "item": [ 10 | { 11 | "id": "101", 12 | "name": "H+ Bug反馈", 13 | "face": "http://tp2.sinaimg.cn/2211874245/180/40050524279/0" 14 | }, 15 | { 16 | "id": "102", 17 | "name": "H+ 技术交流", 18 | "face": "http://tp3.sinaimg.cn/1820711170/180/1286855219/1" 19 | } 20 | ] 21 | }, 22 | { 23 | "name": "Bootstrap", 24 | "nums": 16, 25 | "id": 2, 26 | "item": [ 27 | { 28 | "id": "103", 29 | "name": "Bootstrap中文", 30 | "face": "http://tp2.sinaimg.cn/2211874245/180/40050524279/0" 31 | }, 32 | { 33 | "id": "104", 34 | "name": "Bootstrap资源", 35 | "face": "http://tp3.sinaimg.cn/1820711170/180/1286855219/1" 36 | } 37 | ] 38 | }, 39 | { 40 | "name": "WebApp", 41 | "nums": 106, 42 | "id": 3, 43 | "item": [ 44 | { 45 | "id": "105", 46 | "name": "移动开发", 47 | "face": "http://tp2.sinaimg.cn/2211874245/180/40050524279/0" 48 | }, 49 | { 50 | "id": "106", 51 | "name": "H5前言", 52 | "face": "http://tp3.sinaimg.cn/1820711170/180/1286855219/1" 53 | } 54 | ] 55 | } 56 | ] 57 | } 58 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/layim/data/groups.json: -------------------------------------------------------------------------------- 1 | { 2 | "status": 1, 3 | "msg": "ok", 4 | "data": [ 5 | { 6 | "id": "100001", 7 | "name": "無言的蒁説", 8 | "face": "img/a1.jpg" 9 | }, 10 | { 11 | "id": "100002", 12 | "name": "婷宝奢侈品", 13 | "face": "img/a2.jpg" 14 | }, 15 | { 16 | "id": "100003", 17 | "name": "忆恨思爱", 18 | "face": "img/a3.jpg" 19 | }, 20 | { 21 | "id": "100004", 22 | "name": "天涯奥拓慢", 23 | "face": "img/a4.jpg" 24 | }, 25 | { 26 | "id": "100005", 27 | "name": "雨落无声的天空", 28 | "face": "img/a5.jpg" 29 | }, 30 | { 31 | "id": "100006", 32 | "name": "李越LycorisRadiate", 33 | "face": "img/a6.jpg" 34 | }, 35 | { 36 | "id": "100007", 37 | "name": "冯胖妞张直丑", 38 | "face": "img/a7.jpg" 39 | }, 40 | { 41 | "id": "100008", 42 | "name": "陈龙hmmm", 43 | "face": "img/a8.jpg" 44 | }, 45 | { 46 | "id": "100009", 47 | "name": "别闹哥胆儿小", 48 | "face": "img/a9.jpg" 49 | }, 50 | { 51 | "id": "100010", 52 | "name": "锅锅锅锅萌哒哒 ", 53 | "face": "img/a10.jpg" 54 | } 55 | ] 56 | } 57 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/layim/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/layer/layim/loading.gif -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/skin/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/layer/skin/default/icon-ext.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/skin/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/layer/skin/default/icon.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/skin/default/icon_ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/layer/skin/default/icon_ext.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/skin/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/layer/skin/default/loading-0.gif -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/skin/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/layer/skin/default/loading-1.gif -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/skin/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/layer/skin/default/loading-2.gif -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/skin/default/textbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/layer/skin/default/textbg.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/skin/default/xubox_ico0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/layer/skin/default/xubox_ico0.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/skin/default/xubox_loading0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/layer/skin/default/xubox_loading0.gif -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/skin/default/xubox_loading1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/layer/skin/default/xubox_loading1.gif -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/skin/default/xubox_loading2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/layer/skin/default/xubox_loading2.gif -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/skin/default/xubox_loading3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/layer/skin/default/xubox_loading3.gif -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/skin/default/xubox_title0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/layer/skin/default/xubox_title0.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/layer/skin/moon/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/layer/skin/moon/default.png -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/markdown/bootstrap-markdown.zh.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Chinese translation for bootstrap-markdown 3 | * benhaile 4 | */ 5 | (function ($) { 6 | $.fn.markdown.messages.zh = { 7 | 'Bold': "粗体", 8 | 'Italic': "斜体", 9 | 'Heading': "标题", 10 | 'URL/Link': "链接", 11 | 'Image': "图片", 12 | 'List': "列表", 13 | 'Unordered List': "无序列表", 14 | 'Ordered List': "有序列表", 15 | 'Code': "代码", 16 | 'Quote': "引用", 17 | 'Preview': "预览", 18 | 'strong text': "粗体", 19 | 'emphasized text': "强调", 20 | 'heading text': "标题", 21 | 'enter link description here': "输入链接说明", 22 | 'Insert Hyperlink': "URL地址", 23 | 'enter image description here': "输入图片说明", 24 | 'Insert Image Hyperlink': "图片URL地址", 25 | 'enter image title here': "在这里输入图片标题", 26 | 'list text here': "这里是列表文本", 27 | 'code text here': "这里输入代码", 28 | 'quote here': "这里输入引用文本" 29 | 30 | 31 | }; 32 | }(jQuery)); 33 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/prettyfile/bootstrap-prettyfile.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery and Bootsrap3 Plugin prettyFile 3 | * 4 | * version 2.0, Jan 20th, 2014 5 | * by episage, sujin2f 6 | * Git repository : https://github.com/episage/bootstrap-3-pretty-file-upload 7 | */ 8 | ( function( $ ) { 9 | $.fn.extend({ 10 | prettyFile: function( options ) { 11 | var defaults = { 12 | text : "选择文件" 13 | }; 14 | 15 | var options = $.extend(defaults, options); 16 | var plugin = this; 17 | 18 | function make_form( $el, text ) { 19 | $el.wrap('
'); 20 | 21 | $el.hide(); 22 | $el.after( '\ 23 |
\ 24 | \ 25 | \ 26 | \ 27 | \ 28 |
\ 29 | ' ); 30 | 31 | return $el.parent(); 32 | }; 33 | 34 | function bind_change( $wrap, multiple ) { 35 | $wrap.find( 'input[type="file"]' ).change(function () { 36 | // When original file input changes, get its value, show it in the fake input 37 | var files = $( this )[0].files, 38 | info = ''; 39 | 40 | if ( files.length == 0 ) 41 | return false; 42 | 43 | if ( !multiple || files.length == 1 ) { 44 | var path = $( this ).val().split('\\'); 45 | info = path[path.length - 1]; 46 | } else if ( files.length > 1 ) { 47 | // Display number of selected files instead of filenames 48 | info = "已选择了" + files.length + ' 个文件'; 49 | } 50 | 51 | $wrap.find('.input-append input').val( info ); 52 | }); 53 | }; 54 | 55 | function bind_button( $wrap, multiple ) { 56 | $wrap.find( '.input-append' ).click( function( e ) { 57 | e.preventDefault(); 58 | $wrap.find( 'input[type="file"]' ).click(); 59 | }); 60 | }; 61 | 62 | return plugin.each( function() { 63 | $this = $( this ); 64 | 65 | if ( $this ) { 66 | var multiple = $this.attr( 'multiple' ); 67 | 68 | $wrap = make_form( $this, options.text ); 69 | bind_change( $wrap, multiple ); 70 | bind_button( $wrap ); 71 | } 72 | }); 73 | } 74 | }); 75 | }( jQuery )); 76 | 77 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/suggest/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "message": "", 3 | "value": [ 4 | { 5 | "userName": "淳芸", 6 | "shortAccount": "chunyun", 7 | "userId": 20001 8 | }, { 9 | "userName": "orion-01", 10 | "shortAccount": "chunyun", 11 | "userId": 20000 12 | }, { 13 | "userName": "穆晓晨", 14 | "shortAccount": "chunyun", 15 | "userId": 20002 16 | }, { 17 | "userName": "张欢引", 18 | "shortAccount": "chunyun", 19 | "userId": 20003 20 | }, { 21 | "userName": "吴琼", 22 | "shortAccount": "wuqiong", 23 | "userId": 20004 24 | }, { 25 | "userName": "吴东鹏", 26 | "shortAccount": "wudongpeng", 27 | "userId": 20005 28 | }, { 29 | "userName": "黄少铅", 30 | "shortAccount": "huangshaoqian", 31 | "userId": 20006 32 | }, { 33 | "userName": "胡运燕", 34 | "shortAccount": "yunyan", 35 | "userId": 20007 36 | }, { 37 | "userName": "刘幸", 38 | "shortAccount": "liuxing", 39 | "userId": 20008 40 | }, { 41 | "userName": "陈媛媛", 42 | "shortAccount": "chenyuanyuan", 43 | "userId": 20009 44 | }, { 45 | "userName": "旷东林", 46 | "shortAccount": "chunyun", 47 | "userId": 20010 48 | }, { 49 | "userName": "唐宏禹", 50 | "shortAccount": "chunyun", 51 | "userId": 20011 52 | }, { 53 | "userName": "旷东林", 54 | "shortAccount": "kuangdonglin", 55 | "userId": 20010 56 | }, { 57 | "userName": "唐宏禹", 58 | "shortAccount": "tanghongyu", 59 | "userId": 20011 60 | } 61 | ], 62 | "code": 200, 63 | "redirect": "" 64 | } 65 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/validate/messages_zh.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery Validation Plugin - v1.13.1 - 10/14/2014 2 | * http://jqueryvalidation.org/ 3 | * Copyright (c) 2014 Jörn Zaefferer; Licensed MIT */ 4 | ! function (a) { 5 | "function" == typeof define && define.amd ? define(["jquery", "jquery.validate.min"], a) : a(jQuery) 6 | }(function (a) { 7 | var icon = " "; 8 | a.extend(a.validator.messages, { 9 | required: icon + "必填", 10 | remote: icon + "请修正此栏位", 11 | email: icon + "请输入有效的电子邮件", 12 | url: icon + "请输入有效的网址", 13 | date: icon + "请输入有效的日期", 14 | dateISO: icon + "请输入有效的日期 (YYYY-MM-DD)", 15 | number: icon + "请输入正确的数字", 16 | digits: icon + "只能输入数字", 17 | creditcard: icon + "请输入有效的信用卡号码", 18 | equalTo: icon + "你的输入不相同", 19 | extension: icon + "请输入有效的后缀", 20 | maxlength: a.validator.format(icon + "最多 {0} 个字"), 21 | minlength: a.validator.format(icon + "最少 {0} 个字"), 22 | rangelength: a.validator.format(icon + "请输入长度为 {0} 至 {1} 之间的字串"), 23 | range: a.validator.format(icon + "请输入 {0} 至 {1} 之间的数值"), 24 | max: a.validator.format(icon + "请输入不大于 {0} 的数值"), 25 | min: a.validator.format(icon + "请输入不小于 {0} 的数值") 26 | }) 27 | }); 28 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/webuploader/README.md: -------------------------------------------------------------------------------- 1 | 目录说明 2 | ======================== 3 | 4 | ```bash 5 | ├── Uploader.swf # SWF文件,当使用Flash运行时需要引入。 6 | ├ 7 | ├── webuploader.js # 完全版本。 8 | ├── webuploader.min.js # min版本 9 | ├ 10 | ├── webuploader.flashonly.js # 只有Flash实现的版本。 11 | ├── webuploader.flashonly.min.js # min版本 12 | ├ 13 | ├── webuploader.html5only.js # 只有Html5实现的版本。 14 | ├── webuploader.html5only.min.js # min版本 15 | ├ 16 | ├── webuploader.noimage.js # 去除图片处理的版本,包括HTML5和FLASH. 17 | ├── webuploader.noimage.min.js # min版本 18 | ├ 19 | ├── webuploader.custom.js # 自定义打包方案,请查看 Gruntfile.js,满足移动端使用。 20 | └── webuploader.custom.min.js # min版本 21 | ``` 22 | 23 | ## 示例 24 | 25 | 请把整个 Git 包下载下来放在 php 服务器下,因为默认提供的文件接受是用 php 编写的,打开 examples 页面便能查看示例效果。 -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/webuploader/Uploader.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beiyoufx/teemo/2422e2bb1fa24a011634986c68af6088af4d6f93/teemo/src/main/webapp/static/js/plugins/webuploader/Uploader.swf -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/plugins/webuploader/webuploader.css: -------------------------------------------------------------------------------- 1 | .webuploader-container { 2 | position: relative; 3 | } 4 | .webuploader-element-invisible { 5 | position: absolute !important; 6 | clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ 7 | clip: rect(1px,1px,1px,1px); 8 | } 9 | .webuploader-pick { 10 | position: relative; 11 | display: inline-block; 12 | cursor: pointer; 13 | background: #00b7ee; 14 | padding: 10px 15px; 15 | color: #fff; 16 | text-align: center; 17 | border-radius: 3px; 18 | overflow: hidden; 19 | } 20 | .webuploader-pick-hover { 21 | background: #00a2d4; 22 | } 23 | 24 | .webuploader-pick-disable { 25 | opacity: 0.6; 26 | pointer-events:none; 27 | } 28 | 29 | -------------------------------------------------------------------------------- /teemo/src/main/webapp/static/js/welcome.js: -------------------------------------------------------------------------------- 1 | //欢迎信息 2 | 3 | layer.config({ 4 | extend: ['extend/layer.ext.js', 'skin/moon/style.css'], 5 | skin: 'layer-ext-moon' 6 | }); 7 | 8 | layer.ready(function () { 9 | 10 | var html = $('#welcome-template').html(); 11 | $('a.viewlog').click(function () { 12 | logs(); 13 | return false; 14 | }); 15 | 16 | $('#pay-qrcode').click(function(){ 17 | var html=$(this).html(); 18 | parent.layer.open({ 19 | title: false, 20 | type: 1, 21 | closeBtn:false, 22 | shadeClose:true, 23 | area: ['600px', 'auto'], 24 | content: html 25 | }); 26 | }); 27 | 28 | function logs() { 29 | parent.layer.open({ 30 | title: '初见倾心,再见动情', 31 | type: 1, 32 | area: ['700px', 'auto'], 33 | content: html, 34 | btn: ['确定', '取消'] 35 | }); 36 | } 37 | 38 | console.log('欢迎使用H+,如果您在使用的过程中有碰到问题,可以参考开发文档,感谢您的支持。'); 39 | 40 | }); 41 | --------------------------------------------------------------------------------