├── LICENSE ├── README.md ├── api ├── .gitignore ├── 2019-10-26.V8.1.5.sql ├── pom.xml └── src │ ├── .DS_Store │ ├── main │ ├── .DS_Store │ ├── java │ │ └── cn │ │ │ └── crap │ │ │ ├── ability │ │ │ └── ProjectAbility.java │ │ │ ├── adapter │ │ │ ├── Adapter.java │ │ │ ├── ArticleAdapter.java │ │ │ ├── BugAdapter.java │ │ │ ├── BugLogAdapter.java │ │ │ ├── CommentAdapter.java │ │ │ ├── DebugAdapter.java │ │ │ ├── ErrorAdapter.java │ │ │ ├── HotSearchAdapter.java │ │ │ ├── InterfaceAdapter.java │ │ │ ├── LogAdapter.java │ │ │ ├── MenuAdapter.java │ │ │ ├── ModuleAdapter.java │ │ │ ├── ProjectAdapter.java │ │ │ ├── ProjectMetaAdapter.java │ │ │ ├── ProjectUserAdapter.java │ │ │ ├── SettingAdapter.java │ │ │ ├── SourceAdapter.java │ │ │ └── UserAdapter.java │ │ │ ├── beans │ │ │ └── Config.java │ │ │ ├── controller │ │ │ ├── IndexController.java │ │ │ ├── admin │ │ │ │ ├── FileController.java │ │ │ │ ├── HotSearchController.java │ │ │ │ ├── MainController.java │ │ │ │ ├── MenuController.java │ │ │ │ ├── OpsController.java │ │ │ │ ├── SettingController.java │ │ │ │ └── UserController.java │ │ │ ├── thirdly │ │ │ │ ├── GitHubController.java │ │ │ │ └── GitOschinaController.java │ │ │ ├── user │ │ │ │ ├── ArticleController.java │ │ │ │ ├── BugController.java │ │ │ │ ├── BugLogController.java │ │ │ │ ├── CommentController.java │ │ │ │ ├── CrapDebugController.java │ │ │ │ ├── CrapDebugControllerBak.java │ │ │ │ ├── CrapDebugV1Controller.java │ │ │ │ ├── DictionaryController.java │ │ │ │ ├── ErrorController.java │ │ │ │ ├── InterfaceController.java │ │ │ │ ├── LogController.java │ │ │ │ ├── LoginController.java │ │ │ │ ├── ModuleController.java │ │ │ │ ├── ProjectController.java │ │ │ │ ├── ProjectMetaController.java │ │ │ │ ├── ProjectUserController.java │ │ │ │ ├── SourceController.java │ │ │ │ └── StaticizeController.java │ │ │ └── visitor │ │ │ │ ├── ArticleController.java │ │ │ │ ├── CommentController.java │ │ │ │ ├── ErrorController.java │ │ │ │ ├── ExampleController.java │ │ │ │ ├── InterfaceController.java │ │ │ │ ├── MainController.java │ │ │ │ ├── MockController.java │ │ │ │ ├── ModuleController.java │ │ │ │ ├── ProjectController.java │ │ │ │ └── SourceController.java │ │ │ ├── dao │ │ │ ├── custom │ │ │ │ ├── CustomArticleDao.java │ │ │ │ ├── CustomDebugDao.java │ │ │ │ ├── CustomHotSearchDao.java │ │ │ │ ├── CustomInterfaceDao.java │ │ │ │ └── CustomProjectDao.java │ │ │ ├── mapper │ │ │ │ ├── ArticleMapper.xml │ │ │ │ ├── BugLogMapper.xml │ │ │ │ ├── BugMapper.xml │ │ │ │ ├── CommentMapper.xml │ │ │ │ ├── DebugMapper.xml │ │ │ │ ├── ErrorMapper.xml │ │ │ │ ├── HotSearchMapper.xml │ │ │ │ ├── InterfaceMapper.xml │ │ │ │ ├── LogMapper.xml │ │ │ │ ├── MenuMapper.xml │ │ │ │ ├── ModuleMapper.xml │ │ │ │ ├── ProjectMapper.xml │ │ │ │ ├── ProjectMetaMapper.xml │ │ │ │ ├── ProjectUserMapper.xml │ │ │ │ ├── SettingMapper.xml │ │ │ │ ├── SourceMapper.xml │ │ │ │ └── UserMapper.xml │ │ │ └── mybatis │ │ │ │ ├── ArticleDao.java │ │ │ │ ├── BaseDao.java │ │ │ │ ├── BugDao.java │ │ │ │ ├── BugLogDao.java │ │ │ │ ├── CommentDao.java │ │ │ │ ├── DebugDao.java │ │ │ │ ├── ErrorDao.java │ │ │ │ ├── HotSearchDao.java │ │ │ │ ├── InterfaceDao.java │ │ │ │ ├── LogDao.java │ │ │ │ ├── MenuDao.java │ │ │ │ ├── ModuleDao.java │ │ │ │ ├── NewBaseDao.java │ │ │ │ ├── ProjectDao.java │ │ │ │ ├── ProjectMetaDao.java │ │ │ │ ├── ProjectUserDao.java │ │ │ │ ├── SettingDao.java │ │ │ │ ├── SourceDao.java │ │ │ │ └── UserDao.java │ │ │ ├── dto │ │ │ ├── ArticleDTO.java │ │ │ ├── BugDTO.java │ │ │ ├── BugLogDTO.java │ │ │ ├── CategoryDto.java │ │ │ ├── CommentDTO.java │ │ │ ├── CrumbDto.java │ │ │ ├── DebugDto.java │ │ │ ├── DebugInterfaceParamDto.java │ │ │ ├── DictionaryDto.java │ │ │ ├── ErrorDto.java │ │ │ ├── FindPwdDto.java │ │ │ ├── HotSearchDto.java │ │ │ ├── InterfaceDto.java │ │ │ ├── InterfacePDFDto.java │ │ │ ├── LogDto.java │ │ │ ├── LoginDto.java │ │ │ ├── LoginInfoDto.java │ │ │ ├── MailBean.java │ │ │ ├── MenuDto.java │ │ │ ├── MenuWithSubMenuDto.java │ │ │ ├── ModuleDTO.java │ │ │ ├── ParamDto.java │ │ │ ├── PermissionDTO.java │ │ │ ├── PickDto.java │ │ │ ├── PostwomanResDTO.java │ │ │ ├── ProjectDTO.java │ │ │ ├── ProjectMetaDTO.java │ │ │ ├── ProjectUserDto.java │ │ │ ├── SearchDto.java │ │ │ ├── SettingDto.java │ │ │ ├── SourceDto.java │ │ │ ├── UserDTO.java │ │ │ ├── XmlParamsDto.java │ │ │ └── thirdly │ │ │ │ ├── GitHubAccessToken.java │ │ │ │ └── GitHubUser.java │ │ │ ├── enu │ │ │ ├── AdminPermissionEnum.java │ │ │ ├── ArticleStatus.java │ │ │ ├── ArticleType.java │ │ │ ├── AttributeEnum.java │ │ │ ├── BugLogType.java │ │ │ ├── BugPriority.java │ │ │ ├── BugSeverity.java │ │ │ ├── BugStatus.java │ │ │ ├── BugType.java │ │ │ ├── CanDeleteEnum.java │ │ │ ├── CommentType.java │ │ │ ├── CommonEnum.java │ │ │ ├── DictionaryPropertyType.java │ │ │ ├── GenerateType.java │ │ │ ├── IconfontCode.java │ │ │ ├── IndexPageUrl.java │ │ │ ├── InterfaceContentType.java │ │ │ ├── InterfaceStatus.java │ │ │ ├── LogType.java │ │ │ ├── LoginType.java │ │ │ ├── LuceneSearchType.java │ │ │ ├── MenuType.java │ │ │ ├── MonitorType.java │ │ │ ├── MyError.java │ │ │ ├── PickCode.java │ │ │ ├── ProjectMetaType.java │ │ │ ├── ProjectPermissionEnum.java │ │ │ ├── ProjectShowType.java │ │ │ ├── ProjectStatus.java │ │ │ ├── ProjectType.java │ │ │ ├── ProjectUserStatus.java │ │ │ ├── ProjectUserType.java │ │ │ ├── RequestMethod.java │ │ │ ├── SettingEnum.java │ │ │ ├── SettingStatus.java │ │ │ ├── SettingType.java │ │ │ ├── TableId.java │ │ │ ├── UserStatus.java │ │ │ └── UserType.java │ │ │ ├── framework │ │ │ ├── IdGenerator.java │ │ │ ├── InitSystem.java │ │ │ ├── JsonResult.java │ │ │ ├── MyException.java │ │ │ ├── ParamFilter.java │ │ │ ├── SpringContextHolder.java │ │ │ ├── ThreadContext.java │ │ │ ├── ThreadObject.java │ │ │ ├── base │ │ │ │ └── BaseController.java │ │ │ └── interceptor │ │ │ │ ├── AuthInterceptor.java │ │ │ │ └── AuthPassport.java │ │ │ ├── model │ │ │ ├── Article.java │ │ │ ├── ArticleCriteria.java │ │ │ ├── ArticleWithBLOBs.java │ │ │ ├── BasePO.java │ │ │ ├── BugLogPO.java │ │ │ ├── BugPO.java │ │ │ ├── CommentPO.java │ │ │ ├── Debug.java │ │ │ ├── DebugCriteria.java │ │ │ ├── Error.java │ │ │ ├── ErrorCriteria.java │ │ │ ├── HotSearch.java │ │ │ ├── HotSearchCriteria.java │ │ │ ├── Interface.java │ │ │ ├── InterfaceCriteria.java │ │ │ ├── InterfaceWithBLOBs.java │ │ │ ├── Log.java │ │ │ ├── LogCriteria.java │ │ │ ├── Menu.java │ │ │ ├── MenuCriteria.java │ │ │ ├── ModulePO.java │ │ │ ├── ProjectMetaPO.java │ │ │ ├── ProjectPO.java │ │ │ ├── ProjectUserPO.java │ │ │ ├── Setting.java │ │ │ ├── SettingCriteria.java │ │ │ ├── Source.java │ │ │ ├── SourceCriteria.java │ │ │ └── UserPO.java │ │ │ ├── query │ │ │ ├── ArticleQuery.java │ │ │ ├── BaseQuery.java │ │ │ ├── BugLogQuery.java │ │ │ ├── BugQuery.java │ │ │ ├── CommentQuery.java │ │ │ ├── DebugQuery.java │ │ │ ├── ErrorQuery.java │ │ │ ├── HotSearchQuery.java │ │ │ ├── InterfaceQuery.java │ │ │ ├── LogQuery.java │ │ │ ├── MenuQuery.java │ │ │ ├── ModuleQuery.java │ │ │ ├── ProjectMetaQuery.java │ │ │ ├── ProjectQuery.java │ │ │ ├── ProjectUserQuery.java │ │ │ ├── SearchQuery.java │ │ │ ├── SettingQuery.java │ │ │ ├── SourceQuery.java │ │ │ └── UserQuery.java │ │ │ ├── schedule │ │ │ ├── AbstractTask.java │ │ │ ├── InterfaceMonitor.java │ │ │ ├── OpenSourceInfoTask.java │ │ │ └── TaskUtil.java │ │ │ ├── service │ │ │ ├── ArticleService.java │ │ │ ├── BaseService.java │ │ │ ├── BugLogService.java │ │ │ ├── BugService.java │ │ │ ├── CommentService.java │ │ │ ├── DebugService.java │ │ │ ├── ErrorService.java │ │ │ ├── HotSearchService.java │ │ │ ├── IEmailService.java │ │ │ ├── ILuceneService.java │ │ │ ├── IPickService.java │ │ │ ├── ISearchService.java │ │ │ ├── InterfaceService.java │ │ │ ├── LogService.java │ │ │ ├── MenuService.java │ │ │ ├── ModuleService.java │ │ │ ├── NewBaseService.java │ │ │ ├── ProjectMetaService.java │ │ │ ├── ProjectService.java │ │ │ ├── ProjectServiceBak.java │ │ │ ├── ProjectUserService.java │ │ │ ├── SettingService.java │ │ │ ├── SourceService.java │ │ │ ├── UserService.java │ │ │ ├── thirdly │ │ │ │ ├── GitHubService.java │ │ │ │ └── OschinaService.java │ │ │ └── tool │ │ │ │ ├── AdminPickService.java │ │ │ │ ├── EmailService.java │ │ │ │ ├── LuceneSearchService.java │ │ │ │ ├── ModuleCache.java │ │ │ │ ├── ObjectCache.java │ │ │ │ ├── PickService.java │ │ │ │ ├── ProjectCache.java │ │ │ │ ├── SettingCache.java │ │ │ │ ├── StringCache.java │ │ │ │ ├── SystemService.java │ │ │ │ ├── UserCache.java │ │ │ │ └── UserPickService.java │ │ │ └── utils │ │ │ ├── Aes.java │ │ │ ├── AttributeUtils.java │ │ │ ├── BeanUtil.java │ │ │ ├── ChinaFont.java │ │ │ ├── DateFormartUtil.java │ │ │ ├── DownloadUtils.java │ │ │ ├── GetTextFromFile.java │ │ │ ├── Html2Pdf.java │ │ │ ├── HttpPostGet.java │ │ │ ├── IConst.java │ │ │ ├── ILogConst.java │ │ │ ├── ISetting.java │ │ │ ├── ImageCode.java │ │ │ ├── LoginUserHelper.java │ │ │ ├── MD5.java │ │ │ ├── MyCookie.java │ │ │ ├── MyCrumbDtoList.java │ │ │ ├── MyHashMap.java │ │ │ ├── MyInteger.java │ │ │ ├── MyString.java │ │ │ ├── NotNullFieldStringStyle.java │ │ │ ├── Page.java │ │ │ ├── PermissionUtil.java │ │ │ ├── RequestHelper.java │ │ │ ├── SafetyUtil.java │ │ │ ├── SerializeUtil.java │ │ │ ├── ServiceFactory.java │ │ │ ├── SqlToDictionaryUtil.java │ │ │ ├── TableField.java │ │ │ ├── Tools.java │ │ │ ├── UseHrefUtil.java │ │ │ ├── VipUtil.java │ │ │ ├── WordUtils.java │ │ │ └── generate │ │ │ ├── BaseGenerateUtil.java │ │ │ ├── JavaPOGenerateUtil.java │ │ │ └── MyBatisGenerateUtil.java │ ├── resources │ │ ├── .gitignore │ │ ├── config.properties │ │ ├── generate │ │ │ ├── JavaPO.txt │ │ │ └── mapperTemplete.txt │ │ ├── interfaceTemplete.docx │ │ ├── interfaceTemplete.xml │ │ ├── interfaceTempleteBak.docx │ │ ├── interfaceTempleteBak.xml │ │ ├── interfaceTempleteSrc.xml │ │ ├── log4j.properties │ │ ├── monitor.xml │ │ ├── mybatis-config.xml │ │ ├── mybatis-dao.xml │ │ └── springMVC.xml │ └── webapp │ │ ├── .DS_Store │ │ ├── META-INF │ │ └── MANIFEST.MF │ │ ├── WEB-INF │ │ ├── views │ │ │ ├── .gitignore │ │ │ ├── bugPick.jsp │ │ │ ├── dashboard.jsp │ │ │ ├── dashboard.v1.jsp │ │ │ ├── dashboard.v2.jsp │ │ │ ├── dashboard.v3.jsp │ │ │ ├── interFacePdf.jsp │ │ │ ├── newPick.jsp │ │ │ ├── pick.jsp │ │ │ ├── plugDashboard.jsp │ │ │ ├── postwomanAdvert.jsp │ │ │ ├── result.jsp │ │ │ └── staticize │ │ │ │ └── default │ │ │ │ ├── articleDetail.jsp │ │ │ │ ├── articleList.jsp │ │ │ │ ├── css.jsp │ │ │ │ ├── dictionaryDetail.jsp │ │ │ │ ├── errorList.jsp │ │ │ │ ├── footer.jsp │ │ │ │ ├── interfaceDetail.jsp │ │ │ │ ├── interfaceList.jsp │ │ │ │ ├── left.jsp │ │ │ │ ├── page.jsp │ │ │ │ └── topNav.jsp │ │ └── web.xml │ │ └── resources │ │ ├── avatar │ │ ├── avatar0.jpg │ │ ├── avatar1.jpg │ │ ├── avatar10.jpg │ │ ├── avatar2.jpg │ │ ├── avatar3.jpg │ │ ├── avatar4.jpg │ │ ├── avatar5.jpg │ │ ├── avatar6.jpg │ │ ├── avatar7.jpg │ │ ├── avatar8.jpg │ │ └── avatar9.jpg │ │ ├── css │ │ ├── admin.css │ │ ├── allCss.css │ │ ├── base.css │ │ ├── bug.css │ │ ├── crapApi.css │ │ ├── iconfont.css │ │ ├── iconfont.eot │ │ ├── iconfont.js │ │ ├── iconfont.json │ │ ├── iconfont.svg │ │ ├── iconfont.ttf │ │ ├── iconfont.woff │ │ ├── iconfont.woff2 │ │ ├── index.css │ │ ├── setting.css │ │ └── setting.tpl │ │ ├── download │ │ └── readMe.txt │ │ ├── framework │ │ ├── angular-1.3.0.14 │ │ │ ├── angular-animate.js │ │ │ ├── angular-animate.min.js │ │ │ ├── angular-animate.min.js.map │ │ │ ├── angular-cookies.js │ │ │ ├── angular-cookies.min.js │ │ │ ├── angular-cookies.min.js.map │ │ │ ├── angular-csp.css │ │ │ ├── angular-loader.js │ │ │ ├── angular-loader.min.js │ │ │ ├── angular-loader.min.js.map │ │ │ ├── angular-messages.js │ │ │ ├── angular-messages.min.js │ │ │ ├── angular-messages.min.js.map │ │ │ ├── angular-mocks.js │ │ │ ├── angular-resource.js │ │ │ ├── angular-resource.min.js │ │ │ ├── angular-resource.min.js.map │ │ │ ├── angular-route.js │ │ │ ├── angular-route.min.js │ │ │ ├── angular-route.min.js.map │ │ │ ├── angular-sanitize.js │ │ │ ├── angular-sanitize.min.js │ │ │ ├── angular-sanitize.min.js.map │ │ │ ├── angular-scenario.js │ │ │ ├── angular-touch.js │ │ │ ├── angular-touch.min.js │ │ │ ├── angular-touch.min.js.map │ │ │ ├── angular.js │ │ │ ├── angular.min.js │ │ │ ├── angular.min.js.map │ │ │ ├── errors.json │ │ │ ├── i18n │ │ │ │ ├── angular-locale_af-na.js │ │ │ │ ├── angular-locale_af-za.js │ │ │ │ ├── angular-locale_af.js │ │ │ │ ├── angular-locale_am-et.js │ │ │ │ ├── angular-locale_am.js │ │ │ │ ├── angular-locale_ar-001.js │ │ │ │ ├── angular-locale_ar-ae.js │ │ │ │ ├── angular-locale_ar-bh.js │ │ │ │ ├── angular-locale_ar-dj.js │ │ │ │ ├── angular-locale_ar-dz.js │ │ │ │ ├── angular-locale_ar-eg.js │ │ │ │ ├── angular-locale_ar-eh.js │ │ │ │ ├── angular-locale_ar-er.js │ │ │ │ ├── angular-locale_ar-il.js │ │ │ │ ├── angular-locale_ar-iq.js │ │ │ │ ├── angular-locale_ar-jo.js │ │ │ │ ├── angular-locale_ar-km.js │ │ │ │ ├── angular-locale_ar-kw.js │ │ │ │ ├── angular-locale_ar-lb.js │ │ │ │ ├── angular-locale_ar-ly.js │ │ │ │ ├── angular-locale_ar-ma.js │ │ │ │ ├── angular-locale_ar-mr.js │ │ │ │ ├── angular-locale_ar-om.js │ │ │ │ ├── angular-locale_ar-ps.js │ │ │ │ ├── angular-locale_ar-qa.js │ │ │ │ ├── angular-locale_ar-sa.js │ │ │ │ ├── angular-locale_ar-sd.js │ │ │ │ ├── angular-locale_ar-so.js │ │ │ │ ├── angular-locale_ar-ss.js │ │ │ │ ├── angular-locale_ar-sy.js │ │ │ │ ├── angular-locale_ar-td.js │ │ │ │ ├── angular-locale_ar-tn.js │ │ │ │ ├── angular-locale_ar-ye.js │ │ │ │ ├── angular-locale_ar.js │ │ │ │ ├── angular-locale_az-cyrl-az.js │ │ │ │ ├── angular-locale_az-cyrl.js │ │ │ │ ├── angular-locale_az-latn-az.js │ │ │ │ ├── angular-locale_az-latn.js │ │ │ │ ├── angular-locale_az.js │ │ │ │ ├── angular-locale_bg-bg.js │ │ │ │ ├── angular-locale_bg.js │ │ │ │ ├── angular-locale_bn-bd.js │ │ │ │ ├── angular-locale_bn-in.js │ │ │ │ ├── angular-locale_bn.js │ │ │ │ ├── angular-locale_br-fr.js │ │ │ │ ├── angular-locale_br.js │ │ │ │ ├── angular-locale_ca-ad.js │ │ │ │ ├── angular-locale_ca-es-valencia.js │ │ │ │ ├── angular-locale_ca-es.js │ │ │ │ ├── angular-locale_ca-fr.js │ │ │ │ ├── angular-locale_ca-it.js │ │ │ │ ├── angular-locale_ca.js │ │ │ │ ├── angular-locale_chr-us.js │ │ │ │ ├── angular-locale_chr.js │ │ │ │ ├── angular-locale_cs-cz.js │ │ │ │ ├── angular-locale_cs.js │ │ │ │ ├── angular-locale_cy-gb.js │ │ │ │ ├── angular-locale_cy.js │ │ │ │ ├── angular-locale_da-dk.js │ │ │ │ ├── angular-locale_da-gl.js │ │ │ │ ├── angular-locale_da.js │ │ │ │ ├── angular-locale_de-at.js │ │ │ │ ├── angular-locale_de-be.js │ │ │ │ ├── angular-locale_de-ch.js │ │ │ │ ├── angular-locale_de-de.js │ │ │ │ ├── angular-locale_de-li.js │ │ │ │ ├── angular-locale_de-lu.js │ │ │ │ ├── angular-locale_de.js │ │ │ │ ├── angular-locale_el-cy.js │ │ │ │ ├── angular-locale_el-gr.js │ │ │ │ ├── angular-locale_el.js │ │ │ │ ├── angular-locale_en-001.js │ │ │ │ ├── angular-locale_en-150.js │ │ │ │ ├── angular-locale_en-ag.js │ │ │ │ ├── angular-locale_en-ai.js │ │ │ │ ├── angular-locale_en-as.js │ │ │ │ ├── angular-locale_en-au.js │ │ │ │ ├── angular-locale_en-bb.js │ │ │ │ ├── angular-locale_en-be.js │ │ │ │ ├── angular-locale_en-bm.js │ │ │ │ ├── angular-locale_en-bs.js │ │ │ │ ├── angular-locale_en-bw.js │ │ │ │ ├── angular-locale_en-bz.js │ │ │ │ ├── angular-locale_en-ca.js │ │ │ │ ├── angular-locale_en-cc.js │ │ │ │ ├── angular-locale_en-ck.js │ │ │ │ ├── angular-locale_en-cm.js │ │ │ │ ├── angular-locale_en-cx.js │ │ │ │ ├── angular-locale_en-dg.js │ │ │ │ ├── angular-locale_en-dm.js │ │ │ │ ├── angular-locale_en-dsrt-us.js │ │ │ │ ├── angular-locale_en-dsrt.js │ │ │ │ ├── angular-locale_en-er.js │ │ │ │ ├── angular-locale_en-fj.js │ │ │ │ ├── angular-locale_en-fk.js │ │ │ │ ├── angular-locale_en-fm.js │ │ │ │ ├── angular-locale_en-gb.js │ │ │ │ ├── angular-locale_en-gd.js │ │ │ │ ├── angular-locale_en-gg.js │ │ │ │ ├── angular-locale_en-gh.js │ │ │ │ ├── angular-locale_en-gi.js │ │ │ │ ├── angular-locale_en-gm.js │ │ │ │ ├── angular-locale_en-gu.js │ │ │ │ ├── angular-locale_en-gy.js │ │ │ │ ├── angular-locale_en-hk.js │ │ │ │ ├── angular-locale_en-ie.js │ │ │ │ ├── angular-locale_en-im.js │ │ │ │ ├── angular-locale_en-in.js │ │ │ │ ├── angular-locale_en-io.js │ │ │ │ ├── angular-locale_en-iso.js │ │ │ │ ├── angular-locale_en-je.js │ │ │ │ ├── angular-locale_en-jm.js │ │ │ │ ├── angular-locale_en-ke.js │ │ │ │ ├── angular-locale_en-ki.js │ │ │ │ ├── angular-locale_en-kn.js │ │ │ │ ├── angular-locale_en-ky.js │ │ │ │ ├── angular-locale_en-lc.js │ │ │ │ ├── angular-locale_en-lr.js │ │ │ │ ├── angular-locale_en-ls.js │ │ │ │ ├── angular-locale_en-mg.js │ │ │ │ ├── angular-locale_en-mh.js │ │ │ │ ├── angular-locale_en-mo.js │ │ │ │ ├── angular-locale_en-mp.js │ │ │ │ ├── angular-locale_en-ms.js │ │ │ │ ├── angular-locale_en-mt.js │ │ │ │ ├── angular-locale_en-mu.js │ │ │ │ ├── angular-locale_en-mw.js │ │ │ │ ├── angular-locale_en-na.js │ │ │ │ ├── angular-locale_en-nf.js │ │ │ │ ├── angular-locale_en-ng.js │ │ │ │ ├── angular-locale_en-nr.js │ │ │ │ ├── angular-locale_en-nu.js │ │ │ │ ├── angular-locale_en-nz.js │ │ │ │ ├── angular-locale_en-pg.js │ │ │ │ ├── angular-locale_en-ph.js │ │ │ │ ├── angular-locale_en-pk.js │ │ │ │ ├── angular-locale_en-pn.js │ │ │ │ ├── angular-locale_en-pr.js │ │ │ │ ├── angular-locale_en-pw.js │ │ │ │ ├── angular-locale_en-rw.js │ │ │ │ ├── angular-locale_en-sb.js │ │ │ │ ├── angular-locale_en-sc.js │ │ │ │ ├── angular-locale_en-sd.js │ │ │ │ ├── angular-locale_en-sg.js │ │ │ │ ├── angular-locale_en-sh.js │ │ │ │ ├── angular-locale_en-sl.js │ │ │ │ ├── angular-locale_en-ss.js │ │ │ │ ├── angular-locale_en-sx.js │ │ │ │ ├── angular-locale_en-sz.js │ │ │ │ ├── angular-locale_en-tc.js │ │ │ │ ├── angular-locale_en-tk.js │ │ │ │ ├── angular-locale_en-to.js │ │ │ │ ├── angular-locale_en-tt.js │ │ │ │ ├── angular-locale_en-tv.js │ │ │ │ ├── angular-locale_en-tz.js │ │ │ │ ├── angular-locale_en-ug.js │ │ │ │ ├── angular-locale_en-um.js │ │ │ │ ├── angular-locale_en-us.js │ │ │ │ ├── angular-locale_en-vc.js │ │ │ │ ├── angular-locale_en-vg.js │ │ │ │ ├── angular-locale_en-vi.js │ │ │ │ ├── angular-locale_en-vu.js │ │ │ │ ├── angular-locale_en-ws.js │ │ │ │ ├── angular-locale_en-za.js │ │ │ │ ├── angular-locale_en-zm.js │ │ │ │ ├── angular-locale_en-zw.js │ │ │ │ ├── angular-locale_en.js │ │ │ │ ├── angular-locale_es-419.js │ │ │ │ ├── angular-locale_es-ar.js │ │ │ │ ├── angular-locale_es-bo.js │ │ │ │ ├── angular-locale_es-cl.js │ │ │ │ ├── angular-locale_es-co.js │ │ │ │ ├── angular-locale_es-cr.js │ │ │ │ ├── angular-locale_es-cu.js │ │ │ │ ├── angular-locale_es-do.js │ │ │ │ ├── angular-locale_es-ea.js │ │ │ │ ├── angular-locale_es-ec.js │ │ │ │ ├── angular-locale_es-es.js │ │ │ │ ├── angular-locale_es-gq.js │ │ │ │ ├── angular-locale_es-gt.js │ │ │ │ ├── angular-locale_es-hn.js │ │ │ │ ├── angular-locale_es-ic.js │ │ │ │ ├── angular-locale_es-mx.js │ │ │ │ ├── angular-locale_es-ni.js │ │ │ │ ├── angular-locale_es-pa.js │ │ │ │ ├── angular-locale_es-pe.js │ │ │ │ ├── angular-locale_es-ph.js │ │ │ │ ├── angular-locale_es-pr.js │ │ │ │ ├── angular-locale_es-py.js │ │ │ │ ├── angular-locale_es-sv.js │ │ │ │ ├── angular-locale_es-us.js │ │ │ │ ├── angular-locale_es-uy.js │ │ │ │ ├── angular-locale_es-ve.js │ │ │ │ ├── angular-locale_es.js │ │ │ │ ├── angular-locale_et-ee.js │ │ │ │ ├── angular-locale_et.js │ │ │ │ ├── angular-locale_eu-es.js │ │ │ │ ├── angular-locale_eu.js │ │ │ │ ├── angular-locale_fa-af.js │ │ │ │ ├── angular-locale_fa-ir.js │ │ │ │ ├── angular-locale_fa.js │ │ │ │ ├── angular-locale_fi-fi.js │ │ │ │ ├── angular-locale_fi.js │ │ │ │ ├── angular-locale_fil-ph.js │ │ │ │ ├── angular-locale_fil.js │ │ │ │ ├── angular-locale_fr-be.js │ │ │ │ ├── angular-locale_fr-bf.js │ │ │ │ ├── angular-locale_fr-bi.js │ │ │ │ ├── angular-locale_fr-bj.js │ │ │ │ ├── angular-locale_fr-bl.js │ │ │ │ ├── angular-locale_fr-ca.js │ │ │ │ ├── angular-locale_fr-cd.js │ │ │ │ ├── angular-locale_fr-cf.js │ │ │ │ ├── angular-locale_fr-cg.js │ │ │ │ ├── angular-locale_fr-ch.js │ │ │ │ ├── angular-locale_fr-ci.js │ │ │ │ ├── angular-locale_fr-cm.js │ │ │ │ ├── angular-locale_fr-dj.js │ │ │ │ ├── angular-locale_fr-dz.js │ │ │ │ ├── angular-locale_fr-fr.js │ │ │ │ ├── angular-locale_fr-ga.js │ │ │ │ ├── angular-locale_fr-gf.js │ │ │ │ ├── angular-locale_fr-gn.js │ │ │ │ ├── angular-locale_fr-gp.js │ │ │ │ ├── angular-locale_fr-gq.js │ │ │ │ ├── angular-locale_fr-ht.js │ │ │ │ ├── angular-locale_fr-km.js │ │ │ │ ├── angular-locale_fr-lu.js │ │ │ │ ├── angular-locale_fr-ma.js │ │ │ │ ├── angular-locale_fr-mc.js │ │ │ │ ├── angular-locale_fr-mf.js │ │ │ │ ├── angular-locale_fr-mg.js │ │ │ │ ├── angular-locale_fr-ml.js │ │ │ │ ├── angular-locale_fr-mq.js │ │ │ │ ├── angular-locale_fr-mr.js │ │ │ │ ├── angular-locale_fr-mu.js │ │ │ │ ├── angular-locale_fr-nc.js │ │ │ │ ├── angular-locale_fr-ne.js │ │ │ │ ├── angular-locale_fr-pf.js │ │ │ │ ├── angular-locale_fr-pm.js │ │ │ │ ├── angular-locale_fr-re.js │ │ │ │ ├── angular-locale_fr-rw.js │ │ │ │ ├── angular-locale_fr-sc.js │ │ │ │ ├── angular-locale_fr-sn.js │ │ │ │ ├── angular-locale_fr-sy.js │ │ │ │ ├── angular-locale_fr-td.js │ │ │ │ ├── angular-locale_fr-tg.js │ │ │ │ ├── angular-locale_fr-tn.js │ │ │ │ ├── angular-locale_fr-vu.js │ │ │ │ ├── angular-locale_fr-wf.js │ │ │ │ ├── angular-locale_fr-yt.js │ │ │ │ ├── angular-locale_fr.js │ │ │ │ ├── angular-locale_gl-es.js │ │ │ │ ├── angular-locale_gl.js │ │ │ │ ├── angular-locale_gsw-ch.js │ │ │ │ ├── angular-locale_gsw-li.js │ │ │ │ ├── angular-locale_gsw.js │ │ │ │ ├── angular-locale_gu-in.js │ │ │ │ ├── angular-locale_gu.js │ │ │ │ ├── angular-locale_haw-us.js │ │ │ │ ├── angular-locale_haw.js │ │ │ │ ├── angular-locale_he-il.js │ │ │ │ ├── angular-locale_he.js │ │ │ │ ├── angular-locale_hi-in.js │ │ │ │ ├── angular-locale_hi.js │ │ │ │ ├── angular-locale_hr-ba.js │ │ │ │ ├── angular-locale_hr-hr.js │ │ │ │ ├── angular-locale_hr.js │ │ │ │ ├── angular-locale_hu-hu.js │ │ │ │ ├── angular-locale_hu.js │ │ │ │ ├── angular-locale_hy-am.js │ │ │ │ ├── angular-locale_hy.js │ │ │ │ ├── angular-locale_id-id.js │ │ │ │ ├── angular-locale_id.js │ │ │ │ ├── angular-locale_in.js │ │ │ │ ├── angular-locale_is-is.js │ │ │ │ ├── angular-locale_is.js │ │ │ │ ├── angular-locale_it-ch.js │ │ │ │ ├── angular-locale_it-it.js │ │ │ │ ├── angular-locale_it-sm.js │ │ │ │ ├── angular-locale_it.js │ │ │ │ ├── angular-locale_iw.js │ │ │ │ ├── angular-locale_ja-jp.js │ │ │ │ ├── angular-locale_ja.js │ │ │ │ ├── angular-locale_ka-ge.js │ │ │ │ ├── angular-locale_ka.js │ │ │ │ ├── angular-locale_kk-cyrl-kz.js │ │ │ │ ├── angular-locale_kk-cyrl.js │ │ │ │ ├── angular-locale_kk.js │ │ │ │ ├── angular-locale_km-kh.js │ │ │ │ ├── angular-locale_km.js │ │ │ │ ├── angular-locale_kn-in.js │ │ │ │ ├── angular-locale_kn.js │ │ │ │ ├── angular-locale_ko-kp.js │ │ │ │ ├── angular-locale_ko-kr.js │ │ │ │ ├── angular-locale_ko.js │ │ │ │ ├── angular-locale_ky-cyrl-kg.js │ │ │ │ ├── angular-locale_ky-cyrl.js │ │ │ │ ├── angular-locale_ky.js │ │ │ │ ├── angular-locale_ln-ao.js │ │ │ │ ├── angular-locale_ln-cd.js │ │ │ │ ├── angular-locale_ln-cf.js │ │ │ │ ├── angular-locale_ln-cg.js │ │ │ │ ├── angular-locale_ln.js │ │ │ │ ├── angular-locale_lo-la.js │ │ │ │ ├── angular-locale_lo.js │ │ │ │ ├── angular-locale_lt-lt.js │ │ │ │ ├── angular-locale_lt.js │ │ │ │ ├── angular-locale_lv-lv.js │ │ │ │ ├── angular-locale_lv.js │ │ │ │ ├── angular-locale_mk-mk.js │ │ │ │ ├── angular-locale_mk.js │ │ │ │ ├── angular-locale_ml-in.js │ │ │ │ ├── angular-locale_ml.js │ │ │ │ ├── angular-locale_mn-cyrl-mn.js │ │ │ │ ├── angular-locale_mn-cyrl.js │ │ │ │ ├── angular-locale_mn.js │ │ │ │ ├── angular-locale_mr-in.js │ │ │ │ ├── angular-locale_mr.js │ │ │ │ ├── angular-locale_ms-bn.js │ │ │ │ ├── angular-locale_ms-latn-bn.js │ │ │ │ ├── angular-locale_ms-latn-my.js │ │ │ │ ├── angular-locale_ms-latn-sg.js │ │ │ │ ├── angular-locale_ms-latn.js │ │ │ │ ├── angular-locale_ms-my.js │ │ │ │ ├── angular-locale_ms.js │ │ │ │ ├── angular-locale_mt-mt.js │ │ │ │ ├── angular-locale_mt.js │ │ │ │ ├── angular-locale_my-mm.js │ │ │ │ ├── angular-locale_my.js │ │ │ │ ├── angular-locale_nb-no.js │ │ │ │ ├── angular-locale_nb-sj.js │ │ │ │ ├── angular-locale_nb.js │ │ │ │ ├── angular-locale_ne-in.js │ │ │ │ ├── angular-locale_ne-np.js │ │ │ │ ├── angular-locale_ne.js │ │ │ │ ├── angular-locale_nl-aw.js │ │ │ │ ├── angular-locale_nl-be.js │ │ │ │ ├── angular-locale_nl-bq.js │ │ │ │ ├── angular-locale_nl-cw.js │ │ │ │ ├── angular-locale_nl-nl.js │ │ │ │ ├── angular-locale_nl-sr.js │ │ │ │ ├── angular-locale_nl-sx.js │ │ │ │ ├── angular-locale_nl.js │ │ │ │ ├── angular-locale_no-no.js │ │ │ │ ├── angular-locale_no.js │ │ │ │ ├── angular-locale_or-in.js │ │ │ │ ├── angular-locale_or.js │ │ │ │ ├── angular-locale_pa-arab-pk.js │ │ │ │ ├── angular-locale_pa-arab.js │ │ │ │ ├── angular-locale_pa-guru-in.js │ │ │ │ ├── angular-locale_pa-guru.js │ │ │ │ ├── angular-locale_pa.js │ │ │ │ ├── angular-locale_pl-pl.js │ │ │ │ ├── angular-locale_pl.js │ │ │ │ ├── angular-locale_pt-ao.js │ │ │ │ ├── angular-locale_pt-br.js │ │ │ │ ├── angular-locale_pt-cv.js │ │ │ │ ├── angular-locale_pt-gw.js │ │ │ │ ├── angular-locale_pt-mo.js │ │ │ │ ├── angular-locale_pt-mz.js │ │ │ │ ├── angular-locale_pt-pt.js │ │ │ │ ├── angular-locale_pt-st.js │ │ │ │ ├── angular-locale_pt-tl.js │ │ │ │ ├── angular-locale_pt.js │ │ │ │ ├── angular-locale_ro-md.js │ │ │ │ ├── angular-locale_ro-ro.js │ │ │ │ ├── angular-locale_ro.js │ │ │ │ ├── angular-locale_ru-by.js │ │ │ │ ├── angular-locale_ru-kg.js │ │ │ │ ├── angular-locale_ru-kz.js │ │ │ │ ├── angular-locale_ru-md.js │ │ │ │ ├── angular-locale_ru-ru.js │ │ │ │ ├── angular-locale_ru-ua.js │ │ │ │ ├── angular-locale_ru.js │ │ │ │ ├── angular-locale_si-lk.js │ │ │ │ ├── angular-locale_si.js │ │ │ │ ├── angular-locale_sk-sk.js │ │ │ │ ├── angular-locale_sk.js │ │ │ │ ├── angular-locale_sl-si.js │ │ │ │ ├── angular-locale_sl.js │ │ │ │ ├── angular-locale_sq-al.js │ │ │ │ ├── angular-locale_sq-mk.js │ │ │ │ ├── angular-locale_sq-xk.js │ │ │ │ ├── angular-locale_sq.js │ │ │ │ ├── angular-locale_sr-cyrl-ba.js │ │ │ │ ├── angular-locale_sr-cyrl-me.js │ │ │ │ ├── angular-locale_sr-cyrl-rs.js │ │ │ │ ├── angular-locale_sr-cyrl-xk.js │ │ │ │ ├── angular-locale_sr-cyrl.js │ │ │ │ ├── angular-locale_sr-latn-ba.js │ │ │ │ ├── angular-locale_sr-latn-me.js │ │ │ │ ├── angular-locale_sr-latn-rs.js │ │ │ │ ├── angular-locale_sr-latn-xk.js │ │ │ │ ├── angular-locale_sr-latn.js │ │ │ │ ├── angular-locale_sr.js │ │ │ │ ├── angular-locale_sv-ax.js │ │ │ │ ├── angular-locale_sv-fi.js │ │ │ │ ├── angular-locale_sv-se.js │ │ │ │ ├── angular-locale_sv.js │ │ │ │ ├── angular-locale_sw-ke.js │ │ │ │ ├── angular-locale_sw-tz.js │ │ │ │ ├── angular-locale_sw-ug.js │ │ │ │ ├── angular-locale_sw.js │ │ │ │ ├── angular-locale_ta-in.js │ │ │ │ ├── angular-locale_ta-lk.js │ │ │ │ ├── angular-locale_ta-my.js │ │ │ │ ├── angular-locale_ta-sg.js │ │ │ │ ├── angular-locale_ta.js │ │ │ │ ├── angular-locale_te-in.js │ │ │ │ ├── angular-locale_te.js │ │ │ │ ├── angular-locale_th-th.js │ │ │ │ ├── angular-locale_th.js │ │ │ │ ├── angular-locale_tl.js │ │ │ │ ├── angular-locale_tr-cy.js │ │ │ │ ├── angular-locale_tr-tr.js │ │ │ │ ├── angular-locale_tr.js │ │ │ │ ├── angular-locale_uk-ua.js │ │ │ │ ├── angular-locale_uk.js │ │ │ │ ├── angular-locale_ur-in.js │ │ │ │ ├── angular-locale_ur-pk.js │ │ │ │ ├── angular-locale_ur.js │ │ │ │ ├── angular-locale_uz-arab-af.js │ │ │ │ ├── angular-locale_uz-arab.js │ │ │ │ ├── angular-locale_uz-cyrl-uz.js │ │ │ │ ├── angular-locale_uz-cyrl.js │ │ │ │ ├── angular-locale_uz-latn-uz.js │ │ │ │ ├── angular-locale_uz-latn.js │ │ │ │ ├── angular-locale_uz.js │ │ │ │ ├── angular-locale_vi-vn.js │ │ │ │ ├── angular-locale_vi.js │ │ │ │ ├── angular-locale_zh-cn.js │ │ │ │ ├── angular-locale_zh-hans-cn.js │ │ │ │ ├── angular-locale_zh-hans-hk.js │ │ │ │ ├── angular-locale_zh-hans-mo.js │ │ │ │ ├── angular-locale_zh-hans-sg.js │ │ │ │ ├── angular-locale_zh-hans.js │ │ │ │ ├── angular-locale_zh-hant-hk.js │ │ │ │ ├── angular-locale_zh-hant-mo.js │ │ │ │ ├── angular-locale_zh-hant-tw.js │ │ │ │ ├── angular-locale_zh-hant.js │ │ │ │ ├── angular-locale_zh-hk.js │ │ │ │ ├── angular-locale_zh-tw.js │ │ │ │ ├── angular-locale_zh.js │ │ │ │ ├── angular-locale_zu-za.js │ │ │ │ └── angular-locale_zu.js │ │ │ ├── version.json │ │ │ └── version.txt │ │ ├── angular-ui-router-0.2.15.js │ │ ├── angular-ui-router.js │ │ ├── bootstrap-3.0.0 │ │ │ ├── config.json │ │ │ ├── css │ │ │ │ ├── bootstrap-datetimepicker.min.css │ │ │ │ ├── bootstrap-theme.css │ │ │ │ ├── bootstrap-theme.min.css │ │ │ │ ├── bootstrap.css │ │ │ │ └── bootstrap.min.css │ │ │ ├── fonts │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ └── js │ │ │ │ ├── bootstrap-datetimepicker.min.js │ │ │ │ ├── bootstrap-datetimepicker.zh-CN.js │ │ │ │ ├── bootstrap.js │ │ │ │ └── bootstrap.min.js │ │ ├── editormd-1.5.0 │ │ │ ├── css │ │ │ │ ├── editormd.css │ │ │ │ ├── editormd.logo.css │ │ │ │ ├── editormd.logo.min.css │ │ │ │ ├── editormd.min.css │ │ │ │ ├── editormd.preview.css │ │ │ │ └── editormd.preview.min.css │ │ │ ├── editormd.min.js │ │ │ ├── fonts │ │ │ │ ├── FontAwesome.otf │ │ │ │ ├── editormd-logo.eot │ │ │ │ ├── editormd-logo.svg │ │ │ │ ├── editormd-logo.ttf │ │ │ │ ├── editormd-logo.woff │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ └── fontawesome-webfont.woff2 │ │ │ ├── images │ │ │ │ ├── loading.gif │ │ │ │ ├── loading@2x.gif │ │ │ │ ├── loading@3x.gif │ │ │ │ └── logos │ │ │ │ │ ├── editormd-favicon-16x16.ico │ │ │ │ │ ├── editormd-favicon-24x24.ico │ │ │ │ │ ├── editormd-favicon-32x32.ico │ │ │ │ │ ├── editormd-favicon-48x48.ico │ │ │ │ │ ├── editormd-favicon-64x64.ico │ │ │ │ │ ├── editormd-logo-114x114.png │ │ │ │ │ ├── editormd-logo-120x120.png │ │ │ │ │ ├── editormd-logo-144x144.png │ │ │ │ │ ├── editormd-logo-16x16.png │ │ │ │ │ ├── editormd-logo-180x180.png │ │ │ │ │ ├── editormd-logo-240x240.png │ │ │ │ │ ├── editormd-logo-24x24.png │ │ │ │ │ ├── editormd-logo-320x320.png │ │ │ │ │ ├── editormd-logo-32x32.png │ │ │ │ │ ├── editormd-logo-48x48.png │ │ │ │ │ ├── editormd-logo-57x57.png │ │ │ │ │ ├── editormd-logo-64x64.png │ │ │ │ │ ├── editormd-logo-72x72.png │ │ │ │ │ ├── editormd-logo-96x96.png │ │ │ │ │ └── vi.png │ │ │ ├── languages │ │ │ │ ├── en.js │ │ │ │ └── zh-tw.js │ │ │ ├── lib │ │ │ │ ├── codemirror │ │ │ │ │ ├── AUTHORS │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.md │ │ │ │ │ ├── addon │ │ │ │ │ │ ├── comment │ │ │ │ │ │ │ ├── comment.js │ │ │ │ │ │ │ └── continuecomment.js │ │ │ │ │ │ ├── dialog │ │ │ │ │ │ │ ├── dialog.css │ │ │ │ │ │ │ └── dialog.js │ │ │ │ │ │ ├── display │ │ │ │ │ │ │ ├── fullscreen.css │ │ │ │ │ │ │ ├── fullscreen.js │ │ │ │ │ │ │ ├── panel.js │ │ │ │ │ │ │ ├── placeholder.js │ │ │ │ │ │ │ └── rulers.js │ │ │ │ │ │ ├── edit │ │ │ │ │ │ │ ├── closebrackets.js │ │ │ │ │ │ │ ├── closetag.js │ │ │ │ │ │ │ ├── continuelist.js │ │ │ │ │ │ │ ├── matchbrackets.js │ │ │ │ │ │ │ ├── matchtags.js │ │ │ │ │ │ │ └── trailingspace.js │ │ │ │ │ │ ├── fold │ │ │ │ │ │ │ ├── brace-fold.js │ │ │ │ │ │ │ ├── comment-fold.js │ │ │ │ │ │ │ ├── foldcode.js │ │ │ │ │ │ │ ├── foldgutter.css │ │ │ │ │ │ │ ├── foldgutter.js │ │ │ │ │ │ │ ├── indent-fold.js │ │ │ │ │ │ │ ├── markdown-fold.js │ │ │ │ │ │ │ └── xml-fold.js │ │ │ │ │ │ ├── hint │ │ │ │ │ │ │ ├── anyword-hint.js │ │ │ │ │ │ │ ├── css-hint.js │ │ │ │ │ │ │ ├── html-hint.js │ │ │ │ │ │ │ ├── javascript-hint.js │ │ │ │ │ │ │ ├── show-hint.css │ │ │ │ │ │ │ ├── show-hint.js │ │ │ │ │ │ │ ├── sql-hint.js │ │ │ │ │ │ │ └── xml-hint.js │ │ │ │ │ │ ├── lint │ │ │ │ │ │ │ ├── coffeescript-lint.js │ │ │ │ │ │ │ ├── css-lint.js │ │ │ │ │ │ │ ├── javascript-lint.js │ │ │ │ │ │ │ ├── json-lint.js │ │ │ │ │ │ │ ├── lint.css │ │ │ │ │ │ │ ├── lint.js │ │ │ │ │ │ │ └── yaml-lint.js │ │ │ │ │ │ ├── merge │ │ │ │ │ │ │ ├── merge.css │ │ │ │ │ │ │ └── merge.js │ │ │ │ │ │ ├── mode │ │ │ │ │ │ │ ├── loadmode.js │ │ │ │ │ │ │ ├── multiplex.js │ │ │ │ │ │ │ ├── multiplex_test.js │ │ │ │ │ │ │ ├── overlay.js │ │ │ │ │ │ │ └── simple.js │ │ │ │ │ │ ├── runmode │ │ │ │ │ │ │ ├── colorize.js │ │ │ │ │ │ │ ├── runmode-standalone.js │ │ │ │ │ │ │ ├── runmode.js │ │ │ │ │ │ │ └── runmode.node.js │ │ │ │ │ │ ├── scroll │ │ │ │ │ │ │ ├── annotatescrollbar.js │ │ │ │ │ │ │ ├── scrollpastend.js │ │ │ │ │ │ │ ├── simplescrollbars.css │ │ │ │ │ │ │ └── simplescrollbars.js │ │ │ │ │ │ ├── search │ │ │ │ │ │ │ ├── match-highlighter.js │ │ │ │ │ │ │ ├── matchesonscrollbar.css │ │ │ │ │ │ │ ├── matchesonscrollbar.js │ │ │ │ │ │ │ ├── search.js │ │ │ │ │ │ │ └── searchcursor.js │ │ │ │ │ │ ├── selection │ │ │ │ │ │ │ ├── active-line.js │ │ │ │ │ │ │ ├── mark-selection.js │ │ │ │ │ │ │ └── selection-pointer.js │ │ │ │ │ │ ├── tern │ │ │ │ │ │ │ ├── tern.css │ │ │ │ │ │ │ ├── tern.js │ │ │ │ │ │ │ └── worker.js │ │ │ │ │ │ └── wrap │ │ │ │ │ │ │ └── hardwrap.js │ │ │ │ │ ├── addons.min.js │ │ │ │ │ ├── bower.json │ │ │ │ │ ├── codemirror.min.css │ │ │ │ │ ├── codemirror.min.js │ │ │ │ │ ├── lib │ │ │ │ │ │ ├── codemirror.css │ │ │ │ │ │ └── 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 │ │ │ │ │ │ ├── forth │ │ │ │ │ │ │ ├── forth.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 │ │ │ │ │ │ ├── stylus │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── stylus.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 │ │ │ │ │ ├── modes.min.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── theme │ │ │ │ │ │ ├── 3024-day.css │ │ │ │ │ │ ├── 3024-night.css │ │ │ │ │ │ ├── ambiance-mobile.css │ │ │ │ │ │ ├── ambiance.css │ │ │ │ │ │ ├── base16-dark.css │ │ │ │ │ │ ├── base16-light.css │ │ │ │ │ │ ├── blackboard.css │ │ │ │ │ │ ├── cobalt.css │ │ │ │ │ │ ├── colorforth.css │ │ │ │ │ │ ├── eclipse.css │ │ │ │ │ │ ├── elegant.css │ │ │ │ │ │ ├── erlang-dark.css │ │ │ │ │ │ ├── lesser-dark.css │ │ │ │ │ │ ├── mbo.css │ │ │ │ │ │ ├── mdn-like.css │ │ │ │ │ │ ├── midnight.css │ │ │ │ │ │ ├── monokai.css │ │ │ │ │ │ ├── neat.css │ │ │ │ │ │ ├── neo.css │ │ │ │ │ │ ├── night.css │ │ │ │ │ │ ├── paraiso-dark.css │ │ │ │ │ │ ├── paraiso-light.css │ │ │ │ │ │ ├── pastel-on-dark.css │ │ │ │ │ │ ├── rubyblue.css │ │ │ │ │ │ ├── solarized.css │ │ │ │ │ │ ├── the-matrix.css │ │ │ │ │ │ ├── tomorrow-night-bright.css │ │ │ │ │ │ ├── tomorrow-night-eighties.css │ │ │ │ │ │ ├── twilight.css │ │ │ │ │ │ ├── vibrant-ink.css │ │ │ │ │ │ ├── xq-dark.css │ │ │ │ │ │ ├── xq-light.css │ │ │ │ │ │ └── zenburn.css │ │ │ │ ├── flowchart.min.js │ │ │ │ ├── jquery.flowchart.min.js │ │ │ │ ├── marked.min.js │ │ │ │ ├── prettify.min.js │ │ │ │ ├── raphael.min.js │ │ │ │ ├── sequence-diagram.min.js │ │ │ │ └── underscore.min.js │ │ │ └── plugins │ │ │ │ ├── code-block-dialog │ │ │ │ └── code-block-dialog.js │ │ │ │ ├── emoji-dialog │ │ │ │ ├── emoji-dialog.js │ │ │ │ └── emoji.json │ │ │ │ ├── goto-line-dialog │ │ │ │ └── goto-line-dialog.js │ │ │ │ ├── help-dialog │ │ │ │ ├── help-dialog.js │ │ │ │ └── help.md │ │ │ │ ├── html-entities-dialog │ │ │ │ ├── html-entities-dialog.js │ │ │ │ └── html-entities.json │ │ │ │ ├── image-dialog │ │ │ │ └── image-dialog.js │ │ │ │ ├── link-dialog │ │ │ │ └── link-dialog.js │ │ │ │ ├── plugin-template.js │ │ │ │ ├── preformatted-text-dialog │ │ │ │ └── preformatted-text-dialog.js │ │ │ │ ├── reference-link-dialog │ │ │ │ └── reference-link-dialog.js │ │ │ │ ├── table-dialog │ │ │ │ └── table-dialog.js │ │ │ │ └── test-plugin │ │ │ │ └── test-plugin.js │ │ ├── html5shiv.js │ │ ├── jQuery.md5.js │ │ ├── jquery-1.9.1.min.js │ │ ├── jquery-1.9.1.min.map │ │ ├── jquery-ui.min-1.10.4.js │ │ ├── jquery.base64.js │ │ ├── jquery.cookie.js │ │ ├── jquery.jqzoom.js │ │ ├── ng-grid-2.0.12 │ │ │ ├── ng-grid.css │ │ │ ├── ng-grid.debug.js │ │ │ ├── ng-grid.js │ │ │ ├── ng-grid.min.css │ │ │ └── ng-grid.min.js │ │ ├── textAngular-1.5.0 │ │ │ └── .DS_Store │ │ ├── ui-bootstrap-tpls-0.11.0.js │ │ └── wang-editor-3.1.1 │ │ │ ├── fonts │ │ │ └── w-e-icon.woff │ │ │ ├── wangEditor.css │ │ │ ├── wangEditor.js │ │ │ ├── wangEditor.min.css │ │ │ ├── wangEditor.min.js │ │ │ └── wangEditor.min.js.map │ │ ├── html │ │ ├── 404.html │ │ ├── admin │ │ │ ├── config.properties.html │ │ │ ├── hotSearchList.tpl.html │ │ │ ├── index.html │ │ │ ├── login.tpl.html │ │ │ ├── loginOrRegister.html │ │ │ ├── menuDetail.tpl.html │ │ │ ├── menuList.tpl.html │ │ │ ├── page.tpl.html │ │ │ ├── register.tpl.html │ │ │ ├── settingDetail_COLOR.tpl.html │ │ │ ├── settingDetail_IMAGE.tpl.html │ │ │ ├── settingDetail_INDEXPAGE.tpl.html │ │ │ ├── settingDetail_SELECT.tpl.html │ │ │ ├── settingDetail_SEL_IN.tpl.html │ │ │ ├── settingDetail_TEXT.tpl.html │ │ │ ├── settingList.tpl.html │ │ │ ├── userDetail.tpl.html │ │ │ └── userList.tpl.html │ │ ├── subTpl │ │ │ ├── bugComment.tpl.html │ │ │ ├── bugLog.tpl.html │ │ │ ├── comment.tpl.html │ │ │ ├── footer.tpl.html │ │ │ ├── interBaseEdit.tpl.html │ │ │ ├── interEditDialog.tpl.html │ │ │ ├── interExampleEdit.tpl.html │ │ │ ├── interHeaderEdit.tpl.html │ │ │ ├── interParamEdit.tpl.html │ │ │ ├── interParamRemark-delete.tpl.html │ │ │ ├── interResParamEdit.tpl.html │ │ │ ├── subMenuMenu.tpl.html │ │ │ ├── subMenuModule.tpl.html │ │ │ ├── subMenuProject.tpl.html │ │ │ ├── subMenuSetting.tpl.html │ │ │ ├── topSearch.tpl.html │ │ │ ├── visitorLeft.tpl.html │ │ │ ├── visitorTopNav.tpl.html │ │ │ └── zoomImg.tpl.html │ │ ├── user │ │ │ ├── articleDetail.tpl.html │ │ │ ├── articleEdit.tpl.html │ │ │ ├── articleList.tpl.html │ │ │ ├── bugEdit.tpl.html │ │ │ ├── bugList.tpl.html │ │ │ ├── commentDetail.tpl.html │ │ │ ├── commentList.tpl.html │ │ │ ├── dictionaryDetail.tpl.html │ │ │ ├── dictionaryEdit.tpl.html │ │ │ ├── dictionaryImportFromSql.tpl.html │ │ │ ├── dictionaryList.tpl.html │ │ │ ├── errorDetail.tpl.html │ │ │ ├── errorList.tpl.html │ │ │ ├── findPwd.tpl.html │ │ │ ├── interfaceCopy.tpl.html │ │ │ ├── interfaceDebug.tpl.html │ │ │ ├── interfaceDetail.tpl.html │ │ │ ├── interfaceEdit.tpl.html │ │ │ ├── interfaceList.tpl.html │ │ │ ├── introduce.html │ │ │ ├── logDetail.tpl.html │ │ │ ├── logList.tpl.html │ │ │ ├── moduleDetail.tpl.html │ │ │ ├── moduleList.tpl.html │ │ │ ├── project.tpl.html │ │ │ ├── projectDetail.tpl.html │ │ │ ├── projectList.tpl.html │ │ │ ├── projectMetaEdit.tpl.html │ │ │ ├── projectMetaList.tpl.html │ │ │ ├── projectUserDetail.tpl.html │ │ │ ├── projectUserList.tpl.html │ │ │ ├── searchList.tpl.html │ │ │ ├── sourceDetail.tpl.html │ │ │ └── sourceList.tpl.html │ │ └── visitor │ │ │ ├── articleDetail_ARTICLE.tpl.html │ │ │ ├── articleDetail_DICTIONARY.tpl.html │ │ │ ├── articleList_ARTICLE.tpl.html │ │ │ ├── articleList_DICTIONARY.tpl.html │ │ │ ├── errorList.tpl.html │ │ │ ├── index.html │ │ │ ├── indexNew.html │ │ │ ├── interfaceDetail.tpl.html │ │ │ ├── interfaceList.tpl.html │ │ │ ├── moduleList.tpl.html │ │ │ ├── notFound.tpl.html │ │ │ ├── page.tpl.html │ │ │ ├── page_xs.tpl.html │ │ │ ├── projectIndex.html │ │ │ ├── projectList.tpl.html │ │ │ ├── searchResult.tpl.html │ │ │ ├── sourceDetail.tpl.html │ │ │ └── sourceList.tpl.html │ │ ├── images │ │ ├── admin_page.jpg │ │ ├── alipay.jpg │ │ ├── bg.jpeg │ │ ├── bg_new.jpg │ │ ├── bg_web.jpg │ │ ├── chrome_debug.jpg │ │ ├── cover.png │ │ ├── example1.jpg │ │ ├── example2.jpg │ │ ├── guidev8.0.0.jpg │ │ ├── loading.gif │ │ ├── logo.png │ │ ├── logo_new.png │ │ ├── postwoman_logo.png │ │ ├── project.jpg │ │ ├── transparent.png │ │ └── wepay.jpg │ │ └── js │ │ ├── advert.js │ │ ├── allJs.js │ │ ├── app.js │ │ ├── commentCtrl.js │ │ ├── const.js │ │ ├── core.js │ │ ├── coreNew.js │ │ ├── crapApi.js │ │ ├── editor.js │ │ ├── global.js │ │ ├── json.js │ │ ├── router.js │ │ ├── services.js │ │ ├── userBugCtrl.js │ │ ├── userCommonCtrl.js │ │ ├── userCtrls.js │ │ ├── userProjectMetaCtrl.js │ │ ├── userRouter.js │ │ ├── validateAndRefresh.js │ │ ├── visitorControllers.js │ │ └── visitorRouter.js │ ├── readMe.txt │ └── test │ ├── CustomArticleMapper.java │ ├── java │ ├── Test.java │ ├── genCode │ │ ├── Main.java │ │ ├── genTemple │ │ │ ├── Adapter │ │ │ ├── Dto │ │ │ ├── ServiceImp │ │ │ └── readme.txt │ │ └── utils │ │ │ ├── CenUtil.java │ │ │ ├── GenMain.java │ │ │ ├── GenSqlUtil.java │ │ │ ├── MyPlus.java │ │ │ ├── MySQLLimitPlugin.java │ │ │ └── MybatisUtil.java │ └── unitTest │ │ ├── LuceneTest.java │ │ ├── UpdateProjectId.java │ │ └── WordXmlHander.java │ ├── resources │ ├── dao-generator.xml │ └── test.txt │ └── test.xml └── 部署帮助文档.md /api/.gitignore: -------------------------------------------------------------------------------- 1 | **/.idea 2 | **/*.iml 3 | **/target/ 4 | */*.log 5 | */*.log.* 6 | *.iml 7 | .DS_Store 8 | .project 9 | .settings 10 | .classpath 11 | **/*.DS_Store -------------------------------------------------------------------------------- /api/src/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/.DS_Store -------------------------------------------------------------------------------- /api/src/main/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/.DS_Store -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/ability/ProjectAbility.java: -------------------------------------------------------------------------------- 1 | package cn.crap.ability; 2 | 3 | import cn.crap.adapter.ProjectUserAdapter; 4 | import cn.crap.dto.LoginInfoDto; 5 | import cn.crap.enu.ProjectUserType; 6 | import cn.crap.model.ProjectPO; 7 | import cn.crap.model.ProjectUserPO; 8 | import cn.crap.service.ProjectService; 9 | import cn.crap.service.ProjectUserService; 10 | import org.springframework.beans.factory.annotation.Autowired; 11 | import org.springframework.stereotype.Service; 12 | 13 | /** 14 | * 项目能力 15 | * @author Ehsan 16 | * @date 2020/2/29 23:11 17 | */ 18 | @Service 19 | public class ProjectAbility { 20 | 21 | @Autowired 22 | private ProjectService projectService; 23 | 24 | @Autowired 25 | private ProjectUserService projectUserService; 26 | 27 | /** 28 | * 添加项目:需要将自己设置为项目用户,查询的时候可以不需要关联查询 29 | * @param project 30 | * @return 31 | * @throws Exception 32 | */ 33 | public boolean addProject(ProjectPO project, LoginInfoDto user) throws Exception{ 34 | if (projectService.insert(project)) { 35 | ProjectUserPO projectUser = ProjectUserAdapter.getInitProjectUserPO(project, user); 36 | projectUser.setType(ProjectUserType.CREATOR.getByteType()); 37 | projectUser.setSequence(project.getSequence()); 38 | projectUser.setProjectName(project.getName()); 39 | return projectUserService.insert(projectUser); 40 | } 41 | return false; 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/adapter/Adapter.java: -------------------------------------------------------------------------------- 1 | package cn.crap.adapter; 2 | 3 | import cn.crap.enu.LogType; 4 | import cn.crap.model.Log; 5 | import cn.crap.utils.LoginUserHelper; 6 | import net.sf.json.JSONObject; 7 | import org.springframework.util.Assert; 8 | 9 | /** 10 | * @author Ehsan 11 | * @date 18/1/1 18:52 12 | */ 13 | public class Adapter { 14 | public static Log getLog(String id, String modelName, String remark, LogType type, Class c, Object model){ 15 | Assert.notNull(id); 16 | Assert.notNull(type); 17 | Log log = new Log(); 18 | log.setModelName(modelName); 19 | log.setRemark(remark); 20 | log.setType(type.name()); 21 | log.setContent(JSONObject.fromObject(model).toString()); 22 | log.setModelClass(c.getSimpleName()); 23 | log.setIdenty(id); 24 | try { 25 | log.setUpdateBy(LoginUserHelper.getUser().getTrueName()); 26 | }catch (Exception e){ 27 | e.printStackTrace(); 28 | } 29 | return log; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/adapter/ErrorAdapter.java: -------------------------------------------------------------------------------- 1 | package cn.crap.adapter; 2 | 3 | import cn.crap.dto.ErrorDto; 4 | import cn.crap.model.Error; 5 | import cn.crap.utils.BeanUtil; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | 11 | /** 12 | * model adapter convert model to dto 13 | * Avoid exposing sensitive data and modifying data that is not allowed to be modified 14 | */ 15 | public class ErrorAdapter { 16 | public static ErrorDto getDto(Error model){ 17 | if (model == null){ 18 | return null; 19 | } 20 | 21 | ErrorDto dto = new ErrorDto(); 22 | BeanUtil.copyProperties(model, dto); 23 | 24 | return dto; 25 | } 26 | 27 | public static Error getModel(ErrorDto dto){ 28 | if (dto == null){ 29 | return null; 30 | } 31 | Error model = new Error(); 32 | model.setId(dto.getId()); 33 | model.setErrorCode(dto.getErrorCode()); 34 | model.setErrorMsg(dto.getErrorMsg()); 35 | model.setProjectId(dto.getProjectId()); 36 | 37 | return model; 38 | } 39 | 40 | public static List getDto(List models){ 41 | if (models == null){ 42 | return new ArrayList<>(); 43 | } 44 | List dtos = new ArrayList<>(); 45 | for (Error model : models){ 46 | dtos.add(getDto(model)); 47 | } 48 | return dtos; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/adapter/SettingAdapter.java: -------------------------------------------------------------------------------- 1 | package cn.crap.adapter; 2 | 3 | import cn.crap.dto.SettingDto; 4 | import cn.crap.model.Setting; 5 | import cn.crap.utils.BeanUtil; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | 11 | /** 12 | * 用户model适配器,将DTO转为Model,将Model转为DTO 13 | * 避免暴露敏感数据和修改不允许修改得数据 14 | */ 15 | public class SettingAdapter { 16 | public static SettingDto getDto(Setting model){ 17 | if (model == null){ 18 | return null; 19 | } 20 | 21 | SettingDto dto = new SettingDto(); 22 | BeanUtil.copyProperties(model, dto); 23 | dto.setKey(model.getMkey()); 24 | 25 | return dto; 26 | } 27 | 28 | public static Setting getModel(SettingDto dto){ 29 | if (dto == null){ 30 | return null; 31 | } 32 | Setting model = new Setting(); 33 | model.setId(dto.getId()); 34 | model.setMkey(dto.getKey()); 35 | model.setRemark(dto.getRemark()); 36 | model.setValue(dto.getValue()); 37 | model.setSequence(dto.getSequence()); 38 | model.setStatus(dto.getStatus()); 39 | return model; 40 | } 41 | 42 | public static List getDto(List models){ 43 | if (models == null){ 44 | return new ArrayList<>(); 45 | } 46 | List dtos = new ArrayList<>(); 47 | for (Setting model : models){ 48 | dtos.add(getDto(model)); 49 | } 50 | return dtos; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/custom/CustomArticleDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.custom; 2 | 3 | import cn.crap.enu.ArticleStatus; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.jdbc.core.JdbcTemplate; 6 | import org.springframework.stereotype.Service; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * @author nico 2017-07-28 12 | */ 13 | @Service 14 | public class CustomArticleDao { 15 | 16 | @Autowired 17 | private JdbcTemplate jdbcTemplate; 18 | 19 | public void updateClickById(String id){ 20 | jdbcTemplate.update("update article set click=click+1 where id=?", id); 21 | } 22 | 23 | public void updateTypeToNullById(String id){ 24 | jdbcTemplate.update("update article set mkey=null where id=? and status!=" + ArticleStatus.PAGE.getStatus(), id); 25 | } 26 | 27 | public List queryTop10RecommendCategory(){ 28 | return jdbcTemplate.queryForList("select distinct category from article where category is not null and category !='' " + 29 | "and status=" + ArticleStatus.RECOMMEND.getStatus() + " limit 10", String.class); 30 | } 31 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/custom/CustomDebugDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.custom; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.jdbc.core.JdbcTemplate; 5 | import org.springframework.stereotype.Service; 6 | import org.springframework.util.Assert; 7 | 8 | /** 9 | * @author nico 2017-07-28 10 | */ 11 | @Service 12 | public class CustomDebugDao { 13 | 14 | @Autowired 15 | private JdbcTemplate jdbcTemplate; 16 | 17 | 18 | public void deleteByModuleId(String moduleId){ 19 | Assert.notNull(moduleId); 20 | jdbcTemplate.update("delete from debug where moduleId=?", moduleId); 21 | } 22 | 23 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/custom/CustomHotSearchDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.custom; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.jdbc.core.JdbcTemplate; 5 | import org.springframework.stereotype.Service; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author nico 2017-07-28 11 | */ 12 | @Service 13 | public class CustomHotSearchDao { 14 | 15 | @Autowired 16 | private JdbcTemplate jdbcTemplate; 17 | 18 | public List queryTop10(){ 19 | return jdbcTemplate.queryForList("select keyword from hot_search order by times DESC limit 10", String.class); 20 | } 21 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/ArticleDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.model.Article; 4 | import cn.crap.model.ArticleCriteria; 5 | import cn.crap.model.ArticleWithBLOBs; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | public interface ArticleDao extends BaseDao{ 11 | int countByExample(ArticleCriteria example); 12 | 13 | int deleteByExample(ArticleCriteria example); 14 | 15 | int deleteByPrimaryKey(String id); 16 | 17 | int insert(ArticleWithBLOBs record); 18 | 19 | int insertSelective(ArticleWithBLOBs record); 20 | 21 | List selectByExampleWithBLOBs(ArticleCriteria example); 22 | 23 | List
selectByExample(ArticleCriteria example); 24 | 25 | ArticleWithBLOBs selectByPrimaryKey(String id); 26 | 27 | int updateByExampleSelective(@Param("record") ArticleWithBLOBs record, @Param("example") ArticleCriteria example); 28 | 29 | int updateByExampleWithBLOBs(@Param("record") ArticleWithBLOBs record, @Param("example") ArticleCriteria example); 30 | 31 | int updateByExample(@Param("record") Article record, @Param("example") ArticleCriteria example); 32 | 33 | int updateByPrimaryKeySelective(ArticleWithBLOBs record); 34 | 35 | int updateByPrimaryKeyWithBLOBs(ArticleWithBLOBs record); 36 | 37 | int updateByPrimaryKey(Article record); 38 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/BaseDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | /** 4 | * dao基础类 5 | * @param 6 | */ 7 | @Deprecated 8 | public interface BaseDao{ 9 | int deleteByPrimaryKey(String id); 10 | int insertSelective(PO record); 11 | PO selectByPrimaryKey(String id); 12 | int updateByPrimaryKeySelective(PO record); 13 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/BugDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.model.BugPO; 4 | import cn.crap.query.BugQuery; 5 | 6 | public interface BugDao extends NewBaseDao { 7 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/BugLogDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.model.BugLogPO; 4 | import cn.crap.query.BugLogQuery; 5 | 6 | public interface BugLogDao extends NewBaseDao { 7 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/CommentDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.model.CommentPO; 4 | import cn.crap.query.CommentQuery; 5 | 6 | public interface CommentDao extends NewBaseDao { 7 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/DebugDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.model.Debug; 4 | import cn.crap.model.DebugCriteria; 5 | import java.util.List; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | public interface DebugDao extends BaseDao{ 9 | int countByExample(DebugCriteria example); 10 | 11 | int deleteByExample(DebugCriteria example); 12 | 13 | int deleteByPrimaryKey(String id); 14 | 15 | int insert(Debug record); 16 | 17 | int insertSelective(Debug record); 18 | 19 | List selectByExample(DebugCriteria example); 20 | 21 | Debug selectByPrimaryKey(String id); 22 | 23 | int updateByExampleSelective(@Param("record") Debug record, @Param("example") DebugCriteria example); 24 | 25 | int updateByExample(@Param("record") Debug record, @Param("example") DebugCriteria example); 26 | 27 | int updateByPrimaryKeySelective(Debug record); 28 | 29 | int updateByPrimaryKey(Debug record); 30 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/ErrorDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.model.Error; 4 | import cn.crap.model.ErrorCriteria; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | public interface ErrorDao extends BaseDao{ 10 | int countByExample(ErrorCriteria example); 11 | 12 | int deleteByExample(ErrorCriteria example); 13 | 14 | int deleteByPrimaryKey(String id); 15 | 16 | int insert(Error record); 17 | 18 | int insertSelective(Error record); 19 | 20 | List selectByExample(ErrorCriteria example); 21 | 22 | Error selectByPrimaryKey(String id); 23 | 24 | int updateByExampleSelective(@Param("record") Error record, @Param("example") ErrorCriteria example); 25 | 26 | int updateByExample(@Param("record") Error record, @Param("example") ErrorCriteria example); 27 | 28 | int updateByPrimaryKeySelective(Error record); 29 | 30 | int updateByPrimaryKey(Error record); 31 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/HotSearchDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.model.HotSearch; 4 | import cn.crap.model.HotSearchCriteria; 5 | import java.util.List; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | public interface HotSearchDao extends BaseDao{ 9 | int countByExample(HotSearchCriteria example); 10 | 11 | int deleteByExample(HotSearchCriteria example); 12 | 13 | int deleteByPrimaryKey(String id); 14 | 15 | int insert(HotSearch record); 16 | 17 | int insertSelective(HotSearch record); 18 | 19 | List selectByExample(HotSearchCriteria example); 20 | 21 | HotSearch selectByPrimaryKey(String id); 22 | 23 | int updateByExampleSelective(@Param("record") HotSearch record, @Param("example") HotSearchCriteria example); 24 | 25 | int updateByExample(@Param("record") HotSearch record, @Param("example") HotSearchCriteria example); 26 | 27 | int updateByPrimaryKeySelective(HotSearch record); 28 | 29 | int updateByPrimaryKey(HotSearch record); 30 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/InterfaceDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.model.Interface; 4 | import cn.crap.model.InterfaceCriteria; 5 | import cn.crap.model.InterfaceWithBLOBs; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | public interface InterfaceDao extends BaseDao{ 11 | int countByExample(InterfaceCriteria example); 12 | 13 | int deleteByExample(InterfaceCriteria example); 14 | 15 | int deleteByPrimaryKey(String id); 16 | 17 | int insert(InterfaceWithBLOBs record); 18 | 19 | int insertSelective(InterfaceWithBLOBs record); 20 | 21 | List selectByExampleWithBLOBs(InterfaceCriteria example); 22 | 23 | List selectByExample(InterfaceCriteria example); 24 | 25 | InterfaceWithBLOBs selectByPrimaryKey(String id); 26 | 27 | int updateByExampleSelective(@Param("record") InterfaceWithBLOBs record, @Param("example") InterfaceCriteria example); 28 | 29 | int updateByExampleWithBLOBs(@Param("record") InterfaceWithBLOBs record, @Param("example") InterfaceCriteria example); 30 | 31 | int updateByExample(@Param("record") Interface record, @Param("example") InterfaceCriteria example); 32 | 33 | int updateByPrimaryKeySelective(InterfaceWithBLOBs record); 34 | 35 | int updateByPrimaryKeyWithBLOBs(InterfaceWithBLOBs record); 36 | 37 | int updateByPrimaryKey(Interface record); 38 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/LogDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.model.Log; 4 | import cn.crap.model.LogCriteria; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | public interface LogDao extends BaseDao{ 10 | int countByExample(LogCriteria example); 11 | 12 | int deleteByExample(LogCriteria example); 13 | 14 | int deleteByPrimaryKey(String id); 15 | 16 | int insert(Log record); 17 | 18 | int insertSelective(Log record); 19 | 20 | List selectByExampleWithBLOBs(LogCriteria example); 21 | 22 | List selectByExample(LogCriteria example); 23 | 24 | Log selectByPrimaryKey(String id); 25 | 26 | int updateByExampleSelective(@Param("record") Log record, @Param("example") LogCriteria example); 27 | 28 | int updateByExampleWithBLOBs(@Param("record") Log record, @Param("example") LogCriteria example); 29 | 30 | int updateByExample(@Param("record") Log record, @Param("example") LogCriteria example); 31 | 32 | int updateByPrimaryKeySelective(Log record); 33 | 34 | int updateByPrimaryKeyWithBLOBs(Log record); 35 | 36 | int updateByPrimaryKey(Log record); 37 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/MenuDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.model.Menu; 4 | import cn.crap.model.MenuCriteria; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | public interface MenuDao extends BaseDao{ 10 | int countByExample(MenuCriteria example); 11 | 12 | int deleteByExample(MenuCriteria example); 13 | 14 | int deleteByPrimaryKey(String id); 15 | 16 | int insert(Menu record); 17 | 18 | int insertSelective(Menu record); 19 | 20 | List selectByExample(MenuCriteria example); 21 | 22 | Menu selectByPrimaryKey(String id); 23 | 24 | int updateByExampleSelective(@Param("record") Menu record, @Param("example") MenuCriteria example); 25 | 26 | int updateByExample(@Param("record") Menu record, @Param("example") MenuCriteria example); 27 | 28 | int updateByPrimaryKeySelective(Menu record); 29 | 30 | int updateByPrimaryKey(Menu record); 31 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/ModuleDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.model.ModulePO; 4 | import cn.crap.query.ModuleQuery; 5 | 6 | public interface ModuleDao extends NewBaseDao{ 7 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/NewBaseDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.query.BaseQuery; 4 | import org.apache.ibatis.annotations.Param; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * DAO基类,用于替换BaseDao 10 | */ 11 | 12 | public interface NewBaseDao{ 13 | int insert(PO po); 14 | 15 | int delete(@Param("id")String id); 16 | 17 | int update(PO po); 18 | 19 | PO get(@Param("id")String id); 20 | 21 | int count(@Param("query") Query query); 22 | 23 | List select(@Param("query") Query query); 24 | 25 | 26 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/ProjectDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.model.ProjectPO; 4 | import cn.crap.query.ProjectQuery; 5 | 6 | public interface ProjectDao extends NewBaseDao{ 7 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/ProjectMetaDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.model.ProjectMetaPO; 4 | import cn.crap.model.ProjectUserPO; 5 | import cn.crap.query.ProjectMetaQuery; 6 | import cn.crap.query.ProjectUserQuery; 7 | 8 | public interface ProjectMetaDao extends NewBaseDao { 9 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/ProjectUserDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.model.ProjectUserPO; 4 | import cn.crap.query.ProjectUserQuery; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | public interface ProjectUserDao extends NewBaseDao { 8 | 9 | /** 10 | * 更新项目用户排序:和项目排序一致,查询时直接使用 11 | * @param po 12 | * @return 13 | */ 14 | int batchUpdateByProjectId(ProjectUserPO po); 15 | 16 | /** 17 | * 根据项目ID删除用户 18 | * @param projectId 19 | * @return 20 | */ 21 | int deleteByProjectId(@Param("projectId") String projectId); 22 | 23 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/SettingDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.model.Setting; 4 | import cn.crap.model.SettingCriteria; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | public interface SettingDao extends BaseDao{ 10 | int countByExample(SettingCriteria example); 11 | 12 | int deleteByExample(SettingCriteria example); 13 | 14 | int deleteByPrimaryKey(String id); 15 | 16 | int insert(Setting record); 17 | 18 | int insertSelective(Setting record); 19 | 20 | List selectByExample(SettingCriteria example); 21 | 22 | Setting selectByPrimaryKey(String id); 23 | 24 | int updateByExampleSelective(@Param("record") Setting record, @Param("example") SettingCriteria example); 25 | 26 | int updateByExample(@Param("record") Setting record, @Param("example") SettingCriteria example); 27 | 28 | int updateByPrimaryKeySelective(Setting record); 29 | 30 | int updateByPrimaryKey(Setting record); 31 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/SourceDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.model.Source; 4 | import cn.crap.model.SourceCriteria; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | public interface SourceDao extends BaseDao{ 10 | int countByExample(SourceCriteria example); 11 | 12 | int deleteByExample(SourceCriteria example); 13 | 14 | int deleteByPrimaryKey(String id); 15 | 16 | int insert(Source record); 17 | 18 | int insertSelective(Source record); 19 | 20 | List selectByExample(SourceCriteria example); 21 | 22 | Source selectByPrimaryKey(String id); 23 | 24 | int updateByExampleSelective(@Param("record") Source record, @Param("example") SourceCriteria example); 25 | 26 | int updateByExample(@Param("record") Source record, @Param("example") SourceCriteria example); 27 | 28 | int updateByPrimaryKeySelective(Source record); 29 | 30 | int updateByPrimaryKey(Source record); 31 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dao/mybatis/UserDao.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dao.mybatis; 2 | 3 | import cn.crap.model.UserPO; 4 | import cn.crap.query.UserQuery; 5 | 6 | public interface UserDao extends NewBaseDao{ 7 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/ArticleDTO.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import cn.crap.model.ArticleWithBLOBs; 4 | import lombok.Data; 5 | 6 | /** 7 | */ 8 | @Data 9 | public class ArticleDTO extends ArticleWithBLOBs { 10 | private String id; 11 | private String moduleId; 12 | private String projectId; 13 | private String projectName; 14 | private String name; 15 | private String brief; 16 | private String content; 17 | private Integer click; 18 | private String type; 19 | private String typeName; 20 | private Byte status; 21 | private String statusName; 22 | private String moduleName; 23 | private String mkey; 24 | private Byte canDelete; 25 | private String category; 26 | private Byte canComment; 27 | private String canCommentName; 28 | private Integer commentCount; 29 | private Long sequence; 30 | private String markdown; 31 | private String createTimeStr; 32 | private String attributes; 33 | /** 34 | * 是否用markdown 35 | */ 36 | private Boolean useMarkdown; 37 | 38 | } 39 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/BugLogDTO.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import cn.crap.model.BugLogPO; 4 | 5 | public class BugLogDTO extends BugLogPO { 6 | 7 | private String typeStr; 8 | private String createTimeStr; 9 | private String updateTimeStr; 10 | 11 | public String getTypeStr() { 12 | return typeStr; 13 | } 14 | 15 | public void setTypeStr(String typeStr) { 16 | this.typeStr = typeStr; 17 | } 18 | 19 | public String getCreateTimeStr() { 20 | return createTimeStr; 21 | } 22 | 23 | public void setCreateTimeStr(String createTimeStr) { 24 | this.createTimeStr = createTimeStr; 25 | } 26 | 27 | public String getUpdateTimeStr() { 28 | return updateTimeStr; 29 | } 30 | 31 | public void setUpdateTimeStr(String updateTimeStr) { 32 | this.updateTimeStr = updateTimeStr; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/CategoryDto.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | public class CategoryDto { 4 | private String category; 5 | private String md5Category; 6 | public String getCategory() { 7 | return category; 8 | } 9 | public void setCategory(String category) { 10 | this.category = category; 11 | } 12 | public String getMd5Category() { 13 | return md5Category; 14 | } 15 | public void setMd5Category(String md5Category) { 16 | this.md5Category = md5Category; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/CommentDTO.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import cn.crap.model.CommentPO; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * Automatic generation by tools 9 | * dto: exchange data with view 10 | */ 11 | public class CommentDTO extends CommentPO implements Serializable { 12 | private String createTimeStr; 13 | private String updateTimeStr; 14 | 15 | private String imgCode; 16 | private boolean needImgCode = true; 17 | 18 | public String getCreateTimeStr() { 19 | return createTimeStr; 20 | } 21 | 22 | public void setCreateTimeStr(String createTimeStr) { 23 | this.createTimeStr = createTimeStr; 24 | } 25 | 26 | public String getImgCode() { 27 | return imgCode; 28 | } 29 | 30 | public void setImgCode(String imgCode) { 31 | this.imgCode = imgCode; 32 | } 33 | 34 | public boolean isNeedImgCode() { 35 | return needImgCode; 36 | } 37 | 38 | public void setNeedImgCode(boolean needImgCode) { 39 | this.needImgCode = needImgCode; 40 | } 41 | 42 | public String getUpdateTimeStr() { 43 | return updateTimeStr; 44 | } 45 | 46 | public void setUpdateTimeStr(String updateTimeStr) { 47 | this.updateTimeStr = updateTimeStr; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/CrumbDto.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import java.io.Serializable; 4 | 5 | public class CrumbDto implements Serializable{ 6 | /** 7 | * 8 | */ 9 | private static final long serialVersionUID = 1L; 10 | // 导航条 11 | String url; 12 | String name; 13 | public CrumbDto(String name, String url) { 14 | this.name = name; 15 | this.url = url; 16 | } 17 | public String getUrl() { 18 | return url; 19 | } 20 | public void setUrl(String url) { 21 | this.url = url; 22 | } 23 | public String getName() { 24 | return name; 25 | } 26 | public void setName(String name) { 27 | this.name = name; 28 | } 29 | 30 | 31 | } 32 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/DebugDto.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.util.Date; 7 | 8 | @Getter 9 | @Setter 10 | public class DebugDto{ 11 | // 废弃,接口uniKey 12 | private String id; 13 | private String name; 14 | private Date createTime; 15 | private Byte status; 16 | private Long sequence; 17 | private String interfaceId; 18 | // 废弃,模块uniKey 19 | private String moduleId; 20 | private String method; 21 | private String url; 22 | private String params; 23 | private String headers; 24 | private String paramType; 25 | private Integer version; 26 | private String uid; 27 | private String uniKey; 28 | private String moduleUniKey; 29 | private String projectUniKey; 30 | 31 | private String webModuleId; 32 | private String webProjectId; 33 | private String webId; 34 | 35 | public String getUniKey(){ 36 | return uniKey == null ? id : uniKey; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/DebugInterfaceParamDto.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.util.List; 7 | 8 | @Getter 9 | @Setter 10 | public class DebugInterfaceParamDto { 11 | private List debugs; 12 | @Deprecated 13 | private String moduleId; 14 | private String moduleUniKey; 15 | private String moduleName; 16 | private Integer version; 17 | private Byte status; 18 | @Deprecated 19 | private String projectUniKey; 20 | 21 | public String getModuleUniKey(){ 22 | return moduleUniKey == null ? moduleId : moduleUniKey; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/DictionaryDto.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import java.io.Serializable; 4 | 5 | import cn.crap.enu.DictionaryPropertyType; 6 | 7 | /** 8 | * 9 | * @author Ehsan 10 | * 11 | */ 12 | //[{"name":"name","type":"string","def":"","remark":"","notNull":"false","flag":"common"}] 13 | public class DictionaryDto implements Serializable{ 14 | /** 15 | * 16 | */ 17 | private static final long serialVersionUID = 1L; 18 | 19 | private String name; 20 | private String type; 21 | private String def = ""; 22 | private String remark =""; 23 | private String notNull; 24 | private String flag = DictionaryPropertyType.common.getName(); 25 | public String getName() { 26 | return name; 27 | } 28 | public void setName(String name) { 29 | this.name = name; 30 | } 31 | public String getType() { 32 | return type; 33 | } 34 | public void setType(String type) { 35 | this.type = type; 36 | } 37 | public String getDef() { 38 | return def; 39 | } 40 | public void setDef(String def) { 41 | this.def = def; 42 | } 43 | public String getRemark() { 44 | return remark; 45 | } 46 | public void setRemark(String remark) { 47 | this.remark = remark; 48 | } 49 | public String getNotNull() { 50 | return notNull; 51 | } 52 | public void setNotNull(String notNull) { 53 | this.notNull = notNull; 54 | } 55 | public String getFlag() { 56 | return flag; 57 | } 58 | public void setFlag(String flag) { 59 | this.flag = flag; 60 | } 61 | 62 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/FindPwdDto.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import java.io.Serializable; 4 | 5 | import cn.crap.enu.MyError; 6 | import cn.crap.framework.MyException; 7 | import cn.crap.utils.MyString; 8 | 9 | public class FindPwdDto implements Serializable{ 10 | /** 11 | * 12 | */ 13 | private static final long serialVersionUID = 1L; 14 | private String email; 15 | private String code; 16 | private String newPwd; 17 | private String imgCode; 18 | 19 | public void check() throws MyException{ 20 | if(MyString.isEmpty(email) || MyString.isEmpty(code) || MyString.isEmpty(newPwd)){ 21 | throw new MyException(MyError.E000029); 22 | } 23 | } 24 | public String getEmail() { 25 | return email; 26 | } 27 | public void setEmail(String email) { 28 | this.email = email; 29 | } 30 | public String getCode() { 31 | return code; 32 | } 33 | public void setCode(String code) { 34 | this.code = code; 35 | } 36 | public String getNewPwd() { 37 | return newPwd; 38 | } 39 | public void setNewPwd(String newPwd) { 40 | this.newPwd = newPwd; 41 | } 42 | public String getImgCode() { 43 | return imgCode; 44 | } 45 | public void setImgCode(String imgCode) { 46 | this.imgCode = imgCode; 47 | } 48 | 49 | 50 | } 51 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/HotSearchDto.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | /** 4 | * Automatic generation by tools 5 | * dto: exchange data with view 6 | */ 7 | public class HotSearchDto{ 8 | private String id; 9 | private Integer times; 10 | private String keyword; 11 | private String createTimeStr; 12 | 13 | public void setId(String id){ 14 | this.id=id; 15 | } 16 | public String getId(){ 17 | return id; 18 | } 19 | 20 | public void setTimes(Integer times){ 21 | this.times=times; 22 | } 23 | public Integer getTimes(){ 24 | return times; 25 | } 26 | 27 | public void setKeyword(String keyword){ 28 | this.keyword=keyword; 29 | } 30 | public String getKeyword(){ 31 | return keyword; 32 | } 33 | 34 | public String getCreateTimeStr() { 35 | return createTimeStr; 36 | } 37 | 38 | public void setCreateTimeStr(String createTimeStr) { 39 | this.createTimeStr = createTimeStr; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/LoginDto.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class LoginDto implements Serializable{ 11 | private static final long serialVersionUID = 1L; 12 | public String id; 13 | public String userName; 14 | public String password; 15 | public String rpassword; 16 | public String remberPwd; 17 | public String verificationCode; 18 | public String sessionAdminName; // 如果sessionAdminName 不为null,则表示已经登录 19 | public String tipMessage; 20 | public String email; 21 | public String attributes; 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/MailBean.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | public class MailBean { 3 | private String toEmail; 4 | private String subject; 5 | private String context; 6 | 7 | public String getToEmail() { 8 | return toEmail; 9 | } 10 | public void setToEmail(String toEmail) { 11 | this.toEmail = toEmail; 12 | } 13 | public String getSubject() { 14 | return subject; 15 | } 16 | public void setSubject(String subject) { 17 | this.subject = subject; 18 | } 19 | public String getContext() { 20 | return context; 21 | } 22 | public void setContext(String context) { 23 | this.context = context; 24 | } 25 | 26 | 27 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/MenuWithSubMenuDto.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | 6 | import cn.crap.model.Menu; 7 | 8 | public class MenuWithSubMenuDto implements Serializable{ 9 | 10 | /** 11 | * 12 | */ 13 | private static final long serialVersionUID = 1L; 14 | private Menu menu; 15 | private List subMenu; 16 | public Menu getMenu() { 17 | return menu; 18 | } 19 | public void setMenu(Menu menu) { 20 | this.menu = menu; 21 | } 22 | public List getSubMenu() { 23 | return subMenu; 24 | } 25 | public void setSubMenu(List subMenu) { 26 | this.subMenu = subMenu; 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/ModuleDTO.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | @Setter 7 | @Getter 8 | public class ModuleDTO { 9 | private String id; 10 | private String name; 11 | private Byte status; 12 | private Long sequence; 13 | private String url; 14 | private Byte canDelete; 15 | private String remark; 16 | private String userId; 17 | private String projectId; 18 | private String templateId; 19 | private String templateName; 20 | private Integer versionNum; 21 | private String category; 22 | private String projectName; 23 | private String createTimeStr; 24 | private Boolean hasStaticize; 25 | private String uniKey; 26 | } 27 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/PermissionDTO.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | public class PermissionDTO{ 4 | private String value; 5 | private String desc; 6 | 7 | public PermissionDTO(String value, String desc){ 8 | this.value = value; 9 | this.desc = desc; 10 | } 11 | 12 | public String getValue() { 13 | return value; 14 | } 15 | 16 | public void setValue(String value) { 17 | this.value = value; 18 | } 19 | 20 | public String getDesc() { 21 | return desc; 22 | } 23 | 24 | public void setDesc(String desc) { 25 | this.desc = desc; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/PostwomanResDTO.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.util.List; 7 | 8 | @Getter 9 | @Setter 10 | public class PostwomanResDTO { 11 | private String projectUniKey; 12 | private String projectName; 13 | private String projectCover; 14 | 15 | private List moduleList; 16 | } 17 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/ProjectDTO.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | @Getter 7 | @Setter 8 | public class ProjectDTO { 9 | private String id; 10 | private String name; 11 | private Byte status; 12 | private Long sequence; 13 | private String remark; 14 | private String userId; 15 | private String userName; 16 | private Byte type; 17 | private String typeName; 18 | private String password; 19 | private String cover; 20 | private Byte luceneSearch; 21 | private String luceneSearchName; 22 | private String statusName; 23 | private String createTimeStr; 24 | private String uniKey; 25 | /** 26 | * 访问方式 27 | */ 28 | private String visitWay; 29 | /** 30 | * 邀请链接 31 | */ 32 | private String inviteUrl; 33 | private String projectPermission; 34 | } 35 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/ProjectMetaDTO.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import cn.crap.model.ProjectMetaPO; 4 | 5 | public class ProjectMetaDTO extends ProjectMetaPO { 6 | private String typeStr; 7 | private String envUrl; 8 | private String createTimeStr; 9 | private String moduleName; 10 | 11 | public String getTypeStr() { 12 | return typeStr; 13 | } 14 | 15 | public void setTypeStr(String typeStr) { 16 | this.typeStr = typeStr; 17 | } 18 | 19 | public String getEnvUrl() { 20 | return envUrl; 21 | } 22 | 23 | public void setEnvUrl(String envUrl) { 24 | this.envUrl = envUrl; 25 | } 26 | 27 | public String getCreateTimeStr() { 28 | return createTimeStr; 29 | } 30 | 31 | public void setCreateTimeStr(String createTimeStr) { 32 | this.createTimeStr = createTimeStr; 33 | } 34 | 35 | public String getModuleName() { 36 | return moduleName; 37 | } 38 | 39 | public void setModuleName(String moduleName) { 40 | this.moduleName = moduleName; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/ProjectUserDto.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import cn.crap.model.ProjectUserPO; 4 | 5 | import java.util.List; 6 | import java.util.Set; 7 | 8 | public class ProjectUserDto extends ProjectUserPO { 9 | private String projectName; 10 | private List crShowPermissionList; 11 | private Set crShowPermissionSet; 12 | private String permissionStr; 13 | 14 | 15 | public String getProjectName() { 16 | return projectName; 17 | } 18 | 19 | public void setProjectName(String projectName) { 20 | this.projectName = projectName; 21 | } 22 | 23 | public List getCrShowPermissionList() { 24 | return crShowPermissionList; 25 | } 26 | 27 | public void setCrShowPermissionList(List crShowPermissionList) { 28 | this.crShowPermissionList = crShowPermissionList; 29 | } 30 | 31 | public Set getCrShowPermissionSet() { 32 | return crShowPermissionSet; 33 | } 34 | 35 | public void setCrShowPermissionSet(Set crShowPermissionSet) { 36 | this.crShowPermissionSet = crShowPermissionSet; 37 | } 38 | 39 | public String getPermissionStr() { 40 | return permissionStr; 41 | } 42 | 43 | public void setPermissionStr(String permissionStr) { 44 | this.permissionStr = permissionStr; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/UserDTO.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import cn.crap.enu.UserType; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.io.Serializable; 8 | 9 | 10 | @Getter 11 | @Setter 12 | public class UserDTO implements Serializable{ 13 | 14 | private static final long serialVersionUID = 1L; 15 | private String id; 16 | private String userName; 17 | private String roleId = ""; 18 | private String trueName; 19 | private String roleName = ""; 20 | private String auth = ""; 21 | private String authName = ""; 22 | private Byte type; 23 | private String email; 24 | private String avatarUrl; 25 | private Integer loginType; 26 | private String loginTypeStr; 27 | private String thirdlyId; 28 | private Byte status; 29 | private Long sequence; 30 | private String createTimeStr; 31 | private String attributes; 32 | private String attrKey; 33 | private String attrVal; 34 | 35 | public String getTypeName(){ 36 | if (type == null){ 37 | return ""; 38 | } 39 | return UserType.getNameByValue(type); 40 | } 41 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/XmlParamsDto.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import javax.xml.bind.annotation.XmlRootElement; 4 | 5 | @XmlRootElement(name="users") 6 | public class XmlParamsDto { 7 | private String name; 8 | private String value; 9 | public String getName() { 10 | return name; 11 | } 12 | public void setName(String name) { 13 | this.name = name; 14 | } 15 | public String getValue() { 16 | return value; 17 | } 18 | public void setValue(String value) { 19 | this.value = value; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/thirdly/GitHubAccessToken.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto.thirdly; 2 | 3 | public class GitHubAccessToken { 4 | private String access_token; 5 | 6 | public String getAccess_token() { 7 | return access_token; 8 | } 9 | 10 | public void setAccess_token(String access_token) { 11 | this.access_token = access_token; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/dto/thirdly/GitHubUser.java: -------------------------------------------------------------------------------- 1 | package cn.crap.dto.thirdly; 2 | 3 | import java.io.Serializable; 4 | 5 | public class GitHubUser implements Serializable{ 6 | /** 7 | * 8 | */ 9 | private static final long serialVersionUID = 1L; 10 | private String login;// 用户登录名 11 | private String id;// 用户唯一编码 12 | private String avatar_url;// 用户头像 13 | private String email; 14 | private String name;// 用户昵称 15 | 16 | public String getLogin() { 17 | return login; 18 | } 19 | 20 | public void setLogin(String login) { 21 | this.login = login; 22 | } 23 | 24 | public String getId() { 25 | return id; 26 | } 27 | 28 | public void setId(String id) { 29 | this.id = id; 30 | } 31 | 32 | public String getAvatar_url() { 33 | return avatar_url; 34 | } 35 | 36 | public void setAvatar_url(String avatar_url) { 37 | this.avatar_url = avatar_url; 38 | } 39 | 40 | public String getEmail() { 41 | return email; 42 | } 43 | 44 | public void setEmail(String email) { 45 | this.email = email; 46 | } 47 | 48 | public String getName() { 49 | return name; 50 | } 51 | 52 | public void setName(String name) { 53 | this.name = name; 54 | } 55 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/AdminPermissionEnum.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum AdminPermissionEnum { 4 | SUPER("超级管理员"),SETTING("系统设置"),USER("用户管理"),MENU("菜单管理"),HOT_SEARCH("搜索热词管理"), PROJECT("项目管理"); 5 | private final String name; 6 | 7 | public static String getValue(String name){ 8 | try{ 9 | return AdminPermissionEnum.valueOf(name).getName(); 10 | }catch(Exception e){ 11 | return ""; 12 | } 13 | } 14 | 15 | AdminPermissionEnum(String name){ 16 | this.name = name; 17 | } 18 | public String getName(){ 19 | return name; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/ArticleStatus.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum ArticleStatus { 4 | /** 5 | * PAGE 站点页面,不可删除(锁定),key为唯一 6 | */ 7 | COMMON("普通", 1), RECOMMEND("推荐", 2), PAGE("站点页面", 100); 8 | private final int status; 9 | private final String name; 10 | 11 | ArticleStatus(String name, int status){ 12 | this.status = status; 13 | this.name = name; 14 | } 15 | 16 | public static String getNameByValue(Byte status){ 17 | if (status == null){ 18 | return ""; 19 | } 20 | for(ArticleStatus articleStatus : ArticleStatus.values()){ 21 | if(articleStatus.getStatus() == status) 22 | return articleStatus.getName(); 23 | } 24 | return ""; 25 | } 26 | 27 | public Byte getStatus(){ 28 | return Byte.valueOf(status+""); 29 | } 30 | 31 | public String getName(){ 32 | return name; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/ArticleType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum ArticleType { 4 | DICTIONARY("项目数据库表"), ARTICLE("文档"); 5 | private final String name; 6 | 7 | public static String getByEnumName(String enumName){ 8 | for( ArticleType article : ArticleType.values()){ 9 | if(article.name().equals(enumName)){ 10 | return article.getName(); 11 | } 12 | } 13 | return ""; 14 | } 15 | 16 | ArticleType(String name){ 17 | this.name = name; 18 | } 19 | public String getName(){ 20 | return name; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/AttributeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * 属性字段 7 | */ 8 | public enum AttributeEnum { 9 | MARK_DOWN("markdown", "1", "文章是否是markdown模式"), 10 | ENV_URL("envUrl", "", ""), 11 | VIP_POST_WOMAN_PROJECT_NUM("vipPostWoman", "50", "插件VIP用户项目数量"), 12 | VIP_POST_WOMAN_INTER_NUM("vipPostWomanInterNum", "200", "插件VIP用户接口数量"), 13 | 14 | LOGIN_AUTH_CODE("loginAuthCode", "", "通过第三方平台登录授权码"); 15 | 16 | @Getter 17 | private final String value; 18 | 19 | @Getter 20 | private final String key; 21 | 22 | @Getter 23 | private final String desc; 24 | 25 | AttributeEnum(String key, String value, String desc){ 26 | this.value = value; 27 | this.key = key; 28 | this.desc = desc; 29 | } 30 | 31 | public static AttributeEnum getNameByKey(String key){ 32 | if (key == null){ 33 | return null; 34 | } 35 | for(AttributeEnum articleStatus : AttributeEnum.values()){ 36 | if(articleStatus.getKey().equals(key)) 37 | return articleStatus; 38 | } 39 | return null; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/BugLogType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum BugLogType { 4 | // 操作类型:1标题,2内容,3状态,4优先级,5严重程度,6问题类型,7模块,8执行人,9测试,10抄送人 5 | TITLE("标题", 1), CONTENT("描述", 2), STATUS("状态", 3), PRIORITY("优先级", 4), SEVERITY("严重程度", 5), TYPE("问题类型", 6), 6 | MODULE("模块", 7), EXECUTOR("执行人", 8), TESTER("测试", 9), TRACER("抄送人", 10); 7 | 8 | private final String name; 9 | private final int type; 10 | 11 | public static String getNameByType(Byte type){ 12 | for( BugLogType bugLogType : BugLogType.values()){ 13 | if(bugLogType.getByteType().equals(type)){ 14 | return bugLogType.getName(); 15 | } 16 | } 17 | return ""; 18 | } 19 | 20 | BugLogType(String name, int type){ 21 | this.name = name; 22 | this.type = type; 23 | } 24 | public String getName(){ 25 | return name; 26 | } 27 | 28 | public Byte getByteType(){ 29 | return new Byte(type + ""); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/BugPriority.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | import java.util.Optional; 4 | 5 | /** 6 | * bug严重程度 7 | */ 8 | public enum BugPriority { 9 | /** 10 | * 优先级:1低,2中,3高,4紧急 11 | */ 12 | LOW("1", "低"), MIDDLE("2", "中"), HIGH("3", "高"), URGENT("4","紧急"); 13 | private final String value; 14 | private final String name; 15 | 16 | public static BugPriority getByValue(String value){ 17 | return getByValue(Byte.parseByte(value)); 18 | } 19 | 20 | public static BugPriority getByValue(Byte value){ 21 | if (value == null){ 22 | return null; 23 | } 24 | for(BugPriority status : BugPriority.values()){ 25 | if(status.value.equals(value + "")){ 26 | return status; 27 | } 28 | } 29 | return null; 30 | } 31 | 32 | public static String getNameByValue(Byte value){ 33 | BugPriority priority = getByValue(value); 34 | return Optional.ofNullable(priority).map(s->s.getName()).orElse(""); 35 | } 36 | 37 | BugPriority(String value, String name){ 38 | this.value = value; 39 | this.name = name; 40 | } 41 | 42 | public Byte getByteValue(){ 43 | return new Byte(value); 44 | } 45 | 46 | public String getValue(){ 47 | return value; 48 | } 49 | 50 | public String getName() { 51 | return name; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/BugSeverity.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | import java.util.Optional; 4 | 5 | /** 6 | * bug严重程度 7 | */ 8 | public enum BugSeverity { 9 | /** 10 | * 严重程度:1-blocker,2-Major,3-Normal,4-Trivial 11 | */ 12 | BLOCK("1", "阻塞"), MAJOR("2", "严重"), NORMAL("3", "普通"), TRIVIAL("4","不重要"); 13 | private final String value; 14 | private final String name; 15 | 16 | public static BugSeverity getByValue(String value){ 17 | return getByValue(Byte.parseByte(value)); 18 | } 19 | 20 | public static BugSeverity getByValue(Byte value){ 21 | if (value == null){ 22 | return null; 23 | } 24 | for( BugSeverity status : BugSeverity.values()){ 25 | if(status.value.equals(value + "")){ 26 | return status; 27 | } 28 | } 29 | return null; 30 | } 31 | 32 | 33 | public static String getNameByValue(Byte value){ 34 | BugSeverity severity = getByValue(value); 35 | return Optional.ofNullable(severity).map(s->s.getName()).orElse(""); 36 | } 37 | 38 | BugSeverity(String value, String name){ 39 | this.value = value; 40 | this.name = name; 41 | } 42 | 43 | public Byte getByteValue(){ 44 | return new Byte(value); 45 | } 46 | 47 | public String getValue(){ 48 | return value; 49 | } 50 | 51 | public String getName() { 52 | return name; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/BugType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | import java.util.Optional; 4 | 5 | /** 6 | * bug严重程度 7 | */ 8 | public enum BugType { 9 | /** 10 | * 问题类型:1线上问题,2功能缺陷,3需求问题,4性能瓶颈,5反馈意见 11 | */ 12 | ONLINE("1", "线上问题"), 13 | FUNCTION("2", "功能缺陷"), 14 | DEMAND("3", "需求问题"), 15 | PERFORMANCE("4","性能瓶颈"), 16 | SUGGEST("5", "反馈意见"); 17 | private final String value; 18 | private final String name; 19 | 20 | public static BugType getByValue(String value){ 21 | return getByValue(Byte.parseByte(value)); 22 | } 23 | 24 | 25 | public static BugType getByValue(Byte value){ 26 | if (value == null){ 27 | return null; 28 | } 29 | for(BugType status : BugType.values()){ 30 | if(status.value.equals(value + "")){ 31 | return status; 32 | } 33 | } 34 | return null; 35 | } 36 | 37 | public static String getNameByValue(Byte value){ 38 | BugType type = getByValue(value); 39 | return Optional.ofNullable(type).map(s->s.getName()).orElse(""); 40 | } 41 | 42 | 43 | BugType(String value, String name){ 44 | this.value = value; 45 | this.name = name; 46 | } 47 | 48 | public Byte getByteValue(){ 49 | return new Byte(value); 50 | } 51 | 52 | public String getValue(){ 53 | return value; 54 | } 55 | 56 | public String getName() { 57 | return name; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/CanDeleteEnum.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum CanDeleteEnum { 4 | CAN("可以删除", 1), CAN_NOT("不可以删除", 0); 5 | private final int canDelete; 6 | private final String name; 7 | 8 | CanDeleteEnum(String name, int status){ 9 | this.canDelete = status; 10 | this.name = name; 11 | } 12 | 13 | public static String getNameByValue(Byte status){ 14 | if (status == null){ 15 | return ""; 16 | } 17 | for(CanDeleteEnum articleStatus : CanDeleteEnum.values()){ 18 | if(articleStatus.getCanDelete() == status) 19 | return articleStatus.getName(); 20 | } 21 | return ""; 22 | } 23 | 24 | public Byte getCanDelete(){ 25 | return Byte.valueOf(canDelete +""); 26 | } 27 | 28 | public String getName(){ 29 | return name; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/CommentType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum CommentType { 4 | ARTICLE("文档评论", "ARTICLE"), BUG("缺陷评论", "BUG"); 5 | private final String type; 6 | private final String name; 7 | 8 | CommentType(String name, String type){ 9 | this.type = type; 10 | this.name = name; 11 | } 12 | 13 | public static String getNameByValue(String type){ 14 | if (type == null){ 15 | return ""; 16 | } 17 | for(CommentType commentType : CommentType.values()){ 18 | if(commentType.getType().equals(type)) 19 | return commentType.getName(); 20 | } 21 | return ""; 22 | } 23 | 24 | public String getType(){ 25 | return type; 26 | } 27 | 28 | public String getName(){ 29 | return name; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/CommonEnum.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum CommonEnum { 4 | TRUE("true", new Byte("1")), 5 | FALSE("false", new Byte(("0"))); 6 | private final String stringValue; 7 | private final Byte byteValue; 8 | 9 | 10 | private CommonEnum(String stringValue, Byte byteValue){ 11 | this.stringValue = stringValue; 12 | this.byteValue = byteValue; 13 | } 14 | 15 | public Byte getByteValue(){ 16 | return byteValue; 17 | } 18 | 19 | public String getStringValue(){ 20 | return stringValue; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/DictionaryPropertyType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum DictionaryPropertyType { 4 | 5 | 6 | primary("主键","primary"), 7 | common("普通","common"), 8 | associate("关联","associate"), 9 | foreign("外键","foreign"); 10 | 11 | private String name; 12 | private String remark; 13 | 14 | private DictionaryPropertyType(String remark,String name){ 15 | this.name = name; 16 | this.remark = remark; 17 | } 18 | 19 | 20 | // 普通方法 21 | public static String getRemark(String name) 22 | { 23 | for (DictionaryPropertyType c : DictionaryPropertyType.values()) 24 | { 25 | if (c.getName() == name) 26 | { 27 | return c.getRemark(); 28 | } 29 | } 30 | return ""; 31 | } 32 | 33 | public String getName() { 34 | return name; 35 | } 36 | 37 | public void setName(String name) { 38 | this.name = name; 39 | } 40 | 41 | public String getRemark() { 42 | return remark; 43 | } 44 | 45 | public void setRemark(String remark) { 46 | this.remark = remark; 47 | } 48 | 49 | 50 | 51 | 52 | } 53 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/GenerateType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum GenerateType { 4 | MY_BATIS_XML("MyBatis xml"), JAVA_PO("java 对象"); 5 | private final String name; 6 | 7 | public static String getByEnumName(String enumName){ 8 | for( GenerateType article : GenerateType.values()){ 9 | if(article.name().equals(enumName)){ 10 | return article.getName(); 11 | } 12 | } 13 | return ""; 14 | } 15 | 16 | GenerateType(String name){ 17 | this.name = name; 18 | } 19 | public String getName(){ 20 | return name; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/IconfontCode.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum IconfontCode { 4 | GET("","G"), 5 | POST("", "P"), 6 | PASSWORD("", "密码"), 7 | SEND("", "发送"), 8 | SPEED_UP("", "加速"), 9 | HELP("", "帮助"), 10 | NOTICE("", "通知"), 11 | RECOMMEND("", "推荐"), 12 | ERM("", "二维码"), 13 | CLICK("", "时间"), 14 | TIME("", "时间"), 15 | CRY("", "哭脸"), 16 | DIR("", "目录"), 17 | SETTING("", "设置"), 18 | PDF("", "PDF"), 19 | DATA("", "数据"), 20 | COPY("", "拷贝"), 21 | CATEGORY("", "分类"), 22 | EDIT("", "编辑"), 23 | INTER("", "接口"), 24 | MODULE("", "模块"), 25 | REFRESH("", "刷新"), 26 | SEARCH("", "搜索"), 27 | DELETE("", "删除"), 28 | USER("", "用户"), 29 | SAVE("", "保存"), 30 | ON_WAY("", "趋势"), 31 | DOLLAR("", "美元"), 32 | DEBUG("", "调试"), 33 | BUG("", "BUG"), 34 | CLOSE("", "关闭"); 35 | private String name; 36 | private String value; 37 | 38 | private IconfontCode(String value, String name){ 39 | this.name = name; 40 | this.value = value; 41 | } 42 | public String getName(){ 43 | return name; 44 | } 45 | public String getValue(){ 46 | return value; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/IndexPageUrl.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum IndexPageUrl { 4 | INDEX_HTML("dashboard.htm", "数据大盘"), 5 | RECOMMEND_PROJECT("index.do#/project/list?projectShowType=4","推荐项目"), 6 | MY_PROJECT("index.do#/project/list?projectShowType=3","我的项目"); 7 | private String name; 8 | private String value; 9 | 10 | private IndexPageUrl(String value, String name){ 11 | this.name = name; 12 | this.value = value; 13 | } 14 | public String getName(){ 15 | return name; 16 | } 17 | public String getValue(){ 18 | return value; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/InterfaceContentType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | import org.springframework.util.StringUtils; 4 | 5 | public enum InterfaceContentType { 6 | JSON("application/json", "application/json"), HTML("text/html", "text/html"), 7 | X_APPLICATION("x-application", "x-application"), XML("application/xml", "application/xml"); 8 | private final String name; 9 | private final String type; 10 | 11 | public static InterfaceContentType getByType(String type){ 12 | if (StringUtils.isEmpty(type)){ 13 | return null; 14 | } 15 | 16 | for( InterfaceContentType contentType : InterfaceContentType.values()){ 17 | if(contentType.getType().equals(type)){ 18 | return contentType; 19 | } 20 | } 21 | return null; 22 | } 23 | 24 | public static String getNameByType(String type){ 25 | return getByType(type) == null ? "" : getByType(type).getName(); 26 | } 27 | 28 | InterfaceContentType(String name, String type){ 29 | this.name = name; 30 | this.type = type; 31 | } 32 | public String getName(){ 33 | return name; 34 | } 35 | 36 | public String getType() { 37 | return type; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/InterfaceStatus.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum InterfaceStatus { 4 | IDSCARD("0", "废弃"), ONLINE("1", "已上线"),DEVELOPING("2", "开发中"),TESTING("3", "测试中"); 5 | private final String value; 6 | private final String name; 7 | 8 | public static String getNameByValue(Byte value){ 9 | for( InterfaceStatus status : InterfaceStatus.values()){ 10 | if(status.value.equals(value + "")){ 11 | return status.getName(); 12 | } 13 | } 14 | return ""; 15 | } 16 | 17 | private InterfaceStatus(String value, String name){ 18 | this.value = value; 19 | this.name = name; 20 | } 21 | 22 | public Byte getByteValue(){ 23 | return new Byte(value); 24 | } 25 | 26 | public String getValue(){ 27 | return value; 28 | } 29 | 30 | public String getName() { 31 | return name; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/LogType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum LogType { 4 | DELTET("删除"),UPDATE("修改"); 5 | private final String name; 6 | 7 | private LogType(String name){ 8 | this.name = name; 9 | } 10 | public String getName(){ 11 | return name; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/LoginType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum LoginType { 4 | 5 | 6 | COMMON("普通登录",0), 7 | GITHUB("GitHub",1), 8 | OSCHINA("OsChina",2); 9 | 10 | private String name; 11 | private int value; 12 | 13 | private LoginType(String name,int value){ 14 | this.name = name; 15 | this.value = value; 16 | } 17 | 18 | public LoginType getMonitorType(int value){ 19 | for (LoginType c : LoginType.values()) 20 | { 21 | if (c.getValue() == value) 22 | { 23 | return c; 24 | } 25 | } 26 | return null; 27 | } 28 | 29 | // 普通方法 30 | public static String getName(int value) 31 | { 32 | for (LoginType c : LoginType.values()) 33 | { 34 | if (c.getValue() == value) 35 | { 36 | return c.getName(); 37 | } 38 | } 39 | return ""; 40 | } 41 | public String getName() { 42 | return name; 43 | } 44 | public void setName(String name) { 45 | this.name = name; 46 | } 47 | public int getValue() { 48 | return value; 49 | } 50 | public void setValue(int value) { 51 | this.value = value; 52 | } 53 | 54 | 55 | 56 | } 57 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/LuceneSearchType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum LuceneSearchType { 4 | 5 | 6 | No("不开放搜索",new Byte("0")), 7 | Yes("开放搜索",new Byte("1")); 8 | 9 | private String name; 10 | private byte value; 11 | 12 | LuceneSearchType(String name, byte value){ 13 | this.name = name; 14 | this.value = value; 15 | } 16 | 17 | public LuceneSearchType getMonitorType(Integer value){ 18 | if (value == null){ 19 | return null; 20 | } 21 | for (LuceneSearchType c : LuceneSearchType.values()) 22 | { 23 | if (c.getValue() == value) 24 | { 25 | return c; 26 | } 27 | } 28 | return null; 29 | } 30 | 31 | // 普通方法 32 | public static String getName(Byte value) 33 | { 34 | if (value == null){ 35 | return ""; 36 | } 37 | for (LuceneSearchType c : LuceneSearchType.values()) 38 | { 39 | if (c.getValue() == value) 40 | { 41 | return c.getName(); 42 | } 43 | } 44 | return ""; 45 | } 46 | public String getName() { 47 | return name; 48 | } 49 | public void setName(String name) { 50 | this.name = name; 51 | } 52 | public int getValue() { 53 | return value; 54 | } 55 | 56 | public Byte getByteValue() { 57 | return new Byte(value); 58 | } 59 | 60 | public void setValue(byte value) { 61 | this.value = value; 62 | } 63 | 64 | 65 | 66 | } 67 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/MenuType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum MenuType { 4 | FRONT("前端左侧菜单"),BOTTOM("前端底部菜单"),TOP("前端顶部菜单"),FUNCTION("功能介绍"),FRIEND("底部友情链接"); 5 | private final String chineseName; 6 | 7 | public static String getChineseNameByValue(String enumName){ 8 | for( MenuType menuType : MenuType.values()){ 9 | if(menuType.name().equals(enumName)){ 10 | return menuType.getChineseName(); 11 | } 12 | } 13 | return ""; 14 | } 15 | 16 | private MenuType(String name){ 17 | this.chineseName = name; 18 | } 19 | public String getChineseName(){ 20 | return chineseName; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/MonitorType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum MonitorType { 4 | 5 | 6 | No("不监控",0), 7 | Network("网络异常",1), 8 | NetworkInclude("网络异常、包含指定字符串",2), 9 | NetworkNotInclude("网络异常、不包含指定字符串",3), 10 | NetworkNotEqual("网络异常、不等于指定字符串",4), 11 | NetworkEqual("网络异常、等于指定字符串",5); 12 | 13 | private String name; 14 | private int value; 15 | 16 | private MonitorType(String name,int value){ 17 | this.name = name; 18 | this.value = value; 19 | } 20 | 21 | public MonitorType getMonitorType(int value){ 22 | for (MonitorType c : MonitorType.values()) 23 | { 24 | if (c.getValue() == value) 25 | { 26 | return c; 27 | } 28 | } 29 | return null; 30 | } 31 | 32 | // 普通方法 33 | public static String getName(int value) 34 | { 35 | for (MonitorType c : MonitorType.values()) 36 | { 37 | if (c.getValue() == value) 38 | { 39 | return c.getName(); 40 | } 41 | } 42 | return ""; 43 | } 44 | public String getName() { 45 | return name; 46 | } 47 | public void setName(String name) { 48 | this.name = name; 49 | } 50 | public int getValue() { 51 | return value; 52 | } 53 | public void setValue(int value) { 54 | this.value = value; 55 | } 56 | 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/ProjectMetaType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum ProjectMetaType { 4 | ENV(1, "环境"); 5 | 6 | private final Byte type; 7 | private final String name; 8 | 9 | public static String getNameByType(Byte type){ 10 | if (type == null){ 11 | return ""; 12 | } 13 | for( ProjectMetaType metaType : ProjectMetaType.values()){ 14 | if(metaType.getType().equals(type)){ 15 | return metaType.getName(); 16 | } 17 | } 18 | return ""; 19 | } 20 | 21 | ProjectMetaType(int type, String name){ 22 | this.type = (byte) type; 23 | this.name = name; 24 | } 25 | public String getName(){ 26 | return name; 27 | } 28 | 29 | public Byte getType(){ 30 | return type; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/ProjectShowType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum ProjectShowType { 4 | ALL("所有项目", 0), MY_CREATE("我创建的项目",1), JOIN("我加入的项目",2), CREATE_JOIN("创建或加入的项目", 3), RECOMMEND("推荐项目", 4); 5 | private final int type; 6 | private final String name; 7 | 8 | ProjectShowType(String name, int type){ 9 | this.type = type; 10 | this.name = name; 11 | } 12 | 13 | public static String getNameByValue(Byte type){ 14 | if (type == null){ 15 | return ""; 16 | } 17 | for(ProjectShowType projectType : ProjectShowType.values()){ 18 | if(projectType.getType() == type) { 19 | return projectType.getName(); 20 | } 21 | } 22 | return ""; 23 | } 24 | 25 | public int getType(){ 26 | return type; 27 | } 28 | 29 | public byte getByteType(){ 30 | return new Byte(type + ""); 31 | } 32 | public String getName(){ 33 | return name; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/ProjectStatus.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum ProjectStatus { 4 | PLUG("插件项目", -1),COMMON("普通项目", 1),RECOMMEND("推荐项目", 2); 5 | private final int status; 6 | private final String name; 7 | 8 | ProjectStatus(String name, int status){ 9 | this.status = status; 10 | this.name = name; 11 | } 12 | 13 | public static String getNameByValue(Byte status){ 14 | if (status == null){ 15 | return ""; 16 | } 17 | for(ProjectStatus projectStatus : ProjectStatus.values()){ 18 | if(projectStatus.getStatus() == status) 19 | return projectStatus.getName(); 20 | } 21 | return ""; 22 | } 23 | 24 | public Byte getStatus(){ 25 | return Byte.valueOf(status+""); 26 | } 27 | 28 | public String getName(){ 29 | return name; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/ProjectType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum ProjectType { 4 | PRIVATE("私有项目", 1), PUBLIC("公开项目",2); 5 | private final int type; 6 | private final String name; 7 | 8 | ProjectType(String name, int type){ 9 | this.type = type; 10 | this.name = name; 11 | } 12 | 13 | public static String getNameByValue(Byte type){ 14 | if (type == null){ 15 | return ""; 16 | } 17 | for(ProjectType projectType : ProjectType.values()){ 18 | if(projectType.getType() == type) { 19 | return projectType.getName(); 20 | } 21 | } 22 | return ""; 23 | } 24 | 25 | public int getType(){ 26 | return type; 27 | } 28 | 29 | public byte getByteType(){ 30 | return new Byte(type + ""); 31 | } 32 | public String getName(){ 33 | return name; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/ProjectUserStatus.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum ProjectUserStatus { 4 | NORMAL("正常", 1); 5 | private final int status; 6 | private final String name; 7 | 8 | ProjectUserStatus(String name, int status){ 9 | this.status = status; 10 | this.name = name; 11 | } 12 | 13 | public static String getNameByValue(Byte status){ 14 | if (status == null){ 15 | return ""; 16 | } 17 | for(ProjectUserStatus projectStatus : ProjectUserStatus.values()){ 18 | if(projectStatus.getStatus() == status) 19 | return projectStatus.getName(); 20 | } 21 | return ""; 22 | } 23 | 24 | public Byte getStatus(){ 25 | return Byte.valueOf(status+""); 26 | } 27 | 28 | public String getName(){ 29 | return name; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/ProjectUserType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum ProjectUserType { 4 | CREATOR("创建人", 1), MEMBER("成员", 2); 5 | 6 | private final String name; 7 | private final int type; 8 | 9 | public static String getNameByType(Byte type){ 10 | for( ProjectUserType bugLogType : ProjectUserType.values()){ 11 | if(bugLogType.getByteType().equals(type)){ 12 | return bugLogType.getName(); 13 | } 14 | } 15 | return ""; 16 | } 17 | 18 | ProjectUserType(String name, int type){ 19 | this.name = name; 20 | this.type = type; 21 | } 22 | public String getName(){ 23 | return name; 24 | } 25 | 26 | public Byte getByteType(){ 27 | return new Byte(type + ""); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/RequestMethod.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum RequestMethod { 4 | POST("POST"),GET("GET"),PUT("PUT"),HEAD("HEAD"),DELETE("DELETE"),OPTIONS("OPTIONS"),TRACE("TRACE"),PATCH("PATCH"); 5 | private final String name; 6 | 7 | private RequestMethod(String name){ 8 | this.name = name; 9 | } 10 | public String getName(){ 11 | return name; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/SettingStatus.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum SettingStatus { 4 | /** 5 | * 前端配置会返回至浏览器,后端配资只在服务端使用 6 | */ 7 | DELETE("删除", -1), COMMON("前端配置", 1), HIDDEN("后端设置", 100); 8 | private final int status; 9 | private final String name; 10 | 11 | SettingStatus(String name, int status){ 12 | this.status = status; 13 | this.name = name; 14 | } 15 | 16 | public static String getNameByValue(Byte status){ 17 | if (status == null){ 18 | return ""; 19 | } 20 | for(SettingStatus projectStatus : SettingStatus.values()){ 21 | if(projectStatus.getStatus() == status) 22 | return projectStatus.getName(); 23 | } 24 | return ""; 25 | } 26 | 27 | public Byte getStatus(){ 28 | return Byte.valueOf(status+""); 29 | } 30 | 31 | public String getName(){ 32 | return name; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/SettingType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum SettingType { 4 | IMAGE("图片"), TEXT("文本"),COLOR("颜色"), SELECT("下拉选项"), SEL_IN("选择或输入"), INDEXPAGE("首页地址"); 5 | private final String name; 6 | 7 | public static String getName(String value){ 8 | try{ 9 | return SettingType.valueOf(value).getName(); 10 | }catch(Exception e){ 11 | return ""; 12 | } 13 | } 14 | private SettingType(String name){ 15 | this.name = name; 16 | } 17 | 18 | public String getName(){ 19 | return name; 20 | } 21 | 22 | public String getValue(){ 23 | return this.name(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/TableId.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | import lombok.Getter; 4 | import org.springframework.util.Assert; 5 | 6 | public enum TableId { 7 | /** 8 | * DICTIONARY:数据库表,没有用到,但是创建索引时需要使用,区分数据类型 9 | */ 10 | DICTIONARY("00", "数据字典", "dictionary"), ARTICLE("01", "文章", "article"), SETTING("02"), ERROR("03", "状态码", "error"), COMMENT("04"), 11 | MENU("05"), USER("06"),PROJECT("07"), LOG("08"), MODULE("09"),PROJECT_USER("10"),ROLE("11"), 12 | INTERFACE("12", "接口", "interface"),SOURCE("13", "文档", "source"), DEBUG("14"), HOT_SEARCH("15"), BUG("16", "缺陷", "bug"), 13 | BUG_LOG("17"),PROJECT_META("18"); 14 | 15 | @Getter 16 | private final String id; 17 | @Getter 18 | private final String tableName; 19 | @Getter 20 | private final String tableEnName; 21 | 22 | TableId(String id){ 23 | this.id = id; 24 | this.tableName = ""; 25 | this.tableEnName = ""; 26 | } 27 | 28 | TableId(String id, String tableName, String tableEnName){ 29 | this.id = id; 30 | this.tableName = tableName; 31 | this.tableEnName = tableEnName; 32 | } 33 | 34 | public static TableId getByValue(String value){ 35 | Assert.notNull(value); 36 | for(TableId tableId : TableId.values()){ 37 | if(tableId.getId().equals(value)){ 38 | return tableId; 39 | } 40 | } 41 | return null; 42 | } 43 | 44 | public static String getNameByValue(String value){ 45 | Assert.notNull(value); 46 | return getByValue(value).getTableName(); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/UserStatus.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum UserStatus { 4 | 5 | FORBID("禁用", Byte.valueOf("0")), INVALID("邮箱未验证",Byte.valueOf("1")), VALID("邮箱验证成功",Byte.valueOf("2")); 6 | private final byte type; 7 | private final String name; 8 | 9 | UserStatus(String name, byte type){ 10 | this.type = type; 11 | this.name = name; 12 | } 13 | 14 | public static String getNameByValue(byte type){ 15 | for(UserStatus userStatus : UserStatus.values()){ 16 | if(userStatus.getType() == type) 17 | return userStatus.getName(); 18 | } 19 | return ""; 20 | } 21 | 22 | public byte getType(){ 23 | return type; 24 | } 25 | 26 | public String getName(){ 27 | return name; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/enu/UserType.java: -------------------------------------------------------------------------------- 1 | package cn.crap.enu; 2 | 3 | public enum UserType { 4 | ADMIN("管理员", Byte.valueOf("100")),USER("普通用户",Byte.valueOf("1")); 5 | private final byte type; 6 | private final String name; 7 | 8 | UserType(String name, byte type){ 9 | this.type = type; 10 | this.name = name; 11 | } 12 | 13 | public static String getNameByValue(Byte type){ 14 | if (type == null){ 15 | return ""; 16 | } 17 | for(UserType userType : UserType.values()){ 18 | if(userType.getType() == type) 19 | return userType.getName(); 20 | } 21 | return ""; 22 | } 23 | 24 | public byte getType(){ 25 | return type; 26 | } 27 | 28 | public String getName(){ 29 | return name; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/framework/MyException.java: -------------------------------------------------------------------------------- 1 | package cn.crap.framework; 2 | 3 | import cn.crap.enu.MyError; 4 | 5 | public class MyException extends Exception{ 6 | 7 | private static final long serialVersionUID = 8638237486526577302L; 8 | 9 | private MyError myError; 10 | private String tip; 11 | 12 | public MyException(MyError error) { 13 | this.myError = error; 14 | } 15 | 16 | public MyException(MyError error, String msgExtention) { 17 | this.myError = error; 18 | this.setTip(msgExtention); 19 | } 20 | 21 | public String getTip() { 22 | return tip; 23 | } 24 | 25 | private void setTip(String tip) { 26 | this.tip = tip; 27 | } 28 | 29 | public String getMessage(){ 30 | return myError == null ? "" : myError.getMessage(); 31 | } 32 | 33 | public String getErrorCode(){ 34 | return myError == null ? "" : myError.name(); 35 | } 36 | 37 | public String getEnMessage(){ 38 | return myError == null ? "" : myError.getEnMessage(); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/framework/SpringContextHolder.java: -------------------------------------------------------------------------------- 1 | package cn.crap.framework; 2 | 3 | import org.springframework.beans.BeansException; 4 | import org.springframework.context.ApplicationContext; 5 | import org.springframework.context.ApplicationContextAware; 6 | public class SpringContextHolder implements ApplicationContextAware { 7 | private static ApplicationContext applicationContext; 8 | 9 | public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 10 | SpringContextHolder.applicationContext = applicationContext; 11 | } 12 | 13 | public static ApplicationContext getApplicationContext() { 14 | return applicationContext; 15 | } 16 | public static Object getBean(String beanName) { 17 | return applicationContext.getBean(beanName); 18 | } 19 | 20 | public static T getBean(String beanName , Classclazz) { 21 | return applicationContext.getBean(beanName , clazz); 22 | } 23 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/framework/ThreadObject.java: -------------------------------------------------------------------------------- 1 | package cn.crap.framework; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | import javax.servlet.http.HttpServletRequest; 7 | import javax.servlet.http.HttpServletResponse; 8 | 9 | public class ThreadObject { 10 | 11 | public final HttpServletRequest request; 12 | public final HttpServletResponse response; 13 | 14 | public ThreadObject(HttpServletRequest request, HttpServletResponse response) { 15 | this.request = request; 16 | this.response = response; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/framework/interceptor/AuthPassport.java: -------------------------------------------------------------------------------- 1 | package cn.crap.framework.interceptor; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.ElementType; 5 | import java.lang.annotation.Inherited; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | /** 11 | * 权限拦截器 12 | */ 13 | @Documented 14 | @Inherited 15 | @Target(ElementType.METHOD) 16 | @Retention(RetentionPolicy.RUNTIME) 17 | public @interface AuthPassport { 18 | boolean validate() default true; 19 | String authority() default ""; 20 | } 21 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/model/ArticleWithBLOBs.java: -------------------------------------------------------------------------------- 1 | package cn.crap.model; 2 | 3 | import java.io.Serializable; 4 | 5 | public class ArticleWithBLOBs extends Article implements Serializable { 6 | private String content; 7 | 8 | private String markdown; 9 | 10 | private static final long serialVersionUID = 1L; 11 | 12 | public String getContent() { 13 | return content; 14 | } 15 | 16 | public void setContent(String content) { 17 | this.content = content == null ? null : content.trim(); 18 | } 19 | 20 | public String getMarkdown() { 21 | return markdown; 22 | } 23 | 24 | public void setMarkdown(String markdown) { 25 | this.markdown = markdown == null ? null : markdown.trim(); 26 | } 27 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/model/BasePO.java: -------------------------------------------------------------------------------- 1 | package cn.crap.model; 2 | 3 | import cn.crap.utils.NotNullFieldStringStyle; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | import org.apache.commons.lang.builder.ToStringBuilder; 7 | 8 | import java.io.Serializable; 9 | import java.util.Date; 10 | 11 | public class BasePO implements Serializable{ 12 | private static final long serialVersionUID = 1L; 13 | 14 | @Getter 15 | @Setter 16 | private String id; 17 | 18 | @Getter 19 | @Setter 20 | private Long sequence; 21 | 22 | @Getter 23 | @Setter 24 | private Date createTime; 25 | 26 | @Getter 27 | @Setter 28 | private Date updateTime; 29 | 30 | @Getter 31 | @Setter 32 | private String attributes; 33 | 34 | @Override 35 | public String toString(){ 36 | return ToStringBuilder.reflectionToString(this, new NotNullFieldStringStyle()); 37 | } 38 | 39 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/model/BugLogPO.java: -------------------------------------------------------------------------------- 1 | package cn.crap.model; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class BugLogPO extends BasePO { 7 | private String senior; 8 | private String operatorStr; 9 | private Byte status; 10 | private String remark; 11 | private String junior; 12 | private Byte type; 13 | private String operator; 14 | private String bugId; 15 | private String projectId; 16 | private String newValue; 17 | private String originalValue; 18 | } 19 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/model/BugPO.java: -------------------------------------------------------------------------------- 1 | package cn.crap.model; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.Date; 6 | 7 | @Data 8 | public class BugPO extends BasePO { 9 | private String executor; 10 | private String executorStr; 11 | private Byte priority; 12 | // 最后修改人 13 | private String updateBy; 14 | private String name; 15 | private String content; 16 | private Byte severity; 17 | private String creator; 18 | private String creatorStr; 19 | private String moduleId; 20 | private String attributes; 21 | private String tester; 22 | private String testerStr; 23 | private String projectId; 24 | private Byte type; 25 | private String tracer; 26 | private String tracerStr; 27 | private Byte status; 28 | private Date deadline; 29 | } 30 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/model/Error.java: -------------------------------------------------------------------------------- 1 | package cn.crap.model; 2 | 3 | public class Error extends BasePO { 4 | private String errorCode; 5 | 6 | private String errorMsg; 7 | 8 | private String projectId; 9 | 10 | private Byte status; 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | public String getErrorCode() { 15 | return errorCode; 16 | } 17 | 18 | public void setErrorCode(String errorCode) { 19 | this.errorCode = errorCode == null ? null : errorCode.trim(); 20 | } 21 | 22 | public String getErrorMsg() { 23 | return errorMsg; 24 | } 25 | 26 | public void setErrorMsg(String errorMsg) { 27 | this.errorMsg = errorMsg == null ? null : errorMsg.trim(); 28 | } 29 | 30 | public String getProjectId() { 31 | return projectId; 32 | } 33 | 34 | public void setProjectId(String projectId) { 35 | this.projectId = projectId == null ? null : projectId.trim(); 36 | } 37 | 38 | 39 | public Byte getStatus() { 40 | return status; 41 | } 42 | 43 | public void setStatus(Byte status) { 44 | this.status = status; 45 | } 46 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/model/HotSearch.java: -------------------------------------------------------------------------------- 1 | package cn.crap.model; 2 | 3 | import java.util.Date; 4 | 5 | public class HotSearch extends BasePO { 6 | private String id; 7 | 8 | private Integer times; 9 | 10 | private Date createTime; 11 | 12 | private Date updateTime; 13 | 14 | private String keyword; 15 | 16 | private static final long serialVersionUID = 1L; 17 | 18 | public String getId() { 19 | return id; 20 | } 21 | 22 | public void setId(String id) { 23 | this.id = id == null ? null : id.trim(); 24 | } 25 | 26 | public Integer getTimes() { 27 | return times; 28 | } 29 | 30 | public void setTimes(Integer times) { 31 | this.times = times; 32 | } 33 | 34 | public Date getCreateTime() { 35 | return createTime; 36 | } 37 | 38 | public void setCreateTime(Date createTime) { 39 | this.createTime = createTime; 40 | } 41 | 42 | public Date getUpdateTime() { 43 | return updateTime; 44 | } 45 | 46 | public void setUpdateTime(Date updateTime) { 47 | this.updateTime = updateTime; 48 | } 49 | 50 | public String getKeyword() { 51 | return keyword; 52 | } 53 | 54 | public void setKeyword(String keyword) { 55 | this.keyword = keyword == null ? null : keyword.trim(); 56 | } 57 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/model/ProjectMetaPO.java: -------------------------------------------------------------------------------- 1 | package cn.crap.model; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 项目元数据 7 | * 用来存储环境变量等 8 | * @author Ehsan 9 | */ 10 | @Data 11 | public class ProjectMetaPO extends BasePO { 12 | private Byte type; 13 | private String value; 14 | private String moduleId; 15 | private String projectId; 16 | private String name; 17 | private Byte status; 18 | } 19 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/model/ProjectUserPO.java: -------------------------------------------------------------------------------- 1 | package cn.crap.model; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class ProjectUserPO extends BasePO { 7 | private String userName; 8 | private String userEmail; 9 | private String userId; 10 | private String permission; 11 | private Byte status; 12 | private String projectId; 13 | private String projectName; 14 | private String projectUniKey; 15 | private Byte type; 16 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/query/ArticleQuery.java: -------------------------------------------------------------------------------- 1 | package cn.crap.query; 2 | 3 | import cn.crap.framework.MyException; 4 | import cn.crap.utils.SafetyUtil; 5 | 6 | /** 7 | * @author Ehsan 8 | * @date 2018/6/30 14:17 9 | */ 10 | public class ArticleQuery extends BaseQuery{ 11 | private String name; 12 | private String type; 13 | private String category; 14 | private String key; 15 | 16 | @Override 17 | public ArticleQuery getQuery(){ 18 | return this; 19 | } 20 | 21 | public String getName() throws MyException { 22 | SafetyUtil.checkSqlParam(name); 23 | return name; 24 | } 25 | 26 | public ArticleQuery setName(String name) { 27 | this.name = name; 28 | return this; 29 | } 30 | 31 | public String getType() { 32 | return type; 33 | } 34 | 35 | public ArticleQuery setType(String type) { 36 | this.type = type; 37 | return this; 38 | } 39 | 40 | public String getCategory() { 41 | return category; 42 | } 43 | 44 | public ArticleQuery setCategory(String category) { 45 | this.category = category; 46 | return this; 47 | } 48 | 49 | public String getKey() { 50 | return key; 51 | } 52 | 53 | public ArticleQuery setKey(String key) { 54 | this.key = key; 55 | return this; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/query/BugLogQuery.java: -------------------------------------------------------------------------------- 1 | package cn.crap.query; 2 | 3 | /** 4 | * @author Ehsan 5 | * @date 2018/6/30 14:17 6 | */ 7 | public class BugLogQuery extends BaseQuery{ 8 | private String bugId; 9 | 10 | @Override 11 | public BugLogQuery getQuery(){ 12 | return this; 13 | } 14 | 15 | public String getBugId() { 16 | return bugId; 17 | } 18 | 19 | public BugLogQuery setBugId(String bugId) { 20 | this.bugId = bugId; 21 | return this; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/query/BugQuery.java: -------------------------------------------------------------------------------- 1 | package cn.crap.query; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * @author Ehsan 7 | * @date 2018/6/30 14:17 8 | */ 9 | public class BugQuery extends BaseQuery { 10 | @Getter 11 | private String name; 12 | @Getter 13 | private String creator; 14 | @Getter 15 | private String executor; 16 | @Getter 17 | private String tracer; 18 | @Getter 19 | private String tester; 20 | @Getter 21 | private String idGreatThen; 22 | 23 | @Override 24 | public BugQuery getQuery() { 25 | return this; 26 | } 27 | 28 | public BugQuery setName(String name) { 29 | this.name = name; 30 | return this; 31 | } 32 | 33 | public BugQuery setCreator(String creator) { 34 | this.creator = creator; 35 | return this; 36 | } 37 | 38 | public BugQuery setExecutor(String executor) { 39 | this.executor = executor; 40 | return this; 41 | } 42 | 43 | public BugQuery setTracer(String tracer) { 44 | this.tracer = tracer; 45 | return this; 46 | } 47 | 48 | public BugQuery setTester(String tester) { 49 | this.tester = tester; 50 | return this; 51 | } 52 | 53 | public BugQuery setIdGreatThen(String idGreatThen) { 54 | this.idGreatThen = idGreatThen; 55 | return this; 56 | } 57 | } 58 | 59 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/query/CommentQuery.java: -------------------------------------------------------------------------------- 1 | package cn.crap.query; 2 | 3 | /** 4 | * @author Ehsan 5 | * @date 2018/6/30 14:17 6 | */ 7 | public class CommentQuery extends BaseQuery{ 8 | private String targetId; 9 | private String type; 10 | 11 | @Override 12 | public CommentQuery getQuery(){ 13 | return this; 14 | } 15 | 16 | public String getTargetId() { 17 | return targetId; 18 | } 19 | 20 | public CommentQuery setTargetId(String targetId) { 21 | this.targetId = targetId; 22 | return this; 23 | } 24 | 25 | public CommentQuery setType(String type) { 26 | this.type = type; 27 | return this; 28 | } 29 | 30 | public String getType(){ 31 | return type; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/query/DebugQuery.java: -------------------------------------------------------------------------------- 1 | package cn.crap.query; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author Ehsan 7 | * @date 2018/6/30 14:17 8 | */ 9 | public class DebugQuery extends BaseQuery{ 10 | private String userId; 11 | 12 | private List moduleIds; 13 | 14 | @Override 15 | public DebugQuery getQuery(){ 16 | return this; 17 | } 18 | 19 | public List getModuleIds() { 20 | return moduleIds; 21 | } 22 | 23 | public DebugQuery setModuleIds(List moduleIds) { 24 | this.moduleIds = moduleIds; 25 | return this; 26 | } 27 | 28 | public String getUserId() { 29 | return userId; 30 | } 31 | 32 | public DebugQuery setUserId(String userId) { 33 | this.userId = userId; 34 | return this; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/query/HotSearchQuery.java: -------------------------------------------------------------------------------- 1 | package cn.crap.query; 2 | 3 | /** 4 | * @author Ehsan 5 | * @date 2018/6/30 14:17 6 | */ 7 | public class HotSearchQuery extends BaseQuery{ 8 | 9 | @Override 10 | public HotSearchQuery getQuery(){ 11 | return this; 12 | } 13 | 14 | 15 | } 16 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/query/LogQuery.java: -------------------------------------------------------------------------------- 1 | package cn.crap.query; 2 | 3 | /** 4 | * @author Ehsan 5 | * @date 2018/6/30 14:17 6 | */ 7 | public class LogQuery extends BaseQuery{ 8 | private String identy; 9 | private String modelName; 10 | @Override 11 | public LogQuery getQuery(){ 12 | return this; 13 | } 14 | 15 | 16 | public String getIdenty() { 17 | return identy; 18 | } 19 | 20 | public LogQuery setIdenty(String identy) { 21 | this.identy = identy; 22 | return this; 23 | } 24 | 25 | public String getModelName() { 26 | return modelName; 27 | } 28 | 29 | public LogQuery setModelName(String modelName) { 30 | this.modelName = modelName; 31 | return this; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/query/MenuQuery.java: -------------------------------------------------------------------------------- 1 | package cn.crap.query; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author Ehsan 7 | * @date 2018/6/30 14:17 8 | */ 9 | public class MenuQuery extends BaseQuery{ 10 | private String parentId; 11 | private List parentIds; 12 | private String menuName; 13 | private String type; 14 | 15 | @Override 16 | public MenuQuery getQuery(){ 17 | return this; 18 | } 19 | 20 | public String getParentId() { 21 | return parentId; 22 | } 23 | 24 | public MenuQuery setParentId(String parentId) { 25 | this.parentId = parentId; 26 | return this; 27 | } 28 | 29 | public List getParentIds() { 30 | return parentIds; 31 | } 32 | 33 | public MenuQuery setParentIds(List parentIds) { 34 | this.parentIds = parentIds; 35 | return this; 36 | } 37 | 38 | public String getMenuName() { 39 | return menuName; 40 | } 41 | 42 | public MenuQuery setMenuName(String menuName) { 43 | this.menuName = menuName; 44 | return this; 45 | } 46 | 47 | public String getType() { 48 | return type; 49 | } 50 | 51 | public void setType(String type) { 52 | this.type = type; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/query/ModuleQuery.java: -------------------------------------------------------------------------------- 1 | package cn.crap.query; 2 | 3 | import cn.crap.framework.MyException; 4 | import cn.crap.utils.SafetyUtil; 5 | 6 | /** 7 | * @author Ehsan 8 | * @date 2018/6/30 14:17 9 | */ 10 | public class ModuleQuery extends BaseQuery{ 11 | private String name; 12 | private String userId; 13 | private String uniKey; 14 | 15 | 16 | @Override 17 | public ModuleQuery getQuery(){ 18 | return this; 19 | } 20 | 21 | public String getName() throws MyException{ 22 | SafetyUtil.checkSqlParam(name); 23 | return name; 24 | } 25 | 26 | public ModuleQuery setName(String name) { 27 | this.name = name; 28 | return this; 29 | } 30 | 31 | public String getUserId() { 32 | return userId; 33 | } 34 | 35 | public ModuleQuery setUserId(String userId) { 36 | this.userId = userId; 37 | return this; 38 | } 39 | 40 | public String getUniKey() { 41 | return uniKey; 42 | } 43 | 44 | public ModuleQuery setUniKey(String uniKey) { 45 | this.uniKey = uniKey; 46 | return this; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/query/ProjectMetaQuery.java: -------------------------------------------------------------------------------- 1 | package cn.crap.query; 2 | 3 | /** 4 | * @author Ehsan 5 | * @date 2018/6/30 14:17 6 | */ 7 | public class ProjectMetaQuery extends BaseQuery{ 8 | private Byte type; 9 | 10 | @Override 11 | public ProjectMetaQuery getQuery(){ 12 | return this; 13 | } 14 | 15 | public Byte getType() { 16 | return type; 17 | } 18 | 19 | public ProjectMetaQuery setType(Byte type) { 20 | this.type = type; 21 | return this; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/query/ProjectQuery.java: -------------------------------------------------------------------------------- 1 | package cn.crap.query; 2 | 3 | import cn.crap.framework.MyException; 4 | import cn.crap.utils.SafetyUtil; 5 | 6 | /** 7 | * @author Ehsan 8 | * @date 2018/6/30 14:17 9 | */ 10 | public class ProjectQuery extends BaseQuery{ 11 | private String name; 12 | private String userId; 13 | private String uniKey; 14 | private Byte type; 15 | 16 | @Override 17 | public ProjectQuery getQuery(){ 18 | return this; 19 | } 20 | 21 | public String getName() throws MyException{ 22 | SafetyUtil.checkSqlParam(name); 23 | return name; 24 | } 25 | 26 | public ProjectQuery setName(String name) { 27 | this.name = name; 28 | return this; 29 | } 30 | 31 | public String getUserId() { 32 | return userId; 33 | } 34 | 35 | public ProjectQuery setUserId(String userId) { 36 | this.userId = userId; 37 | return this; 38 | } 39 | 40 | public String getUniKey() { 41 | return uniKey; 42 | } 43 | 44 | public ProjectQuery setUniKey(String uniKey) { 45 | this.uniKey = uniKey; 46 | return this; 47 | } 48 | 49 | public Byte getType() { 50 | return type; 51 | } 52 | 53 | public ProjectQuery setType(Byte type) { 54 | this.type = type; 55 | return this; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/query/ProjectUserQuery.java: -------------------------------------------------------------------------------- 1 | package cn.crap.query; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * @author Ehsan 7 | * @date 2018/6/30 14:17 8 | */ 9 | public class ProjectUserQuery extends BaseQuery{ 10 | @Getter 11 | private String userId; 12 | 13 | @Getter 14 | private Byte type; 15 | 16 | @Getter 17 | private String projectUniKey; 18 | 19 | @Override 20 | public ProjectUserQuery getQuery(){ 21 | return this; 22 | } 23 | 24 | 25 | public ProjectUserQuery setUserId(String userId) { 26 | this.userId = userId; 27 | return this; 28 | } 29 | 30 | public ProjectUserQuery setType(Byte type) { 31 | this.type = type; 32 | return this; 33 | } 34 | 35 | public ProjectUserQuery setProjectUniKey(String projectUniKey) { 36 | this.projectUniKey = projectUniKey; 37 | return this; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/query/SearchQuery.java: -------------------------------------------------------------------------------- 1 | package cn.crap.query; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * @author Ehsan 7 | * @date 2018/6/30 14:17 8 | */ 9 | public class SearchQuery extends BaseQuery{ 10 | @Getter 11 | private String keyword; 12 | 13 | @Getter 14 | private String dataType; 15 | 16 | @Getter 17 | private Boolean open; 18 | 19 | @Override 20 | public SearchQuery getQuery(){ 21 | return this; 22 | } 23 | 24 | 25 | public SearchQuery setKeyword(String keyword) { 26 | this.keyword = keyword; 27 | return this; 28 | } 29 | 30 | public SearchQuery setDataType(String dataType) { 31 | this.dataType = dataType; 32 | return this; 33 | } 34 | 35 | public SearchQuery setOpen(Boolean open) { 36 | this.open = open; 37 | return this; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/query/SettingQuery.java: -------------------------------------------------------------------------------- 1 | package cn.crap.query; 2 | 3 | /** 4 | * @author Ehsan 5 | * @date 2018/6/30 14:17 6 | */ 7 | public class SettingQuery extends BaseQuery{ 8 | private String key; 9 | private String remark; 10 | 11 | @Override 12 | public SettingQuery getQuery(){ 13 | return this; 14 | } 15 | 16 | public String getKey() { 17 | return key; 18 | } 19 | 20 | public SettingQuery setKey(String key) { 21 | this.key = key; 22 | return this; 23 | } 24 | 25 | public String getRemark() { 26 | return remark; 27 | } 28 | 29 | public SettingQuery setRemark(String remark) { 30 | this.remark = remark; 31 | return this; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/query/SourceQuery.java: -------------------------------------------------------------------------------- 1 | package cn.crap.query; 2 | 3 | import cn.crap.framework.MyException; 4 | import cn.crap.utils.SafetyUtil; 5 | 6 | /** 7 | * @author Ehsan 8 | * @date 2018/6/30 14:17 9 | */ 10 | public class SourceQuery extends BaseQuery{ 11 | private String name; 12 | 13 | @Override 14 | public SourceQuery getQuery(){ 15 | return this; 16 | } 17 | 18 | public String getName() throws MyException{ 19 | SafetyUtil.checkSqlParam(name); 20 | return name; 21 | } 22 | 23 | public SourceQuery setName(String name) { 24 | this.name = name; 25 | return this; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/schedule/AbstractTask.java: -------------------------------------------------------------------------------- 1 | package cn.crap.schedule; 2 | 3 | /** 4 | * 抽象任务类 5 | */ 6 | public abstract class AbstractTask implements Runnable { 7 | @Override 8 | public void run() { 9 | doTask(); 10 | } 11 | 12 | abstract void doTask(); 13 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/schedule/TaskUtil.java: -------------------------------------------------------------------------------- 1 | package cn.crap.schedule; 2 | 3 | import java.util.concurrent.LinkedBlockingDeque; 4 | import java.util.concurrent.ThreadPoolExecutor; 5 | import java.util.concurrent.TimeUnit; 6 | 7 | /** 8 | * @author Ehsan 9 | * @date 2018/10/5 15:42 10 | */ 11 | public class TaskUtil { 12 | private static ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 6, 5, TimeUnit.SECONDS, new LinkedBlockingDeque()); 13 | 14 | public static void execute(AbstractTask task){ 15 | executor.execute(task); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/service/IEmailService.java: -------------------------------------------------------------------------------- 1 | package cn.crap.service; 2 | 3 | import java.io.UnsupportedEncodingException; 4 | 5 | import javax.mail.MessagingException; 6 | 7 | import cn.crap.dto.MailBean; 8 | 9 | public interface IEmailService { 10 | 11 | void sendMail(MailBean mailBean) throws UnsupportedEncodingException, MessagingException; 12 | 13 | void sendRegisterEmail(String eamil, String id) throws UnsupportedEncodingException, MessagingException; 14 | 15 | void sendFindPwdEmail(String eamil) throws UnsupportedEncodingException, MessagingException; 16 | 17 | boolean sendMail(String subject, String toEmail, String context); 18 | 19 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/service/ILuceneService.java: -------------------------------------------------------------------------------- 1 | package cn.crap.service; 2 | 3 | import cn.crap.dto.SearchDto; 4 | 5 | import java.util.List; 6 | 7 | public interface ILuceneService{ 8 | /** 9 | * 根据ID分页查询所有数据 10 | * @param projectId 可选 11 | * @param id 可选 12 | * @return 13 | */ 14 | List selectOrderById(String projectId, String id, int pageSize); 15 | } 16 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/service/IPickService.java: -------------------------------------------------------------------------------- 1 | package cn.crap.service; 2 | 3 | import java.util.List; 4 | 5 | import cn.crap.dto.LoginInfoDto; 6 | import cn.crap.dto.PickDto; 7 | import cn.crap.framework.MyException; 8 | 9 | public interface IPickService { 10 | 11 | /** 12 | * 13 | * @param code 需要选着的pick代码 14 | * @param key pick二级关键字参数(如类型、父节点等) 15 | * @return 16 | * @throws MyException 17 | */ 18 | List getPickList(String code, String key) throws MyException; 19 | 20 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/service/ISearchService.java: -------------------------------------------------------------------------------- 1 | package cn.crap.service; 2 | 3 | import java.io.IOException; 4 | import java.util.List; 5 | 6 | import cn.crap.dto.SearchDto; 7 | import cn.crap.query.SearchQuery; 8 | import cn.crap.utils.Page; 9 | 10 | public interface ISearchService{ 11 | 12 | /** 13 | * 根据关键词、分页信息查询 14 | * @return 15 | * @throws Exception 16 | */ 17 | List search(SearchQuery query) throws Exception; 18 | 19 | 20 | /** 21 | * 删除索引文件 22 | * @param searchDto 23 | * @return 24 | * @throws IOException 25 | */ 26 | boolean delete(SearchDto searchDto) throws IOException; 27 | 28 | /** 29 | * 添加索引文件, 更新索引文件 30 | * @param searchDto 31 | * @return 32 | * @throws IOException 33 | */ 34 | boolean add(SearchDto searchDto) throws IOException; 35 | 36 | boolean update(SearchDto searchDto) throws IOException; 37 | 38 | /** 39 | * 重建索引 40 | * @return 41 | */ 42 | boolean rebuild(); 43 | 44 | boolean rebuildByProjectId(String projectId); 45 | 46 | } 47 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/service/ProjectMetaService.java: -------------------------------------------------------------------------------- 1 | package cn.crap.service; 2 | 3 | import cn.crap.dao.mybatis.ProjectMetaDao; 4 | import cn.crap.enu.TableId; 5 | import cn.crap.model.ProjectMetaPO; 6 | import cn.crap.query.ProjectMetaQuery; 7 | import cn.crap.utils.IConst; 8 | import cn.crap.utils.ILogConst; 9 | import org.springframework.stereotype.Service; 10 | 11 | import javax.annotation.Resource; 12 | 13 | @Service 14 | public class ProjectMetaService extends NewBaseService implements ILogConst, IConst { 15 | private ProjectMetaDao projectMetaDao; 16 | 17 | @Resource 18 | public void ProjectMetaDao(ProjectMetaDao projectMetaDao) { 19 | this.projectMetaDao = projectMetaDao; 20 | super.setBaseDao(projectMetaDao, TableId.PROJECT_META); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/service/tool/ObjectCache.java: -------------------------------------------------------------------------------- 1 | package cn.crap.service.tool; 2 | 3 | import cn.crap.beans.Config; 4 | import com.google.common.cache.Cache; 5 | import com.google.common.cache.CacheBuilder; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Service; 8 | import org.springframework.util.Assert; 9 | 10 | import java.util.concurrent.TimeUnit; 11 | 12 | @Service("objectCache") 13 | public class ObjectCache{ 14 | private static Cache cache; 15 | public static final String CACHE_PREFIX = "object"; 16 | 17 | public Cache getCache(){ 18 | if (cache == null) { 19 | cache = CacheBuilder.newBuilder() 20 | .initialCapacity(10) 21 | .concurrencyLevel(5) 22 | .expireAfterWrite(Config.cacheTime, TimeUnit.SECONDS) 23 | .build(); 24 | } 25 | return cache; 26 | } 27 | 28 | 29 | public Object get(String key){ 30 | Assert.notNull(key); 31 | return getCache().getIfPresent(assembleKey(key)); 32 | } 33 | 34 | public void add(String key, Object object){ 35 | Assert.notNull(key); 36 | getCache().put(assembleKey(key), object); 37 | } 38 | 39 | 40 | public boolean del(String key){ 41 | getCache().invalidate(CACHE_PREFIX + key); 42 | return true; 43 | } 44 | 45 | 46 | public boolean flushDB(){ 47 | cache.invalidateAll(); 48 | return true; 49 | } 50 | 51 | private String assembleKey(String key) { 52 | return CACHE_PREFIX + key; 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/utils/ChinaFont.java: -------------------------------------------------------------------------------- 1 | package cn.crap.utils; 2 | 3 | import java.io.IOException; 4 | 5 | import com.itextpdf.text.BaseColor; 6 | import com.itextpdf.text.DocumentException; 7 | import com.itextpdf.text.Font; 8 | import com.itextpdf.text.FontProvider; 9 | import com.itextpdf.text.pdf.BaseFont; 10 | 11 | public class ChinaFont implements FontProvider { 12 | 13 | // TODO 字体可配置,和图形验证码字体保持一致即可 14 | @Override 15 | public boolean isRegistered(String fontname) { 16 | return false; 17 | } 18 | 19 | public Font getFont(String fontname, String encoding, boolean embedded, float size, int style, BaseColor color) { 20 | 21 | try { 22 | BaseFont bfChinese; 23 | bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); 24 | return new Font(bfChinese, size, style, color); 25 | } catch (DocumentException e) { 26 | e.printStackTrace(); 27 | } catch (IOException e) { 28 | e.printStackTrace(); 29 | } 30 | return null; 31 | } 32 | } -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/utils/ILogConst.java: -------------------------------------------------------------------------------- 1 | package cn.crap.utils; 2 | 3 | public interface ILogConst { 4 | String L_PROJECT_CHINESE = "项目"; 5 | String L_MODULE_CHINESE = "模块"; 6 | String L_SOURCE_CHINESE = "文件"; 7 | } 8 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/utils/ISetting.java: -------------------------------------------------------------------------------- 1 | package cn.crap.utils; 2 | 3 | /** 4 | * @author Ehsan 5 | * 所有字段必须以S开头 6 | */ 7 | public interface ISetting { 8 | String S_SECRETKEY = "SECRETKEY"; 9 | String S_VERIFICATIONCODE = "VERIFICATIONCODE"; 10 | String S_LOGIN_VERIFICATION_CODE = "LOGIN_VERIFICATION_CODE"; 11 | String S_VISITCODE = "VISITCODE"; 12 | String S_COMMENTCODE = "COMMENTCODE"; 13 | String S_LUCENE_DIR = "LUCENE_DIR"; 14 | String S_INDEX_PAGE = "INDEX_PAGE"; 15 | String S_TITLE = "TITLE"; 16 | String S_ANONYMOUS_COMMENT = "ANONYMOUS_COMMENT"; 17 | String S_KEYWORDS = "KEYWORDS"; 18 | String S_DESCRIPTION = "DESCRIPTION"; 19 | String S_ICON = "ICON"; 20 | String S_LOGO = "LOGO"; 21 | String S_DOMAIN = "DOMAIN"; 22 | String S_MAIN_COLOR = "MAIN_COLOR"; 23 | } 24 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/utils/MyCrumbDtoList.java: -------------------------------------------------------------------------------- 1 | package cn.crap.utils; 2 | 3 | 4 | import cn.crap.dto.CrumbDto; 5 | 6 | import java.util.List; 7 | 8 | public class MyCrumbDtoList { 9 | private List list; 10 | 11 | private MyCrumbDtoList(){} 12 | 13 | public static MyCrumbDtoList getList(String... params) { 14 | MyCrumbDtoList myArrayList = new MyCrumbDtoList(); 15 | myArrayList.list = Tools.getCrumbs(params); 16 | return myArrayList; 17 | } 18 | 19 | public MyCrumbDtoList add(String name, String url){ 20 | if (MyString.isEmpty(name) || MyString.isEmpty(url)){ 21 | return this; 22 | } 23 | CrumbDto crumb = new CrumbDto(name, url); 24 | list.add(crumb); 25 | return this; 26 | } 27 | 28 | public List getList() { 29 | return list; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/utils/MyHashMap.java: -------------------------------------------------------------------------------- 1 | package cn.crap.utils; 2 | 3 | import java.util.Map; 4 | 5 | public class MyHashMap { 6 | private Map map; 7 | 8 | private MyHashMap(){} 9 | 10 | public static MyHashMap getMap(Object... params) { 11 | MyHashMap myHashMap = new MyHashMap(); 12 | myHashMap.map = Tools.getMap(params); 13 | return myHashMap; 14 | } 15 | 16 | public MyHashMap put(String key, Object obj){ 17 | if (MyString.isEmpty(key) || obj == null){ 18 | return this; 19 | } 20 | map.put(key, obj); 21 | return this; 22 | } 23 | 24 | public Map getMap() { 25 | return map; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/utils/MyInteger.java: -------------------------------------------------------------------------------- 1 | package cn.crap.utils; 2 | 3 | public class MyInteger { 4 | public static int getInt(Integer value, int defaultValue){ 5 | if (value == null){ 6 | return defaultValue; 7 | } 8 | return value; 9 | } 10 | 11 | public static int getInt(String value, int defValue){ 12 | if (value == null){ 13 | return defValue; 14 | } 15 | try{ 16 | return Integer.parseInt(value); 17 | }catch (Exception e){ 18 | e.printStackTrace(); 19 | return defValue; 20 | } 21 | } 22 | 23 | public static int getInt(String valueStr, int defValue, int min, int max){ 24 | if (valueStr == null){ 25 | return defValue; 26 | } 27 | 28 | try{ 29 | int value = Integer.parseInt(valueStr); 30 | if (value < min){ 31 | return min; 32 | } 33 | 34 | if (value > max){ 35 | return max; 36 | } 37 | 38 | return value; 39 | }catch (Exception e){ 40 | e.printStackTrace(); 41 | return defValue; 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/utils/RequestHelper.java: -------------------------------------------------------------------------------- 1 | package cn.crap.utils; 2 | 3 | import cn.crap.framework.ThreadContext; 4 | 5 | import java.util.Enumeration; 6 | import java.util.HashMap; 7 | 8 | /** 9 | * @author Ehsan 10 | * @date 17/12/30 01:23 11 | */ 12 | public class RequestHelper { 13 | 14 | /** 15 | * @return 16 | */ 17 | public static HashMap getRequestHeaders() { 18 | HashMap requestHeaders = new HashMap<>(); 19 | Enumeration headerNames = ThreadContext.request().getHeaderNames(); 20 | while (headerNames.hasMoreElements()) { 21 | String headerName = headerNames.nextElement(); 22 | String headerValue = ThreadContext.request().getHeader(headerName); 23 | requestHeaders.put(headerName, headerValue); 24 | } 25 | return requestHeaders; 26 | } 27 | 28 | /** 29 | * 30 | * @return 31 | */ 32 | public static HashMap getRequestParams() { 33 | HashMap requestParams = new HashMap<>(); 34 | Enumeration paramNames = ThreadContext.request().getParameterNames(); 35 | while (paramNames.hasMoreElements()) { 36 | String paramName = paramNames.nextElement(); 37 | String paramValue = ThreadContext.request().getParameter(paramName); 38 | requestParams.put(paramName, paramValue); 39 | } 40 | return requestParams; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/utils/SafetyUtil.java: -------------------------------------------------------------------------------- 1 | package cn.crap.utils; 2 | 3 | import cn.crap.enu.MyError; 4 | import cn.crap.framework.MyException; 5 | 6 | /** 7 | * 安全校验代码 8 | * 9 | * @author Ehsan 10 | * @date 2018/6/30 14:42 11 | */ 12 | public class SafetyUtil { 13 | private static final String illegalWord = "'|exec|insert|delete|update|*|master|truncate|declare|;|,"; 14 | private static final String[] illegalWords = illegalWord.split("\\|"); 15 | public static void checkSqlParam(String param) throws MyException{ 16 | if (param == null) { 17 | return; 18 | } 19 | for (String str : illegalWords){ 20 | if (param.indexOf(str) >= 0){ 21 | throw new MyException(MyError.E000070, "参数包含非法字符:" + str); 22 | } 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/utils/ServiceFactory.java: -------------------------------------------------------------------------------- 1 | package cn.crap.utils; 2 | 3 | import cn.crap.service.ProjectUserService; 4 | import cn.crap.service.tool.ProjectCache; 5 | import lombok.Getter; 6 | import org.springframework.beans.factory.InitializingBean; 7 | import org.springframework.stereotype.Service; 8 | import javax.annotation.Resource; 9 | 10 | /** 11 | * @author Ehsan 12 | * @date 2019/2/5 21:05 13 | */ 14 | @Service 15 | public class ServiceFactory implements InitializingBean { 16 | 17 | @Resource 18 | @Getter 19 | private ProjectUserService projectUserService; 20 | 21 | @Resource 22 | @Getter 23 | private ProjectCache projectCache; 24 | 25 | 26 | /************* 以下方法不要改动 **********/ 27 | private static ServiceFactory instance = null; 28 | public static ServiceFactory getInstance(){ 29 | return instance; 30 | } 31 | 32 | @Override 33 | public void afterPropertiesSet(){ 34 | instance = this; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /api/src/main/java/cn/crap/utils/TableField.java: -------------------------------------------------------------------------------- 1 | package cn.crap.utils; 2 | 3 | public class TableField { 4 | 5 | public final static String ID = "id"; 6 | public final static String CREATE_TIME = "createTime"; 7 | public final static String SEQUENCE = "sequence"; 8 | 9 | public static class SORT { 10 | public final static String ID_ASC = "id asc"; 11 | public final static String SEQUENCE_DESC = "sequence desc"; 12 | public final static String ERROR_CODE_ASC = "errorCode asc"; 13 | public final static String CREATE_TIME_DES = "createTime desc"; 14 | public final static String TIMES_DESC = "times desc"; 15 | 16 | } 17 | 18 | public static class USER { 19 | public final static String USER_TYPE = "userType"; // userType 只记录用户账号初始化来源 20 | public final static String EMAIL = "email"; 21 | public final static String USER_NAME = "userName"; 22 | public final static String LOGIN_TYPE = "loginTYpe"; 23 | public final static String THIRDLY_ID = "thirdlyId"; // 第三方账号ID = 第三方前缀 + 唯一标识 24 | public final static String PASSWORD = "password"; // MD5 加密(旧数据),MD5+盐(新数据) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /api/src/main/resources/.gitignore: -------------------------------------------------------------------------------- 1 | /jdbc.properties 2 | -------------------------------------------------------------------------------- /api/src/main/resources/generate/JavaPO.txt: -------------------------------------------------------------------------------- 1 | package cn.crap.xxx; 2 | 3 | import java.util.Date; 4 | 5 | public class JavaPO{ 6 | CA_PO_FIELD 7 | CA_PO_GET_SET 8 | } 9 | -------------------------------------------------------------------------------- /api/src/main/resources/interfaceTemplete.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/resources/interfaceTemplete.docx -------------------------------------------------------------------------------- /api/src/main/resources/interfaceTempleteBak.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/resources/interfaceTempleteBak.docx -------------------------------------------------------------------------------- /api/src/main/resources/monitor.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 20 | 21 | 22 | 31 | 32 | -------------------------------------------------------------------------------- /api/src/main/resources/mybatis-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /api/src/main/webapp/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/.DS_Store -------------------------------------------------------------------------------- /api/src/main/webapp/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Class-Path: 3 | 4 | -------------------------------------------------------------------------------- /api/src/main/webapp/WEB-INF/views/.gitignore: -------------------------------------------------------------------------------- 1 | /shop.jsp 2 | /shop1.jsp 3 | /shop2.jsp 4 | -------------------------------------------------------------------------------- /api/src/main/webapp/WEB-INF/views/staticize/default/articleDetail.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 3 | <% 4 | String path = request.getContextPath(); 5 | String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 6 | %> 7 | 8 | 9 | 10 | <%@ include file="css.jsp"%> 11 | 12 | 13 | 14 | <%@ include file="topNav.jsp"%> 15 | 16 |
17 |
18 | 19 | <%@ include file="left.jsp"%> 20 |
21 |
22 |
${article.name}
23 |
24 | ${article.brief} 25 |
26 |
${article.content}
27 |
28 |
29 | 30 |
31 |
32 | 33 | <%@ include file="footer.jsp"%> 34 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /api/src/main/webapp/WEB-INF/views/staticize/default/page.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 3 | 27 |
Total:${page.allRow}  ${page.currentPage}/${page.totalPage}
28 |
29 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/avatar/avatar0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/avatar/avatar0.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/avatar/avatar1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/avatar/avatar1.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/avatar/avatar10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/avatar/avatar10.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/avatar/avatar2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/avatar/avatar2.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/avatar/avatar3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/avatar/avatar3.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/avatar/avatar4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/avatar/avatar4.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/avatar/avatar5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/avatar/avatar5.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/avatar/avatar6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/avatar/avatar6.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/avatar/avatar7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/avatar/avatar7.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/avatar/avatar8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/avatar/avatar8.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/avatar/avatar9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/avatar/avatar9.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/css/bug.css: -------------------------------------------------------------------------------- 1 | /** 2 | * bug管理系统 3 | */ 4 | .bug-border-fff { 5 | border: 1px solid #ffffff; 6 | } -------------------------------------------------------------------------------- /api/src/main/webapp/resources/css/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/css/iconfont.eot -------------------------------------------------------------------------------- /api/src/main/webapp/resources/css/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/css/iconfont.ttf -------------------------------------------------------------------------------- /api/src/main/webapp/resources/css/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/css/iconfont.woff -------------------------------------------------------------------------------- /api/src/main/webapp/resources/css/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/css/iconfont.woff2 -------------------------------------------------------------------------------- /api/src/main/webapp/resources/css/index.css: -------------------------------------------------------------------------------- 1 | /** 首页css **/ 2 | .index-top-menu 3 | { 4 | position: relative; 5 | height: 30px; 6 | line-height: 30px; 7 | margin-top: 20px; 8 | } 9 | .index-top-menu div{ 10 | z-index: 1; 11 | position: relative; 12 | font-size:14px; 13 | font-weight: 400; 14 | } 15 | .index-top-menu:after 16 | { 17 | content: ' '; 18 | position: absolute; 19 | width: 100%; 20 | border-bottom: 1px solid #eeeeee; 21 | top:15px; 22 | right:0px; 23 | } 24 | 25 | .fun-introduce{ 26 | line-height: 30px; 27 | position: relative; 28 | } 29 | .fun-introduce:after 30 | { 31 | content: ' '; 32 | position: absolute; 33 | width: 100%; 34 | border-bottom: 1px solid #eeeeee; 35 | right:0px; 36 | top:0px; 37 | } -------------------------------------------------------------------------------- /api/src/main/webapp/resources/download/readMe.txt: -------------------------------------------------------------------------------- 1 | 临时下载文件夹 -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/angular-1.3.0.14/angular-cookies.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.3.0-beta.14 3 | (c) 2010-2014 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(p,f,n){'use strict';f.module("ngCookies",["ng"]).factory("$cookies",["$rootScope","$browser",function(e,b){var c={},g={},h,k=!1,l=f.copy,m=f.isUndefined;b.addPollFn(function(){var a=b.cookies();h!=a&&(h=a,l(a,g),l(a,c),k&&e.$apply())})();k=!0;e.$watch(function(){var a,d,e;for(a in g)m(c[a])&&b.cookies(a,n);for(a in c)d=c[a],f.isString(d)||(d=""+d,c[a]=d),d!==g[a]&&(b.cookies(a,d),e=!0);if(e)for(a in d=b.cookies(),c)c[a]!==d[a]&&(m(d[a])?delete c[a]:c[a]=d[a])});return c}]).factory("$cookieStore", 7 | ["$cookies",function(e){return{get:function(b){return(b=e[b])?f.fromJson(b):b},put:function(b,c){e[b]=f.toJson(c)},remove:function(b){delete e[b]}}}])})(window,window.angular); 8 | //# sourceMappingURL=angular-cookies.min.js.map 9 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/angular-1.3.0.14/angular-csp.css: -------------------------------------------------------------------------------- 1 | /* Include this file in your html if you are using the CSP mode. */ 2 | 3 | @charset "UTF-8"; 4 | 5 | [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], 6 | .ng-cloak, .x-ng-cloak, 7 | .ng-hide:not(.ng-animate) { 8 | display: none !important; 9 | } 10 | 11 | ng\:form { 12 | display: block; 13 | } 14 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/angular-1.3.0.14/version.json: -------------------------------------------------------------------------------- 1 | {"raw":"v1.3.0-beta.14","major":1,"minor":3,"patch":0,"prerelease":["beta",14],"build":[],"version":"1.3.0-beta.14","codeName":"harmonious-cacophonies","full":"1.3.0-beta.14","cdn":{"raw":"v1.3.0-beta.13","major":1,"minor":3,"patch":0,"prerelease":["beta",13],"build":[],"version":"1.3.0-beta.13","isStable":false,"docsUrl":"http://code.angularjs.org/1.3.0-beta.13/docs"}} -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/angular-1.3.0.14/version.txt: -------------------------------------------------------------------------------- 1 | 1.3.0-beta.14 -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/bootstrap-3.0.0/js/bootstrap-datetimepicker.zh-CN.js: -------------------------------------------------------------------------------- 1 | 2 | /**zh-CN 3 | * French translation for bootstrap-datetimepicker 4 | * Nico Mollet 5 | */ 6 | ;(function($){ 7 | $.fn.datetimepicker.dates['zh-CN'] = { 8 | days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], 9 | daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], 10 | daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], 11 | months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 12 | monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 13 | today: "今天", 14 | suffix: [], 15 | meridiem: ["上午", "下午"], 16 | weekStart: 1, 17 | format: "dd/mm/yyyy hh:ii" 18 | }; 19 | }(jQuery)); 20 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/fonts/editormd-logo.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/fonts/editormd-logo.eot -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/fonts/editormd-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Generated by IcoMoon 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/fonts/editormd-logo.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/fonts/editormd-logo.ttf -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/fonts/editormd-logo.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/fonts/editormd-logo.woff -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/loading.gif -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/loading@2x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/loading@2x.gif -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/loading@3x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/loading@3x.gif -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-favicon-16x16.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-favicon-16x16.ico -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-favicon-24x24.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-favicon-24x24.ico -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-favicon-32x32.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-favicon-32x32.ico -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-favicon-48x48.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-favicon-48x48.ico -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-favicon-64x64.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-favicon-64x64.ico -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-114x114.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-120x120.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-144x144.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-16x16.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-180x180.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-240x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-240x240.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-24x24.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-320x320.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-320x320.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-32x32.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-48x48.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-57x57.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-64x64.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-72x72.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/editormd-logo-96x96.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/vi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/editormd-1.5.0/images/logos/vi.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2014 by Marijn Haverbeke and others 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/README.md: -------------------------------------------------------------------------------- 1 | # CodeMirror 2 | [![Build Status](https://travis-ci.org/codemirror/CodeMirror.svg)](https://travis-ci.org/codemirror/CodeMirror) 3 | [![NPM version](https://img.shields.io/npm/v/codemirror.svg)](https://www.npmjs.org/package/codemirror) 4 | [Funding status: ![maintainer happiness](https://marijnhaverbeke.nl/fund/status_s.png)](https://marijnhaverbeke.nl/fund/) 5 | 6 | CodeMirror is a JavaScript component that provides a code editor in 7 | the browser. When a mode is available for the language you are coding 8 | in, it will color your code, and optionally help with indentation. 9 | 10 | The project page is http://codemirror.net 11 | The manual is at http://codemirror.net/doc/manual.html 12 | The contributing guidelines are in [CONTRIBUTING.md](https://github.com/codemirror/CodeMirror/blob/master/CONTRIBUTING.md) 13 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/addon/dialog/dialog.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-dialog { 2 | position: absolute; 3 | left: 0; right: 0; 4 | background: white; 5 | z-index: 15; 6 | padding: .1em .8em; 7 | overflow: hidden; 8 | color: #333; 9 | } 10 | 11 | .CodeMirror-dialog-top { 12 | border-bottom: 1px solid #eee; 13 | top: 0; 14 | } 15 | 16 | .CodeMirror-dialog-bottom { 17 | border-top: 1px solid #eee; 18 | bottom: 0; 19 | } 20 | 21 | .CodeMirror-dialog input { 22 | border: none; 23 | outline: none; 24 | background: transparent; 25 | width: 20em; 26 | color: inherit; 27 | font-family: monospace; 28 | } 29 | 30 | .CodeMirror-dialog button { 31 | font-size: 70%; 32 | } 33 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/addon/display/fullscreen.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-fullscreen { 2 | position: fixed; 3 | top: 0; left: 0; right: 0; bottom: 0; 4 | height: auto; 5 | z-index: 9; 6 | } 7 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/addon/edit/trailingspace.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 | CodeMirror.defineOption("showTrailingSpace", false, function(cm, val, prev) { 13 | if (prev == CodeMirror.Init) prev = false; 14 | if (prev && !val) 15 | cm.removeOverlay("trailingspace"); 16 | else if (!prev && val) 17 | cm.addOverlay({ 18 | token: function(stream) { 19 | for (var l = stream.string.length, i = l; i && /\s/.test(stream.string.charAt(i - 1)); --i) {} 20 | if (i > stream.pos) { stream.pos = i; return null; } 21 | stream.pos = l; 22 | return "trailingspace"; 23 | }, 24 | name: "trailingspace" 25 | }); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/addon/fold/foldgutter.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-foldmarker { 2 | color: blue; 3 | text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px; 4 | font-family: arial; 5 | line-height: .3; 6 | cursor: pointer; 7 | } 8 | .CodeMirror-foldgutter { 9 | width: .7em; 10 | } 11 | .CodeMirror-foldgutter-open, 12 | .CodeMirror-foldgutter-folded { 13 | cursor: pointer; 14 | } 15 | .CodeMirror-foldgutter-open:after { 16 | content: "\25BE"; 17 | } 18 | .CodeMirror-foldgutter-folded:after { 19 | content: "\25B8"; 20 | } 21 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/addon/hint/show-hint.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-hints { 2 | position: absolute; 3 | z-index: 10; 4 | overflow: hidden; 5 | list-style: none; 6 | 7 | margin: 0; 8 | padding: 2px; 9 | 10 | -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 11 | -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 12 | box-shadow: 2px 3px 5px rgba(0,0,0,.2); 13 | border-radius: 3px; 14 | border: 1px solid silver; 15 | 16 | background: white; 17 | font-size: 90%; 18 | font-family: monospace; 19 | 20 | max-height: 20em; 21 | overflow-y: auto; 22 | } 23 | 24 | .CodeMirror-hint { 25 | margin: 0; 26 | padding: 0 4px; 27 | border-radius: 2px; 28 | max-width: 19em; 29 | overflow: hidden; 30 | white-space: pre; 31 | color: black; 32 | cursor: pointer; 33 | } 34 | 35 | li.CodeMirror-hint-active { 36 | background: #08f; 37 | color: white; 38 | } 39 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/addon/lint/coffeescript-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | // Depends on coffeelint.js from http://www.coffeelint.org/js/coffeelint.js 5 | 6 | // declare global: coffeelint 7 | 8 | (function(mod) { 9 | if (typeof exports == "object" && typeof module == "object") // CommonJS 10 | mod(require("../../lib/codemirror")); 11 | else if (typeof define == "function" && define.amd) // AMD 12 | define(["../../lib/codemirror"], mod); 13 | else // Plain browser env 14 | mod(CodeMirror); 15 | })(function(CodeMirror) { 16 | "use strict"; 17 | 18 | CodeMirror.registerHelper("lint", "coffeescript", function(text) { 19 | var found = []; 20 | var parseError = function(err) { 21 | var loc = err.lineNumber; 22 | found.push({from: CodeMirror.Pos(loc-1, 0), 23 | to: CodeMirror.Pos(loc, 0), 24 | severity: err.level, 25 | message: err.message}); 26 | }; 27 | try { 28 | var res = coffeelint.lint(text); 29 | for(var i = 0; i < res.length; i++) { 30 | parseError(res[i]); 31 | } 32 | } catch(e) { 33 | found.push({from: CodeMirror.Pos(e.location.first_line, 0), 34 | to: CodeMirror.Pos(e.location.last_line, e.location.last_column), 35 | severity: 'error', 36 | message: e.message}); 37 | } 38 | return found; 39 | }); 40 | 41 | }); 42 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/addon/lint/css-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | // Depends on csslint.js from https://github.com/stubbornella/csslint 5 | 6 | // declare global: CSSLint 7 | 8 | (function(mod) { 9 | if (typeof exports == "object" && typeof module == "object") // CommonJS 10 | mod(require("../../lib/codemirror")); 11 | else if (typeof define == "function" && define.amd) // AMD 12 | define(["../../lib/codemirror"], mod); 13 | else // Plain browser env 14 | mod(CodeMirror); 15 | })(function(CodeMirror) { 16 | "use strict"; 17 | 18 | CodeMirror.registerHelper("lint", "css", function(text) { 19 | var found = []; 20 | if (!window.CSSLint) return found; 21 | var results = CSSLint.verify(text), messages = results.messages, message = null; 22 | for ( var i = 0; i < messages.length; i++) { 23 | message = messages[i]; 24 | var startLine = message.line -1, endLine = message.line -1, startCol = message.col -1, endCol = message.col; 25 | found.push({ 26 | from: CodeMirror.Pos(startLine, startCol), 27 | to: CodeMirror.Pos(endLine, endCol), 28 | message: message.message, 29 | severity : message.type 30 | }); 31 | } 32 | return found; 33 | }); 34 | 35 | }); 36 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/addon/lint/json-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | // Depends on jsonlint.js from https://github.com/zaach/jsonlint 5 | 6 | // declare global: jsonlint 7 | 8 | (function(mod) { 9 | if (typeof exports == "object" && typeof module == "object") // CommonJS 10 | mod(require("../../lib/codemirror")); 11 | else if (typeof define == "function" && define.amd) // AMD 12 | define(["../../lib/codemirror"], mod); 13 | else // Plain browser env 14 | mod(CodeMirror); 15 | })(function(CodeMirror) { 16 | "use strict"; 17 | 18 | CodeMirror.registerHelper("lint", "json", function(text) { 19 | var found = []; 20 | jsonlint.parseError = function(str, hash) { 21 | var loc = hash.loc; 22 | found.push({from: CodeMirror.Pos(loc.first_line - 1, loc.first_column), 23 | to: CodeMirror.Pos(loc.last_line - 1, loc.last_column), 24 | message: str}); 25 | }; 26 | try { jsonlint.parse(text); } 27 | catch(e) {} 28 | return found; 29 | }); 30 | 31 | }); 32 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/addon/lint/yaml-lint.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 | // Depends on js-yaml.js from https://github.com/nodeca/js-yaml 15 | 16 | // declare global: jsyaml 17 | 18 | CodeMirror.registerHelper("lint", "yaml", function(text) { 19 | var found = []; 20 | try { jsyaml.load(text); } 21 | catch(e) { 22 | var loc = e.mark; 23 | found.push({ from: CodeMirror.Pos(loc.line, loc.column), to: CodeMirror.Pos(loc.line, loc.column), message: e.message }); 24 | } 25 | return found; 26 | }); 27 | 28 | }); 29 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/addon/mode/multiplex_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 | CodeMirror.defineMode("markdown_with_stex", function(){ 6 | var inner = CodeMirror.getMode({}, "stex"); 7 | var outer = CodeMirror.getMode({}, "markdown"); 8 | 9 | var innerOptions = { 10 | open: '$', 11 | close: '$', 12 | mode: inner, 13 | delimStyle: 'delim', 14 | innerStyle: 'inner' 15 | }; 16 | 17 | return CodeMirror.multiplexingMode(outer, innerOptions); 18 | }); 19 | 20 | var mode = CodeMirror.getMode({}, "markdown_with_stex"); 21 | 22 | function MT(name) { 23 | test.mode( 24 | name, 25 | mode, 26 | Array.prototype.slice.call(arguments, 1), 27 | 'multiplexing'); 28 | } 29 | 30 | MT( 31 | "stexInsideMarkdown", 32 | "[strong **Equation:**] [delim $][inner&tag \\pi][delim $]"); 33 | })(); 34 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/addon/runmode/colorize.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("./runmode")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror", "./runmode"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | var isBlock = /^(p|li|div|h\\d|pre|blockquote|td)$/; 15 | 16 | function textContent(node, out) { 17 | if (node.nodeType == 3) return out.push(node.nodeValue); 18 | for (var ch = node.firstChild; ch; ch = ch.nextSibling) { 19 | textContent(ch, out); 20 | if (isBlock.test(node.nodeType)) out.push("\n"); 21 | } 22 | } 23 | 24 | CodeMirror.colorize = function(collection, defaultMode) { 25 | if (!collection) collection = document.body.getElementsByTagName("pre"); 26 | 27 | for (var i = 0; i < collection.length; ++i) { 28 | var node = collection[i]; 29 | var mode = node.getAttribute("data-lang") || defaultMode; 30 | if (!mode) continue; 31 | 32 | var text = []; 33 | textContent(node, text); 34 | node.innerHTML = ""; 35 | CodeMirror.runMode(text.join(""), mode, node); 36 | 37 | node.className += " cm-s-default"; 38 | } 39 | }; 40 | }); 41 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/addon/search/matchesonscrollbar.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-search-match { 2 | background: gold; 3 | border-top: 1px solid orange; 4 | border-bottom: 1px solid orange; 5 | -moz-box-sizing: border-box; 6 | box-sizing: border-box; 7 | opacity: .5; 8 | } 9 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/addon/tern/worker.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | // declare global: tern, server 5 | 6 | var server; 7 | 8 | this.onmessage = function(e) { 9 | var data = e.data; 10 | switch (data.type) { 11 | case "init": return startServer(data.defs, data.plugins, data.scripts); 12 | case "add": return server.addFile(data.name, data.text); 13 | case "del": return server.delFile(data.name); 14 | case "req": return server.request(data.body, function(err, reqData) { 15 | postMessage({id: data.id, body: reqData, err: err && String(err)}); 16 | }); 17 | case "getFile": 18 | var c = pending[data.id]; 19 | delete pending[data.id]; 20 | return c(data.err, data.text); 21 | default: throw new Error("Unknown message type: " + data.type); 22 | } 23 | }; 24 | 25 | var nextId = 0, pending = {}; 26 | function getFile(file, c) { 27 | postMessage({type: "getFile", name: file, id: ++nextId}); 28 | pending[nextId] = c; 29 | } 30 | 31 | function startServer(defs, plugins, scripts) { 32 | if (scripts) importScripts.apply(null, scripts); 33 | 34 | server = new tern.Server({ 35 | getFile: getFile, 36 | async: true, 37 | defs: defs, 38 | plugins: plugins 39 | }); 40 | } 41 | 42 | var console = { 43 | log: function(v) { postMessage({type: "debug", message: v}); } 44 | }; 45 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codemirror", 3 | "version":"5.0.0", 4 | "main": ["lib/codemirror.js", "lib/codemirror.css"], 5 | "ignore": [ 6 | "**/.*", 7 | "node_modules", 8 | "components", 9 | "bin", 10 | "demo", 11 | "doc", 12 | "test", 13 | "index.html", 14 | "package.json" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/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 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/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 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/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 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/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 | } -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codemirror", 3 | "version":"5.0.0", 4 | "main": "lib/codemirror.js", 5 | "description": "In-browser code editing made bearable", 6 | "licenses": [{"type": "MIT", 7 | "url": "http://codemirror.net/LICENSE"}], 8 | "directories": {"lib": "./lib"}, 9 | "scripts": {"test": "node ./test/run.js"}, 10 | "devDependencies": {"node-static": "0.6.0", 11 | "phantomjs": "1.9.2-5", 12 | "blint": ">=0.1.1"}, 13 | "bugs": "http://github.com/codemirror/CodeMirror/issues", 14 | "keywords": ["JavaScript", "CodeMirror", "Editor"], 15 | "homepage": "http://codemirror.net", 16 | "maintainers":[{"name": "Marijn Haverbeke", 17 | "email": "marijnh@gmail.com", 18 | "web": "http://marijnhaverbeke.nl"}], 19 | "repository": {"type": "git", 20 | "url": "https://github.com/codemirror/CodeMirror.git"} 21 | } 22 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/theme/ambiance-mobile.css: -------------------------------------------------------------------------------- 1 | .cm-s-ambiance.CodeMirror { 2 | -webkit-box-shadow: none; 3 | -moz-box-shadow: none; 4 | box-shadow: none; 5 | } 6 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/theme/eclipse.css: -------------------------------------------------------------------------------- 1 | .cm-s-eclipse span.cm-meta {color: #FF1717;} 2 | .cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; } 3 | .cm-s-eclipse span.cm-atom {color: #219;} 4 | .cm-s-eclipse span.cm-number {color: #164;} 5 | .cm-s-eclipse span.cm-def {color: #00f;} 6 | .cm-s-eclipse span.cm-variable {color: black;} 7 | .cm-s-eclipse span.cm-variable-2 {color: #0000C0;} 8 | .cm-s-eclipse span.cm-variable-3 {color: #0000C0;} 9 | .cm-s-eclipse span.cm-property {color: black;} 10 | .cm-s-eclipse span.cm-operator {color: black;} 11 | .cm-s-eclipse span.cm-comment {color: #3F7F5F;} 12 | .cm-s-eclipse span.cm-string {color: #2A00FF;} 13 | .cm-s-eclipse span.cm-string-2 {color: #f50;} 14 | .cm-s-eclipse span.cm-qualifier {color: #555;} 15 | .cm-s-eclipse span.cm-builtin {color: #30a;} 16 | .cm-s-eclipse span.cm-bracket {color: #cc7;} 17 | .cm-s-eclipse span.cm-tag {color: #170;} 18 | .cm-s-eclipse span.cm-attribute {color: #00c;} 19 | .cm-s-eclipse span.cm-link {color: #219;} 20 | .cm-s-eclipse span.cm-error {color: #f00;} 21 | 22 | .cm-s-eclipse .CodeMirror-activeline-background {background: #e8f2ff !important;} 23 | .cm-s-eclipse .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} 24 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/theme/elegant.css: -------------------------------------------------------------------------------- 1 | .cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom {color: #762;} 2 | .cm-s-elegant span.cm-comment {color: #262; font-style: italic; line-height: 1em;} 3 | .cm-s-elegant span.cm-meta {color: #555; font-style: italic; line-height: 1em;} 4 | .cm-s-elegant span.cm-variable {color: black;} 5 | .cm-s-elegant span.cm-variable-2 {color: #b11;} 6 | .cm-s-elegant span.cm-qualifier {color: #555;} 7 | .cm-s-elegant span.cm-keyword {color: #730;} 8 | .cm-s-elegant span.cm-builtin {color: #30a;} 9 | .cm-s-elegant span.cm-link {color: #762;} 10 | .cm-s-elegant span.cm-error {background-color: #fdd;} 11 | 12 | .cm-s-elegant .CodeMirror-activeline-background {background: #e8f2ff !important;} 13 | .cm-s-elegant .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} 14 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/theme/neat.css: -------------------------------------------------------------------------------- 1 | .cm-s-neat span.cm-comment { color: #a86; } 2 | .cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; } 3 | .cm-s-neat span.cm-string { color: #a22; } 4 | .cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; } 5 | .cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; } 6 | .cm-s-neat span.cm-variable { color: black; } 7 | .cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; } 8 | .cm-s-neat span.cm-meta {color: #555;} 9 | .cm-s-neat span.cm-link { color: #3a3; } 10 | 11 | .cm-s-neat .CodeMirror-activeline-background {background: #e8f2ff !important;} 12 | .cm-s-neat .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} 13 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/codemirror/theme/neo.css: -------------------------------------------------------------------------------- 1 | /* neo theme for codemirror */ 2 | 3 | /* Color scheme */ 4 | 5 | .cm-s-neo.CodeMirror { 6 | background-color:#ffffff; 7 | color:#2e383c; 8 | line-height:1.4375; 9 | } 10 | .cm-s-neo .cm-comment {color:#75787b} 11 | .cm-s-neo .cm-keyword, .cm-s-neo .cm-property {color:#1d75b3} 12 | .cm-s-neo .cm-atom,.cm-s-neo .cm-number {color:#75438a} 13 | .cm-s-neo .cm-node,.cm-s-neo .cm-tag {color:#9c3328} 14 | .cm-s-neo .cm-string {color:#b35e14} 15 | .cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier {color:#047d65} 16 | 17 | 18 | /* Editor styling */ 19 | 20 | .cm-s-neo pre { 21 | padding:0; 22 | } 23 | 24 | .cm-s-neo .CodeMirror-gutters { 25 | border:none; 26 | border-right:10px solid transparent; 27 | background-color:transparent; 28 | } 29 | 30 | .cm-s-neo .CodeMirror-linenumber { 31 | padding:0; 32 | color:#e0e2e5; 33 | } 34 | 35 | .cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; } 36 | .cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; } 37 | 38 | .cm-s-neo div.CodeMirror-cursor { 39 | width: auto; 40 | border: 0; 41 | background: rgba(155,157,162,0.37); 42 | z-index: 1; 43 | } 44 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/editormd-1.5.0/lib/jquery.flowchart.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery.flowchart.js v1.1.0 | jquery.flowchart.min.js | jQuery plugin for flowchart.js. | MIT License | By: Pandao | https://github.com/pandao/jquery.flowchart.js | 2015-03-09 */ 2 | (function(factory){if(typeof require==="function"&&typeof exports==="object"&&typeof module==="object"){module.exports=factory}else{if(typeof define==="function"){factory(jQuery,flowchart)}else{factory($,flowchart)}}}(function(jQuery,flowchart){(function($){$.fn.flowChart=function(options){options=options||{};var defaults={"x":0,"y":0,"line-width":2,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black","fill":"white","yes-text":"yes","no-text":"no","arrow-end":"block","symbols":{"start":{"font-color":"black","element-color":"black","fill":"white"},"end":{"class":"end-element"}},"flowstate":{"past":{"fill":"#CCCCCC","font-size":12},"current":{"fill":"black","font-color":"white","font-weight":"bold"},"future":{"fill":"white"},"request":{"fill":"blue"},"invalid":{"fill":"#444444"},"approved":{"fill":"#58C4A3","font-size":12,"yes-text":"APPROVED","no-text":"n/a"},"rejected":{"fill":"#C45879","font-size":12,"yes-text":"n/a","no-text":"REJECTED"}}};return this.each(function(){var $this=$(this);var diagram=flowchart.parse($this.text());var settings=$.extend(true,defaults,options);$this.html("");diagram.drawSVG(this,settings)})}})(jQuery)})); -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/textAngular-1.5.0/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/textAngular-1.5.0/.DS_Store -------------------------------------------------------------------------------- /api/src/main/webapp/resources/framework/wang-editor-3.1.1/fonts/w-e-icon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/framework/wang-editor-3.1.1/fonts/w-e-icon.woff -------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/subTpl/bugLog.tpl.html: -------------------------------------------------------------------------------- 1 |
2 |
操作日志
3 |  刷新 5 |
6 |
7 | 8 | {{bugLog.operatorStr}} 9 | 10 |
11 | 12 | 将 13 | {{bugLog.typeStr}} 从 14 | {{bugLog.originalValue}} 15 | 修改为 16 | {{bugLog.newValue}} 17 |
18 |
-------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/subTpl/interEditDialog.tpl.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 5 | 7 | 9 |
10 | 11 |
12 | 备注 * : 13 | 14 | 15 | 18 |
19 |
20 | 21 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/subTpl/interHeaderEdit.tpl.html: -------------------------------------------------------------------------------- 1 |
2 | 请求头 3 | 5 | 6 | 7 | 8 | 11 | 14 |
15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
名称必填类型默认值备注操作
30 |
31 |
-------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/subTpl/interResParamEdit.tpl.html: -------------------------------------------------------------------------------- 1 |
2 | 返回参数 3 | 5 | 6 | 7 | 8 | 11 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
名称必填类型备注操作
28 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/subTpl/subMenuMenu.tpl.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/subTpl/subMenuProject.tpl.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/subTpl/subMenuSetting.tpl.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/subTpl/visitorLeft.tpl.html: -------------------------------------------------------------------------------- 1 |
3 |
4 |
5 |
6 |
7 | 8 |
9 |
10 |
11 |
12 | 13 |
14 |
15 |
16 | 17 |
18 | 19 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/user/commentDetail.tpl.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 16 | 17 |
评论内容 8 | 9 |
回复内容 14 | 15 |
18 | 19 |
20 | 21 |
22 |
23 |
24 | 25 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/user/errorDetail.tpl.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 |
Code 8 | 9 |
Msg
项目 19 | 20 |
23 | 24 |
25 | 26 |
27 |
28 |
29 | 30 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/user/interfaceCopy.tpl.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 接口名称: 5 | 7 | 接口地址: 8 | 10 | 模块: 11 | 13 | 14 |
15 |
16 |
17 |
18 | 19 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/user/logDetail.tpl.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 35 | 36 |
类型
备注
操作 15 | 【{{model.type}}* 恢复数据后原有数据将被覆盖,请谨慎使用 16 | 18 |  恢复 19 | 20 |
操作人
时间
修改前的类容 33 |

34 | 				
37 | 39 |  恢复 40 | 41 |
42 |
43 |
44 | 45 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/visitor/articleDetail_ARTICLE.tpl.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 |
7 |
{{article.name}}
8 |
9 | {{article.brief}} 10 |
11 | 12 |
13 | 14 |
16 | 18 |
19 |
20 |
21 |
22 |
23 | 24 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/visitor/articleDetail_DICTIONARY.tpl.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
{{article.name}}
4 |
5 | {{article.brief}} 6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
字段类型默认标识注释
{{item.name}}{{item.type}}{{item.notNull=='true'?'是':'否'}}{{item.def}}{{item.flag|toChinese}}{{item.remark}}
25 |
26 |
27 | 28 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/visitor/articleList_ARTICLE.tpl.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
文档筛选:
5 | 8 |
9 |
10 | 该模块下没有文档 11 |
12 |
13 |
14 | 15 | {{item.name}} 16 |
{{item.brief| cut:true:150:' ...'}}
17 |
点击量:{{item.click}}次 {{getDate(item.createTime)|date:'yyyy-MM-dd'}}
18 |
19 |
20 | 21 |
22 |
23 |
24 | 25 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/visitor/articleList_DICTIONARY.tpl.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
数据库表列表
4 |
5 | 7 |
8 |
9 | 该模块下没有数据库表 10 |
11 |
12 |
13 | 15 |
16 |
模块:{{item.moduleName}} {{getDate(item.createTime)|date:'yyyy-MM-dd'}}
17 |
18 |
19 | 20 |
21 |
22 |
23 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/visitor/notFound.tpl.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
页面找不到
4 |
5 | 抱歉!访问的页面不存在,你可选择一下操作... 6 |
7 | 8 |
9 | 15 |
16 |
17 |
18 |
19 | 20 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/visitor/page.tpl.html: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 |
Total:{{page.allRow}}  {{page.currentPage}}/{{page.totalPage}}
20 |
-------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/visitor/page_xs.tpl.html: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 |
Total:{{page.allRow}}  {{page.currentPage}}/{{page.totalPage}}
20 |
-------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/visitor/sourceDetail.tpl.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
5 |
{{source.name}}
6 |  下载 8 |
9 |
10 |

11 | 
12 |
13 |
14 | 15 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/html/visitor/sourceList.tpl.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
目录列表
4 | 5 |
6 | 目录为空 7 |
8 | 9 | 10 |
11 | 12 |
13 | 14 | {{item.name}} 15 |
16 |
{{getDate(item.createTime)|date:'yyyy-MM-dd'}}
17 |
18 |
19 |
20 |
21 |
22 | 23 | -------------------------------------------------------------------------------- /api/src/main/webapp/resources/images/admin_page.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/images/admin_page.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/images/alipay.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/images/alipay.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/images/bg.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/images/bg.jpeg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/images/bg_new.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/images/bg_new.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/images/bg_web.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/images/bg_web.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/images/chrome_debug.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/images/chrome_debug.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/images/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/images/cover.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/images/example1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/images/example1.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/images/example2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/images/example2.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/images/guidev8.0.0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/images/guidev8.0.0.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/images/loading.gif -------------------------------------------------------------------------------- /api/src/main/webapp/resources/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/images/logo.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/images/logo_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/images/logo_new.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/images/postwoman_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/images/postwoman_logo.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/images/project.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/images/project.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/images/transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/images/transparent.png -------------------------------------------------------------------------------- /api/src/main/webapp/resources/images/wepay.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EhsanTang/ApiManager/7daad08237e1c5909a5f782cfb76f136f4eeed52/api/src/main/webapp/resources/images/wepay.jpg -------------------------------------------------------------------------------- /api/src/main/webapp/resources/js/const.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 站点url 3 | * @type {{my-project: string}} 4 | */ 5 | var MY_PROJECT = "my-project"; 6 | var URL_LIST = { 7 | "my-project": "#user/project/list?projectShowType=3&menu_b=menu_create_join&menu_a=menu-project&pageName=我的项目", 8 | "my-create-project" : "#user/project/list?projectShowType=1&menu_b=menu_create&menu_a=menu-project&pageName=我的创建的项目", 9 | "my-join-project" : "#user/project/list?projectShowType=2&menu_b=menu_join&menu_a=menu-project&pageName=我的加入的项目", 10 | "all-project" : "#user/project/list?projectShowType=0&menu_b=menu_all_project&menu_a=menu-project&pageName=所有用户项目", 11 | "profile" : "#/profile?menu_a=menu-profile&pageName=个人资料" 12 | } -------------------------------------------------------------------------------- /api/src/main/webapp/resources/js/userProjectMetaCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * projectMeta管理系统 controller 3 | */ 4 | projectMetaModule.controller('userProjectMetaCtrl', function($rootScope,$scope, $http, $state,$location,$stateParams,httpService) { 5 | var VO_NAME = 'projectMetaVO'; 6 | var VO_LIST_NAME = 'projectMetaVOList'; 7 | 8 | // 公用分页方法 9 | $scope.pageMethod = function(callBackMethod, page, updateUrl) { 10 | $scope[callBackMethod](page, updateUrl); 11 | }; 12 | 13 | $scope.queryProjectMetaList = function (page, updateUrl) { 14 | var params = "iUrl=user/projectMeta/list.do|iLoading=FLOAT|iPost=POST|iParams=" 15 | + "&moduleId=" + $stateParams.moduleId 16 | + "&projectId=" + $stateParams.projectId 17 | + "&name=" + $stateParams.name 18 | + "&type=" + $stateParams.type; 19 | if (updateUrl) { 20 | var url = replaceParamFromUrl($location.url(), 'currentPage', page); 21 | url = url.substr(1, url.length - 1); 22 | $rootScope.go(url); 23 | return; 24 | } 25 | if (!page) { 26 | page = $stateParams.currentPage; 27 | } 28 | $rootScope.getBaseDataToDataKey($scope, $http, params, page, VO_LIST_NAME); 29 | }; 30 | }); 31 | 32 | -------------------------------------------------------------------------------- /api/src/readMe.txt: -------------------------------------------------------------------------------- 1 | 1. 方法命名规则:驼峰命名,增、删、改、查分别使用 add、delete、update、query 开头。如果查询有必填参数,则必须在后面添加 *By[参数名] -------------------------------------------------------------------------------- /api/src/test/java/Test.java: -------------------------------------------------------------------------------- 1 | import cn.crap.utils.HttpPostGet; 2 | 3 | /** 4 | * @author Ehsan 5 | * @date 2018/5/27 17:11 6 | */ 7 | public class Test { 8 | public static void main(String args[]) { 9 | String error = " insert into log ( id, createTime, sequence, modelClass, modelName, type, updateBy, remark, identy, content ) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"; 10 | int index = error.indexOf("insert into") + 11; 11 | System.out.println(error.substring(index, error.length()).split(" ")[1].trim()); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /api/src/test/java/genCode/genTemple/Adapter: -------------------------------------------------------------------------------- 1 | package cn.crap.adapter; 2 | 3 | import cn.crap.dto._DEMAIN_Dto; 4 | import cn.crap.model.mybatis._DEMAIN_; 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | import org.springframework.util.CollectionUtils; 8 | 9 | 10 | 11 | /** 12 | * Automatic generation by tools 13 | * model adapter: convert model to dto 14 | * Avoid exposing sensitive data and modifying data that is not allowed to be modified 15 | */ 16 | public class _DEMAIN_Adapter { 17 | public static _DEMAIN_Dto getDto(_DEMAIN_ model){ 18 | if (model == null){ 19 | return null; 20 | } 21 | 22 | _DEMAIN_Dto dto = new _DEMAIN_Dto(); 23 | %s 24 | return dto; 25 | } 26 | 27 | public static _DEMAIN_ getModel(_DEMAIN_Dto dto){ 28 | if (dto == null){ 29 | return null; 30 | } 31 | _DEMAIN_ model = new _DEMAIN_(); 32 | %s 33 | return model; 34 | } 35 | 36 | public static List<_DEMAIN_Dto> getDto(List<_DEMAIN_> models){ 37 | if (CollectionUtils.isEmpty(models)){ 38 | return new ArrayList<>(); 39 | } 40 | List<_DEMAIN_Dto> dtos = new ArrayList<>(); 41 | for (_DEMAIN_ model : models){ 42 | dtos.add(getDto(model)); 43 | } 44 | return dtos; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /api/src/test/java/genCode/genTemple/Dto: -------------------------------------------------------------------------------- 1 | package cn.crap.dto; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * Automatic generation by tools 7 | * dto: exchange data with view 8 | */ 9 | public class %sDto{ 10 | %s 11 | %s 12 | } 13 | -------------------------------------------------------------------------------- /api/src/test/java/genCode/genTemple/readme.txt: -------------------------------------------------------------------------------- 1 | # 该目录为自动生成代码模板存放目录 -------------------------------------------------------------------------------- /api/src/test/java/genCode/utils/GenSqlUtil.java: -------------------------------------------------------------------------------- 1 | package genCode.utils; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | import java.sql.*; 6 | 7 | public class GenSqlUtil { 8 | 9 | public static Connection openConnection() { 10 | try { 11 | // 加载MySql的驱动类 12 | Class.forName("com.mysql.jdbc.Driver"); 13 | } catch (ClassNotFoundException e) { 14 | System.out.println("找不到驱动程序类 ,加载驱动失败!"); 15 | e.printStackTrace(); 16 | } 17 | String url = "jdbc:mysql://localhost:3306/apidev?useUnicode=true&characterEncoding=utf-8"; 18 | String username = "apidev"; 19 | String password = "apidev"; 20 | try { 21 | Connection con = DriverManager.getConnection(url, username, password); 22 | return con; 23 | } catch (SQLException se) { 24 | System.out.println("数据库连接失败!"); 25 | se.printStackTrace(); 26 | } 27 | return null; 28 | 29 | } 30 | public static void closeDatabase(Connection conn, PreparedStatement pstmt) { 31 | if( conn != null){ 32 | try { 33 | conn.close(); 34 | } catch (SQLException e) { 35 | e.printStackTrace(); 36 | } 37 | } 38 | if( pstmt != null){ 39 | try { 40 | pstmt.close(); 41 | } catch (SQLException e) { 42 | e.printStackTrace(); 43 | } 44 | } 45 | 46 | } 47 | } -------------------------------------------------------------------------------- /api/src/test/java/unitTest/LuceneTest.java: -------------------------------------------------------------------------------- 1 | //package unitTest; 2 | // 3 | //import org.junit.Test; 4 | //import org.junit.runner.RunWith; 5 | //import org.springframework.beans.factory.annotation.Autowired; 6 | //import org.springframework.test.context.ContextConfiguration; 7 | //import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 8 | // 9 | //import cn.crap.service.ISearchService; 10 | // 11 | //@RunWith(SpringJUnit4ClassRunner.class) 12 | //@ContextConfiguration(locations={"classpath:spring-servlet.xml"}) 13 | //public class LuceneTest { 14 | // @Autowired 15 | // ISearchService service; 16 | // 17 | //// @Test 18 | //// public void rebuild(){ 19 | //// System.out.println(service.rebuild()); 20 | //// } 21 | //} 22 | -------------------------------------------------------------------------------- /api/src/test/resources/test.txt: -------------------------------------------------------------------------------- 1 | 测试文件目录 -------------------------------------------------------------------------------- /部署帮助文档.md: -------------------------------------------------------------------------------- 1 | # CrapApi部署帮助文档 2 | 3 | ----------------[下载编译好的压缩包部署] 4 | 每个文档版本都会提供对应版本的编译好的压缩包,解压下载部署到tomcat下即可,部署方式请自行度娘! 5 | 压缩文件下载地址:http://api.crap.cn/index.do#/web/article/detail/web/ARTICLE/a00534f1-7e50-45e2-9e72-fc9ede829dec 6 | 压缩包中一般均会包含对应版本的sql脚本,直接执行该脚本即可,不需要再执行任何其他sql脚本!!! 7 | Sql执行可能会报错!!!原因:本人使用workbench工具导出脚本,使用其他工具导入时可能会提示报错,请根据报错原因,自行修复!!! 8 | (注:99.99999%的报错都是由于工具自行添加了注释之类的脚本,删除不识别的脚本后即可,至于那些是工具添加的,那些事有用的脚本,请自行补休sql知识) 9 | 10 | 11 | ----------------[使用源代码部署] 12 | GitHub、码云的主干地址均为最新版本的源码,并包含了新的全部sql脚本。下载后导入至eclipse等开发工具(maven项目),然后编译即可。 13 | 如果出现报错,绝大多数情况是你的网络有问题,maven依赖jar包下载失败导致,请前往 https://pan.baidu.com/s/1nvdMuoD 下载作者为你准备好的mave仓库, 14 | 下载解压至你的本地仓库即可,maven仓库等知识请自行学习!!! 15 | --------------------------------------------------------------------------------