Copy disabled (too large)
Download .txt
Showing preview only (14,736K chars total). Download the full file to get everything.
Repository: Ucer/codehaoshi
Branch: master
Commit: b7db5bf9a3ba
Files: 1215
Total size: 13.6 MB
Directory structure:
gitextract_2fo6ji28/
├── .gitattributes
├── .gitignore
├── app/
│ ├── Activities/
│ │ ├── BaseActivity.php
│ │ ├── UserCommentArticle.php
│ │ ├── UserFollowedUser.php
│ │ ├── UserReplyQuestion.php
│ │ ├── UserUpvoteArticle.php
│ │ └── UserUpvoteQuestion.php
│ ├── Codehaoshi/
│ │ ├── Core/
│ │ │ └── CreatorListener.php
│ │ ├── Creators/
│ │ │ ├── CommentCreator.php
│ │ │ ├── ReplyCreator.php
│ │ │ └── UserCreator.php
│ │ ├── Handler/
│ │ │ ├── BackupHandler.php
│ │ │ └── ImageUploadHandler.php
│ │ ├── Listeners/
│ │ │ └── UserCreatorListener.php
│ │ ├── Notification/
│ │ │ └── Metion.php
│ │ ├── Selectors/
│ │ │ ├── ArticleSelector.php
│ │ │ └── QuestionSelector.php
│ │ ├── Stat/
│ │ │ ├── Stat.php
│ │ │ └── StatEntity.php
│ │ └── Vote/
│ │ └── Voter.php
│ ├── Console/
│ │ ├── Commands/
│ │ │ ├── BaseCommand.php
│ │ │ ├── BindAdmin.php
│ │ │ └── CodehaoshiInstall.php
│ │ └── Kernel.php
│ ├── Exceptions/
│ │ └── Handler.php
│ ├── Helpers.php
│ ├── Http/
│ │ ├── Controllers/
│ │ │ ├── ActivityController.php
│ │ │ ├── Api/
│ │ │ │ ├── Apicontroller.php
│ │ │ │ ├── ArticleController.php
│ │ │ │ ├── CommentController.php
│ │ │ │ ├── FollowerController.php
│ │ │ │ ├── QuestionController.php
│ │ │ │ ├── ReplyController.php
│ │ │ │ ├── UploadController.php
│ │ │ │ └── Votecontroller.php
│ │ │ ├── ArticlesController.php
│ │ │ ├── Auth/
│ │ │ │ ├── ForgotPasswordController.php
│ │ │ │ ├── LoginController.php
│ │ │ │ ├── RegisterController.php
│ │ │ │ ├── ResetPasswordController.php
│ │ │ │ └── Traits/
│ │ │ │ └── SocialiteHelper.php
│ │ │ ├── CommentsController.php
│ │ │ ├── Controller.php
│ │ │ ├── Dashboard/
│ │ │ │ ├── AboutsController.php
│ │ │ │ ├── ArticleCategoryController.php
│ │ │ │ ├── ArticlesController.php
│ │ │ │ ├── IndexController.php
│ │ │ │ ├── LinksController.php
│ │ │ │ ├── PermissionsController.php
│ │ │ │ ├── QuestionCategoryController.php
│ │ │ │ ├── QuestionsController.php
│ │ │ │ ├── RolesController.php
│ │ │ │ ├── TagsController.php
│ │ │ │ ├── Traits/
│ │ │ │ │ └── ArticleHelper.php
│ │ │ │ └── UsersController.php
│ │ │ ├── HomeController.php
│ │ │ ├── NotificationsController.php
│ │ │ ├── PagesController.php
│ │ │ ├── QuestionsController.php
│ │ │ ├── TagController.php
│ │ │ └── UserController.php
│ │ ├── Kernel.php
│ │ ├── Middleware/
│ │ │ ├── EncryptCookies.php
│ │ │ ├── MustBeAdmin.php
│ │ │ ├── RedirectIfAuthenticated.php
│ │ │ ├── TrimStrings.php
│ │ │ └── VerifyCsrfToken.php
│ │ └── Requests/
│ │ ├── ArticleRequest.php
│ │ ├── ImageUploadRequest.php
│ │ ├── QuestionRequest.php
│ │ ├── ResetPasswordRequest.php
│ │ ├── StoreArticleCategoryRequest.php
│ │ ├── StorePermissionRequest.php
│ │ ├── StoreQuestionCategoryRequest.php
│ │ ├── StoreReplyOrCommentRequest.php
│ │ ├── StoreRoleRequest.php
│ │ ├── StoreTagRequest.php
│ │ ├── StoreUserRequest.php
│ │ ├── UpdateArticleCategoryRequest.php
│ │ ├── UpdatePermissionRequest.php
│ │ ├── UpdateQuestionCategoryRequest.php
│ │ ├── UpdateRoleRequest.php
│ │ ├── UpdateTagRequest.php
│ │ └── UpdateUserRequest.php
│ ├── Models/
│ │ ├── About.php
│ │ ├── Activity.php
│ │ ├── Article.php
│ │ ├── ArticleCategory.php
│ │ ├── Comment.php
│ │ ├── Follower.php
│ │ ├── Link.php
│ │ ├── Permission.php
│ │ ├── Question.php
│ │ ├── QuestionCategory.php
│ │ ├── Reply.php
│ │ ├── Role.php
│ │ ├── SiteStatus.php
│ │ ├── Tag.php
│ │ ├── Traits/
│ │ │ ├── ArticleFilterable.php
│ │ │ ├── BaseFilterable.php
│ │ │ ├── FollowerHelper.php
│ │ │ └── UserAvatorHelper.php
│ │ ├── User.php
│ │ └── Vote.php
│ ├── Notifications/
│ │ ├── NewUserFollowNotification.php
│ │ ├── ReceivedComment.php
│ │ ├── ReceivedReply.php
│ │ ├── UserVoteArticle.php
│ │ └── UserVoteQuestion.php
│ ├── Policies/
│ │ ├── ArticlePolicy.php
│ │ ├── CommentPolicy.php
│ │ ├── QuestionPolicy.php
│ │ ├── ReplyPolicy.php
│ │ └── UserPolicy.php
│ ├── Providers/
│ │ ├── AppServiceProvider.php
│ │ ├── AuthServiceProvider.php
│ │ ├── BroadcastServiceProvider.php
│ │ ├── CommonDataServiceProvider.php
│ │ ├── EventServiceProvider.php
│ │ └── RouteServiceProvider.php
│ ├── Repositories/
│ │ ├── AboutRepository.php
│ │ ├── ArticleCategoryRepository.php
│ │ ├── ArticleRepository.php
│ │ ├── BaseRepository.php
│ │ ├── CommentRepository.php
│ │ ├── LinkRepository.php
│ │ ├── PermissionRepository.php
│ │ ├── QuestionCategoryRepository.php
│ │ ├── QuestionRepository.php
│ │ ├── ReplyRepository.php
│ │ ├── RoleRepository.php
│ │ ├── TagRepository.php
│ │ └── UserRepository.php
│ ├── Tools/
│ │ ├── FileManager/
│ │ │ ├── BaseManager.php
│ │ │ └── UpyunManager.php
│ │ ├── Mailer.php
│ │ ├── Markdowner.php
│ │ └── UserMailer.php
│ └── Transformers/
│ ├── CommentTransformer.php
│ ├── ReplyTransformer.php
│ └── UserTransformer.php
├── artisan
├── bootstrap/
│ ├── app.php
│ ├── autoload.php
│ └── cache/
│ └── .gitignore
├── composer.json
├── config/
│ ├── app.php
│ ├── auth.php
│ ├── broadcasting.php
│ ├── cache.php
│ ├── codehaoshi.php
│ ├── dashboardMenu.php
│ ├── database.php
│ ├── entrust.php
│ ├── filesystems.php
│ ├── laravel-backup.php
│ ├── mail.php
│ ├── queue.php
│ ├── scout.php
│ ├── services.php
│ ├── session.php
│ └── view.php
├── database/
│ ├── .gitignore
│ ├── factories/
│ │ └── ModelFactory.php
│ ├── migrations/
│ │ ├── 2014_10_12_000000_create_users_table.php
│ │ ├── 2014_10_12_100000_create_password_resets_table.php
│ │ ├── 2017_08_03_153641_entrust_setup_tables.php
│ │ ├── 2017_08_05_175713_create_article_categories_table.php
│ │ ├── 2017_08_05_175737_create_articles_table.php
│ │ ├── 2017_08_07_070242_create_tags_table.php
│ │ ├── 2017_08_07_070317_create_taggables_table.php
│ │ ├── 2017_08_10_054604_create_comments_table.php
│ │ ├── 2017_08_13_063712_create_votes_table.php
│ │ ├── 2017_08_14_090729_create_followers_table.php
│ │ ├── 2017_08_14_124526_create_notifications_table.php
│ │ ├── 2017_08_18_154806_create_question_categories_table.php
│ │ ├── 2017_08_19_105055_create_questions_table.php
│ │ ├── 2017_08_19_153441_create_replies_table.php
│ │ ├── 2017_08_20_072744_create_activities_table.php
│ │ ├── 2017_08_22_111854_create_links_table.php
│ │ ├── 2017_08_22_111936_create_abouts_table.php
│ │ └── 2017_08_25_164526_create_sitestatus_table.php
│ └── seeds/
│ ├── ArticleCategoriesTableSeeder.php
│ ├── ArticlesTableSeeder.php
│ ├── DatabaseSeeder.php
│ ├── PermissionsTableSeeder.php
│ ├── QuestionCategoriesTableSeeder.php
│ ├── QuestionsTableSeeder.php
│ ├── RolesTableSeeder.php
│ ├── TaggablesTableSeeder.php
│ ├── TagsTableSeeder.php
│ └── UsersTableSeeder.php
├── package.json
├── phpunit.xml
├── public/
│ ├── .htaccess
│ ├── assets/
│ │ ├── css/
│ │ │ ├── components/
│ │ │ │ ├── accordion.css
│ │ │ │ ├── accordion.js
│ │ │ │ ├── ad.css
│ │ │ │ ├── api.js
│ │ │ │ ├── breadcrumb.css
│ │ │ │ ├── button.css
│ │ │ │ ├── card.css
│ │ │ │ ├── checkbox.css
│ │ │ │ ├── checkbox.js
│ │ │ │ ├── comment.css
│ │ │ │ ├── container.css
│ │ │ │ ├── dimmer.css
│ │ │ │ ├── dimmer.js
│ │ │ │ ├── divider.css
│ │ │ │ ├── dropdown.css
│ │ │ │ ├── dropdown.js
│ │ │ │ ├── embed.css
│ │ │ │ ├── embed.js
│ │ │ │ ├── feed.css
│ │ │ │ ├── flag.css
│ │ │ │ ├── form.css
│ │ │ │ ├── form.js
│ │ │ │ ├── grid.css
│ │ │ │ ├── header.css
│ │ │ │ ├── icon.css
│ │ │ │ ├── image.css
│ │ │ │ ├── input.css
│ │ │ │ ├── item.css
│ │ │ │ ├── label.css
│ │ │ │ ├── list.css
│ │ │ │ ├── loader.css
│ │ │ │ ├── menu.css
│ │ │ │ ├── message.css
│ │ │ │ ├── modal.css
│ │ │ │ ├── modal.js
│ │ │ │ ├── nag.css
│ │ │ │ ├── nag.js
│ │ │ │ ├── popup.css
│ │ │ │ ├── popup.js
│ │ │ │ ├── progress.css
│ │ │ │ ├── progress.js
│ │ │ │ ├── rail.css
│ │ │ │ ├── rating.css
│ │ │ │ ├── rating.js
│ │ │ │ ├── reset.css
│ │ │ │ ├── reveal.css
│ │ │ │ ├── search.css
│ │ │ │ ├── search.js
│ │ │ │ ├── segment.css
│ │ │ │ ├── shape.css
│ │ │ │ ├── shape.js
│ │ │ │ ├── sidebar.css
│ │ │ │ ├── sidebar.js
│ │ │ │ ├── site.css
│ │ │ │ ├── site.js
│ │ │ │ ├── state.js
│ │ │ │ ├── statistic.css
│ │ │ │ ├── step.css
│ │ │ │ ├── sticky.css
│ │ │ │ ├── sticky.js
│ │ │ │ ├── tab.css
│ │ │ │ ├── tab.js
│ │ │ │ ├── table.css
│ │ │ │ ├── transition.css
│ │ │ │ ├── transition.js
│ │ │ │ └── visibility.js
│ │ │ └── editor.css
│ │ ├── dashboard/
│ │ │ ├── css/
│ │ │ │ ├── fileinput.css
│ │ │ │ └── plugins/
│ │ │ │ ├── awesome-bootstrap-checkbox/
│ │ │ │ │ └── awesome-bootstrap-checkbox.css
│ │ │ │ ├── chosen/
│ │ │ │ │ └── chosen.css
│ │ │ │ ├── clockpicker/
│ │ │ │ │ └── clockpicker.css
│ │ │ │ ├── codemirror/
│ │ │ │ │ ├── ambiance.css
│ │ │ │ │ └── codemirror.css
│ │ │ │ ├── dataTables/
│ │ │ │ │ └── dataTables.bootstrap.css
│ │ │ │ ├── datapicker/
│ │ │ │ │ └── datepicker3.css
│ │ │ │ ├── dropzone/
│ │ │ │ │ ├── basic.css
│ │ │ │ │ └── dropzone.css
│ │ │ │ ├── footable/
│ │ │ │ │ └── footable.core.css
│ │ │ │ ├── fullcalendar/
│ │ │ │ │ ├── fullcalendar.css
│ │ │ │ │ └── fullcalendar.print.css
│ │ │ │ ├── iCheck/
│ │ │ │ │ └── custom.css
│ │ │ │ ├── ionRangeSlider/
│ │ │ │ │ ├── ion.rangeSlider.css
│ │ │ │ │ └── ion.rangeSlider.skinFlat.css
│ │ │ │ ├── jqgrid/
│ │ │ │ │ └── ui.jqgridffe4.css
│ │ │ │ ├── nouslider/
│ │ │ │ │ └── jquery.nouislider.css
│ │ │ │ ├── plyr/
│ │ │ │ │ └── plyr.css
│ │ │ │ ├── simditor/
│ │ │ │ │ └── simditor.css
│ │ │ │ ├── steps/
│ │ │ │ │ └── jquery.steps.css
│ │ │ │ ├── summernote/
│ │ │ │ │ ├── summernote-bs3.css
│ │ │ │ │ └── summernote.css
│ │ │ │ ├── sweetalert/
│ │ │ │ │ └── sweetalert.css
│ │ │ │ ├── switchery/
│ │ │ │ │ └── switchery.css
│ │ │ │ ├── treeview/
│ │ │ │ │ └── bootstrap-treeview.css
│ │ │ │ └── webuploader/
│ │ │ │ └── webuploader.css
│ │ │ ├── dist/
│ │ │ │ ├── css/
│ │ │ │ │ ├── AdminLTE.css
│ │ │ │ │ └── skins/
│ │ │ │ │ ├── _all-skins.css
│ │ │ │ │ ├── skin-black-light.css
│ │ │ │ │ ├── skin-black.css
│ │ │ │ │ ├── skin-blue-light.css
│ │ │ │ │ ├── skin-blue.css
│ │ │ │ │ ├── skin-green-light.css
│ │ │ │ │ ├── skin-green.css
│ │ │ │ │ ├── skin-purple-light.css
│ │ │ │ │ ├── skin-purple.css
│ │ │ │ │ ├── skin-red-light.css
│ │ │ │ │ ├── skin-red.css
│ │ │ │ │ ├── skin-yellow-light-s.css
│ │ │ │ │ ├── skin-yellow-light.css
│ │ │ │ │ └── skin-yellow.css
│ │ │ │ └── js/
│ │ │ │ ├── app.js
│ │ │ │ ├── demo.js
│ │ │ │ └── pages/
│ │ │ │ ├── dashboard.js
│ │ │ │ └── dashboard2.js
│ │ │ ├── iCheck/
│ │ │ │ ├── all.css
│ │ │ │ ├── flat/
│ │ │ │ │ ├── _all.css
│ │ │ │ │ ├── aero.css
│ │ │ │ │ ├── blue.css
│ │ │ │ │ ├── flat.css
│ │ │ │ │ ├── green.css
│ │ │ │ │ ├── grey.css
│ │ │ │ │ ├── orange.css
│ │ │ │ │ ├── pink.css
│ │ │ │ │ ├── purple.css
│ │ │ │ │ ├── red.css
│ │ │ │ │ └── yellow.css
│ │ │ │ ├── futurico/
│ │ │ │ │ └── futurico.css
│ │ │ │ ├── icheck.js
│ │ │ │ ├── line/
│ │ │ │ │ ├── _all.css
│ │ │ │ │ ├── aero.css
│ │ │ │ │ ├── blue.css
│ │ │ │ │ ├── green.css
│ │ │ │ │ ├── grey.css
│ │ │ │ │ ├── line.css
│ │ │ │ │ ├── orange.css
│ │ │ │ │ ├── pink.css
│ │ │ │ │ ├── purple.css
│ │ │ │ │ ├── red.css
│ │ │ │ │ └── yellow.css
│ │ │ │ ├── minimal/
│ │ │ │ │ ├── _all.css
│ │ │ │ │ ├── aero.css
│ │ │ │ │ ├── blue.css
│ │ │ │ │ ├── green.css
│ │ │ │ │ ├── grey.css
│ │ │ │ │ ├── minimal.css
│ │ │ │ │ ├── orange.css
│ │ │ │ │ ├── pink.css
│ │ │ │ │ ├── purple.css
│ │ │ │ │ ├── red.css
│ │ │ │ │ └── yellow.css
│ │ │ │ ├── polaris/
│ │ │ │ │ └── polaris.css
│ │ │ │ └── square/
│ │ │ │ ├── _all.css
│ │ │ │ ├── aero.css
│ │ │ │ ├── blue.css
│ │ │ │ ├── green.css
│ │ │ │ ├── grey.css
│ │ │ │ ├── orange.css
│ │ │ │ ├── pink.css
│ │ │ │ ├── purple.css
│ │ │ │ ├── red.css
│ │ │ │ ├── square.css
│ │ │ │ └── yellow.css
│ │ │ ├── js/
│ │ │ │ ├── chosen/
│ │ │ │ │ ├── chosen.css
│ │ │ │ │ ├── chosen.jquery.js
│ │ │ │ │ └── jquery-1.9.1.js
│ │ │ │ ├── contabs.js
│ │ │ │ ├── contabs1.js
│ │ │ │ ├── fileinput.js
│ │ │ │ ├── fileinput_locale_zh.js
│ │ │ │ ├── global.js
│ │ │ │ ├── jquery.form.js
│ │ │ │ ├── layer/
│ │ │ │ │ ├── extend/
│ │ │ │ │ │ └── layer.ext.js
│ │ │ │ │ ├── layer.js
│ │ │ │ │ └── skin/
│ │ │ │ │ ├── layer.css
│ │ │ │ │ ├── layer.ext.css
│ │ │ │ │ └── moon/
│ │ │ │ │ └── style.css
│ │ │ │ ├── laypage/
│ │ │ │ │ ├── laypage.js
│ │ │ │ │ └── skin/
│ │ │ │ │ └── laypage.css
│ │ │ │ ├── laytpl/
│ │ │ │ │ └── laytpl.js
│ │ │ │ ├── plugins/
│ │ │ │ │ ├── beautifyhtml/
│ │ │ │ │ │ └── beautifyhtml.js
│ │ │ │ │ ├── chosen/
│ │ │ │ │ │ └── chosen.jquery.js
│ │ │ │ │ ├── clockpicker/
│ │ │ │ │ │ └── clockpicker.js
│ │ │ │ │ ├── codemirror/
│ │ │ │ │ │ ├── codemirror.js
│ │ │ │ │ │ └── mode/
│ │ │ │ │ │ └── javascript/
│ │ │ │ │ │ └── javascript.js
│ │ │ │ │ ├── dataTables/
│ │ │ │ │ │ ├── dataTables.bootstrap.js
│ │ │ │ │ │ └── jquery.dataTables.js
│ │ │ │ │ ├── datapicker/
│ │ │ │ │ │ └── bootstrap-datepicker.js
│ │ │ │ │ ├── diff_match_patch/
│ │ │ │ │ │ └── diff_match_patch.js
│ │ │ │ │ ├── dropzone/
│ │ │ │ │ │ └── dropzone.js
│ │ │ │ │ ├── easypiechart/
│ │ │ │ │ │ └── jquery.easypiechart.js
│ │ │ │ │ ├── echarts/
│ │ │ │ │ │ └── echarts-all.js
│ │ │ │ │ ├── fancybox/
│ │ │ │ │ │ ├── jquery.fancybox.css
│ │ │ │ │ │ └── jquery.fancybox.js
│ │ │ │ │ ├── flot/
│ │ │ │ │ │ ├── curvedLines.js
│ │ │ │ │ │ ├── jquery.flot.js
│ │ │ │ │ │ ├── jquery.flot.pie.js
│ │ │ │ │ │ ├── jquery.flot.resize.js
│ │ │ │ │ │ ├── jquery.flot.spline.js
│ │ │ │ │ │ └── jquery.flot.symbol.js
│ │ │ │ │ ├── gritter/
│ │ │ │ │ │ └── jquery.gritter.css
│ │ │ │ │ ├── jeditable/
│ │ │ │ │ │ └── jquery.jeditable.js
│ │ │ │ │ ├── jqgrid/
│ │ │ │ │ │ ├── i18n/
│ │ │ │ │ │ │ └── grid.locale-cnffe4.js
│ │ │ │ │ │ └── jquery.jqGrid.minffe4.js
│ │ │ │ │ ├── jsKnob/
│ │ │ │ │ │ └── jquery.knob.js
│ │ │ │ │ ├── jvectormap/
│ │ │ │ │ │ └── jquery-jvectormap-world-mill-en.js
│ │ │ │ │ ├── layer/
│ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ └── layer.ext.js
│ │ │ │ │ │ ├── laydate/
│ │ │ │ │ │ │ ├── laydate.js
│ │ │ │ │ │ │ ├── need/
│ │ │ │ │ │ │ │ └── laydate.css
│ │ │ │ │ │ │ └── skins/
│ │ │ │ │ │ │ ├── dahong/
│ │ │ │ │ │ │ │ └── laydate.css
│ │ │ │ │ │ │ ├── default/
│ │ │ │ │ │ │ │ └── laydate.css
│ │ │ │ │ │ │ └── molv/
│ │ │ │ │ │ │ └── laydate.css
│ │ │ │ │ │ ├── laydate-v1.1/
│ │ │ │ │ │ │ ├── demo.html
│ │ │ │ │ │ │ ├── layDate官网.url
│ │ │ │ │ │ │ ├── laydate/
│ │ │ │ │ │ │ │ ├── laydate.js
│ │ │ │ │ │ │ │ ├── need/
│ │ │ │ │ │ │ │ │ └── laydate.css
│ │ │ │ │ │ │ │ └── skins/
│ │ │ │ │ │ │ │ ├── dahong/
│ │ │ │ │ │ │ │ │ └── laydate.css
│ │ │ │ │ │ │ │ ├── default/
│ │ │ │ │ │ │ │ │ └── laydate.css
│ │ │ │ │ │ │ │ └── molv/
│ │ │ │ │ │ │ │ └── laydate.css
│ │ │ │ │ │ │ └── 更新日志.txt
│ │ │ │ │ │ ├── layim/
│ │ │ │ │ │ │ ├── layim.css
│ │ │ │ │ │ │ └── layim.js
│ │ │ │ │ │ └── skin/
│ │ │ │ │ │ ├── layer.css
│ │ │ │ │ │ ├── layer.ext.css
│ │ │ │ │ │ └── moon/
│ │ │ │ │ │ └── style.css
│ │ │ │ │ ├── markdown/
│ │ │ │ │ │ ├── bootstrap-markdown.js
│ │ │ │ │ │ ├── bootstrap-markdown.zh.js
│ │ │ │ │ │ ├── markdown.js
│ │ │ │ │ │ └── to-markdown.js
│ │ │ │ │ ├── metisMenu/
│ │ │ │ │ │ └── jquery.metisMenu.js
│ │ │ │ │ ├── morris/
│ │ │ │ │ │ └── morris.js
│ │ │ │ │ ├── nestable/
│ │ │ │ │ │ └── jquery.nestable.js
│ │ │ │ │ ├── plyr/
│ │ │ │ │ │ └── plyr.js
│ │ │ │ │ ├── prettyfile/
│ │ │ │ │ │ └── bootstrap-prettyfile.js
│ │ │ │ │ ├── rickshaw/
│ │ │ │ │ │ └── vendor/
│ │ │ │ │ │ └── d3.v3.js
│ │ │ │ │ ├── simditor/
│ │ │ │ │ │ ├── hotkeys.js
│ │ │ │ │ │ ├── module.js
│ │ │ │ │ │ ├── simditor.js
│ │ │ │ │ │ └── uploader.js
│ │ │ │ │ ├── suggest/
│ │ │ │ │ │ └── data.json
│ │ │ │ │ ├── summernote/
│ │ │ │ │ │ └── summernote-zh-CN.js
│ │ │ │ │ ├── switchery/
│ │ │ │ │ │ └── switchery.js
│ │ │ │ │ ├── treeview/
│ │ │ │ │ │ └── bootstrap-treeview.js
│ │ │ │ │ ├── webuploader/
│ │ │ │ │ │ └── index.html
│ │ │ │ │ └── zTree/
│ │ │ │ │ ├── jquery.ztree.core-3.5.js
│ │ │ │ │ ├── jquery.ztree.excheck-3.5.js
│ │ │ │ │ ├── jquery.ztree.exedit-3.5.js
│ │ │ │ │ ├── jquery.ztree.exhide-3.5.js
│ │ │ │ │ └── zTreeStyle.css
│ │ │ │ └── xss.js
│ │ │ ├── uploadify/
│ │ │ │ ├── uploadify.css
│ │ │ │ └── uploadify.swf
│ │ │ ├── wangeditor/
│ │ │ │ ├── css/
│ │ │ │ │ ├── wangEditor-huise.css
│ │ │ │ │ ├── wangEditor.css
│ │ │ │ │ └── wangEditor.less
│ │ │ │ └── js/
│ │ │ │ ├── emotions.data
│ │ │ │ ├── lib/
│ │ │ │ │ └── jquery-2.2.1.js
│ │ │ │ └── wangEditor.js
│ │ │ └── webupload/
│ │ │ ├── Uploader.swf
│ │ │ ├── style.css
│ │ │ ├── upload.js
│ │ │ └── webuploader.css
│ │ └── images/
│ │ └── emoji/
│ │ └── emojify.css
│ ├── baidu_verify_SEGRBySjTy.html
│ ├── baidu_verify_qaS2BJWI63.html
│ ├── css/
│ │ └── app.css
│ ├── index.php
│ ├── js/
│ │ └── app.js
│ ├── mix-manifest.json
│ ├── robots.txt
│ └── web.config
├── readme.md
├── resources/
│ ├── assets/
│ │ ├── js/
│ │ │ ├── app.js
│ │ │ ├── bootstrap.js
│ │ │ ├── components/
│ │ │ │ ├── Avatar.vue
│ │ │ │ ├── Avatar.vue.old
│ │ │ │ ├── Comment.vue
│ │ │ │ ├── Cropper.vue
│ │ │ │ ├── Parse.vue
│ │ │ │ ├── Reply.vue
│ │ │ │ └── VoteButton.vue
│ │ │ ├── config/
│ │ │ │ ├── base.js
│ │ │ │ ├── helper.js
│ │ │ │ ├── menu.js
│ │ │ │ └── toastr.js
│ │ │ ├── front.app.js
│ │ │ ├── front.js
│ │ │ ├── main.js
│ │ │ ├── plugins/
│ │ │ │ └── http/
│ │ │ │ └── index.js
│ │ │ └── vendor/
│ │ │ ├── codemirror-4.inline-attachment.js
│ │ │ ├── emoji.js
│ │ │ ├── github_emoji.js
│ │ │ ├── inline-attachment.js
│ │ │ ├── jquery.highlight.js
│ │ │ ├── jquery.jscroll.js
│ │ │ ├── jquery.pjax.js
│ │ │ ├── jquery.scroll.up.js
│ │ │ ├── jquery.textcomplete.js
│ │ │ ├── nprogress.js
│ │ │ └── sweetalert.js
│ │ ├── sass/
│ │ │ ├── _variables.scss
│ │ │ ├── app.scss
│ │ │ ├── front.scss
│ │ │ └── vendor/
│ │ │ ├── emoji.scss
│ │ │ ├── fluidbox.scss
│ │ │ ├── jquery.tocify.scss
│ │ │ ├── markdown.scss
│ │ │ ├── nprogress.scss
│ │ │ ├── reset-style.scss
│ │ │ ├── simplemde.min.scss
│ │ │ ├── sweetalert.scss
│ │ │ └── toastr.min.scss
│ │ └── semantic/
│ │ ├── dist/
│ │ │ ├── components/
│ │ │ │ ├── accordion.css
│ │ │ │ ├── accordion.js
│ │ │ │ ├── ad.css
│ │ │ │ ├── api.js
│ │ │ │ ├── breadcrumb.css
│ │ │ │ ├── button.css
│ │ │ │ ├── card.css
│ │ │ │ ├── checkbox.css
│ │ │ │ ├── checkbox.js
│ │ │ │ ├── comment.css
│ │ │ │ ├── container.css
│ │ │ │ ├── dimmer.css
│ │ │ │ ├── dimmer.js
│ │ │ │ ├── divider.css
│ │ │ │ ├── dropdown.css
│ │ │ │ ├── dropdown.js
│ │ │ │ ├── embed.css
│ │ │ │ ├── embed.js
│ │ │ │ ├── feed.css
│ │ │ │ ├── flag.css
│ │ │ │ ├── form.css
│ │ │ │ ├── form.js
│ │ │ │ ├── grid.css
│ │ │ │ ├── header.css
│ │ │ │ ├── icon.css
│ │ │ │ ├── image.css
│ │ │ │ ├── input.css
│ │ │ │ ├── item.css
│ │ │ │ ├── label.css
│ │ │ │ ├── list.css
│ │ │ │ ├── loader.css
│ │ │ │ ├── menu.css
│ │ │ │ ├── message.css
│ │ │ │ ├── modal.css
│ │ │ │ ├── modal.js
│ │ │ │ ├── nag.css
│ │ │ │ ├── nag.js
│ │ │ │ ├── popup.css
│ │ │ │ ├── popup.js
│ │ │ │ ├── progress.css
│ │ │ │ ├── progress.js
│ │ │ │ ├── rail.css
│ │ │ │ ├── rating.css
│ │ │ │ ├── rating.js
│ │ │ │ ├── reset.css
│ │ │ │ ├── reveal.css
│ │ │ │ ├── search.css
│ │ │ │ ├── search.js
│ │ │ │ ├── segment.css
│ │ │ │ ├── shape.css
│ │ │ │ ├── shape.js
│ │ │ │ ├── sidebar.css
│ │ │ │ ├── sidebar.js
│ │ │ │ ├── site.css
│ │ │ │ ├── site.js
│ │ │ │ ├── state.js
│ │ │ │ ├── statistic.css
│ │ │ │ ├── step.css
│ │ │ │ ├── sticky.css
│ │ │ │ ├── sticky.js
│ │ │ │ ├── tab.css
│ │ │ │ ├── tab.js
│ │ │ │ ├── table.css
│ │ │ │ ├── transition.css
│ │ │ │ ├── transition.js
│ │ │ │ └── visibility.js
│ │ │ ├── semantic.css
│ │ │ └── semantic.js
│ │ ├── gulpfile.js
│ │ ├── src/
│ │ │ ├── definitions/
│ │ │ │ ├── behaviors/
│ │ │ │ │ ├── api.js
│ │ │ │ │ ├── colorize.js
│ │ │ │ │ ├── form.js
│ │ │ │ │ ├── state.js
│ │ │ │ │ ├── visibility.js
│ │ │ │ │ └── visit.js
│ │ │ │ ├── collections/
│ │ │ │ │ ├── breadcrumb.less
│ │ │ │ │ ├── form.less
│ │ │ │ │ ├── grid.less
│ │ │ │ │ ├── menu.less
│ │ │ │ │ ├── message.less
│ │ │ │ │ └── table.less
│ │ │ │ ├── elements/
│ │ │ │ │ ├── button.less
│ │ │ │ │ ├── container.less
│ │ │ │ │ ├── divider.less
│ │ │ │ │ ├── flag.less
│ │ │ │ │ ├── header.less
│ │ │ │ │ ├── icon.less
│ │ │ │ │ ├── image.less
│ │ │ │ │ ├── input.less
│ │ │ │ │ ├── label.less
│ │ │ │ │ ├── list.less
│ │ │ │ │ ├── loader.less
│ │ │ │ │ ├── rail.less
│ │ │ │ │ ├── reveal.less
│ │ │ │ │ ├── segment.less
│ │ │ │ │ └── step.less
│ │ │ │ ├── globals/
│ │ │ │ │ ├── reset.less
│ │ │ │ │ ├── site.js
│ │ │ │ │ └── site.less
│ │ │ │ ├── modules/
│ │ │ │ │ ├── accordion.js
│ │ │ │ │ ├── accordion.less
│ │ │ │ │ ├── checkbox.js
│ │ │ │ │ ├── checkbox.less
│ │ │ │ │ ├── dimmer.js
│ │ │ │ │ ├── dimmer.less
│ │ │ │ │ ├── dropdown.js
│ │ │ │ │ ├── dropdown.less
│ │ │ │ │ ├── embed.js
│ │ │ │ │ ├── embed.less
│ │ │ │ │ ├── modal.js
│ │ │ │ │ ├── modal.less
│ │ │ │ │ ├── nag.js
│ │ │ │ │ ├── nag.less
│ │ │ │ │ ├── popup.js
│ │ │ │ │ ├── popup.less
│ │ │ │ │ ├── progress.js
│ │ │ │ │ ├── progress.less
│ │ │ │ │ ├── rating.js
│ │ │ │ │ ├── rating.less
│ │ │ │ │ ├── search.js
│ │ │ │ │ ├── search.less
│ │ │ │ │ ├── shape.js
│ │ │ │ │ ├── shape.less
│ │ │ │ │ ├── sidebar.js
│ │ │ │ │ ├── sidebar.less
│ │ │ │ │ ├── sticky.js
│ │ │ │ │ ├── sticky.less
│ │ │ │ │ ├── tab.js
│ │ │ │ │ ├── tab.less
│ │ │ │ │ ├── transition.js
│ │ │ │ │ └── transition.less
│ │ │ │ └── views/
│ │ │ │ ├── ad.less
│ │ │ │ ├── card.less
│ │ │ │ ├── comment.less
│ │ │ │ ├── feed.less
│ │ │ │ ├── item.less
│ │ │ │ └── statistic.less
│ │ │ ├── semantic.less
│ │ │ ├── site/
│ │ │ │ ├── collections/
│ │ │ │ │ ├── breadcrumb.overrides
│ │ │ │ │ ├── breadcrumb.variables
│ │ │ │ │ ├── form.overrides
│ │ │ │ │ ├── form.variables
│ │ │ │ │ ├── grid.overrides
│ │ │ │ │ ├── grid.variables
│ │ │ │ │ ├── menu.overrides
│ │ │ │ │ ├── menu.variables
│ │ │ │ │ ├── message.overrides
│ │ │ │ │ ├── message.variables
│ │ │ │ │ ├── table.overrides
│ │ │ │ │ └── table.variables
│ │ │ │ ├── elements/
│ │ │ │ │ ├── button.overrides
│ │ │ │ │ ├── button.variables
│ │ │ │ │ ├── container.overrides
│ │ │ │ │ ├── container.variables
│ │ │ │ │ ├── divider.overrides
│ │ │ │ │ ├── divider.variables
│ │ │ │ │ ├── flag.overrides
│ │ │ │ │ ├── flag.variables
│ │ │ │ │ ├── header.overrides
│ │ │ │ │ ├── header.variables
│ │ │ │ │ ├── icon.overrides
│ │ │ │ │ ├── icon.variables
│ │ │ │ │ ├── image.overrides
│ │ │ │ │ ├── image.variables
│ │ │ │ │ ├── input.overrides
│ │ │ │ │ ├── input.variables
│ │ │ │ │ ├── label.overrides
│ │ │ │ │ ├── label.variables
│ │ │ │ │ ├── list.overrides
│ │ │ │ │ ├── list.variables
│ │ │ │ │ ├── loader.overrides
│ │ │ │ │ ├── loader.variables
│ │ │ │ │ ├── rail.overrides
│ │ │ │ │ ├── rail.variables
│ │ │ │ │ ├── reveal.overrides
│ │ │ │ │ ├── reveal.variables
│ │ │ │ │ ├── segment.overrides
│ │ │ │ │ ├── segment.variables
│ │ │ │ │ ├── step.overrides
│ │ │ │ │ └── step.variables
│ │ │ │ ├── globals/
│ │ │ │ │ ├── reset.overrides
│ │ │ │ │ ├── reset.variables
│ │ │ │ │ ├── site.overrides
│ │ │ │ │ └── site.variables
│ │ │ │ ├── modules/
│ │ │ │ │ ├── accordion.overrides
│ │ │ │ │ ├── accordion.variables
│ │ │ │ │ ├── chatroom.overrides
│ │ │ │ │ ├── chatroom.variables
│ │ │ │ │ ├── checkbox.overrides
│ │ │ │ │ ├── checkbox.variables
│ │ │ │ │ ├── dimmer.overrides
│ │ │ │ │ ├── dimmer.variables
│ │ │ │ │ ├── dropdown.overrides
│ │ │ │ │ ├── dropdown.variables
│ │ │ │ │ ├── embed.overrides
│ │ │ │ │ ├── embed.variables
│ │ │ │ │ ├── modal.overrides
│ │ │ │ │ ├── modal.variables
│ │ │ │ │ ├── nag.overrides
│ │ │ │ │ ├── nag.variables
│ │ │ │ │ ├── popup.overrides
│ │ │ │ │ ├── popup.variables
│ │ │ │ │ ├── progress.overrides
│ │ │ │ │ ├── progress.variables
│ │ │ │ │ ├── rating.overrides
│ │ │ │ │ ├── rating.variables
│ │ │ │ │ ├── search.overrides
│ │ │ │ │ ├── search.variables
│ │ │ │ │ ├── shape.overrides
│ │ │ │ │ ├── shape.variables
│ │ │ │ │ ├── sidebar.overrides
│ │ │ │ │ ├── sidebar.variables
│ │ │ │ │ ├── sticky.overrides
│ │ │ │ │ ├── sticky.variables
│ │ │ │ │ ├── tab.overrides
│ │ │ │ │ ├── tab.variables
│ │ │ │ │ ├── transition.overrides
│ │ │ │ │ └── transition.variables
│ │ │ │ └── views/
│ │ │ │ ├── ad.overrides
│ │ │ │ ├── ad.variables
│ │ │ │ ├── card.overrides
│ │ │ │ ├── card.variables
│ │ │ │ ├── comment.overrides
│ │ │ │ ├── comment.variables
│ │ │ │ ├── feed.overrides
│ │ │ │ ├── feed.variables
│ │ │ │ ├── item.overrides
│ │ │ │ ├── item.variables
│ │ │ │ ├── statistic.overrides
│ │ │ │ └── statistic.variables
│ │ │ ├── theme.config
│ │ │ ├── theme.less
│ │ │ └── themes/
│ │ │ ├── amazon/
│ │ │ │ ├── elements/
│ │ │ │ │ ├── button.overrides
│ │ │ │ │ └── button.variables
│ │ │ │ └── globals/
│ │ │ │ └── site.variables
│ │ │ ├── basic/
│ │ │ │ ├── collections/
│ │ │ │ │ ├── table.overrides
│ │ │ │ │ └── table.variables
│ │ │ │ ├── elements/
│ │ │ │ │ ├── button.overrides
│ │ │ │ │ ├── button.variables
│ │ │ │ │ ├── icon.overrides
│ │ │ │ │ ├── icon.variables
│ │ │ │ │ ├── step.overrides
│ │ │ │ │ └── step.variables
│ │ │ │ ├── globals/
│ │ │ │ │ ├── reset.overrides
│ │ │ │ │ └── reset.variables
│ │ │ │ ├── modules/
│ │ │ │ │ ├── progress.overrides
│ │ │ │ │ └── progress.variables
│ │ │ │ └── views/
│ │ │ │ ├── card.overrides
│ │ │ │ └── card.variables
│ │ │ ├── bookish/
│ │ │ │ └── elements/
│ │ │ │ ├── header.overrides
│ │ │ │ └── header.variables
│ │ │ ├── bootstrap3/
│ │ │ │ └── elements/
│ │ │ │ ├── button.overrides
│ │ │ │ └── button.variables
│ │ │ ├── chubby/
│ │ │ │ ├── collections/
│ │ │ │ │ ├── form.overrides
│ │ │ │ │ ├── form.variables
│ │ │ │ │ ├── menu.overrides
│ │ │ │ │ └── menu.variables
│ │ │ │ ├── elements/
│ │ │ │ │ ├── button.overrides
│ │ │ │ │ ├── button.variables
│ │ │ │ │ ├── header.overrides
│ │ │ │ │ └── header.variables
│ │ │ │ ├── modules/
│ │ │ │ │ ├── accordion.overrides
│ │ │ │ │ └── accordion.variables
│ │ │ │ └── views/
│ │ │ │ ├── comment.overrides
│ │ │ │ └── comment.variables
│ │ │ ├── classic/
│ │ │ │ ├── collections/
│ │ │ │ │ ├── table.overrides
│ │ │ │ │ └── table.variables
│ │ │ │ ├── elements/
│ │ │ │ │ ├── button.overrides
│ │ │ │ │ ├── button.variables
│ │ │ │ │ ├── header.overrides
│ │ │ │ │ └── header.variables
│ │ │ │ ├── modules/
│ │ │ │ │ ├── progress.overrides
│ │ │ │ │ └── progress.variables
│ │ │ │ └── views/
│ │ │ │ ├── card.overrides
│ │ │ │ └── card.variables
│ │ │ ├── colored/
│ │ │ │ └── modules/
│ │ │ │ ├── checkbox.overrides
│ │ │ │ └── checkbox.variables
│ │ │ ├── default/
│ │ │ │ ├── collections/
│ │ │ │ │ ├── breadcrumb.overrides
│ │ │ │ │ ├── breadcrumb.variables
│ │ │ │ │ ├── form.overrides
│ │ │ │ │ ├── form.variables
│ │ │ │ │ ├── grid.overrides
│ │ │ │ │ ├── grid.variables
│ │ │ │ │ ├── menu.overrides
│ │ │ │ │ ├── menu.variables
│ │ │ │ │ ├── message.overrides
│ │ │ │ │ ├── message.variables
│ │ │ │ │ ├── table.overrides
│ │ │ │ │ └── table.variables
│ │ │ │ ├── elements/
│ │ │ │ │ ├── button.overrides
│ │ │ │ │ ├── button.variables
│ │ │ │ │ ├── container.overrides
│ │ │ │ │ ├── container.variables
│ │ │ │ │ ├── divider.overrides
│ │ │ │ │ ├── divider.variables
│ │ │ │ │ ├── flag.overrides
│ │ │ │ │ ├── flag.variables
│ │ │ │ │ ├── header.overrides
│ │ │ │ │ ├── header.variables
│ │ │ │ │ ├── icon.overrides
│ │ │ │ │ ├── icon.variables
│ │ │ │ │ ├── image.overrides
│ │ │ │ │ ├── image.variables
│ │ │ │ │ ├── input.overrides
│ │ │ │ │ ├── input.variables
│ │ │ │ │ ├── label.overrides
│ │ │ │ │ ├── label.variables
│ │ │ │ │ ├── list.overrides
│ │ │ │ │ ├── list.variables
│ │ │ │ │ ├── loader.overrides
│ │ │ │ │ ├── loader.variables
│ │ │ │ │ ├── rail.overrides
│ │ │ │ │ ├── rail.variables
│ │ │ │ │ ├── reveal.overrides
│ │ │ │ │ ├── reveal.variables
│ │ │ │ │ ├── segment.overrides
│ │ │ │ │ ├── segment.variables
│ │ │ │ │ ├── step.overrides
│ │ │ │ │ └── step.variables
│ │ │ │ ├── globals/
│ │ │ │ │ ├── reset.overrides
│ │ │ │ │ ├── reset.variables
│ │ │ │ │ ├── site.overrides
│ │ │ │ │ └── site.variables
│ │ │ │ ├── modules/
│ │ │ │ │ ├── accordion.overrides
│ │ │ │ │ ├── accordion.variables
│ │ │ │ │ ├── chatroom.overrides
│ │ │ │ │ ├── chatroom.variables
│ │ │ │ │ ├── checkbox.overrides
│ │ │ │ │ ├── checkbox.variables
│ │ │ │ │ ├── dimmer.overrides
│ │ │ │ │ ├── dimmer.variables
│ │ │ │ │ ├── dropdown.overrides
│ │ │ │ │ ├── dropdown.variables
│ │ │ │ │ ├── embed.overrides
│ │ │ │ │ ├── embed.variables
│ │ │ │ │ ├── modal.overrides
│ │ │ │ │ ├── modal.variables
│ │ │ │ │ ├── nag.overrides
│ │ │ │ │ ├── nag.variables
│ │ │ │ │ ├── popup.overrides
│ │ │ │ │ ├── popup.variables
│ │ │ │ │ ├── progress.overrides
│ │ │ │ │ ├── progress.variables
│ │ │ │ │ ├── rating.overrides
│ │ │ │ │ ├── rating.variables
│ │ │ │ │ ├── search.overrides
│ │ │ │ │ ├── search.variables
│ │ │ │ │ ├── shape.overrides
│ │ │ │ │ ├── shape.variables
│ │ │ │ │ ├── sidebar.overrides
│ │ │ │ │ ├── sidebar.variables
│ │ │ │ │ ├── sticky.overrides
│ │ │ │ │ ├── sticky.variables
│ │ │ │ │ ├── tab.overrides
│ │ │ │ │ ├── tab.variables
│ │ │ │ │ ├── transition.overrides
│ │ │ │ │ └── transition.variables
│ │ │ │ └── views/
│ │ │ │ ├── ad.overrides
│ │ │ │ ├── ad.variables
│ │ │ │ ├── card.overrides
│ │ │ │ ├── card.variables
│ │ │ │ ├── comment.overrides
│ │ │ │ ├── comment.variables
│ │ │ │ ├── feed.overrides
│ │ │ │ ├── feed.variables
│ │ │ │ ├── item.overrides
│ │ │ │ ├── item.variables
│ │ │ │ ├── statistic.overrides
│ │ │ │ └── statistic.variables
│ │ │ ├── duo/
│ │ │ │ └── elements/
│ │ │ │ ├── loader.overrides
│ │ │ │ └── loader.variables
│ │ │ ├── fixed-width/
│ │ │ │ ├── collections/
│ │ │ │ │ ├── grid.overrides
│ │ │ │ │ └── grid.variables
│ │ │ │ └── modules/
│ │ │ │ ├── modal.overrides
│ │ │ │ └── modal.variables
│ │ │ ├── flat/
│ │ │ │ ├── collections/
│ │ │ │ │ ├── form.overrides
│ │ │ │ │ └── form.variables
│ │ │ │ └── globals/
│ │ │ │ ├── site.overrides
│ │ │ │ └── site.variables
│ │ │ ├── github/
│ │ │ │ ├── collections/
│ │ │ │ │ ├── breadcrumb.variables
│ │ │ │ │ ├── form.overrides
│ │ │ │ │ ├── form.variables
│ │ │ │ │ ├── grid.variables
│ │ │ │ │ ├── menu.overrides
│ │ │ │ │ ├── menu.variables
│ │ │ │ │ ├── message.overrides
│ │ │ │ │ ├── message.variables
│ │ │ │ │ └── table.variables
│ │ │ │ ├── elements/
│ │ │ │ │ ├── button.overrides
│ │ │ │ │ ├── button.variables
│ │ │ │ │ ├── header.variables
│ │ │ │ │ ├── icon.overrides
│ │ │ │ │ ├── icon.variables
│ │ │ │ │ ├── image.variables
│ │ │ │ │ ├── input.overrides
│ │ │ │ │ ├── input.variables
│ │ │ │ │ ├── label.overrides
│ │ │ │ │ ├── label.variables
│ │ │ │ │ ├── segment.overrides
│ │ │ │ │ ├── segment.variables
│ │ │ │ │ ├── step.overrides
│ │ │ │ │ └── step.variables
│ │ │ │ ├── globals/
│ │ │ │ │ └── site.variables
│ │ │ │ └── modules/
│ │ │ │ ├── dropdown.overrides
│ │ │ │ ├── dropdown.variables
│ │ │ │ └── popup.variables
│ │ │ ├── gmail/
│ │ │ │ └── collections/
│ │ │ │ ├── message.overrides
│ │ │ │ └── message.variables
│ │ │ ├── instagram/
│ │ │ │ └── views/
│ │ │ │ ├── card.overrides
│ │ │ │ └── card.variables
│ │ │ ├── material/
│ │ │ │ ├── collections/
│ │ │ │ │ ├── menu.overrides
│ │ │ │ │ └── menu.variables
│ │ │ │ ├── elements/
│ │ │ │ │ ├── button.overrides
│ │ │ │ │ ├── button.variables
│ │ │ │ │ ├── header.overrides
│ │ │ │ │ ├── header.variables
│ │ │ │ │ ├── icon.overrides
│ │ │ │ │ └── icon.variables
│ │ │ │ ├── globals/
│ │ │ │ │ ├── site.overrides
│ │ │ │ │ └── site.variables
│ │ │ │ └── modules/
│ │ │ │ ├── dropdown.overrides
│ │ │ │ ├── dropdown.variables
│ │ │ │ ├── modal.overrides
│ │ │ │ └── modal.variables
│ │ │ ├── pulsar/
│ │ │ │ └── elements/
│ │ │ │ ├── loader.overrides
│ │ │ │ └── loader.variables
│ │ │ ├── raised/
│ │ │ │ └── elements/
│ │ │ │ ├── button.overrides
│ │ │ │ └── button.variables
│ │ │ ├── resetcss/
│ │ │ │ └── globals/
│ │ │ │ ├── reset.overrides
│ │ │ │ └── reset.variables
│ │ │ ├── round/
│ │ │ │ └── elements/
│ │ │ │ ├── button.overrides
│ │ │ │ └── button.variables
│ │ │ ├── rtl/
│ │ │ │ └── globals/
│ │ │ │ ├── site.overrides
│ │ │ │ └── site.variables
│ │ │ ├── striped/
│ │ │ │ └── modules/
│ │ │ │ ├── progress.overrides
│ │ │ │ └── progress.variables
│ │ │ ├── timeline/
│ │ │ │ └── views/
│ │ │ │ ├── feed.overrides
│ │ │ │ └── feed.variables
│ │ │ └── twitter/
│ │ │ └── elements/
│ │ │ ├── button.overrides
│ │ │ └── button.variables
│ │ └── tasks/
│ │ ├── README.md
│ │ ├── admin/
│ │ │ ├── components/
│ │ │ │ ├── create.js
│ │ │ │ ├── init.js
│ │ │ │ └── update.js
│ │ │ ├── distributions/
│ │ │ │ ├── create.js
│ │ │ │ ├── init.js
│ │ │ │ └── update.js
│ │ │ ├── publish.js
│ │ │ ├── register.js
│ │ │ └── release.js
│ │ ├── build/
│ │ │ ├── assets.js
│ │ │ ├── css.js
│ │ │ └── javascript.js
│ │ ├── build.js
│ │ ├── check-install.js
│ │ ├── clean.js
│ │ ├── collections/
│ │ │ ├── README.md
│ │ │ ├── admin.js
│ │ │ ├── build.js
│ │ │ ├── internal.js
│ │ │ └── rtl.js
│ │ ├── config/
│ │ │ ├── admin/
│ │ │ │ ├── github.js
│ │ │ │ ├── oauth.example.js
│ │ │ │ ├── release.js
│ │ │ │ └── templates/
│ │ │ │ ├── README.md
│ │ │ │ ├── bower.json
│ │ │ │ ├── component-package.js
│ │ │ │ ├── composer.json
│ │ │ │ ├── css-package.js
│ │ │ │ ├── less-package.js
│ │ │ │ └── package.json
│ │ │ ├── defaults.js
│ │ │ ├── docs.js
│ │ │ ├── npm/
│ │ │ │ └── gulpfile.js
│ │ │ ├── project/
│ │ │ │ ├── config.js
│ │ │ │ ├── install.js
│ │ │ │ └── release.js
│ │ │ ├── tasks.js
│ │ │ └── user.js
│ │ ├── docs/
│ │ │ ├── build.js
│ │ │ ├── metadata.js
│ │ │ └── serve.js
│ │ ├── install.js
│ │ ├── rtl/
│ │ │ ├── build.js
│ │ │ └── watch.js
│ │ ├── version.js
│ │ └── watch.js
│ ├── lang/
│ │ ├── en/
│ │ │ ├── auth.php
│ │ │ ├── codehaoshi.php
│ │ │ ├── pagination.php
│ │ │ ├── passwords.php
│ │ │ └── validation.php
│ │ ├── th/
│ │ │ ├── auth.php
│ │ │ ├── pagination.php
│ │ │ ├── passwords.php
│ │ │ └── validation.php
│ │ ├── tk/
│ │ │ ├── auth.php
│ │ │ ├── pagination.php
│ │ │ ├── passwords.php
│ │ │ └── validation.php
│ │ ├── vendor/
│ │ │ └── laravel-backup/
│ │ │ ├── ar/
│ │ │ │ └── notifications.php
│ │ │ ├── da/
│ │ │ │ └── notifications.php
│ │ │ ├── de/
│ │ │ │ └── notifications.php
│ │ │ ├── en/
│ │ │ │ └── notifications.php
│ │ │ ├── es/
│ │ │ │ └── notifications.php
│ │ │ ├── fr/
│ │ │ │ └── notifications.php
│ │ │ ├── pt-BR/
│ │ │ │ └── notifications.php
│ │ │ ├── ro/
│ │ │ │ └── notifications.php
│ │ │ ├── ru/
│ │ │ │ └── notifications.php
│ │ │ └── uk/
│ │ │ └── notifications.php
│ │ ├── zh-CN/
│ │ │ ├── auth.php
│ │ │ ├── codehaoshi.php
│ │ │ ├── pagination.php
│ │ │ ├── passwords.php
│ │ │ └── validation.php
│ │ └── zh-HK/
│ │ ├── auth.php
│ │ ├── pagination.php
│ │ ├── passwords.php
│ │ └── validation.php
│ └── views/
│ ├── activities/
│ │ ├── article.blade.php
│ │ ├── followings.blade.php
│ │ ├── question.blade.php
│ │ ├── type/
│ │ │ ├── user-comment-article.blade.php
│ │ │ ├── user-followed-user.blade.php
│ │ │ ├── user-reply-question.blade.php
│ │ │ ├── user-upvote-article.blade.php
│ │ │ └── user-upvote-question.blade.php
│ │ └── voted.blade.php
│ ├── articles/
│ │ ├── all-articles.blade.php
│ │ ├── article-list.blade.php
│ │ ├── create.blade.php
│ │ ├── edit.blade.php
│ │ ├── partials/
│ │ │ ├── article-info-form.blade.php
│ │ │ ├── article-list-form.blade.php
│ │ │ ├── info-right-item.blade.php
│ │ │ ├── right-item.blade.php
│ │ │ └── show.blade.php.old
│ │ └── show.blade.php
│ ├── auth/
│ │ ├── passwords/
│ │ │ ├── email.blade.php
│ │ │ └── reset.blade.php
│ │ ├── signin.blade.php
│ │ └── signup.blade.php
│ ├── dashboard/
│ │ ├── abouts/
│ │ │ ├── about-list.blade.php
│ │ │ ├── create.blade.php
│ │ │ └── edit.blade.php
│ │ ├── article-categories/
│ │ │ ├── category-list.blade.php
│ │ │ ├── create.blade.php
│ │ │ └── edit.blade.php
│ │ ├── articles/
│ │ │ ├── ajax-article-list.blade.php
│ │ │ ├── article-list.blade.php
│ │ │ ├── create.blade.php
│ │ │ └── edit.blade.php
│ │ ├── index/
│ │ │ ├── index.blade.php
│ │ │ └── welcome.blade.php
│ │ ├── layouts/
│ │ │ ├── base.blade.php
│ │ │ └── partials/
│ │ │ ├── body_head.blade.php
│ │ │ ├── footer.blade.php
│ │ │ ├── head.blade.php
│ │ │ ├── header.blade.php
│ │ │ ├── left.blade.php
│ │ │ └── right.blade.php
│ │ ├── links/
│ │ │ ├── create.blade.php
│ │ │ ├── edit.blade.php
│ │ │ └── link-list.blade.php
│ │ ├── permissions/
│ │ │ ├── ajax-permission-list.blade.php
│ │ │ ├── create.blade.php
│ │ │ ├── edit.blade.php
│ │ │ └── permission-list.blade.php
│ │ ├── question-categories/
│ │ │ ├── category-list.blade.php
│ │ │ ├── create.blade.php
│ │ │ └── edit.blade.php
│ │ ├── questions/
│ │ │ ├── ajax-question-list.blade.php
│ │ │ ├── create.blade.php
│ │ │ ├── edit.blade.php
│ │ │ └── question-list.blade.php
│ │ ├── roles/
│ │ │ ├── ajax-role-list.blade.php
│ │ │ ├── create.blade.php
│ │ │ ├── edit.blade.php
│ │ │ └── role-list.blade.php
│ │ ├── tags/
│ │ │ ├── create.blade.php
│ │ │ ├── edit.blade.php
│ │ │ └── tag-list.blade.php
│ │ └── users/
│ │ ├── ajax-user-list.blade.php
│ │ ├── create.blade.php
│ │ ├── edit.blade.php
│ │ └── user-list.blade.php
│ ├── errors/
│ │ ├── 403.blade.php
│ │ ├── 404.blade.php
│ │ └── 500.blade.php
│ ├── form-validate/
│ │ └── auth/
│ │ ├── v-register.blade.php
│ │ └── v-topic.blade.php
│ ├── layouts/
│ │ ├── app.blade.php
│ │ ├── base.blade.php
│ │ └── partials/
│ │ ├── footer.blade.php
│ │ ├── messages.blade.php
│ │ ├── navbar.blade.php
│ │ └── sidebar-menu.blade.php
│ ├── messages/
│ │ ├── message.blade.php
│ │ ├── notifications.blade.php
│ │ └── partials/
│ │ └── left-bar.blade.php
│ ├── notifications/
│ │ ├── new-user-follow-notification.blade.php
│ │ ├── received-comment.blade.php
│ │ ├── received-reply.blade.php
│ │ ├── user-vote-article.blade.php
│ │ └── user-vote-question.blade.php
│ ├── pages/
│ │ ├── about.blade.php
│ │ ├── home.blade.php
│ │ ├── partials/
│ │ │ ├── hot-article.blade.php
│ │ │ ├── hot-question.blade.php
│ │ │ ├── information-channel.blade.php
│ │ │ ├── information-channel.blade.php.old
│ │ │ └── question-channel.blade.php
│ │ └── search.blade.php
│ ├── questions/
│ │ ├── all-questions.blade.php
│ │ ├── create.blade.php
│ │ ├── edit.blade.php
│ │ ├── partials/
│ │ │ ├── info-right-item.blade.php
│ │ │ ├── question-info-form.blade.php
│ │ │ ├── question-list-form.blade.php
│ │ │ └── right-item.blade.php
│ │ ├── question-list.blade.php
│ │ └── show.blade.php
│ ├── static-pages/
│ │ ├── article/
│ │ │ ├── all-articles.blade.php
│ │ │ ├── article-info.blade.php
│ │ │ ├── article-list.blade.php
│ │ │ ├── partials/
│ │ │ │ ├── article-comment.blade.php
│ │ │ │ ├── article-info-form.blade.php
│ │ │ │ ├── article-list-form.blade.php
│ │ │ │ ├── info-right-item.blade.php
│ │ │ │ └── right-item.blade.php
│ │ │ └── test.blade.php
│ │ ├── auth/
│ │ │ ├── login.blade.php
│ │ │ └── register.blade.php
│ │ ├── home.blade.php
│ │ ├── messages/
│ │ │ ├── message.blade.php
│ │ │ ├── notifications.blade.php
│ │ │ └── partials/
│ │ │ └── left-bar.blade.php
│ │ ├── partials/
│ │ │ ├── hot-article.blade.php
│ │ │ ├── hot-question.blade.php
│ │ │ ├── hot-question.blade.php___jb_tmp___
│ │ │ ├── information-channel.blade.php
│ │ │ └── question-channel.blade.php
│ │ ├── questions/
│ │ │ ├── all-questions.blade.php
│ │ │ ├── partials/
│ │ │ │ ├── article-comment.blade.php
│ │ │ │ ├── info-right-item.blade.php
│ │ │ │ ├── question-info-form.blade.php
│ │ │ │ ├── question-list-form.blade.php
│ │ │ │ └── right-item.blade.php
│ │ │ ├── question-info.blade.php
│ │ │ └── question-list.blade.php
│ │ └── user/
│ │ ├── center.blade.php
│ │ ├── edit.blade.php
│ │ ├── email.blade.php
│ │ ├── partials/
│ │ │ ├── left-menu.blade.php
│ │ │ └── right-item.blade.php
│ │ └── password.blade.php
│ ├── tags/
│ │ ├── show-article.blade.php
│ │ └── show-question.blade.php
│ ├── users/
│ │ ├── edit-email.blade.php
│ │ ├── edit-password.blade.php
│ │ ├── edit.blade.php
│ │ ├── partials/
│ │ │ ├── left-menu.blade.php
│ │ │ └── right-item.blade.php
│ │ └── personal-center.blade.php
│ └── vendor/
│ ├── mail/
│ │ ├── html/
│ │ │ ├── button.blade.php
│ │ │ ├── footer.blade.php
│ │ │ ├── header.blade.php
│ │ │ ├── layout.blade.php
│ │ │ ├── message.blade.php
│ │ │ ├── panel.blade.php
│ │ │ ├── promotion/
│ │ │ │ └── button.blade.php
│ │ │ ├── promotion.blade.php
│ │ │ ├── subcopy.blade.php
│ │ │ ├── table.blade.php
│ │ │ └── themes/
│ │ │ └── default.css
│ │ └── markdown/
│ │ ├── button.blade.php
│ │ ├── footer.blade.php
│ │ ├── header.blade.php
│ │ ├── layout.blade.php
│ │ ├── message.blade.php
│ │ ├── panel.blade.php
│ │ ├── promotion/
│ │ │ └── button.blade.php
│ │ ├── promotion.blade.php
│ │ ├── subcopy.blade.php
│ │ └── table.blade.php
│ ├── notifications/
│ │ └── email.blade.php
│ └── pagination/
│ ├── bootstrap-4.blade.php
│ ├── default.blade.php
│ ├── simple-bootstrap-4.blade.php
│ └── simple-default.blade.php
├── routes/
│ ├── api.php
│ ├── channels.php
│ ├── console.php
│ └── web.php
├── semantic.json
├── server.php
├── storage/
│ ├── app/
│ │ └── .gitignore
│ ├── debugbar/
│ │ └── .gitignore
│ ├── framework/
│ │ ├── .gitignore
│ │ ├── cache/
│ │ │ └── .gitignore
│ │ ├── sessions/
│ │ │ └── .gitignore
│ │ ├── testing/
│ │ │ └── .gitignore
│ │ └── views/
│ │ └── .gitignore
│ └── logs/
│ └── .gitignore
├── tests/
│ ├── CreatesApplication.php
│ ├── Feature/
│ │ └── ExampleTest.php
│ ├── TestCase.php
│ └── Unit/
│ └── ExampleTest.php
└── webpack.mix.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
* text=auto
CHANGELOG.md export-ignore
*.css linguist-language=php
*.js linguist-language=php
*.scss linguist-language=php
================================================
FILE: .gitignore
================================================
/node_modules
/public/hot
/public/storage
/storage/*.key
/vendor
/.idea
/.vagrant
Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
.env
_ide_helper.php
/config/debugbar.php
/public/assets/js
/public/assets/css/styles.css
/public/uploads/
================================================
FILE: app/Activities/BaseActivity.php
================================================
<?php
namespace App\Activities;
use App\Models\Activity;
use App\Models\Article;
use App\Models\Question;
use App\Models\User;
use Carbon\Carbon;
class BaseActivity
{
public function addArticleActivity(User $user, Article $article, $extra_data = [], $indentifier = null)
{
$causer = 'u' . $user->id;
$indentifier = $indentifier ?: 'a' . $article->id;
$data = array_merge([
'article_type' => 'article',
'article_id' => $article->id,
'article_slug' => $article->slug,
'article_title' => $article->title,
], $extra_data);
$this->addActivity($causer, $user, $indentifier, $data);
}
public function addQuestionActivity(User $user, Question $question, $extra_data = [], $indentifier = null)
{
$causer = 'u' . $user->id;
$indentifier = $indentifier ?: 'q' . $question->id;
$data = array_merge([
'article_type' => 'question',
'article_id' => $question->id,
'article_slug' => $question->slug,
'article_title' => $question->title,
], $extra_data);
$this->addActivity($causer, $user, $indentifier, $data);
}
public function addActivity($causer, $user, $indentifier, $data)
{
$type = class_basename(get_class($this));
$activities[] = [
'causer' => $causer,
'user_id' => $user->id,
'type' => $type,
'indentifier' => $indentifier,
'data' => serialize($data),
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
];
Activity::insert($activities);
}
public function removeBy($causer, $indentifier)
{
Activity::where('causer', $causer)
->where('indentifier', $indentifier)
->where('type', class_basename(get_class($this)))
->delete();
}
}
================================================
FILE: app/Activities/UserCommentArticle.php
================================================
<?php
namespace App\Activities;
class UserCommentArticle extends BaseActivity
{
/**
* When use vote a article, insert into activities a record
*
* @param $user
* @param $article
*/
public function generate($user, $article)
{
$this->addArticleActivity($user, $article);
}
public function remove($user, $article)
{
$this->removeBy('u'.$user->id, 'a'.$article->id);
}
}
================================================
FILE: app/Activities/UserFollowedUser.php
================================================
<?php
namespace App\Activities;
class UserFollowedUser extends BaseActivity
{
/**
* When use vote a article, insert into activities a record
*
* @param $user
* @param $question
*/
public function generate($user, $following)
{
$causer = 'u' . $user->id;
$indentifier = 'u' . $following->id;
$data = array_merge([
'following_user_name' => $following->user_name,
'following_id' => $following->id,
]);
$this->addActivity($causer, $user, $indentifier, $data);
}
public function remove($user, $following)
{
$this->removeBy('u' . $user->id, 'u' . $following->id);
}
}
================================================
FILE: app/Activities/UserReplyQuestion.php
================================================
<?php
namespace App\Activities;
class UserReplyQuestion extends BaseActivity
{
/**
* When use vote a article, insert into activities a record
*
* @param $user
* @param $question
*/
public function generate($user, $question)
{
$this->addQuestionActivity($user, $question);
}
public function remove($user, $question)
{
$this->removeBy('u'.$user->id, 'q'.$question->id);
}
}
================================================
FILE: app/Activities/UserUpvoteArticle.php
================================================
<?php
namespace App\Activities;
class UserUpvoteArticle extends BaseActivity
{
/**
* When use vote a article, insert into activities a record
*
* @param $user
* @param $article
*/
public function generate($user, $article)
{
$this->addArticleActivity($user, $article);
}
public function remove($user, $article)
{
$this->removeBy('u'.$user->id, 'a'.$article->id);
}
}
================================================
FILE: app/Activities/UserUpvoteQuestion.php
================================================
<?php
namespace App\Activities;
class UserUpvoteQuestion extends BaseActivity
{
/**
* When use vote a article, insert into activities a record
*
* @param $user
* @param $article
*/
public function generate($user, $question)
{
$this->addQuestionActivity($user, $question);
}
public function remove($user, $question)
{
$this->removeBy('u'.$user->id, 'q'.$question->id);
}
}
================================================
FILE: app/Codehaoshi/Core/CreatorListener.php
================================================
<?php namespace Codehaoshi\Core;
interface CreatorListener
{
public function creatorFailed($errors);
public function creatorSucceed($model);
}
================================================
FILE: app/Codehaoshi/Creators/CommentCreator.php
================================================
<?php
namespace App\Codehaoshi\Creators;
use App\Activities\UserCommentArticle;
use App\Models\Article;
use App\Models\Comment;
use App\Models\User;
use App\Notifications\ReceivedComment;
use App\Tools\Markdowner;
use Carbon\Carbon;
use Codehaoshi\Core\CreatorListener;
use Auth;
use Codehaoshi\Notification\Metion;
class CommentCreator
{
protected $metion;
public function __construct(Metion $metion)
{
$this->metion = $metion;
}
public function create(CreatorListener $observer, $data)
{
// 检查是否重复发布评论
if ($this->isDuplicateComment($data)) {
return $observer->creatorFailed('请不要发布重复评论。');
}
$data['user_id'] = Auth::id();
$data['body'] = $this->metion->parse($data['body']);
$markdown = new Markdowner();
$data['body_original'] = $data['body'];
$data['body'] = $markdown->convertMarkdownToHtml($data['body']);
$comment = Comment::create($data);
if (!$comment) {
return $observer->creatorFailed($comment->getErrors());
}
// Add the comment user
$article = Article::findOrFail($data['article_id']);
$article->last_comment_user_id = Auth::id();
$article->comment_count++;
$article->updated_at = Carbon::now()->toDateTimeString();
$article->save();
Auth::user()->increment('comment_count', 1);
// Todo 用户评论后发送站内通知消息给被评论文章的作者
User::findOrFail($article['user_id'])->notify(new ReceivedComment($comment));
app(UserCommentArticle::class)->generate(Auth::user(), $article);
return $observer->creatorSucceed($comment);
}
protected function isDuplicateComment($data)
{
$lastComment = Comment::where('user_id', Auth::id())
->where('article_id', $data['article_id'])
->orderBy('created_at', 'desc')
->first();
return count($lastComment) && strcmp($lastComment->body_original, $data['body']) === 0;
}
}
================================================
FILE: app/Codehaoshi/Creators/ReplyCreator.php
================================================
<?php
namespace App\Codehaoshi\Creators;
use App\Activities\UserReplyQuestion;
use App\Models\Question;
use App\Models\Reply;
use App\Models\User;
use App\Notifications\ReceivedReply;
use App\Tools\Markdowner;
use Carbon\Carbon;
use Codehaoshi\Core\CreatorListener;
use Auth;
use Codehaoshi\Notification\Metion;
class ReplyCreator
{
protected $metion;
public function __construct(Metion $metion)
{
$this->metion = $metion;
}
public function create(CreatorListener $observer, $data)
{
// 检查是否重复发布评论
if ($this->isDuplicateReply($data)) {
return $observer->creatorFailed('请不要发布重复评论。');
}
$data['user_id'] = Auth::id();
$data['body'] = $this->metion->parse($data['body']);
$markdown = new Markdowner;
$data['body_original'] = $data['body'];
$data['body'] = $markdown->convertMarkdownToHtml($data['body']);
$reply = Reply::create($data);
if (!$reply) {
return $observer->creatorFailed($reply->getErrors());
}
// Add the comment user
$question = Question::findOrFail($data['question_id']);
$question->last_reply_user_id = Auth::id();
$question->reply_count++;
$question->updated_at = Carbon::now()->toDateTimeString();
$question->save();
Auth::user()->increment('reply_count', 1);
// Todo 用户评论后发送站内通知消息给被评论文章的作者
User::findOrFail($question['user_id'])->notify(new ReceivedReply($reply));
app(UserReplyQuestion::class)->generate(Auth::user(), $question);
return $observer->creatorSucceed($reply);
}
protected function isDuplicateReply($data)
{
$lastReply = Reply::where('user_id', Auth::id())
->where('question_id', $data['question_id'])
->orderBy('created_at', 'desc')
->first();
return count($lastReply) && strcmp($lastReply->body_original, $data['body']) === 0;
}
}
================================================
FILE: app/Codehaoshi/Creators/UserCreator.php
================================================
<?php
namespace App\Codehaoshi\Creators;
use App\Codehaoshi\Listeners\UserCreatorListener;
use App\Repositories\UserRepository;
class UserCreator
{
protected $userModel;
public function __construct(UserRepository $user)
{
$this->userModel = $user;
}
public function create(UserCreatorListener $observre, $userData)
{
if($userData['password']) {
$userData['password'] = bcrypt($userData['password']);
}
$user = $this->userModel->store($userData);
if (!$user) {
return $observre->userValidationError($user->getErrors());
}
if($userData['image_url']) {
$user->cacheAvatar();
}
return $observre->userCreated($user);
}
}
================================================
FILE: app/Codehaoshi/Handler/BackupHandler.php
================================================
<?php
namespace APp\Codehaoshi\Handler;
use Illuminate\Support\Facades\Mail;
use Naux\Mail\SendCloudTemplate;
class BackupHandler
{
public function send($notifications)
{
$data = [
'info' => $notifications
];
$template = new SendCloudTemplate('codehaoshi_notification', $data);//模板调用名称-zhihu_app_register
Mail::raw($template, function ($message) {
$message->from('18313852226@sina.cn', 'code 好事');
$message->to('185429135@qq.com');//发给谁
});
}
}
================================================
FILE: app/Codehaoshi/Handler/ImageUploadHandler.php
================================================
<?php
namespace Codehaoshi\Handler;
use App\Http\Requests\ImageUploadRequest;
use App\Tools\FileManager\BaseManager;
class ImageUploadHandler
{
/**
* @var UploadedFile $file
*/
protected $file;
protected $allowed_extensions = ["image/jpeg", "image/png", "image/gif"];
protected $manger;
protected $baseManager;
public function __construct()
{
$this->baseManager = new BaseManager();
}
public function fileUpload(ImageUploadRequest $request, $img)
{
$result = $this->baseManager->storeUploadImgByConfigPath($img, $request->path);
$res = ['status' => 1, 'msg' => $result['relative_url']];
return response()->json($res);
}
}
================================================
FILE: app/Codehaoshi/Listeners/UserCreatorListener.php
================================================
<?php
namespace App\Codehaoshi\Listeners;
interface UserCreatorListener
{
public function userValidationError($errors);
public function userCreated($user);
}
================================================
FILE: app/Codehaoshi/Notification/Metion.php
================================================
<?php
namespace Codehaoshi\Notification;
use App\Models\User;
class Metion
{
public $body_parsed;
public $users = [];
public $usernames;
public $body_original;
public function parse($body)
{
$this->body_original = $body;
$this->usernames = $this->getMentionedUsername();
count($this->usernames) > 0 && $this->users = User::whereIn('user_name', $this->usernames)->get();
$this->replace();
return $this->body_parsed;
}
protected function getMentionedUsername()
{
preg_match_all("/(\S*)\@([^\r\n\s]*)/i", $this->body_original, $atlist_tmp);
$usernames = [];
foreach ($atlist_tmp[2] as $k => $v) {
if ($atlist_tmp[1][$k] || strlen($v) > 25) {
continue;
}
$usernames[] = $v;
}
return array_unique($usernames);
}
public function replace()
{
$this->body_parsed = $this->body_original;
foreach ($this->users as $user) {
$search = '@' . $user->user_name;
$place = '[' . $search . '](' . route('users.show', $user->id) . ')';
$this->body_parsed = str_replace($search, $place, $this->body_parsed);
}
}
}
================================================
FILE: app/Codehaoshi/Selectors/ArticleSelector.php
================================================
<?php
namespace Codehaoshi\Selectors;
use App\Repositories\ArticleRepository;
class ArticleSelector
{
protected $articleRepository;
public function __construct(ArticleRepository $articleRepository)
{
$this->articleRepository = $articleRepository;
}
public function articleInfoWithPrevAndNext($id)
{
return [
'prev' => $this->articleRepository->getByIdWithoutException($id, '<'),
'next' => $this->articleRepository->getByIdWithoutException($id , '>'),
];
}
}
================================================
FILE: app/Codehaoshi/Selectors/QuestionSelector.php
================================================
<?php
namespace Codehaoshi\Selectors;
use App\Repositories\ArticleRepository;
use App\Repositories\QuestionRepository;
class QuestionSelector
{
protected $questionRepository;
public function __construct(QuestionRepository $questionRepository)
{
$this->questionRepository = $questionRepository;
}
public function questionInfoWithPrevAndNext($id)
{
return [
'prev' => $this->questionRepository->getByIdWithoutException($id, '<'),
'next' => $this->questionRepository->getByIdWithoutException($id , '>'),
];
}
}
================================================
FILE: app/Codehaoshi/Stat/Stat.php
================================================
<?php
namespace Codehaoshi\Stat;
use App\Repositories\ArticleCategoryRepository;
use App\Repositories\QuestionCategoryRepository;
use Cache;
class Stat
{
protected $articleCategoryRepository;
protected $questionCategoryRepository;
const CACHE_KEY = 'site_stat';
const CACHE_MINUTES = 10;
public function __construct(ArticleCategoryRepository $articleCategoryRepository, QuestionCategoryRepository $questionCategoryRepository)
{
$this->articleCategoryRepository = $articleCategoryRepository;
$this->questionCategoryRepository = $questionCategoryRepository;
}
public function getCategoryAndQuestion()
{
return Cache::remember(self::CACHE_KEY, self::CACHE_MINUTES, function () {
$entity = new StatEntity();
$entity->questionList = $this->questionCategoryRepository->getAllData('*', false);
$entity->categoryList = $this->articleCategoryRepository->getAllData('*', false);
$entity->categoryList->each(function($item, $key) {
$item->recent_update = $item->articles()->max('created_at');
});
$entity->questionList->each(function($item, $key) {
$item->recent_update = $item->questions()->max('created_at');
});
return $entity;
});
}
}
================================================
FILE: app/Codehaoshi/Stat/StatEntity.php
================================================
<?php
namespace Codehaoshi\Stat;
class StatEntity
{
public $categoryList;
public $questionList;
}
================================================
FILE: app/Codehaoshi/Vote/Voter.php
================================================
<?php
namespace Codehaoshi\Vote;
use App\Activities\UserUpvoteArticle;
use App\Activities\UserUpvoteQuestion;
use App\Models\Article;
use App\Models\Question;
use App\Models\User;
use App\Notifications\UserVoteArticle;
use App\Notifications\UserVoteQuestion;
use Illuminate\Support\Facades\Auth;
class Voter
{
public function articleUpVote(Article $article)
{
$query = $article->votes();
if ($query->ByWhom(Auth::id())->count()) {
$result = 0;
} else {
$result = $query->create(['user_id' => Auth::id()]);
User::findOrfail($article->user_id)->notify(new UserVoteArticle($article));
app(UserUpvoteArticle::class)->generate(Auth::user(), $article);
$article->increment('vote_count', 1);
}
return $result ? ['status' => 1] : ['status' => -1];
}
public function articleDownVote(Article $article)
{
$query = $article->votes()->ByWhom(Auth::id());
if (!$query->count()) {
$result = 0;
} else {
$result = $query->delete();
$article->decrement('vote_count', 1);
app(UserUpvoteArticle::class)->remove(Auth::user(), $article);
}
return $result ? ['status' => 1] : ['status' => -1];
}
public function questionUpVote(Question $question)
{
$query = $question->votes();
if ($query->ByWhom(Auth::id())->count()) {
$result = 0;
} else {
$result = $query->create(['user_id' => Auth::id()]);
User::findOrfail($question->user_id)->notify(new UserVoteQuestion($question));
app(UserUpvoteQuestion::class)->generate(Auth::user(), $question);
$question->increment('vote_count', 1);
}
return $result ? ['status' => 1] : ['status' => -1];
}
public function questionDownVote(Question $question)
{
$query = $question->votes()->ByWhom(Auth::id());
if (!$query->count()) {
$result = 0;
} else {
$result = $query->delete();
$question->decrement('vote_count', 1);
app(UserUpvoteQuestion::class)->remove(Auth::user(), $question);
}
return $result ? ['status' => 1] : ['status' => -1];
}
}
================================================
FILE: app/Console/Commands/BaseCommand.php
================================================
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class BaseCommand extends Command
{
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Exec sheel with pretty print.
*
* @param string $command
* @return mixed
*/
public function execShellWithPrettyPrint($command)
{
$this->info('-- Start to install -');
$this->info($command);
$output = shell_exec($command);
$this->info($output);
$this->info('----');
}
}
================================================
FILE: app/Console/Commands/BindAdmin.php
================================================
<?php
namespace App\Console\Commands;
use App\Models\Role;
use App\Models\User;
class BindAdmin extends BaseCommand
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'bindAdmin:Ucer';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Bind Ucer to the role supper_admin';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$this->info('-- Start... --');
$supper_admin = Role::findOrFail(1);
User::findOrFail(1)->attachRole($supper_admin);
User::findOrFail(1)->update(['is_admin'=>'yes']);
$this->info('-- The end --');
}
}
================================================
FILE: app/Console/Commands/CodehaoshiInstall.php
================================================
<?php
namespace App\Console\Commands;
class CodehaoshiInstall extends BaseCommand
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'codehaoshi:install';
/**
* The console command description.
*
* @var string
*/
protected $description = 'First install the website';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$this->execShellWithPrettyPrint('php artisan key:generate');
$this->execShellWithPrettyPrint('php artisan migrate');
$this->execShellWithPrettyPrint('php artisan passport:install');
$this->execShellWithPrettyPrint('php artisan db:seed --class=RolesTableSeeder');
$this->execShellWithPrettyPrint('php artisan db:seed --class=PermissionsTableSeeder');
}
}
================================================
FILE: app/Console/Kernel.php
================================================
<?php
namespace App\Console;
use App\Console\Commands\BindAdmin;
use App\Console\Commands\CodehaoshiInstall;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
CodehaoshiInstall::class,
BindAdmin::class,
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')
// ->hourly();
// $schedule->command('backup:clean')->daily()->everyMinute();
$schedule->command('backup:run --only-db')->daily();
$schedule->command('backup:run')->weekly();
// $schedule->command('backup:run --only-db')->everyMinute();
}
/**
* Register the Closure based commands for the application.
*
* @return void
*/
protected function commands()
{
require base_path('routes/console.php');
}
}
================================================
FILE: app/Exceptions/Handler.php
================================================
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
{
/**
* A list of the exception types that should not be reported.
*
* @var array
*/
protected $dontReport = [
\Illuminate\Auth\AuthenticationException::class,
\Illuminate\Auth\Access\AuthorizationException::class,
\Symfony\Component\HttpKernel\Exception\HttpException::class,
\Illuminate\Database\Eloquent\ModelNotFoundException::class,
\Illuminate\Session\TokenMismatchException::class,
\Illuminate\Validation\ValidationException::class,
];
/**
* Report or log an exception.
*
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
*
* @param \Exception $exception
* @return void
*/
public function report(Exception $exception)
{
parent::report($exception);
}
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
{
return parent::render($request, $exception);
}
/**
* Convert an authentication exception into an unauthenticated response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Auth\AuthenticationException $exception
* @return \Illuminate\Http\Response
*/
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
return redirect()->guest(route('login'));
}
}
================================================
FILE: app/Helpers.php
================================================
<?php
use Illuminate\Contracts\Routing\UrlGenerator;
/**
* Generate a url for the dashboard application.
*
* @param string $path
* @param mixed $parameters
* @param bool $secure
* @return \Illuminate\Contracts\Routing\UrlGenerator|string
*/
function dashboardUrl($path = null, $parameters = [], $secure = null)
{
if (is_null($path)) {
return app(UrlGenerator::class);
}
$path = '/dashboard' . $path;
return app(UrlGenerator::class)->to($path, $parameters, $secure);
}
/**
* Put session to flash.
* @param string $status
* @param string $msg
* @param string $key
*/
function flash($status = 'success', $msg = '操作成功', $key = 'toastrMsg')
{
session()->flash($key, ['status' => $status, 'msg' => $msg]);
}
/**
* @param $text
* @param array $parameters
* @return mixed
*/
function lang($text, $parameters = [])
{
return str_replace('codehaoshi.', '', trans('codehaoshi.' . $text, $parameters));
}
/**
* @param string $url
* @param int $status
* @param string $msg
* @param array $data
* @return array
*/
function ajaxReturn($url = "", $status = 1, $msg = '操作成功', $data = [])
{
return ['status' => $status, 'msg' => $msg, 'url' => $url, 'data' => $data];
}
function ajaxReturnError($url = "", $status = 0, $msg = '操作失败', $data = [])
{
return ['status' => $status, 'msg' => $msg, 'url' => $url, 'data' => $data];
}
/**
* @param $array
* @param $all
* @return string
*/
function roleOrPermissionDataHandle($array, $all)
{
$str = "";
$intersect = array_intersect($array, array_column($all, 'id'));
if (count($all) > 0) {
foreach ($all as $key => $vo) {
$intro = "【" . $vo['display_name'] . "】";
$str .= '{ "id": "' . $vo['id'] . '", "pId":"0", "name":"' . $vo['name'] . $intro . '"';
if (!empty($array) && in_array($vo['id'], $intersect)) {
$str .= ' ,"checked":1';
}
$str .= '},';
}
}
return "[" . substr($str, 0, -1) . "]";
}
function getCdnDomain()
{
return config('app.url_static') ?: config('app.url');
}
function getTagWeight($useCount)
{
$style = 'mini';
if ($useCount >= 2 && $useCount < 5) {
$style = 'tiny';
} elseif ($useCount >= 5 && $useCount < 10) {
$style = 'small';
} elseif ($useCount >= 10 && $useCount < 50) {
$style = 'large';
} elseif ($useCount >= 50) {
$style = 'big';
}
return $style;
}
function getDateWithSub($date)
{
$the_time = strtotime($date);
$now_time = time();
$show_time = $the_time;
$dur = $now_time - $show_time;
if($dur < 60){
return $dur.'秒前';
}else if($dur < 3600){
return floor($dur/60).'分钟前';
}else if($dur < 86400) {
return floor($dur/3600).'小时前';
}else if($dur < 259200) {//3天内
return floor($dur / 86400) . '天前';
}else{
return substr($date,0,-8);
}
return substr($date,0,-8);
}
================================================
FILE: app/Http/Controllers/ActivityController.php
================================================
<?php
namespace App\Http\Controllers;
use App\Models\Article;
use App\Models\Question;
use App\Repositories\UserRepository;
use Illuminate\Http\Request;
use Auth;
class ActivityController extends Controller
{
protected $userRepository;
protected $article;
protected $question;
public function __construct(UserRepository $userRepository, Article $article, Question $question)
{
$this->userRepository = $userRepository;
$this->article = $article;
$this->question = $question;
}
public function index($user_name, $view = null, Request $request)
{
$user = $this->userRepository->getByName($user_name);
if (!isset($user)) abort(404);
switch ($view) {
case 'article':
$activities = $this->article->getArticlesWithWhoFilter('default', 10, $user->id);;
break;
case 'question':
$activities = $this->question->getArticlesWithWhoFilter('default', 10, $user->id);;
break;
case 'following':
$activities = $user->followings;;
break;
case 'followed':
$activities = $user->followers;
break;
case 'vote':
$activities = $user->activities()->recent()->whereIn('type', ['UserUpvoteArticle', 'UserUpvoteQuestion'])->paginate(10);
break;
default:
$activities = $user->activities()->recent()->paginate(10);
break;
}
$user_name = $user->user_name;
return view('users.personal-center', [
'info' => $user,
'activities' => $activities,
'view' => $view,
'nowUrl' => $request->url(),
'articleView' => route('user_center', ['user_name' => $user_name, 'view' => 'article']),
'questionView' => route('user_center', ['user_name' => $user_name, 'view' => 'question']),
'followingView' => route('user_center', ['user_name' => $user_name, 'view' => 'following']),
'followedView' => route('user_center', ['user_name' => $user_name, 'view' => 'followed']),
'defaultView' => route('user_center', ['user_name' => $user_name, 'view' => null]),
'voteView' => route('user_center', ['user_name' => $user_name, 'view' => 'vote']),
]);
}
}
================================================
FILE: app/Http/Controllers/Api/Apicontroller.php
================================================
<?php
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use League\Fractal\Manager;
use League\Fractal\Resource\Collection;
use League\Fractal\Resource\Item;
class Apicontroller extends Controller
{
/**
* @var int $statusCode
*/
protected $statusCode = 200;
const CODE_WRONG_ARGS = 'GEN-FUBARGS';
const CODE_NOT_FOUND = 'GEN-LIKETHEWIND';
const CODE_INTERNAL_ERROR = 'GEN-AAAGGH';
const CODE_UNAUTHORIZED = 'GEN-MAYBGTFO';
const CODE_FORBIDDEN = 'GEN-GTFO';
const CODE_INVALID_MIME_TYPE = 'GEN-UMWUT';
/**
* @var Manager $fractal
*/
protected $fractal;
public function __construct()
{
$this->fractal = new Manager;
if (isset($_GET['include'])) {
$this->fractal->parseIncludes($_GET['include']);
}
}
/**
* Respond the collection data.
*
* @param $collection
* @param $callback
* @return mixed
*/
public function respondWithCollection($collection, $callback)
{
$resource = new Collection($collection, $callback);
$rootScope = $this->fractal->createData($resource);
return $this->respondWithArray($rootScope->toArray());
}
/**
* Respond the data.
*
* @param array $array
* @param array $headers
* @return mixed
*/
public function respondWithArray(array $array, array $headers = [])
{
return response()->json($array, $this->statusCode, $headers);
}
/**
* Respond the error message.
*
* @param string $message
* @param string $errorCode
* @return json
*/
protected function respondWithError($message, $errorCode)
{
if ($this->statusCode === 200) {
trigger_error(
"You better have a really good reason for erroring on a 200...",
E_USER_WARNING
);
}
return $this->respondWithArray([
'error' => [
'code' => $errorCode,
'http_code' => $this->statusCode,
'message' => $message,
]
]);
}
/**
* Respond the error of 'Wrong Arguments'.
*
* @param string $message
* @return json
*/
public function errorWrongArgs($message = 'Wrong Arguments')
{
return $this->setStatusCode(400)
->respondWithError($message, self::CODE_WRONG_ARGS);
}
/**
* Get the status code.
*
* @return int $statusCode
*/
public function getStatusCode()
{
return $this->statusCode;
}
/**
* Set the status code.
*
* @param $statusCode
* @return $this
*/
public function setStatusCode($statusCode)
{
$this->statusCode = $statusCode;
return $this;
}
/**
* Respond the error of 'Unauthorized'.
*
* @param string $message
* @return json
*/
public function errorUnauthorized($message = 'Unauthorized')
{
return $this->setStatusCode(401)
->respondWithError($message, self::CODE_UNAUTHORIZED);
}
/**
* Respond the item data.
*
* @param $item
* @param $callback
* @return mixed
*/
public function respondWithItem($item, $callback)
{
$resource = new Item($item, $callback);
$rootScope = $this->fractal->createData($resource);
return $this->respondWithArray($rootScope->toArray());
}
/**
* Repond a no content response.
*
* @return response
*/
public function noContent()
{
return response()->json(null, 204);
}
}
================================================
FILE: app/Http/Controllers/Api/ArticleController.php
================================================
<?php
namespace App\Http\Controllers\Api;
use App\Repositories\ArticleRepository;
use App\Transformers\UserTransformer;
use Illuminate\Http\Request;
use Auth;
class ArticleController extends Apicontroller
{
public function voteUser(ArticleRepository $articleRepository, $article_id)
{
$info = $articleRepository->getById($article_id)->votes()->orderBy('created_at', 'desc')->with('user')->get()->pluck('user');
return $this->respondWithArray($info->toArray());
}
public function vote(ArticleRepository $articleRepository, Request $request, $article_id)
{
$article = $articleRepository->getById($article_id);
if ($request->type == 'up') {
$result = app('Codehaoshi\Vote\Voter')->articleUpVote($article);
if ($result['status'] == 1) return $this->respondWithItem(Auth::user(), new UserTransformer);
} else {
$result = app('Codehaoshi\Vote\Voter')->articleDownVote($article);
}
if ($result['status'] === 1) return $this->noContent();
return $this->errorWrongArgs('出错了,请稍后再试');
}
}
================================================
FILE: app/Http/Controllers/Api/CommentController.php
================================================
<?php
namespace App\Http\Controllers\Api;
use App\Activities\UserCommentArticle;
use App\Codehaoshi\Creators\CommentCreator;
use App\Http\Requests\StoreReplyOrCommentRequest;
use App\Repositories\ArticleRepository;
use App\Repositories\CommentRepository;
use App\Transformers\CommentTransformer;
use Codehaoshi\Core\CreatorListener;
use Illuminate\Http\Request;
use Auth;
class CommentController extends Apicontroller implements CreatorListener
{
protected $commentRepository;
protected $articleRepository;
public function __construct(ArticleRepository $articleRepository, CommentRepository $commentRepository)
{
parent::__construct();
$this->commentRepository = $commentRepository;
$this->articleRepository = $articleRepository;
}
public function show(Request $request, $article_id)
{
$article = $this->articleRepository->getById($article_id);
$replies = $article->getCommentsWithLimit(config('codehaoshi.comments_perpage', '200'), $request->order_by);
return $this->respondWithCollection($replies, new CommentTransformer);
}
public function store(StoreReplyOrCommentRequest $request)
{
return app(CommentCreator::class)->create($this, $request->all());
}
public function creatorSucceed($comment)
{
return $this->respondWithItem($comment, new CommentTransformer);
}
public function creatorFailed($error)
{
return $this->errorWrongArgs($error);
}
public function destroy($comment_id)
{
$comment = $this->commentRepository->getById($comment_id);
$this->authorize('delete', $comment);
$comment->delete();
$articleModel = $comment->article();
$this->articleRepository->decrementCommentCount($articleModel);
$article = $this->articleRepository->getById($comment->article_id);
$this->articleRepository->generateLastReplyUserInfo($article);
app(UserCommentArticle::class)->remove(Auth::user(), $article);
return $this->noContent();
}
}
================================================
FILE: app/Http/Controllers/Api/FollowerController.php
================================================
<?php
namespace App\Http\Controllers\Api;
use App\Activities\UserFollowedUser;
use App\Notifications\NewUserFollowNotification;
use App\Repositories\UserRepository;
use Auth;
class FollowerController extends Apicontroller
{
/**
* @var UserRepository
*/
protected $userRepository;
/**
* FollowersController constructor.
* @param $user
*/
public function __construct(UserRepository $userRepository)
{
parent::__construct();
$this->userRepository = $userRepository;
}
/**
* @param $id
* @return \Illuminate\Http\JsonResponse
*/
public function index($id)
{
$author = $this->userRepository->getById($id);
return response()->json(['followed' => Auth::user()->isFollowing($author)]);
}
/**
* Follow or unfollow the other user.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function doFollow()
{
$id = request('user');
$userToFollow = $this->userRepository->getById(request('user'));
$user = Auth::user();
if ($user->isFollowing($id)) {
app(UserFollowedUser::class)->remove($user, $userToFollow);
$user->unfollow($id);
$userToFollow->decrement('follower_count');
return response()->json(['followed' => false]);
} else {
$user->follow($id);
$userToFollow->notify(new NewUserFollowNotification());
$userToFollow->increment('follower_count');
app(UserFollowedUser::class)->generate($user, $userToFollow);
}
return response()->json(['followed' => true]);
}
}
================================================
FILE: app/Http/Controllers/Api/QuestionController.php
================================================
<?php
namespace App\Http\Controllers\Api;
use App\Repositories\QuestionRepository;
use App\Transformers\UserTransformer;
use Illuminate\Http\Request;
use Auth;
class QuestionController extends Apicontroller
{
public function voteUser(QuestionRepository $questionRepository, $question_id)
{
$info = $questionRepository->getById($question_id)->votes()->orderBy('created_at', 'desc')->with('user')->get()->pluck('user');
return $this->respondWithArray($info->toArray());
}
public function vote(QuestionRepository $questionRepository, Request $request, $question_id)
{
$question = $questionRepository->getById($question_id);
if ($request->type == 'up') {
$result = app('Codehaoshi\Vote\Voter')->questionUpVote($question);
if ($result['status'] == 1) return $this->respondWithItem(Auth::user(), new UserTransformer);
} else {
$result = app('Codehaoshi\Vote\Voter')->questionDownVote($question);
}
if ($result['status'] === 1) return $this->noContent();
return $this->errorWrongArgs('出错了,请稍后再试');
}
}
================================================
FILE: app/Http/Controllers/Api/ReplyController.php
================================================
<?php
namespace App\Http\Controllers\Api;
use App\Activities\UserReplyQuestion;
use App\Codehaoshi\Creators\ReplyCreator;
use App\Http\Requests\StoreReplyOrCommentRequest;
use App\Repositories\QuestionRepository;
use App\Repositories\ReplyRepository;
use App\Transformers\ReplyTransformer;
use Codehaoshi\Core\CreatorListener;
use Illuminate\Http\Request;
use Auth;
class ReplyController extends Apicontroller implements CreatorListener
{
protected $replyRepository;
protected $questionRepository;
public function __construct(QuestionRepository $questionRepository, ReplyRepository $replyRepository)
{
parent::__construct();
$this->replyRepository = $replyRepository;
$this->questionRepository = $questionRepository;
}
public function show(Request $request, $question_id)
{
$question = $this->questionRepository->getById($question_id);
$replies = $question->getRepliesWithLimit(config('codehaoshi.comments_perpage', '200'), $request->order_by);
return $this->respondWithCollection($replies, new ReplyTransformer);
}
public function store(StoreReplyOrCommentRequest $request)
{
return app(ReplyCreator::class)->create($this, $request->all());
}
public function creatorSucceed($reply)
{
return $this->respondWithItem($reply, new ReplyTransformer);
}
public function creatorFailed($error)
{
return $this->errorWrongArgs($error);
}
public function destroy($reply_id)
{
$reply = $this->replyRepository->getById($reply_id);
$this->authorize('delete', $reply);
$reply->delete();
$questionModel = $reply->question();
$this->questionRepository->decrementReplyCount($questionModel);
$question = $this->questionRepository->getById($reply->question_id);
$this->questionRepository->generateLastReplyUserInfo($question);
app(UserReplyQuestion::class)->remove(Auth::user(), $question);
return $this->noContent();
}
}
================================================
FILE: app/Http/Controllers/Api/UploadController.php
================================================
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Requests\ImageUploadRequest;
use App\Models\User;
use App\Tools\FileManager\BaseManager;
class UploadController extends Controller
{
protected $manger;
protected $baseManager;
public function __construct()
{
$this->baseManager = new BaseManager();
}
public function fileUpload(ImageUploadRequest $request)
{
if (!$request->hasFile('myfile')) {
return ajaxReturnError('', '找不到文件');
}
$img = $request->file('myfile');
$result = $this->baseManager->storeUploadImgByConfigPath($img, $request->path);
$res = ['status' => 1, 'msg' => $result['relative_url']];
if ($request->path == 'avatar') {
$user = (new User)->findOrFail($request->id);
$user->avatar = $result['relative_url'];
$user->save();
}
return response()->json($res);
}
}
================================================
FILE: app/Http/Controllers/Api/Votecontroller.php
================================================
<?php
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class Votecontroller extends Controller
{
public function vote($article_id)
{
return 333;
}
}
================================================
FILE: app/Http/Controllers/ArticlesController.php
================================================
<?php
namespace App\Http\Controllers;
use App\Http\Requests\ArticleRequest;
use App\Models\Article;
use App\Repositories\ArticleCategoryRepository;
use App\Repositories\ArticleRepository;
use App\Repositories\QuestionRepository;
use App\Repositories\TagRepository;
use Codehaoshi\Selectors\ArticleSelector;
use Auth;
class ArticlesController extends Controller
{
protected $articleRepository;
protected $articleCategoryRepository;
protected $tagRepository;
protected $questionRepository;
public function __construct(ArticleCategoryRepository $articleCategoryRepository, ArticleRepository $articleRepository, TagRepository $tagRepository, QuestionRepository $questionRepository)
{
$this->tagRepository = $tagRepository;
$this->articleRepository = $articleRepository;
$this->articleCategoryRepository = $articleCategoryRepository;
$this->questionRepository = $questionRepository;
}
/**
* Get article list by category
*
* @param $slug
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function index($slug)
{
$category = $this->articleCategoryRepository->getInfoBySlug($slug);
$articles = $this->articleRepository->getThisModel()->getArticlesWithFilter('category', 20, $category->id);
$hotArticles = $this->articleRepository->getThisModel()->getArticlesWithFilter('hot', 5);
$recentArticles = $this->articleRepository->getThisModel()->getArticlesWithFilter('recent', 5);
$tags = $this->tagRepository->getAllTagWithCount();
return view('articles.article-list', compact('articles', 'category', 'hotArticles', 'recentArticles', 'tags'));
}
/**
* Show article-info page
* @param $slug
* @param Article $articleModel
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function show($slug, Article $articleModel)
{
$article = $this->articleRepository->getArticleInfoBySlug($slug);
if ($article->is_draft == 'yes' || $article->only_owner_can_see == 'yes') {
$this->authorize('showDraft', $article);
}
$article->increment('view_count');
$recentArticles = $articleModel->withoutDraft()->withoutPrivate()->where('id', '<>', $article['id'])->orderBy('created_at', 'desc')->select('id', 'title', 'slug')->paginate(6);
$prevAndNext = app(ArticleSelector::class)->articleInfoWithPrevAndNext($article->id);
return view('articles.show', ['info' => $article,
'recentArticles' => $recentArticles,
'prev' => $prevAndNext['prev'],
'next' => $prevAndNext['next']
]);
}
/**
* Get All articles
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function allArticles()
{
$articles = $this->articleRepository->getThisModel()->getArticlesWithFilter('recent', 20);
return view('articles.all-articles', compact('articles'));
}
public function create()
{
$recentArticles = $this->articleRepository->getThisModel()->getArticlesWithFilter('recent', 5);
$recentQuestions = $this->questionRepository->getThisModel()->getArticlesWithFilter('recent', 5);
$tags = $this->tagRepository->getAllTagWithCount();
$catList = $this->articleCategoryRepository->getAllData(['id', 'name'], false);
$tagList = $this->tagRepository->getAllData(['id', 'tag'], false);
return view('articles.create', compact('tagList', 'catList', 'recentQuestions', 'recentArticles', 'tags'));
}
public function store(ArticleRequest $request)
{
$data = array_merge($request->all(), ['user_id' => Auth::id()]);
$res =$this->articleRepository->store($data);
$this->articleCategoryRepository->getById($request->category_id)->increment('article_count');
Auth::user()->increment('article_count');
$this->articleRepository->syncTag(explode(',', $request->tags));
flash('info', '文章发布成功');
return redirect()->route('article.show', ['slug' => $res->slug]);
}
public function edit($id)
{
$recentArticles = $this->articleRepository->getThisModel()->getArticlesWithFilter('recent', 5);
$recentQuestions = $this->questionRepository->getThisModel()->getArticlesWithFilter('recent', 5);
$tags = $this->tagRepository->getAllTagWithCount();
$catList = $this->articleCategoryRepository->getAllData(['id', 'name'], false);
$tagList = $this->tagRepository->getAllData(['id', 'tag'], false);
$info = $this->articleRepository->getById($id);
$infoTag = implode(',', array_column($info->tags->toArray(), 'id'));
return view('articles.edit',compact('info','infoTag', 'catList', 'tagList', 'tags', 'recentArticles', 'recentQuestions'));
}
public function update(ArticleRequest $request, $id)
{
$oldData = $this->articleRepository->getById($id)->category_id;
if ($oldData != $request->category_id) {
$this->articleCategoryRepository->getById($request->category_id)->increment('article_count');
$this->articleCategoryRepository->getById($oldData)->decrement('article_count');
}
$data = $request->only('title', 'category_id', 'description', 'content', 'tags', 'is_draft');
$res = $this->articleRepository->update($id, $data);
$this->articleRepository->syncTag(explode(',', $request->tags));
flash('info', '文章更新成功');
return redirect()->route('article.show', ['slug' => $res->slug]);
}
}
================================================
FILE: app/Http/Controllers/Auth/ForgotPasswordController.php
================================================
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
class ForgotPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset emails and
| includes a trait which assists in sending these notifications from
| your application to your users. Feel free to explore this trait.
|
*/
use SendsPasswordResetEmails;
/**
* Send a reset link to the given user.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function sendResetLinkEmail(Request $request)
{
$this->validateEmail($request);
// We will send the password reset link to this user. Once we have attempted
// to send the link, we will examine the response then see the message we
// need to show to the user. Finally, we'll send out a proper response.
$response = $this->broker()->sendResetLink(
$request->only('email')
);
return $response == Password::RESET_LINK_SENT
? $this->sendResetLinkResponse($response, $request)
: $this->sendResetLinkFailedResponse($request, $response);
}
/**
* Get the response for a successful password reset link.
*
* @param string $response
* @return \Illuminate\Http\RedirectResponse
*/
protected function sendResetLinkResponse($response, $request)
{
return back()->with('status', trans($response))->with('old-email', $request->email);;
}
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
}
================================================
FILE: app/Http/Controllers/Auth/LoginController.php
================================================
<?php
namespace App\Http\Controllers\Auth;
use App\Codehaoshi\Creators\UserCreator;
use App\Codehaoshi\Listeners\UserCreatorListener;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Auth\Traits\SocialiteHelper;
use App\Repositories\UserRepository;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Session;
use Auth;
use Carbon\Carbon;
class LoginController extends Controller implements UserCreatorListener
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers, SocialiteHelper;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/';
protected $userRepository;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct(UserRepository $userRepository)
{
$this->middleware('guest')->except('logout');
$this->userRepository = $userRepository;
}
// public function username()
// {
// return ['user_name','email'];
// }
/**
* Show the application's login form.
*
* @return \Illuminate\Http\Response
*/
public function showLoginForm()
{
return view('auth.signin');
}
/**
* ----------------------------------------
* GithubAuthenticatorListener Delegate
* ----------------------------------------
*/
public function userNotFound($driver, $registerUserData)
{
if ($driver == 'github') {
$oauthData['image_url'] = $registerUserData->avatar;
$oauthData['github_id'] = $registerUserData->user['id'];
$oauthData['github_name'] = $registerUserData->user['login'];
$oauthData['nickname'] = $registerUserData->nickname;
$oauthData['user_name'] = $registerUserData->user['login'];
$oauthData['email'] = $registerUserData->email;
} elseif ($driver == 'wechat') {
return '暂不支持微信登录';
}
$oauthData['register_source'] = $driver;
$oauthData['status'] = 1;
$oauthData['password'] = '';
Session::put('oauthData', $oauthData);
return app(UserCreator::class)->create($this, $oauthData);
}
/**
* Implements UserCreatorLister
*
* @param [type] $errors [description]
* @return [type] [description]
*/
public function userValidationError($errors)
{
return redirect('/');
}
/**
* Implements UserCreatorLister.
* When user was created success, excute this method
*
* @param [type] $user [description]
* @return [type] [description]
*/
public function userCreated($user)
{
$this->userRepository->save($user, ['last_actived_at' => Carbon::now()]);
Auth::login($user, true);
Session::forget('oauthData');
flash('info', lang('login_Successful'));
return redirect('/');
}
/**
* User's account had been disabled
*
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function accountDisabled()
{
Session::forget('oauthData');
flash('error', lang('sorry,your account has been disabled.'));
return redirect('/');
}
/**
* Log the user out of the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function logout()
{
Auth::logout();
flash('info', lang('operation succeeded.'));
return redirect('/');
}
/**
* to login user
* @param [type] $user [description]
* @return [type] [description]
*/
private function loginUser($user)
{
return $this->userCreated($user);
}
/**
* Handle a login request to the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response
*/
public function login(Request $request)
{
$this->validateLogin($request);
// If the class is using the ThrottlesLogins trait, we can automatically throttle
// the login attempts for this application. We'll key this by the username and
// the IP address of the client making these requests into this application.
if ($this->hasTooManyLoginAttempts($request)) {
$this->fireLockoutEvent($request);
return $this->sendLockoutResponse($request);
}
if ($this->attemptLogin($request)) {
flash('info', '登录成功');
$this->userRepository->save(Auth::user(), ['last_actived_at' => Carbon::now()]);
return $this->sendLoginResponse($request);
}
// If the login attempt was unsuccessful we will increment the number of attempts
// to login and redirect the user back to the login form. Of course, when this
// user surpasses their maximum number of attempts they will get locked out.
$this->incrementLoginAttempts($request);
return $this->sendFailedLoginResponse($request);
}
}
================================================
FILE: app/Http/Controllers/Auth/RegisterController.php
================================================
<?php
namespace App\Http\Controllers\Auth;
use App\Codehaoshi\Listeners\UserCreatorListener;
use App\Models\User;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Auth;
use Session;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Show the application's login form.
*
* @return \Illuminate\Http\Response
*/
public function showRegistrationForm()
{
return view('auth.signup');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'user_name' => 'alpha_num|required|unique:users',
'email' => 'email|required|unique:users',
'password' => 'required|confirmed|min:6',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
protected function create(array $data)
{
return User::create([
'user_name' => $data['user_name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'avatar' => '/assets/dashboard/images/head_default.gif',
'register_source' => 'front-register',
'status' => 1,
'is_admin' => 'no',
]);
}
/**
* Handle a registration request for the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function register(Request $request)
{
$data = $request->all();
$this->validator($data)->validate();
$this->guard()->login($this->create($data));
flash('info', '注册成功,欢迎加入');
return redirect()->to($this->redirectTo);
}
}
================================================
FILE: app/Http/Controllers/Auth/ResetPasswordController.php
================================================
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;
class ResetPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset requests
| and uses a simple trait to include this behavior. You're free to
| explore this trait and override any methods you wish to tweak.
|
*/
use ResetsPasswords;
/**
* Where to redirect users after resetting their password.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
}
================================================
FILE: app/Http/Controllers/Auth/Traits/SocialiteHelper.php
================================================
<?php
namespace App\Http\Controllers\Auth\Traits;
use Socialite;
use Auth;
use Flash;
use Illuminate\Http\Request;
use Session;
trait SocialiteHelper
{
protected $oauthDrivers = ['github' => 'github', 'wechat' => 'weixin'];
/**
* Redirect the user to the GitHub authentication page.
*
* @return Response
*/
public function redirectToGithubProvider(Request $request)
{
$driver = 'github';
if (Auth::check() && Auth::user()->register_source == $driver) {
return redirect('/');
}
return Socialite::driver($driver)->redirect();
}
/**
* Obtain the user information from GitHub.
*
* @return Response
*/
public function handleGithubProviderCallback(Request $request)
{
$driver = 'github';
if (
(Auth::check() && Auth::user()->register_source == $driver) // If is github register user signined.
) {
return redirect()->intended('/');
}
$oauthUser = Socialite::driver($driver)->user();
$user = $this->userRepository->getFirstRecordByWhere([$driver . '_id' => $oauthUser->id]);// Select database is existence the user.
if (Auth::check()) { // TODO
if ($user && $user->id != Auth::id()) {
flash('error', 'Sorry, this socialite account has been registed.', ['driver' => $driver]);
} else {
return '绑定账号功能待完善';
}
} else {
if ($user) {
if ($user->status < 1) return $this->accountDisabled();
return $this->loginUser($user);
}
return $this->userNotFound($driver, $oauthUser);
}
}
}
================================================
FILE: app/Http/Controllers/CommentsController.php
================================================
<?php
namespace App\Http\Controllers;
use App\Codehaoshi\Creators\CommentCreator;
use App\Http\Requests\StoreReplyOrCommentRequest;
use App\Repositories\ArticleRepository;
use Codehaoshi\Core\CreatorListener;
class CommentsController extends Controller implements CreatorListener
{
protected $articleRepository;
public function __construct(ArticleRepository $articleRepository)
{
$this->middleware('auth');
$this->articleRepository = $articleRepository;
}
public function store(StoreReplyOrCommentRequest $request)
{
return app(CommentCreator::class)->create($this, $request->except('_token'));
}
public function creatorSucceed($article)
{
flash('info', lang('Operation succeed.'));
$articleSlug = $this->articleRepository->getById($article->article_id)->slug;
return redirect()->route('article.show', ['slug' => $articleSlug]);
}
public function creatorFailed($error)
{
flash('error', '发布失败:' . $error);
return redirect('/');
}
}
================================================
FILE: app/Http/Controllers/Controller.php
================================================
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}
================================================
FILE: app/Http/Controllers/Dashboard/AboutsController.php
================================================
<?php
namespace App\Http\Controllers\Dashboard;
use App\Repositories\AboutRepository;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class AboutsController extends Controller
{
protected $about;
public function __construct(AboutRepository $about)
{
$this->about = $about;
}
public function abouts()
{
$list = $this->about->getAllData('*', false);
return view('dashboard.abouts.about-list', ['lists' => $list]);
}
public function create()
{
return view('dashboard.abouts.create');
}
public function store(Request $request)
{
$data = $request->all();
$this->about->store($data);
return ajaxReturn(dashboardUrl('/abouts'));
}
public function edit($id)
{
return view('dashboard.abouts.edit', ['info' => $this->about->getById($id)]);
}
public function update(Request $request, $id)
{
$data = $request->all();
$this->about->update($id, $data);
return ajaxReturn(dashboardUrl('/abouts'));
}
public function destroy($id)
{
$this->about->destroy($id);
return ajaxReturn(redirect()->back());
}
}
================================================
FILE: app/Http/Controllers/Dashboard/ArticleCategoryController.php
================================================
<?php
namespace App\Http\Controllers\Dashboard;
use App\Http\Requests\StoreArticleCategoryRequest;
use App\Http\Requests\UpdateArticleCategoryRequest;
use App\Repositories\ArticleCategoryRepository;
use App\Http\Controllers\Controller;
use App\Tools\FileManager\BaseManager;
class ArticleCategoryController extends Controller
{
protected $articleCategoryRepository;
protected $baseManager;
public function __construct(ArticleCategoryRepository $articleCategoryRepository, BaseManager $baseManager)
{
$this->articleCategoryRepository = $articleCategoryRepository;
$this->baseManager = $baseManager;
}
public function articleCategories()
{
$list = $this->articleCategoryRepository->getAllData('*', false);
return view('dashboard.article-categories.category-list', ['lists' => $list]);
}
public function create()
{
return view('dashboard.article-categories.create');
}
public function store(StoreArticleCategoryRequest $request)
{
$data = array_merge($request->all(), [
'image_url' => $this->baseManager->moveFileTorealPath($request->image_url),
'weight' => $request->weight ?: 50
]);
$this->articleCategoryRepository->store($data);
return ajaxReturn(dashboardUrl('/articleCategory'));
}
public function edit($id)
{
return view('dashboard.article-categories.edit', ['info' => $this->articleCategoryRepository->getById($id)]);
}
public function update(UpdateArticleCategoryRequest $request, $id)
{
$data = array_merge($request->all(), [
'image_url' => $this->baseManager->moveFileTorealPath($request->image_url),
'weight' => $request->weight ?: 50
]);
$this->articleCategoryRepository->update($id, $data);
return ajaxReturn(dashboardUrl('/articleCategory'));
}
public function destroy($id)
{
$permissions = $this->articleCategoryRepository->getById($id)->articles()->count();
if ($permissions > 0) return ajaxReturnError('', 0, '有文章正在使用该分类,不允许删除');
$this->articleCategoryRepository->destroy($id);
return ajaxReturn(redirect()->back());
}
}
================================================
FILE: app/Http/Controllers/Dashboard/ArticlesController.php
================================================
<?php
namespace App\Http\Controllers\Dashboard;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Dashboard\Traits\ArticleHelper;
use App\Http\Requests\ArticleRequest;
use App\Repositories\ArticleCategoryRepository;
use App\Repositories\ArticleRepository;
use App\Repositories\TagRepository;
use Config;
use Illuminate\Http\Request;
use Auth;
class ArticlesController extends Controller
{
use ArticleHelper;
protected $articleRepository;
protected $articleCategoryRepository;
protected $tagRepository;
public function __construct(ArticleCategoryRepository $articleCategoryRepository, ArticleRepository $articleRepository, TagRepository $tagRepository)
{
$this->articleRepository = $articleRepository;
$this->articleCategoryRepository = $articleCategoryRepository;
$this->tagRepository = $tagRepository;
}
public function articles()
{
$category_list = $this->articleCategoryRepository->getAllData('*', false);
return view('dashboard.articles.article-list', compact('category_list'));
}
/**
* Article List ajax page date
*
* @param Request $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function ajaxArticles(Request $request)
{
$order = $request->order?: 'weight';
$sort = $request->sort?: 'asc';
$keywords = $request->keywords;
$is_hot = $request->is_hot;
$only_owner_can_see = $request->only_owner_can_see;
$is_excellent = $request->is_excellent;
$is_draft = $request->is_draft;
$category_id = $request->cat_id;
$where = [];
if ($request->keywords) {
$where[] = ['title', 'like', "%$keywords%"];
}
if($is_hot) $where[] = ['is_hot' , '=', $is_hot];
if($only_owner_can_see) $where[] = ['only_owner_can_see' , '=', $only_owner_can_see];
if($is_excellent) $where[] = ['is_excellent' , '=', $is_excellent];
if($is_draft) $where[] = ['is_draft' , '=', $is_draft];
if($category_id) $where[] = ['category_id' , '=', $category_id];
$lists = $this->articleRepository->page($where, Config::get('dashboard.pagesize'), $order, $sort);
return view('dashboard.articles.ajax-article-list', compact('lists', 'order', 'sort'));
}
public function create()
{
$catList = $this->articleCategoryRepository->getAllData(['id', 'name'], false);
$tagList = $this->tagRepository->getAllData(['id', 'tag'], false);
return view('dashboard.articles.create', ['catList' => $catList, 'tagList' => $tagList]);
}
public function store(ArticleRequest $request)
{
$data = $this->handleArticleDate($request->all());
$this->articleRepository->store($data);
$this->articleCategoryRepository->getById($request->category_id)->increment('article_count');
Auth::user()->increment('article_count');
$this->articleRepository->syncTag(explode(',', $request->tags));
return ajaxReturn(dashboardUrl('/article'));
}
public function edit($id)
{
$catList = $this->articleCategoryRepository->getAllData(['id', 'name'], false);
$tagList = $this->tagRepository->getAllData(['id', 'tag'], false);
$model = $this->articleRepository->getById($id);
$attribute = $this->handleArticleDateToStr($model);
return view('dashboard.articles.edit', ['info' => $model,
'catList' => $catList, 'tagList' => $tagList,
'tags' => array_column($model->tags->toArray(), 'id'),
'attribute' => $attribute
]);
}
public function update(ArticleRequest $request, $id)
{
$oldData = $this->articleRepository->getById($id)->category_id;
if ($oldData != $request->category_id) {
$this->articleCategoryRepository->getById($request->category_id)->increment('article_count');
$this->articleCategoryRepository->getById($oldData)->decrement('article_count');
}
$data = $this->handleArticleDate($request->all());
unset($data['user_id']);
$this->articleRepository->update($id, $data);
$this->articleRepository->syncTag(explode(',', $request->tags));
return ajaxReturn(dashboardUrl('/article'));
}
public function destroy($id)
{
$info = $this->articleRepository->getById($id);
$this->articleCategoryRepository->getById($info->category_id)->decrement('article_count');
Auth::user()->decrement('article_count');
$info->tags()->sync([]);
$this->articleRepository->destroy($id);
return ajaxReturn(dashboardUrl('/article'));
}
}
================================================
FILE: app/Http/Controllers/Dashboard/IndexController.php
================================================
<?php
namespace App\Http\Controllers\Dashboard;
use App\Models\Role;
use App\Models\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Config;
use DB;
class IndexController extends Controller
{
public function __construct()
{
$this->user = new User();
$this->role = new Role();
// $this->permission = new Permission();
}
public function index()
{
// dd(Config::get('dashboardMenu.leftMenu'));
return view('dashboard.index.index', ['menu_list' => Config::get('dashboardMenu.leftMenu')]);
}
public function welcome()
{
return view('dashboard.index.welcome');
}
/*修改某个表的一个字段值公共方法*/
public function commonStatusHandle(Request $request)
{
$data = $request->all();
$id = $data['id'];
$table = $data['table'];
$column = $data['column'];
$value = $data['value'];
$rs = DB::table($table)->where(['id' => $id])->update([$column => $value]);
if ($rs) return ajaxReturn();
return ajaxReturnError();
}
public function test($model)
{
$res = $this->$model->saveFunction();
dd($res);
}
}
================================================
FILE: app/Http/Controllers/Dashboard/LinksController.php
================================================
<?php
namespace App\Http\Controllers\Dashboard;
use App\Http\Controllers\Controller;
use App\Repositories\LinkRepository;
use Illuminate\Http\Request;
class LinksController extends Controller
{
protected $link;
public function __construct(LinkRepository $link)
{
$this->link = $link;
}
public function links()
{
$list = $this->link->getAllData('*', false);
return view('dashboard.links.link-list', ['lists' => $list]);
}
public function create()
{
return view('dashboard.links.create');
}
public function store(Request $request)
{
$data = $request->all();
$this->link->store($data);
return ajaxReturn(dashboardUrl('/links'));
}
public function edit($id)
{
return view('dashboard.links.edit', ['info' => $this->link->getById($id)]);
}
public function update(Request $request, $id)
{
$data = $request->all();
$this->link->update($id, $data);
return ajaxReturn(dashboardUrl('/links'));
}
public function destroy($id)
{
$this->link->destroy($id);
return ajaxReturn(redirect()->back());
}
}
================================================
FILE: app/Http/Controllers/Dashboard/PermissionsController.php
================================================
<?php
namespace App\Http\Controllers\Dashboard;
use App\Http\Requests\StorePermissionRequest;
use App\Http\Requests\UpdatePermissionRequest;
use App\Repositories\PermissionRepository;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Config;
class PermissionsController extends Controller
{
protected $permissionRepository;
public function __construct(PermissionRepository $permissionRepository)
{
$this->permissionRepository = $permissionRepository;
}
public function roles()
{
return view('dashboard.permissions.permission-list');
}
public function ajaxPermissions(Request $request)
{
$keywords = $request->keywords;
$where = [];
if ($request->keywords) {
$where[] = ['name', 'like', "%$keywords%"];
}
$list = $this->permissionRepository->page($where, Config::get('dashboard.pagesize'), 'created_at', 'desc');
return view('dashboard.permissions.ajax-permission-list', ['lists' => $list]);
}
public function create()
{
return view('dashboard.permissions.create');
}
public function store(StorePermissionRequest $request)
{
$this->permissionRepository->store($request->all());
return ajaxReturn(dashboardUrl('/permission'));
}
public function edit($id)
{
return view('dashboard.permissions.edit', ['info' => $this->permissionRepository->getById($id)]);
}
public function update(UpdatePermissionRequest $request, $id)
{
$this->permissionRepository->update($id, $request->all());
return ajaxReturn(dashboardUrl('/permission'));
}
public function destroy($id)
{
$permissions = $this->permissionRepository->getById($id)->roles()->count();
if ($permissions > 0) return ajaxReturnError('', 0, '有角色正在使用该权限,不允许删除');
$this->permissionRepository->destroy($id);
return ajaxReturn(redirect()->back());
}
}
================================================
FILE: app/Http/Controllers/Dashboard/QuestionCategoryController.php
================================================
<?php
namespace App\Http\Controllers\Dashboard;
use App\Http\Requests\StoreQuestionCategoryRequest;
use App\Http\Requests\UpdateQuestionCategoryRequest;
use App\Repositories\QuestionCategoryRepository;
use App\Http\Controllers\Controller;
use App\Tools\FileManager\BaseManager;
class QuestionCategoryController extends Controller
{
protected $questionCategoryRepository;
protected $baseManager;
public function __construct(QuestionCategoryRepository $questionCategoryRepository, BaseManager $baseManager)
{
$this->questionCategoryRepository = $questionCategoryRepository;
$this->baseManager = $baseManager;
}
public function questionCategories()
{
$list = $this->questionCategoryRepository->getAllData('*', false);
return view('dashboard.question-categories.category-list', ['lists' => $list]);
}
public function create()
{
return view('dashboard.question-categories.create');
}
public function store(StoreQuestionCategoryRequest $request)
{
$data = array_merge($request->all(), [
'image_url' => $this->baseManager->moveFileTorealPath($request->image_url,'question'),
'weight' => $request->weight ?: 50
]);
$this->questionCategoryRepository->store($data);
return ajaxReturn(dashboardUrl('/questionCategory'));
}
public function edit($id)
{
return view('dashboard.question-categories.edit', ['info' => $this->questionCategoryRepository->getById($id)]);
}
public function update(UpdateQuestionCategoryRequest $request, $id)
{
$data = array_merge($request->all(), [
'image_url' => $this->baseManager->moveFileTorealPath($request->image_url, 'question'),
'weight' => $request->weight ?: 50
]);
$this->questionCategoryRepository->update($id, $data);
return ajaxReturn(dashboardUrl('/questionCategory'));
}
public function destroy($id)
{
$permissions = $this->questionCategoryRepository->getById($id)->questions()->count();
if ($permissions > 0) return ajaxReturnError('', 0, '有问题正在使用该分类,不允许删除');
$this->questionCategoryRepository->destroy($id);
return ajaxReturn(redirect()->back());
}
}
================================================
FILE: app/Http/Controllers/Dashboard/QuestionsController.php
================================================
<?php
namespace App\Http\Controllers\Dashboard;
use App\Http\Controllers\Dashboard\Traits\ArticleHelper;
use App\Http\Requests\QuestionRequest;
use App\Repositories\QuestionCategoryRepository;
use App\Repositories\QuestionRepository;
use App\Repositories\TagRepository;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Auth;
use Config;
class QuestionsController extends Controller
{
use ArticleHelper;
protected $questionRepository;
protected $questionCategoryRepository;
protected $tagRepository;
public function __construct(QuestionCategoryRepository $questionCategoryRepository, QuestionRepository $questionRepository, TagRepository $tagRepository)
{
$this->questionRepository = $questionRepository;
$this->questionCategoryRepository = $questionCategoryRepository;
$this->tagRepository = $tagRepository;
}
public function questions()
{
$category_list = $this->questionCategoryRepository->getAllData('*', false);
return view('dashboard.questions.question-list', compact('category_list'));
}
/**
* Article List ajax page date
*
* @param Request $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function ajaxQuestions(Request $request)
{
$order = $request->order?: 'weight';
$sort = $request->sort?: 'asc';
$keywords = $request->keywords;
$is_hot = $request->is_hot;
$only_owner_can_see = $request->only_owner_can_see;
$is_excellent = $request->is_excellent;
$is_draft = $request->is_draft;
$category_id = $request->cat_id;
$where = [];
if ($request->keywords) {
$where[] = ['title', 'like', "%$keywords%"];
}
if($is_hot) $where[] = ['is_hot' , '=', $is_hot];
if($only_owner_can_see) $where[] = ['only_owner_can_see' , '=', $only_owner_can_see];
if($is_excellent) $where[] = ['is_excellent' , '=', $is_excellent];
if($is_draft) $where[] = ['is_draft' , '=', $is_draft];
if($category_id) $where[] = ['category_id' , '=', $category_id];
$lists = $this->questionRepository->page($where, Config::get('dashboard.pagesize'), $order, $sort);
return view('dashboard.questions.ajax-question-list', compact('lists', 'order', 'sort'));
}
public function create()
{
$catList = $this->questionCategoryRepository->getAllData(['id', 'name'], false);
$tagList = $this->tagRepository->getAllData(['id', 'tag'], false);
return view('dashboard.questions.create', ['catList' => $catList, 'tagList' => $tagList]);
}
public function store(QuestionRequest $request)
{
$data = $this->handleArticleDate($request->all());
$this->questionRepository->store($data);
$this->questionCategoryRepository->getById($request->category_id)->increment('question_count');
Auth::user()->increment('question_count');
$this->questionRepository->syncTag(explode(',', $request->tags));
return ajaxReturn(dashboardUrl('/question'));
}
public function edit($id)
{
$catList = $this->questionCategoryRepository->getAllData(['id', 'name'], false);
$tagList = $this->tagRepository->getAllData(['id', 'tag'], false);
$model = $this->questionRepository->getById($id);
$attribute = $this->handleArticleDateToStr($model);
return view('dashboard.questions.edit', ['info' => $model,
'catList' => $catList, 'tagList' => $tagList,
'tags' => array_column($model->tags->toArray(), 'id'),
'attribute' => $attribute
]);
}
public function update(QuestionRequest $request, $id)
{
$oldData = $this->questionRepository->getById($id)->category_id;
if ($oldData != $request->category_id) {
$this->questionCategoryRepository->getById($request->category_id)->increment('question_count');
$this->questionCategoryRepository->getById($oldData)->decrement('question_count');
}
$data = $this->handleArticleDate($request->all());
unset($data['user_id']);
$this->questionRepository->update($id, $data);
$this->questionRepository->syncTag(explode(',', $request->tags));
return ajaxReturn(dashboardUrl('/question'));
}
public function destroy($id)
{
$info = $this->questionRepository->getById($id);
$this->questionCategoryRepository->getById($info->category_id)->decrement('question_count');
Auth::user()->decrement('question_count');
$info->tags()->sync([]);
$this->questionRepository->destroy($id);
return ajaxReturn(dashboardUrl('/question'));
}
}
================================================
FILE: app/Http/Controllers/Dashboard/RolesController.php
================================================
<?php
namespace App\Http\Controllers\Dashboard;
use App\Http\Controllers\Controller;
use App\Http\Requests\StoreRoleRequest;
use App\Http\Requests\UpdateRoleRequest;
use App\Repositories\PermissionRepository;
use App\Repositories\RoleRepository;
use Illuminate\Http\Request;
use Config;
class RolesController extends Controller
{
protected $roleRepository;
protected $permissionRepository;
public function __construct(RoleRepository $roleRepository, PermissionRepository $permissionRepository)
{
$this->roleRepository = $roleRepository;
$this->permissionRepository = $permissionRepository;
}
public function roles()
{
return view('dashboard.roles.role-list');
}
public function ajaxRoles(Request $request)
{
$keywords = $request->keywords;
$where = [];
if ($request->keywords) {
$where[] = ['name', 'like', "%$keywords%"];
}
$list = $this->roleRepository->page($where, Config::get('dashboard.pagesize'), 'created_at', 'desc');
return view('dashboard.roles.ajax-role-list', ['lists' => $list]);
}
public function create()
{
return view('dashboard.roles.create');
}
public function store(StoreRoleRequest $request)
{
$this->roleRepository->store($request->all());
return ajaxReturn(dashboardUrl('/role'));
}
public function edit($id)
{
return view('dashboard.roles.edit', ['info' => $this->roleRepository->getById($id)]);
}
public function update(UpdateRoleRequest $request, $id)
{
$this->roleRepository->update($id, $request->all());
return ajaxReturn(dashboardUrl('/role'));
}
public function giveRolePermissions(Request $request)
{
$permissions = $this->roleRepository->getById($request->id)->cachedPermissions();
return response()->json(
ajaxReturn('', 1, '成功',
roleOrPermissionDataHandle(array_column($permissions->toArray(), 'id'), $this->permissionRepository->getAllData(['id', 'name', 'display_name'])
)));
}
public function giveRolePermissionsStore(Request $request)
{
$ids = [];
if ($request->data) {
$ids = explode(',', $request->data);
}
$this->roleRepository->syncPermission($ids, $request->id);
return ajaxReturn(redirect()->back());
}
public function destroy($id)
{
$permissions = $this->roleRepository->getById($id)->users()->count();
if ($permissions > 0) return ajaxReturnError('', 0, '有用户正在使用该角色,不允许删除');
$this->roleRepository->syncPermission([], $id);
$this->roleRepository->destroy($id);
return ajaxReturn(redirect()->back());
}
}
================================================
FILE: app/Http/Controllers/Dashboard/TagsController.php
================================================
<?php
namespace App\Http\Controllers\Dashboard;
use App\Http\Requests\StoreTagRequest;
use App\Http\Requests\UpdateTagRequest;
use App\Repositories\TagRepository;
use App\Http\Controllers\Controller;
class TagsController extends Controller
{
protected $tagRepository;
public function __construct(TagRepository $tagRepository)
{
$this->tagRepository = $tagRepository;
}
public function tags()
{
$list = $this->tagRepository->getAllData('*', false);
return view('dashboard.tags.tag-list', ['lists' => $list]);
}
public function create()
{
return view('dashboard.tags.create');
}
public function store(StoreTagRequest $request)
{
$this->tagRepository->store($request->all());
return ajaxReturn(dashboardUrl('/tag'));
}
public function edit($id)
{
return view('dashboard.tags.edit', ['info' => $this->tagRepository->getById($id)]);
}
public function update(UpdateTagRequest $request, $id)
{
$this->tagRepository->update($id, $request->all());
return ajaxReturn(dashboardUrl('/tag'));
}
public function destroy($id)
{
$tagArticle = $this->tagRepository->getById($id)->articles()->count();
if ($tagArticle > 0) return ajaxReturnError('', 0, '该标签下有文章,不允许删除');
// if ($tagArticle > 0) return ajaxReturnError('', 0, '该标签下有问题,不允许删除'); // TODO
$this->tagRepository->destroy($id);
return ajaxReturn(dashboardUrl('/tag'));
}
}
================================================
FILE: app/Http/Controllers/Dashboard/Traits/ArticleHelper.php
================================================
<?php
namespace App\Http\Controllers\Dashboard\Traits;
use Auth;
use Carbon\Carbon;
trait ArticleHelper
{
protected function handleArticleDate($data)
{
$attribute['is_excellent'] = $attribute['is_hot'] = $attribute['only_owner_can_see'] = $attribute['is_draft'] = 'no';
$attribute['user_id'] = Auth::id();
if (strstr($data['attribute'], '1')) $attribute['is_excellent'] = 'yes';
if (strstr($data['attribute'], '2')) $attribute['is_hot'] = 'yes';
if (strstr($data['attribute'], '3')) $attribute['only_owner_can_see'] = 'yes';
if (strstr($data['attribute'], '4')) $attribute['is_draft'] = 'yes';
$attribute['published_at'] = isset($data['published_at']) ?: Carbon::now();
$attribute['weight'] = isset($data['weight']) ?: 50;
return array_merge($data, $attribute);
}
protected function handleArticleDateToStr($model)
{
$attribute = [];
if ($model->is_excellent == 'yes') $attribute[] = '1';
if ($model->is_hot == 'yes') $attribute[] = '2';
if ($model->only_owner_can_see == 'yes') $attribute[] = '3';
if ($model->is_draft == 'yes') $attribute[] = '4';
if (count($attribute) > 0) {
return implode(',', $attribute);
} else {
return '';
}
}
}
================================================
FILE: app/Http/Controllers/Dashboard/UsersController.php
================================================
<?php
namespace App\Http\Controllers\Dashboard;
use App\Http\Requests\StoreUserRequest;
use App\Http\Requests\UpdateUserRequest;
use App\Repositories\RoleRepository;
use App\Repositories\UserRepository;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Config;
use Auth;
class UsersController extends Controller
{
protected $userRepository;
protected $roleRepository;
public function __construct(UserRepository $userRepository, RoleRepository $roleRepository)
{
$this->userRepository = $userRepository;
$this->roleRepository = $roleRepository;
}
public function users()
{
return view('dashboard.users.user-list');
}
public function ajaxUsers(Request $request)
{
$keywords = $request->keywords;
$where = [];
if ($request->keywords) {
$where['k'][] = ['user_name', 'like', "%$keywords%"];
$where['k2'][] = ['email', 'like', "%$keywords%"];
}
$list = $this->userRepository->page($where, Config::get('dashboard.pagesize'));
return view('dashboard.users.ajax-user-list', ['lists' => $list]);
}
public function create()
{
return view('dashboard.users.create');
}
public function store(StoreUserRequest $request)
{
$data = array_merge($request->all(), [
'avatar' => '/assets/dashboard/images/head_default.gif',
'register_source' => 'admin',
'password' => bcrypt($request->password),
'status' => 1
]);
$this->userRepository->store($data);
return ajaxReturn(dashboardUrl('/user'));
}
public function edit($id)
{
return view('dashboard.users.edit', ['info' => $this->userRepository->getById($id)]);
}
public function update(UpdateUserRequest $request, $id)
{
$data = $request->all();
if ($request->password) {
$data = array_merge($data, [
'password' => bcrypt($request->password)
]);
} else {
unset($data['password']);
}
$this->userRepository->update($id, $data);
return ajaxReturn(dashboardUrl('/user'));
}
public function destroy($id)
{
if (Auth::user()->id == $id) {
return ajaxReturnError('', 0, '您不能删除您自己');
}
$user = $this->userRepository->getById($id);
$article = $user->articles()->count();
$question = $user->questions()->count();
if( $article > 0 || $question > 0) return ajaxReturnError('', 0, '用户发表过文章或问题,不允许删除');
$this->userRepository->syncRole([], $id);
$this->userRepository->destroy($id);
return ajaxReturn(redirect()->back());
}
public function giveUserRoles(Request $request)
{
$roles = $this->userRepository->getById($request->id)->cachedRoles();
return response()->json(
ajaxReturn('', 1, '成功',
roleOrPermissionDataHandle(array_column($roles->toArray(), 'id'), $this->roleRepository->getAllData(['id', 'name', 'display_name'])
)));
}
public function giveUserRolesStore(Request $request)
{
$ids = [];
if ($request->data) {
$ids = explode(',', $request->data);
}
$this->userRepository->syncRole($ids, $request->id);
return ajaxReturn(redirect()->back());
}
}
================================================
FILE: app/Http/Controllers/HomeController.php
================================================
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('home');
}
}
================================================
FILE: app/Http/Controllers/NotificationsController.php
================================================
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Auth;
class NotificationsController extends Controller
{
public function unread()
{
return redirect()->route('notifications.index');
}
public function index()
{
$user = Auth::user();
$user->unreadNotifications->markAsRead();
$notifications = $user->notifications;
return view('messages.notifications', compact('notifications'));
}
public function messages()
{
return view('messages.message');
}
}
================================================
FILE: app/Http/Controllers/PagesController.php
================================================
<?php
namespace App\Http\Controllers;
use App\Models\About;
use App\Models\Article;
use App\Models\Question;
use App\Models\User;
use App\Repositories\ArticleRepository;
use App\Repositories\QuestionRepository;
use App\Repositories\TagRepository;
use Illuminate\Http\Request;
class PagesController extends Controller
{
public function home(Article $article, Question $question)
{
$tenExcellentArticles = $article->getArticlesWithFilter('excellent', 10);
$tenExcellentQuestions = $question->getArticlesWithFilter('excellent', 10);
return view('pages.home', compact('tenExcellentArticles', 'tenExcellentQuestions'));
}
public function search(Request $request)
{
$query = $request->q;
$article_search = Article::search($query, null, true)->withoutDraft()->WithoutPrivate()->recent()->weightAsc()->paginate(20);
$question_search = Question::search($query, null, true)->withoutDraft()->WithoutPrivate()->recent()->weightAsc()->paginate(20);
return view('pages.search', compact('article_search', 'question_search', 'query'));
}
public function about(ArticleRepository $articleRepository, QuestionRepository $questionRepository, TagRepository $tagRepository)
{
$info = About::where('is_enabled', 'yes')->first() ;
$recentArticles = $articleRepository->getThisModel()->withoutDraft()->withoutPrivate()->orderBy('created_at', 'desc')->select('id', 'title', 'slug')->paginate(6);
$recentQuestions = $questionRepository->getThisModel()->withoutDraft()->withoutPrivate()->orderBy('created_at', 'desc')->select('id', 'title', 'slug')->paginate(6);
$tags = $tagRepository->getAllTagWithCount();
return view('pages.about', compact('info', 'recentArticles', 'recentQuestions', 'tags'));
}
}
================================================
FILE: app/Http/Controllers/QuestionsController.php
================================================
<?php
namespace App\Http\Controllers;
use App\Http\Requests\ImageUploadRequest;
use App\Http\Requests\QuestionRequest;
use App\Models\Question;
use App\Repositories\ArticleRepository;
use App\Repositories\QuestionCategoryRepository;
use App\Repositories\QuestionRepository;
use App\Repositories\TagRepository;
use App\Tools\FileManager\BaseManager;
use Codehaoshi\Selectors\QuestionSelector;
use Auth;
class QuestionsController extends Controller
{
protected $questionCategoryRepository;
protected $articleRepository;
protected $questionRepository;
protected $tagRepository;
public function __construct(QuestionCategoryRepository $questionCategoryRepository, QuestionRepository $questionRepository, TagRepository $tagRepository, ArticleRepository $articleRepository)
{
$this->questionCategoryRepository = $questionCategoryRepository;
$this->questionRepository = $questionRepository;
$this->tagRepository = $tagRepository;
$this->articleRepository = $articleRepository;
}
/**
* Show article-info page
* @param $slug
* @param Article $articleModel
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function show($slug, Question $questionModel)
{
$question = $this->questionRepository->getQuestionInfoBySlug($slug);
//sdfsadf
if ($question->is_draft == 'yes' || $question->only_owner_can_see == 'yes') {
$this->authorize('showDraft', $question);
}
$question->increment('view_count');
$recentQuestions = $questionModel->withoutDraft()->withoutPrivate()->where('id', '<>', $question['id'])->orderBy('created_at', 'desc')->select('id', 'title', 'slug')->paginate(6);
$prevAndNext = app(QuestionSelector::class)->questionInfoWithPrevAndNext($question->id);
return view('questions.show', ['info' => $question,
'recentQuestions' => $recentQuestions,
'prev' => $prevAndNext['prev'],
'next' => $prevAndNext['next']
]);
}
/**
* Get article list by category
*
* @param $slug
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function index($slug)
{
$category = $this->questionCategoryRepository->getInfoBySlug($slug);
$questions = $this->questionRepository->getThisModel()->getArticlesWithFilter('category', 20, $category->id);
$hotQuestions = $this->questionRepository->getThisModel()->getArticlesWithFilter('hot', 5);
$recentQuestions = $this->questionRepository->getThisModel()->getArticlesWithFilter('recent', 5);
$tags = $this->tagRepository->getAllTagWithCount();
return view('questions.question-list', compact('questions', 'category', 'hotQuestions', 'recentQuestions', 'tags'));
}
/**
* Get All articles
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function allQuestions()
{
$questions = $this->questionRepository->getThisModel()->getArticlesWithFilter('recent', 20);
return view('questions.all-questions', compact('questions'));
}
public function create()
{
$recentArticles = $this->articleRepository->getThisModel()->getArticlesWithFilter('recent', 5);
$recentQuestions = $this->questionRepository->getThisModel()->getArticlesWithFilter('recent', 5);
$tags = $this->tagRepository->getAllTagWithCount();
$catList = $this->questionCategoryRepository->getAllData(['id', 'name'], false);
$tagList = $this->tagRepository->getAllData(['id', 'tag'], false);
return view('questions.create', compact('tagList', 'catList', 'recentQuestions', 'recentArticles', 'tags'));
}
public function store(QuestionRequest $request)
{
$data = array_merge($request->all(), ['user_id' => Auth::id()]);
$res =$this->questionRepository->store($data);
$this->questionCategoryRepository->getById($request->category_id)->increment('question_count');
Auth::user()->increment('question_count');
$this->questionRepository->syncTag(explode(',', $request->tags));
flash('info', '问题发布成功');
return redirect()->route('question.show', ['slug' => $res->slug]);
}
public function uploadImage(ImageUploadRequest $request)
{
if ($file = $request->file('file')) {
try {
$upload_status = app(BaseManager::class)->storeUploadImgByConfigPath($file, 'front_images');
} catch (\Exception $exception) {
return ['error' => $exception->getMessage()];
}
$data['filename'] = $upload_status['url'];
} else {
$data['error'] = 'Error while uploading file';
}
return $data;
}
public function edit($id)
{
$recentArticles = $this->articleRepository->getThisModel()->getArticlesWithFilter('recent', 5);
$recentQuestions = $this->questionRepository->getThisModel()->getArticlesWithFilter('recent', 5);
$tags = $this->tagRepository->getAllTagWithCount();
$catList = $this->questionCategoryRepository->getAllData(['id', 'name'], false);
$tagList = $this->tagRepository->getAllData(['id', 'tag'], false);
$info = $this->questionRepository->getById($id);
$infoTag = implode(',', array_column($info->tags->toArray(), 'id'));
return view('questions.edit',compact('info','infoTag', 'catList', 'tagList', 'tags', 'recentArticles', 'recentQuestions'));
}
public function update(QuestionRequest $request, $id)
{
$oldData = $this->questionRepository->getById($id)->category_id;
if ($oldData != $request->category_id) {
$this->questionCategoryRepository->getById($request->category_id)->increment('question_count');
$this->questionCategoryRepository->getById($oldData)->decrement('question_count');
}
$data = $request->only('title', 'category_id', 'description', 'content', 'tags', 'is_draft', 'slug');
$res = $this->questionRepository->update($id, $data);
$this->questionRepository->syncTag(explode(',', $request->tags));
flash('info', '问题更新成功');
return redirect()->route('question.show', ['slug' => $res->slug]);
}
}
================================================
FILE: app/Http/Controllers/TagController.php
================================================
<?php
namespace App\Http\Controllers;
use App\Repositories\ArticleRepository;
use App\Repositories\TagRepository;
class TagController extends Controller
{
protected $tagRepository;
protected $articleRepository;
public function __construct(ArticleRepository $articleRepository, TagRepository $tagRepository)
{
$this->tagRepository = $tagRepository;
$this->articleRepository = $articleRepository;
}
public function show($slug, $type = null)
{
$tag = $this->tagRepository->getTagInfoBySlug($slug);
if (!$tag) abort(404);
$articles = $tag->articles->take(15);
$questions = $tag->questions->take(15);
if($type) return view('tags.show-question', compact('articles', 'tag', 'questions'));
return view('tags.show-article', compact('articles', 'tag' ,'questions'));
}
}
================================================
FILE: app/Http/Controllers/UserController.php
================================================
<?php
namespace App\Http\Controllers;
use App\Http\Requests\ResetPasswordRequest;
use App\Models\User;
use App\Repositories\UserRepository;
use Illuminate\Http\Request;
class UserController extends Controller
{
protected $userRepository;
public function __construct(UserRepository $userRepository)
{
$this->userRepository = $userRepository;
}
/**
* To check is current user has the permission to edit the infomation
*
* @param $id
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function edit($id)
{
$user = $this->userRepository->getById($id);
$this->authorize('update', $user); // Use UserPolicy's update function
return view('users.edit', ['info' => $user]);
}
/**
* @param $id
* @param UpdateUserRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function update($id, Request $request)
{
$user = $this->userRepository->getById($id);
$this->authorize('update', $user);
try {
$this->userRepository->save($user, $request->except(['user_name', 'email', '_token', '']));
flash('info', '操作成功');
} catch (\Exception $e) {
flash('error', $e);
}
return redirect()->back();
}
/**
* @param $id
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function editPassword($id)
{
$user = $this->userRepository->getById($id);
$this->authorize('update', $user);
return view('users.edit-password', ['info' => $user]);
}
/**
* @param $id
* @param ResetPasswordRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function updatePassword($id, ResetPasswordRequest $request)
{
$user = $this->userRepository->getById($id);
$this->authorize('update', $user);
$this->userRepository->changePassword($user, $request->password);
flash('info', '密码修改成功!');
return redirect()->back();
}
public function editEmail($id)
{
return view('users.edit-email');
}
}
================================================
FILE: app/Http/Kernel.php
================================================
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
// Self add pjax
\Spatie\Pjax\Middleware\FilterIfPjax::class,
];
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
// Self Add Webs
\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
// Self Add RouteMiddleware
'role' => \Ucer\Entrust\Middlewares\EntrustRole::class,
'permission' => \Ucer\Entrust\Middlewares\EntrustPermission::class,
'ability' => \Ucer\Entrust\Middlewares\EntrustAbility::class,
'admin' => \App\Http\Middleware\MustBeAdmin::class
];
}
================================================
FILE: app/Http/Middleware/EncryptCookies.php
================================================
<?php
namespace App\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as BaseEncrypter;
class EncryptCookies extends BaseEncrypter
{
/**
* The names of the cookies that should not be encrypted.
*
* @var array
*/
protected $except = [
//
];
}
================================================
FILE: app/Http/Middleware/MustBeAdmin.php
================================================
<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
class MustBeAdmin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// Determine whether the current user is an administrator
if (Auth::guest() || (Auth::user()->is_admin != 'yes')) {
abort(403);
}
return $next($request);
}
}
================================================
FILE: app/Http/Middleware/RedirectIfAuthenticated.php
================================================
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/');
}
return $next($request);
}
}
================================================
FILE: app/Http/Middleware/TrimStrings.php
================================================
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\TrimStrings as BaseTrimmer;
class TrimStrings extends BaseTrimmer
{
/**
* The names of the attributes that should not be trimmed.
*
* @var array
*/
protected $except = [
'password',
'password_confirmation',
];
}
================================================
FILE: app/Http/Middleware/VerifyCsrfToken.php
================================================
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'file/upload'
];
}
================================================
FILE: app/Http/Requests/ArticleRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ArticleRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'title' => 'required|min:3',
'category_id' => 'required',
'description' => 'required',
'content' => 'required',
];
}
}
================================================
FILE: app/Http/Requests/ImageUploadRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ImageUploadRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'image' => 'image|mimes:jpeg,jpg,png,gif',
'file' => 'image|mimes:jpeg,jpg,png,gif',
'myfile' => 'image|mimes:jpeg,jpg,png,gif',
];
}
}
================================================
FILE: app/Http/Requests/QuestionRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class QuestionRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'title' => 'required|min:3',
'category_id' => 'required',
'description' => 'required',
'content' => 'required',
];
}
}
================================================
FILE: app/Http/Requests/ResetPasswordRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ResetPasswordRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'password' => 'required|confirmed|min:6',
];
}
}
================================================
FILE: app/Http/Requests/StoreArticleCategoryRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreArticleCategoryRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required',
'slug' => 'required|unique:article_categories',
'image_url' => 'required',
'description' => 'required',
];
}
}
================================================
FILE: app/Http/Requests/StorePermissionRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StorePermissionRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|unique:permissions',
'description' => 'required',
];
}
}
================================================
FILE: app/Http/Requests/StoreQuestionCategoryRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreQuestionCategoryRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required',
'slug' => 'required|unique:question_categories',
'image_url' => 'required',
'description' => 'required',
];
}
}
================================================
FILE: app/Http/Requests/StoreReplyOrCommentRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreReplyOrCommentRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'body' => 'required|min:2',
];
}
}
================================================
FILE: app/Http/Requests/StoreRoleRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreRoleRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|unique:roles',
'description' => 'required',
];
}
}
================================================
FILE: app/Http/Requests/StoreTagRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreTagRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'tag' => 'required',
'slug' => 'required|unique:tags',
'description' => 'required',
];
}
}
================================================
FILE: app/Http/Requests/StoreUserRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreUserRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'user_name' => 'alpha_num|required|unique:users',
'email' => 'email|required|unique:users',
'password' => 'required|confirmed|min:6',
];
}
}
================================================
FILE: app/Http/Requests/UpdateArticleCategoryRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class UpdateArticleCategoryRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
$id = $this->route('id');
return [
'name' => 'required',
'slug' => 'required', Rule::unique('article_categories')->ignore($id),
'image_url' => 'required',
'description' => 'required',
];
}
}
================================================
FILE: app/Http/Requests/UpdatePermissionRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class UpdatePermissionRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
$id = $this->route('id');
return [
'name' => 'required', Rule::unique('permissions')->ignore($id),
'description' => 'required',
];
}
}
================================================
FILE: app/Http/Requests/UpdateQuestionCategoryRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class UpdateQuestionCategoryRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
$id = $this->route('id');
return [
'name' => 'required',
'slug' => 'required', Rule::unique('question_categories')->ignore($id),
'image_url' => 'required',
'description' => 'required',
];
}
}
================================================
FILE: app/Http/Requests/UpdateRoleRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class UpdateRoleRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
$id = $this->route('id');
return [
'name' => 'required', Rule::unique('roles')->ignore($id),
'description' => 'required',
];
}
}
================================================
FILE: app/Http/Requests/UpdateTagRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class UpdateTagRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
$id = $this->route('id');
return [
'tag' => 'required',
'slug' => 'required', Rule::unique('tags')->ignore($id),
'description' => 'required',
];
}
}
================================================
FILE: app/Http/Requests/UpdateUserRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class UpdateUserRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
$id = $this->route('id');
return [
'user_name' => 'alpha_num|required', Rule::unique('users')->ignore($id),
'email' => 'email|required', Rule::unique('users')->ignore($id),
];
}
}
================================================
FILE: app/Models/About.php
================================================
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Tools\Markdowner;
use Illuminate\Database\Eloquent\SoftDeletes;
class About extends Model
{
use SoftDeletes;
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
protected $fillable = ['title', 'content', 'is_enabled'];
/**
* @param $value
*/
public function setContentAttribute($value)
{
$data = [
'raw' => $value,
'html' => (new Markdowner)->convertMarkdownToHtml($value)
];
$this->attributes['content'] = json_encode($data);
}
}
================================================
FILE: app/Models/Activity.php
================================================
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Activity extends Model
{
protected $fillable = ['causer', 'indentifier', 'type', 'data', 'user_id'];
public function user()
{
return $this->belongsTo(User::class);
}
public function scopeRecent($query)
{
return $query->orderBy('id', 'desc');
}
public function getDataAttribute($value)
{
return unserialize($value);
}
}
================================================
FILE: app/Models/Article.php
================================================
<?php
namespace App\Models;
use App\Models\Traits\ArticleFilterable;
use Illuminate\Database\Eloquent\Model;
use App\Tools\Markdowner;
use Illuminate\Database\Eloquent\SoftDeletes;
use Nicolaslopezj\Searchable\SearchableTrait;
class Article extends Model
{
use SoftDeletes, ArticleFilterable, SearchableTrait;
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
protected $fillable = [
'title', 'category_id', 'user_id',
'weight', 'is_excellent', 'is_hot', 'only_owner_can_see',
'is_draft', 'slug', 'content', 'description', 'published_at'
];
/**
* Searchable rules.
*
* @var array
*/
protected $searchable = [
/**
* Columns and their priority in search results.
* Columns with higher values are more important.
* Columns with equal values have equal importance.
*
* @var array
*/
'columns' => [
'articles.slug' => 5,
'articles.title' => 5,
'articles.content' => 5,
'articles.description' =>5,
],
];
/**
* @return mixed
*/
public function category()
{
return $this->belongsTo(ArticleCategory::class);
}
public function user()
{
return $this->belongsTo(User::class);
}
/**
* Get the category for the blog article.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function tags()
{
return $this->morphToMany(Tag::class, 'taggable');
}
/**
* Set the title and the readable slug.
*
* @param $value
*/
public function setTitleAttribute($value)
{
$this->attributes['title'] = $value;
if (!config('services.youdao.appKey') || !config('services.youdao.appSecret')) {
$this->setUniqueSlug($value, str_random(7));
} else {
$this->setUniqueSlug(translug($value), '');
}
}
/**
* Set the unique slug.
*
* @param $value
* @param $extra
*/
public function setUniqueSlug($value, $extra)
{
$slug = str_slug($value . '-' . $extra);
if (static::whereSlug($slug)->exists()) {
$this->setUniqueSlug($slug, (int)$extra + 1);
return;
}
$this->attributes['slug'] = $slug;
}
/**
* @param $value
*/
public function setContentAttribute($value)
{
$data = [
'raw' => $value,
'html' => (new Markdowner)->convertMarkdownToHtml($value)
];
$this->attributes['content'] = json_encode($data);
}
public function getCommentsWithLimit($limit = 30, $order = 'created_at')
{
$pageName = 'page';
// Default display the latest reply
$latest_page = is_null(request($pageName)) ? ceil($this->comment_count / $limit) : 1;
$query = $this->comments()->with('user');
$query = ($order == 'vote_count') ? $query->orderBy('vote_count', 'desc') : $query->orderBy('created_at', 'asc');
return $query->paginate($limit, ['*'], $pageName, $latest_page);
}
public function comments()
{
return $this->hasMany(Comment::class);
}
public function votes()
{
return $this->morphMany(Vote::class, 'votable');
}
}
================================================
FILE: app/Models/ArticleCategory.php
================================================
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class ArticleCategory extends Model
{
use SoftDeletes;
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
protected $fillable = [
'name', 'slug', 'image_url', 'weight', 'description', 'style'
];
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function articles()
{
return $this->hasMany(Article::class, 'category_id');
}
}
================================================
FILE: app/Models/Comment.php
================================================
<?php
namespace App\Models;
use App\Models\Traits\BaseFilterable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Notifications\Notifiable;
class Comment extends Model
{
use SoftDeletes,BaseFilterable,Notifiable;
protected $fillable = [
'body',
'user_id',
'article_id',
'body_original',
];
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
public function user()
{
return $this->belongsTo(User::class, 'user_id');
}
public function article()
{
return $this->belongsTo(Article::class);
}
}
================================================
FILE: app/Models/Follower.php
================================================
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Follower extends Model
{
protected $fillable = ['follower_id', 'followed_id'];
}
================================================
FILE: app/Models/Link.php
================================================
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Link extends Model
{
protected $fillable = ['title', 'link', 'type', 'is_enabled'];
}
================================================
FILE: app/Models/Permission.php
================================================
<?php
namespace App\Models;
use Ucer\Entrust\EntrustPermission;
class Permission extends EntrustPermission
{
protected $fillable = ['name', 'display_name', 'description'];
public function saveFunction()
{
// $this->name = 'create-post';
// $this->display_name = 'Create Posts'; // optional
//// Allow a user to...
// $this->description = 'create new blog posts'; // optional
// $this->save();
//
// $this->name = 'edit-user';
// $this->display_name = 'Edit Users'; // optional
//// Allow a user to...
// $this->description = 'edit existing users'; // optional
// $this->save();
return 'success';
}
}
================================================
FILE: app/Models/Question.php
================================================
<?php
namespace App\Models;
use App\Models\Traits\ArticleFilterable;
use App\Tools\Markdowner;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Nicolaslopezj\Searchable\SearchableTrait;
class Question extends Model
{
use SoftDeletes, ArticleFilterable,SearchableTrait;
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
protected $fillable = [
'title', 'category_id', 'user_id',
'weight', 'is_excellent', 'is_hot', 'only_owner_can_see',
'is_draft', 'slug', 'content', 'description', 'published_at'
];
/**
* Searchable rules.
*
* @var array
*/
protected $searchable = [
/**
* Columns and their priority in search results.
* Columns with higher values are more important.
* Columns with equal values have equal importance.
*
* @var array
*/
'columns' => [
'questions.slug' => 5,
'questions.title' => 3,
'questions.content' => 1,
'questions.description' =>2,
],
];
/**
* @return mixed
*/
public function category()
{
return $this->belongsTo(QuestionCategory::class);
}
public function replies()
{
return $this->hasMany(Reply::class);
}
public function user()
{
return $this->belongsTo(User::class);
}
/**
* Get the category for the blog article.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function tags()
{
return $this->morphToMany(Tag::class, 'taggable');
}
public function votes()
{
return $this->morphMany(Vote::class, 'votable');
}
/**
* Set the title and the readable slug.
*
* @param $value
*/
public function setTitleAttribute($value)
{
$this->attributes['title'] = $value;
if (!config('services.youdao.appKey') || !config('services.youdao.appSecret')) {
$this->setUniqueSlug($value, str_random(7));
} else {
$this->setUniqueSlug(translug($value), '');
}
}
/**
* Set the unique slug.
*
* @param $value
* @param $extra
*/
public function setUniqueSlug($value, $extra)
{
$slug = str_slug($value . '-' . $extra);
if (static::whereSlug($slug)->exists()) {
$this->setUniqueSlug($slug, (int)$extra + 1);
return;
}
$this->attributes['slug'] = $slug;
}
/**
* @param $value
*/
public function setContentAttribute($value)
{
$data = [
'raw' => $value,
'html' => (new Markdowner)->convertMarkdownToHtml($value)
];
$this->attributes['content'] = json_encode($data);
}
public function getRepliesWithLimit($limit = 30, $order = 'created_at')
{
$pageName = 'page';
// Default display the latest reply
$latest_page = is_null(request($pageName)) ? ceil($this->reply_count / $limit) : 1;
$query = $this->replies()->with('user');
$query = ($order == 'vote_count') ? $query->orderBy('vote_count', 'desc') : $query->orderBy('created_at', 'asc');
return $query->paginate($limit, ['*'], $pageName, $latest_page);
}
}
================================================
FILE: app/Models/QuestionCategory.php
================================================
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class QuestionCategory extends Model
{
use SoftDeletes;
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
protected $fillable = [
'name', 'slug', 'image_url', 'weight', 'description', 'style'
];
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function questions()
{
return $this->hasMany(Question::class, 'category_id');
}
}
================================================
FILE: app/Models/Reply.php
================================================
<?php
namespace App\Models;
use App\Models\Traits\BaseFilterable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Notifications\Notifiable;
class Reply extends Model
{
use SoftDeletes,BaseFilterable,Notifiable;
protected $fillable = [
'body',
'user_id',
'question_id',
'body_original',
];
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
public function user()
{
return $this->belongsTo(User::class, 'user_id');
}
public function question()
{
return $this->belongsTo(Question::class);
}
}
================================================
FILE: app/Models/Role.php
================================================
<?php
namespace App\Models;
use Ucer\Entrust\EntrustRole;
use Ucer\Entrust\Traits\EntrustRoleTrait;
class Role extends EntrustRole
{
use EntrustRoleTrait;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['name', 'display_name', 'description'];
public function saveFunction()
{
// $this->name = 'owner';
// $this->display_name = 'Project Owner'; // optional
// $this->description = 'User is the owner of a given project'; // optional
// $this->save();
// $this->name = 'admin';
// $this->display_name = 'User Administrator'; // optional
// $this->description = 'User is allowed to manage and edit other users'; // optional
// $this->save();
$result = 'success';
$role = $this->findOrFail(1);
// $role->attachPermission(1); // 为角色 1 添加1权限
// $role->attachPermissions(['1','2']);
// $role->detachPermission(1);
// $role->detachPermissions(['1','2']);
// $result = $role->hasPermission('edit-user');
return $result;
}
}
================================================
FILE: app/Models/SiteStatus.php
================================================
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class SiteStatus extends Model
{
public static function newImage()
{
}
}
================================================
FILE: app/Models/Tag.php
================================================
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Tag extends Model
{
use SoftDeletes;
/**
* The attributes that should be mutated to dates.
*
* @var array
*/
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'tag', 'slug', 'description', 'style'
];
/**
* Get all of the articles that are assigned this tag.
*
* @return \Illuminate\Database\Eloquent\Relations\MorpheByMany
*/
public function articles()
{
return $this->morphedByMany(Article::class, 'taggable');
}
public function questions()
{
return $this->morphedByMany(Question::class, 'taggable');
}
}
================================================
FILE: app/Models/Traits/ArticleFilterable.php
================================================
<?php
namespace App\Models\Traits;
trait ArticleFilterable
{
public function getArticlesWithFilter($filter, $limit = 5, $category_id = 0)
{
$filter = $this->getArticleFilter($filter);
return $this->applyFilter($filter, $category_id)
->with('user', 'category')
->paginate($limit);
}
public function getArticlesWithWhoFilter($filter, $limit = 5, $user_id = 0)
{
$filter = $this->getArticleFilter($filter);
return $this->applyFilter($filter,0)
->where('user_id', '=', $user_id)
->paginate($limit);
}
protected function getArticleFilter($request_filter)
{
$filters = ['hot', 'recent', 'excellent', 'category'];
if (in_array($request_filter, $filters)) {
return $request_filter;
}
return 'default';
}
public function applyFilter($filter, $category_id)
{
$query = $this->withoutDraft()->WithoutPrivate();
switch ($filter) {
case 'hot' :
return $query->weightAsc()->hot();
break;
case 'recent':
return $query->recent()->weightAsc();
break;
case 'excellent':
return $query->excellent()->weightAsc();
break;
case 'category':
return $query->category($category_id)->weightAsc()->recent();
break;
case 'default':
return $query->weightAsc()->recent();
break;
}
}
public function scopeVote($query, $sort="asc")
{
return $query->orderBy('vote_count', $sort);
}
public function scopeRecent($query)
{
return $query->orderBy('created_at', 'desc');
}
public function scopeWeightAsc($query)
{
return $query->orderBy('weight', 'asc');
}
public function scopeHot($query)
{
return $query->where('is_hot', 'yes');
}
public function scopeExcellent($query)
{
return $query->where('is_excellent', '=', 'yes');
}
public function scopeWithoutDraft($query)
{
return $query->where('is_draft', '=', 'no');
}
public function scopeWithoutPrivate($query)
{
return $query->where('only_owner_can_see', '=', 'no');
}
public function scopeCategory($query, $category_id)
{
return $query->where('category_id', '=', $category_id);
}
}
================================================
FILE: app/Models/Traits/BaseFilterable.php
================================================
<?php
namespace App\Models\Traits;
trait BaseFilterable
{
public function scopeRecent($query)
{
return $query->orderBy('created_at', 'desc');
}
}
================================================
FILE: app/Models/Traits/FollowerHelper.php
================================================
<?php
namespace App\Models\Traits;
trait FollowerHelper
{
/**
* Check if user is followed by given user.
*
* @param $user
*
* @return bool
*/
public function isFollowedBy($user)
{
return $this->followers->contains($user);
}
/**
* Check if user is following given user.
*
* @param $user
*
* @return bool
*/
public function isFollowing($user)
{
return $this->followings->contains($user);
}
/**
* Return user followers.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function followers()
{
return $this->belongsToMany(__CLASS__, 'followers', 'follow_id', 'user_id')->withTimestamps();
}
/**
* Return user following users.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function followings()
{
return $this->belongsToMany(__CLASS__, 'followers', 'user_id', 'follow_id')->withTimestamps();// 用户1正在关注哪些用户
}
/**
* Follow a user or users.
*
* @param int|array $user
*
* @return int
*/
public function follow($user)
{
return $this->followings()->sync((array)$user, false);
}
/**
* Unfollow a user or users.
*
* @param int|array $user
*
* @return int
*/
public function unfollow($user)
{
return $this->followings()->detach((array)$user);
}
}
================================================
FILE: app/Models/Traits/UserAvatorHelper.php
================================================
<?php
namespace App\Models\Traits;
use GuzzleHttp\Client;
trait UserAvatorHelper
{
public function cacheAvatar()
{
$uploadAvatarPath = '/'.env('UPLOAD_PATH', 'uploads').'/'.config('codehaoshi.uploadsPath.avatar');
// Download Image
$guzzle = new Client();
$response = $guzzle->get($this->image_url);
// Get next
$content_type = explode('/', $response->getHeader('Content-Type')[0]);
$ext = array_pop($content_type);
$avatar_name = $this->id . '_' . time() . '.' . $ext;
$base_path = public_path($uploadAvatarPath);
$save_path = $base_path. $avatar_name;
if (!file_exists($base_path)) {
mkdir($base_path, 0777, true);
}
//Save File
$content = $response->getBody()->getContents();
file_put_contents($save_path, $content);
//Delete old file
if ($this->avatar) {
@unlink($base_path. $this->avatar);
}
//Save to database
$this->avatar = $uploadAvatarPath.$avatar_name;
$this->save();
}
}
================================================
FILE: app/Models/User.php
================================================
<?php
namespace App\Models;
use App\Models\Traits\FollowerHelper;
use App\Models\Traits\UserAvatorHelper;
use App\Tools\UserMailer;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Passport\HasApiTokens;
use Ucer\Entrust\Traits\EntrustUserTrait;
class User extends Authenticatable
{
use HasApiTokens, Notifiable, UserAvatorHelper,FollowerHelper;
use EntrustUserTrait, SoftDeletes;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'user_name', 'email',
'city',
'introduction',
'password', 'image_url',
'github_id', 'github_name',
'nickname', 'register_source',
'status', 'last_actived_at', 'is_admin',
'company', 'personal_website',
'avatar'
];
/**
* 需要被转换成日期的属性。
*
* @var array
*/
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
public function activities()
{
return $this->hasMany(Activity::class);
}
public function articles()
{
return $this->hasMany(Article::class);
}
public function questions()
{
return $this->hasMany(Question::class);
}
/**
* send password reset email to user's email base on token.
*
* @param string $token
*/
public function sendPasswordResetNotification($token)
{
(new UserMailer)->passwordReset($this->email, $token);
}
public function saveFunction()
{
$user = $this->findOrFail(6);
// $user->attachRole(6); // 为用户 1 添加两1身份
$user->attachRoles(['1', '2']); // 为用户 1 添加两个身份
// $user->detachRole(1); // 移除用户1的1身份
// $user->detachRoles(); // 移除用户1的所有身份
$result = 'success';
// $result = $user->hasRole(['admin','owner']); // 不加第二个参数,只匹配数组中的第一个身份:w
// $result = $user->hasRole(['admin','owner','hellow'],true); // 加 ture 参数 后要完全匹配
// $result = $user->hasRole('admin');
// $result = $user->can('edit-user');
// $result = $user->ability(array('admin', 'owner'), array('create-post', 'edit-user'));
return $result;
}
}
================================================
FILE: app/Models/Vote.php
================================================
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Vote extends Model
{
protected $fillable = ['user_id'];
public function user()
{
return $this->belongsTo(User::class);
}
public function scopeByWhom($query, $user_id)
{
return $query->where('user_id', '=', $user_id);
}
}
================================================
FILE: app/Notifications/NewUserFollowNotification.php
================================================
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Auth;
class NewUserFollowNotification extends Notification implements ShouldQueue
{
use Queueable;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['database'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->line('The introduction to the notification.')
->action('Notification Action', url('/'))
->line('Thank you for using our application!');
}
/**
* @param $notifiable
* @return array
*/
public function toDatabase($notifiable)//注意方法的命名格式
{
return [
'user_name' => Auth::user()->user_name,
];
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}
================================================
FILE: app/Notifications/ReceivedComment.php
================================================
<?php
namespace App\Notifications;
use App\Models\Article;
use App\Models\Comment;
use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
class ReceivedComment extends Notification implements ShouldQueue
{
use Queueable;
protected $comment;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct(Comment $comment)
{
$this->comment = $comment;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['database'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
$comment = $this->comment;
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
$comment = $this->comment;
$article = Article::findOrFail($comment->article_id);
$user = User::findOrFail($comment->user_id);
return [
'user_id' => $comment->user_id,
'user_name' => $user->user_name,
'article_id' => $comment->article_id,
'article_title' => $article->title,
'article_slug' => $article->slug,
'comment_content' => $comment->body,
];
}
}
================================================
FILE: app/Notifications/ReceivedReply.php
================================================
<?php
namespace App\Notifications;
use App\Models\Commentdd;
use App\Models\Question;
use App\Models\Reply;
use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
class ReceivedReply extends Notification implements ShouldQueue
{
use Queueable;
protected $reply;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct(Reply $reply)
{
$this->reply = $reply;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['database'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
$comment = $this->reply;
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
$comment = $this->reply;
$question = Question::findOrFail($comment->question_id);
$user = User::findOrFail($comment->user_id);
return [
'user_id' => $comment->user_id,
'user_name' => $user->user_name,
'question_id' => $comment->question_id,
'question_title' => $question->title,
'question_slug' => $question->slug,
'comment_content' => $comment->body,
];
}
}
================================================
FILE: app/Notifications/UserVoteArticle.php
================================================
<?php
namespace App\Notifications;
use App\Models\Article;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Auth;
class UserVoteArticle extends Notification implements ShouldQueue
{
use Queueable;
protected $article;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct(Article $article)
{
$this->article = $article;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['database'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->line('The introduction to the notification.')
->action('Notification Action', url('/'))
->line('Thank you for using our application!');
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
'user_name' => Auth::user()->user_name,
'article_slug' => $this->article->slug,
'article_title' => $this->article->title,
];
}
}
================================================
FILE: app/Notifications/UserVoteQuestion.php
================================================
<?php
namespace App\Notifications;
use App\Models\Question;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Auth;
class UserVoteQuestion extends Notification implements ShouldQueue
{
use Queueable;
protected $question;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct(Question $question)
{
$this->question = $question;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['database'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->line('The introduction to the notification.')
->action('Notification Action', url('/'))
->line('Thank you for using our application!');
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
'user_name' => Auth::user()->user_name,
'question_slug' => $this->question->slug,
'question_title' => $this->question->title,
];
}
}
================================================
FILE: app/Policies/ArticlePolicy.php
================================================
<?php
namespace App\Policies;
use App\Models\Article;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class ArticlePolicy
{
use HandlesAuthorization;
public function showDraft(User $user, Article $article)
{
return $article->user_id == $user->id || $user->hasRole('supper_admin');
}
}
================================================
FILE: app/Policies/CommentPolicy.php
================================================
<?php
namespace App\Policies;
use App\Models\Comment;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class CommentPolicy
{
use HandlesAuthorization;
public function delete(User $user, Comment $comment)
{
return $user->hasRole('supper_admin') || $user->id == $comment->user_id;
}
}
================================================
FILE: app/Policies/QuestionPolicy.php
================================================
<?php
namespace App\Policies;
use App\Models\Question;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class QuestionPolicy
{
use HandlesAuthorization;
public function showDraft(User $user, Question $article)
{
return $article->user_id == $user->id || $user->hasRole('supper_admin');
}
}
================================================
FILE: app/Policies/ReplyPolicy.php
================================================
<?php
namespace App\Policies;
use App\Models\Reply;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class ReplyPolicy
{
use HandlesAuthorization;
public function delete(User $user, Reply $reply)
{
return $user->hasRole('supper_admin') || $user->id == $reply->user_id;
}
}
================================================
FILE: app/Policies/UserPolicy.php
================================================
<?php
namespace App\Policies;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class UserPolicy
{
use HandlesAuthorization;
public function update(User $currentUser,User $user)
{
return $currentUser->id ==$user->id;
}
}
================================================
FILE: app/Providers/AppServiceProvider.php
================================================
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
================================================
FILE: app/Providers/AuthServiceProvider.php
================================================
<?php
namespace App\Providers;
use App\Models\Article;
use App\Models\Comment;
use App\Models\Question;
use App\Models\Reply;
use App\Models\User;
use App\Policies\ArticlePolicy;
use App\Policies\CommentPolicy;
use App\Policies\QuestionPolicy;
use App\Policies\ReplyPolicy;
use App\Policies\UserPolicy;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Laravel\Passport\Passport;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
Article::class => ArticlePolicy::class,
Question::class => QuestionPolicy::class,
Comment::class => CommentPolicy::class,
User::class => UserPolicy::class,
Reply::class => ReplyPolicy::class,
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Passport::routes();
}
}
================================================
FILE: app/Providers/BroadcastServiceProvider.php
================================================
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Broadcast;
class BroadcastServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Broadcast::routes();
require base_path('routes/channels.php');
}
}
================================================
FILE: app/Providers/CommonDataServiceProvider.php
================================================
<?php
namespace App\Providers;
use App\Models\Link;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class CommonDataServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
View::composer('*', function ($view) {
$view->with('authUser', \Auth::user());
$categoryAndQuestions = app('Codehaoshi\Stat\Stat')->getCategoryAndQuestion();
$view->with('categoryList', $categoryAndQuestions->categoryList);
$view->with('questionCategoryList', $categoryAndQuestions->questionList);
$view->with('linkList',Link::where('is_enabled' , 'yes')->where('type', 'link')->get());
$view->with('recommendList',Link::where('is_enabled' , 'yes')->where('type', 'recommend')->get());
});
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
}
================================================
FILE: app/Providers/EventServiceProvider.php
================================================
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Event;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'App\Events\Event' => [
'App\Listeners\EventListener',
],
];
/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
parent::boot();
//
}
}
================================================
FILE: app/Providers/RouteServiceProvider.php
================================================
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
class RouteServiceProvider extends ServiceProvider
{
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
//
parent::boot();
}
/**
* Define the routes for the application.
*
* @return void
*/
public function map()
{
$this->mapApiRoutes();
$this->mapWebRoutes();
//
}
/**
* Define the "web" routes for the application.
*
* These routes all receive session state, CSRF protection, etc.
*
* @return void
*/
protected function mapWebRoutes()
{
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
}
/**
* Define the "api" routes for the application.
*
* These routes are typically stateless.
*
* @return void
*/
protected function mapApiRoutes()
{
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
}
}
================================================
FILE: app/Repositories/AboutRepository.php
================================================
<?php
namespace App\Repositories;
use App\Models\About;
class AboutRepository
{
use BaseRepository;
protected $model;
public function __construct(About $about)
{
$this->model = $about;
}
}
================================================
FILE: app/Repositories/ArticleCategoryRepository.php
================================================
<?php
namespace App\Repositories;
use App\Models\ArticleCategory;
class ArticleCategoryRepository
{
use BaseRepository;
protected $model;
public function __construct(ArticleCategory $articleCategory)
{
$this->model = $articleCategory;
}
public function getInfoBySlug($slug)
{
return $this->model->where('slug', $slug)->firstOrFail();
}
}
================================================
FILE: app/Repositories/ArticleRepository.php
================================================
<?php
namespace App\Repositories;
use App\Models\Article;
use App\Models\Comment;
class ArticleRepository
{
use BaseRepository;
protected $model;
public function __construct(Article $article)
{
$this->model = $article;
}
/**
* Sync the tags for the article.
*
* @param int $number
* @return Paginate
*/
public function syncTag($tags = '')
{
$this->model->tags()->sync($tags);
}
public function getArticleInfoBySlug($slug)
{
return $this->model->where('slug', $slug)->with('user', 'category')->firstOrFail();
}
public function decrementCommentCount($model)
{
return $model->decrement('comment_count');
}
public function generateLastReplyUserInfo($articleModel)
{
$lastComment = $articleModel->comments()->recent()->first();
$articleModel->last_comment_user_id = $lastComment ? $lastComment->user_id : 0;
$articleModel->save();
}
/**
* Get one record without draft scope
*
* @param $id
* @return mixed
*/
public function getByIdWithoutException($id, $type = '>' ,$field = ['id','title','slug'])
{
return $this->model->withoutDraft()->where('id' , $type, $id)->select($field)->first();
}
}
================================================
FILE: app/Repositories/BaseRepository.php
================================================
<?php
namespace App\Repositories;
trait BaseRepository
{
/**
* Store a new record.
*
* @param $input
* @return User
*/
public function store($input)
{
return $this->save($this->model, $input);
}
/**
* Save the input's data.
*
* @param $model
* @param $input
* @return mixed
*/
public function save($model, $input)
{
$model->fill($input);
$model->save();
return $model;
}
/**
* Get one record without draft scope
*
* @param $id
* @return mixed
*/
public function getById($id)
{
return $this->model->findOrFail($id);
}
/**
* Delete the draft article.
*
* @param int $id
* @return boolean
*/
public function destroy($id)
{
return $this->getById($id)->delete();
}
/**
* @param $field
* @return mixed
*/
public function getAllData($field = "*", $needToArray = true)
{
if ($needToArray) {
return $this->model->select($field)->get()->toArray();
} else {
return $this->model->select($field)->get();
}
}
/**
* To judge the record is existence in you table
*
* @param $where
*/
public function getFirstRecordByWhere($where)
{
return $this->model->where($where)->first();
}
/**
* @param $id
* @param $input
* @return mixed
*/
public function update($id, $input)
{
$this->model = $this->getById($id);
return $this->save($this->model, $input);
}
/**
* return paginate list
*
* @param int $pagesize
* @param string $sort
* @param string $sortColumn
* @return mixed
*/
public function page($where = false, $pagesize = 20, $sortColumn = 'weight', $sort = 'asc')
{
if ($where) {
if($sortColumn != 'created_at'){
return $this->model->where($where)->orderBy($sortColumn, $sort)->orderBy('created_at', 'desc')->paginate($pagesize);
}
return $this->model->where($where)->orderBy($sortColumn, $sort)->paginate($pagesize);
} else {
return $this->model->orderBy($sortColumn, $sort)->paginate($pagesize);
}
}
public function getThisModel()
{
return $this->model;
}
/**
* Get all the records
*
* @return array User
*/
public function all()
{
return $this->model->get();
}
}
================================================
FILE: app/Repositories/CommentRepository.php
================================================
<?php
namespace App\Repositories;
use App\Models\Comment;
class CommentRepository
{
use BaseRepository;
protected $model;
public function __construct(Comment $comment)
{
$this->model = $comment;
}
}
================================================
FILE: app/Repositories/LinkRepository.php
================================================
<?php
namespace App\Repositories;
use App\Models\Link;
class LinkRepository
{
use BaseRepository;
protected $model;
public function __construct(Link $link)
{
$this->model = $link;
}
}
================================================
FILE: app/Repositories/PermissionRepository.php
================================================
<?php
namespace App\Repositories;
use App\Models\Permission;
class PermissionRepository
{
use BaseRepository;
protected $model;
public function __construct(Permission $permission)
{
$this->model = $permission;
}
}
================================================
FILE: app/Repositories/QuestionCategoryRepository.php
================================================
<?php
namespace App\Repositories;
use App\Models\QuestionCategory;
class QuestionCategoryRepository
{
use BaseRepository;
protected $model;
public function __construct(QuestionCategory $questionCategory)
{
$this->model = $questionCategory;
}
public function getInfoBySlug($slug)
{
return $this->model->where('slug', $slug)->firstOrFail();
}
}
================================================
FILE: app/Repositories/QuestionRepository.php
================================================
<?php
namespace App\Repositories;
use App\Models\Question;
class QuestionRepository
{
use BaseRepository;
protected $model;
public function __construct(Question $article)
{
$this->model = $article;
}
/**
* Sync the tags for the article.
*
* @param int $number
* @return Paginate
*/
public function syncTag($tags = '')
{
$this->model->tags()->sync($tags);
}
public function getQuestionInfoBySlug($slug)
{
return $this->model->where('slug', $slug)->with('user', 'category')->firstOrFail();
}
/**
* Get one record without draft scope
*
* @param $id
* @return mixed
*/
public function getByIdWithoutException($id, $type = '>' ,$field = ['id','title','slug'])
{
return $this->model->withoutDraft()->where('id' , $type, $id)->select($field)->first();
}
public function decrementReplyCount($model)
{
return $model->decrement('reply_count');
}
public function generateLastReplyUserInfo($questionModel)
{
$lastComment = $questionModel->replies()->recent()->first();
$questionModel->last_reply_user_id = $lastComment ? $lastComment->user_id : 0;
$questionModel->save();
}
}
================================================
FILE: app/Repositories/ReplyRepository.php
================================================
<?php
namespace App\Repositories;
use App\Models\Reply;
class ReplyRepository
{
use BaseRepository;
protected $model;
public function __construct(Reply $comment)
{
$this->model = $comment;
}
}
================================================
FILE: app/Repositories/RoleRepository.php
================================================
<?php
namespace App\Repositories;
use App\Models\Role;
class RoleRepository
{
use BaseRepository;
protected $model;
public function __construct(Role $role)
{
$this->model = $role;
}
/**
* @param $id
* @param $input
* @return mixed
*/
public function update($id, $input)
{
$this->model = $this->getById($id);
return $this->save($this->model, $input);
}
/**
* Sync the tags for the article.
* @param array $roleIds
* @param int $userId
*/
public function syncPermission($permissionIds = [], $userId = 0)
{
$this->getById($userId)->perms()->sync($permissionIds);
}
}
================================================
FILE: app/Repositories/TagRepository.php
================================================
<?php
namespace App\Repositories;
use App\Models\Tag;
use DB;
class TagRepository
{
use BaseRepository;
protected $model;
public function __construct(Tag $tag)
{
$this->model = $tag;
}
/**
* get All tags with used count as weight
*/
public function getAllTagWithCount()
{
$tags = $this->all();
$tags = $tags->each( function ($item, $key) {
$item->weight = DB::table('taggables')->where('tag_id', '=', $item->id)->count();
});
return $tags;
}
public function getTagInfoBySlug($slug)
{
return $this->model->where('slug', $slug)->firstOrFail();
}
}
================================================
FILE: app/Repositories/UserRepository.php
================================================
<?php
namespace App\Repositories;
use App\Models\User;
class UserRepository
{
use BaseRepository;
protected $model;
public function __construct(User $user)
{
$this->model = $user;
}
/**
* return paginate list
*
* @param int $pagesize
* @param string $sort
* @param string $sortColumn
* @return mixed
*/
public function page($where = false, $pagesize = 20, $sortColumn = 'last_actived_at', $sort = 'desc')
{
if ($where) {
return $this->model->where($where['k'])->orWhere($where['k2'])->orderBy($sortColumn, $sort)->paginate($pagesize);
} else {
return $this->model->orderBy($sortColumn, $sort)->paginate($pagesize);
}
}
/**
* Sync the tags for the article.
* @param array $roleIds
* @param int $userId
*/
public function syncRole($roleIds = [], $userId = 0)
{
$this->getById($userId)->roles()->sync($roleIds);
}
/**
* @param $user
* @param $password
* @return mixed
*/
public function changePassword($user,$password)
{
return $user->update(['password'=>bcrypt($password)]);
}
/**
* Get the user by name.
*
* @param string $name
* @return mixed
*/
public function getByName($user_name)
{
return $this->model
->where('user_name', $user_name)
->first();
}
}
================================================
FILE: app/Tools/FileManager/BaseManager.php
================================================
<?php
namespace App\Tools\FileManager;
use Illuminate\Support\Facades\Storage;
class BaseManager
{
/**
* @var $disk
*/
protected $disk;
/**
* UpyunManager constructor.
*/
public function __construct()
{
$this->disk = Storage::disk(config('filesystems.default'));
}
/**
* @param $img
* @return array|bool
*/
public function storeUploadImgByConfigPath($img, $configPath = 'temp')
{
$savePath = config('codehaoshi.uploadsPath.' . $configPath) . date('Y') . '/' . date('m');
$path = $img->store($savePath, 'public');
$realPath = env('UPLOAD_PATH', 'uploads') . '/' . $path;
return [
'real_path' => $savePath,
'relative_url' => '/' . $realPath,
'url' => asset($realPath),
];
}
public function moveFileTorealPath($tempFile, $realPathDir = 'article')
{
if (strstr($tempFile, '/temp/')) {
$newFile = str_replace('/temp/', '/' . $realPathDir . '/', $tempFile);
$new_dir = public_path(dirname($newFile));
if (!is_dir($new_dir)) mkdir($new_dir, 0777, true);
rename(public_path($tempFile), public_path($newFile));
return $newFile;
} else {
return $tempFile;
}
}
}
================================================
FILE: app/Tools/FileManager/UpyunManager.php
================================================
<?php
namespace App\Tools\FileManager;
use Symfony\Component\HttpFoundation\File\UploadedFile;
class UpyunManager extends BaseManager
{
/**
* Handle the file upload.
*
* @param \Symfony\Component\HttpFoundation\File\UploadedFile $file
* @param string $dir
* @param string $name
*
* @return array|bool
*/
public function store(UploadedFile $file, $dir = 'article', $name = '')
{
$hashName = empty($name)
? str_ireplace('.jpeg', '.jpg', $file->hashName())
: $name;
$mime = $file->getMimeType();
$realPath = $this->disk->put($dir, $file);
return [
'success' => true,
'filename' => $hashName,
'original_name' => $file->getClientOriginalName(),
'mime' => $mime,
'size' => human_filesize($file->getClientSize()),
'real_path' => $realPath,
'relative_url' => '/'.$realPath,
'url' => $this->disk->getUrl($realPath),
];
}
}
================================================
FILE: app/Tools/Mailer.php
================================================
<?php
namespace App\Tools;
use Naux\Mail\SendCloudTemplate;
use Mail;
class Mailer
{
/**
* @param $template
* @param $email
* @param array $data
*/
protected function sendTo($template, $email, array $data)
{
$content = new SendCloudTemplate($template, $data);
Mail::raw($content, function ($message) use ($email) {
$message->from('18313852226@qq.com', 'Code好事');
$message->to($email);
});
}
}
================================================
FILE: app/Tools/Markdowner.php
================================================
<?php
namespace App\Tools;
use Parsedown;
use League\HTMLToMarkdown\HtmlConverter;
class Markdowner
{
/**
* @var HtmlConverter
*/
protected $htmlConverter;
/**
* @var Parsedown
*/
protected $markdownConverter;
/**
* Markdowner constructor.
*/
public function __construct()
{
$this->htmlConverter = new HtmlConverter();
$this->markdownConverter = new Parsedown();
}
/**
* Convert Markdown To Html.
*
* @param $markdown
* @return string
*/
public function convertMarkdownToHtml($markdown)
{
return $this->markdownConverter
->setBreaksEnabled(true)
->text($markdown);
}
/**
* Convert Html To Markdown.
*
* @param $html
* @return string
*/
public function convertHtmlToMarkdown($html)
{
return $this->htmlConverter->convert($html);
}
}
================================================
FILE: app/Tools/UserMailer.php
================================================
<?php
namespace App\Tools;
use Auth;
/**
* Class UserMailer
* @package App\Mailer
*/
class UserMailer extends Mailer
{
/**
* @param $email
* @param $token
*/
public function passwordReset($email, $token)
{
$data = ['url' => url('password/reset', $token)];
$this->sendTo('codehaoshi_password_reset', $email, $data);
}
}
================================================
FILE: app/Transformers/CommentTransformer.php
================================================
<?php
namespace App\Transformers;
use App\Models\Comment;
use League\Fractal\TransformerAbstract;
class CommentTransformer extends TransformerAbstract
{
protected $availableIncludes = [ 'user' ];
public function transform(Comment $comment)
{
return [
'id' => $comment->id,
'user_id' => $comment->user_id,
'user_name' => isset($comment->user) ? $comment->user->user_name : 'Null',
'avatar' => isset($comment->user) ? $comment->user->avatar : config('codehaoshi.default_avatar'),
'content_raw' => $comment->body,
'created_at' => $comment->created_at->diffForHumans(),
'vote_count' => $comment->vote_count,
];
}
/**
* Include User
*
* @param Comment $comment
* @return \League\Fractal\Resource\Collection
*/
public function includeUser(Comment $comment)
{
$user = $comment->user;
return $this->item($user, new UserTransformer);
}
}
================================================
FILE: app/Transformers/ReplyTransformer.php
================================================
<?php
namespace App\Transformers;
use App\Models\Reply;
use League\Fractal\TransformerAbstract;
class ReplyTransformer extends TransformerAbstract
{
protected $availableIncludes = [ 'user' ];
public function transform(Reply $reply)
{
return [
'id' => $reply->id,
'user_id' => $reply->user_id,
'user_name' => isset($reply->user) ? $reply->user->user_name : 'Null',
'avatar' => isset($reply->user) ? $reply->user->avatar : config('codehaoshi.default_avatar'),
'content_raw' => $reply->body,
'created_at' => $reply->created_at->diffForHumans(),
'vote_count' => $reply->vote_count,
];
}
/**
* Include User
*
* @param Comment $comment
* @return \League\Fractal\Resource\Collection
*/
public function includeUser(Reply $reply)
{
$user = $reply->user;
return $this->item($user, new UserTransformer);
}
}
================================================
FILE: app/Transformers/UserTransformer.php
================================================
<?php
namespace App\Transformers;
use App\Models\User;
use League\Fractal\TransformerAbstract;
class UserTransformer extends TransformerAbstract
{
public function transform(User $user)
{
return [
'id' => $user->id,
'avatar' => $user->avatar,
'user_name' => $user->name,
'created_at' => $user->created_at->toDateTimeString(),
];
}
}
================================================
FILE: artisan
================================================
#!/usr/bin/env php
<?php
/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader
| for our application. We just need to utilize it! We'll require it
| into the script here so that we do not have to worry about the
| loading of any our classes "manually". Feels great to relax.
|
*/
require __DIR__.'/bootstrap/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';
/*
|--------------------------------------------------------------------------
| Run The Artisan Application
|--------------------------------------------------------------------------
|
| When we run the console application, the current CLI command will be
| executed in this console and the response sent back to a terminal
| or another output device for the developers. Here goes nothing!
|
*/
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
$status = $kernel->handle(
$input = new Symfony\Component\Console\Input\ArgvInput,
new Symfony\Component\Console\Output\ConsoleOutput
);
/*
|--------------------------------------------------------------------------
| Shutdown The Application
|--------------------------------------------------------------------------
|
| Once Artisan has finished running, we will fire off the shutdown events
| so that any final work may be done by the application before we shut
| down the process. This is the last thing to happen to the request.
|
*/
$kernel->terminate($input, $status);
exit($status);
================================================
FILE: bootstrap/app.php
================================================
<?php
/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| The first thing we will do is create a new Laravel application instance
| which serves as the "glue" for all the components of Laravel, and is
| the IoC container for the system binding all of the various parts.
|
*/
$app = new Illuminate\Foundation\Application(
realpath(__DIR__.'/../')
);
/*
|--------------------------------------------------------------------------
| Bind Important Interfaces
|--------------------------------------------------------------------------
|
| Next, we need to bind some important interfaces into the container so
| we will be able to resolve them when needed. The kernels serve the
| incoming requests to this application from both the web and CLI.
|
*/
$app->singleton(
Illuminate\Contracts\Http\Kernel::class,
App\Http\Kernel::class
);
$app->singleton(
Illuminate\Contracts\Console\Kernel::class,
App\Console\Kernel::class
);
$app->singleton(
Illuminate\Contracts\Debug\ExceptionHandler::class,
App\Exceptions\Handler::class
);
/*
|--------------------------------------------------------------------------
| Return The Application
|--------------------------------------------------------------------------
|
| This script returns the application instance. The instance is given to
| the calling script so we can separate the building of the instances
| from the actual running of the application and sending responses.
|
*/
return $app;
================================================
FILE: bootstrap/autoload.php
================================================
<?php
define('LARAVEL_START', microtime(true));
/*
|--------------------------------------------------------------------------
| Register The Composer Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader
| for our application. We just need to utilize it! We'll require it
| into the script here so we do not have to manually load any of
| our application's PHP classes. It just feels great to relax.
|
*/
require __DIR__.'/../vendor/autoload.php';
================================================
FILE: bootstrap/cache/.gitignore
================================================
*
!.gitignore
================================================
FILE: composer.json
================================================
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": [
"framework",
"laravel"
],
"license": "MIT",
"type": "project",
"require": {
"php": ">=5.6.4",
"guzzlehttp/guzzle": "^6.3",
"jellybool/translug": "^2.0",
"laravel/framework": "5.5.*",
"laravel/passport": "^3.0",
"laravel/scout": "^3.0",
"laravel/socialite": "^3.0",
"laravel/tinker": "~1.0",
"league/fractal": "^0.16.0",
"league/html-to-markdown": "^4.4",
"naux/sendcloud": "^1.1",
"nicolaslopezj/searchable": "1.*",
"overtrue/easy-sms": "^0.0.9",
"overtrue/laravel-lang": "~3.0",
"predis/predis": "^1.1",
"rap2hpoutre/laravel-log-viewer": "^0.10.4",
"spatie/laravel-backup": "^4.19",
"spatie/laravel-pjax": "^1.3",
"ucer/entrust": "^1.0.1"
},
"require-dev": {
"barryvdh/laravel-debugbar": "^2.4",
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "~5.7"
},
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/",
"Codehaoshi\\": "app/Codehaoshi"
},
"files": [
"app/Helpers.php"
]
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"scripts": {
"post-root-package-install": [
"php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
],
"post-install-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postInstall",
"php artisan optimize"
],
"post-update-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
"php artisan optimize"
]
},
"config": {
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true
}
}
================================================
FILE: config/app.php
================================================
<?php
return [
/*
|--------------------------------------------------------------------------
| Application Name
|--------------------------------------------------------------------------
|
| This value is the name of your application. This value is used when the
| framework needs to place the application's name in a notification or
| any other location as required by the application or its packages.
*/
'name' => env('APP_NAME', 'Laravel'),
/*
|--------------------------------------------------------------------------
| Application Environment
|--------------------------------------------------------------------------
|
| This value determines the "environment" your application is currently
| running in. This may determine how you prefer to configure various
| services your application utilizes. Set this in your ".env" file.
|
*/
'env' => env('APP_ENV', 'production'),
/*
|--------------------------------------------------------------------------
| Application Debug Mode
|--------------------------------------------------------------------------
|
| When your application is in debug mode, detailed error messages with
| stack traces will be shown on every error that occurs within your
| application. If disabled, a simple generic error page is shown.
|
*/
'debug' => env('APP_DEBUG', false),
/*
|--------------------------------------------------------------------------
| Application URL
|--------------------------------------------------------------------------
|
| This URL is used by the console to properly generate URLs when using
| the Artisan command line tool. You should set this to the root of
| your application so that it is used when running Artisan tasks.
|
*/
'url' => env('APP_URL', 'http://localhost'),
/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
*/
'timezone' => 'PRC',
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'zh-CN',
/*
|--------------------------------------------------------------------------
| Application Fallback Locale
|--------------------------------------------------------------------------
|
| The fallback locale determines the locale to use when the current one
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
*/
'fallback_locale' => 'en',
/*
|--------------------------------------------------------------------------
| Encryption Key
|--------------------------------------------------------------------------
|
| This key is used by the Illuminate encrypter service and should be set
| to a random, 32 character string, otherwise these encrypted strings
| will not be safe. Please do this before deploying an application!
|
*/
'key' => env('APP_KEY'),
'cipher' => 'AES-256-CBC',
/*
|--------------------------------------------------------------------------
| Logging Configuration
|--------------------------------------------------------------------------
|
| Here you may configure the log settings for your application. Out of
| the box, Laravel uses the Monolog PHP logging library. This gives
| you a variety of powerful log handlers / formatters to utilize.
|
| Available Settings: "single", "daily", "syslog", "errorlog"
|
*/
'log' => env('APP_LOG', 'daily'),
'log_max_files' => 30,
'log_level' => env('APP_LOG_LEVEL', 'debug'),
/*
|--------------------------------------------------------------------------
| Autoloaded Service Providers
|--------------------------------------------------------------------------
|
| The service providers listed here will be automatically loaded on the
| request to your application. Feel free to add your own services to
| this array to grant expanded functionality to your applications.
|
*/
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
Illuminate\Bus\BusServiceProvider::class,
Illuminate\Cache\CacheServiceProvider::class,
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
Illuminate\Cookie\CookieServiceProvider::class,
Illuminate\Database\DatabaseServiceProvider::class,
Illuminate\Encryption\EncryptionServiceProvider::class,
Illuminate\Filesystem\FilesystemServiceProvider::class,
Illuminate\Foundation\Providers\FoundationServiceProvider::class,
Illuminate\Hashing\HashServiceProvider::class,
Illuminate\Mail\MailServiceProvider::class,
Illuminate\Notifications\NotificationServiceProvider
gitextract_2fo6ji28/ ├── .gitattributes ├── .gitignore ├── app/ │ ├── Activities/ │ │ ├── BaseActivity.php │ │ ├── UserCommentArticle.php │ │ ├── UserFollowedUser.php │ │ ├── UserReplyQuestion.php │ │ ├── UserUpvoteArticle.php │ │ └── UserUpvoteQuestion.php │ ├── Codehaoshi/ │ │ ├── Core/ │ │ │ └── CreatorListener.php │ │ ├── Creators/ │ │ │ ├── CommentCreator.php │ │ │ ├── ReplyCreator.php │ │ │ └── UserCreator.php │ │ ├── Handler/ │ │ │ ├── BackupHandler.php │ │ │ └── ImageUploadHandler.php │ │ ├── Listeners/ │ │ │ └── UserCreatorListener.php │ │ ├── Notification/ │ │ │ └── Metion.php │ │ ├── Selectors/ │ │ │ ├── ArticleSelector.php │ │ │ └── QuestionSelector.php │ │ ├── Stat/ │ │ │ ├── Stat.php │ │ │ └── StatEntity.php │ │ └── Vote/ │ │ └── Voter.php │ ├── Console/ │ │ ├── Commands/ │ │ │ ├── BaseCommand.php │ │ │ ├── BindAdmin.php │ │ │ └── CodehaoshiInstall.php │ │ └── Kernel.php │ ├── Exceptions/ │ │ └── Handler.php │ ├── Helpers.php │ ├── Http/ │ │ ├── Controllers/ │ │ │ ├── ActivityController.php │ │ │ ├── Api/ │ │ │ │ ├── Apicontroller.php │ │ │ │ ├── ArticleController.php │ │ │ │ ├── CommentController.php │ │ │ │ ├── FollowerController.php │ │ │ │ ├── QuestionController.php │ │ │ │ ├── ReplyController.php │ │ │ │ ├── UploadController.php │ │ │ │ └── Votecontroller.php │ │ │ ├── ArticlesController.php │ │ │ ├── Auth/ │ │ │ │ ├── ForgotPasswordController.php │ │ │ │ ├── LoginController.php │ │ │ │ ├── RegisterController.php │ │ │ │ ├── ResetPasswordController.php │ │ │ │ └── Traits/ │ │ │ │ └── SocialiteHelper.php │ │ │ ├── CommentsController.php │ │ │ ├── Controller.php │ │ │ ├── Dashboard/ │ │ │ │ ├── AboutsController.php │ │ │ │ ├── ArticleCategoryController.php │ │ │ │ ├── ArticlesController.php │ │ │ │ ├── IndexController.php │ │ │ │ ├── LinksController.php │ │ │ │ ├── PermissionsController.php │ │ │ │ ├── QuestionCategoryController.php │ │ │ │ ├── QuestionsController.php │ │ │ │ ├── RolesController.php │ │ │ │ ├── TagsController.php │ │ │ │ ├── Traits/ │ │ │ │ │ └── ArticleHelper.php │ │ │ │ └── UsersController.php │ │ │ ├── HomeController.php │ │ │ ├── NotificationsController.php │ │ │ ├── PagesController.php │ │ │ ├── QuestionsController.php │ │ │ ├── TagController.php │ │ │ └── UserController.php │ │ ├── Kernel.php │ │ ├── Middleware/ │ │ │ ├── EncryptCookies.php │ │ │ ├── MustBeAdmin.php │ │ │ ├── RedirectIfAuthenticated.php │ │ │ ├── TrimStrings.php │ │ │ └── VerifyCsrfToken.php │ │ └── Requests/ │ │ ├── ArticleRequest.php │ │ ├── ImageUploadRequest.php │ │ ├── QuestionRequest.php │ │ ├── ResetPasswordRequest.php │ │ ├── StoreArticleCategoryRequest.php │ │ ├── StorePermissionRequest.php │ │ ├── StoreQuestionCategoryRequest.php │ │ ├── StoreReplyOrCommentRequest.php │ │ ├── StoreRoleRequest.php │ │ ├── StoreTagRequest.php │ │ ├── StoreUserRequest.php │ │ ├── UpdateArticleCategoryRequest.php │ │ ├── UpdatePermissionRequest.php │ │ ├── UpdateQuestionCategoryRequest.php │ │ ├── UpdateRoleRequest.php │ │ ├── UpdateTagRequest.php │ │ └── UpdateUserRequest.php │ ├── Models/ │ │ ├── About.php │ │ ├── Activity.php │ │ ├── Article.php │ │ ├── ArticleCategory.php │ │ ├── Comment.php │ │ ├── Follower.php │ │ ├── Link.php │ │ ├── Permission.php │ │ ├── Question.php │ │ ├── QuestionCategory.php │ │ ├── Reply.php │ │ ├── Role.php │ │ ├── SiteStatus.php │ │ ├── Tag.php │ │ ├── Traits/ │ │ │ ├── ArticleFilterable.php │ │ │ ├── BaseFilterable.php │ │ │ ├── FollowerHelper.php │ │ │ └── UserAvatorHelper.php │ │ ├── User.php │ │ └── Vote.php │ ├── Notifications/ │ │ ├── NewUserFollowNotification.php │ │ ├── ReceivedComment.php │ │ ├── ReceivedReply.php │ │ ├── UserVoteArticle.php │ │ └── UserVoteQuestion.php │ ├── Policies/ │ │ ├── ArticlePolicy.php │ │ ├── CommentPolicy.php │ │ ├── QuestionPolicy.php │ │ ├── ReplyPolicy.php │ │ └── UserPolicy.php │ ├── Providers/ │ │ ├── AppServiceProvider.php │ │ ├── AuthServiceProvider.php │ │ ├── BroadcastServiceProvider.php │ │ ├── CommonDataServiceProvider.php │ │ ├── EventServiceProvider.php │ │ └── RouteServiceProvider.php │ ├── Repositories/ │ │ ├── AboutRepository.php │ │ ├── ArticleCategoryRepository.php │ │ ├── ArticleRepository.php │ │ ├── BaseRepository.php │ │ ├── CommentRepository.php │ │ ├── LinkRepository.php │ │ ├── PermissionRepository.php │ │ ├── QuestionCategoryRepository.php │ │ ├── QuestionRepository.php │ │ ├── ReplyRepository.php │ │ ├── RoleRepository.php │ │ ├── TagRepository.php │ │ └── UserRepository.php │ ├── Tools/ │ │ ├── FileManager/ │ │ │ ├── BaseManager.php │ │ │ └── UpyunManager.php │ │ ├── Mailer.php │ │ ├── Markdowner.php │ │ └── UserMailer.php │ └── Transformers/ │ ├── CommentTransformer.php │ ├── ReplyTransformer.php │ └── UserTransformer.php ├── artisan ├── bootstrap/ │ ├── app.php │ ├── autoload.php │ └── cache/ │ └── .gitignore ├── composer.json ├── config/ │ ├── app.php │ ├── auth.php │ ├── broadcasting.php │ ├── cache.php │ ├── codehaoshi.php │ ├── dashboardMenu.php │ ├── database.php │ ├── entrust.php │ ├── filesystems.php │ ├── laravel-backup.php │ ├── mail.php │ ├── queue.php │ ├── scout.php │ ├── services.php │ ├── session.php │ └── view.php ├── database/ │ ├── .gitignore │ ├── factories/ │ │ └── ModelFactory.php │ ├── migrations/ │ │ ├── 2014_10_12_000000_create_users_table.php │ │ ├── 2014_10_12_100000_create_password_resets_table.php │ │ ├── 2017_08_03_153641_entrust_setup_tables.php │ │ ├── 2017_08_05_175713_create_article_categories_table.php │ │ ├── 2017_08_05_175737_create_articles_table.php │ │ ├── 2017_08_07_070242_create_tags_table.php │ │ ├── 2017_08_07_070317_create_taggables_table.php │ │ ├── 2017_08_10_054604_create_comments_table.php │ │ ├── 2017_08_13_063712_create_votes_table.php │ │ ├── 2017_08_14_090729_create_followers_table.php │ │ ├── 2017_08_14_124526_create_notifications_table.php │ │ ├── 2017_08_18_154806_create_question_categories_table.php │ │ ├── 2017_08_19_105055_create_questions_table.php │ │ ├── 2017_08_19_153441_create_replies_table.php │ │ ├── 2017_08_20_072744_create_activities_table.php │ │ ├── 2017_08_22_111854_create_links_table.php │ │ ├── 2017_08_22_111936_create_abouts_table.php │ │ └── 2017_08_25_164526_create_sitestatus_table.php │ └── seeds/ │ ├── ArticleCategoriesTableSeeder.php │ ├── ArticlesTableSeeder.php │ ├── DatabaseSeeder.php │ ├── PermissionsTableSeeder.php │ ├── QuestionCategoriesTableSeeder.php │ ├── QuestionsTableSeeder.php │ ├── RolesTableSeeder.php │ ├── TaggablesTableSeeder.php │ ├── TagsTableSeeder.php │ └── UsersTableSeeder.php ├── package.json ├── phpunit.xml ├── public/ │ ├── .htaccess │ ├── assets/ │ │ ├── css/ │ │ │ ├── components/ │ │ │ │ ├── accordion.css │ │ │ │ ├── accordion.js │ │ │ │ ├── ad.css │ │ │ │ ├── api.js │ │ │ │ ├── breadcrumb.css │ │ │ │ ├── button.css │ │ │ │ ├── card.css │ │ │ │ ├── checkbox.css │ │ │ │ ├── checkbox.js │ │ │ │ ├── comment.css │ │ │ │ ├── container.css │ │ │ │ ├── dimmer.css │ │ │ │ ├── dimmer.js │ │ │ │ ├── divider.css │ │ │ │ ├── dropdown.css │ │ │ │ ├── dropdown.js │ │ │ │ ├── embed.css │ │ │ │ ├── embed.js │ │ │ │ ├── feed.css │ │ │ │ ├── flag.css │ │ │ │ ├── form.css │ │ │ │ ├── form.js │ │ │ │ ├── grid.css │ │ │ │ ├── header.css │ │ │ │ ├── icon.css │ │ │ │ ├── image.css │ │ │ │ ├── input.css │ │ │ │ ├── item.css │ │ │ │ ├── label.css │ │ │ │ ├── list.css │ │ │ │ ├── loader.css │ │ │ │ ├── menu.css │ │ │ │ ├── message.css │ │ │ │ ├── modal.css │ │ │ │ ├── modal.js │ │ │ │ ├── nag.css │ │ │ │ ├── nag.js │ │ │ │ ├── popup.css │ │ │ │ ├── popup.js │ │ │ │ ├── progress.css │ │ │ │ ├── progress.js │ │ │ │ ├── rail.css │ │ │ │ ├── rating.css │ │ │ │ ├── rating.js │ │ │ │ ├── reset.css │ │ │ │ ├── reveal.css │ │ │ │ ├── search.css │ │ │ │ ├── search.js │ │ │ │ ├── segment.css │ │ │ │ ├── shape.css │ │ │ │ ├── shape.js │ │ │ │ ├── sidebar.css │ │ │ │ ├── sidebar.js │ │ │ │ ├── site.css │ │ │ │ ├── site.js │ │ │ │ ├── state.js │ │ │ │ ├── statistic.css │ │ │ │ ├── step.css │ │ │ │ ├── sticky.css │ │ │ │ ├── sticky.js │ │ │ │ ├── tab.css │ │ │ │ ├── tab.js │ │ │ │ ├── table.css │ │ │ │ ├── transition.css │ │ │ │ ├── transition.js │ │ │ │ └── visibility.js │ │ │ └── editor.css │ │ ├── dashboard/ │ │ │ ├── css/ │ │ │ │ ├── fileinput.css │ │ │ │ └── plugins/ │ │ │ │ ├── awesome-bootstrap-checkbox/ │ │ │ │ │ └── awesome-bootstrap-checkbox.css │ │ │ │ ├── chosen/ │ │ │ │ │ └── chosen.css │ │ │ │ ├── clockpicker/ │ │ │ │ │ └── clockpicker.css │ │ │ │ ├── codemirror/ │ │ │ │ │ ├── ambiance.css │ │ │ │ │ └── codemirror.css │ │ │ │ ├── dataTables/ │ │ │ │ │ └── dataTables.bootstrap.css │ │ │ │ ├── datapicker/ │ │ │ │ │ └── datepicker3.css │ │ │ │ ├── dropzone/ │ │ │ │ │ ├── basic.css │ │ │ │ │ └── dropzone.css │ │ │ │ ├── footable/ │ │ │ │ │ └── footable.core.css │ │ │ │ ├── fullcalendar/ │ │ │ │ │ ├── fullcalendar.css │ │ │ │ │ └── fullcalendar.print.css │ │ │ │ ├── iCheck/ │ │ │ │ │ └── custom.css │ │ │ │ ├── ionRangeSlider/ │ │ │ │ │ ├── ion.rangeSlider.css │ │ │ │ │ └── ion.rangeSlider.skinFlat.css │ │ │ │ ├── jqgrid/ │ │ │ │ │ └── ui.jqgridffe4.css │ │ │ │ ├── nouslider/ │ │ │ │ │ └── jquery.nouislider.css │ │ │ │ ├── plyr/ │ │ │ │ │ └── plyr.css │ │ │ │ ├── simditor/ │ │ │ │ │ └── simditor.css │ │ │ │ ├── steps/ │ │ │ │ │ └── jquery.steps.css │ │ │ │ ├── summernote/ │ │ │ │ │ ├── summernote-bs3.css │ │ │ │ │ └── summernote.css │ │ │ │ ├── sweetalert/ │ │ │ │ │ └── sweetalert.css │ │ │ │ ├── switchery/ │ │ │ │ │ └── switchery.css │ │ │ │ ├── treeview/ │ │ │ │ │ └── bootstrap-treeview.css │ │ │ │ └── webuploader/ │ │ │ │ └── webuploader.css │ │ │ ├── dist/ │ │ │ │ ├── css/ │ │ │ │ │ ├── AdminLTE.css │ │ │ │ │ └── skins/ │ │ │ │ │ ├── _all-skins.css │ │ │ │ │ ├── skin-black-light.css │ │ │ │ │ ├── skin-black.css │ │ │ │ │ ├── skin-blue-light.css │ │ │ │ │ ├── skin-blue.css │ │ │ │ │ ├── skin-green-light.css │ │ │ │ │ ├── skin-green.css │ │ │ │ │ ├── skin-purple-light.css │ │ │ │ │ ├── skin-purple.css │ │ │ │ │ ├── skin-red-light.css │ │ │ │ │ ├── skin-red.css │ │ │ │ │ ├── skin-yellow-light-s.css │ │ │ │ │ ├── skin-yellow-light.css │ │ │ │ │ └── skin-yellow.css │ │ │ │ └── js/ │ │ │ │ ├── app.js │ │ │ │ ├── demo.js │ │ │ │ └── pages/ │ │ │ │ ├── dashboard.js │ │ │ │ └── dashboard2.js │ │ │ ├── iCheck/ │ │ │ │ ├── all.css │ │ │ │ ├── flat/ │ │ │ │ │ ├── _all.css │ │ │ │ │ ├── aero.css │ │ │ │ │ ├── blue.css │ │ │ │ │ ├── flat.css │ │ │ │ │ ├── green.css │ │ │ │ │ ├── grey.css │ │ │ │ │ ├── orange.css │ │ │ │ │ ├── pink.css │ │ │ │ │ ├── purple.css │ │ │ │ │ ├── red.css │ │ │ │ │ └── yellow.css │ │ │ │ ├── futurico/ │ │ │ │ │ └── futurico.css │ │ │ │ ├── icheck.js │ │ │ │ ├── line/ │ │ │ │ │ ├── _all.css │ │ │ │ │ ├── aero.css │ │ │ │ │ ├── blue.css │ │ │ │ │ ├── green.css │ │ │ │ │ ├── grey.css │ │ │ │ │ ├── line.css │ │ │ │ │ ├── orange.css │ │ │ │ │ ├── pink.css │ │ │ │ │ ├── purple.css │ │ │ │ │ ├── red.css │ │ │ │ │ └── yellow.css │ │ │ │ ├── minimal/ │ │ │ │ │ ├── _all.css │ │ │ │ │ ├── aero.css │ │ │ │ │ ├── blue.css │ │ │ │ │ ├── green.css │ │ │ │ │ ├── grey.css │ │ │ │ │ ├── minimal.css │ │ │ │ │ ├── orange.css │ │ │ │ │ ├── pink.css │ │ │ │ │ ├── purple.css │ │ │ │ │ ├── red.css │ │ │ │ │ └── yellow.css │ │ │ │ ├── polaris/ │ │ │ │ │ └── polaris.css │ │ │ │ └── square/ │ │ │ │ ├── _all.css │ │ │ │ ├── aero.css │ │ │ │ ├── blue.css │ │ │ │ ├── green.css │ │ │ │ ├── grey.css │ │ │ │ ├── orange.css │ │ │ │ ├── pink.css │ │ │ │ ├── purple.css │ │ │ │ ├── red.css │ │ │ │ ├── square.css │ │ │ │ └── yellow.css │ │ │ ├── js/ │ │ │ │ ├── chosen/ │ │ │ │ │ ├── chosen.css │ │ │ │ │ ├── chosen.jquery.js │ │ │ │ │ └── jquery-1.9.1.js │ │ │ │ ├── contabs.js │ │ │ │ ├── contabs1.js │ │ │ │ ├── fileinput.js │ │ │ │ ├── fileinput_locale_zh.js │ │ │ │ ├── global.js │ │ │ │ ├── jquery.form.js │ │ │ │ ├── layer/ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ └── layer.ext.js │ │ │ │ │ ├── layer.js │ │ │ │ │ └── skin/ │ │ │ │ │ ├── layer.css │ │ │ │ │ ├── layer.ext.css │ │ │ │ │ └── moon/ │ │ │ │ │ └── style.css │ │ │ │ ├── laypage/ │ │ │ │ │ ├── laypage.js │ │ │ │ │ └── skin/ │ │ │ │ │ └── laypage.css │ │ │ │ ├── laytpl/ │ │ │ │ │ └── laytpl.js │ │ │ │ ├── plugins/ │ │ │ │ │ ├── beautifyhtml/ │ │ │ │ │ │ └── beautifyhtml.js │ │ │ │ │ ├── chosen/ │ │ │ │ │ │ └── chosen.jquery.js │ │ │ │ │ ├── clockpicker/ │ │ │ │ │ │ └── clockpicker.js │ │ │ │ │ ├── codemirror/ │ │ │ │ │ │ ├── codemirror.js │ │ │ │ │ │ └── mode/ │ │ │ │ │ │ └── javascript/ │ │ │ │ │ │ └── javascript.js │ │ │ │ │ ├── dataTables/ │ │ │ │ │ │ ├── dataTables.bootstrap.js │ │ │ │ │ │ └── jquery.dataTables.js │ │ │ │ │ ├── datapicker/ │ │ │ │ │ │ └── bootstrap-datepicker.js │ │ │ │ │ ├── diff_match_patch/ │ │ │ │ │ │ └── diff_match_patch.js │ │ │ │ │ ├── dropzone/ │ │ │ │ │ │ └── dropzone.js │ │ │ │ │ ├── easypiechart/ │ │ │ │ │ │ └── jquery.easypiechart.js │ │ │ │ │ ├── echarts/ │ │ │ │ │ │ └── echarts-all.js │ │ │ │ │ ├── fancybox/ │ │ │ │ │ │ ├── jquery.fancybox.css │ │ │ │ │ │ └── jquery.fancybox.js │ │ │ │ │ ├── flot/ │ │ │ │ │ │ ├── curvedLines.js │ │ │ │ │ │ ├── jquery.flot.js │ │ │ │ │ │ ├── jquery.flot.pie.js │ │ │ │ │ │ ├── jquery.flot.resize.js │ │ │ │ │ │ ├── jquery.flot.spline.js │ │ │ │ │ │ └── jquery.flot.symbol.js │ │ │ │ │ ├── gritter/ │ │ │ │ │ │ └── jquery.gritter.css │ │ │ │ │ ├── jeditable/ │ │ │ │ │ │ └── jquery.jeditable.js │ │ │ │ │ ├── jqgrid/ │ │ │ │ │ │ ├── i18n/ │ │ │ │ │ │ │ └── grid.locale-cnffe4.js │ │ │ │ │ │ └── jquery.jqGrid.minffe4.js │ │ │ │ │ ├── jsKnob/ │ │ │ │ │ │ └── jquery.knob.js │ │ │ │ │ ├── jvectormap/ │ │ │ │ │ │ └── jquery-jvectormap-world-mill-en.js │ │ │ │ │ ├── layer/ │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ └── layer.ext.js │ │ │ │ │ │ ├── laydate/ │ │ │ │ │ │ │ ├── laydate.js │ │ │ │ │ │ │ ├── need/ │ │ │ │ │ │ │ │ └── laydate.css │ │ │ │ │ │ │ └── skins/ │ │ │ │ │ │ │ ├── dahong/ │ │ │ │ │ │ │ │ └── laydate.css │ │ │ │ │ │ │ ├── default/ │ │ │ │ │ │ │ │ └── laydate.css │ │ │ │ │ │ │ └── molv/ │ │ │ │ │ │ │ └── laydate.css │ │ │ │ │ │ ├── laydate-v1.1/ │ │ │ │ │ │ │ ├── demo.html │ │ │ │ │ │ │ ├── layDate官网.url │ │ │ │ │ │ │ ├── laydate/ │ │ │ │ │ │ │ │ ├── laydate.js │ │ │ │ │ │ │ │ ├── need/ │ │ │ │ │ │ │ │ │ └── laydate.css │ │ │ │ │ │ │ │ └── skins/ │ │ │ │ │ │ │ │ ├── dahong/ │ │ │ │ │ │ │ │ │ └── laydate.css │ │ │ │ │ │ │ │ ├── default/ │ │ │ │ │ │ │ │ │ └── laydate.css │ │ │ │ │ │ │ │ └── molv/ │ │ │ │ │ │ │ │ └── laydate.css │ │ │ │ │ │ │ └── 更新日志.txt │ │ │ │ │ │ ├── layim/ │ │ │ │ │ │ │ ├── layim.css │ │ │ │ │ │ │ └── layim.js │ │ │ │ │ │ └── skin/ │ │ │ │ │ │ ├── layer.css │ │ │ │ │ │ ├── layer.ext.css │ │ │ │ │ │ └── moon/ │ │ │ │ │ │ └── style.css │ │ │ │ │ ├── markdown/ │ │ │ │ │ │ ├── bootstrap-markdown.js │ │ │ │ │ │ ├── bootstrap-markdown.zh.js │ │ │ │ │ │ ├── markdown.js │ │ │ │ │ │ └── to-markdown.js │ │ │ │ │ ├── metisMenu/ │ │ │ │ │ │ └── jquery.metisMenu.js │ │ │ │ │ ├── morris/ │ │ │ │ │ │ └── morris.js │ │ │ │ │ ├── nestable/ │ │ │ │ │ │ └── jquery.nestable.js │ │ │ │ │ ├── plyr/ │ │ │ │ │ │ └── plyr.js │ │ │ │ │ ├── prettyfile/ │ │ │ │ │ │ └── bootstrap-prettyfile.js │ │ │ │ │ ├── rickshaw/ │ │ │ │ │ │ └── vendor/ │ │ │ │ │ │ └── d3.v3.js │ │ │ │ │ ├── simditor/ │ │ │ │ │ │ ├── hotkeys.js │ │ │ │ │ │ ├── module.js │ │ │ │ │ │ ├── simditor.js │ │ │ │ │ │ └── uploader.js │ │ │ │ │ ├── suggest/ │ │ │ │ │ │ └── data.json │ │ │ │ │ ├── summernote/ │ │ │ │ │ │ └── summernote-zh-CN.js │ │ │ │ │ ├── switchery/ │ │ │ │ │ │ └── switchery.js │ │ │ │ │ ├── treeview/ │ │ │ │ │ │ └── bootstrap-treeview.js │ │ │ │ │ ├── webuploader/ │ │ │ │ │ │ └── index.html │ │ │ │ │ └── zTree/ │ │ │ │ │ ├── jquery.ztree.core-3.5.js │ │ │ │ │ ├── jquery.ztree.excheck-3.5.js │ │ │ │ │ ├── jquery.ztree.exedit-3.5.js │ │ │ │ │ ├── jquery.ztree.exhide-3.5.js │ │ │ │ │ └── zTreeStyle.css │ │ │ │ └── xss.js │ │ │ ├── uploadify/ │ │ │ │ ├── uploadify.css │ │ │ │ └── uploadify.swf │ │ │ ├── wangeditor/ │ │ │ │ ├── css/ │ │ │ │ │ ├── wangEditor-huise.css │ │ │ │ │ ├── wangEditor.css │ │ │ │ │ └── wangEditor.less │ │ │ │ └── js/ │ │ │ │ ├── emotions.data │ │ │ │ ├── lib/ │ │ │ │ │ └── jquery-2.2.1.js │ │ │ │ └── wangEditor.js │ │ │ └── webupload/ │ │ │ ├── Uploader.swf │ │ │ ├── style.css │ │ │ ├── upload.js │ │ │ └── webuploader.css │ │ └── images/ │ │ └── emoji/ │ │ └── emojify.css │ ├── baidu_verify_SEGRBySjTy.html │ ├── baidu_verify_qaS2BJWI63.html │ ├── css/ │ │ └── app.css │ ├── index.php │ ├── js/ │ │ └── app.js │ ├── mix-manifest.json │ ├── robots.txt │ └── web.config ├── readme.md ├── resources/ │ ├── assets/ │ │ ├── js/ │ │ │ ├── app.js │ │ │ ├── bootstrap.js │ │ │ ├── components/ │ │ │ │ ├── Avatar.vue │ │ │ │ ├── Avatar.vue.old │ │ │ │ ├── Comment.vue │ │ │ │ ├── Cropper.vue │ │ │ │ ├── Parse.vue │ │ │ │ ├── Reply.vue │ │ │ │ └── VoteButton.vue │ │ │ ├── config/ │ │ │ │ ├── base.js │ │ │ │ ├── helper.js │ │ │ │ ├── menu.js │ │ │ │ └── toastr.js │ │ │ ├── front.app.js │ │ │ ├── front.js │ │ │ ├── main.js │ │ │ ├── plugins/ │ │ │ │ └── http/ │ │ │ │ └── index.js │ │ │ └── vendor/ │ │ │ ├── codemirror-4.inline-attachment.js │ │ │ ├── emoji.js │ │ │ ├── github_emoji.js │ │ │ ├── inline-attachment.js │ │ │ ├── jquery.highlight.js │ │ │ ├── jquery.jscroll.js │ │ │ ├── jquery.pjax.js │ │ │ ├── jquery.scroll.up.js │ │ │ ├── jquery.textcomplete.js │ │ │ ├── nprogress.js │ │ │ └── sweetalert.js │ │ ├── sass/ │ │ │ ├── _variables.scss │ │ │ ├── app.scss │ │ │ ├── front.scss │ │ │ └── vendor/ │ │ │ ├── emoji.scss │ │ │ ├── fluidbox.scss │ │ │ ├── jquery.tocify.scss │ │ │ ├── markdown.scss │ │ │ ├── nprogress.scss │ │ │ ├── reset-style.scss │ │ │ ├── simplemde.min.scss │ │ │ ├── sweetalert.scss │ │ │ └── toastr.min.scss │ │ └── semantic/ │ │ ├── dist/ │ │ │ ├── components/ │ │ │ │ ├── accordion.css │ │ │ │ ├── accordion.js │ │ │ │ ├── ad.css │ │ │ │ ├── api.js │ │ │ │ ├── breadcrumb.css │ │ │ │ ├── button.css │ │ │ │ ├── card.css │ │ │ │ ├── checkbox.css │ │ │ │ ├── checkbox.js │ │ │ │ ├── comment.css │ │ │ │ ├── container.css │ │ │ │ ├── dimmer.css │ │ │ │ ├── dimmer.js │ │ │ │ ├── divider.css │ │ │ │ ├── dropdown.css │ │ │ │ ├── dropdown.js │ │ │ │ ├── embed.css │ │ │ │ ├── embed.js │ │ │ │ ├── feed.css │ │ │ │ ├── flag.css │ │ │ │ ├── form.css │ │ │ │ ├── form.js │ │ │ │ ├── grid.css │ │ │ │ ├── header.css │ │ │ │ ├── icon.css │ │ │ │ ├── image.css │ │ │ │ ├── input.css │ │ │ │ ├── item.css │ │ │ │ ├── label.css │ │ │ │ ├── list.css │ │ │ │ ├── loader.css │ │ │ │ ├── menu.css │ │ │ │ ├── message.css │ │ │ │ ├── modal.css │ │ │ │ ├── modal.js │ │ │ │ ├── nag.css │ │ │ │ ├── nag.js │ │ │ │ ├── popup.css │ │ │ │ ├── popup.js │ │ │ │ ├── progress.css │ │ │ │ ├── progress.js │ │ │ │ ├── rail.css │ │ │ │ ├── rating.css │ │ │ │ ├── rating.js │ │ │ │ ├── reset.css │ │ │ │ ├── reveal.css │ │ │ │ ├── search.css │ │ │ │ ├── search.js │ │ │ │ ├── segment.css │ │ │ │ ├── shape.css │ │ │ │ ├── shape.js │ │ │ │ ├── sidebar.css │ │ │ │ ├── sidebar.js │ │ │ │ ├── site.css │ │ │ │ ├── site.js │ │ │ │ ├── state.js │ │ │ │ ├── statistic.css │ │ │ │ ├── step.css │ │ │ │ ├── sticky.css │ │ │ │ ├── sticky.js │ │ │ │ ├── tab.css │ │ │ │ ├── tab.js │ │ │ │ ├── table.css │ │ │ │ ├── transition.css │ │ │ │ ├── transition.js │ │ │ │ └── visibility.js │ │ │ ├── semantic.css │ │ │ └── semantic.js │ │ ├── gulpfile.js │ │ ├── src/ │ │ │ ├── definitions/ │ │ │ │ ├── behaviors/ │ │ │ │ │ ├── api.js │ │ │ │ │ ├── colorize.js │ │ │ │ │ ├── form.js │ │ │ │ │ ├── state.js │ │ │ │ │ ├── visibility.js │ │ │ │ │ └── visit.js │ │ │ │ ├── collections/ │ │ │ │ │ ├── breadcrumb.less │ │ │ │ │ ├── form.less │ │ │ │ │ ├── grid.less │ │ │ │ │ ├── menu.less │ │ │ │ │ ├── message.less │ │ │ │ │ └── table.less │ │ │ │ ├── elements/ │ │ │ │ │ ├── button.less │ │ │ │ │ ├── container.less │ │ │ │ │ ├── divider.less │ │ │ │ │ ├── flag.less │ │ │ │ │ ├── header.less │ │ │ │ │ ├── icon.less │ │ │ │ │ ├── image.less │ │ │ │ │ ├── input.less │ │ │ │ │ ├── label.less │ │ │ │ │ ├── list.less │ │ │ │ │ ├── loader.less │ │ │ │ │ ├── rail.less │ │ │ │ │ ├── reveal.less │ │ │ │ │ ├── segment.less │ │ │ │ │ └── step.less │ │ │ │ ├── globals/ │ │ │ │ │ ├── reset.less │ │ │ │ │ ├── site.js │ │ │ │ │ └── site.less │ │ │ │ ├── modules/ │ │ │ │ │ ├── accordion.js │ │ │ │ │ ├── accordion.less │ │ │ │ │ ├── checkbox.js │ │ │ │ │ ├── checkbox.less │ │ │ │ │ ├── dimmer.js │ │ │ │ │ ├── dimmer.less │ │ │ │ │ ├── dropdown.js │ │ │ │ │ ├── dropdown.less │ │ │ │ │ ├── embed.js │ │ │ │ │ ├── embed.less │ │ │ │ │ ├── modal.js │ │ │ │ │ ├── modal.less │ │ │ │ │ ├── nag.js │ │ │ │ │ ├── nag.less │ │ │ │ │ ├── popup.js │ │ │ │ │ ├── popup.less │ │ │ │ │ ├── progress.js │ │ │ │ │ ├── progress.less │ │ │ │ │ ├── rating.js │ │ │ │ │ ├── rating.less │ │ │ │ │ ├── search.js │ │ │ │ │ ├── search.less │ │ │ │ │ ├── shape.js │ │ │ │ │ ├── shape.less │ │ │ │ │ ├── sidebar.js │ │ │ │ │ ├── sidebar.less │ │ │ │ │ ├── sticky.js │ │ │ │ │ ├── sticky.less │ │ │ │ │ ├── tab.js │ │ │ │ │ ├── tab.less │ │ │ │ │ ├── transition.js │ │ │ │ │ └── transition.less │ │ │ │ └── views/ │ │ │ │ ├── ad.less │ │ │ │ ├── card.less │ │ │ │ ├── comment.less │ │ │ │ ├── feed.less │ │ │ │ ├── item.less │ │ │ │ └── statistic.less │ │ │ ├── semantic.less │ │ │ ├── site/ │ │ │ │ ├── collections/ │ │ │ │ │ ├── breadcrumb.overrides │ │ │ │ │ ├── breadcrumb.variables │ │ │ │ │ ├── form.overrides │ │ │ │ │ ├── form.variables │ │ │ │ │ ├── grid.overrides │ │ │ │ │ ├── grid.variables │ │ │ │ │ ├── menu.overrides │ │ │ │ │ ├── menu.variables │ │ │ │ │ ├── message.overrides │ │ │ │ │ ├── message.variables │ │ │ │ │ ├── table.overrides │ │ │ │ │ └── table.variables │ │ │ │ ├── elements/ │ │ │ │ │ ├── button.overrides │ │ │ │ │ ├── button.variables │ │ │ │ │ ├── container.overrides │ │ │ │ │ ├── container.variables │ │ │ │ │ ├── divider.overrides │ │ │ │ │ ├── divider.variables │ │ │ │ │ ├── flag.overrides │ │ │ │ │ ├── flag.variables │ │ │ │ │ ├── header.overrides │ │ │ │ │ ├── header.variables │ │ │ │ │ ├── icon.overrides │ │ │ │ │ ├── icon.variables │ │ │ │ │ ├── image.overrides │ │ │ │ │ ├── image.variables │ │ │ │ │ ├── input.overrides │ │ │ │ │ ├── input.variables │ │ │ │ │ ├── label.overrides │ │ │ │ │ ├── label.variables │ │ │ │ │ ├── list.overrides │ │ │ │ │ ├── list.variables │ │ │ │ │ ├── loader.overrides │ │ │ │ │ ├── loader.variables │ │ │ │ │ ├── rail.overrides │ │ │ │ │ ├── rail.variables │ │ │ │ │ ├── reveal.overrides │ │ │ │ │ ├── reveal.variables │ │ │ │ │ ├── segment.overrides │ │ │ │ │ ├── segment.variables │ │ │ │ │ ├── step.overrides │ │ │ │ │ └── step.variables │ │ │ │ ├── globals/ │ │ │ │ │ ├── reset.overrides │ │ │ │ │ ├── reset.variables │ │ │ │ │ ├── site.overrides │ │ │ │ │ └── site.variables │ │ │ │ ├── modules/ │ │ │ │ │ ├── accordion.overrides │ │ │ │ │ ├── accordion.variables │ │ │ │ │ ├── chatroom.overrides │ │ │ │ │ ├── chatroom.variables │ │ │ │ │ ├── checkbox.overrides │ │ │ │ │ ├── checkbox.variables │ │ │ │ │ ├── dimmer.overrides │ │ │ │ │ ├── dimmer.variables │ │ │ │ │ ├── dropdown.overrides │ │ │ │ │ ├── dropdown.variables │ │ │ │ │ ├── embed.overrides │ │ │ │ │ ├── embed.variables │ │ │ │ │ ├── modal.overrides │ │ │ │ │ ├── modal.variables │ │ │ │ │ ├── nag.overrides │ │ │ │ │ ├── nag.variables │ │ │ │ │ ├── popup.overrides │ │ │ │ │ ├── popup.variables │ │ │ │ │ ├── progress.overrides │ │ │ │ │ ├── progress.variables │ │ │ │ │ ├── rating.overrides │ │ │ │ │ ├── rating.variables │ │ │ │ │ ├── search.overrides │ │ │ │ │ ├── search.variables │ │ │ │ │ ├── shape.overrides │ │ │ │ │ ├── shape.variables │ │ │ │ │ ├── sidebar.overrides │ │ │ │ │ ├── sidebar.variables │ │ │ │ │ ├── sticky.overrides │ │ │ │ │ ├── sticky.variables │ │ │ │ │ ├── tab.overrides │ │ │ │ │ ├── tab.variables │ │ │ │ │ ├── transition.overrides │ │ │ │ │ └── transition.variables │ │ │ │ └── views/ │ │ │ │ ├── ad.overrides │ │ │ │ ├── ad.variables │ │ │ │ ├── card.overrides │ │ │ │ ├── card.variables │ │ │ │ ├── comment.overrides │ │ │ │ ├── comment.variables │ │ │ │ ├── feed.overrides │ │ │ │ ├── feed.variables │ │ │ │ ├── item.overrides │ │ │ │ ├── item.variables │ │ │ │ ├── statistic.overrides │ │ │ │ └── statistic.variables │ │ │ ├── theme.config │ │ │ ├── theme.less │ │ │ └── themes/ │ │ │ ├── amazon/ │ │ │ │ ├── elements/ │ │ │ │ │ ├── button.overrides │ │ │ │ │ └── button.variables │ │ │ │ └── globals/ │ │ │ │ └── site.variables │ │ │ ├── basic/ │ │ │ │ ├── collections/ │ │ │ │ │ ├── table.overrides │ │ │ │ │ └── table.variables │ │ │ │ ├── elements/ │ │ │ │ │ ├── button.overrides │ │ │ │ │ ├── button.variables │ │ │ │ │ ├── icon.overrides │ │ │ │ │ ├── icon.variables │ │ │ │ │ ├── step.overrides │ │ │ │ │ └── step.variables │ │ │ │ ├── globals/ │ │ │ │ │ ├── reset.overrides │ │ │ │ │ └── reset.variables │ │ │ │ ├── modules/ │ │ │ │ │ ├── progress.overrides │ │ │ │ │ └── progress.variables │ │ │ │ └── views/ │ │ │ │ ├── card.overrides │ │ │ │ └── card.variables │ │ │ ├── bookish/ │ │ │ │ └── elements/ │ │ │ │ ├── header.overrides │ │ │ │ └── header.variables │ │ │ ├── bootstrap3/ │ │ │ │ └── elements/ │ │ │ │ ├── button.overrides │ │ │ │ └── button.variables │ │ │ ├── chubby/ │ │ │ │ ├── collections/ │ │ │ │ │ ├── form.overrides │ │ │ │ │ ├── form.variables │ │ │ │ │ ├── menu.overrides │ │ │ │ │ └── menu.variables │ │ │ │ ├── elements/ │ │ │ │ │ ├── button.overrides │ │ │ │ │ ├── button.variables │ │ │ │ │ ├── header.overrides │ │ │ │ │ └── header.variables │ │ │ │ ├── modules/ │ │ │ │ │ ├── accordion.overrides │ │ │ │ │ └── accordion.variables │ │ │ │ └── views/ │ │ │ │ ├── comment.overrides │ │ │ │ └── comment.variables │ │ │ ├── classic/ │ │ │ │ ├── collections/ │ │ │ │ │ ├── table.overrides │ │ │ │ │ └── table.variables │ │ │ │ ├── elements/ │ │ │ │ │ ├── button.overrides │ │ │ │ │ ├── button.variables │ │ │ │ │ ├── header.overrides │ │ │ │ │ └── header.variables │ │ │ │ ├── modules/ │ │ │ │ │ ├── progress.overrides │ │ │ │ │ └── progress.variables │ │ │ │ └── views/ │ │ │ │ ├── card.overrides │ │ │ │ └── card.variables │ │ │ ├── colored/ │ │ │ │ └── modules/ │ │ │ │ ├── checkbox.overrides │ │ │ │ └── checkbox.variables │ │ │ ├── default/ │ │ │ │ ├── collections/ │ │ │ │ │ ├── breadcrumb.overrides │ │ │ │ │ ├── breadcrumb.variables │ │ │ │ │ ├── form.overrides │ │ │ │ │ ├── form.variables │ │ │ │ │ ├── grid.overrides │ │ │ │ │ ├── grid.variables │ │ │ │ │ ├── menu.overrides │ │ │ │ │ ├── menu.variables │ │ │ │ │ ├── message.overrides │ │ │ │ │ ├── message.variables │ │ │ │ │ ├── table.overrides │ │ │ │ │ └── table.variables │ │ │ │ ├── elements/ │ │ │ │ │ ├── button.overrides │ │ │ │ │ ├── button.variables │ │ │ │ │ ├── container.overrides │ │ │ │ │ ├── container.variables │ │ │ │ │ ├── divider.overrides │ │ │ │ │ ├── divider.variables │ │ │ │ │ ├── flag.overrides │ │ │ │ │ ├── flag.variables │ │ │ │ │ ├── header.overrides │ │ │ │ │ ├── header.variables │ │ │ │ │ ├── icon.overrides │ │ │ │ │ ├── icon.variables │ │ │ │ │ ├── image.overrides │ │ │ │ │ ├── image.variables │ │ │ │ │ ├── input.overrides │ │ │ │ │ ├── input.variables │ │ │ │ │ ├── label.overrides │ │ │ │ │ ├── label.variables │ │ │ │ │ ├── list.overrides │ │ │ │ │ ├── list.variables │ │ │ │ │ ├── loader.overrides │ │ │ │ │ ├── loader.variables │ │ │ │ │ ├── rail.overrides │ │ │ │ │ ├── rail.variables │ │ │ │ │ ├── reveal.overrides │ │ │ │ │ ├── reveal.variables │ │ │ │ │ ├── segment.overrides │ │ │ │ │ ├── segment.variables │ │ │ │ │ ├── step.overrides │ │ │ │ │ └── step.variables │ │ │ │ ├── globals/ │ │ │ │ │ ├── reset.overrides │ │ │ │ │ ├── reset.variables │ │ │ │ │ ├── site.overrides │ │ │ │ │ └── site.variables │ │ │ │ ├── modules/ │ │ │ │ │ ├── accordion.overrides │ │ │ │ │ ├── accordion.variables │ │ │ │ │ ├── chatroom.overrides │ │ │ │ │ ├── chatroom.variables │ │ │ │ │ ├── checkbox.overrides │ │ │ │ │ ├── checkbox.variables │ │ │ │ │ ├── dimmer.overrides │ │ │ │ │ ├── dimmer.variables │ │ │ │ │ ├── dropdown.overrides │ │ │ │ │ ├── dropdown.variables │ │ │ │ │ ├── embed.overrides │ │ │ │ │ ├── embed.variables │ │ │ │ │ ├── modal.overrides │ │ │ │ │ ├── modal.variables │ │ │ │ │ ├── nag.overrides │ │ │ │ │ ├── nag.variables │ │ │ │ │ ├── popup.overrides │ │ │ │ │ ├── popup.variables │ │ │ │ │ ├── progress.overrides │ │ │ │ │ ├── progress.variables │ │ │ │ │ ├── rating.overrides │ │ │ │ │ ├── rating.variables │ │ │ │ │ ├── search.overrides │ │ │ │ │ ├── search.variables │ │ │ │ │ ├── shape.overrides │ │ │ │ │ ├── shape.variables │ │ │ │ │ ├── sidebar.overrides │ │ │ │ │ ├── sidebar.variables │ │ │ │ │ ├── sticky.overrides │ │ │ │ │ ├── sticky.variables │ │ │ │ │ ├── tab.overrides │ │ │ │ │ ├── tab.variables │ │ │ │ │ ├── transition.overrides │ │ │ │ │ └── transition.variables │ │ │ │ └── views/ │ │ │ │ ├── ad.overrides │ │ │ │ ├── ad.variables │ │ │ │ ├── card.overrides │ │ │ │ ├── card.variables │ │ │ │ ├── comment.overrides │ │ │ │ ├── comment.variables │ │ │ │ ├── feed.overrides │ │ │ │ ├── feed.variables │ │ │ │ ├── item.overrides │ │ │ │ ├── item.variables │ │ │ │ ├── statistic.overrides │ │ │ │ └── statistic.variables │ │ │ ├── duo/ │ │ │ │ └── elements/ │ │ │ │ ├── loader.overrides │ │ │ │ └── loader.variables │ │ │ ├── fixed-width/ │ │ │ │ ├── collections/ │ │ │ │ │ ├── grid.overrides │ │ │ │ │ └── grid.variables │ │ │ │ └── modules/ │ │ │ │ ├── modal.overrides │ │ │ │ └── modal.variables │ │ │ ├── flat/ │ │ │ │ ├── collections/ │ │ │ │ │ ├── form.overrides │ │ │ │ │ └── form.variables │ │ │ │ └── globals/ │ │ │ │ ├── site.overrides │ │ │ │ └── site.variables │ │ │ ├── github/ │ │ │ │ ├── collections/ │ │ │ │ │ ├── breadcrumb.variables │ │ │ │ │ ├── form.overrides │ │ │ │ │ ├── form.variables │ │ │ │ │ ├── grid.variables │ │ │ │ │ ├── menu.overrides │ │ │ │ │ ├── menu.variables │ │ │ │ │ ├── message.overrides │ │ │ │ │ ├── message.variables │ │ │ │ │ └── table.variables │ │ │ │ ├── elements/ │ │ │ │ │ ├── button.overrides │ │ │ │ │ ├── button.variables │ │ │ │ │ ├── header.variables │ │ │ │ │ ├── icon.overrides │ │ │ │ │ ├── icon.variables │ │ │ │ │ ├── image.variables │ │ │ │ │ ├── input.overrides │ │ │ │ │ ├── input.variables │ │ │ │ │ ├── label.overrides │ │ │ │ │ ├── label.variables │ │ │ │ │ ├── segment.overrides │ │ │ │ │ ├── segment.variables │ │ │ │ │ ├── step.overrides │ │ │ │ │ └── step.variables │ │ │ │ ├── globals/ │ │ │ │ │ └── site.variables │ │ │ │ └── modules/ │ │ │ │ ├── dropdown.overrides │ │ │ │ ├── dropdown.variables │ │ │ │ └── popup.variables │ │ │ ├── gmail/ │ │ │ │ └── collections/ │ │ │ │ ├── message.overrides │ │ │ │ └── message.variables │ │ │ ├── instagram/ │ │ │ │ └── views/ │ │ │ │ ├── card.overrides │ │ │ │ └── card.variables │ │ │ ├── material/ │ │ │ │ ├── collections/ │ │ │ │ │ ├── menu.overrides │ │ │ │ │ └── menu.variables │ │ │ │ ├── elements/ │ │ │ │ │ ├── button.overrides │ │ │ │ │ ├── button.variables │ │ │ │ │ ├── header.overrides │ │ │ │ │ ├── header.variables │ │ │ │ │ ├── icon.overrides │ │ │ │ │ └── icon.variables │ │ │ │ ├── globals/ │ │ │ │ │ ├── site.overrides │ │ │ │ │ └── site.variables │ │ │ │ └── modules/ │ │ │ │ ├── dropdown.overrides │ │ │ │ ├── dropdown.variables │ │ │ │ ├── modal.overrides │ │ │ │ └── modal.variables │ │ │ ├── pulsar/ │ │ │ │ └── elements/ │ │ │ │ ├── loader.overrides │ │ │ │ └── loader.variables │ │ │ ├── raised/ │ │ │ │ └── elements/ │ │ │ │ ├── button.overrides │ │ │ │ └── button.variables │ │ │ ├── resetcss/ │ │ │ │ └── globals/ │ │ │ │ ├── reset.overrides │ │ │ │ └── reset.variables │ │ │ ├── round/ │ │ │ │ └── elements/ │ │ │ │ ├── button.overrides │ │ │ │ └── button.variables │ │ │ ├── rtl/ │ │ │ │ └── globals/ │ │ │ │ ├── site.overrides │ │ │ │ └── site.variables │ │ │ ├── striped/ │ │ │ │ └── modules/ │ │ │ │ ├── progress.overrides │ │ │ │ └── progress.variables │ │ │ ├── timeline/ │ │ │ │ └── views/ │ │ │ │ ├── feed.overrides │ │ │ │ └── feed.variables │ │ │ └── twitter/ │ │ │ └── elements/ │ │ │ ├── button.overrides │ │ │ └── button.variables │ │ └── tasks/ │ │ ├── README.md │ │ ├── admin/ │ │ │ ├── components/ │ │ │ │ ├── create.js │ │ │ │ ├── init.js │ │ │ │ └── update.js │ │ │ ├── distributions/ │ │ │ │ ├── create.js │ │ │ │ ├── init.js │ │ │ │ └── update.js │ │ │ ├── publish.js │ │ │ ├── register.js │ │ │ └── release.js │ │ ├── build/ │ │ │ ├── assets.js │ │ │ ├── css.js │ │ │ └── javascript.js │ │ ├── build.js │ │ ├── check-install.js │ │ ├── clean.js │ │ ├── collections/ │ │ │ ├── README.md │ │ │ ├── admin.js │ │ │ ├── build.js │ │ │ ├── internal.js │ │ │ └── rtl.js │ │ ├── config/ │ │ │ ├── admin/ │ │ │ │ ├── github.js │ │ │ │ ├── oauth.example.js │ │ │ │ ├── release.js │ │ │ │ └── templates/ │ │ │ │ ├── README.md │ │ │ │ ├── bower.json │ │ │ │ ├── component-package.js │ │ │ │ ├── composer.json │ │ │ │ ├── css-package.js │ │ │ │ ├── less-package.js │ │ │ │ └── package.json │ │ │ ├── defaults.js │ │ │ ├── docs.js │ │ │ ├── npm/ │ │ │ │ └── gulpfile.js │ │ │ ├── project/ │ │ │ │ ├── config.js │ │ │ │ ├── install.js │ │ │ │ └── release.js │ │ │ ├── tasks.js │ │ │ └── user.js │ │ ├── docs/ │ │ │ ├── build.js │ │ │ ├── metadata.js │ │ │ └── serve.js │ │ ├── install.js │ │ ├── rtl/ │ │ │ ├── build.js │ │ │ └── watch.js │ │ ├── version.js │ │ └── watch.js │ ├── lang/ │ │ ├── en/ │ │ │ ├── auth.php │ │ │ ├── codehaoshi.php │ │ │ ├── pagination.php │ │ │ ├── passwords.php │ │ │ └── validation.php │ │ ├── th/ │ │ │ ├── auth.php │ │ │ ├── pagination.php │ │ │ ├── passwords.php │ │ │ └── validation.php │ │ ├── tk/ │ │ │ ├── auth.php │ │ │ ├── pagination.php │ │ │ ├── passwords.php │ │ │ └── validation.php │ │ ├── vendor/ │ │ │ └── laravel-backup/ │ │ │ ├── ar/ │ │ │ │ └── notifications.php │ │ │ ├── da/ │ │ │ │ └── notifications.php │ │ │ ├── de/ │ │ │ │ └── notifications.php │ │ │ ├── en/ │ │ │ │ └── notifications.php │ │ │ ├── es/ │ │ │ │ └── notifications.php │ │ │ ├── fr/ │ │ │ │ └── notifications.php │ │ │ ├── pt-BR/ │ │ │ │ └── notifications.php │ │ │ ├── ro/ │ │ │ │ └── notifications.php │ │ │ ├── ru/ │ │ │ │ └── notifications.php │ │ │ └── uk/ │ │ │ └── notifications.php │ │ ├── zh-CN/ │ │ │ ├── auth.php │ │ │ ├── codehaoshi.php │ │ │ ├── pagination.php │ │ │ ├── passwords.php │ │ │ └── validation.php │ │ └── zh-HK/ │ │ ├── auth.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ └── validation.php │ └── views/ │ ├── activities/ │ │ ├── article.blade.php │ │ ├── followings.blade.php │ │ ├── question.blade.php │ │ ├── type/ │ │ │ ├── user-comment-article.blade.php │ │ │ ├── user-followed-user.blade.php │ │ │ ├── user-reply-question.blade.php │ │ │ ├── user-upvote-article.blade.php │ │ │ └── user-upvote-question.blade.php │ │ └── voted.blade.php │ ├── articles/ │ │ ├── all-articles.blade.php │ │ ├── article-list.blade.php │ │ ├── create.blade.php │ │ ├── edit.blade.php │ │ ├── partials/ │ │ │ ├── article-info-form.blade.php │ │ │ ├── article-list-form.blade.php │ │ │ ├── info-right-item.blade.php │ │ │ ├── right-item.blade.php │ │ │ └── show.blade.php.old │ │ └── show.blade.php │ ├── auth/ │ │ ├── passwords/ │ │ │ ├── email.blade.php │ │ │ └── reset.blade.php │ │ ├── signin.blade.php │ │ └── signup.blade.php │ ├── dashboard/ │ │ ├── abouts/ │ │ │ ├── about-list.blade.php │ │ │ ├── create.blade.php │ │ │ └── edit.blade.php │ │ ├── article-categories/ │ │ │ ├── category-list.blade.php │ │ │ ├── create.blade.php │ │ │ └── edit.blade.php │ │ ├── articles/ │ │ │ ├── ajax-article-list.blade.php │ │ │ ├── article-list.blade.php │ │ │ ├── create.blade.php │ │ │ └── edit.blade.php │ │ ├── index/ │ │ │ ├── index.blade.php │ │ │ └── welcome.blade.php │ │ ├── layouts/ │ │ │ ├── base.blade.php │ │ │ └── partials/ │ │ │ ├── body_head.blade.php │ │ │ ├── footer.blade.php │ │ │ ├── head.blade.php │ │ │ ├── header.blade.php │ │ │ ├── left.blade.php │ │ │ └── right.blade.php │ │ ├── links/ │ │ │ ├── create.blade.php │ │ │ ├── edit.blade.php │ │ │ └── link-list.blade.php │ │ ├── permissions/ │ │ │ ├── ajax-permission-list.blade.php │ │ │ ├── create.blade.php │ │ │ ├── edit.blade.php │ │ │ └── permission-list.blade.php │ │ ├── question-categories/ │ │ │ ├── category-list.blade.php │ │ │ ├── create.blade.php │ │ │ └── edit.blade.php │ │ ├── questions/ │ │ │ ├── ajax-question-list.blade.php │ │ │ ├── create.blade.php │ │ │ ├── edit.blade.php │ │ │ └── question-list.blade.php │ │ ├── roles/ │ │ │ ├── ajax-role-list.blade.php │ │ │ ├── create.blade.php │ │ │ ├── edit.blade.php │ │ │ └── role-list.blade.php │ │ ├── tags/ │ │ │ ├── create.blade.php │ │ │ ├── edit.blade.php │ │ │ └── tag-list.blade.php │ │ └── users/ │ │ ├── ajax-user-list.blade.php │ │ ├── create.blade.php │ │ ├── edit.blade.php │ │ └── user-list.blade.php │ ├── errors/ │ │ ├── 403.blade.php │ │ ├── 404.blade.php │ │ └── 500.blade.php │ ├── form-validate/ │ │ └── auth/ │ │ ├── v-register.blade.php │ │ └── v-topic.blade.php │ ├── layouts/ │ │ ├── app.blade.php │ │ ├── base.blade.php │ │ └── partials/ │ │ ├── footer.blade.php │ │ ├── messages.blade.php │ │ ├── navbar.blade.php │ │ └── sidebar-menu.blade.php │ ├── messages/ │ │ ├── message.blade.php │ │ ├── notifications.blade.php │ │ └── partials/ │ │ └── left-bar.blade.php │ ├── notifications/ │ │ ├── new-user-follow-notification.blade.php │ │ ├── received-comment.blade.php │ │ ├── received-reply.blade.php │ │ ├── user-vote-article.blade.php │ │ └── user-vote-question.blade.php │ ├── pages/ │ │ ├── about.blade.php │ │ ├── home.blade.php │ │ ├── partials/ │ │ │ ├── hot-article.blade.php │ │ │ ├── hot-question.blade.php │ │ │ ├── information-channel.blade.php │ │ │ ├── information-channel.blade.php.old │ │ │ └── question-channel.blade.php │ │ └── search.blade.php │ ├── questions/ │ │ ├── all-questions.blade.php │ │ ├── create.blade.php │ │ ├── edit.blade.php │ │ ├── partials/ │ │ │ ├── info-right-item.blade.php │ │ │ ├── question-info-form.blade.php │ │ │ ├── question-list-form.blade.php │ │ │ └── right-item.blade.php │ │ ├── question-list.blade.php │ │ └── show.blade.php │ ├── static-pages/ │ │ ├── article/ │ │ │ ├── all-articles.blade.php │ │ │ ├── article-info.blade.php │ │ │ ├── article-list.blade.php │ │ │ ├── partials/ │ │ │ │ ├── article-comment.blade.php │ │ │ │ ├── article-info-form.blade.php │ │ │ │ ├── article-list-form.blade.php │ │ │ │ ├── info-right-item.blade.php │ │ │ │ └── right-item.blade.php │ │ │ └── test.blade.php │ │ ├── auth/ │ │ │ ├── login.blade.php │ │ │ └── register.blade.php │ │ ├── home.blade.php │ │ ├── messages/ │ │ │ ├── message.blade.php │ │ │ ├── notifications.blade.php │ │ │ └── partials/ │ │ │ └── left-bar.blade.php │ │ ├── partials/ │ │ │ ├── hot-article.blade.php │ │ │ ├── hot-question.blade.php │ │ │ ├── hot-question.blade.php___jb_tmp___ │ │ │ ├── information-channel.blade.php │ │ │ └── question-channel.blade.php │ │ ├── questions/ │ │ │ ├── all-questions.blade.php │ │ │ ├── partials/ │ │ │ │ ├── article-comment.blade.php │ │ │ │ ├── info-right-item.blade.php │ │ │ │ ├── question-info-form.blade.php │ │ │ │ ├── question-list-form.blade.php │ │ │ │ └── right-item.blade.php │ │ │ ├── question-info.blade.php │ │ │ └── question-list.blade.php │ │ └── user/ │ │ ├── center.blade.php │ │ ├── edit.blade.php │ │ ├── email.blade.php │ │ ├── partials/ │ │ │ ├── left-menu.blade.php │ │ │ └── right-item.blade.php │ │ └── password.blade.php │ ├── tags/ │ │ ├── show-article.blade.php │ │ └── show-question.blade.php │ ├── users/ │ │ ├── edit-email.blade.php │ │ ├── edit-password.blade.php │ │ ├── edit.blade.php │ │ ├── partials/ │ │ │ ├── left-menu.blade.php │ │ │ └── right-item.blade.php │ │ └── personal-center.blade.php │ └── vendor/ │ ├── mail/ │ │ ├── html/ │ │ │ ├── button.blade.php │ │ │ ├── footer.blade.php │ │ │ ├── header.blade.php │ │ │ ├── layout.blade.php │ │ │ ├── message.blade.php │ │ │ ├── panel.blade.php │ │ │ ├── promotion/ │ │ │ │ └── button.blade.php │ │ │ ├── promotion.blade.php │ │ │ ├── subcopy.blade.php │ │ │ ├── table.blade.php │ │ │ └── themes/ │ │ │ └── default.css │ │ └── markdown/ │ │ ├── button.blade.php │ │ ├── footer.blade.php │ │ ├── header.blade.php │ │ ├── layout.blade.php │ │ ├── message.blade.php │ │ ├── panel.blade.php │ │ ├── promotion/ │ │ │ └── button.blade.php │ │ ├── promotion.blade.php │ │ ├── subcopy.blade.php │ │ └── table.blade.php │ ├── notifications/ │ │ └── email.blade.php │ └── pagination/ │ ├── bootstrap-4.blade.php │ ├── default.blade.php │ ├── simple-bootstrap-4.blade.php │ └── simple-default.blade.php ├── routes/ │ ├── api.php │ ├── channels.php │ ├── console.php │ └── web.php ├── semantic.json ├── server.php ├── storage/ │ ├── app/ │ │ └── .gitignore │ ├── debugbar/ │ │ └── .gitignore │ ├── framework/ │ │ ├── .gitignore │ │ ├── cache/ │ │ │ └── .gitignore │ │ ├── sessions/ │ │ │ └── .gitignore │ │ ├── testing/ │ │ │ └── .gitignore │ │ └── views/ │ │ └── .gitignore │ └── logs/ │ └── .gitignore ├── tests/ │ ├── CreatesApplication.php │ ├── Feature/ │ │ └── ExampleTest.php │ ├── TestCase.php │ └── Unit/ │ └── ExampleTest.php └── webpack.mix.js
Showing preview only (301K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3506 symbols across 233 files)
FILE: app/Activities/BaseActivity.php
class BaseActivity (line 10) | class BaseActivity
method addArticleActivity (line 12) | public function addArticleActivity(User $user, Article $article, $extr...
method addQuestionActivity (line 26) | public function addQuestionActivity(User $user, Question $question, $e...
method addActivity (line 41) | public function addActivity($causer, $user, $indentifier, $data)
method removeBy (line 59) | public function removeBy($causer, $indentifier)
FILE: app/Activities/UserCommentArticle.php
class UserCommentArticle (line 4) | class UserCommentArticle extends BaseActivity
method generate (line 12) | public function generate($user, $article)
method remove (line 17) | public function remove($user, $article)
FILE: app/Activities/UserFollowedUser.php
class UserFollowedUser (line 5) | class UserFollowedUser extends BaseActivity
method generate (line 13) | public function generate($user, $following)
method remove (line 24) | public function remove($user, $following)
FILE: app/Activities/UserReplyQuestion.php
class UserReplyQuestion (line 4) | class UserReplyQuestion extends BaseActivity
method generate (line 12) | public function generate($user, $question)
method remove (line 17) | public function remove($user, $question)
FILE: app/Activities/UserUpvoteArticle.php
class UserUpvoteArticle (line 4) | class UserUpvoteArticle extends BaseActivity
method generate (line 12) | public function generate($user, $article)
method remove (line 17) | public function remove($user, $article)
FILE: app/Activities/UserUpvoteQuestion.php
class UserUpvoteQuestion (line 4) | class UserUpvoteQuestion extends BaseActivity
method generate (line 12) | public function generate($user, $question)
method remove (line 17) | public function remove($user, $question)
FILE: app/Codehaoshi/Core/CreatorListener.php
type CreatorListener (line 3) | interface CreatorListener
method creatorFailed (line 5) | public function creatorFailed($errors);
method creatorSucceed (line 6) | public function creatorSucceed($model);
FILE: app/Codehaoshi/Creators/CommentCreator.php
class CommentCreator (line 16) | class CommentCreator
method __construct (line 20) | public function __construct(Metion $metion)
method create (line 25) | public function create(CreatorListener $observer, $data)
method isDuplicateComment (line 62) | protected function isDuplicateComment($data)
FILE: app/Codehaoshi/Creators/ReplyCreator.php
class ReplyCreator (line 16) | class ReplyCreator
method __construct (line 20) | public function __construct(Metion $metion)
method create (line 25) | public function create(CreatorListener $observer, $data)
method isDuplicateReply (line 62) | protected function isDuplicateReply($data)
FILE: app/Codehaoshi/Creators/UserCreator.php
class UserCreator (line 9) | class UserCreator
method __construct (line 13) | public function __construct(UserRepository $user)
method create (line 18) | public function create(UserCreatorListener $observre, $userData)
FILE: app/Codehaoshi/Handler/BackupHandler.php
class BackupHandler (line 8) | class BackupHandler
method send (line 10) | public function send($notifications)
FILE: app/Codehaoshi/Handler/ImageUploadHandler.php
class ImageUploadHandler (line 8) | class ImageUploadHandler
method __construct (line 20) | public function __construct()
method fileUpload (line 25) | public function fileUpload(ImageUploadRequest $request, $img)
FILE: app/Codehaoshi/Listeners/UserCreatorListener.php
type UserCreatorListener (line 4) | interface UserCreatorListener
method userValidationError (line 6) | public function userValidationError($errors);
method userCreated (line 7) | public function userCreated($user);
FILE: app/Codehaoshi/Notification/Metion.php
class Metion (line 7) | class Metion
method parse (line 14) | public function parse($body)
method getMentionedUsername (line 25) | protected function getMentionedUsername()
method replace (line 39) | public function replace()
FILE: app/Codehaoshi/Selectors/ArticleSelector.php
class ArticleSelector (line 7) | class ArticleSelector
method __construct (line 11) | public function __construct(ArticleRepository $articleRepository)
method articleInfoWithPrevAndNext (line 15) | public function articleInfoWithPrevAndNext($id)
FILE: app/Codehaoshi/Selectors/QuestionSelector.php
class QuestionSelector (line 8) | class QuestionSelector
method __construct (line 12) | public function __construct(QuestionRepository $questionRepository)
method questionInfoWithPrevAndNext (line 16) | public function questionInfoWithPrevAndNext($id)
FILE: app/Codehaoshi/Stat/Stat.php
class Stat (line 9) | class Stat
method __construct (line 16) | public function __construct(ArticleCategoryRepository $articleCategory...
method getCategoryAndQuestion (line 22) | public function getCategoryAndQuestion()
FILE: app/Codehaoshi/Stat/StatEntity.php
class StatEntity (line 5) | class StatEntity
FILE: app/Codehaoshi/Vote/Voter.php
class Voter (line 14) | class Voter
method articleUpVote (line 16) | public function articleUpVote(Article $article)
method articleDownVote (line 33) | public function articleDownVote(Article $article)
method questionUpVote (line 46) | public function questionUpVote(Question $question)
method questionDownVote (line 63) | public function questionDownVote(Question $question)
FILE: app/Console/Commands/BaseCommand.php
class BaseCommand (line 7) | class BaseCommand extends Command
method __construct (line 14) | public function __construct()
method execShellWithPrettyPrint (line 25) | public function execShellWithPrettyPrint($command)
FILE: app/Console/Commands/BindAdmin.php
class BindAdmin (line 8) | class BindAdmin extends BaseCommand
method __construct (line 29) | public function __construct()
method handle (line 39) | public function handle()
FILE: app/Console/Commands/CodehaoshiInstall.php
class CodehaoshiInstall (line 6) | class CodehaoshiInstall extends BaseCommand
method __construct (line 27) | public function __construct()
method handle (line 37) | public function handle()
FILE: app/Console/Kernel.php
class Kernel (line 10) | class Kernel extends ConsoleKernel
method schedule (line 28) | protected function schedule(Schedule $schedule)
method commands (line 43) | protected function commands()
FILE: app/Exceptions/Handler.php
class Handler (line 9) | class Handler extends ExceptionHandler
method report (line 33) | public function report(Exception $exception)
method render (line 45) | public function render($request, Exception $exception)
method unauthenticated (line 57) | protected function unauthenticated($request, AuthenticationException $...
FILE: app/Helpers.php
function dashboardUrl (line 12) | function dashboardUrl($path = null, $parameters = [], $secure = null)
function flash (line 27) | function flash($status = 'success', $msg = '操作成功', $key = 'toastrMsg')
function lang (line 37) | function lang($text, $parameters = [])
function ajaxReturn (line 49) | function ajaxReturn($url = "", $status = 1, $msg = '操作成功', $data = [])
function ajaxReturnError (line 54) | function ajaxReturnError($url = "", $status = 0, $msg = '操作失败', $data = [])
function roleOrPermissionDataHandle (line 64) | function roleOrPermissionDataHandle($array, $all)
function getCdnDomain (line 84) | function getCdnDomain()
function getTagWeight (line 89) | function getTagWeight($useCount)
function getDateWithSub (line 104) | function getDateWithSub($date)
FILE: app/Http/Controllers/ActivityController.php
class ActivityController (line 11) | class ActivityController extends Controller
method __construct (line 17) | public function __construct(UserRepository $userRepository, Article $a...
method index (line 24) | public function index($user_name, $view = null, Request $request)
FILE: app/Http/Controllers/Api/Apicontroller.php
class Apicontroller (line 11) | class Apicontroller extends Controller
method __construct (line 31) | public function __construct()
method respondWithCollection (line 47) | public function respondWithCollection($collection, $callback)
method respondWithArray (line 63) | public function respondWithArray(array $array, array $headers = [])
method respondWithError (line 75) | protected function respondWithError($message, $errorCode)
method errorWrongArgs (line 99) | public function errorWrongArgs($message = 'Wrong Arguments')
method getStatusCode (line 110) | public function getStatusCode()
method setStatusCode (line 121) | public function setStatusCode($statusCode)
method errorUnauthorized (line 134) | public function errorUnauthorized($message = 'Unauthorized')
method respondWithItem (line 147) | public function respondWithItem($item, $callback)
method noContent (line 161) | public function noContent()
FILE: app/Http/Controllers/Api/ArticleController.php
class ArticleController (line 10) | class ArticleController extends Apicontroller
method voteUser (line 12) | public function voteUser(ArticleRepository $articleRepository, $articl...
method vote (line 18) | public function vote(ArticleRepository $articleRepository, Request $re...
FILE: app/Http/Controllers/Api/CommentController.php
class CommentController (line 15) | class CommentController extends Apicontroller implements CreatorListener
method __construct (line 20) | public function __construct(ArticleRepository $articleRepository, Comm...
method show (line 27) | public function show(Request $request, $article_id)
method store (line 35) | public function store(StoreReplyOrCommentRequest $request)
method creatorSucceed (line 40) | public function creatorSucceed($comment)
method creatorFailed (line 45) | public function creatorFailed($error)
method destroy (line 50) | public function destroy($comment_id)
FILE: app/Http/Controllers/Api/FollowerController.php
class FollowerController (line 10) | class FollowerController extends Apicontroller
method __construct (line 22) | public function __construct(UserRepository $userRepository)
method index (line 32) | public function index($id)
method doFollow (line 44) | public function doFollow()
FILE: app/Http/Controllers/Api/QuestionController.php
class QuestionController (line 10) | class QuestionController extends Apicontroller
method voteUser (line 12) | public function voteUser(QuestionRepository $questionRepository, $ques...
method vote (line 18) | public function vote(QuestionRepository $questionRepository, Request $...
FILE: app/Http/Controllers/Api/ReplyController.php
class ReplyController (line 15) | class ReplyController extends Apicontroller implements CreatorListener
method __construct (line 20) | public function __construct(QuestionRepository $questionRepository, Re...
method show (line 27) | public function show(Request $request, $question_id)
method store (line 34) | public function store(StoreReplyOrCommentRequest $request)
method creatorSucceed (line 39) | public function creatorSucceed($reply)
method creatorFailed (line 44) | public function creatorFailed($error)
method destroy (line 49) | public function destroy($reply_id)
FILE: app/Http/Controllers/Api/UploadController.php
class UploadController (line 10) | class UploadController extends Controller
method __construct (line 15) | public function __construct()
method fileUpload (line 20) | public function fileUpload(ImageUploadRequest $request)
FILE: app/Http/Controllers/Api/Votecontroller.php
class Votecontroller (line 8) | class Votecontroller extends Controller
method vote (line 10) | public function vote($article_id)
FILE: app/Http/Controllers/ArticlesController.php
class ArticlesController (line 15) | class ArticlesController extends Controller
method __construct (line 22) | public function __construct(ArticleCategoryRepository $articleCategory...
method index (line 36) | public function index($slug)
method show (line 54) | public function show($slug, Article $articleModel)
method allArticles (line 80) | public function allArticles()
method create (line 87) | public function create()
method store (line 98) | public function store(ArticleRequest $request)
method edit (line 111) | public function edit($id)
method update (line 125) | public function update(ArticleRequest $request, $id)
FILE: app/Http/Controllers/Auth/ForgotPasswordController.php
class ForgotPasswordController (line 10) | class ForgotPasswordController extends Controller
method sendResetLinkEmail (line 31) | public function sendResetLinkEmail(Request $request)
method sendResetLinkResponse (line 52) | protected function sendResetLinkResponse($response, $request)
method __construct (line 62) | public function __construct()
FILE: app/Http/Controllers/Auth/LoginController.php
class LoginController (line 16) | class LoginController extends Controller implements UserCreatorListener
method __construct (line 44) | public function __construct(UserRepository $userRepository)
method showLoginForm (line 60) | public function showLoginForm()
method userNotFound (line 70) | public function userNotFound($driver, $registerUserData)
method userValidationError (line 97) | public function userValidationError($errors)
method userCreated (line 109) | public function userCreated($user)
method accountDisabled (line 125) | public function accountDisabled()
method logout (line 138) | public function logout()
method loginUser (line 150) | private function loginUser($user)
method login (line 162) | public function login(Request $request)
FILE: app/Http/Controllers/Auth/RegisterController.php
class RegisterController (line 14) | class RegisterController extends Controller
method __construct (line 41) | public function __construct()
method showRegistrationForm (line 51) | public function showRegistrationForm()
method validator (line 62) | protected function validator(array $data)
method create (line 77) | protected function create(array $data)
method register (line 96) | public function register(Request $request)
FILE: app/Http/Controllers/Auth/ResetPasswordController.php
class ResetPasswordController (line 8) | class ResetPasswordController extends Controller
method __construct (line 35) | public function __construct()
FILE: app/Http/Controllers/Auth/Traits/SocialiteHelper.php
type SocialiteHelper (line 11) | trait SocialiteHelper
method redirectToGithubProvider (line 20) | public function redirectToGithubProvider(Request $request)
method handleGithubProviderCallback (line 36) | public function handleGithubProviderCallback(Request $request)
FILE: app/Http/Controllers/CommentsController.php
class CommentsController (line 10) | class CommentsController extends Controller implements CreatorListener
method __construct (line 15) | public function __construct(ArticleRepository $articleRepository)
method store (line 21) | public function store(StoreReplyOrCommentRequest $request)
method creatorSucceed (line 26) | public function creatorSucceed($article)
method creatorFailed (line 33) | public function creatorFailed($error)
FILE: app/Http/Controllers/Controller.php
class Controller (line 10) | class Controller extends BaseController
FILE: app/Http/Controllers/Dashboard/AboutsController.php
class AboutsController (line 9) | class AboutsController extends Controller
method __construct (line 13) | public function __construct(AboutRepository $about)
method abouts (line 18) | public function abouts()
method create (line 24) | public function create()
method store (line 29) | public function store(Request $request)
method edit (line 37) | public function edit($id)
method update (line 42) | public function update(Request $request, $id)
method destroy (line 49) | public function destroy($id)
FILE: app/Http/Controllers/Dashboard/ArticleCategoryController.php
class ArticleCategoryController (line 11) | class ArticleCategoryController extends Controller
method __construct (line 17) | public function __construct(ArticleCategoryRepository $articleCategory...
method articleCategories (line 23) | public function articleCategories()
method create (line 29) | public function create()
method store (line 34) | public function store(StoreArticleCategoryRequest $request)
method edit (line 45) | public function edit($id)
method update (line 50) | public function update(UpdateArticleCategoryRequest $request, $id)
method destroy (line 60) | public function destroy($id)
FILE: app/Http/Controllers/Dashboard/ArticlesController.php
class ArticlesController (line 15) | class ArticlesController extends Controller
method __construct (line 23) | public function __construct(ArticleCategoryRepository $articleCategory...
method articles (line 30) | public function articles()
method ajaxArticles (line 42) | public function ajaxArticles(Request $request)
method create (line 68) | public function create()
method store (line 76) | public function store(ArticleRequest $request)
method edit (line 88) | public function edit($id)
method update (line 103) | public function update(ArticleRequest $request, $id)
method destroy (line 119) | public function destroy($id)
FILE: app/Http/Controllers/Dashboard/IndexController.php
class IndexController (line 12) | class IndexController extends Controller
method __construct (line 15) | public function __construct()
method index (line 22) | public function index()
method welcome (line 28) | public function welcome()
method commonStatusHandle (line 34) | public function commonStatusHandle(Request $request)
method test (line 47) | public function test($model)
FILE: app/Http/Controllers/Dashboard/LinksController.php
class LinksController (line 9) | class LinksController extends Controller
method __construct (line 13) | public function __construct(LinkRepository $link)
method links (line 18) | public function links()
method create (line 24) | public function create()
method store (line 29) | public function store(Request $request)
method edit (line 37) | public function edit($id)
method update (line 42) | public function update(Request $request, $id)
method destroy (line 49) | public function destroy($id)
FILE: app/Http/Controllers/Dashboard/PermissionsController.php
class PermissionsController (line 12) | class PermissionsController extends Controller
method __construct (line 16) | public function __construct(PermissionRepository $permissionRepository)
method roles (line 21) | public function roles()
method ajaxPermissions (line 26) | public function ajaxPermissions(Request $request)
method create (line 39) | public function create()
method store (line 44) | public function store(StorePermissionRequest $request)
method edit (line 50) | public function edit($id)
method update (line 55) | public function update(UpdatePermissionRequest $request, $id)
method destroy (line 61) | public function destroy($id)
FILE: app/Http/Controllers/Dashboard/QuestionCategoryController.php
class QuestionCategoryController (line 11) | class QuestionCategoryController extends Controller
method __construct (line 16) | public function __construct(QuestionCategoryRepository $questionCatego...
method questionCategories (line 22) | public function questionCategories()
method create (line 28) | public function create()
method store (line 33) | public function store(StoreQuestionCategoryRequest $request)
method edit (line 45) | public function edit($id)
method update (line 49) | public function update(UpdateQuestionCategoryRequest $request, $id)
method destroy (line 59) | public function destroy($id)
FILE: app/Http/Controllers/Dashboard/QuestionsController.php
class QuestionsController (line 15) | class QuestionsController extends Controller
method __construct (line 22) | public function __construct(QuestionCategoryRepository $questionCatego...
method questions (line 29) | public function questions()
method ajaxQuestions (line 41) | public function ajaxQuestions(Request $request)
method create (line 67) | public function create()
method store (line 75) | public function store(QuestionRequest $request)
method edit (line 89) | public function edit($id)
method update (line 104) | public function update(QuestionRequest $request, $id)
method destroy (line 120) | public function destroy($id)
FILE: app/Http/Controllers/Dashboard/RolesController.php
class RolesController (line 14) | class RolesController extends Controller
method __construct (line 19) | public function __construct(RoleRepository $roleRepository, Permission...
method roles (line 25) | public function roles()
method ajaxRoles (line 30) | public function ajaxRoles(Request $request)
method create (line 44) | public function create()
method store (line 49) | public function store(StoreRoleRequest $request)
method edit (line 55) | public function edit($id)
method update (line 60) | public function update(UpdateRoleRequest $request, $id)
method giveRolePermissions (line 66) | public function giveRolePermissions(Request $request)
method giveRolePermissionsStore (line 75) | public function giveRolePermissionsStore(Request $request)
method destroy (line 85) | public function destroy($id)
FILE: app/Http/Controllers/Dashboard/TagsController.php
class TagsController (line 10) | class TagsController extends Controller
method __construct (line 15) | public function __construct(TagRepository $tagRepository)
method tags (line 20) | public function tags()
method create (line 26) | public function create()
method store (line 31) | public function store(StoreTagRequest $request)
method edit (line 37) | public function edit($id)
method update (line 42) | public function update(UpdateTagRequest $request, $id)
method destroy (line 49) | public function destroy($id)
FILE: app/Http/Controllers/Dashboard/Traits/ArticleHelper.php
type ArticleHelper (line 8) | trait ArticleHelper
method handleArticleDate (line 10) | protected function handleArticleDate($data)
method handleArticleDateToStr (line 25) | protected function handleArticleDateToStr($model)
FILE: app/Http/Controllers/Dashboard/UsersController.php
class UsersController (line 14) | class UsersController extends Controller
method __construct (line 19) | public function __construct(UserRepository $userRepository, RoleReposi...
method users (line 25) | public function users()
method ajaxUsers (line 30) | public function ajaxUsers(Request $request)
method create (line 45) | public function create()
method store (line 50) | public function store(StoreUserRequest $request)
method edit (line 62) | public function edit($id)
method update (line 67) | public function update(UpdateUserRequest $request, $id)
method destroy (line 81) | public function destroy($id)
method giveUserRoles (line 97) | public function giveUserRoles(Request $request)
method giveUserRolesStore (line 106) | public function giveUserRolesStore(Request $request)
FILE: app/Http/Controllers/HomeController.php
class HomeController (line 7) | class HomeController extends Controller
method __construct (line 14) | public function __construct()
method index (line 24) | public function index()
FILE: app/Http/Controllers/NotificationsController.php
class NotificationsController (line 8) | class NotificationsController extends Controller
method unread (line 10) | public function unread()
method index (line 15) | public function index()
method messages (line 23) | public function messages()
FILE: app/Http/Controllers/PagesController.php
class PagesController (line 15) | class PagesController extends Controller
method home (line 17) | public function home(Article $article, Question $question)
method search (line 25) | public function search(Request $request)
method about (line 33) | public function about(ArticleRepository $articleRepository, QuestionRe...
FILE: app/Http/Controllers/QuestionsController.php
class QuestionsController (line 16) | class QuestionsController extends Controller
method __construct (line 23) | public function __construct(QuestionCategoryRepository $questionCatego...
method show (line 38) | public function show($slug, Question $questionModel)
method index (line 64) | public function index($slug)
method allQuestions (line 80) | public function allQuestions()
method create (line 86) | public function create()
method store (line 97) | public function store(QuestionRequest $request)
method uploadImage (line 110) | public function uploadImage(ImageUploadRequest $request)
method edit (line 126) | public function edit($id)
method update (line 140) | public function update(QuestionRequest $request, $id)
FILE: app/Http/Controllers/TagController.php
class TagController (line 8) | class TagController extends Controller
method __construct (line 13) | public function __construct(ArticleRepository $articleRepository, TagR...
method show (line 19) | public function show($slug, $type = null)
FILE: app/Http/Controllers/UserController.php
class UserController (line 11) | class UserController extends Controller
method __construct (line 16) | public function __construct(UserRepository $userRepository)
method edit (line 28) | public function edit($id)
method update (line 40) | public function update($id, Request $request)
method editPassword (line 58) | public function editPassword($id)
method updatePassword (line 70) | public function updatePassword($id, ResetPasswordRequest $request)
method editEmail (line 80) | public function editEmail($id)
FILE: app/Http/Kernel.php
class Kernel (line 7) | class Kernel extends HttpKernel
FILE: app/Http/Middleware/EncryptCookies.php
class EncryptCookies (line 7) | class EncryptCookies extends BaseEncrypter
FILE: app/Http/Middleware/MustBeAdmin.php
class MustBeAdmin (line 8) | class MustBeAdmin
method handle (line 17) | public function handle($request, Closure $next)
FILE: app/Http/Middleware/RedirectIfAuthenticated.php
class RedirectIfAuthenticated (line 8) | class RedirectIfAuthenticated
method handle (line 18) | public function handle($request, Closure $next, $guard = null)
FILE: app/Http/Middleware/TrimStrings.php
class TrimStrings (line 7) | class TrimStrings extends BaseTrimmer
FILE: app/Http/Middleware/VerifyCsrfToken.php
class VerifyCsrfToken (line 7) | class VerifyCsrfToken extends BaseVerifier
FILE: app/Http/Requests/ArticleRequest.php
class ArticleRequest (line 7) | class ArticleRequest extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: app/Http/Requests/ImageUploadRequest.php
class ImageUploadRequest (line 7) | class ImageUploadRequest extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: app/Http/Requests/QuestionRequest.php
class QuestionRequest (line 7) | class QuestionRequest extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: app/Http/Requests/ResetPasswordRequest.php
class ResetPasswordRequest (line 7) | class ResetPasswordRequest extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: app/Http/Requests/StoreArticleCategoryRequest.php
class StoreArticleCategoryRequest (line 7) | class StoreArticleCategoryRequest extends FormRequest
method authorize (line 9) | public function authorize()
method rules (line 14) | public function rules()
FILE: app/Http/Requests/StorePermissionRequest.php
class StorePermissionRequest (line 7) | class StorePermissionRequest extends FormRequest
method authorize (line 9) | public function authorize()
method rules (line 14) | public function rules()
FILE: app/Http/Requests/StoreQuestionCategoryRequest.php
class StoreQuestionCategoryRequest (line 7) | class StoreQuestionCategoryRequest extends FormRequest
method authorize (line 9) | public function authorize()
method rules (line 14) | public function rules()
FILE: app/Http/Requests/StoreReplyOrCommentRequest.php
class StoreReplyOrCommentRequest (line 8) | class StoreReplyOrCommentRequest extends FormRequest
method authorize (line 10) | public function authorize()
method rules (line 15) | public function rules()
FILE: app/Http/Requests/StoreRoleRequest.php
class StoreRoleRequest (line 7) | class StoreRoleRequest extends FormRequest
method authorize (line 9) | public function authorize()
method rules (line 14) | public function rules()
FILE: app/Http/Requests/StoreTagRequest.php
class StoreTagRequest (line 7) | class StoreTagRequest extends FormRequest
method authorize (line 9) | public function authorize()
method rules (line 14) | public function rules()
FILE: app/Http/Requests/StoreUserRequest.php
class StoreUserRequest (line 7) | class StoreUserRequest extends FormRequest
method authorize (line 9) | public function authorize()
method rules (line 14) | public function rules()
FILE: app/Http/Requests/UpdateArticleCategoryRequest.php
class UpdateArticleCategoryRequest (line 8) | class UpdateArticleCategoryRequest extends FormRequest
method authorize (line 10) | public function authorize()
method rules (line 15) | public function rules()
FILE: app/Http/Requests/UpdatePermissionRequest.php
class UpdatePermissionRequest (line 8) | class UpdatePermissionRequest extends FormRequest
method authorize (line 10) | public function authorize()
method rules (line 15) | public function rules()
FILE: app/Http/Requests/UpdateQuestionCategoryRequest.php
class UpdateQuestionCategoryRequest (line 8) | class UpdateQuestionCategoryRequest extends FormRequest
method authorize (line 10) | public function authorize()
method rules (line 15) | public function rules()
FILE: app/Http/Requests/UpdateRoleRequest.php
class UpdateRoleRequest (line 8) | class UpdateRoleRequest extends FormRequest
method authorize (line 10) | public function authorize()
method rules (line 15) | public function rules()
FILE: app/Http/Requests/UpdateTagRequest.php
class UpdateTagRequest (line 8) | class UpdateTagRequest extends FormRequest
method authorize (line 10) | public function authorize()
method rules (line 15) | public function rules()
FILE: app/Http/Requests/UpdateUserRequest.php
class UpdateUserRequest (line 8) | class UpdateUserRequest extends FormRequest
method authorize (line 10) | public function authorize()
method rules (line 15) | public function rules()
FILE: app/Models/About.php
class About (line 8) | class About extends Model
method setContentAttribute (line 17) | public function setContentAttribute($value)
FILE: app/Models/Activity.php
class Activity (line 7) | class Activity extends Model
method user (line 11) | public function user()
method scopeRecent (line 15) | public function scopeRecent($query)
method getDataAttribute (line 20) | public function getDataAttribute($value)
FILE: app/Models/Article.php
class Article (line 11) | class Article extends Model
method category (line 46) | public function category()
method user (line 51) | public function user()
method tags (line 62) | public function tags()
method setTitleAttribute (line 72) | public function setTitleAttribute($value)
method setUniqueSlug (line 89) | public function setUniqueSlug($value, $extra)
method setContentAttribute (line 104) | public function setContentAttribute($value)
method getCommentsWithLimit (line 114) | public function getCommentsWithLimit($limit = 30, $order = 'created_at')
method comments (line 126) | public function comments()
method votes (line 131) | public function votes()
FILE: app/Models/ArticleCategory.php
class ArticleCategory (line 8) | class ArticleCategory extends Model
method articles (line 21) | public function articles()
FILE: app/Models/Comment.php
class Comment (line 10) | class Comment extends Model
method user (line 24) | public function user()
method article (line 29) | public function article()
FILE: app/Models/Follower.php
class Follower (line 7) | class Follower extends Model
FILE: app/Models/Link.php
class Link (line 7) | class Link extends Model
FILE: app/Models/Permission.php
class Permission (line 8) | class Permission extends EntrustPermission
method saveFunction (line 12) | public function saveFunction()
FILE: app/Models/Question.php
class Question (line 11) | class Question extends Model
method category (line 46) | public function category()
method replies (line 51) | public function replies()
method user (line 56) | public function user()
method tags (line 65) | public function tags()
method votes (line 70) | public function votes()
method setTitleAttribute (line 79) | public function setTitleAttribute($value)
method setUniqueSlug (line 96) | public function setUniqueSlug($value, $extra)
method setContentAttribute (line 111) | public function setContentAttribute($value)
method getRepliesWithLimit (line 121) | public function getRepliesWithLimit($limit = 30, $order = 'created_at')
FILE: app/Models/QuestionCategory.php
class QuestionCategory (line 8) | class QuestionCategory extends Model
method questions (line 21) | public function questions()
FILE: app/Models/Reply.php
class Reply (line 10) | class Reply extends Model
method user (line 24) | public function user()
method question (line 29) | public function question()
FILE: app/Models/Role.php
class Role (line 8) | class Role extends EntrustRole
method saveFunction (line 19) | public function saveFunction()
FILE: app/Models/SiteStatus.php
class SiteStatus (line 7) | class SiteStatus extends Model
method newImage (line 9) | public static function newImage()
FILE: app/Models/Tag.php
class Tag (line 8) | class Tag extends Model
method articles (line 33) | public function articles()
method questions (line 38) | public function questions()
FILE: app/Models/Traits/ArticleFilterable.php
type ArticleFilterable (line 5) | trait ArticleFilterable
method getArticlesWithFilter (line 8) | public function getArticlesWithFilter($filter, $limit = 5, $category_i...
method getArticlesWithWhoFilter (line 18) | public function getArticlesWithWhoFilter($filter, $limit = 5, $user_id...
method getArticleFilter (line 28) | protected function getArticleFilter($request_filter)
method applyFilter (line 37) | public function applyFilter($filter, $category_id)
method scopeVote (line 60) | public function scopeVote($query, $sort="asc")
method scopeRecent (line 64) | public function scopeRecent($query)
method scopeWeightAsc (line 69) | public function scopeWeightAsc($query)
method scopeHot (line 74) | public function scopeHot($query)
method scopeExcellent (line 79) | public function scopeExcellent($query)
method scopeWithoutDraft (line 84) | public function scopeWithoutDraft($query)
method scopeWithoutPrivate (line 89) | public function scopeWithoutPrivate($query)
method scopeCategory (line 94) | public function scopeCategory($query, $category_id)
FILE: app/Models/Traits/BaseFilterable.php
type BaseFilterable (line 5) | trait BaseFilterable
method scopeRecent (line 8) | public function scopeRecent($query)
FILE: app/Models/Traits/FollowerHelper.php
type FollowerHelper (line 5) | trait FollowerHelper
method isFollowedBy (line 14) | public function isFollowedBy($user)
method isFollowing (line 26) | public function isFollowing($user)
method followers (line 35) | public function followers()
method followings (line 45) | public function followings()
method follow (line 57) | public function follow($user)
method unfollow (line 69) | public function unfollow($user)
FILE: app/Models/Traits/UserAvatorHelper.php
type UserAvatorHelper (line 6) | trait UserAvatorHelper
method cacheAvatar (line 8) | public function cacheAvatar()
FILE: app/Models/User.php
class User (line 14) | class User extends Authenticatable
method activities (line 51) | public function activities()
method articles (line 56) | public function articles()
method questions (line 61) | public function questions()
method sendPasswordResetNotification (line 71) | public function sendPasswordResetNotification($token)
method saveFunction (line 76) | public function saveFunction()
FILE: app/Models/Vote.php
class Vote (line 7) | class Vote extends Model
method user (line 11) | public function user()
method scopeByWhom (line 16) | public function scopeByWhom($query, $user_id)
FILE: app/Notifications/NewUserFollowNotification.php
class NewUserFollowNotification (line 11) | class NewUserFollowNotification extends Notification implements ShouldQueue
method __construct (line 20) | public function __construct()
method via (line 31) | public function via($notifiable)
method toMail (line 42) | public function toMail($notifiable)
method toDatabase (line 54) | public function toDatabase($notifiable)//注意方法的命名格式
method toArray (line 67) | public function toArray($notifiable)
FILE: app/Notifications/ReceivedComment.php
class ReceivedComment (line 12) | class ReceivedComment extends Notification implements ShouldQueue
method __construct (line 23) | public function __construct(Comment $comment)
method via (line 34) | public function via($notifiable)
method toMail (line 45) | public function toMail($notifiable)
method toArray (line 56) | public function toArray($notifiable)
FILE: app/Notifications/ReceivedReply.php
class ReceivedReply (line 13) | class ReceivedReply extends Notification implements ShouldQueue
method __construct (line 24) | public function __construct(Reply $reply)
method via (line 35) | public function via($notifiable)
method toMail (line 46) | public function toMail($notifiable)
method toArray (line 57) | public function toArray($notifiable)
FILE: app/Notifications/UserVoteArticle.php
class UserVoteArticle (line 12) | class UserVoteArticle extends Notification implements ShouldQueue
method __construct (line 23) | public function __construct(Article $article)
method via (line 34) | public function via($notifiable)
method toMail (line 45) | public function toMail($notifiable)
method toArray (line 59) | public function toArray($notifiable)
FILE: app/Notifications/UserVoteQuestion.php
class UserVoteQuestion (line 12) | class UserVoteQuestion extends Notification implements ShouldQueue
method __construct (line 23) | public function __construct(Question $question)
method via (line 34) | public function via($notifiable)
method toMail (line 45) | public function toMail($notifiable)
method toArray (line 59) | public function toArray($notifiable)
FILE: app/Policies/ArticlePolicy.php
class ArticlePolicy (line 9) | class ArticlePolicy
method showDraft (line 14) | public function showDraft(User $user, Article $article)
FILE: app/Policies/CommentPolicy.php
class CommentPolicy (line 9) | class CommentPolicy
method delete (line 13) | public function delete(User $user, Comment $comment)
FILE: app/Policies/QuestionPolicy.php
class QuestionPolicy (line 9) | class QuestionPolicy
method showDraft (line 14) | public function showDraft(User $user, Question $article)
FILE: app/Policies/ReplyPolicy.php
class ReplyPolicy (line 9) | class ReplyPolicy
method delete (line 13) | public function delete(User $user, Reply $reply)
FILE: app/Policies/UserPolicy.php
class UserPolicy (line 8) | class UserPolicy
method update (line 12) | public function update(User $currentUser,User $user)
FILE: app/Providers/AppServiceProvider.php
class AppServiceProvider (line 7) | class AppServiceProvider extends ServiceProvider
method boot (line 14) | public function boot()
method register (line 24) | public function register()
FILE: app/Providers/AuthServiceProvider.php
class AuthServiceProvider (line 18) | class AuthServiceProvider extends ServiceProvider
method boot (line 40) | public function boot()
FILE: app/Providers/BroadcastServiceProvider.php
class BroadcastServiceProvider (line 8) | class BroadcastServiceProvider extends ServiceProvider
method boot (line 15) | public function boot()
FILE: app/Providers/CommonDataServiceProvider.php
class CommonDataServiceProvider (line 9) | class CommonDataServiceProvider extends ServiceProvider
method boot (line 16) | public function boot()
method register (line 34) | public function register()
FILE: app/Providers/EventServiceProvider.php
class EventServiceProvider (line 8) | class EventServiceProvider extends ServiceProvider
method boot (line 26) | public function boot()
FILE: app/Providers/RouteServiceProvider.php
class RouteServiceProvider (line 8) | class RouteServiceProvider extends ServiceProvider
method boot (line 24) | public function boot()
method map (line 36) | public function map()
method mapWebRoutes (line 52) | protected function mapWebRoutes()
method mapApiRoutes (line 66) | protected function mapApiRoutes()
FILE: app/Repositories/AboutRepository.php
class AboutRepository (line 9) | class AboutRepository
method __construct (line 14) | public function __construct(About $about)
FILE: app/Repositories/ArticleCategoryRepository.php
class ArticleCategoryRepository (line 7) | class ArticleCategoryRepository
method __construct (line 12) | public function __construct(ArticleCategory $articleCategory)
method getInfoBySlug (line 18) | public function getInfoBySlug($slug)
FILE: app/Repositories/ArticleRepository.php
class ArticleRepository (line 8) | class ArticleRepository
method __construct (line 13) | public function __construct(Article $article)
method syncTag (line 24) | public function syncTag($tags = '')
method getArticleInfoBySlug (line 29) | public function getArticleInfoBySlug($slug)
method decrementCommentCount (line 34) | public function decrementCommentCount($model)
method generateLastReplyUserInfo (line 40) | public function generateLastReplyUserInfo($articleModel)
method getByIdWithoutException (line 53) | public function getByIdWithoutException($id, $type = '>' ,$field = ['i...
FILE: app/Repositories/BaseRepository.php
type BaseRepository (line 5) | trait BaseRepository
method store (line 14) | public function store($input)
method save (line 26) | public function save($model, $input)
method getById (line 41) | public function getById($id)
method destroy (line 53) | public function destroy($id)
method getAllData (line 62) | public function getAllData($field = "*", $needToArray = true)
method getFirstRecordByWhere (line 76) | public function getFirstRecordByWhere($where)
method update (line 86) | public function update($id, $input)
method page (line 101) | public function page($where = false, $pagesize = 20, $sortColumn = 'we...
method getThisModel (line 113) | public function getThisModel()
method all (line 123) | public function all()
FILE: app/Repositories/CommentRepository.php
class CommentRepository (line 7) | class CommentRepository
method __construct (line 13) | public function __construct(Comment $comment)
FILE: app/Repositories/LinkRepository.php
class LinkRepository (line 8) | class LinkRepository
method __construct (line 13) | public function __construct(Link $link)
FILE: app/Repositories/PermissionRepository.php
class PermissionRepository (line 7) | class PermissionRepository
method __construct (line 12) | public function __construct(Permission $permission)
FILE: app/Repositories/QuestionCategoryRepository.php
class QuestionCategoryRepository (line 8) | class QuestionCategoryRepository
method __construct (line 13) | public function __construct(QuestionCategory $questionCategory)
method getInfoBySlug (line 19) | public function getInfoBySlug($slug)
FILE: app/Repositories/QuestionRepository.php
class QuestionRepository (line 7) | class QuestionRepository
method __construct (line 12) | public function __construct(Question $article)
method syncTag (line 22) | public function syncTag($tags = '')
method getQuestionInfoBySlug (line 27) | public function getQuestionInfoBySlug($slug)
method getByIdWithoutException (line 38) | public function getByIdWithoutException($id, $type = '>' ,$field = ['i...
method decrementReplyCount (line 43) | public function decrementReplyCount($model)
method generateLastReplyUserInfo (line 49) | public function generateLastReplyUserInfo($questionModel)
FILE: app/Repositories/ReplyRepository.php
class ReplyRepository (line 8) | class ReplyRepository
method __construct (line 14) | public function __construct(Reply $comment)
FILE: app/Repositories/RoleRepository.php
class RoleRepository (line 7) | class RoleRepository
method __construct (line 12) | public function __construct(Role $role)
method update (line 23) | public function update($id, $input)
method syncPermission (line 36) | public function syncPermission($permissionIds = [], $userId = 0)
FILE: app/Repositories/TagRepository.php
class TagRepository (line 8) | class TagRepository
method __construct (line 13) | public function __construct(Tag $tag)
method getAllTagWithCount (line 21) | public function getAllTagWithCount()
method getTagInfoBySlug (line 31) | public function getTagInfoBySlug($slug)
FILE: app/Repositories/UserRepository.php
class UserRepository (line 7) | class UserRepository
method __construct (line 12) | public function __construct(User $user)
method page (line 25) | public function page($where = false, $pagesize = 20, $sortColumn = 'la...
method syncRole (line 39) | public function syncRole($roleIds = [], $userId = 0)
method changePassword (line 49) | public function changePassword($user,$password)
method getByName (line 60) | public function getByName($user_name)
FILE: app/Tools/FileManager/BaseManager.php
class BaseManager (line 7) | class BaseManager
method __construct (line 19) | public function __construct()
method storeUploadImgByConfigPath (line 29) | public function storeUploadImgByConfigPath($img, $configPath = 'temp')
method moveFileTorealPath (line 43) | public function moveFileTorealPath($tempFile, $realPathDir = 'article')
FILE: app/Tools/FileManager/UpyunManager.php
class UpyunManager (line 8) | class UpyunManager extends BaseManager
method store (line 20) | public function store(UploadedFile $file, $dir = 'article', $name = '')
FILE: app/Tools/Mailer.php
class Mailer (line 8) | class Mailer
method sendTo (line 15) | protected function sendTo($template, $email, array $data)
FILE: app/Tools/Markdowner.php
class Markdowner (line 8) | class Markdowner
method __construct (line 23) | public function __construct()
method convertMarkdownToHtml (line 36) | public function convertMarkdownToHtml($markdown)
method convertHtmlToMarkdown (line 49) | public function convertHtmlToMarkdown($html)
FILE: app/Tools/UserMailer.php
class UserMailer (line 9) | class UserMailer extends Mailer
method passwordReset (line 15) | public function passwordReset($email, $token)
FILE: app/Transformers/CommentTransformer.php
class CommentTransformer (line 8) | class CommentTransformer extends TransformerAbstract
method transform (line 12) | public function transform(Comment $comment)
method includeUser (line 32) | public function includeUser(Comment $comment)
FILE: app/Transformers/ReplyTransformer.php
class ReplyTransformer (line 8) | class ReplyTransformer extends TransformerAbstract
method transform (line 12) | public function transform(Reply $reply)
method includeUser (line 32) | public function includeUser(Reply $reply)
FILE: app/Transformers/UserTransformer.php
class UserTransformer (line 8) | class UserTransformer extends TransformerAbstract
method transform (line 10) | public function transform(User $user)
FILE: database/migrations/2014_10_12_000000_create_users_table.php
class CreateUsersTable (line 7) | class CreateUsersTable extends Migration
method up (line 14) | public function up()
method down (line 54) | public function down()
FILE: database/migrations/2014_10_12_100000_create_password_resets_table.php
class CreatePasswordResetsTable (line 7) | class CreatePasswordResetsTable extends Migration
method up (line 14) | public function up()
method down (line 28) | public function down()
FILE: database/migrations/2017_08_03_153641_entrust_setup_tables.php
class EntrustSetupTables (line 5) | class EntrustSetupTables extends Migration
method up (line 12) | public function up()
method down (line 64) | public function down()
FILE: database/migrations/2017_08_05_175713_create_article_categories_table.php
class CreateArticleCategoriesTable (line 7) | class CreateArticleCategoriesTable extends Migration
method up (line 14) | public function up()
method down (line 36) | public function down()
FILE: database/migrations/2017_08_05_175737_create_articles_table.php
class CreateArticlesTable (line 7) | class CreateArticlesTable extends Migration
method up (line 14) | public function up()
method down (line 44) | public function down()
FILE: database/migrations/2017_08_07_070242_create_tags_table.php
class CreateTagsTable (line 7) | class CreateTagsTable extends Migration
method up (line 14) | public function up()
method down (line 32) | public function down()
FILE: database/migrations/2017_08_07_070317_create_taggables_table.php
class CreateTaggablesTable (line 7) | class CreateTaggablesTable extends Migration
method up (line 14) | public function up()
method down (line 28) | public function down()
FILE: database/migrations/2017_08_10_054604_create_comments_table.php
class CreateCommentsTable (line 7) | class CreateCommentsTable extends Migration
method up (line 14) | public function up()
method down (line 34) | public function down()
FILE: database/migrations/2017_08_13_063712_create_votes_table.php
class CreateVotesTable (line 7) | class CreateVotesTable extends Migration
method up (line 14) | public function up()
method down (line 30) | public function down()
FILE: database/migrations/2017_08_14_090729_create_followers_table.php
class CreateFollowersTable (line 7) | class CreateFollowersTable extends Migration
method up (line 14) | public function up()
method down (line 29) | public function down()
FILE: database/migrations/2017_08_14_124526_create_notifications_table.php
class CreateNotificationsTable (line 7) | class CreateNotificationsTable extends Migration
method up (line 14) | public function up()
method down (line 31) | public function down()
FILE: database/migrations/2017_08_18_154806_create_question_categories_table.php
class CreateQuestionCategoriesTable (line 7) | class CreateQuestionCategoriesTable extends Migration
method up (line 14) | public function up()
method down (line 36) | public function down()
FILE: database/migrations/2017_08_19_105055_create_questions_table.php
class CreateQuestionsTable (line 7) | class CreateQuestionsTable extends Migration
method up (line 14) | public function up()
method down (line 44) | public function down()
FILE: database/migrations/2017_08_19_153441_create_replies_table.php
class CreateRepliesTable (line 7) | class CreateRepliesTable extends Migration
method up (line 14) | public function up()
method down (line 34) | public function down()
FILE: database/migrations/2017_08_20_072744_create_activities_table.php
class CreateActivitiesTable (line 6) | class CreateActivitiesTable extends Migration {
method up (line 13) | public function up()
method down (line 31) | public function down()
FILE: database/migrations/2017_08_22_111854_create_links_table.php
class CreateLinksTable (line 7) | class CreateLinksTable extends Migration
method up (line 14) | public function up()
method down (line 31) | public function down()
FILE: database/migrations/2017_08_22_111936_create_abouts_table.php
class CreateAboutsTable (line 7) | class CreateAboutsTable extends Migration
method up (line 14) | public function up()
method down (line 31) | public function down()
FILE: database/migrations/2017_08_25_164526_create_sitestatus_table.php
class CreateSitestatusTable (line 7) | class CreateSitestatusTable extends Migration
method up (line 14) | public function up()
method down (line 36) | public function down()
FILE: database/seeds/ArticleCategoriesTableSeeder.php
class ArticleCategoriesTableSeeder (line 6) | class ArticleCategoriesTableSeeder extends Seeder
method run (line 13) | public function run()
FILE: database/seeds/ArticlesTableSeeder.php
class ArticlesTableSeeder (line 6) | class ArticlesTableSeeder extends Seeder
method run (line 13) | public function run()
FILE: database/seeds/DatabaseSeeder.php
class DatabaseSeeder (line 5) | class DatabaseSeeder extends Seeder
method run (line 12) | public function run()
FILE: database/seeds/PermissionsTableSeeder.php
class PermissionsTableSeeder (line 5) | class PermissionsTableSeeder extends Seeder
method run (line 12) | public function run()
FILE: database/seeds/QuestionCategoriesTableSeeder.php
class QuestionCategoriesTableSeeder (line 6) | class QuestionCategoriesTableSeeder extends Seeder
method run (line 13) | public function run()
FILE: database/seeds/QuestionsTableSeeder.php
class QuestionsTableSeeder (line 6) | class QuestionsTableSeeder extends Seeder
method run (line 13) | public function run()
FILE: database/seeds/RolesTableSeeder.php
class RolesTableSeeder (line 5) | class RolesTableSeeder extends Seeder
method run (line 12) | public function run()
FILE: database/seeds/TaggablesTableSeeder.php
class TaggablesTableSeeder (line 7) | class TaggablesTableSeeder extends Seeder
method run (line 14) | public function run()
FILE: database/seeds/TagsTableSeeder.php
class TagsTableSeeder (line 6) | class TagsTableSeeder extends Seeder
method run (line 13) | public function run()
FILE: database/seeds/UsersTableSeeder.php
class UsersTableSeeder (line 8) | class UsersTableSeeder extends Seeder
method run (line 15) | public function run()
FILE: public/assets/dashboard/dist/js/app.js
function _init (line 224) | function _init() {
function start (line 648) | function start(box) {
function done (line 655) | function done(box) {
FILE: public/assets/dashboard/dist/js/demo.js
function change_layout (line 219) | function change_layout(cls) {
function change_skin (line 238) | function change_skin(cls) {
function store (line 255) | function store(name, val) {
function get (line 269) | function get(name) {
function setup (line 282) | function setup() {
FILE: public/assets/dashboard/iCheck/icheck.js
function operate (line 300) | function operate(input, direct, method) {
function on (line 345) | function on(input, state, keep) {
function off (line 410) | function off(input, state, keep) {
function tidy (line 444) | function tidy(input, callback) {
function option (line 460) | function option(input, state, regular) {
function capitalize (line 466) | function capitalize(string) {
function callbacks (line 470) | function callbacks(input, checked, callback, keep) {
FILE: public/assets/dashboard/js/chosen/chosen.jquery.js
function ctor (line 16) | function ctor() { this.constructor = child; }
function SelectParser (line 19) | function SelectParser() {
function AbstractChosen (line 117) | function AbstractChosen(form_field, options) {
function Chosen (line 551) | function Chosen() {
FILE: public/assets/dashboard/js/chosen/jquery-1.9.1.js
function isArraylike (line 951) | function isArraylike( obj ) {
function createOptions (line 974) | function createOptions( options ) {
function internalData (line 1551) | function internalData( elem, name, data, pvt /* Internal Use Only */ ){
function internalRemoveData (line 1645) | function internalRemoveData( elem, name, pvt ) {
function dataAttr (line 1841) | function dataAttr( elem, key, data ) {
function isEmptyDataObject (line 1873) | function isEmptyDataObject( obj ) {
function returnTrue (line 2702) | function returnTrue() {
function returnFalse (line 2706) | function returnFalse() {
function isNative (line 3841) | function isNative( fn ) {
function createCache (line 3851) | function createCache() {
function markFunction (line 3869) | function markFunction( fn ) {
function assert (line 3878) | function assert( fn ) {
function Sizzle (line 3891) | function Sizzle( selector, context, results, seed ) {
function siblingCheck (line 4449) | function siblingCheck( a, b ) {
function createInputPseudo (line 4471) | function createInputPseudo( type ) {
function createButtonPseudo (line 4479) | function createButtonPseudo( type ) {
function createPositionalPseudo (line 4487) | function createPositionalPseudo( fn ) {
function tokenize (line 5014) | function tokenize( selector, parseOnly ) {
function toSelector (line 5081) | function toSelector( tokens ) {
function addCombinator (line 5091) | function addCombinator( matcher, combinator, base ) {
function elementMatcher (line 5141) | function elementMatcher( matchers ) {
function condense (line 5155) | function condense( unmatched, map, filter, context, xml ) {
function setMatcher (line 5176) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
function matcherFromTokens (line 5269) | function matcherFromTokens( tokens ) {
function matcherFromGroupMatchers (line 5321) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
function multipleContexts (line 5449) | function multipleContexts( selector, contexts, results ) {
function select (line 5458) | function select( selector, context, results, seed ) {
function setFilters (line 5527) | function setFilters() {}
function sibling (line 5680) | function sibling( cur, dir ) {
function winnow (line 5788) | function winnow( elements, qualifier, keep ) {
function createSafeFragment (line 5821) | function createSafeFragment( document ) {
function findOrAppend (line 6202) | function findOrAppend( elem, tag ) {
function disableScript (line 6207) | function disableScript( elem ) {
function restoreScript (line 6212) | function restoreScript( elem ) {
function setGlobalEval (line 6223) | function setGlobalEval( elems, refElements ) {
function cloneCopyEvent (line 6231) | function cloneCopyEvent( src, dest ) {
function fixCloneNodeIssues (line 6259) | function fixCloneNodeIssues( src, dest ) {
function getAll (line 6352) | function getAll( context, tag ) {
function fixDefaultChecked (line 6375) | function fixDefaultChecked( elem ) {
function vendorPropName (line 6640) | function vendorPropName( style, name ) {
function isHidden (line 6662) | function isHidden( elem, el ) {
function showHide (line 6669) | function showHide( elements, show ) {
function setPositiveNumber (line 7016) | function setPositiveNumber( elem, value, subtract ) {
function augmentWidthOrHeight (line 7024) | function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
function getWidthOrHeight (line 7063) | function getWidthOrHeight( elem, name, extra ) {
function css_defaultDisplay (line 7107) | function css_defaultDisplay( nodeName ) {
function actualDisplay (line 7139) | function actualDisplay( name, doc ) {
function buildParams (line 7368) | function buildParams( prefix, obj, traditional, add ) {
function addToPrefiltersOrTransports (line 7466) | function addToPrefiltersOrTransports( structure ) {
function inspectPrefiltersOrTransports (line 7498) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
function ajaxExtend (line 7525) | function ajaxExtend( target, src ) {
function done (line 7991) | function done( status, nativeStatusText, responses, headers ) {
function ajaxHandleResponses (line 8117) | function ajaxHandleResponses( s, jqXHR, responses ) {
function ajaxConvert (line 8178) | function ajaxConvert( s, response ) {
function createStandardXHR (line 8439) | function createStandardXHR() {
function createActiveXHR (line 8445) | function createActiveXHR() {
function createFxNow (line 8684) | function createFxNow() {
function createTweens (line 8691) | function createTweens( animation, props ) {
function Animation (line 8706) | function Animation( elem, properties, options ) {
function propFilter (line 8810) | function propFilter( props, specialEasing ) {
function defaultPrefilter (line 8877) | function defaultPrefilter( elem, props, opts ) {
function Tween (line 9004) | function Tween( elem, options, prop, end, easing ) {
function genFx (line 9230) | function genFx( type, includeWidth ) {
function getWindow (line 9526) | function getWindow( elem ) {
FILE: public/assets/dashboard/js/contabs.js
function t (line 2) | function t(t) {
function e (line 9) | function e(e) {
function a (line 20) | function a() {
function i (line 31) | function i() {
function n (line 39) | function n() {
function s (line 59) | function s() {
function r (line 86) | function r() {
function o (line 92) | function o() {
function d (line 96) | function d() {
function c (line 105) | function c() {
FILE: public/assets/dashboard/js/contabs1.js
function f (line 2) | function f(l) {
function g (line 9) | function g(n) {
function a (line 38) | function a() {
function b (line 66) | function b() {
function c (line 99) | function c() {
function h (line 141) | function h() {
function i (line 199) | function i() {
function j (line 207) | function j() {
function e (line 211) | function e() {
function d (line 225) | function d() {
FILE: public/assets/dashboard/js/fileinput.js
function readFile (line 1691) | function readFile(i) {
FILE: public/assets/dashboard/js/global.js
function updateSort (line 46) | function updateSort(obj) {
function show (line 294) | function show() {
function GetRTime (line 308) | function GetRTime(end_time) {
function ajaxFormBtn (line 408) | function ajaxFormBtn(url, formId, layerClose) {
function getCookie (line 450) | function getCookie(c_name) {
function setCookies (line 468) | function setCookies(name, value, time) {
function collectGoods (line 481) | function collectGoods(goods_id) {
function getCity (line 500) | function getCity(obj) {
function getArea (line 520) | function getArea(obj) {
function getTown (line 539) | function getTown(obj) {
FILE: public/assets/dashboard/js/jquery.form.js
function deepSerialize (line 272) | function deepSerialize(extraData){
function fileUploadXhr (line 288) | function fileUploadXhr(a) {
function fileUploadIframe (line 350) | function fileUploadIframe(a) {
function doAjaxSubmit (line 885) | function doAjaxSubmit(e) {
function captureSubmittingElement (line 894) | function captureSubmittingElement(e) {
function log (line 1264) | function log() {
FILE: public/assets/dashboard/js/layer/layer.js
function b (line 2) | function b(a){a=g.find(a),a.height(i[1]-j-k-2*(0|parseFloat(a.css("paddi...
function a (line 2) | function a(){var a=g.cancel&&g.cancel(b.index,d);a===!1||f.close(b.index)}
function b (line 2) | function b(){a.css({top:f+(e.config.fix?d.scrollTop():0)})}
function g (line 2) | function g(a,b,c){var d=new Image;return d.src=a,d.complete?b(d):(d.onlo...
FILE: public/assets/dashboard/js/laypage/laypage.js
function a (line 2) | function a(d){var e="laypagecss";a.dir="dir"in a?a.dir:f.getpath+"/skin/...
FILE: public/assets/dashboard/js/plugins/beautifyhtml/beautifyhtml.js
function style_html (line 64) | function style_html(html_source, options, js_beautify, css_beautify) {
FILE: public/assets/dashboard/js/plugins/chosen/chosen.jquery.js
function ctor (line 16) | function ctor() { this.constructor = child; }
function SelectParser (line 19) | function SelectParser() {
function AbstractChosen (line 117) | function AbstractChosen(form_field, options) {
function Chosen (line 546) | function Chosen() {
FILE: public/assets/dashboard/js/plugins/clockpicker/clockpicker.js
function createSvgElement (line 43) | function createSvgElement(name) {
function leadingZero (line 47) | function leadingZero(num) {
function uniqueId (line 53) | function uniqueId(prefix) {
function ClockPicker (line 90) | function ClockPicker(element, options) {
function raiseCallback (line 358) | function raiseCallback(callbackFunction) {
FILE: public/assets/dashboard/js/plugins/codemirror/codemirror.js
function CodeMirror (line 61) | function CodeMirror(place, options) {
function Display (line 121) | function Display(place, doc) {
function loadMode (line 245) | function loadMode(cm) {
function resetModeState (line 250) | function resetModeState(cm) {
function wrappingChanged (line 261) | function wrappingChanged(cm) {
function estimateHeight (line 278) | function estimateHeight(cm) {
function estimateLineHeights (line 296) | function estimateLineHeights(cm) {
function keyMapChanged (line 304) | function keyMapChanged(cm) {
function themeChanged (line 310) | function themeChanged(cm) {
function guttersChanged (line 316) | function guttersChanged(cm) {
function updateGutters (line 324) | function updateGutters(cm) {
function updateGutterSpace (line 339) | function updateGutterSpace(cm) {
function lineLength (line 348) | function lineLength(line) {
function findMaxLine (line 367) | function findMaxLine(cm) {
function setGuttersForLineNumbers (line 383) | function setGuttersForLineNumbers(options) {
function hScrollbarTakesSpace (line 395) | function hScrollbarTakesSpace(cm) {
function measureForScrollbars (line 401) | function measureForScrollbars(cm) {
function updateScrollbars (line 415) | function updateScrollbars(cm, measure) {
function visibleLines (line 472) | function visibleLines(display, doc, viewport) {
function alignHorizontally (line 496) | function alignHorizontally(cm) {
function maybeUpdateLineNumberWidth (line 515) | function maybeUpdateLineNumberWidth(cm) {
function lineNumberFor (line 533) | function lineNumberFor(options, i) {
function compensateForHScroll (line 540) | function compensateForHScroll(display) {
function DisplayUpdate (line 546) | function DisplayUpdate(cm, viewport, force) {
function updateDisplayIfNeeded (line 563) | function updateDisplayIfNeeded(cm, update) {
function postUpdateDisplay (line 631) | function postUpdateDisplay(cm, update) {
function updateDisplaySimple (line 661) | function updateDisplaySimple(cm, viewport) {
function setDocumentHeight (line 673) | function setDocumentHeight(cm, measure) {
function checkForWebkitWidthBug (line 678) | function checkForWebkitWidthBug(cm, measure) {
function updateHeightsInViewport (line 689) | function updateHeightsInViewport(cm) {
function updateWidgetHeight (line 716) | function updateWidgetHeight(line) {
function getDimensions (line 723) | function getDimensions(cm) {
function patchDisplay (line 741) | function patchDisplay(cm, updateNumbersFrom, dims) {
function updateLineForChanges (line 786) | function updateLineForChanges(cm, lineView, lineN, dims) {
function ensureLineWrapped (line 799) | function ensureLineWrapped(lineView) {
function updateLineBackground (line 810) | function updateLineBackground(lineView) {
function getLineContent (line 824) | function getLineContent(cm, lineView) {
function updateLineText (line 837) | function updateLineText(cm, lineView) {
function updateLineClasses (line 852) | function updateLineClasses(lineView) {
function updateLineGutter (line 862) | function updateLineGutter(cm, lineView, lineN, dims) {
function updateLineWidgets (line 889) | function updateLineWidgets(lineView, dims) {
function buildLineElement (line 900) | function buildLineElement(cm, lineView, lineN, dims) {
function insertLineWidgets (line 914) | function insertLineWidgets(lineView, dims) {
function insertLineWidgetsFor (line 920) | function insertLineWidgetsFor(line, lineView, dims, allowAbove) {
function positionLineWidget (line 935) | function positionLineWidget(widget, node, lineView, dims) {
function copyPos (line 965) | function copyPos(x) {return Pos(x.line, x.ch);}
function maxPos (line 966) | function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; }
function minPos (line 967) | function minPos(a, b) { return cmp(a, b) < 0 ? a : b; }
function Selection (line 976) | function Selection(ranges, primIndex) {
function Range (line 1013) | function Range(anchor, head) {
function normalizeSelection (line 1028) | function normalizeSelection(ranges, primIndex) {
function simpleSelection (line 1044) | function simpleSelection(anchor, head) {
function clipLine (line 1050) | function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.fi...
function clipPos (line 1051) | function clipPos(doc, pos) {
function clipToLen (line 1057) | function clipToLen(pos, linelen) {
function isLine (line 1063) | function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.si...
function clipPosArray (line 1064) | function clipPosArray(doc, array) {
function extendRange (line 1079) | function extendRange(doc, range, head, other) {
function extendSelection (line 1098) | function extendSelection(doc, head, other, options) {
function extendSelections (line 1104) | function extendSelections(doc, heads, options) {
function replaceOneSelection (line 1112) | function replaceOneSelection(doc, i, range, options) {
function setSimpleSelection (line 1119) | function setSimpleSelection(doc, anchor, head, options) {
function filterSelectionChange (line 1125) | function filterSelectionChange(doc, sel) {
function setSelectionReplaceHistory (line 1141) | function setSelectionReplaceHistory(doc, sel, options) {
function setSelection (line 1152) | function setSelection(doc, sel, options) {
function setSelectionNoUndo (line 1157) | function setSelectionNoUndo(doc, sel, options) {
function setSelectionInner (line 1169) | function setSelectionInner(doc, sel) {
function reCheckSelection (line 1183) | function reCheckSelection(doc) {
function skipAtomicInSelection (line 1189) | function skipAtomicInSelection(doc, sel, bias, mayClear) {
function skipAtomic (line 1204) | function skipAtomic(doc, pos, bias, mayClear) {
function drawSelection (line 1257) | function drawSelection(cm) {
function showSelection (line 1284) | function showSelection(cm, drawn) {
function updateSelection (line 1293) | function updateSelection(cm) {
function drawSelectionCursor (line 1298) | function drawSelectionCursor(cm, range, output) {
function drawSelectionRange (line 1317) | function drawSelectionRange(cm, range, output) {
function restartBlink (line 1391) | function restartBlink(cm) {
function startWorker (line 1407) | function startWorker(cm, time) {
function highlightWorker (line 1412) | function highlightWorker(cm) {
function findStartLine (line 1454) | function findStartLine(cm, n, precise) {
function getStateBefore (line 1470) | function getStateBefore(cm, n, precise) {
function paddingTop (line 1488) | function paddingTop(display) {return display.lineSpace.offsetTop;}
function paddingVert (line 1489) | function paddingVert(display) {return display.mover.offsetHeight - displ...
function paddingH (line 1490) | function paddingH(display) {
function ensureLineHeights (line 1503) | function ensureLineHeights(cm, lineView, rect) {
function mapFromLineView (line 1524) | function mapFromLineView(lineView, line, lineN) {
function updateExternalMeasurement (line 1537) | function updateExternalMeasurement(cm, line) {
function measureChar (line 1550) | function measureChar(cm, line, ch, bias) {
function findViewForLine (line 1555) | function findViewForLine(cm, lineN) {
function prepareMeasureForLine (line 1568) | function prepareMeasureForLine(cm, line) {
function measureCharPrepared (line 1588) | function measureCharPrepared(cm, prepared, ch, bias, varHeight) {
function measureCharInner (line 1610) | function measureCharInner(cm, prepared, ch, bias) {
function maybeUpdateRectForZooming (line 1702) | function maybeUpdateRectForZooming(measure, rect) {
function clearLineMeasurementCacheFor (line 1712) | function clearLineMeasurementCacheFor(lineView) {
function clearLineMeasurementCache (line 1721) | function clearLineMeasurementCache(cm) {
function clearCaches (line 1728) | function clearCaches(cm) {
function pageScrollX (line 1735) | function pageScrollX() { return window.pageXOffset || (document.document...
function pageScrollY (line 1736) | function pageScrollY() { return window.pageYOffset || (document.document...
function intoCoordSystem (line 1741) | function intoCoordSystem(cm, lineObj, rect, context) {
function fromCoordSystem (line 1763) | function fromCoordSystem(cm, coords, context) {
function charCoords (line 1780) | function charCoords(cm, pos, context, lineObj, bias) {
function cursorCoords (line 1788) | function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHei...
function estimateCoords (line 1820) | function estimateCoords(cm, pos) {
function PosWithInfo (line 1834) | function PosWithInfo(line, ch, outside, xRel) {
function coordsChar (line 1843) | function coordsChar(cm, x, y) {
function coordsCharInner (line 1864) | function coordsCharInner(cm, lineObj, lineNo, x, y) {
function textHeight (line 1906) | function textHeight(display) {
function charWidth (line 1926) | function charWidth(display) {
function startOperation (line 1948) | function startOperation(cm) {
function fireCallbacksForOps (line 1975) | function fireCallbacksForOps(group) {
function endOperation (line 1992) | function endOperation(cm) {
function endOperations (line 2007) | function endOperations(group) {
function endOperation_R1 (line 2021) | function endOperation_R1(op) {
function endOperation_W1 (line 2033) | function endOperation_W1(op) {
function endOperation_R2 (line 2037) | function endOperation_R2(op) {
function endOperation_W2 (line 2056) | function endOperation_W2(op) {
function endOperation_finish (line 2079) | function endOperation_finish(op) {
function runInOp (line 2135) | function runInOp(cm, f) {
function operation (line 2142) | function operation(cm, f) {
function methodOp (line 2152) | function methodOp(f) {
function docMethodOp (line 2160) | function docMethodOp(f) {
function LineView (line 2175) | function LineView(doc, line, lineN) {
function buildViewArray (line 2187) | function buildViewArray(cm, from, to) {
function regChange (line 2203) | function regChange(cm, from, to, lendiff) {
function regLineChange (line 2268) | function regLineChange(cm, line, type) {
function resetView (line 2282) | function resetView(cm) {
function findViewIndex (line 2290) | function findViewIndex(cm, n) {
function viewCuttingPoint (line 2301) | function viewCuttingPoint(cm, oldN, newN, dir) {
function adjustView (line 2327) | function adjustView(cm, from, to) {
function countDirtyView (line 2348) | function countDirtyView(cm) {
function slowPoll (line 2361) | function slowPoll(cm) {
function fastPoll (line 2372) | function fastPoll(cm) {
function readInput (line 2394) | function readInput(cm) {
function resetInput (line 2486) | function resetInput(cm, typing) {
function focusInput (line 2504) | function focusInput(cm) {
function ensureFocus (line 2509) | function ensureFocus(cm) {
function isReadOnly (line 2513) | function isReadOnly(cm) {
function registerEventHandlers (line 2520) | function registerEventHandlers(cm) {
function onResize (line 2654) | function onResize(cm) {
function eventInWidget (line 2664) | function eventInWidget(display, e) {
function posFromMouse (line 2675) | function posFromMouse(cm, e, liberal, forRect) {
function onMouseDown (line 2699) | function onMouseDown(e) {
function leftButtonDown (line 2737) | function leftButtonDown(cm, e, start) {
function leftButtonStartDrag (line 2761) | function leftButtonStartDrag(cm, e, start, modifier) {
function leftButtonSelect (line 2788) | function leftButtonSelect(cm, e, start, type, addNew) {
function gutterEvent (line 2927) | function gutterEvent(cm, e, type, prevent, signalfn) {
function clickInGutter (line 2950) | function clickInGutter(cm, e) {
function onDrop (line 2958) | function onDrop(e) {
function onDragStart (line 3008) | function onDragStart(cm, e) {
function setScrollTop (line 3034) | function setScrollTop(cm, val) {
function setScrollLeft (line 3045) | function setScrollLeft(cm, val, isScroller) {
function onScrollWheel (line 3075) | function onScrollWheel(cm, e) {
function doHandleBinding (line 3150) | function doHandleBinding(cm, bound, dropShift) {
function allKeyMaps (line 3171) | function allKeyMaps(cm) {
function handleKeyBinding (line 3180) | function handleKeyBinding(cm, e) {
function handleCharBinding (line 3217) | function handleCharBinding(cm, e, ch) {
function onKeyDown (line 3229) | function onKeyDown(e) {
function showCrossHair (line 3250) | function showCrossHair(cm) {
function onKeyUp (line 3265) | function onKeyUp(e) {
function onKeyPress (line 3270) | function onKeyPress(e) {
function onFocus (line 3284) | function onFocus(cm) {
function onBlur (line 3301) | function onBlur(cm) {
function onContextMenu (line 3316) | function onContextMenu(cm, e) {
function contextMenuInGutter (line 3391) | function contextMenuInGutter(cm, e) {
function adjustForChange (line 3408) | function adjustForChange(pos, change) {
function computeSelAfterChange (line 3417) | function computeSelAfterChange(doc, change) {
function offsetPos (line 3427) | function offsetPos(pos, old, nw) {
function computeReplacedSel (line 3436) | function computeReplacedSel(doc, changes, hint) {
function filterChange (line 3456) | function filterChange(doc, change, update) {
function makeChange (line 3480) | function makeChange(doc, change, ignoreReadOnly) {
function makeChangeInner (line 3502) | function makeChangeInner(doc, change) {
function makeChangeFromHistory (line 3520) | function makeChangeFromHistory(doc, type, allowSelectionOnly) {
function shiftDoc (line 3586) | function shiftDoc(doc, distance) {
function makeChangeSingleDoc (line 3602) | function makeChangeSingleDoc(doc, change, selAfter, spans) {
function makeChangeSingleDocInEditor (line 3635) | function makeChangeSingleDocInEditor(cm, change, spans) {
function replaceRange (line 3692) | function replaceRange(doc, code, from, to, origin) {
function maybeScrollWindow (line 3703) | function maybeScrollWindow(cm, coords) {
function scrollPosIntoView (line 3721) | function scrollPosIntoView(cm, pos, end, margin) {
function scrollIntoView (line 3744) | function scrollIntoView(cm, x1, y1, x2, y2) {
function calculateScrollPos (line 3754) | function calculateScrollPos(cm, x1, y1, x2, y2) {
function addToScrollPos (line 3785) | function addToScrollPos(cm, left, top) {
function ensureCursorVisible (line 3795) | function ensureCursorVisible(cm) {
function resolveScrollToPos (line 3809) | function resolveScrollToPos(cm) {
function indentLine (line 3829) | function indentLine(cm, n, how, aggressive) {
function changeLine (line 3890) | function changeLine(doc, handle, changeType, op) {
function deleteNearSelection (line 3901) | function deleteNearSelection(cm, compute) {
function findPosH (line 3933) | function findPosH(doc, pos, dir, unit, visually) {
function findPosV (line 3984) | function findPosV(cm, pos, dir, unit) {
function interpret (line 4409) | function interpret(val) {
function option (line 4465) | function option(name, deflt, handle, notOnInit) {
function getKeyMap (line 4895) | function getKeyMap(val) {
function lookup (line 4905) | function lookup(map) {
function save (line 4965) | function save() {textarea.value = cm.getValue();}
function markText (line 5209) | function markText(doc, from, to, options, type) {
function markTextShared (line 5302) | function markTextShared(doc, from, to, options, type) {
function findSharedMarkers (line 5317) | function findSharedMarkers(doc) {
function copySharedMarkers (line 5322) | function copySharedMarkers(doc, markers) {
function detachSharedMarkers (line 5334) | function detachSharedMarkers(markers) {
function MarkedSpan (line 5350) | function MarkedSpan(marker, from, to) {
function getMarkedSpanFor (line 5356) | function getMarkedSpanFor(spans, marker) {
function removeMarkedSpan (line 5364) | function removeMarkedSpan(spans, span) {
function addMarkedSpan (line 5370) | function addMarkedSpan(line, span) {
function markedSpansBefore (line 5379) | function markedSpansBefore(old, startCh, isInsert) {
function markedSpansAfter (line 5390) | function markedSpansAfter(old, endCh, isInsert) {
function stretchSpansOverChange (line 5409) | function stretchSpansOverChange(doc, change) {
function clearEmptySpans (line 5470) | function clearEmptySpans(spans) {
function mergeOldSpans (line 5484) | function mergeOldSpans(doc, change) {
function removeReadOnlyRanges (line 5507) | function removeReadOnlyRanges(doc, from, to) {
function detachMarkedSpans (line 5536) | function detachMarkedSpans(line) {
function attachMarkedSpans (line 5543) | function attachMarkedSpans(line, spans) {
function extraLeft (line 5552) | function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; }
function extraRight (line 5553) | function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; }
function compareCollapsedMarkers (line 5558) | function compareCollapsedMarkers(a, b) {
function collapsedSpanAtSide (line 5571) | function collapsedSpanAtSide(line, start) {
function collapsedSpanAtStart (line 5581) | function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, t...
function collapsedSpanAtEnd (line 5582) | function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, fal...
function conflictingCollapsedRange (line 5587) | function conflictingCollapsedRange(doc, lineNo, from, to, marker) {
function visualLine (line 5607) | function visualLine(line) {
function visualLineContinued (line 5616) | function visualLineContinued(line) {
function visualLineNo (line 5627) | function visualLineNo(doc, lineN) {
function visualLineEndNo (line 5634) | function visualLineEndNo(doc, lineN) {
function lineIsHidden (line 5646) | function lineIsHidden(doc, line) {
function lineIsHiddenInner (line 5657) | function lineIsHiddenInner(doc, line, span) {
function adjustScrollWhenAboveVisible (line 5685) | function adjustScrollWhenAboveVisible(cm, line, diff) {
function widgetHeight (line 5714) | function widgetHeight(widget) {
function addLineWidget (line 5725) | function addLineWidget(cm, handle, node, options) {
function updateLine (line 5759) | function updateLine(line, text, markedSpans, estimateHeight) {
function cleanUpLine (line 5771) | function cleanUpLine(line) {
function extractLineClasses (line 5776) | function extractLineClasses(type, output) {
function callBlankLine (line 5790) | function callBlankLine(mode, state) {
function readToken (line 5797) | function readToken(mode, stream, state) {
function runMode (line 5806) | function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) {
function highlightLine (line 5843) | function highlightLine(cm, line, state, forceToEnd) {
function getLineStyles (line 5881) | function getLineStyles(cm, line) {
function processLine (line 5894) | function processLine(cm, text, state, startAt) {
function interpretTokenStyle (line 5909) | function interpretTokenStyle(style, options) {
function buildLineContent (line 5921) | function buildLineContent(cm, lineView) {
function defaultSpecialCharPlaceholder (line 5969) | function defaultSpecialCharPlaceholder(ch) {
function buildToken (line 5977) | function buildToken(builder, text, style, startStyle, endStyle, title) {
function buildTokenSplitSpaces (line 6027) | function buildTokenSplitSpaces(inner) {
function buildTokenBadBidi (line 6041) | function buildTokenBadBidi(inner, order) {
function buildCollapsedSpan (line 6060) | function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
function insertLineContent (line 6071) | function insertLineContent(line, builder, styles) {
function isWholeLineUpdate (line 6135) | function isWholeLineUpdate(doc, change) {
function updateDoc (line 6141) | function updateDoc(doc, change, markedSpans, estimateHeight) {
function LeafChunk (line 6199) | function LeafChunk(lines) {
function BranchChunk (line 6239) | function BranchChunk(children) {
function linkedDocs (line 6688) | function linkedDocs(doc, f, sharedHistOnly) {
function attachDoc (line 6703) | function attachDoc(cm, doc) {
function getLine (line 6717) | function getLine(doc, n) {
function getBetween (line 6732) | function getBetween(doc, start, end) {
function getLines (line 6744) | function getLines(doc, from, to) {
function updateLineHeight (line 6752) | function updateLineHeight(line, height) {
function lineNo (line 6759) | function lineNo(line) {
function lineAtHeight (line 6773) | function lineAtHeight(chunk, h) {
function heightAtLine (line 6794) | function heightAtLine(lineObj) {
function getOrder (line 6816) | function getOrder(line) {
function History (line 6824) | function History(startGen) {
function historyChangeFromChange (line 6841) | function historyChangeFromChange(doc, change) {
function clearSelectionEvents (line 6850) | function clearSelectionEvents(array) {
function lastChangeEvent (line 6860) | function lastChangeEvent(hist, force) {
function addChangeToHistory (line 6875) | function addChangeToHistory(doc, change, selAfter, opId) {
function selectionEventCanBeMerged (line 6917) | function selectionEventCanBeMerged(doc, origin, prev, sel) {
function addSelectionToHistory (line 6930) | function addSelectionToHistory(doc, sel, opId, options) {
function pushSelectionToHistory (line 6952) | function pushSelectionToHistory(sel, dest) {
function attachLocalSpans (line 6959) | function attachLocalSpans(doc, change, from, to) {
function removeClearedSpans (line 6970) | function removeClearedSpans(spans) {
function getOldSpans (line 6980) | function getOldSpans(doc, change) {
function copyHistoryArray (line 6990) | function copyHistoryArray(events, newGroup, instantiateSel) {
function rebaseHistSelSingle (line 7015) | function rebaseHistSelSingle(pos, from, to, diff) {
function rebaseHistArray (line 7031) | function rebaseHistArray(array, from, to, diff) {
function rebaseHist (line 7059) | function rebaseHist(hist, change) {
function e_defaultPrevented (line 7078) | function e_defaultPrevented(e) {
function e_target (line 7083) | function e_target(e) {return e.target || e.srcElement;}
function e_button (line 7084) | function e_button(e) {
function signalLater (line 7141) | function signalLater(emitter, type /*, values...*/) {
function fireOrphanDelayed (line 7158) | function fireOrphanDelayed() {
function signalDOMEvent (line 7167) | function signalDOMEvent(cm, e, override) {
function signalCursorActivity (line 7172) | function signalCursorActivity(cm) {
function hasHandler (line 7180) | function hasHandler(emitter, type) {
function eventMixin (line 7187) | function eventMixin(ctor) {
function Delayed (line 7204) | function Delayed() {this.id = null;}
function findColumn (line 7229) | function findColumn(string, goal, tabSize) {
function spaceStr (line 7244) | function spaceStr(n) {
function lst (line 7250) | function lst(arr) { return arr[arr.length-1]; }
function indexOf (line 7258) | function indexOf(array, elt) {
function map (line 7264) | function map(array, f) {
function createObj (line 7271) | function createObj(base, props) {
function copyObj (line 7284) | function copyObj(obj, target, overwrite) {
function bind (line 7292) | function bind(f) {
function isWordChar (line 7302) | function isWordChar(ch, helper) {
function isEmpty (line 7308) | function isEmpty(obj) {
function isExtendingChar (line 7319) | function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendi...
function elt (line 7323) | function elt(tag, content, className, style) {
function removeChildren (line 7348) | function removeChildren(e) {
function removeChildrenAndAdd (line 7354) | function removeChildrenAndAdd(parent, e) {
function contains (line 7358) | function contains(parent, child) {
function activeElt (line 7365) | function activeElt() { return document.activeElement; }
function classTest (line 7373) | function classTest(cls) { return new RegExp("\\b" + cls + "\\b\\s*"); }
function rmClass (line 7374) | function rmClass(node, cls) {
function addClass (line 7378) | function addClass(node, cls) {
function joinClasses (line 7381) | function joinClasses(a, b) {
function forEachCodeMirror (line 7394) | function forEachCodeMirror(f) {
function ensureGlobalHandlers (line 7404) | function ensureGlobalHandlers() {
function registerGlobalHandlers (line 7409) | function registerGlobalHandlers() {
function scrollbarWidth (line 7437) | function scrollbarWidth(measure) {
function zeroWidthElement (line 7447) | function zeroWidthElement(measure) {
function hasBadBidiRects (line 7460) | function hasBadBidiRects(measure) {
function hasBadZoomedRects (line 7507) | function hasBadZoomedRects(measure) {
function iterateBidiSections (line 7536) | function iterateBidiSections(order, from, to, f) {
function bidiLeft (line 7549) | function bidiLeft(part) { return part.level % 2 ? part.to : part.from; }
function bidiRight (line 7550) | function bidiRight(part) { return part.level % 2 ? part.from : part.to; }
function lineLeft (line 7552) | function lineLeft(line) { var order = getOrder(line); return order ? bid...
function lineRight (line 7553) | function lineRight(line) {
function lineStart (line 7559) | function lineStart(cm, lineN) {
function lineEnd (line 7567) | function lineEnd(cm, lineN) {
function lineStartSmart (line 7577) | function lineStartSmart(cm, pos) {
function compareBidiLevel (line 7589) | function compareBidiLevel(order, a, b) {
function getBidiPartAt (line 7596) | function getBidiPartAt(order, pos) {
function moveInLine (line 7616) | function moveInLine(line, pos, dir, byUnit) {
function moveVisually (line 7628) | function moveVisually(line, start, dir, byUnit) {
function moveLogically (line 7651) | function moveLogically(line, start, dir, byUnit) {
function charType (line 7685) | function charType(code) {
function BidiSpan (line 7700) | function BidiSpan(level, from, to) {
FILE: public/assets/dashboard/js/plugins/codemirror/mode/javascript/javascript.js
function kw (line 27) | function kw(type) {return {type: type, style: "keyword"};}
function readRegexp (line 73) | function readRegexp(stream) {
function ret (line 88) | function ret(tp, style, cont) {
function tokenBase (line 92) | function tokenBase(stream, state) {
function tokenString (line 144) | function tokenString(quote) {
function tokenComment (line 160) | function tokenComment(stream, state) {
function tokenQuasi (line 172) | function tokenQuasi(stream, state) {
function findFatArrow (line 192) | function findFatArrow(stream, state) {
function JSLexical (line 222) | function JSLexical(indented, column, type, align, prev, info) {
function inScope (line 231) | function inScope(state, varname) {
function parseJS (line 240) | function parseJS(state, style, type, content, stream) {
function pass (line 264) | function pass() {
function cont (line 267) | function cont() {
function register (line 271) | function register(varname) {
function pushcontext (line 292) | function pushcontext() {
function popcontext (line 296) | function popcontext() {
function pushlex (line 300) | function pushlex(type, info) {
function poplex (line 311) | function poplex() {
function expect (line 321) | function expect(wanted) {
function statement (line 330) | function statement(type, value) {
function expression (line 356) | function expression(type) {
function expressionNoComma (line 359) | function expressionNoComma(type) {
function expressionInner (line 362) | function expressionInner(type, noComma) {
function maybeexpression (line 380) | function maybeexpression(type) {
function maybeexpressionNoComma (line 384) | function maybeexpressionNoComma(type) {
function maybeoperatorComma (line 389) | function maybeoperatorComma(type, value) {
function maybeoperatorNoComma (line 393) | function maybeoperatorNoComma(type, value, noComma) {
function quasi (line 408) | function quasi(type, value) {
function continueQuasi (line 413) | function continueQuasi(type) {
function arrowBody (line 420) | function arrowBody(type) {
function arrowBodyNoComma (line 424) | function arrowBodyNoComma(type) {
function maybelabel (line 428) | function maybelabel(type) {
function property (line 432) | function property(type) {
function objprop (line 435) | function objprop(type, value) {
function getterSetter (line 449) | function getterSetter(type) {
function afterprop (line 454) | function afterprop(type) {
function commasep (line 458) | function commasep(what, end) {
function contCommasep (line 473) | function contCommasep(what, end, info) {
function block (line 478) | function block(type) {
function maybetype (line 482) | function maybetype(type) {
function typedef (line 485) | function typedef(type) {
function vardef (line 488) | function vardef() {
function pattern (line 491) | function pattern(type, value) {
function proppattern (line 496) | function proppattern(type, value) {
function maybeAssign (line 504) | function maybeAssign(_type, value) {
function vardefCont (line 507) | function vardefCont(type) {
function maybeelse (line 510) | function maybeelse(type, value) {
function forspec (line 513) | function forspec(type) {
function forspec1 (line 516) | function forspec1(type) {
function formaybeinof (line 522) | function formaybeinof(_type, value) {
function forspec2 (line 526) | function forspec2(type, value) {
function forspec3 (line 531) | function forspec3(type) {
function functiondef (line 534) | function functiondef(type, value) {
function funarg (line 539) | function funarg(type) {
function className (line 543) | function className(type, value) {
function classNameAfter (line 546) | function classNameAfter(type, value) {
function classBody (line 550) | function classBody(type, value) {
function classGetterSetter (line 563) | function classGetterSetter(type) {
function afterModule (line 568) | function afterModule(type, value) {
function afterExport (line 572) | function afterExport(_type, value) {
function afterImport (line 577) | function afterImport(type) {
function importSpec (line 581) | function importSpec(type, value) {
function maybeFrom (line 586) | function maybeFrom(_type, value) {
function arrayLiteral (line 589) | function arrayLiteral(type) {
function maybeArrayComprehension (line 593) | function maybeArrayComprehension(type) {
function comprehension (line 598) | function comprehension(type) {
function isContinuedStatement (line 603) | function isContinuedStatement(state, textAfter) {
FILE: public/assets/dashboard/js/plugins/dataTables/jquery.dataTables.js
function _fnHungarianMap (line 272) | function _fnHungarianMap ( o )
function _fnCamelToHungarian (line 310) | function _fnCamelToHungarian ( src, user, force )
function _fnLanguageCompat (line 342) | function _fnLanguageCompat( oLanguage )
function _fnCompatOpts (line 384) | function _fnCompatOpts ( init )
function _fnCompatCols (line 405) | function _fnCompatCols ( init )
function _fnBrowserDetect (line 419) | function _fnBrowserDetect( settings )
function _fnAddColumn (line 472) | function _fnAddColumn( oSettings, nTh )
function _fnColumnOptions (line 524) | function _fnColumnOptions( oSettings, iCol, oOptions )
function _fnAdjustColumnSizing (line 622) | function _fnAdjustColumnSizing ( settings )
function _fnVisibleToColumnIndex (line 654) | function _fnVisibleToColumnIndex( oSettings, iMatch )
function _fnColumnIndexToVisible (line 672) | function _fnColumnIndexToVisible( oSettings, iMatch )
function _fnVisbleColumns (line 687) | function _fnVisbleColumns( oSettings )
function _fnGetColumns (line 701) | function _fnGetColumns( oSettings, sParam )
function _fnColumnTypes (line 715) | function _fnColumnTypes ( settings )
function _fnApplyColumnDefs (line 779) | function _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )
function _fnAddData (line 858) | function _fnAddData ( oSettings, aDataIn, nTr, anTds )
function _fnAddTr (line 906) | function _fnAddTr( settings, trs )
function _fnNodeToDataIndex (line 929) | function _fnNodeToDataIndex( oSettings, n )
function _fnNodeToColumnIndex (line 943) | function _fnNodeToColumnIndex( oSettings, iRow, n )
function _fnGetRowData (line 958) | function _fnGetRowData( oSettings, iRow, sSpecific, aiColumns )
function _fnGetCellData (line 978) | function _fnGetCellData( oSettings, iRow, iCol, sSpecific )
function _fnSetCellData (line 1023) | function _fnSetCellData( oSettings, iRow, iCol, val )
function _fnSplitObjNotation (line 1041) | function _fnSplitObjNotation( str )
function _fnGetObjectDataFn (line 1056) | function _fnGetObjectDataFn( mSource )
function _fnSetObjectDataFn (line 1176) | function _fnSetObjectDataFn( mSource )
function _fnGetDataMaster (line 1285) | function _fnGetDataMaster ( settings )
function _fnClearTable (line 1296) | function _fnClearTable( settings )
function _fnDeleteIndex (line 1311) | function _fnDeleteIndex( a, iTarget, splice )
function _fnInvalidateRow (line 1346) | function _fnInvalidateRow( settings, rowIdx, src, column )
function _fnGetRowElements (line 1397) | function _fnGetRowElements( settings, row )
function _fnCreateTr (line 1461) | function _fnCreateTr ( oSettings, iRow, nTrIn, anTds )
function _fnRowAttributes (line 1534) | function _fnRowAttributes( row )
function _fnBuildHead (line 1568) | function _fnBuildHead( oSettings )
function _fnDrawHead (line 1654) | function _fnDrawHead( oSettings, aoSource, bIncludeHidden )
function _fnDraw (line 1751) | function _fnDraw( oSettings )
function _fnReDraw (line 1890) | function _fnReDraw( settings, holdPosition )
function _fnAddOptionsHtml (line 1922) | function _fnAddOptionsHtml ( oSettings )
function _fnDetectHeader (line 2085) | function _fnDetectHeader ( aLayout, nThead )
function _fnGetUniqueThs (line 2160) | function _fnGetUniqueThs ( oSettings, nHeader, aLayout )
function _fnBuildAjax (line 2199) | function _fnBuildAjax( oSettings, data, fn )
function _fnAjaxUpdate (line 2313) | function _fnAjaxUpdate( oSettings )
function _fnAjaxParameters (line 2343) | function _fnAjaxParameters( settings )
function _fnAjaxUpdateDraw (line 2444) | function _fnAjaxUpdateDraw ( settings, json )
function _fnAjaxDataSrc (line 2494) | function _fnAjaxDataSrc ( oSettings, json )
function _fnFeatureHtmlFilter (line 2518) | function _fnFeatureHtmlFilter ( settings )
function _fnFilterComplete (line 2589) | function _fnFilterComplete ( oSettings, oInput, iForce )
function _fnFilterCustom (line 2638) | function _fnFilterCustom( oSettings )
function _fnFilterColumn (line 2676) | function _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, ca...
function _fnFilter (line 2706) | function _fnFilter( settings, input, force, regex, smart, caseInsensitive )
function _fnFilterCreateSearch (line 2758) | function _fnFilterCreateSearch( sSearch, bRegex, bSmart, bCaseInsensitive )
function _fnEscapeRegex (line 2782) | function _fnEscapeRegex ( sVal )
function _fnFilterData (line 2795) | function _fnFilterData ( settings )
function _fnFeatureHtmlInfo (line 2855) | function _fnFeatureHtmlInfo ( settings )
function _fnUpdateInfo (line 2890) | function _fnUpdateInfo ( settings )
function _fnInfoMacros (line 2928) | function _fnInfoMacros ( settings, str )
function _fnInitialise (line 2955) | function _fnInitialise ( settings )
function _fnInitComplete (line 3036) | function _fnInitComplete ( settings, json )
function _fnLengthChange (line 3050) | function _fnLengthChange ( settings, val )
function _fnFeatureHtmlLength (line 3068) | function _fnFeatureHtmlLength ( settings )
function _fnFeatureHtmlPaginate (line 3128) | function _fnFeatureHtmlPaginate ( settings )
function _fnPageChange (line 3189) | function _fnPageChange ( settings, action, redraw )
function _fnFeatureHtmlProcessing (line 3260) | function _fnFeatureHtmlProcessing ( settings )
function _fnProcessingDisplay (line 3277) | function _fnProcessingDisplay ( settings, show )
function _fnFeatureHtmlTable (line 3292) | function _fnFeatureHtmlTable ( settings )
function _fnScrollDraw (line 3440) | function _fnScrollDraw ( settings )
function _fnApplyToChildren (line 3725) | function _fnApplyToChildren( fn, an1, an2 )
function _fnCalculateColumnWidths (line 3764) | function _fnCalculateColumnWidths ( oSettings )
function _fnThrottle (line 3928) | function _fnThrottle( fn ) {
function _fnConvertToWidth (line 3962) | function _fnConvertToWidth ( width, parent )
function _fnScrollingWidthAdjust (line 3986) | function _fnScrollingWidthAdjust ( settings, n )
function _fnGetWidestNode (line 4007) | function _fnGetWidestNode( settings, colIdx )
function _fnGetMaxLenString (line 4028) | function _fnGetMaxLenString( settings, colIdx )
function _fnStringToCss (line 4052) | function _fnStringToCss( s )
function _fnScrollBarWidth (line 4076) | function _fnScrollBarWidth ()
function _fnSortFlatten (line 4119) | function _fnSortFlatten ( settings )
function _fnSort (line 4187) | function _fnSort ( oSettings )
function _fnSortAria (line 4311) | function _fnSortAria ( settings )
function _fnSortListener (line 4362) | function _fnSortListener ( settings, colIdx, append, callback )
function _fnSortAttachListener (line 4428) | function _fnSortAttachListener ( settings, attachTo, colIdx, callback )
function _fnSortingClasses (line 4460) | function _fnSortingClasses( settings )
function _fnSortData (line 4493) | function _fnSortData( settings, idx )
function _fnSaveState (line 4536) | function _fnSaveState ( oSettings )
function _fnLoadState (line 4572) | function _fnLoadState ( oSettings, oInit )
function _fnSettingsFromNode (line 4644) | function _fnSettingsFromNode ( table )
function _fnLog (line 4663) | function _fnLog( settings, level, msg, tn )
function _fnMap (line 4699) | function _fnMap( ret, src, name, mappedName )
function _fnExtend (line 4741) | function _fnExtend( out, extender, breakRefs )
function _fnBindAction (line 4777) | function _fnBindAction( n, oData, fn )
function _fnCallbackReg (line 4804) | function _fnCallbackReg( oSettings, sStore, fn, sName )
function _fnCallbackFire (line 4830) | function _fnCallbackFire( settings, callbackArr, event, args )
function _fnLengthOverflow (line 4848) | function _fnLengthOverflow ( settings )
function _fnRenderer (line 4870) | function _fnRenderer( settings, type )
function _fnDataSource (line 4899) | function _fnDataSource ( settings )
function _fnExternApiFunc (line 5677) | function _fnExternApiFunc (fn)
function _numbers (line 13467) | function _numbers ( page, pages ) {
FILE: public/assets/dashboard/js/plugins/datapicker/bootstrap-datepicker.js
function UTCDate (line 27) | function UTCDate(){
function UTCToday (line 30) | function UTCToday(){
function alias (line 34) | function alias(method){
function opts_from_el (line 1318) | function opts_from_el(el, prefix){
function opts_from_locale (line 1335) | function opts_from_locale(lang){
function match_part (line 1536) | function match_part(){
FILE: public/assets/dashboard/js/plugins/diff_match_patch/diff_match_patch.js
function diff_match_patch (line 1) | function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;thi...
function c (line 10) | function c(a){for(var b="",c=0,f=-1,g=d.length;f<a.length-1;){f=a.indexO...
function c (line 14) | function c(a,b,c){for(var d=a.substring(c,c+Math.floor(a.length/4)),e=-1...
function b (line 18) | function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt...
function d (line 30) | function d(a,d){var e=a/b.length,g=Math.abs(c-d);return!f.Match_Distance...
FILE: public/assets/dashboard/js/plugins/dropzone/dropzone.js
function require (line 12) | function require(name) {
function Emitter (line 72) | function Emitter(obj) {
function mixin (line 84) | function mixin(obj) {
function on (line 122) | function on() {
function ctor (line 267) | function ctor() { this.constructor = child; }
function Dropzone (line 543) | function Dropzone(element, options) {
FILE: public/assets/dashboard/js/plugins/echarts/echarts-all.js
function e (line 1) | function e(e,t){if(!t)return e;if(0===e.indexOf(".")){var i=t.split("/")...
function n (line 1) | function n(t){function i(i,r){if("string"==typeof i){var s=n[i];return s...
function a (line 1) | function a(i,n,a){for(var s=[],l=r[a],h=0,m=Math.min(i.length,n.length);...
function o (line 1) | function o(e){var t=r[e];if(!t)throw new Error("No "+e);if(!t.defined){v...
function t (line 1) | function t(){r.Dispatcher.call(this)}
function i (line 1) | function i(e){e.innerHTML="",this._themeConfig={},this.dom=e,this._conne...
function n (line 1) | function n(e,t,i,n,a){for(var o=e._chartList,r=o.length;r--;){var s=o[r]...
function e (line 1) | function e(e){var n=i._optionRestore[e];if(n)if(n instanceof Array)for(v...
function s (line 1) | function s(){if(V._zr){V._zr.clearAnimation();for(var e=0,t=X.length;t>e...
function t (line 1) | function t(e){return e&&1===e.nodeType&&"string"==typeof e.nodeName}
function i (line 1) | function i(e){if("object"==typeof e&&null!==e){var n=e;if(e instanceof A...
function n (line 1) | function n(e,i,n,o){if(i.hasOwnProperty(n)){var r=e[n];"object"!=typeof ...
function a (line 1) | function a(e,t,i){for(var a in t)n(e,t,a,i);return e}
function o (line 1) | function o(){if(!U)if(e("../dep/excanvas"),window.G_vmlCanvasManager){va...
function r (line 1) | function r(e,t){if(e.indexOf)return e.indexOf(t);for(var i=0,n=e.length;...
function s (line 1) | function s(e,t){function i(){}var n=e.prototype;i.prototype=t.prototype,...
function l (line 1) | function l(e,t,i){if(e&&t)if(e.forEach&&e.forEach===p)e.forEach(t,i);els...
function h (line 1) | function h(e,t,i){if(e&&t){if(e.map&&e.map===c)return e.map(t,i);for(var...
function m (line 1) | function m(e,t,i){if(e&&t){if(e.filter&&e.filter===u)return e.filter(t,i...
function V (line 1) | function V(e,t){return function(){e.apply(t,arguments)}}
function t (line 1) | function t(e){return"undefined"!=typeof e.zrenderX&&e.zrenderX||"undefin...
function i (line 1) | function i(e){return"undefined"!=typeof e.zrenderY&&e.zrenderY||"undefin...
function n (line 1) | function n(e){return"undefined"!=typeof e.zrenderDelta&&e.zrenderDelta||...
function e (line 1) | function e(e){var t=this.os={},i=this.browser={},n=e.match(/Web[kK]it[\/...
function t (line 1) | function t(e){return function(){e._needsRefreshNextFrame&&e.refresh()}}
function t (line 3) | function t(e,t,n,a,r){i.call(this,e,t,n,a,r),this._nameConnector,this._v...
function t (line 3) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.dom=o.dom,this._magicT...
function t (line 3) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}
function t (line 3) | function t(e,t,o,r,s){i.call(this,e,t,o,r,s),this.dom=s.dom;var l=this;l...
function t (line 4) | function t(e,t,n,a,o){if(!this.query(a,"legend.data"))return void consol...
function e (line 5) | function e(e,t,i,n,a,o,r,s){var l;return"undefined"!=typeof n&&(l=null==...
function t (line 5) | function t(e,t){var i=e._echartsData;if(!t)return i;switch(t){case"serie...
function i (line 5) | function i(e,t,i){switch(e._echartsData=e._echartsData||{},t){case"serie...
function n (line 5) | function n(e,t){t._echartsData={_series:e._echartsData._series,_seriesIn...
function t (line 5) | function t(e){D=e}
function i (line 5) | function i(){D=N}
function n (line 5) | function n(e,t){return e=0|e,t=t||D,t[e%t.length]}
function a (line 5) | function a(e){B=e}
function o (line 5) | function o(){H=B}
function r (line 5) | function r(){return B}
function s (line 5) | function s(e,t,i,n,a,o,r){O||(O=P.getContext());for(var s=O.createRadial...
function l (line 5) | function l(e,t,i,n,a){O||(O=P.getContext());for(var o=O.createLinearGrad...
function h (line 5) | function h(e,t,i){e=p(e),t=p(t),e=I(e),t=I(t);for(var n=[],a=(t[0]-e[0])...
function m (line 5) | function m(e,t){var i=[],n=e.length;if(void 0===t&&(t=20),1===n)i=h(e[0]...
function V (line 5) | function V(e,t){if(t=t||"rgb",e&&(3===e.length||4===e.length)){if(e=C(e,...
function U (line 5) | function U(e){e=L(e),e.indexOf("rgba")<0&&(e=p(e));var t=[],i=0;return e...
function d (line 5) | function d(e,t){if(!E(e))return e;var i=I(e),n=i[3];return"undefined"==t...
function p (line 5) | function p(e){return d(e,"rgba")}
function c (line 5) | function c(e){return d(e,"rgb")}
function u (line 5) | function u(e){return d(e,"hex")}
function y (line 5) | function y(e){return d(e,"hsva")}
function g (line 5) | function g(e){return d(e,"hsv")}
function b (line 5) | function b(e){return d(e,"hsba")}
function f (line 5) | function f(e){return d(e,"hsb")}
function k (line 5) | function k(e){return d(e,"hsla")}
function x (line 5) | function x(e){return d(e,"hsl")}
function _ (line 5) | function _(e){for(var t in G)if(u(G[t])===u(e))return t;return null}
function L (line 5) | function L(e){return String(e).replace(/\s+/g,"")}
function W (line 5) | function W(e){if(G[e]&&(e=G[e]),e=L(e),e=e.replace(/hsv/i,"hsb"),/^#[\da...
function X (line 5) | function X(e,t){if(!E(e))return e;var i=t>0?1:-1;"undefined"==typeof t&&...
function v (line 5) | function v(e){if(!E(e))return e;var t=I(p(e));return t=C(t,function(e){r...
function w (line 5) | function w(e,t,i){if(!E(e)||!E(t))return e;"undefined"==typeof i&&(i=.5)...
function K (line 5) | function K(){return"#"+(Math.random().toString(16)+"0000").slice(2,8)}
function I (line 5) | function I(e){e=W(e);var t=e.match(R);if(null===t)throw new Error("The c...
function J (line 5) | function J(e,t){if(!E(e))return e;null===t&&(t=1);var i=I(p(e));return i...
function C (line 5) | function C(e,t){if("function"!=typeof t)throw new TypeError;for(var i=e?...
function S (line 5) | function S(e,t){return e<=t[0]?e=t[0]:e>=t[1]&&(e=t[1]),e}
function E (line 5) | function E(e){return e instanceof Array||"string"==typeof e}
function F (line 5) | function F(e){var t,i,n,a=e[0],o=e[1],r=e[2];if(0===o)t=255*r,i=255*r,n=...
function T (line 5) | function T(e){var t,i,n,a=e[0],o=e[1],r=e[2];if(0===o)t=255*r,i=255*r,n=...
function z (line 5) | function z(e,t,i){return 0>i&&(i+=1),i>1&&(i-=1),1>6*i?e+6*(t-e)*i:1>2*i...
function A (line 5) | function A(e){var t,i,n=e[0]/255,a=e[1]/255,o=e[2]/255,r=Math.min(n,a,o)...
function M (line 5) | function M(e){var t,i,n=e[0]/255,a=e[1]/255,o=e[2]/255,r=Math.min(n,a,o)...
function t (line 5) | function t(e,t,i,a,o){n.call(this,e,t,i,a,o);var r=this;if(r._onclick=fu...
function i (line 5) | function i(e,t){var i=2,n=t.x+i,a=t.y+i+2,r=t.width-i,s=t.height-i,l=t.s...
function e (line 5) | function e(e){return null!=h[e].name?h[e].name:h[e]+""}
function t (line 5) | function t(e){i.call(this,e)}
function t (line 5) | function t(e){i.call(this,e)}
function t (line 5) | function t(e){i.call(this,e)}
function t (line 5) | function t(e){i.call(this,e)}
function t (line 7) | function t(e){i.call(this,e)}
function t (line 7) | function t(e){i.call(this,e)}
function e (line 7) | function e(){return this.context_||(this.context_=new f(this))}
function t (line 7) | function t(e,t){var i=O.call(arguments,2);return function(){return e.app...
function i (line 7) | function i(e){return String(e).replace(/&/g,"&").replace(/"/g,""...
function n (line 7) | function n(e,t,i){e.namespaces[t]||e.namespaces.add(t,i,"#default#VML")}
function a (line 7) | function a(e){if(n(e,"g_vml_","urn:schemas-microsoft-com:vml"),n(e,"g_o_...
function o (line 7) | function o(e){var t=e.srcElement;switch(e.propertyName){case"width":t.ge...
function r (line 7) | function r(e){var t=e.srcElement;t.firstChild&&(t.firstChild.style.width...
function s (line 7) | function s(){return[[1,0,0],[0,1,0],[0,0,1]]}
function l (line 7) | function l(e,t){for(var i=s(),n=0;3>n;n++)for(var a=0;3>a;a++){for(var o...
function h (line 7) | function h(e,t){t.fillStyle=e.fillStyle,t.lineCap=e.lineCap,t.lineJoin=e...
function m (line 7) | function m(e){var t=e.indexOf("(",3),i=e.indexOf(")",t+1),n=e.substring(...
function V (line 7) | function V(e){return parseFloat(e)/100}
function U (line 7) | function U(e,t,i){return Math.min(i,Math.max(t,e))}
function d (line 7) | function d(e){var t,i,n,a,o,r;if(a=parseFloat(e[0])/360%360,0>a&&a++,o=U...
function p (line 7) | function p(e,t,i){return 0>i&&i++,i>1&&i--,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3...
function c (line 7) | function c(e){if(e in R)return R[e];var t,i=1;if(e=String(e),"#"==e.char...
function u (line 7) | function u(e){if(Y[e])return Y[e];var t,i=document.createElement("div"),...
function y (line 7) | function y(e,t){var i={};for(var n in e)i[n]=e[n];var a=parseFloat(t.cur...
function g (line 7) | function g(e){return e.style+" "+e.variant+" "+e.weight+" "+e.size+"px '...
function b (line 7) | function b(e){return Q[e]||"square"}
function f (line 7) | function f(e){this.m_=s(),this.mStack_=[],this.aStack_=[],this.currentPa...
function k (line 7) | function k(e,t,i,n){e.currentPath_.push({type:"bezierCurveTo",cp1x:t.x,c...
function x (line 7) | function x(e,t){var i=c(e.strokeStyle),n=i.color,a=i.alpha*e.globalAlpha...
function _ (line 7) | function _(e,t,i,n){var a=e.fillStyle,o=e.scaleX_,r=e.scaleY_,s=n.x-i.x,...
function L (line 7) | function L(e,t,i){var n=e.m_;return{x:A*(t*n[0][0]+i*n[1][0]+n[2][0])-M,...
function W (line 7) | function W(e){return isFinite(e[0][0])&&isFinite(e[0][1])&&isFinite(e[1]...
function X (line 7) | function X(e,t,i){if(W(t)&&(e.m_=t,e.scaleX_=Math.sqrt(t[0][0]*t[0][0]+t...
function v (line 7) | function v(e){this.type_=e,this.x0_=0,this.y0_=0,this.r0_=0,this.x1_=0,t...
function w (line 7) | function w(e,t){switch(I(e),t){case"repeat":case null:case"":this.repeti...
function K (line 7) | function K(e){throw new J(e)}
function I (line 7) | function I(e){e&&1==e.nodeType&&"IMG"==e.tagName||K("TYPE_MISMATCH_ERR")...
function J (line 7) | function J(e){this.code=this[e],this.message=e+": DOM Exception "+this.c...
function t (line 7) | function t(e,t){return function(i,n){return e.call(t,i,n)}}
function i (line 7) | function i(e,t){return function(i,n,a){return e.call(t,i,n,a)}}
function n (line 7) | function n(e){for(var i=d.length;i--;){var n=d[i];e["_"+n+"Handler"]=t(c...
function a (line 7) | function a(e,t,i){if(this._draggingTarget&&this._draggingTarget.id==e.id...
function t (line 8) | function t(){return!1}
function i (line 8) | function i(){}
function n (line 8) | function n(e){return e?e.isBuildin?!0:"function"!=typeof e.resize||"func...
function t (line 8) | function t(e,t){return e.zlevel==t.zlevel?e.z==t.z?e.__renderidx-t.__ren...
function t (line 8) | function t(e,t){return e[t]}
function i (line 8) | function i(e,t,i){e[t]=i}
function n (line 8) | function n(e,t,i){return(t-e)*i+e}
function a (line 8) | function a(e,t,i,a,o){var r=e.length;if(1==o)for(var s=0;r>s;s++)a[s]=n(...
function o (line 8) | function o(e){switch(typeof e){case"undefined":case"string":return!1}ret...
function r (line 8) | function r(e,t,i,n,a,o,r,l,h){var m=e.length;if(1==h)for(var V=0;m>V;V++...
function s (line 8) | function s(e,t,i,n,a,o,r){var s=.5*(i-e),l=.5*(n-t);return(2*(t-i)+s+l)*...
function l (line 8) | function l(e){if(o(e)){var t=e.length;if(o(e[0])){for(var i=[],n=0;t>n;n...
function h (line 8) | function h(e){return e[0]=Math.floor(e[0]),e[1]=Math.floor(e[1]),e[2]=Ma...
function e (line 8) | function e(){t._running&&(p(e),t._update())}
function t (line 8) | function t(e){this.setOptions(e)}
function t (line 8) | function t(t){e.storage.addHover(t)}
function i (line 8) | function i(){e.refreshHover()}
function t (line 8) | function t(){return!1}
function i (line 8) | function i(e,t,i){var n=document.createElement(t),a=i.getWidth(),o=i.get...
function t (line 9) | function t(e){return e%=C,0>e&&(e+=C),e}
function i (line 9) | function i(e,t,i,o){if(!t||!e)return!1;var r=e.type;L=L||W.getContext();...
function n (line 9) | function n(e,t,i,n){var a=e.type;switch(a){case"bezier-curve":return"und...
function a (line 9) | function a(e,t,i,n,a){return t.beginPath(),e.buildPath(t,i),t.closePath(...
function o (line 9) | function o(e,t,n,a){return!i(e,t,n,a)}
function r (line 9) | function r(e,t,i,n,a,o,r){if(0===a)return!1;var s=Math.max(a,5),l=0,h=e;...
function s (line 9) | function s(e,t,i,n,a,o,r,s,l,h,m){if(0===l)return!1;var V=Math.max(l,5);...
function l (line 9) | function l(e,t,i,n,a,o,r,s,l){if(0===r)return!1;var h=Math.max(r,5);if(l...
function h (line 9) | function h(e,i,n,a,o,r,s,l,h){if(0===s)return!1;var m=Math.max(s,5);l-=e...
function m (line 9) | function m(e,t,i,n){for(var t=Math.max(t,10),a=0,o=e.length-1;o>a;a++){v...
function V (line 9) | function V(e,t,i,n,a,o){var r=(a-e)*(a-e)+(o-t)*(o-t);return n*n>r&&r>i*i}
function U (line 9) | function U(e,t,i,n,a,o){return a>=e&&e+i>=a&&o>=t&&t+n>=o}
function d (line 9) | function d(e,t,i,n,a){return i*i>(n-e)*(n-e)+(a-t)*(a-t)}
function p (line 9) | function p(e,t,i,n,a,o,r,s,l){return h(e,t,(i+n)/2,a,o,r,n-i,s,l)}
function c (line 9) | function c(e,t,i){for(var n=e.length,a=0,o=0,r=n-1;n>o;o++){var s=e[r][0...
function u (line 9) | function u(e,t,i,n,a,o){if(o>t&&o>n||t>o&&n>o)return 0;if(n==t)return 0;...
function y (line 9) | function y(){var e=E[0];E[0]=E[1],E[1]=e}
function g (line 9) | function g(e,t,i,n,a,o,r,s,l,h){if(h>t&&h>n&&h>o&&h>s||t>h&&n>h&&o>h&&s>...
function b (line 9) | function b(e,t,i,n,a,o,r,s){if(s>t&&s>n&&s>o||t>s&&n>s&&o>s)return 0;var...
function f (line 9) | function f(e,i,n,a,o,r,s,l){if(l-=i,l>n||-n>l)return 0;var h=Math.sqrt(n...
function k (line 9) | function k(e,t,i,n,a){var o=0,m=0,V=0,U=0,d=0,p=!0,c=!0;i=i||"fill";for(...
function x (line 9) | function x(e,t){var i=e+":"+t;if(v[i])return v[i];L=L||W.getContext(),L....
function _ (line 9) | function _(e,t){var i=e+":"+t;if(w[i])return w[i];L=L||W.getContext(),L....
function t (line 9) | function t(t,n,a,o,r,s,l){r&&(t.font=r),t.textAlign=s,t.textBaseline=l;v...
function i (line 9) | function i(t,i,n,a,o,r){var s=e("../tool/area"),l=s.getTextWidth(t,a),h=...
function t (line 9) | function t(e){return e>-u&&u>e}
function i (line 9) | function i(e){return e>u||-u>e}
function n (line 9) | function n(e,t,i,n,a){var o=1-a;return o*o*(o*e+3*a*t)+a*a*(a*n+3*o*i)}
function a (line 9) | function a(e,t,i,n,a){var o=1-a;return 3*(((t-e)*o+2*(i-t)*a)*o+(n-i)*a*a)}
function o (line 9) | function o(e,i,n,a,o,r){var s=a+3*(i-n)-e,l=3*(n-2*i+e),h=3*(i-e),m=e-o,...
function r (line 9) | function r(e,n,a,o,r){var s=6*a-12*n+6*e,l=9*n+3*o-3*e-9*a,h=3*n-3*e,m=0...
function s (line 9) | function s(e,t,i,n,a,o){var r=(t-e)*a+e,s=(i-t)*a+t,l=(n-i)*a+i,h=(s-r)*...
function l (line 9) | function l(e,t,i,a,o,r,s,l,h,m,V){var U,d=.005,p=1/0;b[0]=h,b[1]=m;for(v...
function h (line 9) | function h(e,t,i,n){var a=1-n;return a*(a*e+2*n*t)+n*n*i}
function m (line 9) | function m(e,t,i,n){return 2*((1-n)*(t-e)+n*(i-t))}
function V (line 9) | function V(e,n,a,o,r){var s=e-2*n+a,l=2*(n-e),h=e-o,m=0;if(t(s)){if(i(l)...
function U (line 9) | function U(e,t,i){var n=e+i-2*t;return 0===n?.5:(e-t)/n}
function d (line 9) | function d(e,t,i,n,a){var o=(t-e)*n+e,r=(i-t)*n+t,s=(r-o)*n+o;a[0]=e,a[1...
function p (line 9) | function p(e,t,i,n,a,o,r,s,l){var m,V=.005,U=1/0;b[0]=r,b[1]=s;for(var d...
function t (line 9) | function t(e){return e>-s&&s>e}
function i (line 9) | function i(e){return e>s||-s>e}
function t (line 9) | function t(e){this._targetPool=e.target||{},this._targetPool instanceof ...
function t (line 9) | function t(e){return null!=e.x&&null!=e.y}
function i (line 9) | function i(e,t,i,n,a){p.call(this,e,t,i,n,a);var o=this;this.selectedMap...
function e (line 11) | function e(e,t){e[t]=e[t]instanceof Array?e[t].length>1?e[t]:[e[t][0],e[...
function e (line 11) | function e(e,t){var i=e.toString(),n=t.toString(),a=0;try{a=n.split(".")...
function t (line 11) | function t(e,t){var i=e.toString(),n=t.toString(),a=0;try{a+=i.split("."...
function i (line 11) | function i(e,t){var i=0,n=0;try{i=e.toString().split(".")[1].length}catc...
function n (line 11) | function n(e,t){return i(e,-t)}
function t (line 11) | function t(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+...
function i (line 11) | function i(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+...
function n (line 11) | function n(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i+4*...
function a (line 11) | function a(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+...
function o (line 11) | function o(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i+6*...
function r (line 11) | function r(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16,r=t.width/2;e...
function s (line 11) | function s(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n)...
function l (line 11) | function l(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n)...
function h (line 11) | function h(e,t){var i=t.x,n=t.y,a=t.width-2,o=t.height-2,r=Math.min(a,o)...
function m (line 11) | function m(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;n-=o,e.moveTo...
function V (line 11) | function V(e,t){var i=t.x,n=t.y,a=t.width,o=t.height,r=a/16,s=o/16,l=2*M...
function U (line 11) | function U(e,t){var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.min(a,o)/2;e...
function d (line 11) | function d(e,t){for(var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.round(o/...
function p (line 11) | function p(e,t){for(var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.round(a/...
function c (line 11) | function c(e,t){var i=t.x,n=t.y,a=t.width/16;e.moveTo(i+a,n),e.lineTo(i+...
function u (line 11) | function u(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n)...
function y (line 11) | function y(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;e.moveTo(i,n+o/2),e...
function g (line 11) | function g(e,t){var i=t.width/2,n=t.height/2,a=Math.min(i,n);e.moveTo(t....
function b (line 11) | function b(e,t){e.rect(t.x,t.y,t.width,t.height),e.closePath()}
function f (line 11) | function f(e,t){var i=t.width/2,n=t.height/2,a=t.x+i,o=t.y+n,r=Math.min(...
function k (line 11) | function k(e,t){var i=t.width/2,n=t.height/2,a=t.x+i,o=t.y+n,r=Math.min(...
function x (line 11) | function x(e,t){var i=t.x,n=t.y,a=t.width/16;e.moveTo(i+8*a,n),e.lineTo(...
function _ (line 11) | function _(t,i){var n=e("zrender/shape/Star"),a=i.width/2,o=i.height/2;n...
function L (line 11) | function L(t,i){var n=e("zrender/shape/Heart");n.prototype.buildPath(t,{...
function W (line 11) | function W(t,i){var n=e("zrender/shape/Droplet");n.prototype.buildPath(t...
function X (line 11) | function X(e,t){var i=t.x,n=t.y-t.height/2*1.5,a=t.width/2,o=t.height/2,...
function v (line 11) | function v(t,i,n){var a=e("zrender/shape/Image");this._imageShape=this._...
function w (line 11) | function w(e){I.call(this,e)}
function t (line 11) | function t(e){i.call(this,e),this.style.curveness>0&&this.updatePoints(t...
function t (line 11) | function t(e){i.call(this,e)}
function t (line 11) | function t(e,t,i,n,a){var o,r=i.style.pointList,s=r.length;if(!t){if(o=[...
function i (line 11) | function i(e,t){for(var i=arguments.length,n=2;i>n;n++){var a=arguments[...
function n (line 11) | function n(e,t,n,a,o){var r=n.style;t||(t={position:n.position,style:{x:...
function a (line 11) | function a(e,t,i,n,a){if(!t){var o=i.style.y;t={style:{y:[o[0],o[0],o[0]...
function o (line 11) | function o(e,t,i,n,a){var o=i.style.x,r=i.style.y,s=i.style.r0,l=i.style...
function r (line 11) | function r(e,t,n,a,o){t||(t="r"!=n._animationAdd?{
function s (line 12) | function s(e,t,n,a,o){t||(t={style:{x:"left"==n.style.textAlign?n.style....
function l (line 12) | function l(t,i,n,a,o){var r=e("zrender/shape/Polygon").prototype.getRect...
function h (line 12) | function h(e,t,n,a,o){t||(t={style:{source0:0,source1:n.style.source1>0?...
function m (line 12) | function m(e,t,i,n,a){t||(t={style:{angle:i.style.startAngle}});var o=i....
function V (line 12) | function V(e,t,i,a,o,r){if(i.style._x=i.style.x,i.style._y=i.style.y,i.s...
function U (line 12) | function U(e,t,n,a,o){t||(t={style:{xStart:n.style.xStart,yStart:n.style...
function d (line 12) | function d(e,t,i,n,a){a=a||"QuinticOut",i.__animating=!0,e.addShape(i);v...
function t (line 12) | function t(e,t,i,n){var a,r=i.effect,l=r.color||i.style.strokeColor||i.s...
function i (line 12) | function i(e,t,i,n){var a=i.effect,o=a.color||i.style.strokeColor||i.sty...
function n (line 12) | function n(e,t,i,n,a){var s=i.effect,h=i.style,m=s.color||h.strokeColor|...
function a (line 12) | function a(e,t,i,a){var o=new V({style:{shapeList:[]},zlevel:a,hoverable...
function t (line 12) | function t(e,t,a,o,r){this.ecTheme=e,this.messageCenter=t,this.zr=a,this...
function t (line 12) | function t(e,t){e=e.array,t=t.array;var i=t[0]-e[0],n=t[1]-e[1],a=t[2]-e...
function i (line 12) | function i(e){this.points=[e.mp0,e.mp1],this.group=e}
function n (line 12) | function n(e){var t=e.points;t[0][1]<t[1][1]||e instanceof i?(this.array...
function a (line 12) | function a(){this.edgeList=[],this.mp0=l(),this.mp1=l(),this.ink=0}
function o (line 12) | function o(){this.maxNearestEdge=6,this.maxTurningAngle=Math.PI/4,this.m...
function t (line 12) | function t(e,t){return h(e,t)<1e-10}
function n (line 12) | function n(e,i){for(var n=[],a=0,o=0;o<e.length;o++)a>0&&t(e[o],n[a-1])|...
function e (line 12) | function e(e,t){return Math.sin(t?e*a:e)}
function t (line 12) | function t(e,t){return Math.cos(t?e*a:e)}
function i (line 12) | function i(e){return e*a}
function n (line 12) | function n(e){return e/a}
function t (line 12) | function t(e,t,i,n,a,o,r){var s=.5*(i-e),l=.5*(n-t);return(2*(t-i)+s+l)*...
function t (line 12) | function t(e,t){if("undefined"!=typeof e){if(!t)return e;t=t.split(".");...
function i (line 12) | function i(e,i){for(var n,a=0,o=e.length;o>a;a++)if(n=t(e[a],i),"undefin...
function n (line 12) | function n(e,i){for(var n,o=e.length;o--;){var r=t(e[o],i);"undefined"!=...
function e (line 12) | function e(e){return e.replace(/^\s+/,"").replace(/\s+$/,"")}
function t (line 12) | function t(t,i){return"string"==typeof t?e(t).match(/%$/)?parseFloat(t)/...
function i (line 12) | function i(e,i){return[t(i[0],e.getWidth()),t(i[1],e.getHeight())]}
function n (line 12) | function n(e,i){i instanceof Array||(i=[0,i]);var n=Math.min(e.getWidth(...
function a (line 12) | function a(e){return isNaN(e)?"-":(e=(e+"").split("."),e[0].replace(/(\d...
function o (line 12) | function o(e){for(var t=1,i=0;Math.round(e*t)/t!==e;)t*=10,i++;return i}
function t (line 12) | function t(e,t){this.left=null,this.right=null,this.axis=e,this.data=t}
function e (line 12) | function e(e,t){return e-t}
function t (line 12) | function t(e,t,i){var n=e[t];e[t]=e[i],e[i]=n}
function i (line 12) | function i(e,i,n,a,o){for(var r=i;n>i;){var r=Math.round((n+i)/2),s=e[r]...
function n (line 12) | function n(t,n,a,o,r){return arguments.length<=3&&(o=n,r=2==arguments.le...
function t (line 12) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.dom=o.dom,this._tDom=d...
function t (line 13) | function t(e){i.call(this,e)}
function t (line 13) | function t(e){i.call(this,e)}
function t (line 13) | function t(e,t,i){if(0!==e.length){for(var n=e[0][0],a=e[0][0],o=e[0][1]...
function i (line 13) | function i(e,t,i,n,a,r){var s=[];o.cubicExtrema(e[0],t[0],i[0],n[0],s);f...
function n (line 13) | function n(e,t,i,n,a){var r=o.quadraticExtremum(e[0],t[0],i[0]),s=o.quad...
function t (line 13) | function t(e){i.call(this,e)}
function t (line 13) | function t(e,t,n,a,o,r){i.call(this,e,t,n,a,o),this.axisType=r,this._axi...
function t (line 13) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}
function t (line 13) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._ondrift=funct...
function t (line 15) | function t(e,t,n,a,o,r){if(a.data.length<1)return void console.error("op...
function t (line 15) | function t(e,t,n,a,o,r,s){if(!s||0===s.length)return void console.err("o...
function e (line 15) | function e(e,t,i){i=i>1?i:2;for(var n,a,o,r,s=0,l=m.length;l>s;s++)if(n=...
function t (line 15) | function t(e){return 10>e?"0"+e:e}
function i (line 15) | function i(e,i){("week"==e||"month"==e||"quarter"==e||"half-year"==e||"y...
function n (line 15) | function n(e){return e=h(e),e.setDate(e.getDate()+8-e.getDay()),e}
function a (line 15) | function a(e,t,i){return e=h(e),e.setMonth(Math.ceil((e.getMonth()+1)/i)...
function o (line 15) | function o(e,t){return a(e,t,1)}
function r (line 15) | function r(e,t){return a(e,t,3)}
function s (line 15) | function s(e,t){return a(e,t,6)}
function l (line 15) | function l(e,t){return a(e,t,12)}
function h (line 15) | function h(e){return e instanceof Date?e:new Date("string"==typeof e?e.r...
function e (line 15) | function e(e){return X.log(I(e))/X.LN10}
function t (line 15) | function t(e){return X.pow(10,e)}
function i (line 15) | function i(e){return e===w(e)}
function n (line 15) | function n(e,t,n,a){b=a||{},f=b.steps||L,k=b.secs||W,n=v(+n||0)%99,e=+e|...
function a (line 15) | function a(e,i,n,a){a=a||0;var s=o((i-e)/n,-1),l=o(e,-1,1),h=o(i,-1),m=X...
function o (line 15) | function o(n,a,o){a=v(a%10)||2,0>a&&(i(n)?a=(""+I(n)).replace(/0+$/,"")....
function r (line 15) | function r(e,i,n){var a=i.e-e.e;a&&(e.e+=a,e.c*=t(-a),e.c=n?w(e.c):K(e.c))}
function s (line 15) | function s(e,t,i){e.e<t.e?r(t,e,i):r(e,t,i)}
function l (line 15) | function l(e,t){t=t||L,e=o(e);for(var i=e.c,n=0;i>t[n];)n++;if(!t[n])for...
function h (line 15) | function h(e,t,n){var s,h=n||+k.slice(-1),p=l((t-e)/h,f),u=o(t-e),g=o(e,...
function m (line 15) | function m(e,i){for(var n,a,o,r,s=[],h=k.length;h--;)n=k[h],a=l((i.c-e.c...
function V (line 15) | function V(e,i,n){for(var a,o,r=i.c,s=(i.c-e.c)/n-1;r>e.c;)s=l(s+1,f),s=...
function U (line 15) | function U(e,n,a,o,r,s){var l=r.c-o.c,h=l/s*t(r.e);if(!i(h)&&(h=w(h),l=h...
function d (line 15) | function d(e,t,i){if(i=i||5,x)t=e+i;else if(_)e=t-i;else{var n=i-(t-e),o...
function p (line 15) | function p(e,t,i){i=i||5;var n=X.min(I(t/i),i)/2.1;return x?t=e+n:_?e=t-...
function c (line 15) | function c(e,t,i,n){
function u (line 16) | function u(e){return e=(+e).toFixed(15).split("."),e.pop().replace(/0+$/...
function y (line 16) | function y(e,t,i,n){if(x){var a=o(e,4,1);i.e-a.e>6&&(a={c:0,e:i.e}),s(i,...
function g (line 16) | function g(e,t,i){var n=i?[i]:k,s=t-e;if(0===s)return t=o(t,3),i=n[0],t....
function t (line 16) | function t(e){return i(),u=e||{},n(),a(),[o(),i()][0]}
function i (line 16) | function i(){U=u=g=c=b=f=y=k=d=p=null}
function n (line 16) | function n(){d=u.logLabelBase,null==d?(p="plain",d=10,c=I):(d=+d,1>d&&(d...
function a (line 16) | function a(){function e(){y>m&&(y=m);var e=w(l(m/y)),t=v(l(m/e)),i=e*t,n...
function o (line 16) | function o(){for(var e=[],t=0,i=k.length;i>t;t++)e[t]=(U?1:-1)*k[t];!U&&...
function r (line 16) | function r(){if("exponent"===p){var e=d,t=c;return function(i){if(!isFin...
function s (line 16) | function s(){var e=U,t=g;return{value2Coord:function(i){return null==i||...
function l (line 16) | function l(e){return+Number(+e).toFixed(14)}
function h (line 16) | function h(e){return Number(e).toFixed(15).replace(/\.?0*$/,"")}
function m (line 16) | function m(e){e=h(Math.round(e));for(var t=[],i=0,n=e.length;n>i;i++){va...
function V (line 16) | function V(e){return e>-S&&S>e}
function t (line 16) | function t(e,t,i,a,o){n.call(this,e,t,i,a,o),this.refresh(a)}
function i (line 16) | function i(e,t,i){var n=t.x,a=t.y,r=t.width,s=t.height,l=s/2;t.symbol.ma...
function i (line 16) | function i(){c--,0===c&&t&&t()}
function n (line 16) | function n(e){e.style.controlPointList=null}
function t (line 16) | function t(e){i.call(this,e)}
function t (line 16) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}
function i (line 16) | function i(){c--,0===c&&t&&t()}
function t (line 16) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}
function t (line 16) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var s=this;s._ondrift=funct...
function t (line 18) | function t(e){i.call(this,e)}
function t (line 18) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}
function i (line 18) | function i(){p--,0===p&&t&&t()}
function t (line 18) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r.shapeHandler.o...
function a (line 19) | function a(t,i,n){for(var a=t;i>a;a++)if(e[a]._rect.y+=n,e[a].style.y+=n...
function o (line 19) | function o(t,i){for(var n=t;n>=0&&(e[n]._rect.y-=i,e[n].style.y-=i,e[n]....
function r (line 19) | function r(e,t,i,n,a){for(var o,r,s,l=i[0],h=i[1],m=a>0?t?Number.MAX_VAL...
function i (line 19) | function i(){s--,0===s&&t&&t()}
function t (line 19) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}
function t (line 19) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}
function a (line 19) | function a(e){(e>o||void 0===o)&&(o=e),(r>e||void 0===r)&&(r=e)}
function t (line 19) | function t(e,t){return[e*n.sin(t),e*n.cos(t)]}
function i (line 19) | function i(e,t){return[Math.sqrt(e*e+t*t),Math.atan(t/e)]}
function t (line 19) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.scaleLineLength=4,this...
function t (line 21) | function t(e){i.call(this,e),this._pathProxy=new n}
function t (line 21) | function t(e,t,o,h,m){var V=this;r.call(this,e,t,o,h,m),this.__nodePosit...
function i (line 21) | function i(e){if(this.isDragstart&&e.target){var t=e.target;t.fixed=!0,t...
function n (line 21) | function n(){this._layout.temperature=.8,this._step()}
function a (line 21) | function a(e,t){if(this.isDragend&&e.target){var i=e.target;i.fixed=!1,t...
function o (line 21) | function o(e,t,i){var n=y.create();return n[0]=(Math.random()-.5)*i+e,n[...
function t (line 21) | function t(){if("undefined"!=typeof Worker&&"undefined"!=typeof Blob)try...
function t (line 21) | function t(){this.subRegions=[],this.nSubRegions=0,this.node=null,this.m...
function i (line 21) | function i(){this.position=r.create(),this.force=r.create(),this.forcePr...
function n (line 21) | function n(e,t){this.node1=e,this.node2=t,this.weight=1}
function a (line 21) | function a(){this.barnesHutOptimize=!1,this.barnesHutTheta=1.5,this.repu...
function t (line 23) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._onmousewheel=...
function t (line 23) | function t(e,t){for(var i=0;i<e.pointList.length;i++){var n=e.pointList[...
function i (line 23) | function i(e,t){e.xStart*=t,e.yStart*=t,e.xEnd*=t,e.yEnd*=t,null!=e.cpX1...
function t (line 24) | function t(e,t,n,a,o){if(this.rcOption={},a.roamController&&a.roamContro...
function e (line 24) | function e(e){if(this.option=e,e)for(var i in t)this.option[i]=void 0!==...
function t (line 24) | function t(e){if(!e.UTF8Encoding)return e;for(var t=e.features,n=0;n<t.l...
function i (line 24) | function i(e,t){for(var i=[],n=t[0],a=t[1],o=0;o<e.length;o+=2){var r=e....
function t (line 24) | function t(e){return parseFloat(e||0)}
function i (line 24) | function i(e){for(var i=e.firstChild;"svg"!=i.nodeName.toLowerCase()||1!...
function n (line 24) | function n(e,t){function i(e){var t=e.tagName;if(m[t]){var o=m[t](e,n);o...
function a (line 24) | function a(e,t){var i=t instanceof Array?[1*t[0],1*t[1]]:[1*t.x,1*t.y];r...
function o (line 24) | function o(e,t){var i=t instanceof Array?[1*t[0],1*t[1]]:[1*t.x,1*t.y];r...
function r (line 24) | function r(e){return e.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}
function s (line 24) | function s(e,t){var i=t.getAttribute("fill"),n=t.getAttribute("stroke"),...
function l (line 24) | function l(e){for(var t=r(e).replace(/,/g," ").split(/\s+/),i=[],n=0;n<t...
function e (line 24) | function e(e,i){return i=i||{},e.srcSize||t(e,i),e.srcSize}
function t (line 24) | function t(e,t){t=t||{},r.xmin=360,r.xmax=-360,r.ymin=180,r.ymax=-180;fo...
function i (line 24) | function i(e,i,n){function a(e,t){c=e.type,u=e.coordinates,o._bbox={xmin...
function n (line 24) | function n(e,t){var i,n;return t instanceof Array?(i=1*t[0],n=1*t[1]):(i...
function a (line 24) | function a(e,t){return o.offset=e.offset,o.scale=e.scale,o.makePoint(t i...
function t (line 34) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}
function t (line 34) | function t(e){i.call(this,e)}
function t (line 34) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}
function t (line 34) | function t(e,t){return"-"===e.value?1:"-"===t.value?-1:t.value-e.value}
function i (line 34) | function i(e,i){return-t(e,i)}
function t (line 34) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._ondragend=fun...
function e (line 34) | function e(e,i,o){function r(e,t){var i=e.importance,n=t.importance;retu...
function t (line 34) | function t(e,t,i,n){for(var a=t.height,o=n/a>.5?.5:1,r=t.y,s=(t.height-n...
function i (line 34) | function i(e,t,i,n){if(e===i)throw new Error("x0 is equal with x1!!!");i...
function n (line 34) | function n(e,t,n){var a=~~t,o=e.time.length;e.xpx=[],e.ypx=[];for(var r,...
function a (line 34) | function a(e,t,i){for(var n,a=0,o=t.xpx.length,r=0;o>r;r++)n=i(t,r),a=Ma...
function t (line 34) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}
function t (line 34) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a);var r=this;...
function e (line 35) | function e(e){({x:e.x,y:e.y,width:e.width,height:e.height});this.x=e.x,t...
function t (line 35) | function t(e,t){this.id=e,this.depth=0,this.height=0,this.children=[],th...
function i (line 35) | function i(e){this.root=new t(e)}
function a (line 35) | function a(e,i){var n=new t(e.name,e);i.add(n);var o=e.children;if(o)for...
function n (line 35) | function n(t){for(var i=e.getNodeById(t.id),a=0;a<i.outEdges.length;a++)...
function t (line 35) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}
function t (line 35) | function t(e){e=e||{},this.nodePadding=e.nodePadding||30,this.layerPaddi...
function t (line 35) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}
function t (line 35) | function t(e){this._init(e)}
function e (line 35) | function e(){p.totalArea=r,U.autoSizeCal.enable&&p._autoCalTextSize(m,r,...
function t (line 35) | function t(){for(var e,t=+new Date,i=m.length;+new Date-t<V.timeInterval...
function t (line 35) | function t(e){return e.name}
function i (line 35) | function i(){return"sans-serif"}
function n (line 35) | function n(){return"normal"}
function a (line 35) | function a(e){return e.value}
function o (line 35) | function o(){return 0}
function r (line 35) | function r(e){return function(){return e[Math.round(Math.random()*(e.len...
function s (line 35) | function s(){return 0}
function l (line 35) | function l(e){var t=e[0]/e[1];return function(e){return[t*(e*=.1)*Math.c...
function h (line 35) | function h(e){var t=4,i=t*e[0]/e[1],n=0,a=0;return function(e){var o=0>e...
function m (line 35) | function m(e){return"function"==typeof e?e:function(){return e}}
function n (line 35) | function n(e,t,i){i>>=5;for(var n,a=e.sprite,o=e.width>>5,r=e.x-(o<<4),s...
function a (line 35) | function a(e,t){return t.row[e.y]&&t.cloumn[e.x]&&e.x>=t.row[e.y].start&...
function o (line 35) | function o(e){c.clearRect(0,0,(d<<5)/u,p/u),c.save(),c.font=e.style+" "+...
function r (line 35) | function r(e,t){for(var i=e.length,n=0;i--;)n+=t(e[i]);return n}
function e (line 35) | function e(e){this.defaultOption={type:"RECT"},this._init(e)}
function t (line 35) | function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}
FILE: public/assets/dashboard/js/plugins/flot/curvedLines.js
function init (line 101) | function init(plot) {
FILE: public/assets/dashboard/js/plugins/flot/jquery.flot.js
function H (line 31) | function H(J,K,I){return K<J?J:(K>I?I:K)}
function Plot (line 35) | function Plot(placeholder, data_, options_, plugins) {
function floorInBase (line 2595) | function floorInBase(n, base) {
FILE: public/assets/dashboard/js/plugins/flot/jquery.flot.pie.js
function init (line 63) | function init(plot) // this is the "body" of the plugin
FILE: public/assets/dashboard/js/plugins/flot/jquery.flot.resize.js
function m (line 23) | function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r...
function g (line 23) | function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width...
function init (line 28) | function init(plot) {
FILE: public/assets/dashboard/js/plugins/flot/jquery.flot.spline.js
function getControlPoints (line 53) | function getControlPoints(x0, y0, x1, y1, x2, y2, tension) {
function drawLine (line 77) | function drawLine(points, ctx, height, fill, seriesColor) {
function queue (line 115) | function queue(ctx, type, points, cpoints) {
function drawSpline (line 138) | function drawSpline(plot, ctx, series) {
FILE: public/assets/dashboard/js/plugins/flot/jquery.flot.symbol.js
function processRawData (line 17) | function processRawData(plot, series, datapoints) {
function init (line 62) | function init(plot) {
FILE: public/assets/dashboard/js/plugins/jqgrid/jquery.jqGrid.minffe4.js
function _pivotfilter (line 9) | function _pivotfilter(a,b){var c,d,e,f=[];if(!this||"function"!=typeof a...
function a (line 10) | function a(b){var c,e,f,g,h,i,k=0;if(null!=b.groups){for(e=b.groups.leng...
function d (line 11) | function d(a){var b=$(l.grid.bDiv)[0].clientHeight,c=$(l.grid.bDiv)[0].s...
function d (line 11) | function d(a){var b;for(b in a)if(a.hasOwnProperty(b))return!1;return!0}
function d (line 11) | function d(b){var c;c=b.length?$.makeArray(b):$.extend({},b),$.each(a,fu...
function e (line 11) | function e(b,c){$(">tr"+(c||""),b).each(function(){var b=this,c=$.makeAr...
function a (line 12) | function a(a,b,d){if("v"===d.substr(0,1)){var e=$(c.grid.bDiv)[0].client...
function b (line 12) | function b(a,b){var d,e;if("lft"===b)for(d=a+1,e=a;e>=0;e--)if(c.p.colMo...
function f (line 12) | function f(a,b,c){var d=["dataInit","dataEvents","dataUrl","buildSelect"...
function a (line 13) | function a(a){if(c.p.errorcheck){var b,d;for(b=0;b<c.p.columns.length;b+...
function b (line 13) | function b(c){var d,e="(";if(void 0!==c.groups)for(d=0;d<c.groups.length...
function b (line 13) | function b(b){f=$(c).triggerHandler("jqGridFilterBeforeShow",[b]),void 0...
function c (line 14) | function c(){return $(x).find(".FormElement").each(function(){var a=$("....
function d (line 14) | function d(a,b,c,d){var f,g,h,i,j,k,l,m=0,n=[],o=!1,q="<td class='Captio...
function g (line 14) | function g(a,b,c){var d,e,f,g,h,i,j=0;(rp_ge[p.p.id].checkOnSubmit||rp_g...
function h (line 14) | function h(){$.each(p.p.colModel,function(a,b){b.editoptions&&b.editopti...
function i (line 14) | function i(){var a,c,d,e,i,j,k,l=[!0,"",""],m={},n=p.p.prmNames,o=$(p).t...
function j (line 14) | function j(a,b){var c,d=!1;for(c in a)if(a.hasOwnProperty(c)&&a[c]!=b[c]...
function k (line 14) | function k(){var a=!0;return $(".FormError",v).hide(),rp_ge[p.p.id].chec...
function l (line 14) | function l(){var b;if("_empty"!==a&&void 0!==p.p.savedRow&&p.p.savedRow....
function m (line 14) | function m(a,b){var c=b[1].length-1;0===a?$("#pData",q).addClass(f.disab...
function n (line 14) | function n(){var a=$(p).jqGrid("getDataIDs"),b=$("#id_g",x).val(),c=$.in...
function o (line 14) | function o(a){var b="";return"string"==typeof a&&(b=a.replace(/\{([\w\-]...
function c (line 14) | function c(){(rp_ge[j.p.id].closeOnEscape===!0||rp_ge[j.p.id].navkeys[0]...
function d (line 14) | function d(a,c,d,e){var g,h,i,j,k,l,m,n,o,p=0,q=[],r=!1,s="<td class='Ca...
function g (line 14) | function g(a,b){var c,d,e,f,g=0;f=$(b).jqGrid("getInd",a,!0),f&&($("td",...
function h (line 14) | function h(a,b){var c=b[1].length-1;0===a?$("#pData","#"+m+"_2").addClas...
function i (line 14) | function i(){var a=$(j).jqGrid("getDataIDs"),b=$("#id_g","#"+m).val(),c=...
function e (line 15) | function e(a,b,c){var d,e=!1;if(0===b)e=c[a];else{var f=c[a].idx;if(0===...
function f (line 15) | function f(a,c,d,f){var g,h,i=e(a,c,d),k=j.p.colModel,l=i.cnt,m="";for(h...
function b (line 16) | function b(){c.p.disableClick=!0}
function b (line 16) | function b(a,b,c){var d,e;return b>=0?(d=a.slice(),e=d.splice(b,Math.max...
function c (line 16) | function c(a,b){a&&("string"==typeof a?$.fn[a]&&$.fn[a].apply(b,$.makeAr...
function b (line 16) | function b(){var a=$.data(e,"dnd");$("tr.jqgrow:not(.ui-draggable)",e).d...
function b (line 17) | function b(a,b,c){var d;return d=_pivotfilter.call(a,b,c),d.length>0?d[0...
function k (line 17) | function k(a,b){var c,d=0,e=!0;for(c in a)if(a.hasOwnProperty(c)){if(a[c...
function l (line 17) | function l(a,b,c,d){var e;switch(a){case"sum":e=parseFloat(b||0)+parseFl...
function m (line 17) | function m(a,b,c,d){var e,h,i,j,k=b.length,m="",n=[];for($.isArray(c)?(j...
function n (line 17) | function n(a){var b,d,e,f,g;for(e in a)if(a.hasOwnProperty(e)){if("objec...
function e (line 17) | function e(a){var d,e=jQuery(f).jqGrid("pivotSetup",a,b),g=$.assocArrayS...
FILE: public/assets/dashboard/js/plugins/layer/extend/layer.ext.js
function e (line 2) | function e(a,b,c){var d=new Image;d.onload=function(){d.onload=null,b(d)...
FILE: public/assets/dashboard/js/plugins/markdown/markdown.js
function mk_block_toSource (line 116) | function mk_block_toSource() {
function mk_block_inspect (line 127) | function mk_block_inspect() {
function count_lines (line 155) | function count_lines( str ) {
function regex_for_depth (line 426) | function regex_for_depth( depth ) {
function expand_tab (line 435) | function expand_tab( input ) {
function add (line 441) | function add(li, loose, inline, nl) {
function get_contained_blocks (line 468) | function get_contained_blocks( depth, blocks ) {
function paragraphify (line 488) | function paragraphify(s, i, stack) {
function make_list (line 511) | function make_list( m ) {
function add (line 778) | function add(x) {
function strong_em (line 977) | function strong_em( tag, md ) {
function Block (line 1103) | function Block() {}
function Inline (line 1105) | function Inline() {}
function split_meta_hash (line 1145) | function split_meta_hash( meta_string ) {
function extract_attr (line 1355) | function extract_attr( jsonml ) {
function escapeHTML (line 1403) | function escapeHTML( text ) {
function render_tree (line 1411) | function render_tree( jsonml ) {
function convert_tree_to_html (line 1443) | function convert_tree_to_html( tree, references, options ) {
function merge_text_nodes (line 1585) | function merge_text_nodes( jsonml ) {
FILE: public/assets/dashboard/js/plugins/markdown/to-markdown.js
function replaceEls (line 87) | function replaceEls(html, elProperties) {
function attrRegExp (line 102) | function attrRegExp(attr) {
function replaceLists (line 129) | function replaceLists(html) {
function replaceBlockquotes (line 161) | function replaceBlockquotes(html) {
function cleanUp (line 172) | function cleanUp(string) {
FILE: public/assets/dashboard/js/plugins/metisMenu/jquery.metisMenu.js
function Plugin (line 17) | function Plugin(element, options) {
FILE: public/assets/dashboard/js/plugins/morris/morris.js
function ctor (line 6) | function ctor() { this.constructor = child; }
function EventEmitter (line 14) | function EventEmitter() {}
function Grid (line 69) | function Grid(options) {
function Hover (line 648) | function Hover(options) {
function Line (line 707) | function Line(options) {
function Area (line 1292) | function Area(options) {
function Bar (line 1385) | function Bar(options) {
function Donut (line 1637) | function Donut(options) {
function DonutSegment (line 1796) | function DonutSegment(cx, cy, inner, outer, p0, p1, color, backgroundCol...
FILE: public/assets/dashboard/js/plugins/nestable/jquery.nestable.js
function Plugin (line 48) | function Plugin(element, options)
FILE: public/assets/dashboard/js/plugins/plyr/plyr.js
function _buildControls (line 106) | function _buildControls() {
function _log (line 243) | function _log(text, error) {
function _browserSniff (line 251) | function _browserSniff() {
function _supportMime (line 322) | function _supportMime(player, mimeType) {
function _injectScript (line 356) | function _injectScript(source) {
function _inArray (line 368) | function _inArray(haystack, needle) {
function _replaceAll (line 373) | function _replaceAll(string, find, replace) {
function _wrap (line 378) | function _wrap(elements, wrapper) {
function _unwrap (line 411) | function _unwrap(wrapper) {
function _remove (line 425) | function _remove(element) {
function _prependChild (line 430) | function _prependChild(parent, element) {
function _setAttributes (line 435) | function _setAttributes(element, attributes) {
function _toggleClass (line 442) | function _toggleClass(element, name, state) {
function _toggleHandler (line 454) | function _toggleHandler(element, events, callback, toggle) {
function _on (line 474) | function _on(element, events, callback) {
function _off (line 481) | function _off(element, events, callback) {
function _triggerEvent (line 488) | function _triggerEvent(element, event) {
function _toggleState (line 500) | function _toggleState(target, state) {
function _getPercentage (line 511) | function _getPercentage(current, max) {
function _extend (line 521) | function _extend(destination, source) {
function _fullscreen (line 534) | function _fullscreen() {
function _storage (line 606) | function _storage() {
function Plyr (line 620) | function Plyr(container) {
FILE: public/assets/dashboard/js/plugins/prettyfile/bootstrap-prettyfile.js
function make_form (line 18) | function make_form( $el, text ) {
function bind_change (line 34) | function bind_change( $wrap, multiple ) {
function bind_button (line 55) | function bind_button( $wrap, multiple ) {
FILE: public/assets/dashboard/js/plugins/rickshaw/vendor/d3.v3.js
function n (line 1) | function n(n){return null!=n&&!isNaN(n)}
function t (line 1) | function t(n){return n.length}
function e (line 1) | function e(n){for(var t=1;n*t%1;)t*=10;return t}
function r (line 1) | function r(n,t){try{for(var e in t)Object.defineProperty(n.prototype,e,{...
function u (line 1) | function u(){}
function i (line 1) | function i(){}
function o (line 1) | function o(n,t,e){return function(){var r=e.apply(t,arguments);return r=...
function a (line 1) | function a(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.substri...
function c (line 1) | function c(){}
function l (line 1) | function l(){}
function s (line 1) | function s(n){function t(){for(var t,r=e,u=-1,i=r.length;++u<i;)(t=r[u]....
function f (line 1) | function f(){mo.event.preventDefault()}
function h (line 1) | function h(){for(var n,t=mo.event;n=t.sourceEvent;)t=n;return t}
function g (line 1) | function g(n){for(var t=new l,e=0,r=arguments.length;++e<r;)t[arguments[...
function p (line 1) | function p(n){return Lo(n,Ro),n}
function d (line 1) | function d(n){return"function"==typeof n?n:function(){return Ho(n,this)}}
function v (line 1) | function v(n){return"function"==typeof n?n:function(){return Fo(n,this)}}
function m (line 1) | function m(n,t){function e(){this.removeAttribute(n)}function r(){this.r...
function y (line 1) | function y(n){return n.trim().replace(/\s+/g," ")}
function M (line 1) | function M(n){return new RegExp("(?:^|\\s+)"+mo.requote(n)+"(?:\\s+|$)",...
function x (line 1) | function x(n,t){function e(){for(var e=-1;++e<u;)n[e](this,t)}function r...
function b (line 1) | function b(n){var t=M(n);return function(e,r){if(u=e.classList)return r?...
function _ (line 1) | function _(n,t,e){function r(){this.style.removeProperty(n)}function u()...
function w (line 1) | function w(n,t){function e(){delete this[n]}function r(){this[n]=t}funct...
function S (line 1) | function S(n){return"function"==typeof n?n:(n=mo.ns.qualify(n)).local?fu...
function E (line 1) | function E(n){return{__data__:n}}
function k (line 1) | function k(n){return function(){return Oo(this,n)}}
function A (line 1) | function A(n){return arguments.length||(n=mo.ascending),function(t,e){re...
function N (line 1) | function N(n,t){for(var e=0,r=n.length;r>e;e++)for(var u,i=n[e],o=0,a=i....
function T (line 1) | function T(n){return Lo(n,Io),n}
function q (line 1) | function q(n){var t,e;return function(r,u,i){var o,a=n[i].update,c=a.len...
function z (line 1) | function z(){var n=this.__transition__;n&&++n.active}
function C (line 1) | function C(n,t,e){function r(){var t=this[o];t&&(this.removeEventListene...
function D (line 1) | function D(n,t){return function(e){var r=mo.event;mo.event=e,t[0]=this._...
function j (line 1) | function j(n,t){var e=D(n,t);return function(n){var t=this,r=n.relatedTa...
function L (line 1) | function L(){var n=".dragsuppress-"+ ++Xo,t="touchmove"+n,e="selectstart...
function H (line 1) | function H(n,t){t.changedTouches&&(t=t.changedTouches[0]);var e=n.ownerS...
function F (line 1) | function F(n){return n>0?1:0>n?-1:0}
function P (line 1) | function P(n){return n>1?0:-1>n?Bo:Math.acos(n)}
function O (line 1) | function O(n){return n>1?Jo:-1>n?-Jo:Math.asin(n)}
function R (line 1) | function R(n){return((n=Math.exp(n))-1/n)/2}
function Y (line 1) | function Y(n){return((n=Math.exp(n))+1/n)/2}
function I (line 1) | function I(n){return((n=Math.exp(2*n))-1)/(n+1)}
function U (line 1) | function U(n){return(n=Math.sin(n/2))*n}
function Z (line 1) | function Z(){}
function V (line 1) | function V(n,t,e){return new X(n,t,e)}
function X (line 1) | function X(n,t,e){this.h=n,this.s=t,this.l=e}
function $ (line 1) | function $(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?i...
function B (line 1) | function B(n,t,e){return new W(n,t,e)}
function W (line 1) | function W(n,t,e){this.h=n,this.c=t,this.l=e}
function J (line 1) | function J(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),G(e,Math.cos(n*...
function G (line 1) | function G(n,t,e){return new K(n,t,e)}
function K (line 1) | function K(n,t,e){this.l=n,this.a=t,this.b=e}
function Q (line 1) | function Q(n,t,e){var r=(n+16)/116,u=r+t/500,i=r-e/200;return u=tt(u)*sa...
function nt (line 1) | function nt(n,t,e){return n>0?B(Math.atan2(e,t)*na,Math.sqrt(t*t+e*e),n)...
function tt (line 1) | function tt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}
function et (line 1) | function et(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}
function rt (line 1) | function rt(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n...
function ut (line 1) | function ut(n){return ot(n>>16,255&n>>8,255&n)}
function it (line 1) | function it(n){return ut(n)+""}
function ot (line 1) | function ot(n,t,e){return new at(n,t,e)}
function at (line 1) | function at(n,t,e){this.r=n,this.g=t,this.b=e}
function ct (line 1) | function ct(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n...
function lt (line 1) | function lt(n,t,e){var r,u,i,o=0,a=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(n...
function st (line 1) | function st(n,t,e){var r,u,i=Math.min(n/=255,t/=255,e/=255),o=Math.max(n...
function ft (line 1) | function ft(n,t,e){n=ht(n),t=ht(t),e=ht(e);var r=et((.4124564*n+.3575761...
function ht (line 1) | function ht(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}
function gt (line 1) | function gt(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math...
function pt (line 1) | function pt(n){return"function"==typeof n?n:function(){return n}}
function dt (line 1) | function dt(n){return n}
function vt (line 1) | function vt(n){return function(t,e,r){return 2===arguments.length&&"func...
function mt (line 1) | function mt(n,t,e,r){function u(){var n,t=c.status;if(!t&&c.responseText...
function yt (line 1) | function yt(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}
function Mt (line 1) | function Mt(){var n=bt(),t=_t()-n;t>24?(isFinite(t)&&(clearTimeout(Ma),M...
function xt (line 1) | function xt(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now())...
function bt (line 1) | function bt(){var n=Date.now();for(xa=va;xa;)n>=xa.time&&(xa.flush=xa.ca...
function _t (line 1) | function _t(){for(var n,t=va,e=1/0;t;)t.flush?t=n?n.next=t.next:va=t.nex...
function wt (line 1) | function wt(n,t){var e=Math.pow(10,3*Math.abs(8-t));return{scale:t>8?fun...
function St (line 1) | function St(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}
function Et (line 1) | function Et(n){return n+""}
function kt (line 1) | function kt(){}
function At (line 1) | function At(n,t,e){var r=e.s=n+t,u=r-n,i=r-u;e.t=n-i+(t-u)}
function Nt (line 1) | function Nt(n,t){n&&Da.hasOwnProperty(n.type)&&Da[n.type](n,t)}
function Tt (line 1) | function Tt(n,t,e){var r,u=-1,i=n.length-e;for(t.lineStart();++u<i;)r=n[...
function qt (line 1) | function qt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)Tt(n[e]...
function zt (line 1) | function zt(){function n(n,t){n*=Qo,t=t*Qo/2+Bo/4;var e=n-r,o=Math.cos(t...
function Ct (line 1) | function Ct(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Ma...
function Dt (line 1) | function Dt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}
function jt (line 1) | function jt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1...
function Lt (line 1) | function Lt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}
function Ht (line 1) | function Ht(n,t){return[n[0]*t,n[1]*t,n[2]*t]}
function Ft (line 1) | function Ft(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[...
function Pt (line 1) | function Pt(n){return[Math.atan2(n[1],n[0]),O(n[2])]}
function Ot (line 1) | function Ot(n,t){return Math.abs(n[0]-t[0])<Go&&Math.abs(n[1]-t[1])<Go}
function Rt (line 1) | function Rt(n,t){n*=Qo;var e=Math.cos(t*=Qo);Yt(e*Math.cos(n),e*Math.sin...
function Yt (line 1) | function Yt(n,t,e){++Fa,Oa+=(n-Oa)/Fa,Ra+=(t-Ra)/Fa,Ya+=(e-Ya)/Fa}
function It (line 1) | function It(){function n(n,u){n*=Qo;var i=Math.cos(u*=Qo),o=i*Math.cos(n...
function Ut (line 1) | function Ut(){Ba.point=Rt}
function Zt (line 1) | function Zt(){function n(n,t){n*=Qo;var e=Math.cos(t*=Qo),o=e*Math.cos(n...
function Vt (line 1) | function Vt(){return!0}
function Xt (line 1) | function Xt(n,t,e,r,u){var i=[],o=[];if(n.forEach(function(n){if(!((t=n....
function $t (line 1) | function $t(n){if(t=n.length){for(var t,e,r=0,u=n[0];++r<t;)u.next=e=n[r...
function Bt (line 1) | function Bt(n,t,e,r){return function(u,i){function o(t,e){var r=u(t,e);n...
function Wt (line 1) | function Wt(n){return n.length>1}
function Jt (line 1) | function Jt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point...
function Gt (line 1) | function Gt(n,t){return((n=n.point)[0]<0?n[1]-Jo-Go:Jo-n[1])-((t=t.point...
function Kt (line 1) | function Kt(n,t){var e=n[0],r=n[1],u=[Math.sin(e),-Math.cos(e),0],i=0,o=...
function Qt (line 1) | function Qt(n){var t,e=0/0,r=0/0,u=0/0;return{lineStart:function(){n.lin...
function ne (line 1) | function ne(n,t,e,r){var u,i,o=Math.sin(n-e);return Math.abs(o)>Go?Math....
function te (line 1) | function te(n,t,e,r){var u;if(null==n)u=e*Jo,r.point(-Bo,u),r.point(0,u)...
function ee (line 1) | function ee(n){function t(n,t){return Math.cos(n)*Math.cos(t)>i}function...
function re (line 1) | function re(n,t,e,r){function u(r,u){return Math.abs(r[0]-n)<Go?u>0?0:3:...
function ue (line 1) | function ue(n,t,e){if(Math.abs(t)<Go)return 0>=n;var r=n/t;if(t>0){if(r>...
function ie (line 1) | function ie(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.i...
function oe (line 1) | function oe(n){var t=0,e=Bo/3,r=be(n),u=r(t,e);return u.parallels=functi...
function ae (line 1) | function ae(n,t){function e(n,t){var e=Math.sqrt(i-2*u*Math.sin(t))/u;re...
function ce (line 1) | function ce(){function n(n,t){Ka+=u*n-r*t,r=n,u=t}var t,e,r,u;rc.point=f...
function le (line 1) | function le(n,t){Qa>n&&(Qa=n),n>tc&&(tc=n),nc>t&&(nc=t),t>ec&&(ec=t)}
function se (line 1) | function se(){function n(n,t){o.push("M",n,",",t,i)}function t(n,t){o.pu...
function fe (line 1) | function fe(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" ...
function he (line 1) | function he(n,t){Oa+=n,Ra+=t,++Ya}
function ge (line 1) | function ge(){function n(n,r){var u=n-t,i=r-e,o=Math.sqrt(u*u+i*i);Ia+=o...
function pe (line 1) | function pe(){ic.point=he}
function de (line 1) | function de(){function n(n,t){var e=n-r,i=t-u,o=Math.sqrt(e*e+i*i);Ia+=o...
function ve (line 1) | function ve(n){function t(t,e){n.moveTo(t,e),n.arc(t,e,o,0,Wo)}function ...
function me (line 1) | function me(n){function t(t){function r(e,r){e=n(e,r),t.point(e[0],e[1])...
function ye (line 1) | function ye(n){this.stream=n}
function Me (line 1) | function Me(n){var t=me(function(t,e){return n([t*na,e*na])});return fun...
function xe (line 1) | function xe(n){return be(function(){return n})()}
function be (line 1) | function be(n){function t(n){return n=a(n[0]*Qo,n[1]*Qo),[n[0]*h+c,l-n[1...
function _e (line 1) | function _e(n){var t=new ye(n);return t.point=function(t,e){n.point(t*Qo...
function we (line 1) | function we(n,t){return[n,t]}
function Se (line 1) | function Se(n,t){return[n>Bo?n-Wo:-Bo>n?n+Wo:n,t]}
function Ee (line 1) | function Ee(n,t,e){return n?t||e?ie(Ae(n),Ne(t,e)):Ae(n):t||e?Ne(t,e):Se}
function ke (line 1) | function ke(n){return function(t,e){return t+=n,[t>Bo?t-Wo:-Bo>t?t+Wo:t,...
function Ae (line 1) | function Ae(n){var t=ke(n);return t.invert=ke(-n),t}
function Ne (line 1) | function Ne(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Mat...
function Te (line 1) | function Te(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a...
function qe (line 1) | function qe(n,t){var e=Ct(t);e[0]-=n,Ft(e);var r=P(-e[1]);return((-e[2]<...
function ze (line 1) | function ze(n,t,e){var r=mo.range(n,t-Go,e).concat(t);return function(n)...
function Ce (line 1) | function Ce(n,t,e){var r=mo.range(n,t-Go,e).concat(t);return function(n)...
function De (line 1) | function De(n){return n.source}
function je (line 1) | function je(n){return n.target}
function Le (line 1) | function Le(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Mat...
function He (line 1) | function He(){function n(n,u){var i=Math.sin(u*=Qo),o=Math.cos(u),a=Math...
function Fe (line 1) | function Fe(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u...
function Pe (line 1) | function Pe(n,t){function e(n,t){var e=Math.abs(Math.abs(t)-Jo)<Go?0:o/M...
function Oe (line 1) | function Oe(n,t){function e(n,t){var e=i-t;return[e*Math.sin(u*n),i-e*Ma...
function Re (line 1) | function Re(n,t){return[n,Math.log(Math.tan(Bo/4+t/2))]}
function Ye (line 1) | function Ye(n){var t,e=xe(n),r=e.scale,u=e.translate,i=e.clipExtent;retu...
function Ie (line 1) | function Ie(n,t){var e=Math.cos(t)*Math.sin(n);return[Math.log((1+e)/(1-...
function Ue (line 1) | function Ue(n){function t(t){function o(){l.push("M",i(n(s),a))}for(var ...
function Ze (line 1) | function Ze(n){return n[0]}
function Ve (line 1) | function Ve(n){return n[1]}
function Xe (line 1) | function Xe(n){return n.join("L")}
function $e (line 1) | function $e(n){return Xe(n)+"Z"}
function Be (line 1) | function Be(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u....
function We (line 1) | function We(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u....
function Je (line 1) | function Je(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u....
function Ge (line 1) | function Ge(n,t){return n.length<4?Xe(n):n[1]+nr(n.slice(1,n.length-1),t...
function Ke (line 1) | function Ke(n,t){return n.length<3?Xe(n):n[0]+nr((n.push(n[0]),n),tr([n[...
function Qe (line 1) | function Qe(n,t){return n.length<3?Xe(n):n[0]+nr(n,tr(n,t))}
function nr (line 1) | function nr(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2...
function tr (line 1) | function tr(n,t){for(var e,r=[],u=(1-t)/2,i=n[0],o=n[1],a=1,c=n.length;+...
function er (line 1) | function er(n){if(n.length<3)return Xe(n);var t=1,e=n.length,r=n[0],u=r[...
function rr (line 1) | function rr(n){if(n.length<4)return Xe(n);for(var t,e=[],r=-1,u=n.length...
function ur (line 1) | function ur(n){for(var t,e,r=-1,u=n.length,i=u+4,o=[],a=[];++r<4;)e=n[r%...
function ir (line 1) | function ir(n,t){var e=n.length-1;if(e)for(var r,u,i=n[0][0],o=n[0][1],a...
function or (line 1) | function or(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}
function ar (line 1) | function ar(n,t,e){n.push("C",or(pc,t),",",or(pc,e),",",or(dc,t),",",or(...
function cr (line 1) | function cr(n,t){return(t[1]-n[1])/(t[0]-n[0])}
function lr (line 1) | function lr(n){for(var t=0,e=n.length-1,r=[],u=n[0],i=n[1],o=r[0]=cr(u,i...
function sr (line 2) | function sr(n){for(var t,e,r,u,i=[],o=lr(n),a=-1,c=n.length-1;++a<c;)t=c...
function fr (line 2) | function fr(n){return n.length<3?Xe(n):n[0]+nr(n,sr(n))}
function hr (line 2) | function hr(n,t,e,r){var u,i,o,a,c,l,s;return u=r[n],i=u[0],o=u[1],u=r[t...
function gr (line 2) | function gr(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}
function pr (line 2) | function pr(n,t,e,r){var u=n[0],i=e[0],o=t[0]-u,a=r[0]-i,c=n[1],l=e[1],s...
function dr (line 2) | function dr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}
function vr (line 2) | function vr(n,t){var e={list:n.map(function(n,t){return{index:t,x:n[0],y...
function mr (line 2) | function mr(n){return n.x}
function yr (line 2) | function yr(n){return n.y}
function Mr (line 2) | function Mr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}
function xr (line 2) | function xr(n,t,e,r,u,i){if(!n(t,e,r,u,i)){var o=.5*(e+u),a=.5*(r+i),c=t...
function br (line 2) | function br(n,t){n=mo.rgb(n),t=mo.rgb(t);var e=n.r,r=n.g,u=n.b,i=t.r-e,o...
function _r (line 2) | function _r(n,t){var e,r={},u={};for(e in n)e in t?r[e]=Er(n[e],t[e]):u[...
function wr (line 2) | function wr(n,t){return t-=n=+n,function(e){return n+t*e}}
function Sr (line 2) | function Sr(n,t){var e,r,u,i,o,a=0,c=0,l=[],s=[];for(n+="",t+="",Mc.last...
function Er (line 2) | function Er(n,t){for(var e,r=mo.interpolators.length;--r>=0&&!(e=mo.inte...
function kr (line 2) | function kr(n,t){var e,r=[],u=[],i=n.length,o=t.length,a=Math.min(n.leng...
function Ar (line 2) | function Ar(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}
function Nr (line 2) | function Nr(n){return function(t){return 1-n(1-t)}}
function Tr (line 2) | function Tr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}
function qr (line 2) | function qr(n){return n*n}
function zr (line 2) | function zr(n){return n*n*n}
function Cr (line 2) | function Cr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return ...
function Dr (line 2) | function Dr(n){return function(t){return Math.pow(t,n)}}
function jr (line 2) | function jr(n){return 1-Math.cos(n*Jo)}
function Lr (line 2) | function Lr(n){return Math.pow(2,10*(n-1))}
function Hr (line 2) | function Hr(n){return 1-Math.sqrt(1-n*n)}
function Fr (line 2) | function Fr(n,t){var e;return arguments.length<2&&(t=.45),arguments.leng...
function Pr (line 2) | function Pr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}
function Or (line 2) | function Or(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*...
function Rr (line 2) | function Rr(n,t){n=mo.hcl(n),t=mo.hcl(t);var e=n.h,r=n.c,u=n.l,i=t.h-e,o...
function Yr (line 2) | function Yr(n,t){n=mo.hsl(n),t=mo.hsl(t);var e=n.h,r=n.s,u=n.l,i=t.h-e,o...
function Ir (line 2) | function Ir(n,t){n=mo.lab(n),t=mo.lab(t);var e=n.l,r=n.a,u=n.b,i=t.l-e,o...
function Ur (line 2) | function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}
function Zr (line 2) | function Zr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Xr(t),u=Vr(t,e),i=Xr($r(e,t...
function Vr (line 2) | function Vr(n,t){return n[0]*t[0]+n[1]*t[1]}
function Xr (line 2) | function Xr(n){var t=Math.sqrt(Vr(n,n));return t&&(n[0]/=t,n[1]/=t),t}
function $r (line 2) | function $r(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}
function Br (line 2) | function Br(n,t){var e,r=[],u=[],i=mo.transform(n),o=mo.transform(t),a=i...
function Wr (line 2) | function Wr(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return(e-n)*t}}
function Jr (line 2) | function Jr(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return Math.max...
function Gr (line 2) | function Gr(n){for(var t=n.source,e=n.target,r=Qr(t,e),u=[t];t!==r;)t=t....
function Kr (line 2) | function Kr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent...
function Qr (line 2) | function Qr(n,t){if(n===t)return n;for(var e=Kr(n),r=Kr(t),u=e.pop(),i=r...
function nu (line 2) | function nu(n){n.fixed|=2}
function tu (line 2) | function tu(n){n.fixed&=-7}
function eu (line 2) | function eu(n){n.fixed|=4,n.px=n.x,n.py=n.y}
function ru (line 2) | function ru(n){n.fixed&=-5}
function uu (line 2) | function uu(n,t,e){var r=0,u=0;if(n.charge=0,!n.leaf)for(var i,o=n.nodes...
function iu (line 2) | function iu(n,t){return mo.rebind(n,t,"sort","children","value"),n.nodes...
function ou (line 2) | function ou(n){return n.children}
function au (line 2) | function au(n){return n.value}
function cu (line 2) | function cu(n,t){return t.value-n.value}
function lu (line 2) | function lu(n){return mo.merge(n.map(function(n){return(n.children||[])....
function su (line 2) | function su(n){return n.x}
function fu (line 2) | function fu(n){return n.y}
function hu (line 2) | function hu(n,t,e){n.y0=t,n.y=e}
function gu (line 2) | function gu(n){return mo.range(n.length)}
function pu (line 2) | function pu(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}
function du (line 2) | function du(n){for(var t,e=1,r=0,u=n[0][1],i=n.length;i>e;++e)(t=n[e][1]...
function vu (line 2) | function vu(n){return n.reduce(mu,0)}
function mu (line 2) | function mu(n,t){return n+t[1]}
function yu (line 2) | function yu(n,t){return Mu(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}
function Mu (line 2) | function Mu(n,t){for(var e=-1,r=+n[0],u=(n[1]-r)/t,i=[];++e<=t;)i[e]=u*e...
function xu (line 2) | function xu(n){return[mo.min(n),mo.max(n)]}
function bu (line 2) | function bu(n,t){return n.parent==t.parent?1:2}
function _u (line 2) | function _u(n){var t=n.children;return t&&t.length?t[0]:n._tree.thread}
function wu (line 2) | function wu(n){var t,e=n.children;return e&&(t=e.length)?e[t-1]:n._tree....
function Su (line 2) | function Su(n,t){var e=n.children;if(e&&(u=e.length))for(var r,u,i=-1;++...
function Eu (line 2) | function Eu(n,t){return n.x-t.x}
function ku (line 2) | function ku(n,t){return t.x-n.x}
function Au (line 2) | function Au(n,t){return n.depth-t.depth}
function Nu (line 2) | function Nu(n,t){function e(n,r){var u=n.children;if(u&&(o=u.length))for...
function Tu (line 2) | function Tu(n){for(var t,e=0,r=0,u=n.children,i=u.length;--i>=0;)t=u[i]....
function qu (line 2) | function qu(n,t,e){n=n._tree,t=t._tree;var r=e/(t.number-n.number);n.cha...
function zu (line 2) | function zu(n,t,e){return n._tree.ancestor.parent==t.parent?n._tree.ance...
function Cu (line 2) | function Cu(n,t){return n.value-t.value}
function Du (line 2) | function Du(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pac...
function ju (line 2) | function ju(n,t){n._pack_next=t,t._pack_prev=n}
function Lu (line 2) | function Lu(n,t){var e=t.x-n.x,r=t.y-n.y,u=n.r+t.r;return.999*u*u>e*e+r*r}
function Hu (line 2) | function Hu(n){function t(n){s=Math.min(n.x-n.r,s),f=Math.max(n.x+n.r,f)...
function Fu (line 2) | function Fu(n){n._pack_next=n._pack_prev=n}
function Pu (line 2) | function Pu(n){delete n._pack_next,delete n._pack_prev}
function Ou (line 2) | function Ou(n,t,e,r){var u=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=...
function Ru (line 2) | function Ru(n,t,e){var r=n.r+e.r,u=t.x-n.x,i=t.y-n.y;if(r&&(u||i)){var o...
function Yu (line 2) | function Yu(n){return 1+mo.max(n,function(n){return n.y})}
function Iu (line 2) | function Iu(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}
function Uu (line 2) | function Uu(n){var t=n.children;return t&&t.length?Uu(t[0]):n}
function Zu (line 2) | function Zu(n){var t,e=n.children;return e&&(t=e.length)?Zu(e[t-1]):n}
function Vu (line 2) | function Vu(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}
function Xu (line 2) | function Xu(n,t){var e=n.x+t[3],r=n.y+t[0],u=n.dx-t[1]-t[3],i=n.dy-t[0]-...
function $u (line 2) | function $u(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}
function Bu (line 2) | function Bu(n){return n.rangeExtent?n.rangeExtent():$u(n.range())}
function Wu (line 2) | function Wu(n,t,e,r){var u=e(n[0],n[1]),i=r(t[0],t[1]);return function(n...
function Ju (line 2) | function Ju(n,t){var e,r=0,u=n.length-1,i=n[r],o=n[u];return i>o&&(e=r,r...
function Gu (line 2) | function Gu(n){return n?{floor:function(t){return Math.floor(t/n)*n},cei...
function Ku (line 2) | function Ku(n,t,e,r){var u=[],i=[],o=0,a=Math.min(n.length,t.length)-1;f...
function Qu (line 2) | function Qu(n,t,e,r){function u(){var u=Math.min(n.length,t.length)>2?Ku...
function ni (line 2) | function ni(n,t){return mo.rebind(n,t,"range","rangeRound","interpolate"...
function ti (line 2) | function ti(n,t){return Ju(n,Gu(ei(n,t)[2]))}
function ei (line 2) | function ei(n,t){null==t&&(t=10);var e=$u(n),r=e[1]-e[0],u=Math.pow(10,M...
function ri (line 2) | function ri(n,t){return mo.range.apply(mo,ei(n,t))}
function ui (line 2) | function ui(n,t,e){var r=-Math.floor(Math.log(ei(n,t)[2])/Math.LN10+.01)...
function ii (line 2) | function ii(n,t,e,r){function u(n){return(e?Math.log(0>n?0:n):-Math.log(...
function oi (line 2) | function oi(n,t,e){function r(t){return n(u(t))}var u=ai(t),i=ai(1/t);re...
function ai (line 2) | function ai(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,...
function ci (line 2) | function ci(n,t){function e(e){return o[((i.get(e)||"range"===t.t&&i.set...
function li (line 2) | function li(n,t){function e(){var e=0,i=t.length;for(u=[];++e<i;)u[e-1]=...
function si (line 2) | function si(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.flo...
function fi (line 2) | function fi(n,t){function e(e){return e>=e?t[mo.bisect(n,e)]:void 0}retu...
function hi (line 2) | function hi(n){function t(n){return+n}return t.invert=t,t.domain=t.range...
function gi (line 2) | function gi(n){return n.innerRadius}
function pi (line 2) | function pi(n){return n.outerRadius}
function di (line 2) | function di(n){return n.startAngle}
function vi (line 2) | function vi(n){return n.endAngle}
function mi (line 2) | function mi(n){for(var t,e,r,u=-1,i=n.length;++u<i;)t=n[u],e=t[0],r=t[1]...
function yi (line 2) | function yi(n){function t(t){function c(){d.push("M",a(n(m),f),s,l(n(v.r...
function Mi (line 2) | function Mi(n){return n.radius}
function xi (line 2) | function xi(n){return[n.x,n.y]}
function bi (line 2) | function bi(n){return function(){var t=n.apply(this,arguments),e=t[0],r=...
function _i (line 2) | function _i(){return 64}
function wi (line 2) | function wi(){return"circle"}
function Si (line 2) | function Si(n){var t=Math.sqrt(n/Bo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0...
function Ei (line 2) | function Ei(n,t){return Lo(n,Uc),n.id=t,n}
function ki (line 2) | function ki(n,t,e,r){var u=n.id;return N(n,"function"==typeof e?function...
function Ai (line 2) | function Ai(n){return null==n&&(n=""),function(){this.textContent=n}}
function Ni (line 2) | function Ni(n,t,e,r){var i=n.__transition__||(n.__transition__={active:0...
function Ti (line 2) | function Ti(n,t){n.attr("transform",function(n){return"translate("+t(n)+...
function qi (line 2) | function qi(n,t){n.attr("transform",function(n){return"translate(0,"+t(n...
function zi (line 2) | function zi(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arg...
function Ci (line 2) | function Ci(n,t,e){function r(t){var e=n(t),r=i(e,1);return r-t>t-e?e:r}...
function Di (line 2) | function Di(n){return function(t,e){try{Jc=zi;var r=new zi;return r._=t,...
function ji (line 2) | function ji(n){function t(t){for(var r,u,i,o=[],a=-1,c=0;++a<e;)37===n.c...
function Li (line 2) | function Li(n,t,e,r){for(var u,i,o,a=0,c=t.length,l=e.length;c>a;){if(r>...
function Hi (line 2) | function Hi(n){return new RegExp("^(?:"+n.map(mo.requote).join("|")+")",...
function Fi (line 2) | function Fi(n){for(var t=new u,e=-1,r=n.length;++e<r;)t.set(n[e].toLower...
function Pi (line 2) | function Pi(n,t,e){var r=0>n?"-":"",u=(r?-n:n)+"",i=u.length;return r+(e...
function Oi (line 2) | function Oi(n,t,e){cl.lastIndex=0;var r=cl.exec(t.substring(e));return r...
function Ri (line 2) | function Ri(n,t,e){ol.lastIndex=0;var r=ol.exec(t.substring(e));return r...
function Yi (line 2) | function Yi(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+1));retu...
function Ii (line 2) | function Ii(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e));return r...
function Ui (line 2) | function Ui(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e));return r...
function Zi (line 2) | function Zi(n,t,e){hl.lastIndex=0;var r=hl.exec(t.substring(e));return r...
function Vi (line 2) | function Vi(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e));return r...
function Xi (line 2) | function Xi(n,t,e){return Li(n,vl.c.toString(),t,e)}
function $i (line 2) | function $i(n,t,e){return Li(n,vl.x.toString(),t,e)}
function Bi (line 2) | function Bi(n,t,e){return Li(n,vl.X.toString(),t,e)}
function Wi (line 2) | function Wi(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+4));retu...
function Ji (line 2) | function Ji(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+2));retu...
function Gi (line 2) | function Gi(n,t,e){return/^[+-]\d{4}$/.test(t=t.substring(e,e+5))?(n.Z=+...
function Ki (line 2) | function Ki(n){return n+(n>68?1900:2e3)}
function Qi (line 2) | function Qi(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+2));retu...
function no (line 2) | function no(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+2));retu...
function to (line 2) | function to(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+3));retu...
function eo (line 2) | function eo(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+2));retu...
function ro (line 2) | function ro(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+2));retu...
function uo (line 2) | function uo(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+2));retu...
function io (line 2) | function io(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+3));retu...
function oo (line 2) | function oo(n,t,e){var r=Ml.get(t.substring(e,e+=2).toLowerCase());retur...
function ao (line 2) | function ao(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=~~(Math.abs(t...
function co (line 2) | function co(n,t,e){pl.lastIndex=0;var r=pl.exec(t.substring(e,e+1));retu...
function lo (line 2) | function lo(n){function t(n){try{Jc=zi;var t=new Jc;return t._=n,e(t)}fi...
function so (line 2) | function so(n){return n.toISOString()}
function fo (line 2) | function fo(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-...
function ho (line 2) | function ho(n){return new Date(n)}
function go (line 2) | function go(n){return function(t){for(var e=n.length-1,r=n[e];!r[1](t);)...
function po (line 2) | function po(n){return JSON.parse(n.responseText)}
function vo (line 2) | function vo(n){var t=xo.createRange();return t.selectNode(xo.body),t.cre...
function n (line 3) | function n(t,a,c){if(c>=o.length)return r?r.call(i,a):e?a.sort(e):a;for(...
function t (line 3) | function t(n,e){if(e>=o.length)return n;var r=[],u=a[e++];return n.forEa...
function e (line 3) | function e(n,e){var r,i,o,a=n.length,f=e.length,h=Math.min(a,f),g=new Ar...
function n (line 3) | function n(){this.on("mousedown.drag",o).on("touchstart.drag",a)}
function t (line 3) | function t(){return mo.event.changedTouches[0].identifier}
function e (line 3) | function e(n,t){return mo.touches(n).filter(function(n){return n.identif...
function r (line 3) | function r(n,t,e,r){return function(){function o(){var n=t(s,g),e=n[0]-d...
function e (line 3) | function e(n){var t=n*y;if(m){var e=Y(d),o=i/(ea*h)*(e*I(ta*t+d)-R(d));r...
function n (line 3) | function n(n){n.on(A,l).on(oa+".zoom",h).on(N,p).on("dblclick.zoom",d).o...
function t (line 3) | function t(n){return[(n[0]-S.x)/S.k,(n[1]-S.y)/S.k]}
function e (line 3) | function e(n){return[n[0]*S.k+S.x,n[1]*S.k+S.y]}
function r (line 3) | function r(n){S.k=Math.max(k[0],Math.min(k[1],n))}
function u (line 3) | function u(n,t){t=e(t),S.x+=n[0]-t[0],S.y+=n[1]-t[1]}
function i (line 3) | function i(){b&&b.domain(x.range().map(function(n){return(n-S.x)/S.k}).m...
function o (line 3) | function o(n){n({type:"zoomstart"})}
function a (line 3) | function a(n){i(),n({type:"zoom",scale:S.k,translate:[S.x,S.y]})}
function c (line 3) | function c(n){n({type:"zoomend"})}
function l (line 3) | function l(){function n(){s=1,u(mo.mouse(r),h),a(i)}function e(){f.on(N,...
function s (line 3) | function s(){function n(){var n=mo.touches(p);return g=S.k,n.forEach(fun...
function h (line 3) | function h(){var n=C.of(this,arguments);y?clearTimeout(y):(z.call(this),...
function p (line 3) | function p(){v=null}
function d (line 3) | function d(){var n=C.of(this,arguments),e=mo.mouse(this),i=t(e),l=Math.l...
function e (line 3) | function e(n,e,i){arguments.length<3&&(i=e,e=null);var o=mo.xhr(n,t,i);r...
function r (line 3) | function r(n){return e.parse(n.responseText)}
function u (line 3) | function u(n){return function(t){return e.parse(t.responseText,n)}}
function o (line 3) | function o(t){return t.map(a).join(n)}
function a (line 3) | function a(n){return c.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}
function e (line 3) | function e(){if(s>=c)return o;if(u)return u=!1,i;var t=s;if(34===n.charC...
function n (line 3) | function n(n,t){M.push(x=[s=n,h=n]),f>t&&(f=t),t>g&&(g=t)}
function t (line 3) | function t(t,e){var r=Ct([t*Qo,e*Qo]);if(m){var u=jt(m,r),i=[u[1],-u[0],...
function e (line 3) | function e(){b.point=t}
function r (line 3) | function r(){x[0]=s,x[1]=h,b.point=n,m=null}
function u (line 3) | function u(n,e){if(m){var r=n-p;y+=Math.abs(r)>180?r+(r>0?360:-360):r}el...
function i (line 3) | function i(){Ha.lineStart()}
function o (line 3) | function o(){u(d,v),Ha.lineEnd(),Math.abs(y)>Go&&(s=-(h=180)),x[0]=s,x[1...
function a (line 3) | function a(n,t){return(t-=n)<0?t+360:t}
function c (line 3) | function c(n,t){return n[0]-t[0]}
function l (line 3) | function l(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}
function n (line 3) | function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,...
function n (line 3) | function n(n){return n&&("function"==typeof a&&i.pointRadius(+a.apply(th...
function t (line 3) | function t(){return o=null,n}
function t (line 3) | function t(t){return t=n(t[0]*Qo,t[1]*Qo),t[0]*=na,t[1]*=na,t}
function n (line 3) | function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=Ee(-...
function n (line 3) | function n(){return{type:"MultiLineString",coordinates:t()}}
function t (line 3) | function t(){return mo.range(Math.ceil(i/v)*v,u,v).map(h).concat(mo.rang...
function n (line 4) | function n(){return{type:"LineString",coordinates:[t||r.apply(this,argum...
function t (line 4) | function t(n){if(n.length<3)return[];var t,u,i,o,a,c,l,s,f,h,g,p,d=pt(e)...
function t (line 4) | function t(n){var t,i,o,a=n.map(function(){return[]}),c=pt(e),l=pt(r),s=...
function i (line 4) | function i(n){function i(n,t,e,r,u,i,o,a){if(!isNaN(e)&&!isNaN(r))if(n.l...
function n (line 4) | function n(){var n,l,f,h,g,p={},d=[],v=mo.range(i),m=[];for(e=[],r=[],n=...
function t (line 4) | function t(){e.sort(function(n,t){return c((n.source.value+n.target.valu...
function n (line 4) | function n(n){return function(t,e,r,u){if(t.point!==n){var i=t.cx-n.x,o=...
function t (line 4) | function t(n){n.px=mo.event.x,n.py=mo.event.y,a.resume()}
function n (line 4) | function n(n,r){for(var u,i=t(e),o=-1,a=i.length;++o<a;)if(!isNaN(u=i[o]...
function t (line 4) | function t(){if(!c){for(c=[],r=0;p>r;++r)c[r]=[];for(r=0;d>r;++r){var n=...
function n (line 4) | function n(t,o,a){var c=u.call(e,t,o);if(t.depth=o,a.push(t),c&&(l=c.len...
function t (line 4) | function t(n,r){var u=n.children,o=0;if(u&&(a=u.length))for(var a,c=-1,l...
function e (line 4) | function e(t){var e=[];return n(t,0,e),e}
function n (line 4) | function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=...
function t (line 4) | function t(n){var e=n.children,r=0;if(e&&(u=e.length))for(var u,i=-1;++i...
function e (line 4) | function e(e,i){var o=r.call(this,e,i);return n(o[0],0,u[0],u[1]/t(o[0])...
function n (line 4) | function n(i){var o=i.map(function(e,r){return+t.call(n,e,r)}),a=+("func...
function n (line 4) | function n(a,c){var l=a.map(function(e,r){return t.call(n,e,r)}),s=l.map...
function n (line 4) | function n(n,i){for(var o,a,c=[],l=n.map(e,this),s=r.call(this,l,i),f=u....
function n (line 4) | function n(n,i){function o(n,t){var r=n.children,u=n._tree;if(r&&(i=r.le...
function n (line 4) | function n(n,i){var o=e.call(this,n,i),a=o[0],c=u[0],l=u[1],s=null==t?Ma...
function n (line 4) | function n(n,i){var o,a=t.call(this,n,i),c=a[0],l=0;Nu(c,function(n){var...
function n (line 4) | function n(n,t){for(var e,r,u=-1,i=n.length;++u<i;)r=(e=n[u]).value*(0>t...
function t (line 4) | function t(e){var i=e.children;if(i&&i.length){var o,a,c,l=f(e),s=[],h=i...
function e (line 4) | function e(t){var r=t.children;if(r&&r.length){var i,o=f(t),a=r.slice(),...
function r (line 4) | function r(n,t){for(var e,r=n.area,u=0,i=1/0,o=-1,a=n.length;++o<a;)(e=n...
function u (line 4) | function u(n,t,e,r){var u,i=-1,o=n.length,a=e.x,l=e.y,s=t?c(n.area/t):0;...
function i (line 4) | function i(r){var u=o||a(r),i=u[0];return i.x=0,i.y=0,i.dx=l[0],i.dy=l[1...
function t (line 4) | function t(t){var e=n.call(i,t,t.depth);return null==e?Vu(t):Xu(t,"numbe...
function e (line 4) | function e(t){return Xu(t,n)}
function n (line 4) | function n(){var n=t.apply(this,arguments),i=e.apply(this,arguments),o=r...
function n (line 4) | function n(n,a){var c=t(this,i,n,a),l=t(this,o,n,a);return"M"+c.p0+r(c.r...
function t (line 4) | function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)+...
function e (line 4) | function e(n,t){return n.a0==t.a0&&n.a1==t.a1}
function r (line 4) | function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Bo)+",1 "+t}
function u (line 4) | function u(n,t,e,r){return"Q 0,0 "+r}
function n (line 4) | function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,...
function n (line 4) | function n(n,r){return(Pc.get(t.call(this,n,r))||Si)(e.call(this,n,r))}
function e (line 4) | function e(){this.removeAttribute(a)}
function r (line 4) | function r(){this.removeAttributeNS(a.space,a.local)}
function u (line 4) | function u(n){return null==n?e:(n+="",function(){var t,e=this.getAttribu...
function i (line 4) | function i(n){return null==n?r:(n+="",function(){var t,e=this.getAttribu...
function e (line 5) | function e(n,e){var r=t.call(this,n,e,this.getAttribute(u));return r&&fu...
function r (line 5) | function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(u.space,u.loca...
function r (line 5) | function r(){this.style.removeProperty(n)}
function u (line 5) | function u(t){return null==t?r:(t+="",function(){var r,u=_o.getComputedS...
function r (line 5) | function r(r,u){var i=t.call(this,r,u,_o.getComputedStyle(this,null).get...
function n (line 5) | function n(n){n.each(function(){var n,l=mo.select(this),s=this.__chart__...
function n (line 5) | function n(i){i.each(function(){var i=mo.select(this).style("pointer-eve...
function t (line 5) | function t(n){n.selectAll(".resize").attr("transform",function(n){return...
function e (line 5) | function e(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n...
function r (line 5) | function r(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e...
function u (line 5) | function u(){function u(){32==mo.event.keyCode&&(N||(M=null,q[0]-=s[1],q...
FILE: public/assets/dashboard/js/plugins/simditor/hotkeys.js
function ctor (line 23) | function ctor() { this.constructor = child; }
function Hotkeys (line 28) | function Hotkeys() {
FILE: public/assets/dashboard/js/plugins/simditor/module.js
function Module (line 69) | function Module(opts) {
FILE: public/assets/dashboard/js/plugins/simditor/simditor.js
function ctor (line 28) | function ctor() { this.constructor = child; }
function Selection (line 33) | function Selection() {
function ctor (line 313) | function ctor() { this.constructor = child; }
function Formatter (line 319) | function Formatter() {
function ctor (line 571) | function ctor() { this.constructor = child; }
function InputManager (line 577) | function InputManager() {
function ctor (line 1041) | function ctor() { this.constructor = child; }
function Keystroke (line 1046) | function Keystroke() {
function ctor (line 1292) | function ctor() { this.constructor = child; }
function UndoManager (line 1297) | function UndoManager() {
function ctor (line 1553) | function ctor() { this.constructor = child; }
function Util (line 1558) | function Util() {
function ctor (line 1918) | function ctor() { this.constructor = child; }
function Toolbar (line 1923) | function Toolbar() {
function ctor (line 2093) | function ctor() { this.constructor = child; }
function Simditor (line 2098) | function Simditor() {
function ctor (line 2353) | function ctor() { this.constructor = child; }
function Button (line 2388) | function Button(opts) {
function ctor (line 2558) | function ctor() { this.constructor = child; }
function Popover (line 2572) | function Popover(opts) {
function ctor (line 2679) | function ctor() { this.constructor = child; }
function TitleButton (line 2684) | function TitleButton() {
function ctor (line 2802) | function ctor() { this.constructor = child; }
function BoldButton (line 2807) | function BoldButton() {
function ctor (line 2858) | function ctor() { this.constructor = child; }
function ItalicButton (line 2863) | function ItalicButton() {
function ctor (line 2914) | function ctor() { this.constructor = child; }
function UnderlineButton (line 2919) | function UnderlineButton() {
function ctor (line 2970) | function ctor() { this.constructor = child; }
function ColorButton (line 2976) | function ColorButton() {
function ctor (line 3055) | function ctor() { this.constructor = child; }
function ListButton (line 3060) | function ListButton() {
function OrderListButton (line 3198) | function OrderListButton() {
function UnorderListButton (line 3229) | function UnorderListButton() {
function ctor (line 3263) | function ctor() { this.constructor = child; }
function BlockquoteButton (line 3268) | function BlockquoteButton() {
function ctor (line 3342) | function ctor() { this.constructor = child; }
function CodeButton (line 3348) | function CodeButton() {
function CodePopover (line 3478) | function CodePopover() {
function ctor (line 3524) | function ctor() { this.constructor = child; }
function LinkButton (line 3530) | function LinkButton() {
function LinkPopover (line 3630) | function LinkPopover() {
function ctor (line 3705) | function ctor() { this.constructor = child; }
function ImageButton (line 3711) | function ImageButton() {
function ImagePopover (line 4091) | function ImagePopover() {
function ctor (line 4288) | function ctor() { this.constructor = child; }
function IndentButton (line 4293) | function IndentButton() {
function ctor (line 4322) | function ctor() { this.constructor = child; }
function OutdentButton (line 4327) | function OutdentButton() {
function ctor (line 4356) | function ctor() { this.constructor = child; }
function HrButton (line 4361) | function HrButton() {
function ctor (line 4402) | function ctor() { this.constructor = child; }
function TableButton (line 4407) | function TableButton() {
function ctor (line 4848) | function ctor() { this.constructor = child; }
function StrikethroughButton (line 4853) | function StrikethroughButton() {
FILE: public/assets/dashboard/js/plugins/simditor/uploader.js
function ctor (line 23) | function ctor() { this.constructor = child; }
function Uploader (line 28) | function Uploader() {
FILE: public/assets/dashboard/js/plugins/switchery/switchery.js
function require (line 1) | function require(path,parent,orig){var resolved=require.resolve(path);if...
function lastIndexOf (line 1) | function lastIndexOf(arr,obj){var i=arr.length;while(i--){if(arr[i]===ob...
function localRequire (line 1) | function localRequire(path){var resolved=localRequire.resolve(path);retu...
function Transitionize (line 1) | function Transitionize(element,props){if(!(this instanceof Transitionize...
function FastClick (line 1) | function FastClick(layer){"use strict";var oldOnClick,self=this;this.tra...
function Switchery (line 1) | function Switchery(element,options){if(!(this instanceof Switchery))retu...
FILE: public/assets/dashboard/js/plugins/zTree/jquery.ztree.core-3.5.js
function addCallback (line 1495) | function addCallback() {
FILE: public/assets/dashboard/js/plugins/zTree/jquery.ztree.exedit-3.5.js
function copyCallback (line 194) | function copyCallback() {
function moveCallback (line 224) | function moveCallback() {
function _docMouseMove (line 320) | function _docMouseMove(event) {
function _docMouseUp (line 607) | function _docMouseUp(event) {
function _docSelect (line 711) | function _docSelect() {
FILE: public/assets/dashboard/js/xss.js
function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
function getDefaultWhiteList (line 13) | function getDefaultWhiteList () {
function onTag (line 92) | function onTag (tag, html, options) {
function onIgnoreTag (line 104) | function onIgnoreTag (tag, html, options) {
function onTagAttr (line 116) | function onTagAttr (tag, name, value) {
function onIgnoreTagAttr (line 128) | function onIgnoreTagAttr (tag, name, value) {
function escapeHtml (line 137) | function escapeHtml (html) {
function safeAttrValue (line 150) | function safeAttrValue (tag, name, value, cssFilter) {
function escapeQuote (line 224) | function escapeQuote (str) {
function unescapeQuote (line 234) | function unescapeQuote (str) {
function escapeHtmlEntities (line 244) | function escapeHtmlEntities (str) {
function escapeDangerHtml5Entities (line 258) | function escapeDangerHtml5Entities (str) {
function clearNonPrintableCharacter (line 269) | function clearNonPrintableCharacter (str) {
function friendlyAttrValue (line 283) | function friendlyAttrValue (str) {
function escapeAttrValue (line 297) | function escapeAttrValue (str) {
function onIgnoreTagStripAll (line 306) | function onIgnoreTagStripAll () {
function StripTagBody (line 316) | function StripTagBody (tags, next) {
function stripCommentTag (line 368) | function stripCommentTag (html) {
function stripBlankChar (line 379) | function stripBlankChar (html) {
function filterXSS (line 435) | function filterXSS (html, options) {
function getTagName (line 468) | function getTagName (html) {
function isClosing (line 487) | function isClosing (html) {
function parseTag (line 500) | function parseTag (html, onTag, escapeHtml) {
function parseAttr (line 572) | function parseAttr (html, onAttr) {
function findNextEqual (line 653) | function findNextEqual (str, i) {
function findBeforeEqual (line 662) | function findBeforeEqual (str, i) {
function isQuoteWrapString (line 671) | function isQuoteWrapString (text) {
function stripQuoteWrap (line 680) | function stripQuoteWrap (text) {
function isNull (line 744) | function isNull (obj) {
function getAttrs (line 756) | function getAttrs (html) {
function shallowCopyObject (line 779) | function shallowCopyObject (obj) {
function FilterXSS (line 796) | function FilterXSS (options) {
function isNull (line 954) | function isNull (obj) {
function shallowCopyObject (line 964) | function shallowCopyObject (obj) {
function FilterCSS (line 980) | function FilterCSS (options) {
function getDefaultWhiteList (line 1048) | function getDefaultWhiteList (
Copy disabled (too large)
Download .json
Condensed preview — 1215 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (15,241K chars).
[
{
"path": ".gitattributes",
"chars": 123,
"preview": "* text=auto\nCHANGELOG.md export-ignore\n*.css linguist-language=php\n*.js linguist-language=php\n*.scss linguist-language=p"
},
{
"path": ".gitignore",
"chars": 249,
"preview": "/node_modules\n/public/hot\n/public/storage\n/storage/*.key\n/vendor\n/.idea\n/.vagrant\nHomestead.json\nHomestead.yaml\nnpm-debu"
},
{
"path": "app/Activities/BaseActivity.php",
"chars": 1958,
"preview": "<?php\nnamespace App\\Activities;\n\nuse App\\Models\\Activity;\nuse App\\Models\\Article;\nuse App\\Models\\Question;\nuse App\\Model"
},
{
"path": "app/Activities/UserCommentArticle.php",
"chars": 437,
"preview": "<?php\nnamespace App\\Activities;\n\nclass UserCommentArticle extends BaseActivity\n{\n /**\n * When use vote a article,"
},
{
"path": "app/Activities/UserFollowedUser.php",
"chars": 688,
"preview": "<?php\n\nnamespace App\\Activities;\n\nclass UserFollowedUser extends BaseActivity\n{\n /**\n * When use vote a article, "
},
{
"path": "app/Activities/UserReplyQuestion.php",
"chars": 442,
"preview": "<?php\nnamespace App\\Activities;\n\nclass UserReplyQuestion extends BaseActivity\n{\n /**\n * When use vote a article, "
},
{
"path": "app/Activities/UserUpvoteArticle.php",
"chars": 436,
"preview": "<?php\nnamespace App\\Activities;\n\nclass UserUpvoteArticle extends BaseActivity\n{\n /**\n * When use vote a article, "
},
{
"path": "app/Activities/UserUpvoteQuestion.php",
"chars": 442,
"preview": "<?php\nnamespace App\\Activities;\n\nclass UserUpvoteQuestion extends BaseActivity\n{\n /**\n * When use vote a article,"
},
{
"path": "app/Codehaoshi/Core/CreatorListener.php",
"chars": 152,
"preview": "<?php namespace Codehaoshi\\Core;\n\ninterface CreatorListener\n{\n public function creatorFailed($errors);\n public fun"
},
{
"path": "app/Codehaoshi/Creators/CommentCreator.php",
"chars": 2005,
"preview": "<?php\n\nnamespace App\\Codehaoshi\\Creators;\n\nuse App\\Activities\\UserCommentArticle;\nuse App\\Models\\Article;\nuse App\\Models"
},
{
"path": "app/Codehaoshi/Creators/ReplyCreator.php",
"chars": 1975,
"preview": "<?php\n\nnamespace App\\Codehaoshi\\Creators;\n\nuse App\\Activities\\UserReplyQuestion;\nuse App\\Models\\Question;\nuse App\\Models"
},
{
"path": "app/Codehaoshi/Creators/UserCreator.php",
"chars": 761,
"preview": "<?php\n\n\nnamespace App\\Codehaoshi\\Creators;\n\nuse App\\Codehaoshi\\Listeners\\UserCreatorListener;\nuse App\\Repositories\\UserR"
},
{
"path": "app/Codehaoshi/Handler/BackupHandler.php",
"chars": 537,
"preview": "<?php\n\nnamespace APp\\Codehaoshi\\Handler;\n\nuse Illuminate\\Support\\Facades\\Mail;\nuse Naux\\Mail\\SendCloudTemplate;\n\nclass B"
},
{
"path": "app/Codehaoshi/Handler/ImageUploadHandler.php",
"chars": 714,
"preview": "<?php\n\nnamespace Codehaoshi\\Handler;\n\nuse App\\Http\\Requests\\ImageUploadRequest;\nuse App\\Tools\\FileManager\\BaseManager;\n\n"
},
{
"path": "app/Codehaoshi/Listeners/UserCreatorListener.php",
"chars": 167,
"preview": "<?php\nnamespace App\\Codehaoshi\\Listeners;\n\ninterface UserCreatorListener\n{\n public function userValidationError($erro"
},
{
"path": "app/Codehaoshi/Notification/Metion.php",
"chars": 1246,
"preview": "<?php\n\nnamespace Codehaoshi\\Notification;\n\nuse App\\Models\\User;\n\nclass Metion\n{\n public $body_parsed;\n public $use"
},
{
"path": "app/Codehaoshi/Selectors/ArticleSelector.php",
"chars": 540,
"preview": "<?php\n\nnamespace Codehaoshi\\Selectors;\n\nuse App\\Repositories\\ArticleRepository;\n\nclass ArticleSelector\n{\n protected "
},
{
"path": "app/Codehaoshi/Selectors/QuestionSelector.php",
"chars": 590,
"preview": "<?php\n\nnamespace Codehaoshi\\Selectors;\n\nuse App\\Repositories\\ArticleRepository;\nuse App\\Repositories\\QuestionRepository;"
},
{
"path": "app/Codehaoshi/Stat/Stat.php",
"chars": 1332,
"preview": "<?php\n\nnamespace Codehaoshi\\Stat;\n\nuse App\\Repositories\\ArticleCategoryRepository;\nuse App\\Repositories\\QuestionCategory"
},
{
"path": "app/Codehaoshi/Stat/StatEntity.php",
"chars": 107,
"preview": "<?php\n\nnamespace Codehaoshi\\Stat;\n\nclass StatEntity\n{\n public $categoryList;\n public $questionList;\n}"
},
{
"path": "app/Codehaoshi/Vote/Voter.php",
"chars": 2292,
"preview": "<?php\n\nnamespace Codehaoshi\\Vote;\n\nuse App\\Activities\\UserUpvoteArticle;\nuse App\\Activities\\UserUpvoteQuestion;\nuse App\\"
},
{
"path": "app/Console/Commands/BaseCommand.php",
"chars": 625,
"preview": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\n\nclass BaseCommand extends Command\n{\n /**\n "
},
{
"path": "app/Console/Commands/BindAdmin.php",
"chars": 931,
"preview": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse App\\Models\\Role;\nuse App\\Models\\User;\n\nclass BindAdmin extends BaseCommand\n{"
},
{
"path": "app/Console/Commands/CodehaoshiInstall.php",
"chars": 1048,
"preview": "<?php\n\nnamespace App\\Console\\Commands;\n\n\nclass CodehaoshiInstall extends BaseCommand\n{\n /**\n * The name and signa"
},
{
"path": "app/Console/Kernel.php",
"chars": 1200,
"preview": "<?php\n\nnamespace App\\Console;\n\nuse App\\Console\\Commands\\BindAdmin;\nuse App\\Console\\Commands\\CodehaoshiInstall;\nuse Illum"
},
{
"path": "app/Exceptions/Handler.php",
"chars": 1877,
"preview": "<?php\n\nnamespace App\\Exceptions;\n\nuse Exception;\nuse Illuminate\\Auth\\AuthenticationException;\nuse Illuminate\\Foundation\\"
},
{
"path": "app/Helpers.php",
"chars": 2955,
"preview": "<?php\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\n\n/**\n * Generate a url for the dashboard application.\n *\n * @param "
},
{
"path": "app/Http/Controllers/ActivityController.php",
"chars": 2402,
"preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Article;\nuse App\\Models\\Question;\nuse App\\Repositories\\UserReposi"
},
{
"path": "app/Http/Controllers/Api/Apicontroller.php",
"chars": 3712,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse Illuminate\\Http\\Request;\nuse App\\Http\\Controllers\\Controller;\nuse League"
},
{
"path": "app/Http/Controllers/Api/ArticleController.php",
"chars": 1106,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Repositories\\ArticleRepository;\nuse App\\Transformers\\UserTransformer"
},
{
"path": "app/Http/Controllers/Api/CommentController.php",
"chars": 2066,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Activities\\UserCommentArticle;\nuse App\\Codehaoshi\\Creators\\CommentCr"
},
{
"path": "app/Http/Controllers/Api/FollowerController.php",
"chars": 1684,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Activities\\UserFollowedUser;\nuse App\\Notifications\\NewUserFollowNoti"
},
{
"path": "app/Http/Controllers/Api/QuestionController.php",
"chars": 1123,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Repositories\\QuestionRepository;\nuse App\\Transformers\\UserTransforme"
},
{
"path": "app/Http/Controllers/Api/ReplyController.php",
"chars": 2036,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Activities\\UserReplyQuestion;\nuse App\\Codehaoshi\\Creators\\ReplyCreat"
},
{
"path": "app/Http/Controllers/Api/UploadController.php",
"chars": 977,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\ImageUploadReques"
},
{
"path": "app/Http/Controllers/Api/Votecontroller.php",
"chars": 225,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse Illuminate\\Http\\Request;\nuse App\\Http\\Controllers\\Controller;\n\nclass Vot"
},
{
"path": "app/Http/Controllers/ArticlesController.php",
"chars": 5653,
"preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\n\nuse App\\Http\\Requests\\ArticleRequest;\nuse App\\Models\\Article;\nuse App\\Repositor"
},
{
"path": "app/Http/Controllers/Auth/ForgotPasswordController.php",
"chars": 2056,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\SendsPa"
},
{
"path": "app/Http/Controllers/Auth/LoginController.php",
"chars": 5539,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Codehaoshi\\Creators\\UserCreator;\nuse App\\Codehaoshi\\Listeners\\UserC"
},
{
"path": "app/Http/Controllers/Auth/RegisterController.php",
"chars": 2744,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Codehaoshi\\Listeners\\UserCreatorListener;\nuse App\\Models\\User;\nuse "
},
{
"path": "app/Http/Controllers/Auth/ResetPasswordController.php",
"chars": 948,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\ResetsP"
},
{
"path": "app/Http/Controllers/Auth/Traits/SocialiteHelper.php",
"chars": 1727,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth\\Traits;\n\nuse Socialite;\nuse Auth;\nuse Flash;\nuse Illuminate\\Http\\Request;\nuse"
},
{
"path": "app/Http/Controllers/CommentsController.php",
"chars": 1058,
"preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Codehaoshi\\Creators\\CommentCreator;\nuse App\\Http\\Requests\\StoreReplyOrCo"
},
{
"path": "app/Http/Controllers/Controller.php",
"chars": 361,
"preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Foundation\\Bus\\DispatchesJobs;\nuse Illuminate\\Routing\\Controller "
},
{
"path": "app/Http/Controllers/Dashboard/AboutsController.php",
"chars": 1209,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Repositories\\AboutRepository;\nuse Illuminate\\Http\\Request;\nuse"
},
{
"path": "app/Http/Controllers/Dashboard/ArticleCategoryController.php",
"chars": 2234,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Http\\Requests\\StoreArticleCategoryRequest;\nuse App\\Http\\Reques"
},
{
"path": "app/Http/Controllers/Dashboard/ArticlesController.php",
"chars": 4737,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Controllers\\Dashboar"
},
{
"path": "app/Http/Controllers/Dashboard/IndexController.php",
"chars": 1196,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Models\\Role;\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;"
},
{
"path": "app/Http/Controllers/Dashboard/LinksController.php",
"chars": 1190,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Repositories\\LinkReposito"
},
{
"path": "app/Http/Controllers/Dashboard/PermissionsController.php",
"chars": 1985,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Http\\Requests\\StorePermissionRequest;\nuse App\\Http\\Requests\\Up"
},
{
"path": "app/Http/Controllers/Dashboard/QuestionCategoryController.php",
"chars": 2279,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Http\\Requests\\StoreQuestionCategoryRequest;\nuse App\\Http\\Reque"
},
{
"path": "app/Http/Controllers/Dashboard/QuestionsController.php",
"chars": 4786,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Http\\Controllers\\Dashboard\\Traits\\ArticleHelper;\nuse App\\Http\\"
},
{
"path": "app/Http/Controllers/Dashboard/RolesController.php",
"chars": 2781,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreRoleR"
},
{
"path": "app/Http/Controllers/Dashboard/TagsController.php",
"chars": 1527,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Http\\Requests\\StoreTagRequest;\nuse App\\Http\\Requests\\UpdateTag"
},
{
"path": "app/Http/Controllers/Dashboard/Traits/ArticleHelper.php",
"chars": 1326,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard\\Traits;\n\nuse Auth;\nuse Carbon\\Carbon;\n\ntrait ArticleHelper\n{\n protect"
},
{
"path": "app/Http/Controllers/Dashboard/UsersController.php",
"chars": 3422,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Http\\Requests\\StoreUserRequest;\nuse App\\Http\\Requests\\UpdateUs"
},
{
"path": "app/Http/Controllers/HomeController.php",
"chars": 452,
"preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\n\nclass HomeController extends Controller\n{\n /**\n"
},
{
"path": "app/Http/Controllers/NotificationsController.php",
"chars": 558,
"preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse Auth;\n\nclass NotificationsController extends Co"
},
{
"path": "app/Http/Controllers/PagesController.php",
"chars": 1817,
"preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\n\nuse App\\Models\\About;\nuse App\\Models\\Article;\nuse App\\Models\\Question;\nuse App\\"
},
{
"path": "app/Http/Controllers/QuestionsController.php",
"chars": 6357,
"preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Requests\\ImageUploadRequest;\nuse App\\Http\\Requests\\QuestionRequest;"
},
{
"path": "app/Http/Controllers/TagController.php",
"chars": 865,
"preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Repositories\\ArticleRepository;\nuse App\\Repositories\\TagRepository;\n\ncla"
},
{
"path": "app/Http/Controllers/UserController.php",
"chars": 2197,
"preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\n\nuse App\\Http\\Requests\\ResetPasswordRequest;\nuse App\\Models\\User;\nuse App\\Reposi"
},
{
"path": "app/Http/Kernel.php",
"chars": 2470,
"preview": "<?php\n\nnamespace App\\Http;\n\nuse Illuminate\\Foundation\\Http\\Kernel as HttpKernel;\n\nclass Kernel extends HttpKernel\n{\n "
},
{
"path": "app/Http/Middleware/EncryptCookies.php",
"chars": 300,
"preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Cookie\\Middleware\\EncryptCookies as BaseEncrypter;\n\nclass EncryptC"
},
{
"path": "app/Http/Middleware/MustBeAdmin.php",
"chars": 506,
"preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Auth;\n\nclass MustBeAdmin\n{\n /**\n * Handle an incoming req"
},
{
"path": "app/Http/Middleware/RedirectIfAuthenticated.php",
"chars": 519,
"preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass RedirectIfAuthenticated\n"
},
{
"path": "app/Http/Middleware/TrimStrings.php",
"chars": 342,
"preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\TrimStrings as BaseTrimmer;\n\nclass Trim"
},
{
"path": "app/Http/Middleware/VerifyCsrfToken.php",
"chars": 322,
"preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken as BaseVerifier;\n\nclass"
},
{
"path": "app/Http/Requests/ArticleRequest.php",
"chars": 632,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ArticleRequest extends FormReque"
},
{
"path": "app/Http/Requests/ImageUploadRequest.php",
"chars": 641,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ImageUploadRequest extends FormR"
},
{
"path": "app/Http/Requests/QuestionRequest.php",
"chars": 633,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass QuestionRequest extends FormRequ"
},
{
"path": "app/Http/Requests/ResetPasswordRequest.php",
"chars": 532,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ResetPasswordRequest extends For"
},
{
"path": "app/Http/Requests/StoreArticleCategoryRequest.php",
"chars": 448,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreArticleCategoryRequest exte"
},
{
"path": "app/Http/Requests/StorePermissionRequest.php",
"chars": 363,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StorePermissionRequest extends F"
},
{
"path": "app/Http/Requests/StoreQuestionCategoryRequest.php",
"chars": 450,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreQuestionCategoryRequest ext"
},
{
"path": "app/Http/Requests/StoreReplyOrCommentRequest.php",
"chars": 318,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreReplyOrCommentRequest exte"
},
{
"path": "app/Http/Requests/StoreRoleRequest.php",
"chars": 351,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreRoleRequest extends FormReq"
},
{
"path": "app/Http/Requests/StoreTagRequest.php",
"chars": 382,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreTagRequest extends FormRequ"
},
{
"path": "app/Http/Requests/StoreUserRequest.php",
"chars": 433,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreUserRequest extends FormReq"
},
{
"path": "app/Http/Requests/UpdateArticleCategoryRequest.php",
"chars": 538,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nclass "
},
{
"path": "app/Http/Requests/UpdatePermissionRequest.php",
"chars": 453,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nclass "
},
{
"path": "app/Http/Requests/UpdateQuestionCategoryRequest.php",
"chars": 540,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nclass "
},
{
"path": "app/Http/Requests/UpdateRoleRequest.php",
"chars": 441,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nclass "
},
{
"path": "app/Http/Requests/UpdateTagRequest.php",
"chars": 472,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nclass "
},
{
"path": "app/Http/Requests/UpdateUserRequest.php",
"chars": 492,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nclass "
},
{
"path": "app/Models/About.php",
"chars": 607,
"preview": "<?php\n\nnamespace App\\Models;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse App\\Tools\\Markdowner;\nuse Illuminate\\Database\\E"
},
{
"path": "app/Models/Activity.php",
"chars": 462,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Activity extends Model\n{\n protected $fil"
},
{
"path": "app/Models/Article.php",
"chars": 3363,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\ArticleFilterable;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse App\\T"
},
{
"path": "app/Models/ArticleCategory.php",
"chars": 537,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\ncla"
},
{
"path": "app/Models/Comment.php",
"chars": 652,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\BaseFilterable;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illumina"
},
{
"path": "app/Models/Follower.php",
"chars": 162,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Follower extends Model\n{\n protected $fil"
},
{
"path": "app/Models/Link.php",
"chars": 168,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Link extends Model\n{\n protected $fillabl"
},
{
"path": "app/Models/Permission.php",
"chars": 703,
"preview": "<?php\n\nnamespace App\\Models;\n\n\nuse Ucer\\Entrust\\EntrustPermission;\n\nclass Permission extends EntrustPermission\n{\n pro"
},
{
"path": "app/Models/Question.php",
"chars": 3358,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\ArticleFilterable;\nuse App\\Tools\\Markdowner;\nuse Illuminate\\Database"
},
{
"path": "app/Models/QuestionCategory.php",
"chars": 540,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\ncla"
},
{
"path": "app/Models/Reply.php",
"chars": 652,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\BaseFilterable;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illumina"
},
{
"path": "app/Models/Role.php",
"chars": 1122,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse Ucer\\Entrust\\EntrustRole;\nuse Ucer\\Entrust\\Traits\\EntrustRoleTrait;\n\nclass Role extend"
},
{
"path": "app/Models/SiteStatus.php",
"chars": 156,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SiteStatus extends Model\n{\n public stati"
},
{
"path": "app/Models/Tag.php",
"chars": 872,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\ncla"
},
{
"path": "app/Models/Traits/ArticleFilterable.php",
"chars": 2486,
"preview": "<?php\n\nnamespace App\\Models\\Traits;\n\ntrait ArticleFilterable\n{\n\n public function getArticlesWithFilter($filter, $limi"
},
{
"path": "app/Models/Traits/BaseFilterable.php",
"chars": 168,
"preview": "<?php\n\nnamespace App\\Models\\Traits;\n\ntrait BaseFilterable\n{\n\n public function scopeRecent($query)\n {\n retur"
},
{
"path": "app/Models/Traits/FollowerHelper.php",
"chars": 1501,
"preview": "<?php\n\nnamespace App\\Models\\Traits;\n\ntrait FollowerHelper\n{\n /**\n * Check if user is followed by given user.\n "
},
{
"path": "app/Models/Traits/UserAvatorHelper.php",
"chars": 1094,
"preview": "<?php\nnamespace App\\Models\\Traits;\n\nuse GuzzleHttp\\Client;\n\ntrait UserAvatorHelper\n{\n public function cacheAvatar()\n "
},
{
"path": "app/Models/User.php",
"chars": 2427,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\FollowerHelper;\nuse App\\Models\\Traits\\UserAvatorHelper;\nuse App\\Tool"
},
{
"path": "app/Models/Vote.php",
"chars": 343,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Vote extends Model\n{\n protected $fillabl"
},
{
"path": "app/Notifications/NewUserFollowNotification.php",
"chars": 1540,
"preview": "<?php\n\nnamespace App\\Notifications;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Notifications\\Notification;\nuse Illumi"
},
{
"path": "app/Notifications/ReceivedComment.php",
"chars": 1637,
"preview": "<?php\n\nnamespace App\\Notifications;\n\nuse App\\Models\\Article;\nuse App\\Models\\Comment;\nuse App\\Models\\User;\nuse Illuminate"
},
{
"path": "app/Notifications/ReceivedReply.php",
"chars": 1655,
"preview": "<?php\n\nnamespace App\\Notifications;\n\nuse App\\Models\\Commentdd;\nuse App\\Models\\Question;\nuse App\\Models\\Reply;\nuse App\\Mo"
},
{
"path": "app/Notifications/UserVoteArticle.php",
"chars": 1551,
"preview": "<?php\n\nnamespace App\\Notifications;\n\nuse App\\Models\\Article;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Notifications\\"
},
{
"path": "app/Notifications/UserVoteQuestion.php",
"chars": 1562,
"preview": "<?php\n\nnamespace App\\Notifications;\n\nuse App\\Models\\Question;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Notifications"
},
{
"path": "app/Policies/ArticlePolicy.php",
"chars": 338,
"preview": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Article;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthoriza"
},
{
"path": "app/Policies/CommentPolicy.php",
"chars": 331,
"preview": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Comment;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthoriza"
},
{
"path": "app/Policies/QuestionPolicy.php",
"chars": 340,
"preview": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Question;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthoriz"
},
{
"path": "app/Policies/ReplyPolicy.php",
"chars": 321,
"preview": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Reply;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorizati"
},
{
"path": "app/Policies/UserPolicy.php",
"chars": 269,
"preview": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass UserPolicy\n"
},
{
"path": "app/Providers/AppServiceProvider.php",
"chars": 403,
"preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\ServiceProvider;\n\nclass AppServiceProvider extends ServiceProvid"
},
{
"path": "app/Providers/AuthServiceProvider.php",
"chars": 1092,
"preview": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Models\\Article;\nuse App\\Models\\Comment;\nuse App\\Models\\Question;\nuse App\\Models"
},
{
"path": "app/Providers/BroadcastServiceProvider.php",
"chars": 380,
"preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\ServiceProvider;\nuse Illuminate\\Support\\Facades\\Broadcast;\n\nclas"
},
{
"path": "app/Providers/CommonDataServiceProvider.php",
"chars": 1036,
"preview": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Models\\Link;\nuse Illuminate\\Support\\Facades\\View;\nuse Illuminate\\Support\\Servic"
},
{
"path": "app/Providers/EventServiceProvider.php",
"chars": 596,
"preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Event;\nuse Illuminate\\Foundation\\Support\\Providers\\Event"
},
{
"path": "app/Providers/RouteServiceProvider.php",
"chars": 1529,
"preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Route;\nuse Illuminate\\Foundation\\Support\\Providers\\Route"
},
{
"path": "app/Repositories/AboutRepository.php",
"chars": 222,
"preview": "<?php\n\nnamespace App\\Repositories;\n\n\n\nuse App\\Models\\About;\n\nclass AboutRepository\n{\n use BaseRepository;\n protect"
},
{
"path": "app/Repositories/ArticleCategoryRepository.php",
"chars": 391,
"preview": "<?php\n\nnamespace App\\Repositories;\n\nuse App\\Models\\ArticleCategory;\n\nclass ArticleCategoryRepository\n{\n use BaseRepos"
},
{
"path": "app/Repositories/ArticleRepository.php",
"chars": 1299,
"preview": "<?php\n\nnamespace App\\Repositories;\n\nuse App\\Models\\Article;\nuse App\\Models\\Comment;\n\nclass ArticleRepository\n{\n use B"
},
{
"path": "app/Repositories/BaseRepository.php",
"chars": 2562,
"preview": "<?php\n\nnamespace App\\Repositories;\n\ntrait BaseRepository\n{\n\n /**\n * Store a new record.\n *\n * @param $in"
},
{
"path": "app/Repositories/CommentRepository.php",
"chars": 231,
"preview": "<?php\n\nnamespace App\\Repositories;\n\nuse App\\Models\\Comment;\n\nclass CommentRepository\n{\n use BaseRepository;\n\n prot"
},
{
"path": "app/Repositories/LinkRepository.php",
"chars": 216,
"preview": "<?php\n\nnamespace App\\Repositories;\n\n\nuse App\\Models\\Link;\n\nclass LinkRepository\n{\n use BaseRepository;\n protected "
},
{
"path": "app/Repositories/PermissionRepository.php",
"chars": 245,
"preview": "<?php\n\nnamespace App\\Repositories;\n\nuse App\\Models\\Permission;\n\nclass PermissionRepository\n{\n use BaseRepository;\n "
},
{
"path": "app/Repositories/QuestionCategoryRepository.php",
"chars": 397,
"preview": "<?php\n\nnamespace App\\Repositories;\n\n\nuse App\\Models\\QuestionCategory;\n\nclass QuestionCategoryRepository\n{\n use BaseRe"
},
{
"path": "app/Repositories/QuestionRepository.php",
"chars": 1275,
"preview": "<?php\n\nnamespace App\\Repositories;\n\nuse App\\Models\\Question;\n\nclass QuestionRepository\n{\n use BaseRepository;\n pro"
},
{
"path": "app/Repositories/ReplyRepository.php",
"chars": 226,
"preview": "<?php\n\nnamespace App\\Repositories;\n\n\nuse App\\Models\\Reply;\n\nclass ReplyRepository\n{\n use BaseRepository;\n\n protect"
},
{
"path": "app/Repositories/RoleRepository.php",
"chars": 696,
"preview": "<?php\n\nnamespace App\\Repositories;\n\nuse App\\Models\\Role;\n\nclass RoleRepository\n{\n use BaseRepository;\n protected $"
},
{
"path": "app/Repositories/TagRepository.php",
"chars": 671,
"preview": "<?php\n\nnamespace App\\Repositories;\n\nuse App\\Models\\Tag;\nuse DB;\n\nclass TagRepository\n{\n use BaseRepository;\n prote"
},
{
"path": "app/Repositories/UserRepository.php",
"chars": 1451,
"preview": "<?php\n\nnamespace App\\Repositories;\n\nuse App\\Models\\User;\n\nclass UserRepository\n{\n use BaseRepository;\n protected $"
},
{
"path": "app/Tools/FileManager/BaseManager.php",
"chars": 1333,
"preview": "<?php\n\nnamespace App\\Tools\\FileManager;\n\nuse Illuminate\\Support\\Facades\\Storage;\n\nclass BaseManager\n{\n\n\n /**\n * @"
},
{
"path": "app/Tools/FileManager/UpyunManager.php",
"chars": 1127,
"preview": "<?php\n\nnamespace App\\Tools\\FileManager;\n\n\nuse Symfony\\Component\\HttpFoundation\\File\\UploadedFile;\n\nclass UpyunManager ex"
},
{
"path": "app/Tools/Mailer.php",
"chars": 480,
"preview": "<?php\n\nnamespace App\\Tools;\n\nuse Naux\\Mail\\SendCloudTemplate;\nuse Mail;\n\nclass Mailer\n{\n /**\n * @param $template\n"
},
{
"path": "app/Tools/Markdowner.php",
"chars": 956,
"preview": "<?php\n\nnamespace App\\Tools;\n\nuse Parsedown;\nuse League\\HTMLToMarkdown\\HtmlConverter;\n\nclass Markdowner\n{\n /**\n * "
},
{
"path": "app/Tools/UserMailer.php",
"chars": 371,
"preview": "<?php\nnamespace App\\Tools;\nuse Auth;\n\n/**\n * Class UserMailer\n * @package App\\Mailer\n */\nclass UserMailer extends Mailer"
},
{
"path": "app/Transformers/CommentTransformer.php",
"chars": 1047,
"preview": "<?php\n\nnamespace App\\Transformers;\n\nuse App\\Models\\Comment;\nuse League\\Fractal\\TransformerAbstract;\n\nclass CommentTransf"
},
{
"path": "app/Transformers/ReplyTransformer.php",
"chars": 1015,
"preview": "<?php\n\nnamespace App\\Transformers;\n\nuse App\\Models\\Reply;\nuse League\\Fractal\\TransformerAbstract;\n\nclass ReplyTransforme"
},
{
"path": "app/Transformers/UserTransformer.php",
"chars": 411,
"preview": "<?php\n\nnamespace App\\Transformers;\n\nuse App\\Models\\User;\nuse League\\Fractal\\TransformerAbstract;\n\nclass UserTransformer "
},
{
"path": "artisan",
"chars": 1646,
"preview": "#!/usr/bin/env php\n<?php\n\n/*\n|--------------------------------------------------------------------------\n| Register The "
},
{
"path": "bootstrap/app.php",
"chars": 1602,
"preview": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Create The Application\n|--------"
},
{
"path": "bootstrap/autoload.php",
"chars": 559,
"preview": "<?php\n\ndefine('LARAVEL_START', microtime(true));\n\n/*\n|------------------------------------------------------------------"
},
{
"path": "bootstrap/cache/.gitignore",
"chars": 14,
"preview": "*\n!.gitignore\n"
},
{
"path": "composer.json",
"chars": 1814,
"preview": "{\n \"name\": \"laravel/laravel\",\n \"description\": \"The Laravel Framework.\",\n \"keywords\": [\n \"framework\",\n \"laravel\""
},
{
"path": "config/app.php",
"chars": 10080,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Applicatio"
},
{
"path": "config/auth.php",
"chars": 3294,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Authentica"
},
{
"path": "config/broadcasting.php",
"chars": 1530,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Default Br"
},
{
"path": "config/cache.php",
"chars": 2598,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Default Ca"
},
{
"path": "config/codehaoshi.php",
"chars": 1051,
"preview": "<?php\nreturn [\n 'thirdLogin' => [\n 'github' => true,\n 'qq' => false\n ],\n 'uploadsPath' => [\n "
},
{
"path": "config/dashboardMenu.php",
"chars": 1838,
"preview": "<?php\n//http://fontawesome.io/icons/\nreturn [\n 'leftMenu' => [\n [\n 'name' => '用户管理',\n 's"
},
{
"path": "config/database.php",
"chars": 3804,
"preview": "<?php\n\nreturn [\n\n\t/*\n\t |--------------------------------------------------------------------------\n\t | Default Datab"
},
{
"path": "config/entrust.php",
"chars": 3237,
"preview": "<?php\n\n/**\n * This file is part of Entrust,\n * a role & permission management solution for Laravel.\n *\n * @license MIT\n "
},
{
"path": "config/filesystems.php",
"chars": 2497,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Default Fi"
},
{
"path": "config/laravel-backup.php",
"chars": 5732,
"preview": "<?php\nuse APp\\Codehaoshi\\Handler\\BackupHandler;\n\nreturn [\n\n 'backup' => [\n\n /*\n * The name of this app"
},
{
"path": "config/mail.php",
"chars": 4215,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Mail Drive"
},
{
"path": "config/queue.php",
"chars": 2481,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Default Qu"
},
{
"path": "config/scout.php",
"chars": 2574,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Default Se"
},
{
"path": "config/services.php",
"chars": 1364,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Third Part"
},
{
"path": "config/session.php",
"chars": 6273,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Default Se"
},
{
"path": "config/view.php",
"chars": 1004,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | View Stora"
},
{
"path": "database/.gitignore",
"chars": 9,
"preview": "*.sqlite\n"
},
{
"path": "database/factories/ModelFactory.php",
"chars": 2194,
"preview": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Model Factories\n|---------------"
},
{
"path": "database/migrations/2014_10_12_000000_create_users_table.php",
"chars": 2559,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "database/migrations/2014_10_12_100000_create_password_resets_table.php",
"chars": 683,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "database/migrations/2017_08_03_153641_entrust_setup_tables.php",
"chars": 2384,
"preview": "<?php\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass EntrustSetupTables "
},
{
"path": "database/migrations/2017_08_05_175713_create_article_categories_table.php",
"chars": 1215,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "database/migrations/2017_08_05_175737_create_articles_table.php",
"chars": 1952,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "database/migrations/2017_08_07_070242_create_tags_table.php",
"chars": 817,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "database/migrations/2017_08_07_070317_create_taggables_table.php",
"chars": 705,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "database/migrations/2017_08_10_054604_create_comments_table.php",
"chars": 1011,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "database/migrations/2017_08_13_063712_create_votes_table.php",
"chars": 770,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "database/migrations/2017_08_14_090729_create_followers_table.php",
"chars": 696,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "database/migrations/2017_08_14_124526_create_notifications_table.php",
"chars": 781,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "database/migrations/2017_08_18_154806_create_question_categories_table.php",
"chars": 1219,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "database/migrations/2017_08_19_105055_create_questions_table.php",
"chars": 1953,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "database/migrations/2017_08_19_153441_create_replies_table.php",
"chars": 1009,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "database/migrations/2017_08_20_072744_create_activities_table.php",
"chars": 806,
"preview": "<?php\n\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateActivitiesTa"
},
{
"path": "database/migrations/2017_08_22_111854_create_links_table.php",
"chars": 832,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "database/migrations/2017_08_22_111936_create_abouts_table.php",
"chars": 788,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "database/migrations/2017_08_25_164526_create_sitestatus_table.php",
"chars": 1234,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "database/seeds/ArticleCategoriesTableSeeder.php",
"chars": 2356,
"preview": "<?php\n\nuse Illuminate\\Database\\Seeder;\nuse Carbon\\Carbon;\n\nclass ArticleCategoriesTableSeeder extends Seeder\n{\n /**\n "
},
{
"path": "database/seeds/ArticlesTableSeeder.php",
"chars": 910,
"preview": "<?php\n\nuse Illuminate\\Database\\Seeder;\nuse App\\Models\\Article;\n\nclass ArticlesTableSeeder extends Seeder\n{\n /**\n "
},
{
"path": "database/seeds/DatabaseSeeder.php",
"chars": 604,
"preview": "<?php\n\nuse Illuminate\\Database\\Seeder;\n\nclass DatabaseSeeder extends Seeder\n{\n /**\n * Run the database seeds.\n "
},
{
"path": "database/seeds/PermissionsTableSeeder.php",
"chars": 858,
"preview": "<?php\n\nuse Illuminate\\Database\\Seeder;\n\nclass PermissionsTableSeeder extends Seeder\n{\n /**\n * Run the database se"
},
{
"path": "database/seeds/QuestionCategoriesTableSeeder.php",
"chars": 2391,
"preview": "<?php\n\nuse Illuminate\\Database\\Seeder;\nuse Carbon\\Carbon;\n\nclass QuestionCategoriesTableSeeder extends Seeder\n{\n /**\n"
},
{
"path": "database/seeds/QuestionsTableSeeder.php",
"chars": 921,
"preview": "<?php\n\nuse Illuminate\\Database\\Seeder;\nuse App\\Models\\Question;\n\nclass QuestionsTableSeeder extends Seeder\n{\n /**\n "
},
{
"path": "database/seeds/RolesTableSeeder.php",
"chars": 856,
"preview": "<?php\n\nuse Illuminate\\Database\\Seeder;\n\nclass RolesTableSeeder extends Seeder\n{\n /**\n * Run the database seeds.\n "
},
{
"path": "database/seeds/TaggablesTableSeeder.php",
"chars": 644,
"preview": "<?php\n\nuse Illuminate\\Database\\Seeder;\nuse App\\Models\\Article;\nuse App\\Models\\Question;\n\nclass TaggablesTableSeeder exte"
},
{
"path": "database/seeds/TagsTableSeeder.php",
"chars": 1495,
"preview": "<?php\n\nuse Illuminate\\Database\\Seeder;\nuse Carbon\\Carbon;\n\nclass TagsTableSeeder extends Seeder\n{\n /**\n * Run the"
},
{
"path": "database/seeds/UsersTableSeeder.php",
"chars": 1308,
"preview": "<?php\n\nuse Illuminate\\Database\\Seeder;\nuse App\\Models\\User;\nuse App\\Repositories\\RoleRepository;\nuse App\\Models\\Role;\n\nc"
},
{
"path": "package.json",
"chars": 1463,
"preview": "{\n \"private\": true,\n \"scripts\": {\n \"dev\": \"npm run development\",\n \"development\": \"cross-env NODE_ENV=development"
},
{
"path": "phpunit.xml",
"chars": 1043,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit backupGlobals=\"false\"\n backupStaticAttributes=\"false\"\n b"
},
{
"path": "public/.htaccess",
"chars": 553,
"preview": "<IfModule mod_rewrite.c>\n <IfModule mod_negotiation.c>\n Options -MultiViews\n </IfModule>\n\n RewriteEngine"
},
{
"path": "public/assets/css/components/accordion.css",
"chars": 8719,
"preview": "/*!\n * # Semantic UI 2.2.11 - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT l"
},
{
"path": "public/assets/css/components/accordion.js",
"chars": 19990,
"preview": "/*!\n * # Semantic UI 2.2.11 - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT l"
},
{
"path": "public/assets/css/components/ad.css",
"chars": 3902,
"preview": "/*!\n * # Semantic UI 2.2.11 - Ad\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2013 Contributors\n * "
},
{
"path": "public/assets/css/components/api.js",
"chars": 39786,
"preview": "/*!\n * # Semantic UI 2.2.11 - API\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license"
}
]
// ... and 1015 more files (download for full content)
About this extraction
This page contains the full source code of the Ucer/codehaoshi GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1215 files (13.6 MB), approximately 3.6M tokens, and a symbol index with 3506 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.