Full Code of assimon/dujiaoka for AI

master e846d127df03 cached
852 files
13.9 MB
3.7M tokens
2842 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (14,766K chars total). Download the full file to get everything.
Repository: assimon/dujiaoka
Branch: master
Commit: e846d127df03
Files: 852
Total size: 13.9 MB

Directory structure:
gitextract_f4oc_he4/

├── .editorconfig
├── .gitattributes
├── .gitignore
├── .styleci.yml
├── Dockerfile
├── LICENSE
├── README.md
├── app/
│   ├── Admin/
│   │   ├── Actions/
│   │   │   └── Post/
│   │   │       ├── BatchRestore.php
│   │   │       └── Restore.php
│   │   ├── Charts/
│   │   │   ├── DashBoard.php
│   │   │   ├── PayoutRateCard.php
│   │   │   ├── SalesCard.php
│   │   │   └── SuccessOrderCard.php
│   │   ├── Controllers/
│   │   │   ├── AuthController.php
│   │   │   ├── CarmisController.php
│   │   │   ├── CouponController.php
│   │   │   ├── EmailTestController.php
│   │   │   ├── EmailtplController.php
│   │   │   ├── GoodsController.php
│   │   │   ├── GoodsGroupController.php
│   │   │   ├── HomeController.php
│   │   │   ├── OrderController.php
│   │   │   ├── PayController.php
│   │   │   └── SystemSettingController.php
│   │   ├── Forms/
│   │   │   ├── EmailTest.php
│   │   │   ├── ImportCarmis.php
│   │   │   └── SystemSetting.php
│   │   ├── Repositories/
│   │   │   ├── Carmis.php
│   │   │   ├── Coupon.php
│   │   │   ├── Emailtpl.php
│   │   │   ├── Goods.php
│   │   │   ├── GoodsGroup.php
│   │   │   ├── Order.php
│   │   │   └── Pay.php
│   │   ├── bootstrap.php
│   │   └── routes.php
│   ├── Console/
│   │   └── Kernel.php
│   ├── Events/
│   │   ├── GoodsDeleted.php
│   │   ├── GoodsGroupDeleted.php
│   │   └── OrderUpdated.php
│   ├── Exceptions/
│   │   ├── AppException.php
│   │   ├── Handler.php
│   │   └── RuleValidationException.php
│   ├── Helpers/
│   │   └── functions.php
│   ├── Http/
│   │   ├── Controllers/
│   │   │   ├── BaseController.php
│   │   │   ├── Controller.php
│   │   │   ├── Home/
│   │   │   │   ├── HomeController.php
│   │   │   │   └── OrderController.php
│   │   │   ├── Pay/
│   │   │   │   ├── AlipayController.php
│   │   │   │   ├── CoinbaseController.php
│   │   │   │   ├── EpusdtController.php
│   │   │   │   ├── MapayController.php
│   │   │   │   ├── PayjsController.php
│   │   │   │   ├── PaypalPayController.php
│   │   │   │   ├── PaysapiController.php
│   │   │   │   ├── StripeController.php
│   │   │   │   ├── TokenPayController.php
│   │   │   │   ├── VpayController.php
│   │   │   │   ├── WepayController.php
│   │   │   │   └── YipayController.php
│   │   │   └── PayController.php
│   │   ├── Kernel.php
│   │   └── Middleware/
│   │       ├── Authenticate.php
│   │       ├── CheckForMaintenanceMode.php
│   │       ├── DujiaoBoot.php
│   │       ├── DujiaoSystem.php
│   │       ├── EncryptCookies.php
│   │       ├── InstallCheck.php
│   │       ├── PayGateWay.php
│   │       ├── RedirectIfAuthenticated.php
│   │       ├── TrimStrings.php
│   │       ├── TrustProxies.php
│   │       └── VerifyCsrfToken.php
│   ├── Jobs/
│   │   ├── ApiHook.php
│   │   ├── BarkPush.php
│   │   ├── CouponBack.php
│   │   ├── MailSend.php
│   │   ├── OrderExpired.php
│   │   ├── ServerJiang.php
│   │   ├── TelegramPush.php
│   │   └── WorkWeiXinPush.php
│   ├── Listeners/
│   │   ├── GoodsDeleted.php
│   │   ├── GoodsGroupDeleted.php
│   │   └── OrderUpdated.php
│   ├── Models/
│   │   ├── BaseModel.php
│   │   ├── Carmis.php
│   │   ├── Coupon.php
│   │   ├── Emailtpl.php
│   │   ├── Goods.php
│   │   ├── GoodsGroup.php
│   │   ├── Order.php
│   │   └── Pay.php
│   ├── Providers/
│   │   ├── AppServiceProvider.php
│   │   ├── AuthServiceProvider.php
│   │   ├── BroadcastServiceProvider.php
│   │   ├── EventServiceProvider.php
│   │   └── RouteServiceProvider.php
│   ├── Rules/
│   │   ├── SearchPwd.php
│   │   └── VerifyImg.php
│   ├── Service/
│   │   ├── CarmisService.php
│   │   ├── CouponService.php
│   │   ├── EmailtplService.php
│   │   ├── GoodsService.php
│   │   ├── OrderProcessService.php
│   │   ├── OrderService.php
│   │   └── PayService.php
│   └── User.php
├── artisan
├── bootstrap/
│   ├── app.php
│   └── cache/
│       └── .gitignore
├── composer.json
├── config/
│   ├── admin.php
│   ├── app.php
│   ├── auth.php
│   ├── broadcasting.php
│   ├── cache.php
│   ├── database.php
│   ├── dujiaoka.php
│   ├── filesystems.php
│   ├── geetest.php
│   ├── hashing.php
│   ├── logging.php
│   ├── mail.php
│   ├── queue.php
│   ├── services.php
│   ├── session.php
│   └── view.php
├── database/
│   ├── .gitignore
│   ├── factories/
│   │   └── OrderFactory.php
│   ├── seeds/
│   │   ├── DatabaseSeeder.php
│   │   └── OrderTableSeeder.php
│   └── sql/
│       └── install.sql
├── dcat_admin_ide_helper.php
├── debian_manual.md
├── docker-compose.yml
├── package.json
├── phpunit.xml
├── public/
│   ├── .htaccess
│   ├── assets/
│   │   ├── hyper/
│   │   │   ├── css/
│   │   │   │   ├── hyper-loading.css
│   │   │   │   ├── hyper.css
│   │   │   │   └── vendor/
│   │   │   │       ├── buttons.bootstrap4.css
│   │   │   │       ├── dataTables.bootstrap4.css
│   │   │   │       ├── frappe-gantt.css
│   │   │   │       ├── jquery-jvectormap-1.2.2.css
│   │   │   │       ├── responsive.bootstrap4.css
│   │   │   │       ├── select.bootstrap4.css
│   │   │   │       └── summernote-bs4.css
│   │   │   └── js/
│   │   │       └── hyper.js
│   │   ├── luna/
│   │   │   ├── js/
│   │   │   │   └── viewerjs/
│   │   │   │       ├── viewer.common.js
│   │   │   │       ├── viewer.css
│   │   │   │       ├── viewer.esm.js
│   │   │   │       └── viewer.js
│   │   │   ├── layui/
│   │   │   │   ├── css/
│   │   │   │   │   ├── layui.css
│   │   │   │   │   ├── layui.mobile.css
│   │   │   │   │   └── modules/
│   │   │   │   │       ├── code.css
│   │   │   │   │       ├── laydate/
│   │   │   │   │       │   └── default/
│   │   │   │   │       │       └── laydate.css
│   │   │   │   │       └── layer/
│   │   │   │   │           └── default/
│   │   │   │   │               └── layer.css
│   │   │   │   ├── lay/
│   │   │   │   │   └── modules/
│   │   │   │   │       ├── carousel.js
│   │   │   │   │       ├── code.js
│   │   │   │   │       ├── colorpicker.js
│   │   │   │   │       ├── element.js
│   │   │   │   │       ├── flow.js
│   │   │   │   │       ├── form.js
│   │   │   │   │       ├── jquery.js
│   │   │   │   │       ├── laydate.js
│   │   │   │   │       ├── layedit.js
│   │   │   │   │       ├── layer.js
│   │   │   │   │       ├── laypage.js
│   │   │   │   │       ├── laytpl.js
│   │   │   │   │       ├── mobile.js
│   │   │   │   │       ├── rate.js
│   │   │   │   │       ├── slider.js
│   │   │   │   │       ├── table.js
│   │   │   │   │       ├── transfer.js
│   │   │   │   │       ├── tree.js
│   │   │   │   │       ├── upload.js
│   │   │   │   │       └── util.js
│   │   │   │   └── layui.js
│   │   │   ├── main.css
│   │   │   └── main.js
│   │   ├── style/
│   │   │   ├── js/
│   │   │   │   └── clipboard/
│   │   │   │       └── clipboard.js
│   │   │   └── main.css
│   │   └── unicorn/
│   │       ├── css/
│   │       │   ├── base.css
│   │       │   ├── common.css
│   │       │   └── index.css
│   │       └── js/
│   │           └── bootstrap-input-spinner.js
│   ├── index.php
│   ├── robots.txt
│   ├── vendor/
│   │   └── dcat-admin/
│   │       ├── adminlte/
│   │       │   ├── adminlte-blue-light.css
│   │       │   ├── adminlte-blue.css
│   │       │   ├── adminlte-green.css
│   │       │   ├── adminlte.css
│   │       │   └── adminlte.js
│   │       ├── dcat/
│   │       │   ├── css/
│   │       │   │   ├── dcat-app-blue-light.css
│   │       │   │   ├── dcat-app-blue.css
│   │       │   │   ├── dcat-app-green.css
│   │       │   │   ├── dcat-app.css
│   │       │   │   └── nunito.css
│   │       │   ├── extra/
│   │       │   │   ├── action.js
│   │       │   │   ├── grid-extend.js
│   │       │   │   ├── markdown.css
│   │       │   │   ├── select-table.js
│   │       │   │   ├── upload.css
│   │       │   │   └── upload.js
│   │       │   ├── js/
│   │       │   │   └── dcat-app.js
│   │       │   └── plugins/
│   │       │       ├── bootstrap-colorpicker/
│   │       │       │   ├── css/
│   │       │       │   │   └── bootstrap-colorpicker.css
│   │       │       │   └── js/
│   │       │       │       └── bootstrap-colorpicker.js
│   │       │       ├── bootstrap-datetimepicker/
│   │       │       │   └── bootstrap-datetimepicker.css
│   │       │       ├── bootstrap-duallistbox/
│   │       │       │   ├── .editorconfig
│   │       │       │   ├── .jshintrc
│   │       │       │   ├── .travis.yml
│   │       │       │   └── dist/
│   │       │       │       ├── bootstrap-duallistbox.css
│   │       │       │       └── jquery.bootstrap-duallistbox.js
│   │       │       ├── bootstrap-iconpicker/
│   │       │       │   ├── css/
│   │       │       │   │   └── bootstrap-iconpicker.css
│   │       │       │   └── js/
│   │       │       │       ├── bootstrap-iconpicker-iconset-all.js
│   │       │       │       └── bootstrap-iconpicker.js
│   │       │       ├── bootstrap-validator/
│   │       │       │   └── validator.js
│   │       │       ├── charts/
│   │       │       │   ├── apexcharts.css
│   │       │       │   └── apexcharts.js
│   │       │       ├── editor-md/
│   │       │       │   ├── Gulpfile.js
│   │       │       │   ├── LICENSE
│   │       │       │   ├── README.md
│   │       │       │   ├── css/
│   │       │       │   │   ├── editormd.css
│   │       │       │   │   ├── editormd.logo.css
│   │       │       │   │   └── editormd.preview.css
│   │       │       │   ├── editormd.amd.js
│   │       │       │   ├── editormd.js
│   │       │       │   ├── fonts/
│   │       │       │   │   └── FontAwesome.otf
│   │       │       │   ├── languages/
│   │       │       │   │   ├── en.js
│   │       │       │   │   └── zh-tw.js
│   │       │       │   ├── lib/
│   │       │       │   │   └── codemirror/
│   │       │       │   │       ├── AUTHORS
│   │       │       │   │       ├── LICENSE
│   │       │       │   │       ├── README.md
│   │       │       │   │       ├── addon/
│   │       │       │   │       │   ├── comment/
│   │       │       │   │       │   │   ├── comment.js
│   │       │       │   │       │   │   └── continuecomment.js
│   │       │       │   │       │   ├── dialog/
│   │       │       │   │       │   │   ├── dialog.css
│   │       │       │   │       │   │   └── dialog.js
│   │       │       │   │       │   ├── display/
│   │       │       │   │       │   │   ├── fullscreen.css
│   │       │       │   │       │   │   ├── fullscreen.js
│   │       │       │   │       │   │   ├── panel.js
│   │       │       │   │       │   │   ├── placeholder.js
│   │       │       │   │       │   │   └── rulers.js
│   │       │       │   │       │   ├── edit/
│   │       │       │   │       │   │   ├── closebrackets.js
│   │       │       │   │       │   │   ├── closetag.js
│   │       │       │   │       │   │   ├── continuelist.js
│   │       │       │   │       │   │   ├── matchbrackets.js
│   │       │       │   │       │   │   ├── matchtags.js
│   │       │       │   │       │   │   └── trailingspace.js
│   │       │       │   │       │   ├── fold/
│   │       │       │   │       │   │   ├── brace-fold.js
│   │       │       │   │       │   │   ├── comment-fold.js
│   │       │       │   │       │   │   ├── foldcode.js
│   │       │       │   │       │   │   ├── foldgutter.css
│   │       │       │   │       │   │   ├── foldgutter.js
│   │       │       │   │       │   │   ├── indent-fold.js
│   │       │       │   │       │   │   ├── markdown-fold.js
│   │       │       │   │       │   │   └── xml-fold.js
│   │       │       │   │       │   ├── hint/
│   │       │       │   │       │   │   ├── anyword-hint.js
│   │       │       │   │       │   │   ├── css-hint.js
│   │       │       │   │       │   │   ├── html-hint.js
│   │       │       │   │       │   │   ├── javascript-hint.js
│   │       │       │   │       │   │   ├── show-hint.css
│   │       │       │   │       │   │   ├── show-hint.js
│   │       │       │   │       │   │   ├── sql-hint.js
│   │       │       │   │       │   │   └── xml-hint.js
│   │       │       │   │       │   ├── lint/
│   │       │       │   │       │   │   ├── coffeescript-lint.js
│   │       │       │   │       │   │   ├── css-lint.js
│   │       │       │   │       │   │   ├── javascript-lint.js
│   │       │       │   │       │   │   ├── json-lint.js
│   │       │       │   │       │   │   ├── lint.css
│   │       │       │   │       │   │   ├── lint.js
│   │       │       │   │       │   │   └── yaml-lint.js
│   │       │       │   │       │   ├── merge/
│   │       │       │   │       │   │   ├── merge.css
│   │       │       │   │       │   │   └── merge.js
│   │       │       │   │       │   ├── mode/
│   │       │       │   │       │   │   ├── loadmode.js
│   │       │       │   │       │   │   ├── multiplex.js
│   │       │       │   │       │   │   ├── multiplex_test.js
│   │       │       │   │       │   │   ├── overlay.js
│   │       │       │   │       │   │   └── simple.js
│   │       │       │   │       │   ├── runmode/
│   │       │       │   │       │   │   ├── colorize.js
│   │       │       │   │       │   │   ├── runmode-standalone.js
│   │       │       │   │       │   │   ├── runmode.js
│   │       │       │   │       │   │   └── runmode.node.js
│   │       │       │   │       │   ├── scroll/
│   │       │       │   │       │   │   ├── annotatescrollbar.js
│   │       │       │   │       │   │   ├── scrollpastend.js
│   │       │       │   │       │   │   ├── simplescrollbars.css
│   │       │       │   │       │   │   └── simplescrollbars.js
│   │       │       │   │       │   ├── search/
│   │       │       │   │       │   │   ├── match-highlighter.js
│   │       │       │   │       │   │   ├── matchesonscrollbar.css
│   │       │       │   │       │   │   ├── matchesonscrollbar.js
│   │       │       │   │       │   │   ├── search.js
│   │       │       │   │       │   │   └── searchcursor.js
│   │       │       │   │       │   ├── selection/
│   │       │       │   │       │   │   ├── active-line.js
│   │       │       │   │       │   │   ├── mark-selection.js
│   │       │       │   │       │   │   └── selection-pointer.js
│   │       │       │   │       │   ├── tern/
│   │       │       │   │       │   │   ├── tern.css
│   │       │       │   │       │   │   ├── tern.js
│   │       │       │   │       │   │   └── worker.js
│   │       │       │   │       │   └── wrap/
│   │       │       │   │       │       └── hardwrap.js
│   │       │       │   │       ├── bower.json
│   │       │       │   │       ├── lib/
│   │       │       │   │       │   ├── codemirror.css
│   │       │       │   │       │   └── codemirror.js
│   │       │       │   │       ├── mode/
│   │       │       │   │       │   ├── apl/
│   │       │       │   │       │   │   ├── apl.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── asterisk/
│   │       │       │   │       │   │   ├── asterisk.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── clike/
│   │       │       │   │       │   │   ├── clike.js
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── scala.html
│   │       │       │   │       │   ├── clojure/
│   │       │       │   │       │   │   ├── clojure.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── cobol/
│   │       │       │   │       │   │   ├── cobol.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── coffeescript/
│   │       │       │   │       │   │   ├── coffeescript.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── commonlisp/
│   │       │       │   │       │   │   ├── commonlisp.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── css/
│   │       │       │   │       │   │   ├── css.js
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── less.html
│   │       │       │   │       │   │   ├── less_test.js
│   │       │       │   │       │   │   ├── scss.html
│   │       │       │   │       │   │   ├── scss_test.js
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── cypher/
│   │       │       │   │       │   │   ├── cypher.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── d/
│   │       │       │   │       │   │   ├── d.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── dart/
│   │       │       │   │       │   │   ├── dart.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── diff/
│   │       │       │   │       │   │   ├── diff.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── django/
│   │       │       │   │       │   │   ├── django.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── dockerfile/
│   │       │       │   │       │   │   ├── dockerfile.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── dtd/
│   │       │       │   │       │   │   ├── dtd.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── dylan/
│   │       │       │   │       │   │   ├── dylan.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── ebnf/
│   │       │       │   │       │   │   ├── ebnf.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── ecl/
│   │       │       │   │       │   │   ├── ecl.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── eiffel/
│   │       │       │   │       │   │   ├── eiffel.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── erlang/
│   │       │       │   │       │   │   ├── erlang.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── forth/
│   │       │       │   │       │   │   ├── forth.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── fortran/
│   │       │       │   │       │   │   ├── fortran.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── gas/
│   │       │       │   │       │   │   ├── gas.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── gfm/
│   │       │       │   │       │   │   ├── gfm.js
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── gherkin/
│   │       │       │   │       │   │   ├── gherkin.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── go/
│   │       │       │   │       │   │   ├── go.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── groovy/
│   │       │       │   │       │   │   ├── groovy.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── haml/
│   │       │       │   │       │   │   ├── haml.js
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── haskell/
│   │       │       │   │       │   │   ├── haskell.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── haxe/
│   │       │       │   │       │   │   ├── haxe.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── htmlembedded/
│   │       │       │   │       │   │   ├── htmlembedded.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── htmlmixed/
│   │       │       │   │       │   │   ├── htmlmixed.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── http/
│   │       │       │   │       │   │   ├── http.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── idl/
│   │       │       │   │       │   │   ├── idl.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── index.html
│   │       │       │   │       │   ├── jade/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── jade.js
│   │       │       │   │       │   ├── javascript/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── javascript.js
│   │       │       │   │       │   │   ├── json-ld.html
│   │       │       │   │       │   │   ├── test.js
│   │       │       │   │       │   │   └── typescript.html
│   │       │       │   │       │   ├── jinja2/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── jinja2.js
│   │       │       │   │       │   ├── julia/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── julia.js
│   │       │       │   │       │   ├── kotlin/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── kotlin.js
│   │       │       │   │       │   ├── livescript/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── livescript.js
│   │       │       │   │       │   ├── lua/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── lua.js
│   │       │       │   │       │   ├── markdown/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── markdown.js
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── meta.js
│   │       │       │   │       │   ├── mirc/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── mirc.js
│   │       │       │   │       │   ├── mllike/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── mllike.js
│   │       │       │   │       │   ├── modelica/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── modelica.js
│   │       │       │   │       │   ├── nginx/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── nginx.js
│   │       │       │   │       │   ├── ntriples/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── ntriples.js
│   │       │       │   │       │   ├── octave/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── octave.js
│   │       │       │   │       │   ├── pascal/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── pascal.js
│   │       │       │   │       │   ├── pegjs/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── pegjs.js
│   │       │       │   │       │   ├── perl/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── perl.js
│   │       │       │   │       │   ├── php/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── php.js
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── pig/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── pig.js
│   │       │       │   │       │   ├── properties/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── properties.js
│   │       │       │   │       │   ├── puppet/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── puppet.js
│   │       │       │   │       │   ├── python/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── python.js
│   │       │       │   │       │   ├── q/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── q.js
│   │       │       │   │       │   ├── r/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── r.js
│   │       │       │   │       │   ├── rpm/
│   │       │       │   │       │   │   ├── changes/
│   │       │       │   │       │   │   │   └── index.html
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── rpm.js
│   │       │       │   │       │   ├── rst/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── rst.js
│   │       │       │   │       │   ├── ruby/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── ruby.js
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── rust/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── rust.js
│   │       │       │   │       │   ├── sass/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── sass.js
│   │       │       │   │       │   ├── scheme/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── scheme.js
│   │       │       │   │       │   ├── shell/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── shell.js
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── sieve/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── sieve.js
│   │       │       │   │       │   ├── slim/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── slim.js
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── smalltalk/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── smalltalk.js
│   │       │       │   │       │   ├── smarty/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── smarty.js
│   │       │       │   │       │   ├── smartymixed/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── smartymixed.js
│   │       │       │   │       │   ├── solr/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── solr.js
│   │       │       │   │       │   ├── soy/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── soy.js
│   │       │       │   │       │   ├── sparql/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── sparql.js
│   │       │       │   │       │   ├── spreadsheet/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── spreadsheet.js
│   │       │       │   │       │   ├── sql/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── sql.js
│   │       │       │   │       │   ├── stex/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── stex.js
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── stylus/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── stylus.js
│   │       │       │   │       │   ├── tcl/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── tcl.js
│   │       │       │   │       │   ├── textile/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── test.js
│   │       │       │   │       │   │   └── textile.js
│   │       │       │   │       │   ├── tiddlywiki/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── tiddlywiki.css
│   │       │       │   │       │   │   └── tiddlywiki.js
│   │       │       │   │       │   ├── tiki/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── tiki.css
│   │       │       │   │       │   │   └── tiki.js
│   │       │       │   │       │   ├── toml/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── toml.js
│   │       │       │   │       │   ├── tornado/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── tornado.js
│   │       │       │   │       │   ├── turtle/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── turtle.js
│   │       │       │   │       │   ├── vb/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── vb.js
│   │       │       │   │       │   ├── vbscript/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── vbscript.js
│   │       │       │   │       │   ├── velocity/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── velocity.js
│   │       │       │   │       │   ├── verilog/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── test.js
│   │       │       │   │       │   │   └── verilog.js
│   │       │       │   │       │   ├── xml/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── test.js
│   │       │       │   │       │   │   └── xml.js
│   │       │       │   │       │   ├── xquery/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── test.js
│   │       │       │   │       │   │   └── xquery.js
│   │       │       │   │       │   ├── yaml/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── yaml.js
│   │       │       │   │       │   └── z80/
│   │       │       │   │       │       ├── index.html
│   │       │       │   │       │       └── z80.js
│   │       │       │   │       ├── package.json
│   │       │       │   │       └── theme/
│   │       │       │   │           ├── 3024-day.css
│   │       │       │   │           ├── 3024-night.css
│   │       │       │   │           ├── ambiance-mobile.css
│   │       │       │   │           ├── ambiance.css
│   │       │       │   │           ├── base16-dark.css
│   │       │       │   │           ├── base16-light.css
│   │       │       │   │           ├── blackboard.css
│   │       │       │   │           ├── cobalt.css
│   │       │       │   │           ├── colorforth.css
│   │       │       │   │           ├── eclipse.css
│   │       │       │   │           ├── elegant.css
│   │       │       │   │           ├── erlang-dark.css
│   │       │       │   │           ├── lesser-dark.css
│   │       │       │   │           ├── mbo.css
│   │       │       │   │           ├── mdn-like.css
│   │       │       │   │           ├── midnight.css
│   │       │       │   │           ├── monokai.css
│   │       │       │   │           ├── neat.css
│   │       │       │   │           ├── neo.css
│   │       │       │   │           ├── night.css
│   │       │       │   │           ├── paraiso-dark.css
│   │       │       │   │           ├── paraiso-light.css
│   │       │       │   │           ├── pastel-on-dark.css
│   │       │       │   │           ├── rubyblue.css
│   │       │       │   │           ├── solarized.css
│   │       │       │   │           ├── the-matrix.css
│   │       │       │   │           ├── tomorrow-night-bright.css
│   │       │       │   │           ├── tomorrow-night-eighties.css
│   │       │       │   │           ├── twilight.css
│   │       │       │   │           ├── vibrant-ink.css
│   │       │       │   │           ├── xq-dark.css
│   │       │       │   │           ├── xq-light.css
│   │       │       │   │           └── zenburn.css
│   │       │       │   ├── package.json
│   │       │       │   ├── plugins/
│   │       │       │   │   ├── code-block-dialog/
│   │       │       │   │   │   └── code-block-dialog.js
│   │       │       │   │   ├── emoji-dialog/
│   │       │       │   │   │   ├── emoji-dialog.js
│   │       │       │   │   │   └── emoji.json
│   │       │       │   │   ├── goto-line-dialog/
│   │       │       │   │   │   └── goto-line-dialog.js
│   │       │       │   │   ├── help-dialog/
│   │       │       │   │   │   ├── help-dialog.js
│   │       │       │   │   │   └── help.md
│   │       │       │   │   ├── html-entities-dialog/
│   │       │       │   │   │   ├── html-entities-dialog.js
│   │       │       │   │   │   └── html-entities.json
│   │       │       │   │   ├── image-dialog/
│   │       │       │   │   │   └── image-dialog.js
│   │       │       │   │   ├── link-dialog/
│   │       │       │   │   │   └── link-dialog.js
│   │       │       │   │   ├── plugin-template.js
│   │       │       │   │   ├── preformatted-text-dialog/
│   │       │       │   │   │   └── preformatted-text-dialog.js
│   │       │       │   │   ├── reference-link-dialog/
│   │       │       │   │   │   └── reference-link-dialog.js
│   │       │       │   │   ├── table-dialog/
│   │       │       │   │   │   └── table-dialog.js
│   │       │       │   │   └── test-plugin/
│   │       │       │   │       └── test-plugin.js
│   │       │       │   ├── scss/
│   │       │       │   │   ├── editormd.codemirror.scss
│   │       │       │   │   ├── editormd.dialog.scss
│   │       │       │   │   ├── editormd.form.scss
│   │       │       │   │   ├── editormd.grid.scss
│   │       │       │   │   ├── editormd.logo.scss
│   │       │       │   │   ├── editormd.menu.scss
│   │       │       │   │   ├── editormd.preview.scss
│   │       │       │   │   ├── editormd.preview.themes.scss
│   │       │       │   │   ├── editormd.scss
│   │       │       │   │   ├── editormd.tab.scss
│   │       │       │   │   ├── editormd.themes.scss
│   │       │       │   │   ├── font-awesome.scss
│   │       │       │   │   ├── github-markdown.scss
│   │       │       │   │   ├── lib/
│   │       │       │   │   │   ├── prefixes.scss
│   │       │       │   │   │   └── variables.scss
│   │       │       │   │   └── prettify.scss
│   │       │       │   └── src/
│   │       │       │       └── editormd.js
│   │       │       ├── extensions/
│   │       │       │   └── toastr.css
│   │       │       ├── fontawesome-iconpicker/
│   │       │       │   └── dist/
│   │       │       │       ├── css/
│   │       │       │       │   └── fontawesome-iconpicker.css
│   │       │       │       └── js/
│   │       │       │           └── fontawesome-iconpicker.js
│   │       │       ├── input-mask/
│   │       │       │   └── phone-codes/
│   │       │       │       ├── phone-be.json
│   │       │       │       ├── phone-codes.json
│   │       │       │       └── readme.txt
│   │       │       ├── ionslider/
│   │       │       │   ├── ion.rangeSlider.css
│   │       │       │   ├── ion.rangeSlider.skinFlat.css
│   │       │       │   └── ion.rangeSlider.skinNice.css
│   │       │       ├── jquery-pjax/
│   │       │       │   └── jquery.pjax.js
│   │       │       ├── jquery-qrcode/
│   │       │       │   └── dist/
│   │       │       │       └── jquery-qrcode.js
│   │       │       ├── jquery.initialize/
│   │       │       │   ├── LICENSE
│   │       │       │   └── jquery.initialize.js
│   │       │       ├── jstree-theme/
│   │       │       │   ├── jstree.js
│   │       │       │   └── themes/
│   │       │       │       ├── default/
│   │       │       │       │   └── style.css
│   │       │       │       └── proton/
│   │       │       │           └── style.css
│   │       │       ├── layer/
│   │       │       │   ├── layer.js
│   │       │       │   ├── mobile/
│   │       │       │   │   ├── layer.js
│   │       │       │   │   └── need/
│   │       │       │   │       └── layer.css
│   │       │       │   └── theme/
│   │       │       │       └── default/
│   │       │       │           └── layer.css
│   │       │       ├── moment-timezone/
│   │       │       │   ├── moment-timezone-with-data-10-year-range.js
│   │       │       │   ├── moment-timezone-with-data-1970-2030.js
│   │       │       │   ├── moment-timezone-with-data-2012-2022.js
│   │       │       │   └── moment-timezone-with-data.js
│   │       │       ├── nestable/
│   │       │       │   ├── jquery.nestable.js
│   │       │       │   └── nestable.css
│   │       │       ├── number-input/
│   │       │       │   └── bootstrap-number-input.js
│   │       │       ├── select/
│   │       │       │   ├── i18n/
│   │       │       │   │   ├── af.js
│   │       │       │   │   ├── ar.js
│   │       │       │   │   ├── az.js
│   │       │       │   │   ├── bg.js
│   │       │       │   │   ├── bn.js
│   │       │       │   │   ├── bs.js
│   │       │       │   │   ├── ca.js
│   │       │       │   │   ├── cs.js
│   │       │       │   │   ├── da.js
│   │       │       │   │   ├── de.js
│   │       │       │   │   ├── dsb.js
│   │       │       │   │   ├── el.js
│   │       │       │   │   ├── en.js
│   │       │       │   │   ├── eo.js
│   │       │       │   │   ├── es.js
│   │       │       │   │   ├── et.js
│   │       │       │   │   ├── eu.js
│   │       │       │   │   ├── fa.js
│   │       │       │   │   ├── fi.js
│   │       │       │   │   ├── fr.js
│   │       │       │   │   ├── gl.js
│   │       │       │   │   ├── he.js
│   │       │       │   │   ├── hi.js
│   │       │       │   │   ├── hr.js
│   │       │       │   │   ├── hsb.js
│   │       │       │   │   ├── hu.js
│   │       │       │   │   ├── hy.js
│   │       │       │   │   ├── id.js
│   │       │       │   │   ├── is.js
│   │       │       │   │   ├── it.js
│   │       │       │   │   ├── ja.js
│   │       │       │   │   ├── ka.js
│   │       │       │   │   ├── km.js
│   │       │       │   │   ├── ko.js
│   │       │       │   │   ├── lt.js
│   │       │       │   │   ├── lv.js
│   │       │       │   │   ├── mk.js
│   │       │       │   │   ├── ms.js
│   │       │       │   │   ├── nb.js
│   │       │       │   │   ├── ne.js
│   │       │       │   │   ├── nl.js
│   │       │       │   │   ├── pa.js
│   │       │       │   │   ├── pl.js
│   │       │       │   │   ├── ps.js
│   │       │       │   │   ├── pt-BR.js
│   │       │       │   │   ├── pt.js
│   │       │       │   │   ├── ro.js
│   │       │       │   │   ├── ru.js
│   │       │       │   │   ├── sk.js
│   │       │       │   │   ├── sl.js
│   │       │       │   │   ├── sq.js
│   │       │       │   │   ├── sr-Cyrl.js
│   │       │       │   │   ├── sr.js
│   │       │       │   │   ├── sv.js
│   │       │       │   │   ├── th.js
│   │       │       │   │   ├── tk.js
│   │       │       │   │   ├── tr.js
│   │       │       │   │   ├── uk.js
│   │       │       │   │   ├── vi.js
│   │       │       │   │   ├── zh-CN.js
│   │       │       │   │   └── zh-TW.js
│   │       │       │   ├── select2.css
│   │       │       │   ├── select2.full.js
│   │       │       │   └── select2.js
│   │       │       ├── tinymce/
│   │       │       │   ├── langs/
│   │       │       │   │   ├── ar.js
│   │       │       │   │   ├── bg_BG.js
│   │       │       │   │   ├── bn_BD.js
│   │       │       │   │   ├── ca.js
│   │       │       │   │   ├── cs.js
│   │       │       │   │   ├── cy.js
│   │       │       │   │   ├── da.js
│   │       │       │   │   ├── de.js
│   │       │       │   │   ├── el.js
│   │       │       │   │   ├── eo.js
│   │       │       │   │   ├── es.js
│   │       │       │   │   ├── es_ES.js
│   │       │       │   │   ├── es_MX.js
│   │       │       │   │   ├── et.js
│   │       │       │   │   ├── eu.js
│   │       │       │   │   ├── fa.js
│   │       │       │   │   ├── fa_IR.js
│   │       │       │   │   ├── fi.js
│   │       │       │   │   ├── fr_FR.js
│   │       │       │   │   ├── gl.js
│   │       │       │   │   ├── he_IL.js
│   │       │       │   │   ├── hr.js
│   │       │       │   │   ├── hu_HU.js
│   │       │       │   │   ├── hy.js
│   │       │       │   │   ├── id.js
│   │       │       │   │   ├── it.js
│   │       │       │   │   ├── it_IT.js
│   │       │       │   │   ├── ja.js
│   │       │       │   │   ├── kab.js
│   │       │       │   │   ├── kk.js
│   │       │       │   │   ├── ko_KR.js
│   │       │       │   │   ├── ku.js
│   │       │       │   │   ├── lt.js
│   │       │       │   │   ├── nb_NO.js
│   │       │       │   │   ├── nl.js
│   │       │       │   │   ├── pl.js
│   │       │       │   │   ├── pt_BR.js
│   │       │       │   │   ├── pt_PT.js
│   │       │       │   │   ├── readme.md
│   │       │       │   │   ├── ro.js
│   │       │       │   │   ├── ro_RO.js
│   │       │       │   │   ├── ru.js
│   │       │       │   │   ├── sk.js
│   │       │       │   │   ├── sl.js
│   │       │       │   │   ├── sl_SI.js
│   │       │       │   │   ├── sv_SE.js
│   │       │       │   │   ├── ta.js
│   │       │       │   │   ├── ta_IN.js
│   │       │       │   │   ├── th_TH.js
│   │       │       │   │   ├── tr.js
│   │       │       │   │   ├── tr_TR.js
│   │       │       │   │   ├── uk.js
│   │       │       │   │   ├── vi.js
│   │       │       │   │   ├── zh_CN.js
│   │       │       │   │   └── zh_TW.js
│   │       │       │   ├── license.txt
│   │       │       │   └── plugins/
│   │       │       │       └── emoticons/
│   │       │       │           └── js/
│   │       │       │               └── emojis.js
│   │       │       └── webuploader/
│   │       │           ├── README.md
│   │       │           ├── Uploader.swf
│   │       │           ├── expressInstall.swf
│   │       │           ├── icons.psd
│   │       │           ├── progress.psd
│   │       │           ├── webuploader.css
│   │       │           ├── webuploader.custom.js
│   │       │           ├── webuploader.fis.js
│   │       │           ├── webuploader.flashonly.js
│   │       │           ├── webuploader.html5only.js
│   │       │           ├── webuploader.js
│   │       │           ├── webuploader.noimage.js
│   │       │           ├── webuploader.nolog.js
│   │       │           └── webuploader.withoutimage.js
│   │       └── fonts/
│   │           ├── feather/
│   │           │   └── iconfont.css
│   │           └── font-awesome/
│   │               ├── css/
│   │               │   └── font-awesome.css
│   │               └── fonts/
│   │                   └── FontAwesome.otf
│   └── web.config
├── resources/
│   ├── js/
│   │   ├── app.js
│   │   └── bootstrap.js
│   ├── lang/
│   │   ├── en/
│   │   │   ├── admin.php
│   │   │   ├── auth.php
│   │   │   ├── pagination.php
│   │   │   ├── passwords.php
│   │   │   └── validation.php
│   │   ├── zh_CN/
│   │   │   ├── admin.php
│   │   │   ├── carmis.php
│   │   │   ├── coupon.php
│   │   │   ├── dujiaoka.php
│   │   │   ├── email-test.php
│   │   │   ├── emailtpl.php
│   │   │   ├── extension.php
│   │   │   ├── global.php
│   │   │   ├── goods-group.php
│   │   │   ├── goods.php
│   │   │   ├── hyper.php
│   │   │   ├── luna.php
│   │   │   ├── menu.php
│   │   │   ├── order.php
│   │   │   ├── pay.php
│   │   │   └── system-setting.php
│   │   └── zh_TW/
│   │       ├── admin.php
│   │       ├── carmis.php
│   │       ├── coupon.php
│   │       ├── dujiaoka.php
│   │       ├── emailtpl.php
│   │       ├── extension.php
│   │       ├── global.php
│   │       ├── goods-group.php
│   │       ├── goods.php
│   │       ├── hyper.php
│   │       ├── luna.php
│   │       ├── menu.php
│   │       ├── order.php
│   │       ├── pay.php
│   │       └── system-setting.php
│   ├── sass/
│   │   └── app.scss
│   └── views/
│       ├── admin/
│       │   └── dashboard/
│       │       └── title.blade.php
│       ├── common/
│       │   ├── install.blade.php
│       │   └── notencent.blade.php
│       ├── email/
│       │   └── mail.blade.php
│       ├── hyper/
│       │   ├── errors/
│       │   │   └── error.blade.php
│       │   ├── layouts/
│       │   │   ├── _footer.blade.php
│       │   │   ├── _header.blade.php
│       │   │   ├── _nav.blade.php
│       │   │   ├── _script.blade.php
│       │   │   ├── default.blade.php
│       │   │   └── seo.blade.php
│       │   ├── readme.md
│       │   └── static_pages/
│       │       ├── bill.blade.php
│       │       ├── buy.blade.php
│       │       ├── home.blade.php
│       │       ├── orderinfo.blade.php
│       │       ├── qrpay.blade.php
│       │       └── searchOrder.blade.php
│       ├── luna/
│       │   ├── README.md
│       │   ├── errors/
│       │   │   └── error.blade.php
│       │   ├── layouts/
│       │   │   ├── _footer.blade.php
│       │   │   ├── _header.blade.php
│       │   │   ├── _nav.blade.php
│       │   │   ├── _notice.blade.php
│       │   │   ├── _notice_sm.blade.php
│       │   │   ├── _notice_xs.blade.php
│       │   │   ├── _script.blade.php
│       │   │   ├── default.blade.php
│       │   │   ├── google_translate.php
│       │   │   └── seo.blade.php
│       │   └── static_pages/
│       │       ├── bill.blade.php
│       │       ├── buy.blade.php
│       │       ├── home.blade.php
│       │       ├── orderinfo.blade.php
│       │       ├── qrpay.blade.php
│       │       └── searchOrder.blade.php
│       ├── unicorn/
│       │   ├── errors/
│       │   │   └── error.blade.php
│       │   ├── layouts/
│       │   │   ├── _footer.blade.php
│       │   │   ├── _header.blade.php
│       │   │   ├── _nav.blade.php
│       │   │   ├── _script.blade.php
│       │   │   ├── default.blade.php
│       │   │   └── seo.blade.php
│       │   └── static_pages/
│       │       ├── bill.blade.php
│       │       ├── buy.blade.php
│       │       ├── home.blade.php
│       │       ├── orderinfo.blade.php
│       │       ├── qrpay.blade.php
│       │       └── searchOrder.blade.php
│       └── vendor/
│           └── geetest/
│               └── geetest.blade.php
├── routes/
│   ├── api.php
│   ├── channels.php
│   ├── common/
│   │   ├── pay.php
│   │   └── web.php
│   ├── console.php
│   └── web.php
├── server.php
├── storage/
│   ├── app/
│   │   └── .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: .editorconfig
================================================
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true

[*.md]
trim_trailing_whitespace = false

[*.{yml,yaml}]
indent_size = 2


================================================
FILE: .gitattributes
================================================
* text=auto
*.css linguist-vendored
*.scss linguist-vendored
*.js linguist-vendored
CHANGELOG.md export-ignore


================================================
FILE: .gitignore
================================================
/node_modules
/public/hot
/public/storage
/public/uploads
/storage/*.key
/vendor
.env
.env.backup
.phpunit.result.cache
Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
.idea
install.lock
.env.buck


================================================
FILE: .styleci.yml
================================================
php:
  preset: laravel
  disabled:
    - unused_use
  finder:
    not-name:
      - index.php
      - server.php
js:
  finder:
    not-name:
      - webpack.mix.js
css: true


================================================
FILE: Dockerfile
================================================
FROM webdevops/php-nginx:7.4
COPY . /app
WORKDIR /app
RUN [ "sh", "-c", "composer install --ignore-platform-reqs" ]
RUN echo "#!/bin/bash\nphp artisan queue:work >/tmp/work.log 2>&1 &\nsupervisord" > /app/start.sh
RUN [ "sh", "-c", "chmod -R 777 /app" ]
CMD [ "sh", "-c","/app/start.sh" ]


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2023 assimon/dujiaoka

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
<p align="center"><img src="https://i.loli.net/2020/04/07/nAzjDJlX7oc5qEw.png" width="400"></p>
<p align="center">
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-blue" alt="license MIT"></a>
<a href="https://github.com/assimon/dujiaoka/releases/tag/2.0.4"><img src="https://img.shields.io/badge/version-2.0.4-red" alt="version 2.0.4"></a>
<a href="https://www.php.net/releases/7_4_0.php"><img src="https://img.shields.io/badge/PHP-7.4-lightgrey" alt="php74"></a>
</p>

<div align="center">
  <a href="https://www.vmrack.net/?ref_code=5iXmGUMf5f5">
    <img src="https://files.seeusercontent.com/2026/03/12/2mXf/photo_2026-03-12_10-13-12.jpg" width="400">
  </a>
  <p align="center"><a href="https://www.vmrack.net/?ref_code=5iXmGUMf5f5">vmrack.net - 全球自动化云基础设施服务商
    提供先进的云服务器、裸金属、CDN、媒体处理、对象存储和网络解决方案,助力企业轻松上云</a></p>
</div>

## 📢停更通知2026/02/12

### 项目已经停止更新和维护,请前往新版[Dujiao-Next(dujiao-next.com)](https://dujiao-next.com)


================================================
FILE: app/Admin/Actions/Post/BatchRestore.php
================================================
<?php
/**
 * The file was created by Assimon.
 *
 * @author    assimon<ashang@utf8.hk>
 * @copyright assimon<ashang@utf8.hk>
 * @link      http://utf8.hk/
 */

namespace App\Admin\Actions\Post;


use Dcat\Admin\Grid\BatchAction;
use Illuminate\Http\Request;

class BatchRestore extends BatchAction
{

    protected $title;

    protected $model;

    // 注意构造方法的参数必须要有默认值
    public function __construct(string $model = null)
    {
        $this->title = admin_trans('dujiaoka.restore');
        $this->model = $model;
    }

    public function handle(Request $request)
    {
        $model = $request->get('model');

        foreach ((array) $this->getKey() as $key) {
            $model::withTrashed()->findOrFail($key)->restore();
        }

        return $this->response()->success(admin_trans('dujiaoka.restored'))->refresh();
    }

    public function confirm()
    {
        return [admin_trans('dujiaoka.are_you_restore_sure')];
    }

    public function parameters()
    {
        return [
            'model' => $this->model,
        ];
    }

}


================================================
FILE: app/Admin/Actions/Post/Restore.php
================================================
<?php
/**
 * The file was created by Assimon.
 *
 * @author    assimon<ashang@utf8.hk>
 * @copyright assimon<ashang@utf8.hk>
 * @link      http://utf8.hk/
 */

namespace App\Admin\Actions\Post;


use Dcat\Admin\Grid\RowAction;
use Illuminate\Http\Request;

class Restore extends RowAction
{

    protected $title;

    protected $model;

    // 注意构造方法的参数必须要有默认值
    public function __construct(string $model = null)
    {
        $this->title = admin_trans('dujiaoka.restore');
        $this->model = $model;
    }

    public function handle(Request $request)
    {
        $key = $this->getKey();
        $model = $request->get('model');

        $model::withTrashed()->findOrFail($key)->restore();

        return $this->response()->success(admin_trans('dujiaoka.restored'))->refresh();
    }

    public function confirm()
    {
        return [admin_trans('dujiaoka.are_you_restore_sure')];
    }

    public function parameters()
    {
        return [
            'model' => $this->model,
        ];
    }

}


================================================
FILE: app/Admin/Charts/DashBoard.php
================================================
<?php
/**
 * The file was created by Assimon.
 *
 * @author    assimon<ashang@utf8.hk>
 * @copyright assimon<ashang@utf8.hk>
 * @link      http://utf8.hk/
 */

namespace App\Admin\Charts;


use App\Models\Order;
use Dcat\Admin\Widgets\Metrics\RadialBar;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;

class DashBoard extends RadialBar
{

    /**
     * 初始化卡片内容
     */
    protected function init()
    {
        parent::init();

        $this->title(admin_trans('dujiaoka.sales_data'));
        $this->height(400);
        $this->chartHeight(300);
        $this->chartLabels(admin_trans('dujiaoka.order_success_rate'));
        $this->dropdown([
            'today' => admin_trans('dujiaoka.last_today'),
            'seven' => admin_trans('dujiaoka.last_seven_days'),
            'month' => admin_trans('dujiaoka.last_month'),
            'year' => admin_trans('dujiaoka.last_year'),
        ]);
    }

    /**
     * 处理请求
     *
     * @param Request $request
     *
     * @return mixed|void
     */
    public function handle(Request $request)
    {
        $endTime = Carbon::now();
        switch ($request->get('option')) {
            case 'seven':
                $startTime = Carbon::now()->subDays(7);
                break;
            case 'month':
                $startTime = Carbon::now()->subDays(30);
                break;
            case 'year':
                $startTime = Carbon::now()->subDays(365);
                break;
            case 'today':
            default:
                $startTime = Carbon::today();
        }
        // 分组查询
        $orderGroup = Order::query()
            ->where('created_at', '>=', $startTime)
            ->where('created_at', '<=', $endTime)
            ->select('status', DB::raw('count(id) as num'))
            ->groupBy('status')
            ->pluck('num', 'status')
            ->toArray();
        $pending = $orderGroup[Order::STATUS_PENDING] ?? 0;
        $processing = $orderGroup[Order::STATUS_PROCESSING] ?? 0;
        $completed = $orderGroup[Order::STATUS_COMPLETED] ?? 0;
        $failure = $orderGroup[Order::STATUS_FAILURE] ?? 0;
        $abnormal = $orderGroup[Order::STATUS_ABNORMAL] ?? 0;
        $orderCount = array_sum($orderGroup);
        if ($orderCount == 0) {
            $successRate = 0;
        } else {
            $rate = bcdiv($completed, $orderCount, 2);
            $successRate = bcmul($rate, 100);
        }
        // 订单数
        $this->withOrderCount($orderCount);
        // 卡片底部
        $this->withFooter($pending, $processing, $completed, $failure, $abnormal);
        // 图表数据
        $this->withChart($successRate);
    }

    /**
     * 订单总数
     *
     * @param $count
     * @return DashBoard
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function withOrderCount($count)
    {
        $title = admin_trans('dujiaoka.order_count_number');
        return $this->content(
            <<<HTML
<div class="d-flex flex-column flex-wrap text-center">
    <h1 class="font-lg-2 mt-2 mb-0">{$count}</h1>
    <small>{$title}</small>
</div>
HTML
        );
    }

    /**
     * 成交率.
     *
     * @param int $data
     *
     * @return $this
     */
    public function withChart(int $data)
    {
        return $this->chart([
            'series' => [$data],
        ]);
    }

    /**
     * @param $pending
     * @param $processing
     * @param $completed
     * @param $failure
     * @param $abnormal
     * @return DashBoard
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function withFooter($pending, $processing, $completed, $failure, $abnormal)
    {
        $statusPendingTitle = admin_trans('dujiaoka.status_pending_number');
        $statusProcessingNumber = admin_trans('dujiaoka.status_processing_number');
        $statusCompletedNumber = admin_trans('dujiaoka.status_completed_number');
        $statusFailureNumber = admin_trans('dujiaoka.status_failure_number');
        $statusAbnormalNumber = admin_trans('dujiaoka.status_abnormal_number');
        return $this->footer(
            <<<HTML
<div class="d-flex justify-content-between p-1" style="padding-top: 0!important;">
    <div class="text-center">
        <p>{$statusPendingTitle}</p>
        <span class="font-lg-1">{$pending}</span>
    </div>
    <div class="text-center">
        <p>{$statusProcessingNumber}</p>
        <span class="font-lg-1">{$processing}</span>
    </div>
    <div class="text-center">
        <p>{$statusCompletedNumber}</p>
        <span class="font-lg-1">{$completed}</span>
    </div>
    <div class="text-center">
        <p>{$statusFailureNumber}</p>
        <span class="font-lg-1">{$failure}</span>
    </div>
    <div class="text-center">
        <p>{$statusAbnormalNumber}</p>
        <span class="font-lg-1">{$abnormal}</span>
    </div>
</div>
HTML
        );
    }
}


================================================
FILE: app/Admin/Charts/PayoutRateCard.php
================================================
<?php
/**
 * The file was created by Assimon.
 *
 * @author    assimon<ashang@utf8.hk>
 * @copyright assimon<ashang@utf8.hk>
 * @link      http://utf8.hk/
 */

namespace App\Admin\Charts;


use App\Models\Order;
use Dcat\Admin\Admin;
use Dcat\Admin\Widgets\Metrics\Donut;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;

class PayoutRateCard extends Donut
{

    protected $labels;

    /**
     * 初始化卡片内容
     */
    protected function init()
    {
        parent::init();

        $this->labels = [admin_trans('dujiaoka.payment_successful_number'), admin_trans('dujiaoka.unpaid_number')];
        $color = Admin::color();
        $colors = [$color->primary(), $color->alpha('blue2', 0.5)];

        $this->title(admin_trans('dujiaoka.payment_chart'));
        $this->chartLabels($this->labels);
        // 设置图表颜色
        $this->chartColors($colors);
        $this->dropdown([
            'seven' => admin_trans('dujiaoka.last_seven_days'),
            'today' => admin_trans('dujiaoka.last_today'),
            'month' => admin_trans('dujiaoka.last_month'),
            'year' => admin_trans('dujiaoka.last_year'),
        ]);
    }

    /**
     * 处理请求
     *
     * @param Request $request
     *
     * @return mixed|void
     */
    public function handle(Request $request)
    {
        $endTime = Carbon::now();
        switch ($request->get('option')) {
            case 'seven':
                $startTime = Carbon::now()->subDays(7);
                break;
            case 'month':
                $startTime = Carbon::now()->subDays(30);
                break;
            case 'year':
                $startTime = Carbon::now()->subDays(365);
                break;
            case 'today':
                $startTime = Carbon::today();
                break;
            default:
                $startTime =  Carbon::now()->subDays(7);
        }
        // 成功的数量
        $success = Order::query()
            ->where('created_at', '>=', $startTime)
            ->where('created_at', '<=', $endTime)
            ->where('status', '>', Order::STATUS_WAIT_PAY)
            ->count();
        // 待支付的数量
        $unpaid = Order::query()
            ->where('created_at', '>=', $startTime)
            ->where('created_at', '<=', $endTime)
            ->where('status', '<=', Order::STATUS_WAIT_PAY)
            ->count();
        $this->withContent($success, $unpaid);
        // 图表数据
        $this->withChart([$success, $unpaid]);
    }

    /**
     * 设置图表数据.
     *
     * @param array $data
     *
     * @return $this
     */
    public function withChart(array $data)
    {
        return $this->chart([
            'series' => $data
        ]);
    }

    /**
     * 设置卡片头部内容.
     *
     * @param mixed $success
     * @param mixed $unpaid
     *
     * @return $this
     */
    protected function withContent($success, $unpaid)
    {
        $blue = Admin::color()->alpha('blue2', 0.5);

        $style = 'margin-bottom: 8px';
        $labelWidth = 120;

        return $this->content(
            <<<HTML
<div class="d-flex pl-1 pr-1 pt-1" style="{$style}">
    <div style="width: {$labelWidth}px">
        <i class="fa fa-circle text-primary"></i> {$this->labels[0]}
    </div>
    <div>{$success}</div>
</div>
<div class="d-flex pl-1 pr-1" style="{$style}">
    <div style="width: {$labelWidth}px">
        <i class="fa fa-circle" style="color: $blue"></i> {$this->labels[1]}
    </div>
    <div>{$unpaid}</div>
</div>
HTML
        );
    }

}


================================================
FILE: app/Admin/Charts/SalesCard.php
================================================
<?php
/**
 * The file was created by Assimon.
 *
 * @author    assimon<ashang@utf8.hk>
 * @copyright assimon<ashang@utf8.hk>
 * @link      http://utf8.hk/
 */

namespace App\Admin\Charts;


use App\Models\Order;
use Dcat\Admin\Admin;
use Dcat\Admin\Widgets\Metrics\Bar;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;

class SalesCard extends Bar
{

    /**
     * 初始化卡片内容
     */
    protected function init()
    {
        parent::init();

        $color = Admin::color();

        $dark35 = $color->dark35();

        // 卡片内容宽度
        $this->contentWidth(5, 7);
        // 标题
        $this->title(admin_trans('dujiaoka.sales_chart'));
        // 设置下拉选项
        $this->dropdown([
            'seven' => admin_trans('dujiaoka.last_seven_days'),
            'today' => admin_trans('dujiaoka.last_today'),
            'month' => admin_trans('dujiaoka.last_month'),
        ]);
        // 设置图表颜色
        $this->chartColors([
            $dark35,
            $color->primary(),
        ]);
    }

    /**
     * 处理请求
     *
     * @param Request $request
     *
     * @return mixed|void
     */
    public function handle(Request $request)
    {
        $endTime = Carbon::now();
        switch ($request->get('option')) {
            case 'seven':
                $startTime = Carbon::now()->subDays(7);
                break;
            case 'month':
                $startTime = Carbon::now()->subDays(30);
                break;
            case 'today':
                $startTime = Carbon::today();
                break;
            default:
                $startTime =  Carbon::now()->subDays(7);
        }
        // 分组查询
        $orderGroup = Order::query()
            ->where('created_at', '>=', $startTime)
            ->where('created_at', '<=', $endTime)
            ->where('status', '>', Order::STATUS_PENDING)
            ->select(DB::raw('DATE(created_at) as date'), DB::raw('sum(actual_price) as actual_price'))
            ->groupBy('date')
            ->pluck('actual_price')
            ->toArray();
        $totalPrice = array_sum($orderGroup);
        $this->withContent($totalPrice, '', '', $startTime, $endTime);
        $this->withChart([
            [
                'name' => admin_trans('dujiaoka.sales_chart'),
                'data' => $orderGroup,
            ]
        ]);
    }

    /**
     * 设置图表数据.
     *
     * @param array $data
     *
     * @return $this
     */
    public function withChart(array $data)
    {
        return $this->chart([
            'series' => $data,
        ]);
    }

    /**
     * 设置卡片内容.
     *
     * @param string $title
     * @param string $value
     * @param string $style
     *
     * @return $this
     */
    public function withContent($title, $value, $style = 'success', $startTime, $endTime)
    {
        $minHeight = '183px';
        $uri = admin_route('order.index', [
            'created_at[start]' => $startTime->format('Y-m-d H:i:s'),
            'created_at[end]' => $endTime->format('Y-m-d H:i:s')
        ]);
        return $this->content(
            <<<HTML
<div class="d-flex p-1 flex-column justify-content-between" style="padding-top: 0;width: 100%;height: 100%;min-height: {$minHeight}">
    <div class="text-left">
        <h1 class="font-lg-2 mt-2 mb-0">{$title}¥</h1>
        <h5 class="font-medium-2" style="margin-top: 10px;">
            <span class="text-{$style}">{$value} </span>
        </h5>
    </div>

    <a href="{$uri}" class="btn btn-primary shadow waves-effect waves-light">View Details <i class="feather icon-chevrons-right"></i></a>
</div>
HTML
        );
    }

}


================================================
FILE: app/Admin/Charts/SuccessOrderCard.php
================================================
<?php
/**
 * The file was created by Assimon.
 *
 * @author    assimon<ashang@utf8.hk>
 * @copyright assimon<ashang@utf8.hk>
 * @link      http://utf8.hk/
 */

namespace App\Admin\Charts;


use App\Models\Order;
use Dcat\Admin\Widgets\Metrics\Line;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;

class SuccessOrderCard extends Line
{

    /**
     * 初始化卡片内容
     *
     * @return void
     */
    protected function init()
    {
        parent::init();

        $this->title(admin_trans('dujiaoka.status_completed_number'));
        $this->dropdown([
            'seven' => admin_trans('dujiaoka.last_seven_days'),
            'today' => admin_trans('dujiaoka.last_today'),
            'month' => admin_trans('dujiaoka.last_month'),
        ]);
    }

    /**
     * 处理请求
     *
     * @param Request $request
     *
     * @return mixed|void
     */
    public function handle(Request $request)
    {
        $endTime = Carbon::now();
        switch ($request->get('option')) {
            case 'seven':
                $startTime = Carbon::now()->subDays(7);
                break;
            case 'month':
                $startTime = Carbon::now()->subDays(30);
                break;
            case 'today':
                $startTime = Carbon::today();
                break;
            default:
                $startTime =  Carbon::now()->subDays(7);
        }
        // 分组查询
        $orderGroup = Order::query()
            ->where('created_at', '>=', $startTime)
            ->where('created_at', '<=', $endTime)
            ->where('status', Order::STATUS_COMPLETED)
            ->select(DB::raw('DATE(created_at) as date'), DB::raw('count(id) as num'))
            ->groupBy('date')
            ->pluck('num')
            ->toArray();
        $successCount = array_sum($orderGroup);
        // 卡片内容
        $this->withContent($successCount);
        // 图表数据
        $this->withChart($orderGroup);
    }

    /**
     * 设置图表数据.
     *
     * @param array $data
     *
     * @return $this
     */
    public function withChart(array $data)
    {
        return $this->chart([
            'series' => [
                [
                    'name' => $this->title,
                    'data' => $data,
                ],
            ],
        ]);
    }

    /**
     * 设置卡片内容.
     *
     * @param string $content
     *
     * @return $this
     */
    public function withContent($content)
    {
        return $this->content(
            <<<HTML
<div class="d-flex justify-content-between align-items-center mt-1" style="margin-bottom: 2px">
    <h2 class="ml-1 font-lg-1">{$content}</h2>
    <span class="mb-0 mr-1 text-80">{$this->title}</span>
</div>
HTML
        );
    }

}


================================================
FILE: app/Admin/Controllers/AuthController.php
================================================
<?php

namespace App\Admin\Controllers;

use Dcat\Admin\Http\Controllers\AuthController as BaseAuthController;

class AuthController extends BaseAuthController
{
}


================================================
FILE: app/Admin/Controllers/CarmisController.php
================================================
<?php

namespace App\Admin\Controllers;

use App\Admin\Actions\Post\BatchRestore;
use App\Admin\Actions\Post\Restore;
use App\Admin\Forms\ImportCarmis;
use App\Admin\Repositories\Carmis;
use App\Models\Goods;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Layout\Content;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use App\Models\Carmis as CarmisModel;
use Dcat\Admin\Widgets\Card;

class CarmisController extends AdminController
{


    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(new Carmis(['goods']), function (Grid $grid) {
            $grid->model()->orderBy('id', 'DESC');
            $grid->column('id')->sortable();
            $grid->column('goods.gd_name', admin_trans('carmis.fields.goods_id'));
            $grid->column('status')->select(CarmisModel::getStatusMap());
            $grid->column('is_loop')->display(function($v){return $v==1?admin_trans('carmis.fields.yes'):"";});
            $grid->column('carmi')->limit(20);
            $grid->column('created_at');
            $grid->column('updated_at')->sortable();
            $grid->filter(function (Grid\Filter $filter) {
                $filter->equal('id');
                $filter->equal('goods_id')->select(
                    Goods::query()->where('type', Goods::AUTOMATIC_DELIVERY)->pluck('gd_name', 'id')
                );
                $filter->equal('status')->select(CarmisModel::getStatusMap());
                $filter->scope(admin_trans('dujiaoka.trashed'))->onlyTrashed();
            });
            $grid->actions(function (Grid\Displayers\Actions $actions) {
                if (request('_scope_') == admin_trans('dujiaoka.trashed')) {
                    $actions->append(new Restore(CarmisModel::class));
                }
            });
            $grid->batchActions(function (Grid\Tools\BatchActions $batch) {
                if (request('_scope_') == admin_trans('dujiaoka.trashed')) {
                    $batch->add(new BatchRestore(CarmisModel::class));
                }
            });
            $grid->export()->titles(['goods.gd_name' => admin_trans('carmis.fields.goods_id'), 'carmi' => admin_trans('carmis.fields.carmi'), 'created_at' => admin_trans('admin.created_at')]);
        });
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     *
     * @return Show
     */
    protected function detail($id)
    {
        return Show::make($id, new Carmis(['goods']), function (Show $show) {
            $show->field('id');
            $show->field('goods.gd_name', admin_trans('carmis.fields.goods_id'));
            $show->field('status')->as(function ($type) {
                if ($type == CarmisModel::STATUS_UNSOLD) {
                    return admin_trans('carmis.fields.status_unsold');
                } else {
                    return admin_trans('carmis.fields.status_sold');
                }
            });
			$show->field('is_loop')->as(function ($v) {return $v==1?admin_trans('carmis.fields.yes'):"";});
            $show->field('carmi');
            $show->field('created_at');
            $show->field('updated_at');
        });
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        return Form::make(new Carmis(), function (Form $form) {
            $form->display('id');
            $form->select('goods_id')->options(
                Goods::query()->where('type', Goods::AUTOMATIC_DELIVERY)->pluck('gd_name', 'id')
            )->required();
            $form->radio('status')
                ->options(CarmisModel::getStatusMap())
                ->default(CarmisModel::STATUS_UNSOLD);
            $form->switch('is_loop')->default(false);
            $form->textarea('carmi')->required();
            $form->display('created_at');
            $form->display('updated_at');
        });
    }

    /**
     * 导入卡密
     *
     * @param Content $content
     * @return Content
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function importCarmis(Content $content)
    {
        return $content
            ->title(admin_trans('carmis.fields.import_carmis'))
            ->body(new Card(new ImportCarmis()));
    }
}


================================================
FILE: app/Admin/Controllers/CouponController.php
================================================
<?php

namespace App\Admin\Controllers;

use App\Admin\Actions\Post\BatchRestore;
use App\Admin\Actions\Post\Restore;
use App\Admin\Repositories\Coupon;
use App\Models\Goods;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use App\Models\Coupon as CouponModel;

class CouponController extends AdminController
{

    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(new Coupon(['goods']), function (Grid $grid) {
            $grid->model()->orderBy('id', 'DESC');
            $grid->column('id')->sortable();
            $grid->column('discount');
            $grid->column('is_use')->select(CouponModel::getStatusUseMap());
            $grid->column('is_open')->switch();
            $grid->column('coupon')->copyable();
            $grid->column('ret');
            $grid->column('created_at');
            $grid->column('updated_at')->sortable();
            $grid->actions(function (Grid\Displayers\Actions $actions) {
                if (request('_scope_') == admin_trans('dujiaoka.trashed')) {
                    $actions->append(new Restore(CouponModel::class));
                }
            });
            $grid->batchActions(function (Grid\Tools\BatchActions $batch) {
                if (request('_scope_') == admin_trans('dujiaoka.trashed')) {
                    $batch->add(new BatchRestore(CouponModel::class));
                }
            });
            $grid->filter(function (Grid\Filter $filter) {
                $filter->equal('id');
                $filter->equal('goods.goods_id', admin_trans('coupon.fields.goods_id'))->select(
                    Goods::query()->pluck('gd_name', 'id')
                );
                $filter->scope(admin_trans('dujiaoka.trashed'))->onlyTrashed();
            });
        });
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     *
     * @return Show
     */
    protected function detail($id)
    {
        return Show::make($id, new Coupon(), function (Show $show) {
            $show->field('id');
            $show->field('discount');
            $show->field('is_use')->as(function ($isUse) {
                if ($isUse == CouponModel::STATUS_UNUSED) {
                    return admin_trans('coupon.fields.status_unused');
                } else {
                    return admin_trans('coupon.fields.status_use');
                }
            });
            $show->field('is_open')->as(function ($isOPen) {
                if ($isOPen == CouponModel::STATUS_OPEN) {
                    return admin_trans('dujiaoka.status_open');
                } else {
                    return admin_trans('dujiaoka.status_close');
                }
            });
            $show->field('coupon');
            $show->field('ret');
            $show->field('created_at');
            $show->field('updated_at');
        });
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        return Form::make(Coupon::with('goods'), function (Form $form) {
            $form->display('id');
            $form->multipleSelect('goods', admin_trans('coupon.fields.goods_id'))
                ->options(Goods::all()->pluck('gd_name', 'id'))
                ->customFormat(function ($v) {
                    if (! $v) {
                        return [];
                    }
                    // 从数据库中查出的二维数组中转化成ID
                    return array_column($v, 'id');
                });
            $form->currency('discount')->default(0)->required();
            $form->text('coupon')->required();
            $form->number('ret')->default(1);
            $form->radio('is_use')->options(CouponModel::getStatusUseMap())->default(CouponModel::STATUS_UNUSED);
            $form->switch('is_open')->default(CouponModel::STATUS_OPEN);
            $form->display('created_at');
            $form->display('updated_at');
        });
    }
}


================================================
FILE: app/Admin/Controllers/EmailTestController.php
================================================
<?php
/**
 * The file was created by Assimon.
 *
 * @author    ZhangYiQiu<me@zhangyiqiu.net>
 * @copyright ZhangYiQiu<me@zhangyiqiu.net>
 * @link      http://zhangyiqiu.net/
 */

namespace App\Admin\Controllers;


use App\Admin\Forms\EmailTest;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Layout\Content;
use Dcat\Admin\Widgets\Card;

class EmailTestController extends AdminController
{

    /**
     * 系统设置
     *
     * @param Content $content
     * @return Content
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function emailTest(Content $content)
    {
        return $content
            ->title(admin_trans('menu.titles.email_test'))
            ->body(new Card(new EmailTest()));
    }

}


================================================
FILE: app/Admin/Controllers/EmailtplController.php
================================================
<?php

namespace App\Admin\Controllers;

use App\Admin\Actions\Post\BatchRestore;
use App\Admin\Actions\Post\Restore;
use App\Admin\Repositories\Emailtpl;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use App\Models\Emailtpl as EmailTplModel;

class EmailtplController extends AdminController
{
    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(new Emailtpl(), function (Grid $grid) {
            $grid->column('id')->sortable();
            $grid->column('tpl_name');
            $grid->column('tpl_token');
            $grid->column('created_at');
            $grid->column('updated_at')->sortable();
            $grid->disableViewButton();
            $grid->disableDeleteButton();
            $grid->filter(function (Grid\Filter $filter) {
                $filter->equal('id');
                $filter->like('tpl_name');
                $filter->like('tpl_token');
            });
            $grid->actions(function (Grid\Displayers\Actions $actions) {
                if (request('_scope_') == admin_trans('dujiaoka.trashed')) {
                    $actions->append(new Restore(EmailTplModel::class));
                }
            });
            $grid->batchActions(function (Grid\Tools\BatchActions $batch) {
                if (request('_scope_') == admin_trans('dujiaoka.trashed')) {
                    $batch->add(new BatchRestore(EmailTplModel::class));
                }
            });
        });
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     *
     * @return Show
     */
    protected function detail($id)
    {
        return Show::make($id, new Emailtpl(), function (Show $show) {
            $show->field('id');
            $show->field('tpl_name');
            $show->field('tpl_content');
            $show->field('tpl_token');
            $show->field('created_at');
            $show->field('updated_at');
        });
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        return Form::make(new Emailtpl(), function (Form $form) {
            $form->display('id');
            $form->text('tpl_name')->required();
            $form->editor('tpl_content')->required();
            if ($form->isCreating()) {
                $form->text('tpl_token')->required();
            } else {
                $form->text('tpl_token')->disable();
            }
            $form->display('created_at');
            $form->display('updated_at');
            $form->disableViewButton();
            $form->disableDeleteButton();
            $form->footer(function ($footer) {
                // 去掉`查看`checkbox
                $footer->disableViewCheck();
            });
        });
    }
}


================================================
FILE: app/Admin/Controllers/GoodsController.php
================================================
<?php

namespace App\Admin\Controllers;

use App\Admin\Actions\Post\BatchRestore;
use App\Admin\Actions\Post\Restore;
use App\Admin\Repositories\Goods;
use App\Models\Carmis;
use App\Models\Coupon;
use App\Models\GoodsGroup as GoodsGroupModel;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use App\Models\Goods as GoodsModel;

class GoodsController extends AdminController
{


    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(new Goods(['group', 'coupon']), function (Grid $grid) {
            $grid->model()->orderBy('id', 'DESC');
            $grid->column('id')->sortable();
            $grid->column('picture')->image('', 100, 100);
            $grid->column('gd_name');
            $grid->column('gd_description');
            $grid->column('gd_keywords');
            $grid->column('group.gp_name', admin_trans('goods.fields.group_id'));
            $grid->column('type')
                ->using(GoodsModel::getGoodsTypeMap())
                ->label([
                    GoodsModel::AUTOMATIC_DELIVERY => Admin::color()->success(),
                    GoodsModel::MANUAL_PROCESSING => Admin::color()->info(),
                ]);
            $grid->column('retail_price');
            $grid->column('actual_price')->sortable();
            $grid->column('in_stock')->display(function () {
                // 如果为自动发货,则加载库存卡密
                if ($this->type == GoodsModel::AUTOMATIC_DELIVERY) {
                    return Carmis::query()->where('goods_id', $this->id)
                        ->where('status', Carmis::STATUS_UNSOLD)
                        ->count();
                } else {
                    return $this->in_stock;
                }
            });
            $grid->column('sales_volume');
            $grid->column('ord')->editable()->sortable();
            $grid->column('is_open')->switch();
            $grid->column('created_at')->sortable();
            $grid->column('updated_at');
            $grid->filter(function (Grid\Filter $filter) {
                $filter->equal('id');
                $filter->like('gd_name');
                $filter->equal('type')->select(GoodsModel::getGoodsTypeMap());
                $filter->equal('group_id')->select(GoodsGroupModel::query()->pluck('gp_name', 'id'));
                $filter->scope(admin_trans('dujiaoka.trashed'))->onlyTrashed();
                $filter->equal('coupon.coupons_id', admin_trans('goods.fields.coupon_id'))->select(
                    Coupon::query()->pluck('coupon', 'id')
                );
            });
            $grid->actions(function (Grid\Displayers\Actions $actions) {
                if (request('_scope_') == admin_trans('dujiaoka.trashed')) {
                    $actions->append(new Restore(GoodsModel::class));
                }
            });
            $grid->batchActions(function (Grid\Tools\BatchActions $batch) {
                if (request('_scope_') == admin_trans('dujiaoka.trashed')) {
                    $batch->add(new BatchRestore(GoodsModel::class));
                }
            });
        });
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     *
     * @return Show
     */
    protected function detail($id)
    {
        return Show::make($id, new Goods(), function (Show $show) {
            $show->id('id');
            $show->field('gd_name');
            $show->field('gd_description');
            $show->field('gd_keywords');
            $show->field('picture')->image();
            $show->field('retail_price');
            $show->field('actual_price');
            $show->field('in_stock');
            $show->field('ord');
            $show->field('sales_volume');
            $show->field('type')->as(function ($type) {
                if ($type == GoodsModel::AUTOMATIC_DELIVERY) {
                    return admin_trans('goods.fields.automatic_delivery');
                } else {
                    return admin_trans('goods.fields.manual_processing');
                }
            });
            $show->field('is_open')->as(function ($isOpen) {
                if ($isOpen == GoodsGroupModel::STATUS_OPEN) {
                    return admin_trans('dujiaoka.status_open');
                } else {
                    return admin_trans('dujiaoka.status_close');
                }
            });
            $show->wholesale_price_cnf()->unescape()->as(function ($wholesalePriceCnf) {
                return  "<textarea class=\"form-control field_wholesale_price_cnf _normal_\"  rows=\"10\" cols=\"30\">" . $wholesalePriceCnf . "</textarea>";
            });
            $show->other_ipu_cnf()->unescape()->as(function ($otherIpuCnf) {
                return  "<textarea class=\"form-control field_wholesale_price_cnf _normal_\"  rows=\"10\" cols=\"30\">" . $otherIpuCnf . "</textarea>";
            });
            $show->api_hook()->unescape()->as(function ($apiHook) {
                return  "<textarea class=\"form-control field_wholesale_price_cnf _normal_\"  rows=\"10\" cols=\"30\">" . $apiHook . "</textarea>";
            });;
        });
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        return Form::make(new Goods(), function (Form $form) {
            $form->display('id');
            $form->text('gd_name')->required();
            $form->text('gd_description')->required();
            $form->text('gd_keywords')->required();
            $form->select('group_id')->options(
                GoodsGroupModel::query()->pluck('gp_name', 'id')
            )->required();
            $form->image('picture')->autoUpload()->uniqueName()->help(admin_trans('goods.helps.picture'));
            $form->radio('type')->options(GoodsModel::getGoodsTypeMap())->default(GoodsModel::AUTOMATIC_DELIVERY)->required();
            $form->currency('retail_price')->default(0)->help(admin_trans('goods.helps.retail_price'));
            $form->currency('actual_price')->default(0)->required();
            $form->number('in_stock')->help(admin_trans('goods.helps.in_stock'));
            $form->number('sales_volume');
            $form->number('buy_limit_num')->help(admin_trans('goods.helps.buy_limit_num'));
            $form->editor('buy_prompt');
            $form->editor('description');
            $form->textarea('other_ipu_cnf')->help(admin_trans('goods.helps.other_ipu_cnf'));
            $form->textarea('wholesale_price_cnf')->help(admin_trans('goods.helps.wholesale_price_cnf'));
            $form->textarea('api_hook');
            $form->number('ord')->default(1)->help(admin_trans('dujiaoka.ord'));
            $form->switch('is_open')->default(GoodsModel::STATUS_OPEN);
        });
    }
}


================================================
FILE: app/Admin/Controllers/GoodsGroupController.php
================================================
<?php

namespace App\Admin\Controllers;

use App\Admin\Actions\Post\BatchRestore;
use App\Admin\Actions\Post\Restore;
use App\Admin\Repositories\GoodsGroup;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use App\Models\GoodsGroup as GoodsGroupModel;

class GoodsGroupController extends AdminController
{

    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(new GoodsGroup(), function (Grid $grid) {
            $grid->model()->orderBy('id', 'DESC');
            $grid->column('id')->sortable();
            $grid->column('gp_name')->editable();
            $grid->column('is_open')->switch();
            $grid->column('ord')->editable();
            $grid->column('created_at');
            $grid->column('updated_at')->sortable();
            $grid->disableViewButton();
            $grid->filter(function (Grid\Filter $filter) {
                $filter->equal('id');
                $filter->scope(admin_trans('dujiaoka.trashed'))->onlyTrashed();
            });
            $grid->actions(function (Grid\Displayers\Actions $actions) {
                if (request('_scope_') == admin_trans('dujiaoka.trashed')) {
                    $actions->append(new Restore(GoodsGroupModel::class));
                }
            });
            $grid->batchActions(function (Grid\Tools\BatchActions $batch) {
                if (request('_scope_') == admin_trans('dujiaoka.trashed')) {
                    $batch->add(new BatchRestore(GoodsGroupModel::class));
                }
            });
        });
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     *
     * @return Show
     */
    protected function detail($id)
    {
        return Show::make($id, new GoodsGroup(), function (Show $show) {
            $show->field('id');
            $show->field('gp_name');
            $show->field('is_open')->as(function ($isOpen) {
                if ($isOpen == GoodsGroupModel::STATUS_OPEN) {
                    return admin_trans('dujiaoka.status_open');
                } else {
                    return admin_trans('dujiaoka.status_close');
                }
            });
            $show->field('ord');
            $show->field('created_at');
            $show->field('updated_at');
        });
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        return Form::make(new GoodsGroup(), function (Form $form) {
            $form->display('id');
            $form->text('gp_name');
            $form->switch('is_open')->default(GoodsGroupModel::STATUS_OPEN);
            $form->number('ord')->default(1)->help(admin_trans('dujiaoka.ord'));
            $form->display('created_at');
            $form->display('updated_at');
            $form->disableViewButton();
            $form->footer(function ($footer) {
                // 去掉`查看`checkbox
                $footer->disableViewCheck();
            });
        });
    }
}


================================================
FILE: app/Admin/Controllers/HomeController.php
================================================
<?php

namespace App\Admin\Controllers;

use App\Admin\Charts\DashBoard;
use App\Admin\Charts\PayoutRateCard;
use App\Admin\Charts\PopularGoodsCard;
use App\Admin\Charts\SalesCard;
use App\Admin\Charts\SuccessOrderCard;
use App\Http\Controllers\Controller;
use Dcat\Admin\Layout\Column;
use Dcat\Admin\Layout\Content;
use Dcat\Admin\Layout\Row;

class HomeController extends Controller
{

    public function index(Content $content)
    {
        return $content
            ->header(admin_trans('dujiaoka.dashboard'))
            ->description(admin_trans('dujiaoka.dashboard_description'))
            ->body(function (Row $row) {
                $row->column(6, function (Column $column) {
                    $column->row(self::title());
                    $column->row(new DashBoard());
                });

                $row->column(6, function (Column $column) {
                    $column->row(function (Row $row) {
                        $row->column(6, new SuccessOrderCard());
                        $row->column(6, new PayoutRateCard());
                    });

                    $column->row(new SalesCard());
                });
            });
    }

    public static function title()
    {
        return view('admin.dashboard.title');
    }
}


================================================
FILE: app/Admin/Controllers/OrderController.php
================================================
<?php

namespace App\Admin\Controllers;

use App\Admin\Actions\Post\BatchRestore;
use App\Admin\Actions\Post\Restore;
use App\Admin\Repositories\Order;
use App\Models\Coupon;
use App\Models\Goods;
use App\Models\Pay;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use App\Models\Order as OrderModel;

class OrderController extends AdminController
{


    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(new Order(['goods', 'coupon', 'pay']), function (Grid $grid) {
            $grid->model()->orderBy('id', 'DESC');
            $grid->column('id')->sortable();
            $grid->column('order_sn')->copyable();
            $grid->column('title');
            $grid->column('type')->using(OrderModel::getTypeMap())
                ->label([
                    OrderModel::AUTOMATIC_DELIVERY => Admin::color()->success(),
                    OrderModel::MANUAL_PROCESSING => Admin::color()->info(),
                ]);
            $grid->column('email')->copyable();
            $grid->column('goods.gd_name', admin_trans('order.fields.goods_id'));
            $grid->column('goods_price');
            $grid->column('buy_amount');
            $grid->column('total_price');
            $grid->column('coupon.coupon', admin_trans('order.fields.coupon_id'));
            $grid->column('coupon_discount_price');
            $grid->column('wholesale_discount_price');
            $grid->column('actual_price');
            $grid->column('pay.pay_name', admin_trans('order.fields.pay_id'));
            $grid->column('buy_ip');
            $grid->column('search_pwd')->copyable();
            $grid->column('trade_no')->copyable();
            $grid->column('status')
                ->select(OrderModel::getStatusMap());
            $grid->column('created_at');
            $grid->column('updated_at')->sortable();
            $grid->disableCreateButton();
            $grid->filter(function (Grid\Filter $filter) {
                $filter->equal('order_sn');
                $filter->like('title');
                $filter->equal('status')->select(OrderModel::getStatusMap());
                $filter->equal('email');
                $filter->equal('trade_no');
                $filter->equal('type')->select(OrderModel::getTypeMap());
                $filter->equal('goods_id')->select(Goods::query()->pluck('gd_name', 'id'));
                $filter->equal('coupon_id')->select(Coupon::query()->pluck('coupon', 'id'));
                $filter->equal('pay_id')->select(Pay::query()->pluck('pay_name', 'id'));
                $filter->whereBetween('created_at', function ($q) {
                    $start = $this->input['start'] ?? null;
                    $end = $this->input['end'] ?? null;
                    $q->where('created_at', '>=', $start)
                        ->where('created_at', '<=', $end);
                })->datetime();
                $filter->scope(admin_trans('dujiaoka.trashed'))->onlyTrashed();
            });
            $grid->actions(function (Grid\Displayers\Actions $actions) {
                if (request('_scope_') == admin_trans('dujiaoka.trashed')) {
                    $actions->append(new Restore(OrderModel::class));
                }
            });
            $grid->batchActions(function (Grid\Tools\BatchActions $batch) {
                if (request('_scope_') == admin_trans('dujiaoka.trashed')) {
                    $batch->add(new BatchRestore(OrderModel::class));
                }
            });
        });
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     *
     * @return Show
     */
    protected function detail($id)
    {
        return Show::make($id, new Order(['goods', 'coupon', 'pay']), function (Show $show) {
            $show->field('id');
            $show->field('order_sn');
            $show->field('title');
            $show->field('email');
            $show->field('goods.gd_name', admin_trans('order.fields.goods_id'));
            $show->field('goods_price');
            $show->field('buy_amount');
            $show->field('coupon.coupon', admin_trans('order.fields.coupon_id'));
            $show->field('coupon_discount_price');
            $show->field('wholesale_discount_price');
            $show->field('total_price');
            $show->field('actual_price');
            $show->field('buy_ip');
            $show->field('info')->unescape()->as(function ($info) {
                return  "<textarea class=\"form-control field_wholesale_price_cnf _normal_\"  rows=\"10\" cols=\"30\">" . $info . "</textarea>";
            });
            $show->field('pay.pay_name', admin_trans('order.fields.pay_id'));
            $show->field('status')->using(OrderModel::getStatusMap());
            $show->field('search_pwd');
            $show->field('trade_no');
            $show->field('type')->using(OrderModel::getTypeMap());
            $show->field('created_at');
            $show->field('updated_at');
            $show->disableEditButton();
        });
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        return Form::make(new Order(['goods', 'coupon', 'pay']), function (Form $form) {
            $form->display('id');
            $form->display('order_sn');
            $form->text('title');
            $form->display('goods.gd_name', admin_trans('order.fields.goods_id'));
            $form->display('goods_price');
            $form->display('buy_amount');
            $form->display('coupon.coupon', admin_trans('order.fields.coupon_id'));
            $form->display('coupon_discount_price');
            $form->display('wholesale_discount_price');
            $form->display('total_price');
            $form->display('actual_price');
            $form->display('email');
            $form->textarea('info');
            $form->display('buy_ip');
            $form->display('pay.pay_name', admin_trans('order.fields.pay_id'));
            $form->radio('status')->options(OrderModel::getStatusMap());
            $form->text('search_pwd');
            $form->display('trade_no');
            $form->radio('type')->options(OrderModel::getTypeMap());
            $form->display('created_at');
            $form->display('updated_at');
        });
    }
}


================================================
FILE: app/Admin/Controllers/PayController.php
================================================
<?php

namespace App\Admin\Controllers;

use App\Admin\Actions\Post\BatchRestore;
use App\Admin\Actions\Post\Restore;
use App\Admin\Repositories\Pay;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use App\Models\Pay as PayModel;

class PayController extends AdminController
{


    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(new Pay(), function (Grid $grid) {
            $grid->column('id')->sortable();
            $grid->column('pay_name');
            $grid->column('pay_check');
            $grid->column('pay_method')->select(PayModel::getMethodMap());
            $grid->column('merchant_id')->limit(20);
            $grid->column('merchant_key')->limit(20);
            $grid->column('merchant_pem')->limit(20);
            $grid->column('pay_client')->select(PayModel::getClientMap());
            $grid->column('pay_handleroute');
            $grid->column('is_open')->switch();
            $grid->column('created_at');
            $grid->column('updated_at')->sortable();
            $grid->disableDeleteButton();
            $grid->filter(function (Grid\Filter $filter) {
                $filter->equal('id');
                $filter->equal('pay_check');
                $filter->like('pay_name');
                $filter->scope(admin_trans('dujiaoka.trashed'))->onlyTrashed();
            });
            $grid->actions(function (Grid\Displayers\Actions $actions) {
                if (request('_scope_') == admin_trans('dujiaoka.trashed')) {
                    $actions->append(new Restore(PayModel::class));
                }
            });
            $grid->batchActions(function (Grid\Tools\BatchActions $batch) {
                if (request('_scope_') == admin_trans('dujiaoka.trashed')) {
                    $batch->add(new BatchRestore(PayModel::class));
                }
            });
        });
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     *
     * @return Show
     */
    protected function detail($id)
    {
        return Show::make($id, new Pay(), function (Show $show) {
            $show->field('id');
            $show->field('pay_name');
            $show->field('merchant_id');
            $show->field('merchant_key');
            $show->field('merchant_pem');
            $show->field('pay_check');
            $show->field('pay_client')->as(function ($payClient) {
                if ($payClient == PayModel::PAY_CLIENT_PC) {
                    return admin_trans('pay.fields.pay_client_pc');
                } else {
                    return admin_trans('pay.fields.pay_client_mobile');
                }
            });
            $show->field('pay_handleroute');
            $show->field('pay_method')->as(function ($payMethod) {
                if ($payMethod == PayModel::METHOD_JUMP) {
                    return admin_trans('pay.fields.method_jump');
                } else {
                    return admin_trans('pay.fields.method_scan');
                }
            });
            $show->field('is_open')->as(function ($isOpen) {
                if ($isOpen == PayModel::STATUS_OPEN) {
                    return admin_trans('dujiaoka.status_open');
                } else {
                    return admin_trans('dujiaoka.status_close');
                }
            });
            $show->field('created_at');
            $show->field('updated_at');
        });
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        return Form::make(new Pay(), function (Form $form) {
            $form->display('id');
            $form->text('pay_name')->required();
            $form->text('merchant_id')->required();
            $form->textarea('merchant_key');
            $form->textarea('merchant_pem')->required();
            $form->text('pay_check')->required();
            $form->radio('pay_client')
                ->options(PayModel::getClientMap())
                ->default(PayModel::PAY_CLIENT_PC)
                ->required();
            $form->radio('pay_method')
                ->options(PayModel::getMethodMap())
                ->default(PayModel::METHOD_JUMP)
                ->required();
            $form->text('pay_handleroute')->required();
            $form->switch('is_open')->default(PayModel::STATUS_OPEN);
            $form->display('created_at');
            $form->display('updated_at');
            $form->disableDeleteButton();
        });
    }
}


================================================
FILE: app/Admin/Controllers/SystemSettingController.php
================================================
<?php
/**
 * The file was created by Assimon.
 *
 * @author    assimon<ashang@utf8.hk>
 * @copyright assimon<ashang@utf8.hk>
 * @link      http://utf8.hk/
 */

namespace App\Admin\Controllers;


use App\Admin\Forms\SystemSetting;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Layout\Content;
use Dcat\Admin\Widgets\Card;

class SystemSettingController extends AdminController
{

    /**
     * 系统设置
     *
     * @param Content $content
     * @return Content
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function systemSetting(Content $content)
    {
        return $content
            ->title(admin_trans('menu.titles.system_setting'))
            ->body(new Card(new SystemSetting()));
    }

}


================================================
FILE: app/Admin/Forms/EmailTest.php
================================================
<?php
/**
 * The file was created by Assimon.
 *
 * @author    ZhangYiQiu<me@zhangyiqiu.net>
 * @copyright ZhangYiQiu<me@zhangyiqiu.net>
 * @link      http://zhangyiqiu.net/
 */

namespace App\Admin\Forms;

use App\Models\BaseModel;
use Dcat\Admin\Widgets\Form;
use Illuminate\Support\Facades\Cache;
use Illuminate\Mail\MailServiceProvider;
use Illuminate\Support\Facades\Mail;

class EmailTest extends Form
{
    /**
     * Handle the form request.
     *
     * @param array $input
     *
     * @return mixed
     */
    public function handle(array $input)
    {
      $to = $input['to'];
      $title = $input['title'];
      $body = $input['body'];
      $sysConfig = cache('system-setting');
      $mailConfig = [
          'driver' => $sysConfig['driver'] ?? 'smtp',
          'host' => $sysConfig['host'] ?? '',
          'port' => $sysConfig['port'] ?? '465',
          'username' => $sysConfig['username'] ?? '',
          'from'      =>  [
              'address'   =>   $sysConfig['from_address'] ?? '',
              'name'      =>  $sysConfig['from_name'] ?? '独角发卡'
          ],
          'password' => $sysConfig['password'] ?? '',
          'encryption' => $sysConfig['encryption'] ?? 'ssl'
      ];
      //  覆盖 mail 配置
      config([
          'mail'  =>  array_merge(config('mail'), $mailConfig)
      ]);
      // 重新注册驱动
      (new MailServiceProvider(app()))->register();
	  try
	  {
		  Mail::send(['html' => 'email.mail'], ['body' => $body], function ($message) use ($to, $title){
			  $message->to($to)->subject($title);
		  });
	  }
	  catch(\Exception $e)
	  {
		  return $this
					->response()
					->error($e->getMessage());
	  }
      return $this
				->response()
				->success(admin_trans('email-test.labels.success'));
    }

    /**
     * Build a form here.
     */
    public function form()
    {
        $this->tab(admin_trans('menu.titles.email_test'), function () {
            $this->text('to', admin_trans('email-test.labels.to'))->required();
            $this->text('title', admin_trans('email-test.labels.title'))->default('这是一条测试邮件')->required();
            $this->editor('body', admin_trans('email-test.labels.body'))->default("这是一条测试邮件的正文内容<br/><br/>正文比较长<br/><br/>非常长<br/><br/>测试测试测试")->required();
        });
    }

    public function default()
    {
      
    }

}


================================================
FILE: app/Admin/Forms/ImportCarmis.php
================================================
<?php

namespace App\Admin\Forms;

use App\Models\Carmis;
use App\Models\Goods;
use Dcat\Admin\Widgets\Form;
use Illuminate\Support\Facades\Storage;

class ImportCarmis extends Form
{

    /**
     * Handle the form request.
     *
     * @param array $input
     *
     * @return mixed
     */
    public function handle(array $input)
    {
        if (empty($input['carmis_list']) && empty($input['carmis_txt'])) {
            return $this->response()->error(admin_trans('carmis.rule_messages.carmis_list_and_carmis_txt_can_not_be_empty'));
        }
        $carmisContent = "";
        if (!empty($input['carmis_txt'])) {
            $carmisContent = Storage::disk('public')->get($input['carmis_txt']);
        }
        if (!empty($input['carmis_list'])) {
            $carmisContent = $input['carmis_list'];
        }
        $carmisData = [];
        $tempList = explode(PHP_EOL, $carmisContent);
        foreach ($tempList as $val) {
            if (trim($val) != "") {
                $carmisData[] = [
                    'goods_id' => $input['goods_id'],
                    'carmi' => trim($val),
                    'status' => Carmis::STATUS_UNSOLD,
                    'created_at' => date('Y-m-d H:i:s'),
                    'updated_at' => date('Y-m-d H:i:s'),
                ];
            }
        }
        if ($input['remove_duplication'] == 1) {
            $carmisData = assoc_unique($carmisData, 'carmi');
        }
        Carmis::query()->insert($carmisData);
        // 删除文件
        Storage::disk('public')->delete($input['carmis_txt']);
        return $this
				->response()
				->success(admin_trans('carmis.rule_messages.import_carmis_success'))
				->location('/carmis');
    }

    /**
     * Build a form here.
     */
    public function form()
    {
        $this->confirm(admin_trans('carmis.fields.are_you_import_sure'));
        $this->select('goods_id')->options(
            Goods::query()->where('type', Goods::AUTOMATIC_DELIVERY)->pluck('gd_name', 'id')
        )->required();
        $this->textarea('carmis_list')
            ->rows(20)
            ->help(admin_trans('carmis.helps.carmis_list'));
        $this->file('carmis_txt')
            ->disk('public')
            ->uniqueName()
            ->accept('txt')
            ->maxSize(5120)
            ->help(admin_trans('carmis.helps.carmis_list'));
        $this->switch('remove_duplication');
    }

}


================================================
FILE: app/Admin/Forms/SystemSetting.php
================================================
<?php

namespace App\Admin\Forms;

use App\Models\BaseModel;
use Dcat\Admin\Widgets\Form;
use Illuminate\Support\Facades\Cache;

class SystemSetting extends Form
{
    /**
     * Handle the form request.
     *
     * @param array $input
     *
     * @return mixed
     */
    public function handle(array $input)
    {
        Cache::put('system-setting', $input);
        return $this
				->response()
				->success(admin_trans('system-setting.rule_messages.save_system_setting_success'));
    }

    /**
     * Build a form here.
     */
    public function form()
    {
        $this->tab(admin_trans('system-setting.labels.base_setting'), function () {
            $this->text('title', admin_trans('system-setting.fields.title'))->required();
            $this->image('img_logo', admin_trans('system-setting.fields.img_logo'));
            $this->text('text_logo', admin_trans('system-setting.fields.text_logo'));
            $this->text('keywords', admin_trans('system-setting.fields.keywords'));
            $this->textarea('description', admin_trans('system-setting.fields.description'));
            $this->select('template', admin_trans('system-setting.fields.template'))
                ->options(config('dujiaoka.templates'))
                ->required();
            $this->select('language', admin_trans('system-setting.fields.language'))
                ->options(config('dujiaoka.language'))
                ->required();
            $this->text('manage_email', admin_trans('system-setting.fields.manage_email'));
            $this->number('order_expire_time', admin_trans('system-setting.fields.order_expire_time'))
                ->default(5)
                ->required();
            $this->switch('is_open_anti_red', admin_trans('system-setting.fields.is_open_anti_red'))
                ->default(BaseModel::STATUS_CLOSE);
            $this->switch('is_open_img_code', admin_trans('system-setting.fields.is_open_img_code'))
                ->default(BaseModel::STATUS_CLOSE);
            $this->switch('is_open_search_pwd', admin_trans('system-setting.fields.is_open_search_pwd'))
                ->default(BaseModel::STATUS_CLOSE);
            $this->switch('is_open_google_translate', admin_trans('system-setting.fields.is_open_google_translate'))
                ->default(BaseModel::STATUS_CLOSE);
            $this->editor('notice', admin_trans('system-setting.fields.notice'));
            $this->textarea('footer', admin_trans('system-setting.fields.footer'));
        });
        $this->tab(admin_trans('system-setting.labels.order_push_setting'), function () {
            $this->switch('is_open_server_jiang', admin_trans('system-setting.fields.is_open_server_jiang'))
                ->default(BaseModel::STATUS_CLOSE);
            $this->text('server_jiang_token', admin_trans('system-setting.fields.server_jiang_token'));
            $this->switch('is_open_telegram_push', admin_trans('system-setting.fields.is_open_telegram_push'))
                ->default(BaseModel::STATUS_CLOSE);
            $this->text('telegram_bot_token', admin_trans('system-setting.fields.telegram_bot_token'));
            $this->text('telegram_userid', admin_trans('system-setting.fields.telegram_userid'));
            $this->switch('is_open_bark_push', admin_trans('system-setting.fields.is_open_bark_push'))
                ->default(BaseModel::STATUS_CLOSE);
            $this->switch('is_open_bark_push_url', admin_trans('system-setting.fields.is_open_bark_push_url'))
                ->default(BaseModel::STATUS_CLOSE);
            $this->text('bark_server', admin_trans('system-setting.fields.bark_server'));
            $this->text('bark_token', admin_trans('system-setting.fields.bark_token'));
            $this->switch('is_open_qywxbot_push', admin_trans('system-setting.fields.is_open_qywxbot_push'))
                ->default(BaseModel::STATUS_CLOSE);
            $this->text('qywxbot_key', admin_trans('system-setting.fields.qywxbot_key'));
        });
        $this->tab(admin_trans('system-setting.labels.mail_setting'), function () {
            $this->text('driver', admin_trans('system-setting.fields.driver'))->default('smtp')->required();
            $this->text('host', admin_trans('system-setting.fields.host'));
            $this->text('port', admin_trans('system-setting.fields.port'))->default(587);
            $this->text('username', admin_trans('system-setting.fields.username'));
            $this->text('password', admin_trans('system-setting.fields.password'));
            $this->text('encryption', admin_trans('system-setting.fields.encryption'));
            $this->text('from_address', admin_trans('system-setting.fields.from_address'));
            $this->text('from_name', admin_trans('system-setting.fields.from_name'));
        });
        $this->tab(admin_trans('system-setting.labels.geetest'), function () {
            $this->text('geetest_id', admin_trans('system-setting.fields.geetest_id'));
            $this->text('geetest_key', admin_trans('system-setting.fields.geetest_key'));
            $this->switch('is_open_geetest', admin_trans('system-setting.fields.is_open_geetest'))->default(BaseModel::STATUS_CLOSE);
        });
        $this->confirm(
            admin_trans('dujiaoka.warning_title'),
            admin_trans('system-setting.rule_messages.change_reboot_php_worker')
        );
    }

    public function default()
    {
        return Cache::get('system-setting');
    }

}


================================================
FILE: app/Admin/Repositories/Carmis.php
================================================
<?php

namespace App\Admin\Repositories;

use App\Models\Carmis as Model;
use Dcat\Admin\Repositories\EloquentRepository;

class Carmis extends EloquentRepository
{

    /**
     * Model.
     *
     * @var string
     */
    protected $eloquentClass = Model::class;

}


================================================
FILE: app/Admin/Repositories/Coupon.php
================================================
<?php

namespace App\Admin\Repositories;

use App\Models\Coupon as Model;
use Dcat\Admin\Repositories\EloquentRepository;

class Coupon extends EloquentRepository
{
    /**
     * Model.
     *
     * @var string
     */
    protected $eloquentClass = Model::class;
}


================================================
FILE: app/Admin/Repositories/Emailtpl.php
================================================
<?php

namespace App\Admin\Repositories;

use App\Models\Emailtpl as Model;
use Dcat\Admin\Repositories\EloquentRepository;

class Emailtpl extends EloquentRepository
{
    /**
     * Model.
     *
     * @var string
     */
    protected $eloquentClass = Model::class;
}


================================================
FILE: app/Admin/Repositories/Goods.php
================================================
<?php

namespace App\Admin\Repositories;

use App\Models\Goods as Model;
use Dcat\Admin\Repositories\EloquentRepository;

class Goods extends EloquentRepository
{
    /**
     * Model.
     *
     * @var string
     */
    protected $eloquentClass = Model::class;
}


================================================
FILE: app/Admin/Repositories/GoodsGroup.php
================================================
<?php

namespace App\Admin\Repositories;

use App\Models\GoodsGroup as Model;
use Dcat\Admin\Repositories\EloquentRepository;

class GoodsGroup extends EloquentRepository
{

    /**
     * Model.
     *
     * @var string
     */
    protected $eloquentClass = Model::class;

}


================================================
FILE: app/Admin/Repositories/Order.php
================================================
<?php

namespace App\Admin\Repositories;

use App\Models\Order as Model;
use Dcat\Admin\Repositories\EloquentRepository;

class Order extends EloquentRepository
{
    /**
     * Model.
     *
     * @var string
     */
    protected $eloquentClass = Model::class;
}


================================================
FILE: app/Admin/Repositories/Pay.php
================================================
<?php

namespace App\Admin\Repositories;

use App\Models\Pay as Model;
use Dcat\Admin\Repositories\EloquentRepository;

class Pay extends EloquentRepository
{
    /**
     * Model.
     *
     * @var string
     */
    protected $eloquentClass = Model::class;
}


================================================
FILE: app/Admin/bootstrap.php
================================================
<?php

use Dcat\Admin\Admin;
use Dcat\Admin\Grid;
use Dcat\Admin\Form;
use Dcat\Admin\Grid\Filter;
use Dcat\Admin\Show;

/**
 * Dcat-admin - admin builder based on Laravel.
 * @author jqh <https://github.com/jqhph>
 *
 * Bootstraper for Admin.
 *
 * Here you can remove builtin form field:
 *
 * extend custom field:
 * Dcat\Admin\Form::extend('php', PHPEditor::class);
 * Dcat\Admin\Grid\Column::extend('php', PHPEditor::class);
 * Dcat\Admin\Grid\Filter::extend('php', PHPEditor::class);
 *
 * Or require js and css assets:
 * Admin::css('/packages/prettydocs/css/styles.css');
 * Admin::js('/packages/prettydocs/js/main.js');
 *
 */


================================================
FILE: app/Admin/routes.php
================================================
<?php

use Illuminate\Routing\Router;
use Illuminate\Support\Facades\Route;
use Dcat\Admin\Admin;

Admin::routes();

Route::group([
    'prefix'     => config('admin.route.prefix'),
    'namespace'  => config('admin.route.namespace'),
    'middleware' => config('admin.route.middleware'),
], function (Router $router) {
    $router->get('/', 'HomeController@index');
    $router->resource('goods', 'GoodsController');
    $router->resource('goods-group', 'GoodsGroupController');
    $router->resource('carmis', 'CarmisController');
    $router->resource('coupon', 'CouponController');
    $router->resource('emailtpl', 'EmailtplController');
    $router->resource('pay', 'PayController');
    $router->resource('order', 'OrderController');
    $router->get('import-carmis', 'CarmisController@importCarmis');
    $router->get('system-setting', 'SystemSettingController@systemSetting');
    $router->get('email-test', 'EmailTestController@emailTest');
});


================================================
FILE: app/Console/Kernel.php
================================================
<?php

namespace App\Console;

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 = [
        //
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        // $schedule->command('inspire')
        //          ->hourly();
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}


================================================
FILE: app/Events/GoodsDeleted.php
================================================
<?php

namespace App\Events;

use App\Models\Goods;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class GoodsDeleted
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $goods;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct(Goods $goods)
    {
        $this->goods = $goods;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('channel-name');
    }
}


================================================
FILE: app/Events/GoodsGroupDeleted.php
================================================
<?php

namespace App\Events;

use App\Models\GoodsGroup;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class GoodsGroupDeleted
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $goodsGroup;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct(GoodsGroup $goodsGroup)
    {
        $this->goodsGroup = $goodsGroup;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('channel-name');
    }
}


================================================
FILE: app/Events/OrderUpdated.php
================================================
<?php

namespace App\Events;

use App\Models\Order;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class OrderUpdated
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $order;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct(Order $order)
    {
        $this->order = $order;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('channel-name');
    }
}


================================================
FILE: app/Exceptions/AppException.php
================================================
<?php


namespace App\Exceptions;


class AppException extends \Exception
{

    public function __construct($message = "", $code = 0, \Throwable $previous = null)
    {
        parent::__construct($message, $code, $previous);
    }

}


================================================
FILE: app/Exceptions/Handler.php
================================================
<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

class Handler extends ExceptionHandler
{
    /**
     * A list of the exception types that are not reported.
     *
     * @var array
     */
    protected $dontReport = [
        //
    ];

    /**
     * A list of the inputs that are never flashed for validation exceptions.
     *
     * @var array
     */
    protected $dontFlash = [
        'password',
        'password_confirmation',
    ];

    /**
     * Report or log an exception.
     *
     * @param  \Exception  $exception
     * @return void
     *
     * @throws \Exception
     */
    public function report(Exception $exception)
    {
        parent::report($exception);
    }

    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Symfony\Component\HttpFoundation\Response
     *
     * @throws \Exception
     */
    public function render($request, Exception $exception)
    {
        if ($exception instanceof AppException) {
            $layout = dujiaoka_config_get('template', 'layui');
            $tplPath = $layout . '/errors/error';
            return view($tplPath, ['title' => __('dujiaoka.error_title'), 'content' => $exception->getMessage(), 'url' => ""]);
        }
        return parent::render($request, $exception);
    }
}


================================================
FILE: app/Exceptions/RuleValidationException.php
================================================
<?php


namespace App\Exceptions;


class RuleValidationException extends \Exception
{

    public function __construct($message = "", $code = 400, \Throwable $previous = null)
    {
        parent::__construct($message, $code, $previous);
    }

}


================================================
FILE: app/Helpers/functions.php
================================================
<?php
/**
 * The file was created by Assimon.
 *
 * @author    assimon<ashang@utf8.hk>
 * @copyright assimon<ashang@utf8.hk>
 * @link      http://utf8.hk/
 */


use App\Exceptions\AppException;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Storage;

if (! function_exists('replace_mail_tpl')) {

    /**
     * 替换邮件模板
     *
     * @param array $mailtpl 模板
     * @param array $data 内容
     * @return array|false|mixed
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    function replace_mail_tpl($mailtpl = [], $data = [])
    {
        if (!$mailtpl) {
            return false;
        }
        if ($data) {
            foreach ($data as $key => $val) {
                $title = str_replace('{' . $key . '}', $val, isset($title) ? $title : $mailtpl['tpl_name']);
                $content = str_replace('{' . $key . '}', $val, isset($content) ? $content : $mailtpl['tpl_content']);
            }
            return ['tpl_name' => $title, 'tpl_content' => $content];
        }
        return $mailtpl;
    }
}


if (! function_exists('dujiaoka_config_get')) {

    /**
     * 系统配置获取
     *
     * @param string $key 要获取的key
     * @param $default 默认
     * @return mixed|null
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    function dujiaoka_config_get(string $key, $default = null)
    {
       $sysConfig = Cache::get('system-setting');
       return $sysConfig[$key] ?? $default;
    }
}

if (! function_exists('format_wholesale_price')) {

    /**
     * 格式化批发价
     *
     * @param string $wholesalePriceArr 批发价配置
     * @return array|null
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    function format_wholesale_price(string $wholesalePriceArr): ?array
    {
        $waitArr = explode(PHP_EOL, $wholesalePriceArr);
        $formatData = [];
        foreach ($waitArr as $key => $val) {
            if ($val != "") {
                $explodeFormat = explode('=', delete_html_code($val));
                if (count($explodeFormat) != 2) {
                    return null;
                }
                $formatData[$key]['number'] = $explodeFormat[0];
                $formatData[$key]['price'] = $explodeFormat[1];
            }
        }
        sort($formatData);
        return $formatData;
    }
}

if (! function_exists('delete_html_code')) {

    /**
     * 去除html内容
     * @param string $str 需要去掉的字符串
     * @return string
     */
    function delete_html_code(string $str): string
    {
        $str = trim($str); //清除字符串两边的空格
        $str = preg_replace("/\t/", "", $str); //使用正则表达式替换内容,如:空格,换行,并将替换为空。
        $str = preg_replace("/\r\n/", "", $str);
        $str = preg_replace("/\r/", "", $str);
        $str = preg_replace("/\n/", "", $str);
        $str = preg_replace("/ /", "", $str);
        $str = preg_replace("/  /", "", $str);  //匹配html中的空格
        return trim($str); //返回字符串
    }
}

if (! function_exists('format_charge_input')) {

    /**
     * 格式化代充框
     *
     * @param string $charge
     * @return array|null
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    function format_charge_input(string $charge): ?array
    {
        $inputArr = explode(PHP_EOL, $charge);
        $formatData = [];
        foreach ($inputArr as $key => $val) {
            if ($val != "") {
                $explodeFormat = explode('=', delete_html_code($val));
                if (count($explodeFormat) < 3) {
                    return null;
                }
                $formatData[$key]['field'] = $explodeFormat[0];
                $formatData[$key]['desc'] = $explodeFormat[1];
                $formatData[$key]['rule'] = filter_var($explodeFormat[2], FILTER_VALIDATE_BOOLEAN);
                if(count($explodeFormat) > 3){
                    $formatData[$key]['placeholder'] = $explodeFormat[3];
                }else{
                    $formatData[$key]['placeholder'] = $formatData[$key]['desc'];
                }
            }
        }
        return $formatData;
    }
}

if (! function_exists('site_url')) {

    /**
     * 获取顶级域名 带协议
     * @return string
     */
    function site_url()
    {
        $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
        $domainName = $_SERVER['HTTP_HOST'] . '/';
        return $protocol . $domainName;
    }
}

if (! function_exists('md5_signquery')) {

    function md5_signquery(array $parameter, string $signKey)
    {
        ksort($parameter); //重新排序$data数组
        reset($parameter); //内部指针指向数组中的第一个元素
        $sign = '';
        $urls = '';
        foreach ($parameter as $key => $val) {
            if ($val == '') continue;
            if ($key != 'sign') {
                if ($sign != '') {
                    $sign .= "&";
                    $urls .= "&";
                }
                $sign .= "$key=$val"; //拼接为url参数形式
                $urls .= "$key=" . urlencode($val); //拼接为url参数形式
            }
        }
        $sign = md5($sign . $signKey);//密码追加进入开始MD5签名
        $query = $urls . '&sign=' . $sign; //创建订单所需的参数
        return $query;
    }
}

if (! function_exists('signquery_string')) {

    function signquery_string(array $data)
    {
        ksort($data); //排序post参数
        reset($data); //内部指针指向数组中的第一个元素
        $sign = ''; //加密字符串初始化
        foreach ($data as $key => $val) {
            if ($val == '' || $key == 'sign') continue; //跳过这些不签名
            if ($sign) $sign .= '&'; //第一个字符串签名不加& 其他加&连接起来参数
            $sign .= "$key=$val"; //拼接为url参数形式
        }
        return $sign;
    }
}

if (!function_exists('picture_ulr')) {

    /**
     * 生成前台图片链接 不存在使用默认图
     * @param string $file 图片地址
     * @param false $getHost 是否只获取图片前缀域名
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\UrlGenerator|string
     */
    function picture_ulr($file, $getHost = false)
    {
        if ($getHost) return Storage::disk('admin')->url('');
        return $file ? Storage::disk('admin')->url($file) : url('assets/common/images/default.jpg');
    }
}

if (!function_exists('assoc_unique')) {
    function assoc_unique($arr, $key)
    {
        $tmp_arr = array();
        foreach ($arr as $k => $v) {
            if (in_array($v[$key], $tmp_arr)) {//搜索$v[$key]是否在$tmp_arr数组中存在,若存在返回true
                unset($arr[$k]);
            } else {
                $tmp_arr[] = $v[$key];
            }
        }
        sort($arr); //sort函数对数组进行排序
        return $arr;
    }
}


================================================
FILE: app/Http/Controllers/BaseController.php
================================================
<?php
/**
 * The file was created by Assimon.
 *
 * @author    assimon<ashang@utf8.hk>
 * @copyright assimon<ashang@utf8.hk>
 * @link      http://utf8.hk/
 */

namespace App\Http\Controllers;

class BaseController extends Controller
{

    /**
     * 渲染模板
     *
     * @param string $tpl 模板名称
     * @param array $data 数据
     * @param array $pageTitle 页面标题
     *
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    protected function render(string $tpl, $data = [], string $pageTitle = '')
    {
        $layout = dujiaoka_config_get('template', 'unicorn');
        $tplPath = $layout . '/' .$tpl;
        return view($tplPath, $data)->with('page_title', $pageTitle);
    }

    /**
     * 错误提示
     *
     * @param string $content 提示内容
     * @param string $jumpUri 跳转url
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    protected function err(string $content, $jumpUri = '')
    {
        $layout = dujiaoka_config_get('template', 'unicorn');
        $tplPath = $layout . '/errors/error';
        return view($tplPath, ['title' => __('dujiaoka.error_title'), 'content' => $content, 'url' => $jumpUri])
            ->with('page_title', __('dujiaoka.error_title'));
    }

}


================================================
FILE: app/Http/Controllers/Controller.php
================================================
<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}


================================================
FILE: app/Http/Controllers/Home/HomeController.php
================================================
<?php

namespace App\Http\Controllers\Home;

use App\Exceptions\RuleValidationException;
use App\Http\Controllers\BaseController;
use App\Models\Pay;
use Germey\Geetest\Geetest;
use Illuminate\Database\DatabaseServiceProvider;
use Illuminate\Database\QueryException;
use Illuminate\Encryption\Encrypter;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;

class HomeController extends BaseController
{

    /**
     * 商品服务层.
     * @var \App\Service\PayService
     */
    private $goodsService;

    /**
     * 支付服务层
     * @var \App\Service\PayService
     */
    private $payService;

    public function __construct()
    {
        $this->goodsService = app('Service\GoodsService');
        $this->payService = app('Service\PayService');
    }

    /**
     * 首页.
     *
     * @param Request $request
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function index(Request $request)
    {
        $goods = $this->goodsService->withGroup();
        return $this->render('static_pages/home', ['data' => $goods], __('dujiaoka.page-title.home'));
    }

    /**
     * 商品详情
     *
     * @param int $id
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function buy(int $id)
    {
        try {
            $goods = $this->goodsService->detail($id);
            $this->goodsService->validatorGoodsStatus($goods);
            // 有没有优惠码可以展示
            if (count($goods->coupon)) {
                $goods->open_coupon = 1;
            }
            $formatGoods = $this->goodsService->format($goods);
            // 加载支付方式.
            $client = Pay::PAY_CLIENT_PC;
            if (app('Jenssegers\Agent')->isMobile()) {
                $client = Pay::PAY_CLIENT_MOBILE;
            }
            $formatGoods->payways = $this->payService->pays($client);
            return $this->render('static_pages/buy', $formatGoods, $formatGoods->gd_name);
        } catch (RuleValidationException $ruleValidationException) {
            return $this->err($ruleValidationException->getMessage());
        }

    }

    /**
     * 极验行为验证
     *
     * @param Request $request
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function geetest(Request $request)
    {
        $data = [
            'user_id' => @Auth::user()?@Auth::user()->id:'UnLoginUser',
            'client_type' => 'web',
            'ip_address' => \Illuminate\Support\Facades\Request::ip()
        ];
        $status = Geetest::preProcess($data);
        session()->put('gtserver', $status);
        session()->put('user_id', $data['user_id']);
        return Geetest::getResponseStr();
    }

    /**
     * 安装页面
     *
     * @param Request $request
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function install(Request $request)
    {
        return view('common/install');
    }

    /**
     * 执行安装
     *
     * @param Request $request
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function doInstall(Request $request)
    {
        try {
            $dbConfig = config('database');
            $mysqlDB = [
                'host' => $request->input('db_host'),
                'port' => $request->input('db_port'),
                'database' => $request->input('db_database'),
                'username' => $request->input('db_username'),
                'password' => $request->input('db_password'),
            ];
            $dbConfig['connections']['mysql'] = array_merge($dbConfig['connections']['mysql'], $mysqlDB);
            // Redis
            $redisDB = [
                'host' => $request->input('redis_host'),
                'password' => $request->input('redis_password', 'null'),
                'port' => $request->input('redis_port'),
            ];
            $dbConfig['redis']['default'] = array_merge($dbConfig['redis']['default'], $redisDB);
            config(['database' => $dbConfig]);
            DB::purge();
            // db测试
            DB::connection()->select('select 1 limit 1');
            // redis测试
            Redis::set('dujiaoka_com', 'ok');
            Redis::get('dujiaoka_com');
            // 获得文件模板
            $envExamplePath = base_path() . DIRECTORY_SEPARATOR . '.env.example';
            $envPath =  base_path() . DIRECTORY_SEPARATOR . '.env';
            $installLock = base_path() . DIRECTORY_SEPARATOR . 'install.lock';
            $installSql = database_path() . DIRECTORY_SEPARATOR . 'sql' . DIRECTORY_SEPARATOR . 'install.sql';
            $envTemp = file_get_contents($envExamplePath);
            $postData = $request->all();
            // 临时写入key
            $postData['app_key'] = 'base64:' . base64_encode(
                    Encrypter::generateKey(config('app.cipher'))
                );
            foreach ($postData as $key => $item) {
                $envTemp = str_replace('{' . $key . '}', $item, $envTemp);
            }
            // 写入配置
            file_put_contents($envPath, $envTemp);
            // 导入sql
            DB::unprepared(file_get_contents($installSql));
            // 写入安装锁
            file_put_contents($installLock, 'install ok');
            return 'success';
        } catch (\RedisException $exception) {
            return 'Redis配置错误 :' . $exception->getMessage();
        } catch (QueryException $exception) {
            return '数据库配置错误 :' . $exception->getMessage();
        } catch (\Exception $exception) {
            return $exception->getMessage();
        }
    }


}


================================================
FILE: app/Http/Controllers/Home/OrderController.php
================================================
<?php

namespace App\Http\Controllers\Home;

use App\Exceptions\RuleValidationException;
use App\Http\Controllers\BaseController;
use App\Models\Order;
use App\Service\OrderProcessService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Facades\DB;


/**
 * 订单控制器
 *
 * Class OrderController
 * @package App\Http\Controllers\Home
 * @author: Assimon
 * @email: Ashang@utf8.hk
 * @blog: https://utf8.hk
 * Date: 2021/5/30
 */
class OrderController extends BaseController
{


    /**
     * 订单服务层
     * @var \App\Service\OrderService
     */
    private $orderService;

    /**
     * 订单处理层.
     * @var OrderProcessService
     */
    private $orderProcessService;

    public function __construct()
    {
        $this->orderService = app('Service\OrderService');
        $this->orderProcessService = app('Service\OrderProcessService');
    }

    /**
     * 创建订单
     *
     * @param Request $request
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
     * @throws \Illuminate\Validation\ValidationException
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function createOrder(Request $request)
    {
        DB::beginTransaction();
        try {
            $this->orderService->validatorCreateOrder($request);
            $goods = $this->orderService->validatorGoods($request);
            $this->orderService->validatorLoopCarmis($request);
            // 设置商品
            $this->orderProcessService->setGoods($goods);
            // 优惠码
            $coupon = $this->orderService->validatorCoupon($request);
            // 设置优惠码
            $this->orderProcessService->setCoupon($coupon);
            $otherIpt = $this->orderService->validatorChargeInput($goods, $request);
            $this->orderProcessService->setOtherIpt($otherIpt);
            // 数量
            $this->orderProcessService->setBuyAmount($request->input('by_amount'));
            // 支付方式
            $this->orderProcessService->setPayID($request->input('payway'));
            // 下单邮箱
            $this->orderProcessService->setEmail($request->input('email'));
            // ip地址
            $this->orderProcessService->setBuyIP($request->getClientIp());
            // 查询密码
            $this->orderProcessService->setSearchPwd($request->input('search_pwd', ''));
            // 创建订单
            $order = $this->orderProcessService->createOrder();
            DB::commit();
            // 设置订单cookie
            $this->queueCookie($order->order_sn);
            return redirect(url('/bill', ['orderSN' => $order->order_sn]));
        } catch (RuleValidationException $exception) {
            DB::rollBack();
            return $this->err($exception->getMessage());
        }
    }

    /**
     * 设置订单cookie.
     * @param string $orderSN 订单号.
     */
    private function queueCookie(string $orderSN) : void
    {
        // 设置订单cookie
        $cookies = Cookie::get('dujiaoka_orders');
        if (empty($cookies)) {
            Cookie::queue('dujiaoka_orders', json_encode([$orderSN]));
        } else {
            $cookies = json_decode($cookies, true);
            array_push($cookies, $orderSN);
            Cookie::queue('dujiaoka_orders', json_encode($cookies));
        }
    }

    /**
     * 结账
     *
     * @param string $orderSN
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function bill(string $orderSN)
    {
        $order = $this->orderService->detailOrderSN($orderSN);
        if (empty($order)) {
            return $this->err(__('dujiaoka.prompt.order_does_not_exist'));
        }
        if ($order->status == Order::STATUS_EXPIRED) {
            return $this->err(__('dujiaoka.prompt.order_is_expired'));
        }
        return $this->render('static_pages/bill', $order, __('dujiaoka.page-title.bill'));
    }


    /**
     * 订单状态监测
     *
     * @param string $orderSN 订单号
     * @return \Illuminate\Http\JsonResponse
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function checkOrderStatus(string $orderSN)
    {
        $order = $this->orderService->detailOrderSN($orderSN);
        // 订单不存在或者已经过期
        if (!$order || $order->status == Order::STATUS_EXPIRED) {
            return response()->json(['msg' => 'expired', 'code' => 400001]);
        }
        // 订单已经支付
        if ($order->status == Order::STATUS_WAIT_PAY) {
            return response()->json(['msg' => 'wait....', 'code' => 400000]);
        }
        // 成功
        if ($order->status > Order::STATUS_WAIT_PAY) {
            return response()->json(['msg' => 'success', 'code' => 200]);
        }
    }

    /**
     * 通过订单号展示订单详情
     *
     * @param string $orderSN 订单号.
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function detailOrderSN(string $orderSN)
    {
        $order = $this->orderService->detailOrderSN($orderSN);
        // 订单不存在或者已经过期
        if (!$order) {
            return $this->err(__('dujiaoka.prompt.order_does_not_exist'));
        }
        return $this->render('static_pages/orderinfo', ['orders' => [$order]], __('dujiaoka.page-title.order-detail'));
    }

    /**
     * 订单号查询
     *
     * @param Request $request
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function searchOrderBySN(Request $request)
    {
        return $this->detailOrderSN($request->input('order_sn'));
    }

    /**
     * 通过邮箱查询
     *
     * @param Request $request
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function searchOrderByEmail(Request $request)
    {
        if (
            !$request->has('email') ||
            (
                dujiaoka_config_get('is_open_search_pwd', \App\Models\BaseModel::STATUS_CLOSE) == \App\Models\BaseModel::STATUS_OPEN &&
                !$request->has('search_pwd')
            )
        ) {
            return $this->err(__('dujiaoka.prompt.server_illegal_request'));
        }
        $orders = $this->orderService->withEmailAndPassword($request->input('email'), $request->input('search_pwd',''));
        if (!$orders) {
            return $this->err(__('dujiaoka.prompt.no_related_order_found'));
        }
        return $this->render('static_pages/orderinfo', ['orders' => $orders], __('dujiaoka.page-title.order-detail'));
    }

    /**
     * 通过浏览器缓存查询
     * @param Request $request
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function searchOrderByBrowser(Request $request)
    {
        $cookies = Cookie::get('dujiaoka_orders');
        if (empty($cookies)) {
            return $this->err(__('dujiaoka.prompt.no_related_order_found_for_cache'));
        }
        $orderSNS = json_decode($cookies, true);
        $orders = $this->orderService->byOrderSNS($orderSNS);
        return $this->render('static_pages/orderinfo', ['orders' => $orders], __('dujiaoka.page-title.order-detail'));
    }

    /**
     * 订单查询页
     *
     * @param Request $request
     * @return mixed
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function orderSearch(Request $request)
    {
        return $this->render('static_pages/searchOrder', [], __('dujiaoka.page-title.order-search'));
    }

}


================================================
FILE: app/Http/Controllers/Pay/AlipayController.php
================================================
<?php

namespace App\Http\Controllers\Pay;

use App\Exceptions\RuleValidationException;
use App\Http\Controllers\PayController;
use Illuminate\Http\Request;
use Yansongda\Pay\Pay;

class AlipayController extends PayController
{

    /**
     * 支付宝支付网关
     *
     * @param string $payway
     * @param string $orderSN
     */
    public function gateway(string $payway, string $orderSN)
    {
        try {
            // 加载网关
            $this->loadGateWay($orderSN, $payway);
            $config = [
                'app_id' => $this->payGateway->merchant_id,
                'ali_public_key' => $this->payGateway->merchant_key,
                'private_key' => $this->payGateway->merchant_pem,
                'notify_url' => url($this->payGateway->pay_handleroute . '/notify_url'),
                'return_url' => url('detail-order-sn', ['orderSN' => $this->order->order_sn]),
                'http' => [ // optional
                    'timeout' => 10.0,
                    'connect_timeout' => 10.0,
                ],
            ];
            $order = [
                'out_trade_no' => $this->order->order_sn,
                'total_amount' => (float)$this->order->actual_price,
                'subject' => $this->order->order_sn
            ];
            switch ($payway){
                case 'zfbf2f':
                case 'alipayscan':
                    try{
                        $result = Pay::alipay($config)->scan($order)->toArray();
                        $result['payname'] = $this->order->order_sn;
                        $result['actual_price'] = (float)$this->order->actual_price;
                        $result['orderid'] = $this->order->order_sn;
                        $result['jump_payuri'] = $result['qr_code'];
                        return $this->render('static_pages/qrpay', $result, __('dujiaoka.scan_qrcode_to_pay'));
                    } catch (\Exception $e) {
                        return $this->err(__('dujiaoka.prompt.abnormal_payment_channel') . $e->getMessage());
                    }
                case 'aliweb':
                    try{
                        $result = Pay::alipay($config)->web($order);
                        return $result;
                    } catch (\Exception $e) {
                        return $this->err(__('dujiaoka.prompt.abnormal_payment_channel') . $e->getMessage());
                    }
                case 'aliwap':
                    try{
                        $result = Pay::alipay($config)->wap($order);
                        return $result;
                    } catch (\Exception $e) {
                        return $this->err(__('dujiaoka.prompt.abnormal_payment_channel') . $e->getMessage());
                    }
            }
        } catch (RuleValidationException $exception) {
            return $this->err($exception->getMessage());
        }
    }


    /**
     * 异步通知
     */
    public function notifyUrl(Request $request)
    {
        $orderSN = $request->input('out_trade_no');
        $order = $this->orderService->detailOrderSN($orderSN);
        if (!$order) {
            return 'error';
        }
        $payGateway = $this->payService->detail($order->pay_id);
        if (!$payGateway) {
            return 'error';
        }
        if($payGateway->pay_handleroute != '/pay/alipay'){
            return 'fail';
        }
        $config = [
            'app_id' => $payGateway->merchant_id,
            'ali_public_key' => $payGateway->merchant_key,
            'private_key' => $payGateway->merchant_pem,
        ];
        $pay = Pay::alipay($config);
        try{
            // 验证签名
            $result = $pay->verify();
            if ($result->trade_status == 'TRADE_SUCCESS' || $result->trade_status == 'TRADE_FINISHED') {
                $this->orderProcessService->completedOrder($result->out_trade_no, $result->total_amount, $result->trade_no);
            }
            return 'success';
        } catch (\Exception $exception) {
            return 'fail';
        }
    }



}


================================================
FILE: app/Http/Controllers/Pay/CoinbaseController.php
================================================
<?php
namespace App\Http\Controllers\Pay;

use App\Exceptions\RuleValidationException;
use App\Http\Controllers\PayController;
use Illuminate\Http\Request;

class CoinbaseController extends PayController
{

    public function gateway(string $payway, string $orderSN)
    {
        try {
            // 加载网关
            $this->loadGateWay($orderSN, $payway);
            //构造要请求的参数数组,无需改动
            switch ($payway) {
                case 'coinbase':
                default:
                    try {
                        $createOrderUrl="https://api.commerce.coinbase.com/charges";
                        $price_amount = sprintf('%.2f', (float)$this->order->actual_price);// 只取小数点后两位
                        $fees = (double)$this->payGateway->merchant_id;//手续费费率  比如 0.05
                        if($fees>0.00)
                        {
                            $price_amount =(double)$price_amount * (1.00+$fees);// 价格 * (1 + 0.05)
                        }


                        $redirect_url = url('detail-order-sn', ['orderSN' => $this->order->order_sn]);  //同步地址
                        $cancel_url = url('detail-order-sn', ['orderSN' => $this->order->order_sn]);  //同步地址
                        $config = [
                            'name'=>$this->order->title,
                            'description'=>$this->order->title.'需付款'.$price_amount.'元',
                            'pricing_type' => 'fixed_price',
                            'local_price' => [
                                'amount' =>  $price_amount,
                                'currency' => 'CNY'
                            ],
                            'metadata' => [
                                'customer_id' =>  $this->order->order_sn,
                                'customer_name' => $this->order->title
                            ],
                            'redirect_url' =>$redirect_url,
                            'cancel_url'=> $cancel_url
                        ];
                        $header = array();
                        $header[] = 'Content-Type:application/json';
                        $header[] = 'X-CC-Api-Key:'.$this->payGateway->merchant_key; //APP key
                        $header[] = 'X-CC-Version: 2018-03-22';

                        $ch = curl_init(); //使用curl请求
                        curl_setopt($ch, CURLOPT_URL, $createOrderUrl);
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
                        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
                        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($config));
                        $coinbase_json = curl_exec($ch);
                        curl_close($ch);

                        $coinbase_date=json_decode($coinbase_json,true);
                        if(is_array($coinbase_date))
                        {
                            $payment_url = $coinbase_date['data']['hosted_url'];
                        }
                        else
                        {
                            return 'fail|Coinbase支付接口请求失败';
                        }
                        return redirect()->away($payment_url);
                    } catch (\Exception $e) {
                        throw new RuleValidationException(__('dujiaoka.prompt.abnormal_payment_channel') . $e->getMessage());
                    }
                    break;
            }
        } catch (RuleValidationException $exception) {
            return $this->err($exception->getMessage());
        }
    }

    public function notifyUrl(Request $request)
    {
        $payload = file_get_contents( 'php://input' );
        $sig    = $_SERVER['HTTP_X_CC_WEBHOOK_SIGNATURE'];
		$data       = json_decode( $payload, true );
		$event_data = $data['event']['data'];
		$order = $this->orderService->detailOrderSN($event_data['metadata']['customer_id']);//
		if (!$order) {
			return 'fail';
		}
		$payGateway = $this->payService->detail($order->pay_id);
		if (!$payGateway) {
			return 'fail';
		}
        if($payGateway->pay_handleroute != 'pay/coinbase'){
            return 'fail';
        }
		$secret = $payGateway->merchant_pem;//共享密钥
		$sig2 = hash_hmac( 'sha256', $payload, $secret );
        $result_str=array("confirmed","resolved");//返回的结果字符串数组
		if (!empty( $payload ) && ($sig === $sig2))
		{

			foreach ($event_data['payments'] as $payment) {
				//if ((strtolower($payment['status']) === 'confirmed')||(strtolower($payment['status']) === 'resolved')) {
                if(in_array(strtolower($payment['status']),$result_str)){
					$return_pay_amount = $payment['value']['local']['amount'];
					$return_currency=$payment['value']['local']['currency'];
					$return_status=strtolower($payment['status']);
				}
			}
            if($return_currency !== 'CNY')
			{
				return 'error|Notify: Wrong currency:'.$return_currency;
			}

			$bccomp = bccomp($order->actual_price, $return_pay_amount, 2); //如果订单金额 大于 实际支付金额 返回1,抛出异常
            if ($bccomp == 1) {
                throw new \Exception(__('Coinbase付款金额不足'));
            }
            $return_merchant_order_id = $event_data['metadata']['customer_id'];//卡网订单号
            $tradeid = $event_data['code'];//Coinbase订单号
            //if($return_status === 'confirmed'||$return_status === 'resolved')
            if(in_array(strtolower($payment['status']),$result_str)) {
                $this->orderProcessService->completedOrder($return_merchant_order_id, $order->actual_price, $tradeid);// 卡网订单号,订单金额(不能传入支付金额,否则抛出订单金额不一致异常),收款平台订单号
                return "{\"status\": 200}";
            } else {
                //不合法的数据
                return 'fail';
                //返回失败 继续补单
            }

        } else {
            //不合法的数据
            return 'fail|wrong sig';
            //返回失败 继续补单
        }


    }


}


================================================
FILE: app/Http/Controllers/Pay/EpusdtController.php
================================================
<?php
/**
 * The file was created by Assimon.
 *
 * @author    assimon<ashang@utf8.hk>
 * @copyright assimon<ashang@utf8.hk>
 * @link      http://utf8.hk/
 */

namespace App\Http\Controllers\Pay;


use App\Exceptions\RuleValidationException;
use App\Http\Controllers\PayController;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Http\Request;

class EpusdtController extends PayController
{
    public function gateway(string $payway, string $orderSN)
    {
        try {
            // 加载网关
            $this->loadGateWay($orderSN, $payway);
            //构造要请求的参数数组,无需改动
            $parameter = [
                "amount" => (float)$this->order->actual_price,//原价
                "order_id" => $this->order->order_sn, //可以是用户ID,站内商户订单号,用户名
                'redirect_url' => route('epusdt-return', ['order_id' => $this->order->order_sn]),
                'notify_url' => url($this->payGateway->pay_handleroute . '/notify_url'),
            ];
            $parameter['signature'] = $this->epusdtSign($parameter, $this->payGateway->merchant_id);
            $client = new Client([
                'headers' => [ 'Content-Type' => 'application/json' ]
            ]);
            $response = $client->post($this->payGateway->merchant_pem, ['body' => json_encode($parameter)]);
            $body = json_decode($response->getBody()->getContents(), true);
            if (!isset($body['status_code']) || $body['status_code'] != 200) {
                return $this->err(__('dujiaoka.prompt.abnormal_payment_channel') . $body['message']);
            }
            return redirect()->away($body['data']['payment_url']);
        } catch (RuleValidationException $exception) {
        } catch (GuzzleException $exception) {
            return $this->err($exception->getMessage());
        }
    }


    private function epusdtSign(array $parameter, string $signKey)
    {
        ksort($parameter);
        reset($parameter); //内部指针指向数组中的第一个元素
        $sign = '';
        $urls = '';
        foreach ($parameter as $key => $val) {
            if ($val == '') continue;
            if ($key != 'signature') {
                if ($sign != '') {
                    $sign .= "&";
                    $urls .= "&";
                }
                $sign .= "$key=$val"; //拼接为url参数形式
                $urls .= "$key=" . urlencode($val); //拼接为url参数形式
            }
        }
        $sign = md5($sign . $signKey);//密码追加进入开始MD5签名
        return $sign;
    }

    public function notifyUrl(Request $request)
    {
        $data = $request->all();
        $order = $this->orderService->detailOrderSN($data['order_id']);
        if (!$order) {
            return 'fail';
        }
        $payGateway = $this->payService->detail($order->pay_id);
        if (!$payGateway) {
            return 'fail';
        }
        if($payGateway->pay_handleroute != 'pay/epusdt'){
            return 'fail';
        }
        $signature = $this->epusdtSign($data, $payGateway->merchant_id);
        if ($data['signature'] != $signature) { //不合法的数据
            return 'fail';  //返回失败 继续补单
        } else {
            //合法的数据
            //业务处理
            $this->orderProcessService->completedOrder($data['order_id'], $data['amount'], $data['trade_id']);
            return 'ok';
        }
    }

    public function returnUrl(Request $request)
    {
        $oid = $request->get('order_id');
        // 异步通知还没到就跳转了,所以这里休眠2秒
        sleep(2);
        return redirect(url('detail-order-sn', ['orderSN' => $oid]));
    }

}


================================================
FILE: app/Http/Controllers/Pay/MapayController.php
================================================
<?php
namespace App\Http\Controllers\Pay;


use App\Exceptions\RuleValidationException;
use App\Http\Controllers\PayController;
use Illuminate\Http\Request;

class MapayController extends PayController
{

    public function gateway(string $payway, string $orderSN)
    {
        try {
            // 加载网关
            $this->loadGateWay($orderSN, $payway);
            //构造要请求的参数数组,无需改动
            $parameter = array(
                "id" => (int)$this->payGateway->merchant_id,//平台ID号
                "price" => (float)$this->order->actual_price,//原价
                "pay_id" => $this->order->order_sn, //可以是用户ID,站内商户订单号,用户名
                "param" => $this->payGateway->pay_check,//自定义参数
                "act" => 0,//是否开启认证版的免挂机功能
                "outTime" => 120,//二维码超时设置
                "page" => 1,//付款页面展示方式
                'return_url' => url('detail-order-sn', ['orderSN' => $this->order->order_sn]),
                'notify_url' => url($this->payGateway->pay_handleroute . '/notify_url'),
                "pay_type" => 0,//支付宝使用官方接口
                "chart" => 'utf-8'//字符编码方式
                //其他业务参数根据在线开发文档,添加参数.文档地址:https://codepay.fateqq.com/apiword/
                //如"参数名"=>"参数值"
            );
            switch ($payway){
                case 'mqq':
                    $parameter['type'] = 2;
                    break;
                case 'mzfb':
                    $parameter['type'] = 1;
                    break;
                case 'mwx':
                default:
                    $parameter['type'] = 3;
                    break;
            }
            $quri = md5_signquery($parameter, $this->payGateway->merchant_pem);
            $payurl = $this->payGateway->merchant_key . $quri; //支付页面
            return redirect()->away($payurl);
        } catch (RuleValidationException $exception) {
            return $this->err($exception->getMessage());
        }
    }


    public function notifyUrl(Request $request)
    {
        $data = $request->post();
        $order = $this->orderService->detailOrderSN($data['pay_id']);
        if (!$order) {
            return 'fail';
        }
        $payGateway = $this->payService->detail($order->pay_id);
        if (!$payGateway) {
            return 'fail';
        }
        if($payGateway->pay_handleroute != '/pay/mapay'){
            return 'fail';
        }
        $query = signquery_string($data);
        if (!$data['pay_no'] || md5($query . $payGateway->merchant_pem ) != $data['sign']) { //不合法的数据
            return 'fail';  //返回失败 继续补单
        } else { //合法的数据
            //业务处理
            $this->orderProcessService->completedOrder($data['pay_id'], $data['money'], $data['pay_id']);
            return 'success';
        }
    }




}




================================================
FILE: app/Http/Controllers/Pay/PayjsController.php
================================================
<?php
namespace App\Http\Controllers\Pay;

use App\Exceptions\RuleValidationException;
use App\Http\Controllers\PayController;
use Illuminate\Http\Request;
use Xhat\Payjs\Facades\Payjs;


class PayjsController extends PayController
{

    public function gateway(string $payway, string $orderSN)
    {
        try {
            // 加载网关
            $this->loadGateWay($orderSN, $payway);
            // 构造订单基础信息
            $data = [
                'body' => $this->order->order_sn,                                // 订单标题
                'total_fee' => bcmul($this->order->actual_price, 100, 0),    // 订单金额
                'out_trade_no' => $this->order->order_sn,                           // 订单号
                'notify_url' => url($this->payGateway->pay_handleroute . '/notify_url'),
            ];
            config(['payjs.mchid' => $this->payGateway->merchant_id, 'payjs.key' => $this->payGateway->merchant_pem]);
            switch ($payway){
                case 'payjswescan':
                    try{
                        $payres = Payjs::native($data);
                        if ($payres['return_code'] != 1) {
                            throw new RuleValidationException($payres['return_msg']);
                        }
                        $result['payname'] = $this->payGateway->pay_name;
                        $result['actual_price'] = (float)$this->order->actual_price;
                        $result['orderid'] = $this->order->order_sn;
                        $result['qr_code'] = $payres['code_url'];
                        return $this->render('static_pages/qrpay', $result, __('dujiaoka.scan_qrcode_to_pay'));
                    } catch (\Exception $e) {
                        throw new RuleValidationException(__('dujiaoka.prompt.abnormal_payment_channel') . $e->getMessage());
                    }
                    break;
            }
        } catch (RuleValidationException $exception) {
            return $this->err($exception->getMessage());
        }
    }


    public function notifyUrl(Request $request)
    {
        $orderSN = $request->input('out_trade_no');
        $order = $this->orderService->detailOrderSN($orderSN);
        if (!$order) {
            return 'error';
        }
        $payGateway = $this->payService->detail($order->pay_id);
        if (!$payGateway) {
            return 'error';
        }
        if($payGateway->pay_handleroute != '/pay/payjs'){
            return 'fail';
        }
        config(['payjs.mchid' => $payGateway->merchant_id, 'payjs.key' => $payGateway->merchant_pem]);
        $notify_info = Payjs::notify();
        $totalFee = bcdiv($notify_info['total_fee'], 100, 2);
        $this->orderProcessService->completedOrder($notify_info['out_trade_no'], $totalFee, $notify_info['payjs_order_id']);
        return 'success';
    }

}


================================================
FILE: app/Http/Controllers/Pay/PaypalPayController.php
================================================
<?php

namespace App\Http\Controllers\Pay;


use AmrShawky\LaravelCurrency\Facade\Currency;
use App\Exceptions\RuleValidationException;
use App\Http\Controllers\PayController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use PayPal\Api\Amount;
use PayPal\Api\Details;
use PayPal\Api\Item;
use PayPal\Api\ItemList;
use PayPal\Api\Payer;
use PayPal\Api\Payment;
use PayPal\Api\PaymentExecution;
use PayPal\Api\RedirectUrls;
use PayPal\Api\Transaction;
use PayPal\Auth\OAuthTokenCredential;
use PayPal\Exception\PayPalConnectionException;
use PayPal\Rest\ApiContext;

class PaypalPayController extends PayController
{

    const Currency = 'USD'; //货币单位

    public function gateway(string $payway, string $orderSN)
    {
        try {
            // 加载网关
            $this->loadGateWay($orderSN, $payway);
            $paypal = new ApiContext(
                new OAuthTokenCredential(
                    $this->payGateway->merchant_key,
                    $this->payGateway->merchant_pem
                )
            );
            $paypal->setConfig(['mode' => 'live']);
            $product = $this->order->title;
            // 得到汇率
            $total = Currency::convert()
                ->from('CNY')
                ->to('USD')
                ->amount($this->order->actual_price)
                ->round(2)
                ->get();
            $shipping = 0;
            $description = $this->order->title;
            $payer = new Payer();
            $payer->setPaymentMethod('paypal');
            $item = new Item();
            $item->setName($product)->setCurrency(self::Currency)->setQuantity(1)->setPrice($total);
            $itemList = new ItemList();
            $itemList->setItems([$item]);
            $details = new Details();
            $details->setShipping($shipping)->setSubtotal($total);
            $amount = new Amount();
            $amount->setCurrency(self::Currency)->setTotal($total)->setDetails($details);
            $transaction = new Transaction();
            $transaction->setAmount($amount)->setItemList($itemList)->setDescription($description)->setInvoiceNumber($this->order->order_sn);
            $redirectUrls = new RedirectUrls();
            $redirectUrls->setReturnUrl(route('paypal-return', ['success' => 'ok', 'orderSN' => $this->order->order_sn]))->setCancelUrl(route('paypal-return', ['success' => 'no', 'orderSN' => $this->order->order_sn]));
            $payment = new Payment();
            $payment->setIntent('sale')->setPayer($payer)->setRedirectUrls($redirectUrls)->setTransactions([$transaction]);
            $payment->create($paypal);
            $approvalUrl = $payment->getApprovalLink();
            return redirect($approvalUrl);
        } catch (PayPalConnectionException $payPalConnectionException) {
            return $this->err($payPalConnectionException->getMessage());
        } catch (RuleValidationException $exception) {
            return $this->err($exception->getMessage());
        }
    }

    /**
     *paypal 同步回调
     */
    public function returnUrl(Request $request)
    {
        $success = $request->input('success');
        $paymentId =  $request->input('paymentId');
        $payerID =  $request->input('PayerID');
        $orderSN = $request->input('orderSN');
        if ($success == 'no' || empty($paymentId) || empty($payerID)) {
            // 取消支付
            redirect(url('detail-order-sn', ['orderSN' => $payerID]));
        }
        $order = $this->orderService->detailOrderSN($orderSN);
        if (!$order) {
            return 'error';
        }
        $payGateway = $this->payService->detail($order->pay_id);
        if (!$payGateway) {
            return 'error';
        }
        if($payGateway->pay_handleroute != '/pay/paypal'){
            return 'error';
        }
        $paypal = new ApiContext(
            new OAuthTokenCredential(
                $payGateway->merchant_key,
                $payGateway->merchant_pem
            )
        );
        $paypal->setConfig(['mode' => 'live']);
        $payment = Payment::get($paymentId, $paypal);
        $execute = new PaymentExecution();
        $execute->setPayerId($payerID);
        try {
            $payment->execute($execute, $paypal);
            $this->orderProcessService->completedOrder($orderSN, $order->actual_price, $paymentId);
            Log::info("paypal支付成功",  ['支付成功,支付ID【' . $paymentId . '】,支付人ID【' . $payerID . '】']);
        } catch (\Exception $e) {
            Log::error("paypal支付失败", ['支付失败,支付ID【' . $paymentId . '】,支付人ID【' . $payerID . '】']);
        }
        return redirect(url('detail-order-sn', ['orderSN' => $orderSN]));
    }


    /**
     * 异步通知
     * TODO: 暂未实现,但是好像只实现同步回调即可。这个可以放在后面实现
     */
    public function notifyUrl(Request $request)
    {
        //获取回调结果
        $json_data = $this->get_JsonData();
        if(!empty($json_data)){
            Log::debug("paypal notify info:\r\n" . json_encode($json_data));
        }else{
            Log::debug("paypal notify fail:参加为空");
        }

    }

    private function get_JsonData()
    {
        $json = file_get_contents('php://input');
        if ($json) {
            $json = str_replace("'", '', $json);
            $json = json_decode($json,true);
        }
        return $json;
    }

}


================================================
FILE: app/Http/Controllers/Pay/PaysapiController.php
================================================
<?php
namespace App\Http\Controllers\Pay;


use App\Exceptions\RuleValidationException;
use App\Http\Controllers\PayController;
use Illuminate\Http\Request;

class PaysapiController extends PayController
{

    const PAY_URI = 'https://pay.bearsoftware.net.cn/';

    public function gateway(string $payway, string $orderSN)
    {
        try {
            // 加载网关
            $this->loadGateWay($orderSN, $payway);
            //从网页传入price:支付价格, istype:支付渠道:1-支付宝;2-微信支付
            $price = (float)$this->order->actual_price;
            $orderuid = $this->order->email;       //此处传入您网站用户的用户名,方便在paysapi后台查看是谁付的款,强烈建议加上。可忽略。
            //校验传入的表单,确保价格为正常价格(整数,1位小数,2位小数都可以),支付渠道只能是1或者2,orderuid长度不要超过33个中英文字。
            //此处就在您服务器生成新订单,并把创建的订单号传入到下面的orderid中。
            $goodsname = $this->order->order_sn;
            $orderid = $this->order->order_sn;    //每次有任何参数变化,订单号就变一个吧。
            $uid = $this->payGateway->merchant_id; //"此处填写PaysApi的uid";
            $token = $this->payGateway->merchant_pem; //"此处填写PaysApi的Token";
            $return_url = route('paysapi-return', ['order_id' => $this->order->order_sn]);
            $notify_url = url($this->payGateway->pay_handleroute . '/notify_url');
            switch ($payway){
                case 'pszfb':
                    $istype = 1;
                    break;
                case 'pswx':
                default:
                $istype = 2;
                    break;
            }
            $key = md5($goodsname. $istype . $notify_url . $orderid . $orderuid . $price . $return_url . $token . $uid);
            //经常遇到有研发问为啥key值返回错误,大多数原因:1.参数的排列顺序不对;2.上面的参数少传了,但是这里的key值又带进去计算了,导致服务端key算出来和你的不一样。
            $html = "
                <html><head>
                    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">
                    <title>loading pay...</title>
                    <style type=\"text/css\">
                        body {margin:0;padding:0;}
                        p {position:absolute;
                            left:50%;top:50%;
                            width:330px;height:30px;
                            margin:-35px 0 0 -160px;
                            padding:20px;font:bold 14px/30px \"宋体\", Arial;
                            text-indent:22px;border:1px solid #c5d0dc;}
                        #waiting {font-family:Arial;}
                    </style>
                <script>
                function open_without_referrer(link){
                document.body.appendChild(document.createElement('iframe')).src='javascript:\"<script>top.location.replace(\''+link+'\')<\/script>\"';
                }
                </script>
                </head>
                <body style=\"\">
                <form id=\"alipaysubmit\" name=\"alipaysubmit\" action=\"".self::PAY_URI."\" method=\"post\">
                <input type=\"hidden\" name=\"goodsname\" value=\"".$goodsname."\">
                <input type=\"hidden\" name=\"istype\" value=\"".$istype."\">
                <input type=\"hidden\" name=\"key\" value=\"".$key."\">
                <input type=\"hidden\" name=\"notify_url\" value=\"".$notify_url."\">
                <input type=\"hidden\" name=\"orderid\" value=\"".$orderid."\">
                <input type=\"hidden\" name=\"orderuid\" value=\"".$orderuid."\">
                <input type=\"hidden\" name=\"price\" value=\"".$price."\">
                <input type=\"hidden\" name=\"return_url\" value=\"".$return_url."\">
                <input type=\"hidden\" name=\"uid\" value=\"".$uid."\">
                <input type=\"submit\" value=\"正在跳转\">
                </form><script>document.forms['alipaysubmit'].submit();</script></body></html>
                ";
            return $html;
        } catch (RuleValidationException $exception) {
            return $this->err($exception->getMessage());
        }
    }

    public function notifyUrl(Request $request)
    {
        $data = $request->post();
        $order = $this->orderService->detailOrderSN($data['orderid']);
        if (!$order) {
            return 'error';
        }
        $payGateway = $this->payService->detail($order->pay_id);
        if (!$payGateway) {
            return 'error';
        }
        if($payGateway->pay_handleroute != '/pay/paysapi'){
            return 'error';
        }
        $temps = md5($data['orderid'] . $data['orderuid'] . $data['paysapi_id'] . $data['price'] . $data['realprice'] . $payGateway->merchant_pem);
        if ($temps != $data['key']){
            return 'fail';
        }else{
            //校验key成功,是自己人。执行自己的业务逻辑:加余额,订单付款成功,装备购买成功等等。
            //业务处理
            $this->orderProcessService->completedOrder($data['orderid'], $data['price'], $data['paysapi_id']);
            return 'success';
        }
    }

    public function returnUrl(Request $request)
    {
        $oid = $request->input('order_id');
        sleep(1);
        return redirect(url('detail-order-sn', ['orderSN' => $oid]));
    }

}


================================================
FILE: app/Http/Controllers/Pay/StripeController.php
================================================
<?php

namespace App\Http\Controllers\Pay;

use App\Exceptions\RuleValidationException;
use App\Http\Controllers\PayController;
use Illuminate\Http\Request;
use GuzzleHttp\Client;
use Illuminate\Support\Facades\Redis;
use URL;

class StripeController extends PayController
{

    public function gateway(string $payway, string $orderSN)
    {


        // 加载网关
        $this->loadGateWay($orderSN, $payway);
        //构造要请求的参数数组,无需改动
        switch ($payway) {
            case 'wx':
            case 'alipay':
            default:
                try {
                    \Stripe\Stripe::setApiKey($this->payGateway->merchant_id);
                    $amount = bcmul($this->order->actual_price, 100, 2);
                    $price = $this->order->actual_price;
                    $usd = bcmul($this->getUsdCurrency($this->order->actual_price), 100, 2);
                    $orderid = $this->order->order_sn;
                    $pk = $this->payGateway->merchant_id;
                    $return_url = site_url() . $this->payGateway->pay_handleroute . '/return_url/?orderid=' . $this->order->order_sn;
                    $html = "<html class=\"js cssanimations\">
<head lang=\"en\">
    <meta charset=\"UTF-8\">
    <title>收银台</title>
    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">
    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">
    <meta name=\"format-detection\" content=\"telephone=no\">
    <meta name=\"renderer\" content=\"webkit\">
    <meta http-equiv=\"Cache-Control\" content=\"no-siteapp\">
    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/amazeui@2.7.2/dist/css/amazeui.min.css\">
    <script src=\"https://cdn.jsdelivr.net/npm/jquery@2.1.4/dist/jquery.min.js\"></script>
    <script src=\"https://cdn.jsdelivr.net/npm/jquery.qrcode@1.0.3/jquery.qrcode.min.js\"></script>
    <script src=\"https://cdn.jsdelivr.net/npm/amazeui@2.7.2/dist/js/amazeui.min.js\"></script>
    <script src=\"https://js.stripe.com/v3/\"></script>
    <style>
        @media only screen and (min-width: 641px) {
            .am-offcanvas {
                display: block;
                position: static;
                background: none;
            }

            .am-offcanvas-bar {
                position: static;
                width: auto;
                background: none;
                -webkit-transform: translate3d(0, 0, 0);
                -ms-transform: translate3d(0, 0, 0);
                transform: translate3d(0, 0, 0);
            }

            .am-offcanvas-bar:after {
                content: none;
            }
        }

        @media only screen and (max-width: 640px) {
            .am-offcanvas-bar .am-nav > li > a {
                color: #ccc;
                border-radius: 0;
                border-top: 1px solid rgba(0, 0, 0, .3);
                box-shadow: inset 0 1px 0 rgba(255, 255, 255, .05)
            }

            .am-offcanvas-bar .am-nav > li > a:hover {
                background: #404040;
                color: #fff
            }

            .am-offcanvas-bar .am-nav > li.am-nav-header {
                color: #777;
                background: #404040;
                box-shadow: inset 0 1px 0 rgba(255, 255, 255, .05);
                text-shadow: 0 1px 0 rgba(0, 0, 0, .5);
                border-top: 1px solid rgba(0, 0, 0, .3);
                font-weight: 400;
                font-size: 75%
            }

            .am-offcanvas-bar .am-nav > li.am-active > a {
                background: #1a1a1a;
                color: #fff;
                box-shadow: inset 0 1px 3px rgba(0, 0, 0, .3)
            }

            .am-offcanvas-bar .am-nav > li + li {
                margin-top: 0;
            }
        }

        .my-head {
            margin-top: 40px;
            text-align: center;
        }

        .am-tab-panel {
            text-align: center;
            margin-top: 50px;
            margin-bottom: 50px;
        }

        .my-footer {
            border-top: 1px solid #eeeeee;
            padding: 10px 0;
            margin-top: 10px;
            text-align: center;
        }

        .panel-title {
            display: inline;
            font-weight: bold;
        }

        .display-table {
            display: table;
        }

        .display-tr {
            display: table-row;
        }

        .display-td {
            display: table-cell;
            vertical-align: middle;
            width: 61%;
        }

        .StripeElement {
            box-sizing: border-box;

            height: 40px;

            padding: 10px 12px;

            border: 1px solid transparent;
            border-radius: 4px;
            background-color: white;

            box-shadow: 0 1px 3px 0 #e6ebf1;
            -webkit-transition: box-shadow 150ms ease;
            transition: box-shadow 150ms ease;
        }

        .StripeElement--focus {
            box-shadow: 0 1px 3px 0 #cfd7df;
        }

        .StripeElement--invalid {
            border-color: #fa755a;
        }

        .StripeElement--webkit-autofill {
            background-color: #fefde5 !important;
        }
        .form-row {
            width: 70%;
            float: left;
        }
        .wrapper {
            width: 670px;
            margin: 0 auto;
        }
        label {
            font-weight: 500;
            font-size: 14px;
            display: block;
            margin-bottom: 8px;
        }
        .button {
            border: none;
            border-radius: 4px;
            outline: none;
            text-decoration: none;
            color: #fff;
            background: #32325d;
            white-space: nowrap;
            display: inline-block;
            height: 40px;
            line-height: 40px;
            padding: 0 14px;
            box-shadow: 0 4px 6px rgba(50, 50, 93, .11), 0 1px 3px rgba(0, 0, 0, .08);
            border-radius: 4px;
            font-size: 16px;
            font-weight: 600;
            letter-spacing: 0.025em;
            text-decoration: none;
            -webkit-transition: all 150ms ease;
            transition: all 150ms ease;
            margin-top: 10px;
        }
    </style>
</head>
<body>
<header class=\"am-g my-head\">
    <div class=\"am-u-sm-12 am-article\">
        <h1 class=\"am-article-title\">收银台</h1>
    </div>
</header>
<hr class=\"am-article-divider\">
<div class=\"am-container\">
    <h2>付款信息
        <div class=\"am-topbar-right\">¥{$price}</div>
    </h2>
    <p><small>订单编号:$orderid</small></p>
    <div class=\"am-tabs\" data-am-tabs=\"\">
        <ul class=\"am-tabs-nav am-nav am-nav-tabs\">
            <li class=\"am-active\"><a href=\"#alipay\">Alipay 支付宝</a></li>
            <li class=\"request-wechat-pay\"><a href=\"#wcpay\">微信支付</a></li>
            <li class=\"request-card-pay\"><a href=\"#cardpay\">银行卡支付</a></li>
        </ul>
        <div class=\"am-tabs-bd am-tabs-bd-ofv\"
             style=\"touch-action: pan-y; user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\">
            <div class=\"am-tab-panel am-active\" id=\"alipay\">
                <a class=\"am-btn am-btn-lg am-btn-warning am-btn-primary\" id=\"alipaybtn\" href=\"#\">进入支付宝付款</a>
                <p></p>
            </div>
            <div class=\"am-tab-panel am-fade\" id=\"wcpay\">
                <div class=\"text-align:center; margin:0 auto; width:60%\">
                    <div class=\"wcpay-qrcode\" style=\"text-align: center; \" data-requested=\"0\">
                        正在加载中...
                    </div>
                </div>
            </div>
            <div class=\"am-tab-panel am-fade\" id=\"cardpay\">
                <div class=\"text-align:center; margin:0 auto; width:60%\">
                <div class=\"wrapper cardpay_content\" style=\"max-width:500px\">
                <div class=\"am-alert am-alert-danger\" style=\"display:none\">支付失败,请更换卡片或检查输入信息</div>
                    <form action=\"/pay/stripe/charge\" method=\"post\" id=\"payment-form\">
                        <div class=\"form-row\">
                            <label for=\"card-element\">
                                <p class='am-alert am-alert-secondary'>借记卡或信用卡</p>
                            </label>
                            <div id=\"card-element\">
                                <!-- A Stripe Element will be inserted here. -->
                            </div>
                            <!-- Used to display form errors. -->
                            <div id=\"card-errors\" role=\"alert\"></div>
                        </div>
                            <div class=\"form-row\">
                            <button class=\"button\">支付</button>
                        </div>

                    </form>
                </div>
                 </div>
            </div>
        </div>
    </div>
</div>
</div>
<script>
    var stripe = Stripe('$pk');
    var source = '';
    // Create a Stripe client.

    // Create an instance of Elements.
    var elements = stripe.elements();

    // Custom styling can be passed to options when creating an Element.
    // (Note that this demo uses a wider set of styles than the guide below.)
    var style = {
        base: {
            color: '#32325d',
            fontFamily: '\"Helvetica Neue\", Helvetica, sans-serif',
            fontSmoothing: 'antialiased',
            fontSize: '16px',
            '::placeholder': {
                color: '#aab7c4'
            }
        },
        invalid: {
            color: '#fa755a',
            iconColor: '#fa755a'
        }
    };

    // Create an instance of the card Element.
    var card = elements.create('card', {style: style});

    // Add an instance of the card Element into the `card-element` <div>.
    card.mount('#card-element');

    // Handle real-time validation errors from the card Element.
    card.on('change', function (event) {
        var displayError = document.getElementById('card-errors');
        if (event.error) {
            displayError.textContent = event.error.message;
        } else {
            displayError.textContent = '';
        }
    });

    // Handle form submission.
    var form = document.getElementById('payment-form');
    form.addEventListener('submit', function (event) {
        event.preventDefault();
        $(\".button\").attr(\"disabled\",\"true\");
        $(\".button\").html(\"请稍后\");
        stripe.createToken(card).then(function (result) {
            if (result.error) {
                // Inform the user if there was an error.
                var errorElement = document.getElementById('card-errors');
                errorElement.textContent = result.error.message;
            } else {
                // Send the token to your server.
                stripeTokenHandler(result.token);
            }
        });
    });

    // Submit the form with the token ID.
    function stripeTokenHandler(token) {
        // Insert the token ID into the form so it gets submitted to the server
        var form = document.getElementById('payment-form');
        var hiddenInput = document.createElement('input');
        var hiddenInput1 = document.createElement('input');
        hiddenInput.setAttribute('type', 'hidden');
        hiddenInput.setAttribute('name', 'stripeToken');
        hiddenInput.setAttribute('value', token.id);
        hiddenInput1.setAttribute('type', 'hidden');
        hiddenInput1.setAttribute('name', 'orderid');
        hiddenInput1.setAttribute('value', '$orderid');
        form.appendChild(hiddenInput);
        form.appendChild(hiddenInput1);
        // Submit the form
        //form.submit();
        $.ajax({
            url: '/pay/stripe/charge/?orderid=$orderid&stripeToken=' + token.id,
            type: 'GET',
            success: function (result) {
                if (result == \"success\") {
                    $(\".cardpay_content\").html(\"\");
                    $(\".cardpay_content\").html(\"<p class='am-alert am-alert-success'>支付成功,正在跳转页面</p>\");
                    window.setTimeout(function () {
                        location.href = \"/detail-order-sn/$orderid\"
                    }, 800);
                } else {
                    $(\".am-alert\").show();
                    $(\".button\").removeAttr(\"disabled\");
                    $(\".button\").html(\"支付\");
                    setTimeout(\" $('.am-alert').hide();\", 3000);
                }
            }
        });
    }

    (function () {
        stripe.createSource({
            type: 'alipay',
            amount: $amount,
            currency: 'cny',
            // 这里你需要渲染出一些用户的信息,不然后期没法知道是谁在付钱
            owner: {
                name: '$orderid',
            },
            redirect: {
                return_url: '$return_url',
            },
        }).then(function (result) {
            $(\"#alipaybtn\").attr(\"href\", result.source.redirect.url);
        });
    })();

    function paymentcheck() {
        $.ajax({
            url: '/pay/stripe/check/?orderid=$orderid&source=' + source,
            type: 'GET',
            success: function (result) {
                if (result == \"success\") {
                    $(\".wcpay-qrcode\").html(\"\");
                    $(\".wcpay-qrcode\").html(\"<p class='am-alert am-alert-success'>支付成功,正在跳转页面</p>\");
                    window.setTimeout(function () {
                        location.href = \"/detail-order-sn/$orderid\"
                    }, 800);
                } else {
                    setTimeout(\"paymentcheck()\", 1000);
                }
            }
        });
    }

    $(\".request-wechat-pay\").click(function () {
        if ($(\".wcpay-qrcode\").data(\"requested\") == 0) {
            stripe.createSource({
                type: 'wechat',
                amount: $usd,
                currency: 'usd',
                owner: {
                    name: '$orderid'
                },
            }).then(function (result) {
                if (result.source.id) {
                    $(\".wcpay-qrcode\").html(\"<p class='am-alert am-alert-success'>打开微信 - 扫一扫</p>\");
                    $(\".wcpay-qrcode\").qrcode(result.source.wechat.qr_code_url);
                    $(\".wcpay-qrcode\").data(\"requested\", 1);
                    $(\".wcpay-qrcode\").data(\"sid\", result.source.id);
                    $(\".wcpay-qrcode\").data(\"scs\", result.source.client_secret);
                    source = result.source.id;
                    setTimeout(\"paymentcheck()\", 3000);
                } else {
                    alert(\"微信支付加载失败\");
                    $(\".wcpay-qrcode\").html(\"<p class='am-alert am-alert-danger'>加载失败,请刷新页面。</p>\");
                }
                // handle result.error or result.source
            });
        }
    });
</script>
</body>
</html>";

                    return $html;
                } catch (\Exception $e) {
                    throw new RuleValidationException(__('dujiaoka.prompt.abnormal_payment_channel') . $e->getMessage());
                }
                break;
        }
    }

    public function returnUrl(Request $request)
    {

        $data = $request->all();
        $cacheord = $this->orderService->detailOrderSN($data['orderid']);
        if (!$cacheord) {
            return redirect(url('detail-order-sn', ['orderSN' => $data['orderid']]));
        }
        $payGateway = $this->payService->detail($cacheord->pay_id);
        \Stripe\Stripe::setApiKey($payGateway -> merchant_pem);
        $source_object = \Stripe\Source::retrieve($data['source']);
        //die($source_object);
        if ($source_object->status == 'chargeable') {
            \Stripe\Charge::create([
                'amount' => $source_object->amount,
                'currency' => $source_object->currency,
                'source' => $data['source'],
            ]);
            if ($source_object->owner->name == $data['orderid']) {
                $this->orderProcessService->completedOrder($data['orderid'], $source_object->amount / 100, $source_object->id);
            }
        }
        return redirect(url('detail-order-sn', ['orderSN' => $data['orderid']]));
    }

    public function check(Request $request)
    {

        $data = $request->all();
        $cacheord = $this->orderService->detailOrderSN($data['orderid']);
        if (!$cacheord) {
            //可能已异步回调成功,跳转
            return 'fail';
        } else {
            $payGateway = $this->payService->detail($cacheord->pay_id);
            \Stripe\Stripe::setApiKey($payGateway -> merchant_pem);
            $source_object = \Stripe\Source::retrieve($data['source']);
            if ($source_object->status == 'chargeable') {
                \Stripe\Charge::create([
                    'amount' => $source_object->amount,
                    'currency' => $source_object->currency,
                    'source' => $data['source'],
                ]);
            }
            if ($source_object->status == 'consumed' && $source_object->owner->name == $data['orderid']) {
                $this->orderProcessService->completedOrder($data['orderid'], $cacheord->actual_price, $source_object->id);
                return 'success';
            } else {
                return 'fail';
            }
        }

    }

    public function charge(Request $request)
    {
        $data = $request->all();
        $cacheord = $this->orderService->detailOrderSN($data['orderid']);
        if (!$cacheord) {
            //可能已异步回调成功,跳转
            return 'fail';
        } else {
            try {
                $payGateway = $this->payService->detail($cacheord->pay_id);
                \Stripe\Stripe::setApiKey($payGateway -> merchant_pem);
                $result = \Stripe\Charge::create([
                    'amount' => bcmul($this->getUsdCurrency($cacheord->actual_price), 100,0),
                    'currency' => 'usd',
                    'source' => $data['stripeToken'],
                ]);
                if ($result->status == 'succeeded') {
                    $this->orderProcessService->completedOrder($data['orderid'], $cacheord->actual_price, $data['stripeToken']);
                    return 'success';
                }
                return $result;
            } catch (\Exception $e) {
                return $e->getMessage();
            }
        }
    }

    /**
     * 根据RMB获取美元
     * @param $cny
     * @return float|int
     * @throws \Exception
     */
    public function getUsdCurrency($cny)
    {
        $client = new Client();
        $res = $client->get('https://m.cmbchina.com/api/rate/fx-rate');
        $fxrate = json_decode($res->getBody(), true);
        $data = $fxrate['body']['data'];
        if (!isset($data)) {
            throw new \Exception('汇率接口异常');
        }
        $dfFxrate = 0.13;
        foreach ($data as $item) {
            if ($item['ccyNbr'] == "美元") {
                $dfFxrate = bcdiv(100, $item['rtcOfr'], 2);
                break;
            }
        }
        return bcmul($cny , $dfFxrate , 2);
    }


}


================================================
FILE: app/Http/Controllers/Pay/TokenPayController.php
================================================
<?php
/**
 * The file was created by LightCountry.
 *
 * @author    https://github.com/LightCountry
 * @copyright https://github.com/LightCountry
 * @link      https://github.com/LightCountry/TokenPay
 */

namespace App\Http\Controllers\Pay;


use App\Exceptions\RuleValidationException;
use App\Http\Controllers\PayController;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Http\Request;

class TokenPayController extends PayController
{
    public function gateway(string $payway, string $orderSN)
    {
        try {
            // 加载网关
            $this->loadGateWay($orderSN, $payway);
            //构造要请求的参数数组,无需改动
            $parameter = [
                "ActualAmount" => (float)$this->order->actual_price,//原价
                "OutOrderId" => $this->order->order_sn, 
                "OrderUserKey" => $this->order->email, 
                "Currency" => $this->payGateway->merchant_id,
                'RedirectUrl' => route('tokenpay-return', ['order_id' => $this->order->order_sn]),
                'NotifyUrl' => url($this->payGateway->pay_handleroute . '/notify_url'),
            ];
            $parameter['Signature'] = $this->VerifySign($parameter, $this->payGateway->merchant_key);
            $client = new Client([
				'headers' => [ 'Content-Type' => 'application/json' ]
			]);
            $response = $client->post($this->payGateway->merchant_pem.'/CreateOrder', ['body' =>  json_encode($parameter)]);
            $body = json_decode($response->getBody()->getContents(), true);
            if (!isset($body['success']) || $body['success'] != true) {
                return $this->err(__('dujiaoka.prompt.abnormal_payment_channel') . $body['message']);
            }
            return redirect()->away($body['data']);
        } catch (RuleValidationException $exception) {
        } catch (GuzzleException $exception) {
            return $this->err($exception->getMessage());
        }
    }

    private function VerifySign(array $parameter, string $signKey)
    {
        ksort($parameter);
        reset($parameter); //内部指针指向数组中的第一个元素
        $sign = '';
        $urls = '';
        foreach ($parameter as $key => $val) {
            if ($key != 'Signature') {
                if ($sign != '') {
                    $sign .= "&";
                    $urls .= "&";
                }
                $sign .= "$key=$val"; //拼接为url参数形式
                $urls .= "$key=" . urlencode($val); //拼接为url参数形式
            }
        }
        $sign = md5($sign . $signKey);//密码追加进入开始MD5签名
        return $sign;
    }

    public function notifyUrl(Request $request)
    {
        $data = $request->all();
        $order = $this->orderService->detailOrderSN($data['OutOrderId']);
        if (!$order) {
            return 'fail';
        }
        $payGateway = $this->payService->detail($order->pay_id);
        if (!$payGateway) {
            return 'fail';
        }
        if($payGateway->pay_handleroute != 'pay/tokenpay'){
            return 'fail';
        }
        //合法的数据
		$signature = $this->VerifySign($data, $payGateway->merchant_key);
        if ($data['Signature'] != $signature) { //不合法的数据
            return 'fail';  //返回失败 继续补单
        } else {
            //合法的数据
            //业务处理
            $this->orderProcessService->completedOrder($data['OutOrderId'], $data['ActualAmount'], $data['Id']);
            return 'ok';
        }
    }

    public function returnUrl(Request $request)
    {
        $oid = $request->get('order_id');
        // 异步通知还没到就跳转了,所以这里休眠2秒
        sleep(2);
        return redirect(url('detail-order-sn', ['orderSN' => $oid]));
    }

}


================================================
FILE: app/Http/Controllers/Pay/VpayController.php
================================================
<?php
/**
 * VpayController.php
 * V免签
 * Author iLay1678
 * Created on 2020/5/1 11:59
 */

namespace App\Http\Controllers\Pay;

use App\Exceptions\RuleValidationException;
use App\Http\Controllers\PayController;
use Illuminate\Http\Request;

class VpayController extends PayController
{


    public function gateway(string $payway, string $orderSN)
    {
        try {
            // 加载网关
            $this->loadGateWay($orderSN, $payway);

            //构造要请求的参数数组,无需改动
            $parameter = array(
                "payId" => date('YmdHis') . rand(1, 65535),//平台ID号
                "price" => (float)$this->order->actual_price,//原价
                'param' => $this->order->order_sn,
                'returnUrl' => route('vpay-return', ['order_id' => $this->order->order_sn]),
                'notifyUrl' => url($this->payGateway->pay_handleroute . '/notify_url'),
                "isHtml" => 1,
            );
            switch ($payway) {
                case 'vzfb':
                    $parameter['type'] = 2;
                    break;
                case 'vwx':
                default:
                    $parameter['type'] = 1;
                    break;
            }
            $parameter['sign'] = md5($parameter['payId'] . $parameter['param'] . $parameter['type'] . $parameter['price'] . $this->payGateway->merchant_id);
            $payurl = $this->payGateway->merchant_pem . 'createOrder?' . http_build_query($parameter); //支付页面
            return redirect()->away($payurl);
        } catch (RuleValidationException $exception) {
            return $this->err($exception->getMessage());
        }
    }


    public function notifyUrl(Request $request)
    {
        $data = $request->all();
        $order = $this->orderService->detailOrderSN($data['param']);
        if (!$order) {
            return 'fail';
        }
        $payGateway = $this->payService->detail($order->pay_id);

        if($payGateway->pay_handleroute != 'pay/vpay'){
            return 'fail';
        }
        if (!$payGateway) {
            return 'fail';
        }

        $key = $payGateway->merchant_id;//通讯密钥
        $payId = $data['payId'];//商户订单号
        $param = $data['param'];//创建订单的时候传入的参数
        $type = $data['type'];//支付方式 :微信支付为1 支付宝支付为2
        $price = $data['price'];//订单金额
        $reallyPrice = $data['reallyPrice'];//实际支付金额
        $sign = $data['sign'];//校验签名,计算方式 = md5(payId + param + type + price + reallyPrice + 通讯密钥)
        //开始校验签名
        $_sign = md5($payId . $param . $type . $price . $reallyPrice . $key);
        if ($_sign != $sign) { //不合法的数据
            return 'fail';  //返回失败 继续补单
        } else { //合法的数据
            //业务处理
            $this->orderProcessService->completedOrder($param, $price, $payId);
            return 'success';
        }
    }

    public function returnUrl(Request $request)
    {
        $oid = $request->get('order_id');
        // 异步通知还没到就跳转了,所以这里休眠2秒
        sleep(2);
        return redirect(url('detail-order-sn', ['orderSN' => $oid]));
    }

}


================================================
FILE: app/Http/Controllers/Pay/WepayController.php
================================================
<?php
namespace App\Http\Controllers\Pay;


use App\Exceptions\RuleValidationException;
use App\Http\Controllers\PayController;
use Yansongda\Pay\Pay;

class WepayController extends PayController
{

    public function gateway(string $payway, string $orderSN)
    {
        try {
            // 加载网关
            $this->loadGateWay($orderSN, $payway);
            $config = [
                'app_id' => $this->payGateway->merchant_id,
                'mch_id' => $this->payGateway->merchant_key,
                'key' => $this->payGateway->merchant_pem,
                'notify_url' => url($this->payGateway->pay_handleroute . '/notify_url'),
                'return_url' => url('detail-order-sn', ['orderSN' => $this->order->order_sn]),
                'http' => [ // optional
                    'timeout' => 10.0,
                    'connect_timeout' => 10.0,
                ],
            ];
            $order = [
                'out_trade_no' => $this->order->order_sn,
                'total_fee' => bcmul($this->order->actual_price, 100, 0),
                'body' => $this->order->order_sn
            ];
            switch ($payway){
                case 'wescan':
                    try{
                        $result = Pay::wechat($config)->scan($order)->toArray();
                        $result['qr_code'] = $result['code_url'];
                        $result['payname'] =$this->payGateway->pay_name;
                        $result['actual_price'] = (float)$this->order->actual_price;
                        $result['orderid'] = $this->order->order_sn;
                        return $this->render('static_pages/qrpay', $result, __('dujiaoka.scan_qrcode_to_pay'));
                    } catch (\Exception $e) {
                        throw new RuleValidationException(__('dujiaoka.prompt.abnormal_payment_channel') . $e->getMessage());
                    }
                    break;

            }
        } catch (RuleValidationException $exception) {
            return $this->err($exception->getMessage());
        }
    }

    /**
     * 异步通知
     */
    public function notifyUrl()
    {
        $xml = file_get_contents('php://input');
        $arr = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
        $oid = $arr['out_trade_no'];
        $order = $this->orderService->detailOrderSN($oid);
        if (!$order) {
            return 'error';
        }
        $payGateway = $this->payService->detail($order->pay_id);
        if (!$payGateway) {
            return 'error';
        }
        if($payGateway->pay_handleroute != '/pay/wepay'){
            return 'error';
        }
        $config = [
            'app_id' => $payGateway->merchant_id,
            'mch_id' => $payGateway->merchant_key,
            'key' => $payGateway->merchant_pem,
        ];
        $pay = Pay::wechat($config);
        try{
            // 验证签名
            $result = $pay->verify();
            $total_fee = bcdiv($result->total_fee, 100, 2);
            $this->orderProcessService->completedOrder($result->out_trade_no, $total_fee, $result->transaction_id);
            return 'success';
        } catch (\Exception $exception) {
            return 'fail';
        }
    }

}


================================================
FILE: app/Http/Controllers/Pay/YipayController.php
================================================
<?php
namespace App\Http\Controllers\Pay;

use App\Exceptions\RuleValidationException;
use App\Http\Controllers\PayController;
use Illuminate\Http\Request;

class YipayController extends PayController
{

    public function gateway(string $payway, string $orderSN)
    {
        try {
            // 加载网关
            $this->loadGateWay($orderSN, $payway);
            //组装支付参数
            $parameter = [
                'pid' =>  $this->payGateway->merchant_id,
                'type' => $payway,
                'out_trade_no' => $this->order->order_sn,
                'return_url' => route('yipay-return', ['order_id' => $this->order->order_sn]),
                'notify_url' => url($this->payGateway->pay_handleroute . '/notify_url'),
                'name'   => $this->order->order_sn,
                'money'  => (float)$this->order->actual_price,
                'sign' => $this->payGateway->merchant_pem,
                'sign_type' =>'MD5'
            ];
            ksort($parameter); //重新排序$data数组
            reset($parameter); //内部指针指向数组中的第一个元素
            $sign = '';
            foreach ($parameter as $key => $val) {
                if ($key == "sign" || $key == "sign_type" || $val == "") continue;
                if ($key != 'sign') {
                    if ($sign != '') {
                        $sign .= "&";
                    }
                    $sign .= "$key=$val"; //拼接为url参数形式
                }
            }

            $sign = md5($sign . $this->payGateway->merchant_pem);//密码追加进入开始MD5签名
            $parameter['sign'] = $sign;
            //待请求参数数组
            $sHtml = "<form id='alipaysubmit' name='alipaysubmit' action='" . $this->payGateway->merchant_key . "' method='get'>";

            foreach($parameter as $key => $val) {
                $sHtml.= "<input type='hidden' name='".$key."' value='".$val."'/>";
            }

            //submit按钮控件请不要含有name属性
            $sHtml = $sHtml."<input type='submit' value=''></form>";
            $sHtml = $sHtml."<script>document.forms['alipaysubmit'].submit();</script>";
            return $sHtml;
        } catch (RuleValidationException $exception) {
            return $this->err($exception->getMessage());
        }
    }

    public function notifyUrl(Request $request)
    {
        $data = $request->all();
        $order = $this->orderService->detailOrderSN($data['out_trade_no']);
        if (!$order) {
            return 'fail';
        }
        $payGateway = $this->payService->detail($order->pay_id);
        if (!$payGateway) {
            return 'fail';
        }
        if($payGateway->pay_handleroute != '/pay/yipay'){
            return 'fail';
        }
        ksort($data); //重新排序$data数组
        reset($data); //内部指针指向数组中的第一个元素
        $sign = '';
        foreach ($data as $key => $val) {
            if ($key == "sign" || $key == "sign_type" || $val == "") continue;
            if ($key != 'sign') {
                if ($sign != '') {
                    $sign .= "&";
                }
                $sign .= "$key=$val"; //拼接为url参数形式
            }
        }
        if (!$data['trade_no'] || md5($sign . $payGateway->merchant_pem) != $data['sign']) { //不合法的数据
            return 'fail';  //返回失败 继续补单
        } else {
            //合法的数据
            //业务处理
            $this->orderProcessService->completedOrder($data['out_trade_no'], $data['money'], $data['trade_no']);
            return 'success';
        }
    }

    public function returnUrl(Request $request)
    {
        $oid = $request->get('order_id');
        // 有些易支付太垃了,异步通知还没到就跳转了,导致订单显示待支付,其实已经支付了,所以这里休眠2秒
        sleep(2);
        return redirect(url('detail-order-sn', ['orderSN' => $oid]));
    }

}


================================================
FILE: app/Http/Controllers/PayController.php
================================================
<?php

namespace App\Http\Controllers;

use App\Exceptions\RuleValidationException;
use App\Models\Order;
use App\Service\OrderProcessService;

class PayController extends BaseController
{

    /**
     * 支付网关
     * @var \App\Models\Pay
     */
    protected $payGateway;


    /**
     * 订单
     * @var \App\Models\Order
     */
    protected $order;

    /**
     * 订单服务层
     * @var \App\Service\OrderService
     */
    protected $orderService;

    /**
     * 支付服务层
     * @var \App\Service\PayService
     */
    protected $payService;

    /**
     * 订单处理层.
     * @var OrderProcessService
     */
    protected $orderProcessService;


    public function __construct()
    {
        $this->orderService = app('Service\OrderService');
        $this->payService = app('Service\PayService');
        $this->orderProcessService = app('Service\OrderProcessService');
    }

    /**
     * 订单检测
     *
     * @param string $orderSN
     * @throws RuleValidationException
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function checkOrder(string $orderSN)
    {
        // 订单
        $this->order = $this->orderService->detailOrderSN($orderSN);
        if (!$this->order) {
            throw new RuleValidationException(__('dujiaoka.prompt.order_does_not_exist'));
        }
        // 订单过期
        if ($this->order->status == Order::STATUS_EXPIRED) {
            throw new RuleValidationException(__('dujiaoka.prompt.order_is_expired'));
        }
        // 已经支付了
        if ($this->order->status > Order::STATUS_WAIT_PAY) {
            throw new RuleValidationException(__('dujiaoka.prompt.order_already_paid'));
        }
    }

    /**
     * 加载支付网关
     *
     * @param string $orderSN 订单号
     * @param string $payCheck 支付标识
     * @throws RuleValidationException
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function loadGateWay(string $orderSN, string $payCheck)
    {
        $this->checkOrder($orderSN);
        // 支付配置
        $this->payGateway = $this->payService->detailByCheck($payCheck);
        if (!$this->payGateway) {
            throw new RuleValidationException(__('dujiaoka.prompt.pay_gateway_does_not_exist'));
        }
        // 临时保存支付方式
        $this->order->pay_id = $this->payGateway->id;
        $this->order->save();
    }

    /**
     * 网关处理.
     *
     * @param string $handle 跳转方法
     * @param string $payway 支付标识
     * @param string $orderSN 订单.
     *
     * @author    assimon<ashang@utf8.hk>
     * @copyright assimon<ashang@utf8.hk>
     * @link      http://utf8.hk/
     */
    public function redirectGateway(string $handle,string $payway, string $orderSN)
    {
        try {
            $this->checkOrder($orderSN);
            $bccomp = bccomp($this->order->actual_price, 0.00, 2);
            // 如果订单金额为0 代表无需支付,直接成功
            if ($bccomp == 0) {
                $this->orderProcessService->completedOrder($this->order->order_sn, 0.00);
                return redirect(url('detail-order-sn', ['orderSN' => $this->order->order_sn]));
            }
            return redirect(url(urldecode($handle), ['payway' => $payway, 'orderSN' => $orderSN]));
        } catch (RuleValidationException $exception) {
            return $this->err($exception->getMessage());
        }

    }

}


================================================
FILE: app/Http/Kernel.php
================================================
<?php

namespace App\Http;

use App\Http\Middleware\DujiaoBoot;
use App\Http\Middleware\InstallCheck;
use App\Http\Middleware\PayGateWay;
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 = [
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\DujiaoSystem::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,
        ],

        'api' => [
            'throttle:60,1',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'dujiaoka.boot' => DujiaoBoot::class,
        'dujiaoka.pay_gate_way' => PayGateWay::class,
        'install.check' => InstallCheck::class,
    ];

    /**
     * The priority-sorted list of middleware.
     *
     * This forces non-global middleware to always be in the given order.
     *
     * @var array
     */
    protected $middlewarePriority = [
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\Authenticate::class,
        \Illuminate\Routing\Middleware\ThrottleRequests::class,
        \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Illuminate\Auth\Middleware\Authorize::class,
    ];
}


================================================
FILE: app/Http/Middleware/Authenticate.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;

class Authenticate extends Middleware
{
    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return route('login');
        }
    }
}


================================================
FILE: app/Http/Middleware/CheckForMaintenanceMode.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;

class CheckForMaintenanceMode extends Middleware
{
    /**
     * The URIs that should be reachable while maintenance mode is enabled.
     *
     * @var array
     */
    protected $except = [
        //
    ];
}


================================================
FILE: app/Http/Middleware/DujiaoBoot.php
================================================
<?php

namespace App\Http\Middleware;

use App\Models\BaseModel;
use Closure;
use Germey\Geetest\GeetestServiceProvider;

class DujiaoBoot
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // 安装检查
        $installLock = base_path() . DIRECTORY_SEPARATOR . 'install.lock';
        if (!file_exists($installLock)) {
            return redirect(url('install'));
        }
        // 浏览器检测
        $userAgent = $request->header('user-agent');
        $nowUri = site_url() . $request->path();
        $tplPath = 'common/notencent';
        if (
            (strpos($userAgent, 'QQ/')
            ||
            strpos($userAgent, 'MicroMessenger') !== false)
            &&
            dujiaoka_config_get('is_open_anti_red', BaseModel::STATUS_OPEN) == BaseModel::STATUS_OPEN
        ) {
            return response()->view($tplPath, ['nowUri' => $nowUri]);
        }
        // 语言检测
        $lang = dujiaoka_config_get('language', 'zh_CN');
        app()->setLocale($lang);
        // 极验
        $geetest = dujiaoka_config_get('is_open_geetest', BaseModel::STATUS_CLOSE);
        if ($geetest == BaseModel::STATUS_OPEN) {
            $geetestConfig = [
                'key' => dujiaoka_config_get('geetest_key'),
                'id' => dujiaoka_config_get('geetest_id'),
                'lang' => $lang
            ];
            // 覆盖 配置
            config([
                'geetest'  =>  array_merge(config('mail'), $geetestConfig)
            ]);
            // 重新注册服务
            (new GeetestServiceProvider(app()))->register();
        }
        return $next($request);
    }
}


================================================
FILE: app/Http/Middleware/DujiaoSystem.php
================================================
<?php

namespace App\Http\Middleware;

use App\Providers\AppServiceProvider;
use Closure;

class DujiaoSystem
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // 检测https
        if ($request->getScheme() == 'https') {
            $httpsConfig = [
                'https' => true
            ];
            config([
                'admin'  =>  array_merge(config('admin'), $httpsConfig)
            ]);
            (new AppServiceProvider(app()))->register();
        }
        return $next($request);
    }
}


================================================
FILE: app/Http/Middleware/EncryptCookies.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;

class EncryptCookies extends Middleware
{
    /**
     * The names of the cookies that should not be encrypted.
     *
     * @var array
     */
    protected $except = [
        //
    ];
}


================================================
FILE: app/Http/Middleware/InstallCheck.php
================================================
<?php

namespace App\Http\Middleware;

use Closure;

class InstallCheck
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // 安装检查
        $installLock = base_path() . DIRECTORY_SEPARATOR . 'install.lock';
        if (file_exists($installLock)) {
            return redirect(url('/'));
        }
        return $next($request);
    }
}


================================================
FILE: app/Http/Middleware/PayGateWay.php
================================================
<?php

namespace App\Http\Middleware;

use Closure;

class PayGateWay
{

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}


================================================
FILE: app/Http/Middleware/RedirectIfAuthenticated.php
================================================
<?php

namespace App\Http\Middleware;

use App\Providers\RouteServiceProvider;
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(RouteServiceProvider::HOME);
        }

        return $next($request);
    }
}


================================================
FILE: app/Http/Middleware/TrimStrings.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;

class TrimStrings extends Middleware
{
    /**
     * The names of the attributes that should not be trimmed.
     *
     * @var array
     */
    protected $except = [
        'password',
        'password_confirmation',
    ];
}


================================================
FILE: app/Http/Middleware/TrustProxies.php
================================================
<?php

namespace App\Http\Middleware;

use Fideloper\Proxy\TrustProxies as Middleware;
use Illuminate\Http\Request;

class TrustProxies extends Middleware
{
    /**
     * The trusted proxies for this application.
     *
     * @var array|string
     */
    protected $proxies;

    /**
     * The headers that should be used to detect proxies.
     *
     * @var int
     */
    protected $headers = Request::HEADER_X_FORWARDED_ALL;
}


================================================
FILE: app/Http/Middleware/VerifyCsrfToken.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * Indicates whether the XSRF-TOKEN cookie should be set on the response.
     *
     * @var bool
     */
    protected $addHttpCookie = true;

    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'pay/*',
    ];
}


================================================
FILE: app/Jobs/ApiHook.php
================================================
<?php

namespace App\Jobs;

use App\Models\Order;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class ApiHook implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * 任务最大尝试次数。
     *
     * @var int
     */
    public $tries = 2;

    /**
     * 任务运行的超时时间。
     *
     * @var int
     */
    public $timeout = 30;

    /**
     * @var Order
     */
    private $order;

    /**
     * 商品服务层.
     * @var \App\Service\PayService
     */
    private $goodsService;


    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(Order $order)
    {
        $this->order = $order;
        $this->goodsService = app('Service\GoodsService');
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $goodInfo = $this->goodsService->detail($this->order->goods_id);
        // 判断是否有配置支付回调
        if(empty($goodInfo->api_hook)){
            return;
        }
        $postdata = [
            'title' => $this->order->title,
            'order_sn' => $this->order->order_sn,
            'email' => $this->order->email,
            'actual_price' => $this->order->actual_price,
            'order_info' => $this->order->info,
            'good_id' => $goodInfo->id,
            'gd_name' => $goodInfo->gd_name

        ];

        
        $opts = [
            'http' => [
                'method'  => 'POST',
                'header'  => 'Content-type: application/json',
                'content' => json_encode($postdata,JSON_UNESCAPED_UNICODE)
            ]
        ];
        $context  = stream_context_create($opts);
        file_get_contents($goodInfo->api_hook, false, $context);
    }
}


================================================
FILE: app/Jobs/BarkPush.php
================================================
<?php

namespace App\Jobs;

use App\Models\Order;
use GuzzleHttp\Client;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use App\Models\BaseModel;


class BarkPush implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * 任务最大尝试次数。
     *
     * @var int
     */
    public $tries = 2;

    /**
     * 任务运行的超时时间。
     *
     * @var int
     */
    public $timeout = 30;

    /**
     * @var Order
     */
    private $order;

    /**
     * 商品服务层.
     * @var \App\Service\PayService
     */
    private $goodsService;


    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(Order $order)
    {
        $this->order = $order;
        $this->goodsService = app('Service\GoodsService');
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $goodInfo = $this->goodsService->detail($this->order->goods_id);
        $client = new Client();
        $apiUrl = dujiaoka_config_get('bark_server') .'/'. dujiaoka_config_get('bark_token');
		$params = [
			"title" => __('dujiaoka.prompt.new_order_push').'('.$this->order->actual_price.'元)',
			"body" => __('order.fields.order_id') .': '.$this->order->id."\n"
				. __('order.fields.order_sn') .': '.$this->order->order_sn."\n"
				. __('order.fields.pay_id') .': '.$this->order->pay->pay_name."\n"
				. __('order.fields.title') .': '.$this->order->title."\n"
				. __('order.fields.actual_price') .': '.$this->order->actual_price."\n"
				. __('order.fields.email') .': '.$this->order->email."\n"
				. __('goods.fields.gd_name') .': '.$goodInfo->gd_name."\n"
				. __('goods.fields.in_stock') .': '.$goodInfo->in_stock."\n"
				. __('order.fields.order_created') .': '.$this->order->created_at,
			"icon"=>url('assets/common/images/default.jpg'),
			"level"=>"timeSensitive",
			"group"=>dujiaoka_config_get('text_logo', '独角数卡')
		];
		if (dujiaoka_config_get('is_open_bark_push_url', 0) == BaseModel::STATUS_OPEN) {
			$params["url"] = url('detail-order-sn/'.$this->order->order_sn);
		}
        $client->post($apiUrl,['form_params' => $params, 'verify' => false]);
    }
}


================================================
FILE: app/Jobs/CouponBack.php
================================================
<?php

namespace App\Jobs;

use App\Models\Order;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class CouponBack implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * 任务最大尝试次数。
     *
     * @var int
     */
    public $tries = 3;

    /**
     * 任务可以执行的最大秒数 (超时时间)。
     *
     * @var int
     */
    public $timeout = 20;

    private $order;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(Order $order)
    {
        $this->order = $order;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // 如果订单有使用优惠码
        if ($this->order->coupon_id) {
            // 优惠码次数+1
            app('Service\CouponService')->retIncrByID($this->order->coupon_id);
            // 设置订单优惠码已回退
            app('Service\OrderService')->couponIsBack($this->order->order_sn);
        }
    }
}


================================================
FILE: app/Jobs/MailSend.php
================================================
<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Mail\MailServiceProvider;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Mail;

class MailSend implements ShouldQueue
{

    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * 任务最大尝试次数。
     *
     * @var int
     */
    public $tries = 2;

    /**
     * 任务运行的超时时间。
     *
     * @var int
     */
    public $timeout = 30;

    private $to;

    private $content;

    private $title;


    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(string $to, string $title, string $content)
    {
        $this->to = $to;
        $this->title = $title;
        $this->content = $content;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $body = $this->content;
        $title = $this->title;
        $sysConfig = cache('system-setting');
        $mailConfig = [
            'driver' => $sysConfig['driver'] ?? 'smtp',
            'host' => $sysConfig['host'] ?? '',
            'port' => $sysConfig['port'] ?? '465',
            'username' => $sysConfig['username'] ?? '',
            'from'      =>  [
                'address'   =>   $sysConfig['from_address'] ?? '',
                'name'      =>  $sysConfig['from_name'] ?? '独角发卡'
            ],
            'password' => $sysConfig['password'] ?? '',
            'encryption' => $sysConfig['encryption'] ?? ''
        ];
        $to = $this->to;
        //  覆盖 mail 配置
        config([
            'mail'  =>  array_merge(config('mail'), $mailConfig)
        ]);
        // 重新注册驱动
        (new MailServiceProvider(app()))->register();
        Mail::send(['html' => 'email.mail'], ['body' => $body], function ($message) use ($to, $title){
            $message->to($to)->subject($title);
        });
    }
}


================================================
FILE: app/Jobs/OrderExpired.php
================================================
<?php

namespace App\Jobs;

use App\Models\Order;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class OrderExpired implements ShouldQueue
{

    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * 任务最大尝试次数。
     *
     * @var int
     */
    public $tries = 3;

    /**
     * 任务可以执行的最大秒数 (超时时间)。
     *
     * @var int
     */
    public $timeout = 20;

    /**
     * 订单号
     * @var string
     */
    private $orderSN;


    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(string $orderSN)
    {
        $this->orderSN = $orderSN;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // 如果x分钟后还没支付就算过期
        $order = app('Service\OrderService')->detailOrderSN($this->orderSN);
        if ($order && $order->status == Order::STATUS_WAIT_PAY) {
            app('Service\OrderService')->expiredOrderSN($this->orderSN);
            // 回退优惠券
            CouponBack::dispatch($order);
        }
    }
}


================================================
FILE: app/Jobs/ServerJiang.php
================================================
<?php

namespace App\Jobs;

use App\Models\Order;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class ServerJiang implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * 任务最大尝试次数。
     *
     * @var int
     */
    public $tries = 2;

    /**
     * 任务运行的超时时间。
     *
     * @var int
     */
    public $timeout = 30;

    /**
     * @var Order
     */
    private $order;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(Order $order)
    {
        $this->order = $order;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $postdata = http_build_query([
            'text' => __('dujiaoka.prompt.new_order_push') . ":{$this->order['ord_title']}",
            'desp' => "
- ". __('order.fields.title') .":{$this->order->title}
- ". __('order.fields.order_sn') .":{$this->order->order_sn}
- ". __('order.fields.email') .":{$this->order->email}
- ". __('order.fields.actual_price') .":{$this->order->actual_price}
            "
        ]);
        $opts = [
            'http' => [
                'method'  => 'POST',
                'header'  => 'Content-type: application/x-www-form-urlencoded',
                'content' => $postdata
            ]
        ];
        $context  = stream_context_create($opts);
        $apiToken = dujiaoka_config_get('server_jiang_token');
        file_get_contents('https://sctapi.ftqq.com/' . $apiToken . '.send', false, $context);
    }
}


================================================
FILE: app/Jobs/TelegramPush.php
================================================
<?php

namespace App\Jobs;

use App\Models\Order;
use GuzzleHttp\Client;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;


class TelegramPush implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * 任务最大尝试次数。
     *
     * @var int
     */
    public $tries = 2;

    /**
     * 任务运行的超时时间。
     *
     * @var int
     */
    public $timeout = 30;

    /**
     * @var Order
     */
    private $order;

    /**
     * 商品服务层.
     * @var \App\Service\PayService
     */
    private $goodsService;


    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(Order $order)
    {
        $this->order = $order;
        $this->goodsService = app('Service\GoodsService');
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $goodInfo = $this->goodsService->detail($this->order->goods_id);
        $formatText = '*'. __('dujiaoka.prompt.new_order_push').'('.$this->order->actual_price.'元)*%0A'
        . __('order.fields.order_id') .': `'.$this->order->id.'`%0A'
        . __('order.fields.order_sn') .': `'.$this->order->order_sn.'`%0A'
        . __('order.fields.pay_id') .': `'.$this->order->pay->pay_name.'`%0A'
        . __('order.fields.title') .': '.$this->order->title.'%0A'
        . __('order.fields.actual_price') .': '.$this->order->actual_price.'%0A'
        . __('order.fields.email') .': `'.$this->order->email.'`%0A'
        . __('goods.fields.gd_name') .': `'.$goodInfo->gd_name.'`%0A'
        . __('goods.fields.in_stock') .': `'.$goodInfo->in_stock.'`%0A'
        . __('order.fields.order_created') .': '.$this->order->created_at;
        $client = new Client([
            'timeout' => 30,
            'proxy'=> ''
        ]);
        $apiUrl = 'https://api.telegram.org/bot' . dujiaoka_config_get('telegram_bot_token') .
            '/sendMessage?chat_id=' . dujiaoka_config_get('telegram_userid') . '&parse_mode=Markdown&text='.$formatText;
        $client->post($apiUrl);
    }
}


================================================
FILE: app/Jobs/WorkWeiXinPush.php
================================================
<?php

namespace App\Jobs;

use App\Models\Order;
use GuzzleHttp\Client;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;


class WorkWeiXinPush implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * 任务最大尝试次数。
     *
     * @var int
     */
    public $tries = 1;

    /**
     * 任务运行的超时时间。
     *
     * @var int
     */
    public $timeout = 30;

    /**
     * @var Order
     */
    private $order;

    /**
     * 商品服务层.
     * @var \App\Service\PayService
     */
    private $goodsService;


    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(Order $order)
    {
        $this->order = $order;
        $this->goodsService = app('Service\GoodsService');
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $goodInfo = $this->goodsService->detail($this->order->goods_id);
        $client = new Client();
        $apiUrl = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key='. dujiaoka_config_get('qywxbot_key');
		$params = [
			"msgtype"=>"markdown",
			"markdown"=>[
				"content"=>__('dujiaoka.prompt.new_order_push').'(<font color="warning">'.$this->order->actual_price."</font>元)\n"
				.'>'.__('order.fields.order_id') .': <font color="comment">'.$this->order->id."</font>\n"
				.'>'.__('order.fields.order_sn') .': <font color="comment">'.$this->order->order_sn."</font>\n"
				.'>'.__('order.fields.pay_id') .': <font color="comment">'.$this->order->pay->pay_name."</font>\n"
				.'>'.__('order.fields.title') .': <font color="comment">'.$this->order->title."</font>\n"
				.'>'.__('order.fields.actual_price') .': <font color="comment">'.$this->order->actual_price."</font>\n"
				.'>'.__('order.fields.email') .': <font color="comment">'.$this->order->email."</font>\n"
				.'>'.__('goods.fields.gd_name') .': <font color="comment">'.$goodInfo->gd_name."</font>\n"
				.'>'.__('goods.fields.in_stock') .': <font color="comment">'.$goodInfo->in_stock."</font>\n"
				.'>'.__('order.fields.order_created') .': <font color="comment">'.$this->order->created_at."</font>"
			]
		];
        $client->post($apiUrl,['json' => $params, 'verify' => false]);
    }
}


================================================
FILE: app/Listeners/GoodsDeleted.php
================================================
<?php

namespace App\Listeners;

use App\Models\Carmis;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use App\Events\GoodsDeleted as GoodsDeletedEvent;

class GoodsDeleted
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  object  $event
     * @return void
     */
    public function handle(GoodsDeletedEvent $event)
    {
        Carmis::query()->where('goods_id', $event->goods->id)->delete();
    }
}


================================================
FILE: app/Listeners/GoodsGroupDeleted.php
========
Download .txt
gitextract_f4oc_he4/

├── .editorconfig
├── .gitattributes
├── .gitignore
├── .styleci.yml
├── Dockerfile
├── LICENSE
├── README.md
├── app/
│   ├── Admin/
│   │   ├── Actions/
│   │   │   └── Post/
│   │   │       ├── BatchRestore.php
│   │   │       └── Restore.php
│   │   ├── Charts/
│   │   │   ├── DashBoard.php
│   │   │   ├── PayoutRateCard.php
│   │   │   ├── SalesCard.php
│   │   │   └── SuccessOrderCard.php
│   │   ├── Controllers/
│   │   │   ├── AuthController.php
│   │   │   ├── CarmisController.php
│   │   │   ├── CouponController.php
│   │   │   ├── EmailTestController.php
│   │   │   ├── EmailtplController.php
│   │   │   ├── GoodsController.php
│   │   │   ├── GoodsGroupController.php
│   │   │   ├── HomeController.php
│   │   │   ├── OrderController.php
│   │   │   ├── PayController.php
│   │   │   └── SystemSettingController.php
│   │   ├── Forms/
│   │   │   ├── EmailTest.php
│   │   │   ├── ImportCarmis.php
│   │   │   └── SystemSetting.php
│   │   ├── Repositories/
│   │   │   ├── Carmis.php
│   │   │   ├── Coupon.php
│   │   │   ├── Emailtpl.php
│   │   │   ├── Goods.php
│   │   │   ├── GoodsGroup.php
│   │   │   ├── Order.php
│   │   │   └── Pay.php
│   │   ├── bootstrap.php
│   │   └── routes.php
│   ├── Console/
│   │   └── Kernel.php
│   ├── Events/
│   │   ├── GoodsDeleted.php
│   │   ├── GoodsGroupDeleted.php
│   │   └── OrderUpdated.php
│   ├── Exceptions/
│   │   ├── AppException.php
│   │   ├── Handler.php
│   │   └── RuleValidationException.php
│   ├── Helpers/
│   │   └── functions.php
│   ├── Http/
│   │   ├── Controllers/
│   │   │   ├── BaseController.php
│   │   │   ├── Controller.php
│   │   │   ├── Home/
│   │   │   │   ├── HomeController.php
│   │   │   │   └── OrderController.php
│   │   │   ├── Pay/
│   │   │   │   ├── AlipayController.php
│   │   │   │   ├── CoinbaseController.php
│   │   │   │   ├── EpusdtController.php
│   │   │   │   ├── MapayController.php
│   │   │   │   ├── PayjsController.php
│   │   │   │   ├── PaypalPayController.php
│   │   │   │   ├── PaysapiController.php
│   │   │   │   ├── StripeController.php
│   │   │   │   ├── TokenPayController.php
│   │   │   │   ├── VpayController.php
│   │   │   │   ├── WepayController.php
│   │   │   │   └── YipayController.php
│   │   │   └── PayController.php
│   │   ├── Kernel.php
│   │   └── Middleware/
│   │       ├── Authenticate.php
│   │       ├── CheckForMaintenanceMode.php
│   │       ├── DujiaoBoot.php
│   │       ├── DujiaoSystem.php
│   │       ├── EncryptCookies.php
│   │       ├── InstallCheck.php
│   │       ├── PayGateWay.php
│   │       ├── RedirectIfAuthenticated.php
│   │       ├── TrimStrings.php
│   │       ├── TrustProxies.php
│   │       └── VerifyCsrfToken.php
│   ├── Jobs/
│   │   ├── ApiHook.php
│   │   ├── BarkPush.php
│   │   ├── CouponBack.php
│   │   ├── MailSend.php
│   │   ├── OrderExpired.php
│   │   ├── ServerJiang.php
│   │   ├── TelegramPush.php
│   │   └── WorkWeiXinPush.php
│   ├── Listeners/
│   │   ├── GoodsDeleted.php
│   │   ├── GoodsGroupDeleted.php
│   │   └── OrderUpdated.php
│   ├── Models/
│   │   ├── BaseModel.php
│   │   ├── Carmis.php
│   │   ├── Coupon.php
│   │   ├── Emailtpl.php
│   │   ├── Goods.php
│   │   ├── GoodsGroup.php
│   │   ├── Order.php
│   │   └── Pay.php
│   ├── Providers/
│   │   ├── AppServiceProvider.php
│   │   ├── AuthServiceProvider.php
│   │   ├── BroadcastServiceProvider.php
│   │   ├── EventServiceProvider.php
│   │   └── RouteServiceProvider.php
│   ├── Rules/
│   │   ├── SearchPwd.php
│   │   └── VerifyImg.php
│   ├── Service/
│   │   ├── CarmisService.php
│   │   ├── CouponService.php
│   │   ├── EmailtplService.php
│   │   ├── GoodsService.php
│   │   ├── OrderProcessService.php
│   │   ├── OrderService.php
│   │   └── PayService.php
│   └── User.php
├── artisan
├── bootstrap/
│   ├── app.php
│   └── cache/
│       └── .gitignore
├── composer.json
├── config/
│   ├── admin.php
│   ├── app.php
│   ├── auth.php
│   ├── broadcasting.php
│   ├── cache.php
│   ├── database.php
│   ├── dujiaoka.php
│   ├── filesystems.php
│   ├── geetest.php
│   ├── hashing.php
│   ├── logging.php
│   ├── mail.php
│   ├── queue.php
│   ├── services.php
│   ├── session.php
│   └── view.php
├── database/
│   ├── .gitignore
│   ├── factories/
│   │   └── OrderFactory.php
│   ├── seeds/
│   │   ├── DatabaseSeeder.php
│   │   └── OrderTableSeeder.php
│   └── sql/
│       └── install.sql
├── dcat_admin_ide_helper.php
├── debian_manual.md
├── docker-compose.yml
├── package.json
├── phpunit.xml
├── public/
│   ├── .htaccess
│   ├── assets/
│   │   ├── hyper/
│   │   │   ├── css/
│   │   │   │   ├── hyper-loading.css
│   │   │   │   ├── hyper.css
│   │   │   │   └── vendor/
│   │   │   │       ├── buttons.bootstrap4.css
│   │   │   │       ├── dataTables.bootstrap4.css
│   │   │   │       ├── frappe-gantt.css
│   │   │   │       ├── jquery-jvectormap-1.2.2.css
│   │   │   │       ├── responsive.bootstrap4.css
│   │   │   │       ├── select.bootstrap4.css
│   │   │   │       └── summernote-bs4.css
│   │   │   └── js/
│   │   │       └── hyper.js
│   │   ├── luna/
│   │   │   ├── js/
│   │   │   │   └── viewerjs/
│   │   │   │       ├── viewer.common.js
│   │   │   │       ├── viewer.css
│   │   │   │       ├── viewer.esm.js
│   │   │   │       └── viewer.js
│   │   │   ├── layui/
│   │   │   │   ├── css/
│   │   │   │   │   ├── layui.css
│   │   │   │   │   ├── layui.mobile.css
│   │   │   │   │   └── modules/
│   │   │   │   │       ├── code.css
│   │   │   │   │       ├── laydate/
│   │   │   │   │       │   └── default/
│   │   │   │   │       │       └── laydate.css
│   │   │   │   │       └── layer/
│   │   │   │   │           └── default/
│   │   │   │   │               └── layer.css
│   │   │   │   ├── lay/
│   │   │   │   │   └── modules/
│   │   │   │   │       ├── carousel.js
│   │   │   │   │       ├── code.js
│   │   │   │   │       ├── colorpicker.js
│   │   │   │   │       ├── element.js
│   │   │   │   │       ├── flow.js
│   │   │   │   │       ├── form.js
│   │   │   │   │       ├── jquery.js
│   │   │   │   │       ├── laydate.js
│   │   │   │   │       ├── layedit.js
│   │   │   │   │       ├── layer.js
│   │   │   │   │       ├── laypage.js
│   │   │   │   │       ├── laytpl.js
│   │   │   │   │       ├── mobile.js
│   │   │   │   │       ├── rate.js
│   │   │   │   │       ├── slider.js
│   │   │   │   │       ├── table.js
│   │   │   │   │       ├── transfer.js
│   │   │   │   │       ├── tree.js
│   │   │   │   │       ├── upload.js
│   │   │   │   │       └── util.js
│   │   │   │   └── layui.js
│   │   │   ├── main.css
│   │   │   └── main.js
│   │   ├── style/
│   │   │   ├── js/
│   │   │   │   └── clipboard/
│   │   │   │       └── clipboard.js
│   │   │   └── main.css
│   │   └── unicorn/
│   │       ├── css/
│   │       │   ├── base.css
│   │       │   ├── common.css
│   │       │   └── index.css
│   │       └── js/
│   │           └── bootstrap-input-spinner.js
│   ├── index.php
│   ├── robots.txt
│   ├── vendor/
│   │   └── dcat-admin/
│   │       ├── adminlte/
│   │       │   ├── adminlte-blue-light.css
│   │       │   ├── adminlte-blue.css
│   │       │   ├── adminlte-green.css
│   │       │   ├── adminlte.css
│   │       │   └── adminlte.js
│   │       ├── dcat/
│   │       │   ├── css/
│   │       │   │   ├── dcat-app-blue-light.css
│   │       │   │   ├── dcat-app-blue.css
│   │       │   │   ├── dcat-app-green.css
│   │       │   │   ├── dcat-app.css
│   │       │   │   └── nunito.css
│   │       │   ├── extra/
│   │       │   │   ├── action.js
│   │       │   │   ├── grid-extend.js
│   │       │   │   ├── markdown.css
│   │       │   │   ├── select-table.js
│   │       │   │   ├── upload.css
│   │       │   │   └── upload.js
│   │       │   ├── js/
│   │       │   │   └── dcat-app.js
│   │       │   └── plugins/
│   │       │       ├── bootstrap-colorpicker/
│   │       │       │   ├── css/
│   │       │       │   │   └── bootstrap-colorpicker.css
│   │       │       │   └── js/
│   │       │       │       └── bootstrap-colorpicker.js
│   │       │       ├── bootstrap-datetimepicker/
│   │       │       │   └── bootstrap-datetimepicker.css
│   │       │       ├── bootstrap-duallistbox/
│   │       │       │   ├── .editorconfig
│   │       │       │   ├── .jshintrc
│   │       │       │   ├── .travis.yml
│   │       │       │   └── dist/
│   │       │       │       ├── bootstrap-duallistbox.css
│   │       │       │       └── jquery.bootstrap-duallistbox.js
│   │       │       ├── bootstrap-iconpicker/
│   │       │       │   ├── css/
│   │       │       │   │   └── bootstrap-iconpicker.css
│   │       │       │   └── js/
│   │       │       │       ├── bootstrap-iconpicker-iconset-all.js
│   │       │       │       └── bootstrap-iconpicker.js
│   │       │       ├── bootstrap-validator/
│   │       │       │   └── validator.js
│   │       │       ├── charts/
│   │       │       │   ├── apexcharts.css
│   │       │       │   └── apexcharts.js
│   │       │       ├── editor-md/
│   │       │       │   ├── Gulpfile.js
│   │       │       │   ├── LICENSE
│   │       │       │   ├── README.md
│   │       │       │   ├── css/
│   │       │       │   │   ├── editormd.css
│   │       │       │   │   ├── editormd.logo.css
│   │       │       │   │   └── editormd.preview.css
│   │       │       │   ├── editormd.amd.js
│   │       │       │   ├── editormd.js
│   │       │       │   ├── fonts/
│   │       │       │   │   └── FontAwesome.otf
│   │       │       │   ├── languages/
│   │       │       │   │   ├── en.js
│   │       │       │   │   └── zh-tw.js
│   │       │       │   ├── lib/
│   │       │       │   │   └── codemirror/
│   │       │       │   │       ├── AUTHORS
│   │       │       │   │       ├── LICENSE
│   │       │       │   │       ├── README.md
│   │       │       │   │       ├── addon/
│   │       │       │   │       │   ├── comment/
│   │       │       │   │       │   │   ├── comment.js
│   │       │       │   │       │   │   └── continuecomment.js
│   │       │       │   │       │   ├── dialog/
│   │       │       │   │       │   │   ├── dialog.css
│   │       │       │   │       │   │   └── dialog.js
│   │       │       │   │       │   ├── display/
│   │       │       │   │       │   │   ├── fullscreen.css
│   │       │       │   │       │   │   ├── fullscreen.js
│   │       │       │   │       │   │   ├── panel.js
│   │       │       │   │       │   │   ├── placeholder.js
│   │       │       │   │       │   │   └── rulers.js
│   │       │       │   │       │   ├── edit/
│   │       │       │   │       │   │   ├── closebrackets.js
│   │       │       │   │       │   │   ├── closetag.js
│   │       │       │   │       │   │   ├── continuelist.js
│   │       │       │   │       │   │   ├── matchbrackets.js
│   │       │       │   │       │   │   ├── matchtags.js
│   │       │       │   │       │   │   └── trailingspace.js
│   │       │       │   │       │   ├── fold/
│   │       │       │   │       │   │   ├── brace-fold.js
│   │       │       │   │       │   │   ├── comment-fold.js
│   │       │       │   │       │   │   ├── foldcode.js
│   │       │       │   │       │   │   ├── foldgutter.css
│   │       │       │   │       │   │   ├── foldgutter.js
│   │       │       │   │       │   │   ├── indent-fold.js
│   │       │       │   │       │   │   ├── markdown-fold.js
│   │       │       │   │       │   │   └── xml-fold.js
│   │       │       │   │       │   ├── hint/
│   │       │       │   │       │   │   ├── anyword-hint.js
│   │       │       │   │       │   │   ├── css-hint.js
│   │       │       │   │       │   │   ├── html-hint.js
│   │       │       │   │       │   │   ├── javascript-hint.js
│   │       │       │   │       │   │   ├── show-hint.css
│   │       │       │   │       │   │   ├── show-hint.js
│   │       │       │   │       │   │   ├── sql-hint.js
│   │       │       │   │       │   │   └── xml-hint.js
│   │       │       │   │       │   ├── lint/
│   │       │       │   │       │   │   ├── coffeescript-lint.js
│   │       │       │   │       │   │   ├── css-lint.js
│   │       │       │   │       │   │   ├── javascript-lint.js
│   │       │       │   │       │   │   ├── json-lint.js
│   │       │       │   │       │   │   ├── lint.css
│   │       │       │   │       │   │   ├── lint.js
│   │       │       │   │       │   │   └── yaml-lint.js
│   │       │       │   │       │   ├── merge/
│   │       │       │   │       │   │   ├── merge.css
│   │       │       │   │       │   │   └── merge.js
│   │       │       │   │       │   ├── mode/
│   │       │       │   │       │   │   ├── loadmode.js
│   │       │       │   │       │   │   ├── multiplex.js
│   │       │       │   │       │   │   ├── multiplex_test.js
│   │       │       │   │       │   │   ├── overlay.js
│   │       │       │   │       │   │   └── simple.js
│   │       │       │   │       │   ├── runmode/
│   │       │       │   │       │   │   ├── colorize.js
│   │       │       │   │       │   │   ├── runmode-standalone.js
│   │       │       │   │       │   │   ├── runmode.js
│   │       │       │   │       │   │   └── runmode.node.js
│   │       │       │   │       │   ├── scroll/
│   │       │       │   │       │   │   ├── annotatescrollbar.js
│   │       │       │   │       │   │   ├── scrollpastend.js
│   │       │       │   │       │   │   ├── simplescrollbars.css
│   │       │       │   │       │   │   └── simplescrollbars.js
│   │       │       │   │       │   ├── search/
│   │       │       │   │       │   │   ├── match-highlighter.js
│   │       │       │   │       │   │   ├── matchesonscrollbar.css
│   │       │       │   │       │   │   ├── matchesonscrollbar.js
│   │       │       │   │       │   │   ├── search.js
│   │       │       │   │       │   │   └── searchcursor.js
│   │       │       │   │       │   ├── selection/
│   │       │       │   │       │   │   ├── active-line.js
│   │       │       │   │       │   │   ├── mark-selection.js
│   │       │       │   │       │   │   └── selection-pointer.js
│   │       │       │   │       │   ├── tern/
│   │       │       │   │       │   │   ├── tern.css
│   │       │       │   │       │   │   ├── tern.js
│   │       │       │   │       │   │   └── worker.js
│   │       │       │   │       │   └── wrap/
│   │       │       │   │       │       └── hardwrap.js
│   │       │       │   │       ├── bower.json
│   │       │       │   │       ├── lib/
│   │       │       │   │       │   ├── codemirror.css
│   │       │       │   │       │   └── codemirror.js
│   │       │       │   │       ├── mode/
│   │       │       │   │       │   ├── apl/
│   │       │       │   │       │   │   ├── apl.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── asterisk/
│   │       │       │   │       │   │   ├── asterisk.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── clike/
│   │       │       │   │       │   │   ├── clike.js
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── scala.html
│   │       │       │   │       │   ├── clojure/
│   │       │       │   │       │   │   ├── clojure.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── cobol/
│   │       │       │   │       │   │   ├── cobol.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── coffeescript/
│   │       │       │   │       │   │   ├── coffeescript.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── commonlisp/
│   │       │       │   │       │   │   ├── commonlisp.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── css/
│   │       │       │   │       │   │   ├── css.js
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── less.html
│   │       │       │   │       │   │   ├── less_test.js
│   │       │       │   │       │   │   ├── scss.html
│   │       │       │   │       │   │   ├── scss_test.js
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── cypher/
│   │       │       │   │       │   │   ├── cypher.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── d/
│   │       │       │   │       │   │   ├── d.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── dart/
│   │       │       │   │       │   │   ├── dart.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── diff/
│   │       │       │   │       │   │   ├── diff.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── django/
│   │       │       │   │       │   │   ├── django.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── dockerfile/
│   │       │       │   │       │   │   ├── dockerfile.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── dtd/
│   │       │       │   │       │   │   ├── dtd.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── dylan/
│   │       │       │   │       │   │   ├── dylan.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── ebnf/
│   │       │       │   │       │   │   ├── ebnf.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── ecl/
│   │       │       │   │       │   │   ├── ecl.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── eiffel/
│   │       │       │   │       │   │   ├── eiffel.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── erlang/
│   │       │       │   │       │   │   ├── erlang.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── forth/
│   │       │       │   │       │   │   ├── forth.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── fortran/
│   │       │       │   │       │   │   ├── fortran.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── gas/
│   │       │       │   │       │   │   ├── gas.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── gfm/
│   │       │       │   │       │   │   ├── gfm.js
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── gherkin/
│   │       │       │   │       │   │   ├── gherkin.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── go/
│   │       │       │   │       │   │   ├── go.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── groovy/
│   │       │       │   │       │   │   ├── groovy.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── haml/
│   │       │       │   │       │   │   ├── haml.js
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── haskell/
│   │       │       │   │       │   │   ├── haskell.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── haxe/
│   │       │       │   │       │   │   ├── haxe.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── htmlembedded/
│   │       │       │   │       │   │   ├── htmlembedded.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── htmlmixed/
│   │       │       │   │       │   │   ├── htmlmixed.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── http/
│   │       │       │   │       │   │   ├── http.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── idl/
│   │       │       │   │       │   │   ├── idl.js
│   │       │       │   │       │   │   └── index.html
│   │       │       │   │       │   ├── index.html
│   │       │       │   │       │   ├── jade/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── jade.js
│   │       │       │   │       │   ├── javascript/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── javascript.js
│   │       │       │   │       │   │   ├── json-ld.html
│   │       │       │   │       │   │   ├── test.js
│   │       │       │   │       │   │   └── typescript.html
│   │       │       │   │       │   ├── jinja2/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── jinja2.js
│   │       │       │   │       │   ├── julia/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── julia.js
│   │       │       │   │       │   ├── kotlin/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── kotlin.js
│   │       │       │   │       │   ├── livescript/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── livescript.js
│   │       │       │   │       │   ├── lua/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── lua.js
│   │       │       │   │       │   ├── markdown/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── markdown.js
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── meta.js
│   │       │       │   │       │   ├── mirc/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── mirc.js
│   │       │       │   │       │   ├── mllike/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── mllike.js
│   │       │       │   │       │   ├── modelica/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── modelica.js
│   │       │       │   │       │   ├── nginx/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── nginx.js
│   │       │       │   │       │   ├── ntriples/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── ntriples.js
│   │       │       │   │       │   ├── octave/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── octave.js
│   │       │       │   │       │   ├── pascal/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── pascal.js
│   │       │       │   │       │   ├── pegjs/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── pegjs.js
│   │       │       │   │       │   ├── perl/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── perl.js
│   │       │       │   │       │   ├── php/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── php.js
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── pig/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── pig.js
│   │       │       │   │       │   ├── properties/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── properties.js
│   │       │       │   │       │   ├── puppet/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── puppet.js
│   │       │       │   │       │   ├── python/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── python.js
│   │       │       │   │       │   ├── q/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── q.js
│   │       │       │   │       │   ├── r/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── r.js
│   │       │       │   │       │   ├── rpm/
│   │       │       │   │       │   │   ├── changes/
│   │       │       │   │       │   │   │   └── index.html
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── rpm.js
│   │       │       │   │       │   ├── rst/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── rst.js
│   │       │       │   │       │   ├── ruby/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── ruby.js
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── rust/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── rust.js
│   │       │       │   │       │   ├── sass/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── sass.js
│   │       │       │   │       │   ├── scheme/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── scheme.js
│   │       │       │   │       │   ├── shell/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── shell.js
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── sieve/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── sieve.js
│   │       │       │   │       │   ├── slim/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── slim.js
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── smalltalk/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── smalltalk.js
│   │       │       │   │       │   ├── smarty/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── smarty.js
│   │       │       │   │       │   ├── smartymixed/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── smartymixed.js
│   │       │       │   │       │   ├── solr/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── solr.js
│   │       │       │   │       │   ├── soy/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── soy.js
│   │       │       │   │       │   ├── sparql/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── sparql.js
│   │       │       │   │       │   ├── spreadsheet/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── spreadsheet.js
│   │       │       │   │       │   ├── sql/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── sql.js
│   │       │       │   │       │   ├── stex/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── stex.js
│   │       │       │   │       │   │   └── test.js
│   │       │       │   │       │   ├── stylus/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── stylus.js
│   │       │       │   │       │   ├── tcl/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── tcl.js
│   │       │       │   │       │   ├── textile/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── test.js
│   │       │       │   │       │   │   └── textile.js
│   │       │       │   │       │   ├── tiddlywiki/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── tiddlywiki.css
│   │       │       │   │       │   │   └── tiddlywiki.js
│   │       │       │   │       │   ├── tiki/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── tiki.css
│   │       │       │   │       │   │   └── tiki.js
│   │       │       │   │       │   ├── toml/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── toml.js
│   │       │       │   │       │   ├── tornado/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── tornado.js
│   │       │       │   │       │   ├── turtle/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── turtle.js
│   │       │       │   │       │   ├── vb/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── vb.js
│   │       │       │   │       │   ├── vbscript/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── vbscript.js
│   │       │       │   │       │   ├── velocity/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── velocity.js
│   │       │       │   │       │   ├── verilog/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── test.js
│   │       │       │   │       │   │   └── verilog.js
│   │       │       │   │       │   ├── xml/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── test.js
│   │       │       │   │       │   │   └── xml.js
│   │       │       │   │       │   ├── xquery/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   ├── test.js
│   │       │       │   │       │   │   └── xquery.js
│   │       │       │   │       │   ├── yaml/
│   │       │       │   │       │   │   ├── index.html
│   │       │       │   │       │   │   └── yaml.js
│   │       │       │   │       │   └── z80/
│   │       │       │   │       │       ├── index.html
│   │       │       │   │       │       └── z80.js
│   │       │       │   │       ├── package.json
│   │       │       │   │       └── theme/
│   │       │       │   │           ├── 3024-day.css
│   │       │       │   │           ├── 3024-night.css
│   │       │       │   │           ├── ambiance-mobile.css
│   │       │       │   │           ├── ambiance.css
│   │       │       │   │           ├── base16-dark.css
│   │       │       │   │           ├── base16-light.css
│   │       │       │   │           ├── blackboard.css
│   │       │       │   │           ├── cobalt.css
│   │       │       │   │           ├── colorforth.css
│   │       │       │   │           ├── eclipse.css
│   │       │       │   │           ├── elegant.css
│   │       │       │   │           ├── erlang-dark.css
│   │       │       │   │           ├── lesser-dark.css
│   │       │       │   │           ├── mbo.css
│   │       │       │   │           ├── mdn-like.css
│   │       │       │   │           ├── midnight.css
│   │       │       │   │           ├── monokai.css
│   │       │       │   │           ├── neat.css
│   │       │       │   │           ├── neo.css
│   │       │       │   │           ├── night.css
│   │       │       │   │           ├── paraiso-dark.css
│   │       │       │   │           ├── paraiso-light.css
│   │       │       │   │           ├── pastel-on-dark.css
│   │       │       │   │           ├── rubyblue.css
│   │       │       │   │           ├── solarized.css
│   │       │       │   │           ├── the-matrix.css
│   │       │       │   │           ├── tomorrow-night-bright.css
│   │       │       │   │           ├── tomorrow-night-eighties.css
│   │       │       │   │           ├── twilight.css
│   │       │       │   │           ├── vibrant-ink.css
│   │       │       │   │           ├── xq-dark.css
│   │       │       │   │           ├── xq-light.css
│   │       │       │   │           └── zenburn.css
│   │       │       │   ├── package.json
│   │       │       │   ├── plugins/
│   │       │       │   │   ├── code-block-dialog/
│   │       │       │   │   │   └── code-block-dialog.js
│   │       │       │   │   ├── emoji-dialog/
│   │       │       │   │   │   ├── emoji-dialog.js
│   │       │       │   │   │   └── emoji.json
│   │       │       │   │   ├── goto-line-dialog/
│   │       │       │   │   │   └── goto-line-dialog.js
│   │       │       │   │   ├── help-dialog/
│   │       │       │   │   │   ├── help-dialog.js
│   │       │       │   │   │   └── help.md
│   │       │       │   │   ├── html-entities-dialog/
│   │       │       │   │   │   ├── html-entities-dialog.js
│   │       │       │   │   │   └── html-entities.json
│   │       │       │   │   ├── image-dialog/
│   │       │       │   │   │   └── image-dialog.js
│   │       │       │   │   ├── link-dialog/
│   │       │       │   │   │   └── link-dialog.js
│   │       │       │   │   ├── plugin-template.js
│   │       │       │   │   ├── preformatted-text-dialog/
│   │       │       │   │   │   └── preformatted-text-dialog.js
│   │       │       │   │   ├── reference-link-dialog/
│   │       │       │   │   │   └── reference-link-dialog.js
│   │       │       │   │   ├── table-dialog/
│   │       │       │   │   │   └── table-dialog.js
│   │       │       │   │   └── test-plugin/
│   │       │       │   │       └── test-plugin.js
│   │       │       │   ├── scss/
│   │       │       │   │   ├── editormd.codemirror.scss
│   │       │       │   │   ├── editormd.dialog.scss
│   │       │       │   │   ├── editormd.form.scss
│   │       │       │   │   ├── editormd.grid.scss
│   │       │       │   │   ├── editormd.logo.scss
│   │       │       │   │   ├── editormd.menu.scss
│   │       │       │   │   ├── editormd.preview.scss
│   │       │       │   │   ├── editormd.preview.themes.scss
│   │       │       │   │   ├── editormd.scss
│   │       │       │   │   ├── editormd.tab.scss
│   │       │       │   │   ├── editormd.themes.scss
│   │       │       │   │   ├── font-awesome.scss
│   │       │       │   │   ├── github-markdown.scss
│   │       │       │   │   ├── lib/
│   │       │       │   │   │   ├── prefixes.scss
│   │       │       │   │   │   └── variables.scss
│   │       │       │   │   └── prettify.scss
│   │       │       │   └── src/
│   │       │       │       └── editormd.js
│   │       │       ├── extensions/
│   │       │       │   └── toastr.css
│   │       │       ├── fontawesome-iconpicker/
│   │       │       │   └── dist/
│   │       │       │       ├── css/
│   │       │       │       │   └── fontawesome-iconpicker.css
│   │       │       │       └── js/
│   │       │       │           └── fontawesome-iconpicker.js
│   │       │       ├── input-mask/
│   │       │       │   └── phone-codes/
│   │       │       │       ├── phone-be.json
│   │       │       │       ├── phone-codes.json
│   │       │       │       └── readme.txt
│   │       │       ├── ionslider/
│   │       │       │   ├── ion.rangeSlider.css
│   │       │       │   ├── ion.rangeSlider.skinFlat.css
│   │       │       │   └── ion.rangeSlider.skinNice.css
│   │       │       ├── jquery-pjax/
│   │       │       │   └── jquery.pjax.js
│   │       │       ├── jquery-qrcode/
│   │       │       │   └── dist/
│   │       │       │       └── jquery-qrcode.js
│   │       │       ├── jquery.initialize/
│   │       │       │   ├── LICENSE
│   │       │       │   └── jquery.initialize.js
│   │       │       ├── jstree-theme/
│   │       │       │   ├── jstree.js
│   │       │       │   └── themes/
│   │       │       │       ├── default/
│   │       │       │       │   └── style.css
│   │       │       │       └── proton/
│   │       │       │           └── style.css
│   │       │       ├── layer/
│   │       │       │   ├── layer.js
│   │       │       │   ├── mobile/
│   │       │       │   │   ├── layer.js
│   │       │       │   │   └── need/
│   │       │       │   │       └── layer.css
│   │       │       │   └── theme/
│   │       │       │       └── default/
│   │       │       │           └── layer.css
│   │       │       ├── moment-timezone/
│   │       │       │   ├── moment-timezone-with-data-10-year-range.js
│   │       │       │   ├── moment-timezone-with-data-1970-2030.js
│   │       │       │   ├── moment-timezone-with-data-2012-2022.js
│   │       │       │   └── moment-timezone-with-data.js
│   │       │       ├── nestable/
│   │       │       │   ├── jquery.nestable.js
│   │       │       │   └── nestable.css
│   │       │       ├── number-input/
│   │       │       │   └── bootstrap-number-input.js
│   │       │       ├── select/
│   │       │       │   ├── i18n/
│   │       │       │   │   ├── af.js
│   │       │       │   │   ├── ar.js
│   │       │       │   │   ├── az.js
│   │       │       │   │   ├── bg.js
│   │       │       │   │   ├── bn.js
│   │       │       │   │   ├── bs.js
│   │       │       │   │   ├── ca.js
│   │       │       │   │   ├── cs.js
│   │       │       │   │   ├── da.js
│   │       │       │   │   ├── de.js
│   │       │       │   │   ├── dsb.js
│   │       │       │   │   ├── el.js
│   │       │       │   │   ├── en.js
│   │       │       │   │   ├── eo.js
│   │       │       │   │   ├── es.js
│   │       │       │   │   ├── et.js
│   │       │       │   │   ├── eu.js
│   │       │       │   │   ├── fa.js
│   │       │       │   │   ├── fi.js
│   │       │       │   │   ├── fr.js
│   │       │       │   │   ├── gl.js
│   │       │       │   │   ├── he.js
│   │       │       │   │   ├── hi.js
│   │       │       │   │   ├── hr.js
│   │       │       │   │   ├── hsb.js
│   │       │       │   │   ├── hu.js
│   │       │       │   │   ├── hy.js
│   │       │       │   │   ├── id.js
│   │       │       │   │   ├── is.js
│   │       │       │   │   ├── it.js
│   │       │       │   │   ├── ja.js
│   │       │       │   │   ├── ka.js
│   │       │       │   │   ├── km.js
│   │       │       │   │   ├── ko.js
│   │       │       │   │   ├── lt.js
│   │       │       │   │   ├── lv.js
│   │       │       │   │   ├── mk.js
│   │       │       │   │   ├── ms.js
│   │       │       │   │   ├── nb.js
│   │       │       │   │   ├── ne.js
│   │       │       │   │   ├── nl.js
│   │       │       │   │   ├── pa.js
│   │       │       │   │   ├── pl.js
│   │       │       │   │   ├── ps.js
│   │       │       │   │   ├── pt-BR.js
│   │       │       │   │   ├── pt.js
│   │       │       │   │   ├── ro.js
│   │       │       │   │   ├── ru.js
│   │       │       │   │   ├── sk.js
│   │       │       │   │   ├── sl.js
│   │       │       │   │   ├── sq.js
│   │       │       │   │   ├── sr-Cyrl.js
│   │       │       │   │   ├── sr.js
│   │       │       │   │   ├── sv.js
│   │       │       │   │   ├── th.js
│   │       │       │   │   ├── tk.js
│   │       │       │   │   ├── tr.js
│   │       │       │   │   ├── uk.js
│   │       │       │   │   ├── vi.js
│   │       │       │   │   ├── zh-CN.js
│   │       │       │   │   └── zh-TW.js
│   │       │       │   ├── select2.css
│   │       │       │   ├── select2.full.js
│   │       │       │   └── select2.js
│   │       │       ├── tinymce/
│   │       │       │   ├── langs/
│   │       │       │   │   ├── ar.js
│   │       │       │   │   ├── bg_BG.js
│   │       │       │   │   ├── bn_BD.js
│   │       │       │   │   ├── ca.js
│   │       │       │   │   ├── cs.js
│   │       │       │   │   ├── cy.js
│   │       │       │   │   ├── da.js
│   │       │       │   │   ├── de.js
│   │       │       │   │   ├── el.js
│   │       │       │   │   ├── eo.js
│   │       │       │   │   ├── es.js
│   │       │       │   │   ├── es_ES.js
│   │       │       │   │   ├── es_MX.js
│   │       │       │   │   ├── et.js
│   │       │       │   │   ├── eu.js
│   │       │       │   │   ├── fa.js
│   │       │       │   │   ├── fa_IR.js
│   │       │       │   │   ├── fi.js
│   │       │       │   │   ├── fr_FR.js
│   │       │       │   │   ├── gl.js
│   │       │       │   │   ├── he_IL.js
│   │       │       │   │   ├── hr.js
│   │       │       │   │   ├── hu_HU.js
│   │       │       │   │   ├── hy.js
│   │       │       │   │   ├── id.js
│   │       │       │   │   ├── it.js
│   │       │       │   │   ├── it_IT.js
│   │       │       │   │   ├── ja.js
│   │       │       │   │   ├── kab.js
│   │       │       │   │   ├── kk.js
│   │       │       │   │   ├── ko_KR.js
│   │       │       │   │   ├── ku.js
│   │       │       │   │   ├── lt.js
│   │       │       │   │   ├── nb_NO.js
│   │       │       │   │   ├── nl.js
│   │       │       │   │   ├── pl.js
│   │       │       │   │   ├── pt_BR.js
│   │       │       │   │   ├── pt_PT.js
│   │       │       │   │   ├── readme.md
│   │       │       │   │   ├── ro.js
│   │       │       │   │   ├── ro_RO.js
│   │       │       │   │   ├── ru.js
│   │       │       │   │   ├── sk.js
│   │       │       │   │   ├── sl.js
│   │       │       │   │   ├── sl_SI.js
│   │       │       │   │   ├── sv_SE.js
│   │       │       │   │   ├── ta.js
│   │       │       │   │   ├── ta_IN.js
│   │       │       │   │   ├── th_TH.js
│   │       │       │   │   ├── tr.js
│   │       │       │   │   ├── tr_TR.js
│   │       │       │   │   ├── uk.js
│   │       │       │   │   ├── vi.js
│   │       │       │   │   ├── zh_CN.js
│   │       │       │   │   └── zh_TW.js
│   │       │       │   ├── license.txt
│   │       │       │   └── plugins/
│   │       │       │       └── emoticons/
│   │       │       │           └── js/
│   │       │       │               └── emojis.js
│   │       │       └── webuploader/
│   │       │           ├── README.md
│   │       │           ├── Uploader.swf
│   │       │           ├── expressInstall.swf
│   │       │           ├── icons.psd
│   │       │           ├── progress.psd
│   │       │           ├── webuploader.css
│   │       │           ├── webuploader.custom.js
│   │       │           ├── webuploader.fis.js
│   │       │           ├── webuploader.flashonly.js
│   │       │           ├── webuploader.html5only.js
│   │       │           ├── webuploader.js
│   │       │           ├── webuploader.noimage.js
│   │       │           ├── webuploader.nolog.js
│   │       │           └── webuploader.withoutimage.js
│   │       └── fonts/
│   │           ├── feather/
│   │           │   └── iconfont.css
│   │           └── font-awesome/
│   │               ├── css/
│   │               │   └── font-awesome.css
│   │               └── fonts/
│   │                   └── FontAwesome.otf
│   └── web.config
├── resources/
│   ├── js/
│   │   ├── app.js
│   │   └── bootstrap.js
│   ├── lang/
│   │   ├── en/
│   │   │   ├── admin.php
│   │   │   ├── auth.php
│   │   │   ├── pagination.php
│   │   │   ├── passwords.php
│   │   │   └── validation.php
│   │   ├── zh_CN/
│   │   │   ├── admin.php
│   │   │   ├── carmis.php
│   │   │   ├── coupon.php
│   │   │   ├── dujiaoka.php
│   │   │   ├── email-test.php
│   │   │   ├── emailtpl.php
│   │   │   ├── extension.php
│   │   │   ├── global.php
│   │   │   ├── goods-group.php
│   │   │   ├── goods.php
│   │   │   ├── hyper.php
│   │   │   ├── luna.php
│   │   │   ├── menu.php
│   │   │   ├── order.php
│   │   │   ├── pay.php
│   │   │   └── system-setting.php
│   │   └── zh_TW/
│   │       ├── admin.php
│   │       ├── carmis.php
│   │       ├── coupon.php
│   │       ├── dujiaoka.php
│   │       ├── emailtpl.php
│   │       ├── extension.php
│   │       ├── global.php
│   │       ├── goods-group.php
│   │       ├── goods.php
│   │       ├── hyper.php
│   │       ├── luna.php
│   │       ├── menu.php
│   │       ├── order.php
│   │       ├── pay.php
│   │       └── system-setting.php
│   ├── sass/
│   │   └── app.scss
│   └── views/
│       ├── admin/
│       │   └── dashboard/
│       │       └── title.blade.php
│       ├── common/
│       │   ├── install.blade.php
│       │   └── notencent.blade.php
│       ├── email/
│       │   └── mail.blade.php
│       ├── hyper/
│       │   ├── errors/
│       │   │   └── error.blade.php
│       │   ├── layouts/
│       │   │   ├── _footer.blade.php
│       │   │   ├── _header.blade.php
│       │   │   ├── _nav.blade.php
│       │   │   ├── _script.blade.php
│       │   │   ├── default.blade.php
│       │   │   └── seo.blade.php
│       │   ├── readme.md
│       │   └── static_pages/
│       │       ├── bill.blade.php
│       │       ├── buy.blade.php
│       │       ├── home.blade.php
│       │       ├── orderinfo.blade.php
│       │       ├── qrpay.blade.php
│       │       └── searchOrder.blade.php
│       ├── luna/
│       │   ├── README.md
│       │   ├── errors/
│       │   │   └── error.blade.php
│       │   ├── layouts/
│       │   │   ├── _footer.blade.php
│       │   │   ├── _header.blade.php
│       │   │   ├── _nav.blade.php
│       │   │   ├── _notice.blade.php
│       │   │   ├── _notice_sm.blade.php
│       │   │   ├── _notice_xs.blade.php
│       │   │   ├── _script.blade.php
│       │   │   ├── default.blade.php
│       │   │   ├── google_translate.php
│       │   │   └── seo.blade.php
│       │   └── static_pages/
│       │       ├── bill.blade.php
│       │       ├── buy.blade.php
│       │       ├── home.blade.php
│       │       ├── orderinfo.blade.php
│       │       ├── qrpay.blade.php
│       │       └── searchOrder.blade.php
│       ├── unicorn/
│       │   ├── errors/
│       │   │   └── error.blade.php
│       │   ├── layouts/
│       │   │   ├── _footer.blade.php
│       │   │   ├── _header.blade.php
│       │   │   ├── _nav.blade.php
│       │   │   ├── _script.blade.php
│       │   │   ├── default.blade.php
│       │   │   └── seo.blade.php
│       │   └── static_pages/
│       │       ├── bill.blade.php
│       │       ├── buy.blade.php
│       │       ├── home.blade.php
│       │       ├── orderinfo.blade.php
│       │       ├── qrpay.blade.php
│       │       └── searchOrder.blade.php
│       └── vendor/
│           └── geetest/
│               └── geetest.blade.php
├── routes/
│   ├── api.php
│   ├── channels.php
│   ├── common/
│   │   ├── pay.php
│   │   └── web.php
│   ├── console.php
│   └── web.php
├── server.php
├── storage/
│   ├── app/
│   │   └── .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
Download .txt
Showing preview only (235K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2842 symbols across 295 files)

FILE: app/Admin/Actions/Post/BatchRestore.php
  class BatchRestore (line 16) | class BatchRestore extends BatchAction
    method __construct (line 24) | public function __construct(string $model = null)
    method handle (line 30) | public function handle(Request $request)
    method confirm (line 41) | public function confirm()
    method parameters (line 46) | public function parameters()

FILE: app/Admin/Actions/Post/Restore.php
  class Restore (line 16) | class Restore extends RowAction
    method __construct (line 24) | public function __construct(string $model = null)
    method handle (line 30) | public function handle(Request $request)
    method confirm (line 40) | public function confirm()
    method parameters (line 45) | public function parameters()

FILE: app/Admin/Charts/DashBoard.php
  class DashBoard (line 19) | class DashBoard extends RadialBar
    method init (line 25) | protected function init()
    method handle (line 48) | public function handle(Request $request)
    method withOrderCount (line 103) | public function withOrderCount($count)
    method withChart (line 123) | public function withChart(int $data)
    method withFooter (line 142) | public function withFooter($pending, $processing, $completed, $failure...

FILE: app/Admin/Charts/PayoutRateCard.php
  class PayoutRateCard (line 19) | class PayoutRateCard extends Donut
    method init (line 27) | protected function init()
    method handle (line 54) | public function handle(Request $request)
    method withChart (line 97) | public function withChart(array $data)
    method withContent (line 112) | protected function withContent($success, $unpaid)

FILE: app/Admin/Charts/SalesCard.php
  class SalesCard (line 20) | class SalesCard extends Bar
    method init (line 26) | protected function init()
    method handle (line 58) | public function handle(Request $request)
    method withChart (line 100) | public function withChart(array $data)
    method withContent (line 116) | public function withContent($title, $value, $style = 'success', $start...

FILE: app/Admin/Charts/SuccessOrderCard.php
  class SuccessOrderCard (line 19) | class SuccessOrderCard extends Line
    method init (line 27) | protected function init()
    method handle (line 46) | public function handle(Request $request)
    method withChart (line 85) | public function withChart(array $data)
    method withContent (line 104) | public function withContent($content)

FILE: app/Admin/Controllers/AuthController.php
  class AuthController (line 7) | class AuthController extends BaseAuthController

FILE: app/Admin/Controllers/CarmisController.php
  class CarmisController (line 18) | class CarmisController extends AdminController
    method grid (line 27) | protected function grid()
    method detail (line 67) | protected function detail($id)
    method form (line 91) | protected function form()
    method importCarmis (line 118) | public function importCarmis(Content $content)

FILE: app/Admin/Controllers/CouponController.php
  class CouponController (line 16) | class CouponController extends AdminController
    method grid (line 24) | protected function grid()
    method detail (line 63) | protected function detail($id)
    method form (line 94) | protected function form()

FILE: app/Admin/Controllers/EmailTestController.php
  class EmailTestController (line 18) | class EmailTestController extends AdminController
    method emailTest (line 31) | public function emailTest(Content $content)

FILE: app/Admin/Controllers/EmailtplController.php
  class EmailtplController (line 14) | class EmailtplController extends AdminController
    method grid (line 21) | protected function grid()
    method detail (line 56) | protected function detail($id)
    method form (line 73) | protected function form()

FILE: app/Admin/Controllers/GoodsController.php
  class GoodsController (line 18) | class GoodsController extends AdminController
    method grid (line 27) | protected function grid()
    method detail (line 90) | protected function detail($id)
    method form (line 134) | protected function form()

FILE: app/Admin/Controllers/GoodsGroupController.php
  class GoodsGroupController (line 14) | class GoodsGroupController extends AdminController
    method grid (line 22) | protected function grid()
    method detail (line 57) | protected function detail($id)
    method form (line 80) | protected function form()

FILE: app/Admin/Controllers/HomeController.php
  class HomeController (line 15) | class HomeController extends Controller
    method index (line 18) | public function index(Content $content)
    method title (line 40) | public static function title()

FILE: app/Admin/Controllers/OrderController.php
  class OrderController (line 18) | class OrderController extends AdminController
    method grid (line 27) | protected function grid()
    method detail (line 95) | protected function detail($id)
    method form (line 130) | protected function form()

FILE: app/Admin/Controllers/PayController.php
  class PayController (line 14) | class PayController extends AdminController
    method grid (line 23) | protected function grid()
    method detail (line 65) | protected function detail($id)
    method form (line 106) | protected function form()

FILE: app/Admin/Controllers/SystemSettingController.php
  class SystemSettingController (line 18) | class SystemSettingController extends AdminController
    method systemSetting (line 31) | public function systemSetting(Content $content)

FILE: app/Admin/Forms/EmailTest.php
  class EmailTest (line 18) | class EmailTest extends Form
    method handle (line 27) | public function handle(array $input)
    method form (line 71) | public function form()
    method default (line 80) | public function default()

FILE: app/Admin/Forms/ImportCarmis.php
  class ImportCarmis (line 10) | class ImportCarmis extends Form
    method handle (line 20) | public function handle(array $input)
    method form (line 60) | public function form()

FILE: app/Admin/Forms/SystemSetting.php
  class SystemSetting (line 9) | class SystemSetting extends Form
    method handle (line 18) | public function handle(array $input)
    method form (line 29) | public function form()
    method default (line 97) | public function default()

FILE: app/Admin/Repositories/Carmis.php
  class Carmis (line 8) | class Carmis extends EloquentRepository

FILE: app/Admin/Repositories/Coupon.php
  class Coupon (line 8) | class Coupon extends EloquentRepository

FILE: app/Admin/Repositories/Emailtpl.php
  class Emailtpl (line 8) | class Emailtpl extends EloquentRepository

FILE: app/Admin/Repositories/Goods.php
  class Goods (line 8) | class Goods extends EloquentRepository

FILE: app/Admin/Repositories/GoodsGroup.php
  class GoodsGroup (line 8) | class GoodsGroup extends EloquentRepository

FILE: app/Admin/Repositories/Order.php
  class Order (line 8) | class Order extends EloquentRepository

FILE: app/Admin/Repositories/Pay.php
  class Pay (line 8) | class Pay extends EloquentRepository

FILE: app/Console/Kernel.php
  class Kernel (line 8) | class Kernel extends ConsoleKernel
    method schedule (line 25) | protected function schedule(Schedule $schedule)
    method commands (line 36) | protected function commands()

FILE: app/Events/GoodsDeleted.php
  class GoodsDeleted (line 14) | class GoodsDeleted
    method __construct (line 25) | public function __construct(Goods $goods)
    method broadcastOn (line 35) | public function broadcastOn()

FILE: app/Events/GoodsGroupDeleted.php
  class GoodsGroupDeleted (line 14) | class GoodsGroupDeleted
    method __construct (line 25) | public function __construct(GoodsGroup $goodsGroup)
    method broadcastOn (line 35) | public function broadcastOn()

FILE: app/Events/OrderUpdated.php
  class OrderUpdated (line 14) | class OrderUpdated
    method __construct (line 25) | public function __construct(Order $order)
    method broadcastOn (line 35) | public function broadcastOn()

FILE: app/Exceptions/AppException.php
  class AppException (line 7) | class AppException extends \Exception
    method __construct (line 10) | public function __construct($message = "", $code = 0, \Throwable $prev...

FILE: app/Exceptions/Handler.php
  class Handler (line 8) | class Handler extends ExceptionHandler
    method report (line 37) | public function report(Exception $exception)
    method render (line 51) | public function render($request, Exception $exception)

FILE: app/Exceptions/RuleValidationException.php
  class RuleValidationException (line 7) | class RuleValidationException extends \Exception
    method __construct (line 10) | public function __construct($message = "", $code = 400, \Throwable $pr...

FILE: app/Helpers/functions.php
  function replace_mail_tpl (line 28) | function replace_mail_tpl($mailtpl = [], $data = [])
  function dujiaoka_config_get (line 58) | function dujiaoka_config_get(string $key, $default = null)
  function format_wholesale_price (line 77) | function format_wholesale_price(string $wholesalePriceArr): ?array
  function delete_html_code (line 103) | function delete_html_code(string $str): string
  function format_charge_input (line 128) | function format_charge_input(string $charge): ?array
  function site_url (line 158) | function site_url()
  function md5_signquery (line 168) | function md5_signquery(array $parameter, string $signKey)
  function signquery_string (line 193) | function signquery_string(array $data)
  function picture_ulr (line 215) | function picture_ulr($file, $getHost = false)
  function assoc_unique (line 223) | function assoc_unique($arr, $key)

FILE: app/Http/Controllers/BaseController.php
  class BaseController (line 12) | class BaseController extends Controller
    method render (line 28) | protected function render(string $tpl, $data = [], string $pageTitle =...
    method err (line 46) | protected function err(string $content, $jumpUri = '')

FILE: app/Http/Controllers/Controller.php
  class Controller (line 10) | class Controller extends BaseController

FILE: app/Http/Controllers/Home/HomeController.php
  class HomeController (line 17) | class HomeController extends BaseController
    method __construct (line 32) | public function __construct()
    method index (line 47) | public function index(Request $request)
    method buy (line 63) | public function buy(int $id)
    method geetest (line 95) | public function geetest(Request $request)
    method install (line 118) | public function install(Request $request)
    method doInstall (line 132) | public function doInstall(Request $request)

FILE: app/Http/Controllers/Home/OrderController.php
  class OrderController (line 24) | class OrderController extends BaseController
    method __construct (line 40) | public function __construct()
    method createOrder (line 57) | public function createOrder(Request $request)
    method queueCookie (line 98) | private function queueCookie(string $orderSN) : void
    method bill (line 121) | public function bill(string $orderSN)
    method checkOrderStatus (line 144) | public function checkOrderStatus(string $orderSN)
    method detailOrderSN (line 171) | public function detailOrderSN(string $orderSN)
    method searchOrderBySN (line 191) | public function searchOrderBySN(Request $request)
    method searchOrderByEmail (line 206) | public function searchOrderByEmail(Request $request)
    method searchOrderByBrowser (line 233) | public function searchOrderByBrowser(Request $request)
    method orderSearch (line 254) | public function orderSearch(Request $request)

FILE: app/Http/Controllers/Pay/AlipayController.php
  class AlipayController (line 10) | class AlipayController extends PayController
    method gateway (line 19) | public function gateway(string $payway, string $orderSN)
    method notifyUrl (line 77) | public function notifyUrl(Request $request)

FILE: app/Http/Controllers/Pay/CoinbaseController.php
  class CoinbaseController (line 8) | class CoinbaseController extends PayController
    method gateway (line 11) | public function gateway(string $payway, string $orderSN)
    method notifyUrl (line 81) | public function notifyUrl(Request $request)

FILE: app/Http/Controllers/Pay/EpusdtController.php
  class EpusdtController (line 19) | class EpusdtController extends PayController
    method gateway (line 21) | public function gateway(string $payway, string $orderSN)
    method epusdtSign (line 50) | private function epusdtSign(array $parameter, string $signKey)
    method notifyUrl (line 71) | public function notifyUrl(Request $request)
    method returnUrl (line 96) | public function returnUrl(Request $request)

FILE: app/Http/Controllers/Pay/MapayController.php
  class MapayController (line 9) | class MapayController extends PayController
    method gateway (line 12) | public function gateway(string $payway, string $orderSN)
    method notifyUrl (line 54) | public function notifyUrl(Request $request)

FILE: app/Http/Controllers/Pay/PayjsController.php
  class PayjsController (line 10) | class PayjsController extends PayController
    method gateway (line 13) | public function gateway(string $payway, string $orderSN)
    method notifyUrl (line 49) | public function notifyUrl(Request $request)

FILE: app/Http/Controllers/Pay/PaypalPayController.php
  class PaypalPayController (line 24) | class PaypalPayController extends PayController
    method gateway (line 29) | public function gateway(string $payway, string $orderSN)
    method returnUrl (line 80) | public function returnUrl(Request $request)
    method notifyUrl (line 126) | public function notifyUrl(Request $request)
    method get_JsonData (line 138) | private function get_JsonData()

FILE: app/Http/Controllers/Pay/PaysapiController.php
  class PaysapiController (line 9) | class PaysapiController extends PayController
    method gateway (line 14) | public function gateway(string $payway, string $orderSN)
    method notifyUrl (line 81) | public function notifyUrl(Request $request)
    method returnUrl (line 106) | public function returnUrl(Request $request)

FILE: app/Http/Controllers/Pay/StripeController.php
  class StripeController (line 12) | class StripeController extends PayController
    method gateway (line 15) | public function gateway(string $payway, string $orderSN)
    method returnUrl (line 433) | public function returnUrl(Request $request)
    method check (line 458) | public function check(Request $request)
    method charge (line 487) | public function charge(Request $request)
    method getUsdCurrency (line 520) | public function getUsdCurrency($cny)

FILE: app/Http/Controllers/Pay/TokenPayController.php
  class TokenPayController (line 19) | class TokenPayController extends PayController
    method gateway (line 21) | public function gateway(string $payway, string $orderSN)
    method VerifySign (line 51) | private function VerifySign(array $parameter, string $signKey)
    method notifyUrl (line 71) | public function notifyUrl(Request $request)
    method returnUrl (line 97) | public function returnUrl(Request $request)

FILE: app/Http/Controllers/Pay/VpayController.php
  class VpayController (line 15) | class VpayController extends PayController
    method gateway (line 19) | public function gateway(string $payway, string $orderSN)
    method notifyUrl (line 52) | public function notifyUrl(Request $request)
    method returnUrl (line 86) | public function returnUrl(Request $request)

FILE: app/Http/Controllers/Pay/WepayController.php
  class WepayController (line 9) | class WepayController extends PayController
    method gateway (line 12) | public function gateway(string $payway, string $orderSN)
    method notifyUrl (line 56) | public function notifyUrl()

FILE: app/Http/Controllers/Pay/YipayController.php
  class YipayController (line 8) | class YipayController extends PayController
    method gateway (line 11) | public function gateway(string $payway, string $orderSN)
    method notifyUrl (line 59) | public function notifyUrl(Request $request)
    method returnUrl (line 95) | public function returnUrl(Request $request)

FILE: app/Http/Controllers/PayController.php
  class PayController (line 9) | class PayController extends BaseController
    method __construct (line 44) | public function __construct()
    method checkOrder (line 61) | public function checkOrder(string $orderSN)
    method loadGateWay (line 89) | public function loadGateWay(string $orderSN, string $payCheck)
    method redirectGateway (line 113) | public function redirectGateway(string $handle,string $payway, string ...

FILE: app/Http/Kernel.php
  class Kernel (line 10) | class Kernel extends HttpKernel

FILE: app/Http/Middleware/Authenticate.php
  class Authenticate (line 7) | class Authenticate extends Middleware
    method redirectTo (line 15) | protected function redirectTo($request)

FILE: app/Http/Middleware/CheckForMaintenanceMode.php
  class CheckForMaintenanceMode (line 7) | class CheckForMaintenanceMode extends Middleware

FILE: app/Http/Middleware/DujiaoBoot.php
  class DujiaoBoot (line 9) | class DujiaoBoot
    method handle (line 18) | public function handle($request, Closure $next)

FILE: app/Http/Middleware/DujiaoSystem.php
  class DujiaoSystem (line 8) | class DujiaoSystem
    method handle (line 17) | public function handle($request, Closure $next)

FILE: app/Http/Middleware/EncryptCookies.php
  class EncryptCookies (line 7) | class EncryptCookies extends Middleware

FILE: app/Http/Middleware/InstallCheck.php
  class InstallCheck (line 7) | class InstallCheck
    method handle (line 16) | public function handle($request, Closure $next)

FILE: app/Http/Middleware/PayGateWay.php
  class PayGateWay (line 7) | class PayGateWay
    method handle (line 17) | public function handle($request, Closure $next)

FILE: app/Http/Middleware/RedirectIfAuthenticated.php
  class RedirectIfAuthenticated (line 9) | class RedirectIfAuthenticated
    method handle (line 19) | public function handle($request, Closure $next, $guard = null)

FILE: app/Http/Middleware/TrimStrings.php
  class TrimStrings (line 7) | class TrimStrings extends Middleware

FILE: app/Http/Middleware/TrustProxies.php
  class TrustProxies (line 8) | class TrustProxies extends Middleware

FILE: app/Http/Middleware/VerifyCsrfToken.php
  class VerifyCsrfToken (line 7) | class VerifyCsrfToken extends Middleware

FILE: app/Jobs/ApiHook.php
  class ApiHook (line 12) | class ApiHook implements ShouldQueue
    method __construct (line 47) | public function __construct(Order $order)
    method handle (line 58) | public function handle()

FILE: app/Jobs/BarkPush.php
  class BarkPush (line 15) | class BarkPush implements ShouldQueue
    method __construct (line 50) | public function __construct(Order $order)
    method handle (line 61) | public function handle()

FILE: app/Jobs/CouponBack.php
  class CouponBack (line 12) | class CouponBack implements ShouldQueue
    method __construct (line 37) | public function __construct(Order $order)
    method handle (line 47) | public function handle()

FILE: app/Jobs/MailSend.php
  class MailSend (line 13) | class MailSend implements ShouldQueue
    method __construct (line 44) | public function __construct(string $to, string $title, string $content)
    method handle (line 56) | public function handle()

FILE: app/Jobs/OrderExpired.php
  class OrderExpired (line 12) | class OrderExpired implements ShouldQueue
    method __construct (line 43) | public function __construct(string $orderSN)
    method handle (line 53) | public function handle()

FILE: app/Jobs/ServerJiang.php
  class ServerJiang (line 12) | class ServerJiang implements ShouldQueue
    method __construct (line 40) | public function __construct(Order $order)
    method handle (line 50) | public function handle()

FILE: app/Jobs/TelegramPush.php
  class TelegramPush (line 14) | class TelegramPush implements ShouldQueue
    method __construct (line 49) | public function __construct(Order $order)
    method handle (line 60) | public function handle()

FILE: app/Jobs/WorkWeiXinPush.php
  class WorkWeiXinPush (line 14) | class WorkWeiXinPush implements ShouldQueue
    method __construct (line 49) | public function __construct(Order $order)
    method handle (line 60) | public function handle()

FILE: app/Listeners/GoodsDeleted.php
  class GoodsDeleted (line 10) | class GoodsDeleted
    method __construct (line 17) | public function __construct()
    method handle (line 28) | public function handle(GoodsDeletedEvent $event)

FILE: app/Listeners/GoodsGroupDeleted.php
  class GoodsGroupDeleted (line 10) | class GoodsGroupDeleted
    method __construct (line 17) | public function __construct()
    method handle (line 28) | public function handle(GoodsGroupDeletedEvent $event)

FILE: app/Listeners/OrderUpdated.php
  class OrderUpdated (line 12) | class OrderUpdated
    method __construct (line 19) | public function __construct()
    method handle (line 30) | public function handle(OrderUpdatedEvent $event)
    method sendMailToOrderStatus (line 75) | private static function sendMailToOrderStatus(array $mailtpl, array $o...

FILE: app/Models/BaseModel.php
  class BaseModel (line 14) | class BaseModel extends Model
    method getIsOpenMap (line 32) | public static function getIsOpenMap()

FILE: app/Models/Carmis.php
  class Carmis (line 7) | class Carmis extends BaseModel
    method getStatusMap (line 33) | public static function getStatusMap()
    method goods (line 50) | public function goods()

FILE: app/Models/Coupon.php
  class Coupon (line 7) | class Coupon extends BaseModel
    method goods (line 43) | public function goods()
    method getStatusUseMap (line 49) | public static function getStatusUseMap()

FILE: app/Models/Emailtpl.php
  class Emailtpl (line 8) | class Emailtpl extends Model

FILE: app/Models/Goods.php
  class Goods (line 9) | class Goods extends BaseModel
    method group (line 29) | public function group()
    method coupon (line 43) | public function coupon()
    method carmis (line 57) | public function carmis()
    method getInStockAttribute (line 69) | public function getInStockAttribute()
    method getGoodsTypeMap (line 89) | public static function getGoodsTypeMap()

FILE: app/Models/GoodsGroup.php
  class GoodsGroup (line 9) | class GoodsGroup extends BaseModel
    method goods (line 29) | public function goods()

FILE: app/Models/Order.php
  class Order (line 8) | class Order extends BaseModel
    method getStatusMap (line 74) | public static function getStatusMap()
    method getTypeMap (line 96) | public static function getTypeMap()
    method goods (line 113) | public function goods()
    method coupon (line 127) | public function coupon()
    method pay (line 141) | public function pay()

FILE: app/Models/Pay.php
  class Pay (line 8) | class Pay extends BaseModel
    method getMethodMap (line 40) | public static function getMethodMap()
    method getClientMap (line 48) | public static function getClientMap()

FILE: app/Providers/AppServiceProvider.php
  class AppServiceProvider (line 15) | class AppServiceProvider extends ServiceProvider
    method register (line 22) | public function register()
    method boot (line 56) | public function boot()

FILE: app/Providers/AuthServiceProvider.php
  class AuthServiceProvider (line 8) | class AuthServiceProvider extends ServiceProvider
    method boot (line 24) | 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/EventServiceProvider.php
  class EventServiceProvider (line 13) | class EventServiceProvider extends ServiceProvider
    method boot (line 40) | public function boot()

FILE: app/Providers/RouteServiceProvider.php
  class RouteServiceProvider (line 8) | class RouteServiceProvider extends ServiceProvider
    method boot (line 31) | public function boot()
    method map (line 43) | public function map()
    method mapWebRoutes (line 59) | protected function mapWebRoutes()
    method mapApiRoutes (line 73) | protected function mapApiRoutes()

FILE: app/Rules/SearchPwd.php
  class SearchPwd (line 8) | class SearchPwd implements Rule
    method __construct (line 15) | public function __construct()
    method passes (line 27) | public function passes($attribute, $value)
    method message (line 40) | public function message()

FILE: app/Rules/VerifyImg.php
  class VerifyImg (line 8) | class VerifyImg implements Rule
    method __construct (line 15) | public function __construct()
    method passes (line 27) | public function passes($attribute, $value)
    method message (line 40) | public function message()

FILE: app/Service/CarmisService.php
  class CarmisService (line 15) | class CarmisService
    method withGoodsByAmountAndStatusUnsold (line 29) | public function withGoodsByAmountAndStatusUnsold(int $goodsID, int $by...
    method soldByIDS (line 49) | public function soldByIDS(array $ids): bool

FILE: app/Service/CouponService.php
  class CouponService (line 15) | class CouponService
    method withHasGoods (line 29) | public function withHasGoods(string $coupon, int $goodsID)
    method used (line 42) | public function used(string $coupon): bool
    method retDecr (line 58) | public function retDecr(string $coupon)
    method retIncrByID (line 75) | public function retIncrByID(int $id)

FILE: app/Service/EmailtplService.php
  class EmailtplService (line 15) | class EmailtplService
    method detailByToken (line 28) | public function detailByToken(string $token): Emailtpl

FILE: app/Service/GoodsService.php
  class GoodsService (line 28) | class GoodsService
    method withGroup (line 40) | public function withGroup(): ?array
    method detail (line 65) | public function detail(int $id)
    method format (line 85) | public function format(Goods $goods)
    method validatorGoodsStatus (line 109) | public function validatorGoodsStatus(Goods $goods): Goods
    method inStockDecr (line 131) | public function inStockDecr(int $id, int $number = 1): bool
    method salesVolumeIncr (line 147) | public function salesVolumeIncr(int $id, int $number = 1): bool

FILE: app/Service/OrderProcessService.php
  class OrderProcessService (line 38) | class OrderProcessService
    method __construct (line 121) | public function __construct()
    method setPayID (line 135) | public function setPayID(int $payID): void
    method setBuyIP (line 146) | public function setBuyIP($buyIP): void
    method setSearchPwd (line 155) | public function setSearchPwd($searchPwd): void
    method setBuyAmount (line 164) | public function setBuyAmount($buyAmount): void
    method setEmail (line 173) | public function setEmail($email): void
    method setGoods (line 187) | public function setGoods(Goods $goods)
    method setCoupon (line 201) | public function setCoupon(?Coupon $coupon)
    method setOtherIpt (line 215) | public function setOtherIpt(?string $otherIpt)
    method calculateTheCouponPrice (line 229) | private function calculateTheCouponPrice(): float
    method calculateTheWholesalePrice (line 247) | private function calculateTheWholesalePrice(): float
    method calculateTheTotalPrice (line 275) | private function calculateTheTotalPrice(): float
    method calculateTheActualPrice (line 293) | private function calculateTheActualPrice(float $totalPrice, float $cou...
    method createOrder (line 312) | public function createOrder(): Order
    method completedOrder (line 385) | public function completedOrder(string $orderSN, float $actualPrice, st...
    method processManual (line 450) | public function processManual(Order $order)
    method processAuto (line 489) | public function processAuto(Order $order): Order

FILE: app/Service/OrderService.php
  class OrderService (line 24) | class OrderService
    method __construct (line 40) | public function __construct()
    method validatorCreateOrder (line 58) | public function validatorCreateOrder(Request $request): void
    method validatorGoods (line 103) | public function validatorGoods(Request $request): Goods
    method validatorLoopCarmis (line 130) | public function validatorLoopCarmis(Request $request)
    method validatorCoupon (line 154) | public function validatorCoupon(Request $request):? Coupon
    method validatorChargeInput (line 185) | public function validatorChargeInput(Goods $goods, Request $request): ...
    method detailOrderSN (line 212) | public function detailOrderSN(string $orderSN):? Order
    method expiredOrderSN (line 228) | public function expiredOrderSN(string $orderSN): bool
    method couponIsBack (line 243) | public function couponIsBack(string $orderSN): bool
    method withEmailAndPassword (line 259) | public function withEmailAndPassword(string $email, string $searchPwd ...
    method byOrderSNS (line 281) | public function byOrderSNS(array $orderSNS)

FILE: app/Service/PayService.php
  class PayService (line 15) | class PayService
    method pays (line 28) | public function pays(string $payClient = Pay::PAY_CLIENT_PC): ?array
    method detailByCheck (line 47) | public function detailByCheck(string $check)
    method detail (line 66) | public function detail(int $id)

FILE: app/User.php
  class User (line 9) | class User extends Authenticatable

FILE: database/seeds/DatabaseSeeder.php
  class DatabaseSeeder (line 5) | class DatabaseSeeder extends Seeder
    method run (line 12) | public function run()

FILE: database/seeds/OrderTableSeeder.php
  class OrderTableSeeder (line 5) | class OrderTableSeeder extends Seeder
    method run (line 12) | public function run()

FILE: database/sql/install.sql
  type `admin_menu` (line 8) | CREATE TABLE `admin_menu` (
  type `admin_permission_menu` (line 55) | CREATE TABLE `admin_permission_menu` (
  type `admin_permissions` (line 73) | CREATE TABLE `admin_permissions` (
  type `admin_role_menu` (line 103) | CREATE TABLE `admin_role_menu` (
  type `admin_role_permissions` (line 121) | CREATE TABLE `admin_role_permissions` (
  type `admin_role_users` (line 139) | CREATE TABLE `admin_role_users` (
  type `admin_roles` (line 158) | CREATE TABLE `admin_roles` (
  type `admin_settings` (line 179) | CREATE TABLE `admin_settings` (
  type `admin_users` (line 197) | CREATE TABLE `admin_users` (
  type `carmis` (line 221) | CREATE TABLE `carmis` (
  type `coupons` (line 244) | CREATE TABLE `coupons` (
  type `coupons_goods` (line 268) | CREATE TABLE `coupons_goods` (
  type `emailtpls` (line 285) | CREATE TABLE `emailtpls` (
  type `failed_jobs` (line 312) | CREATE TABLE `failed_jobs` (
  type `goods` (line 332) | CREATE TABLE `goods` (
  type `goods_group` (line 368) | CREATE TABLE `goods_group` (
  type `migrations` (line 389) | CREATE TABLE `migrations` (
  type `orders` (line 406) | CREATE TABLE `orders` (
  type `pays` (line 446) | CREATE TABLE `pays` (

FILE: dcat_admin_ide_helper.php
  class Grid (line 172) | class Grid {}
  class MiniGrid (line 174) | class MiniGrid extends Grid {}
  class Show (line 335) | class Show {}
  class Form (line 340) | class Form {}
  class Column (line 348) | class Column {}
  class Filter (line 353) | class Filter {}
  class Field (line 360) | class Field {}

FILE: public/assets/hyper/js/hyper.js
  function Limg (line 79) | function Limg() {

FILE: public/assets/luna/js/viewerjs/viewer.common.js
  function _typeof (line 13) | function _typeof(obj) {
  function _classCallCheck (line 29) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 35) | function _defineProperties(target, props) {
  function _createClass (line 45) | function _createClass(Constructor, protoProps, staticProps) {
  function _defineProperty (line 51) | function _defineProperty(obj, key, value) {
  function ownKeys (line 66) | function ownKeys(object, enumerableOnly) {
  function _objectSpread2 (line 80) | function _objectSpread2(target) {
  function isString (line 392) | function isString(value) {
  function isNumber (line 406) | function isNumber(value) {
  function isUndefined (line 415) | function isUndefined(value) {
  function isObject (line 424) | function isObject(value) {
  function isPlainObject (line 434) | function isPlainObject(value) {
  function isFunction (line 453) | function isFunction(value) {
  function forEach (line 463) | function forEach(data, callback) {
  function setStyle (line 516) | function setStyle(element, styles) {
  function escapeHTMLEntities (line 532) | function escapeHTMLEntities(value) {
  function hasClass (line 542) | function hasClass(element, value) {
  function addClass (line 555) | function addClass(element, value) {
  function removeClass (line 586) | function removeClass(element, value) {
  function toggleClass (line 614) | function toggleClass(element, value, added) {
  function hyphenate (line 640) | function hyphenate(value) {
  function getData (line 650) | function getData(element, name) {
  function setData (line 668) | function setData(element, name, data) {
  function removeListener (line 716) | function removeListener(element, type, listener) {
  function addListener (line 748) | function addListener(element, type, listener) {
  function dispatchEvent (line 791) | function dispatchEvent(element, type, data, options) {
  function getOffset (line 813) | function getOffset(element) {
  function getTransforms (line 826) | function getTransforms(_ref) {
  function getImageNameFromURL (line 871) | function getImageNameFromURL(url) {
  function getImageNaturalSizes (line 883) | function getImageNaturalSizes(image, options, callback) {
  function getResponsiveClass (line 924) | function getResponsiveClass(type) {
  function getMaxZoomRatio (line 945) | function getMaxZoomRatio(pointers) {
  function getPointer (line 974) | function getPointer(_ref2, endOnly) {
  function getPointersCenter (line 993) | function getPointersCenter(pointers) {
  function Viewer (line 2903) | function Viewer(element) {

FILE: public/assets/luna/js/viewerjs/viewer.esm.js
  function _typeof (line 11) | function _typeof(obj) {
  function _classCallCheck (line 27) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 33) | function _defineProperties(target, props) {
  function _createClass (line 43) | function _createClass(Constructor, protoProps, staticProps) {
  function _defineProperty (line 49) | function _defineProperty(obj, key, value) {
  function ownKeys (line 64) | function ownKeys(object, enumerableOnly) {
  function _objectSpread2 (line 78) | function _objectSpread2(target) {
  function isString (line 390) | function isString(value) {
  function isNumber (line 404) | function isNumber(value) {
  function isUndefined (line 413) | function isUndefined(value) {
  function isObject (line 422) | function isObject(value) {
  function isPlainObject (line 432) | function isPlainObject(value) {
  function isFunction (line 451) | function isFunction(value) {
  function forEach (line 461) | function forEach(data, callback) {
  function setStyle (line 514) | function setStyle(element, styles) {
  function escapeHTMLEntities (line 530) | function escapeHTMLEntities(value) {
  function hasClass (line 540) | function hasClass(element, value) {
  function addClass (line 553) | function addClass(element, value) {
  function removeClass (line 584) | function removeClass(element, value) {
  function toggleClass (line 612) | function toggleClass(element, value, added) {
  function hyphenate (line 638) | function hyphenate(value) {
  function getData (line 648) | function getData(element, name) {
  function setData (line 666) | function setData(element, name, data) {
  function removeListener (line 714) | function removeListener(element, type, listener) {
  function addListener (line 746) | function addListener(element, type, listener) {
  function dispatchEvent (line 789) | function dispatchEvent(element, type, data, options) {
  function getOffset (line 811) | function getOffset(element) {
  function getTransforms (line 824) | function getTransforms(_ref) {
  function getImageNameFromURL (line 869) | function getImageNameFromURL(url) {
  function getImageNaturalSizes (line 881) | function getImageNaturalSizes(image, options, callback) {
  function getResponsiveClass (line 922) | function getResponsiveClass(type) {
  function getMaxZoomRatio (line 943) | function getMaxZoomRatio(pointers) {
  function getPointer (line 972) | function getPointer(_ref2, endOnly) {
  function getPointersCenter (line 991) | function getPointersCenter(pointers) {
  function Viewer (line 2901) | function Viewer(element) {

FILE: public/assets/luna/js/viewerjs/viewer.js
  function _typeof (line 17) | function _typeof(obj) {
  function _classCallCheck (line 33) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 39) | function _defineProperties(target, props) {
  function _createClass (line 49) | function _createClass(Constructor, protoProps, staticProps) {
  function _defineProperty (line 55) | function _defineProperty(obj, key, value) {
  function ownKeys (line 70) | function ownKeys(object, enumerableOnly) {
  function _objectSpread2 (line 84) | function _objectSpread2(target) {
  function isString (line 396) | function isString(value) {
  function isNumber (line 410) | function isNumber(value) {
  function isUndefined (line 419) | function isUndefined(value) {
  function isObject (line 428) | function isObject(value) {
  function isPlainObject (line 438) | function isPlainObject(value) {
  function isFunction (line 457) | function isFunction(value) {
  function forEach (line 467) | function forEach(data, callback) {
  function setStyle (line 520) | function setStyle(element, styles) {
  function escapeHTMLEntities (line 536) | function escapeHTMLEntities(value) {
  function hasClass (line 546) | function hasClass(element, value) {
  function addClass (line 559) | function addClass(element, value) {
  function removeClass (line 590) | function removeClass(element, value) {
  function toggleClass (line 618) | function toggleClass(element, value, added) {
  function hyphenate (line 644) | function hyphenate(value) {
  function getData (line 654) | function getData(element, name) {
  function setData (line 672) | function setData(element, name, data) {
  function removeListener (line 720) | function removeListener(element, type, listener) {
  function addListener (line 752) | function addListener(element, type, listener) {
  function dispatchEvent (line 795) | function dispatchEvent(element, type, data, options) {
  function getOffset (line 817) | function getOffset(element) {
  function getTransforms (line 830) | function getTransforms(_ref) {
  function getImageNameFromURL (line 875) | function getImageNameFromURL(url) {
  function getImageNaturalSizes (line 887) | function getImageNaturalSizes(image, options, callback) {
  function getResponsiveClass (line 928) | function getResponsiveClass(type) {
  function getMaxZoomRatio (line 949) | function getMaxZoomRatio(pointers) {
  function getPointer (line 978) | function getPointer(_ref2, endOnly) {
  function getPointersCenter (line 997) | function getPointersCenter(pointers) {
  function Viewer (line 2907) | function Viewer(element) {

FILE: public/assets/luna/layui/lay/modules/jquery.js
  function n (line 2) | function n(e){var t=!!e&&"length"in e&&e.length,n=pe.type(e);return"func...
  function r (line 2) | function r(e,t,n){if(pe.isFunction(t))return pe.grep(e,function(e,r){ret...
  function i (line 2) | function i(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}
  function o (line 2) | function o(e){var t={};return pe.each(e.match(De)||[],function(e,n){t[n]...
  function a (line 2) | function a(){re.addEventListener?(re.removeEventListener("DOMContentLoad...
  function s (line 2) | function s(){(re.addEventListener||"load"===e.event.type||"complete"===r...
  function u (line 2) | function u(e,t,n){if(void 0===n&&1===e.nodeType){var r="data-"+t.replace...
  function l (line 2) | function l(e){var t;for(t in e)if(("data"!==t||!pe.isEmptyObject(e[t]))&...
  function c (line 2) | function c(e,t,n,r){if(He(e)){var i,o,a=pe.expando,s=e.nodeType,u=s?pe.c...
  function f (line 2) | function f(e,t,n){if(He(e)){var r,i,o=e.nodeType,a=o?pe.cache:e,s=o?e[pe...
  function d (line 2) | function d(e,t,n,r){var i,o=1,a=20,s=r?function(){return r.cur()}:functi...
  function p (line 2) | function p(e){var t=ze.split("|"),n=e.createDocumentFragment();if(n.crea...
  function h (line 2) | function h(e,t){var n,r,i=0,o="undefined"!=typeof e.getElementsByTagName...
  function g (line 2) | function g(e,t){for(var n,r=0;null!=(n=e[r]);r++)pe._data(n,"globalEval"...
  function m (line 2) | function m(e){Be.test(e.type)&&(e.defaultChecked=e.checked)}
  function y (line 2) | function y(e,t,n,r,i){for(var o,a,s,u,l,c,f,d=e.length,y=p(t),v=[],x=0;x...
  function v (line 2) | function v(){return!0}
  function x (line 2) | function x(){return!1}
  function b (line 2) | function b(){try{return re.activeElement}catch(e){}}
  function w (line 2) | function w(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof ...
  function T (line 2) | function T(e,t){return pe.nodeName(e,"table")&&pe.nodeName(11!==t.nodeTy...
  function C (line 2) | function C(e){return e.type=(null!==pe.find.attr(e,"type"))+"/"+e.type,e}
  function E (line 2) | function E(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribu...
  function N (line 2) | function N(e,t){if(1===t.nodeType&&pe.hasData(e)){var n,r,i,o=pe._data(e...
  function k (line 2) | function k(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase...
  function S (line 2) | function S(e,t,n,r){t=oe.apply([],t);var i,o,a,s,u,l,c=0,f=e.length,d=f-...
  function A (line 2) | function A(e,t,n){for(var r,i=t?pe.filter(t,e):e,o=0;null!=(r=i[o]);o++)...
  function D (line 2) | function D(e,t){var n=pe(t.createElement(e)).appendTo(t.body),r=pe.css(n...
  function j (line 2) | function j(e){var t=re,n=lt[e];return n||(n=D(e,t),"none"!==n&&n||(ut=(u...
  function L (line 2) | function L(e,t){return{get:function(){return e()?void delete this.get:(t...
  function H (line 2) | function H(e){if(e in Et)return e;for(var t=e.charAt(0).toUpperCase()+e....
  function q (line 2) | function q(e,t){for(var n,r,i,o=[],a=0,s=e.length;a<s;a++)r=e[a],r.style...
  function _ (line 2) | function _(e,t,n){var r=bt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2...
  function F (line 2) | function F(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t...
  function M (line 2) | function M(t,n,r){var i=!0,o="width"===n?t.offsetWidth:t.offsetHeight,a=...
  function O (line 2) | function O(e,t,n,r,i){return new O.prototype.init(e,t,n,r,i)}
  function R (line 2) | function R(){return e.setTimeout(function(){Nt=void 0}),Nt=pe.now()}
  function P (line 2) | function P(e,t){var n,r={height:e},i=0;for(t=t?1:0;i<4;i+=2-t)n=Oe[i],r[...
  function B (line 2) | function B(e,t,n){for(var r,i=($.tweeners[t]||[]).concat($.tweeners["*"]...
  function W (line 2) | function W(e,t,n){var r,i,o,a,s,u,l,c,f=this,d={},p=e.style,h=e.nodeType...
  function I (line 2) | function I(e,t){var n,r,i,o,a;for(n in e)if(r=pe.camelCase(n),i=t[r],o=e...
  function $ (line 2) | function $(e,t,n){var r,i,o=0,a=$.prefilters.length,s=pe.Deferred().alwa...
  function z (line 2) | function z(e){return pe.attr(e,"class")||""}
  function X (line 2) | function X(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
  function U (line 2) | function U(e,t,n,r){function i(s){var u;return o[s]=!0,pe.each(e[s]||[],...
  function V (line 2) | function V(e,t){var n,r,i=pe.ajaxSettings.flatOptions||{};for(r in t)voi...
  function Y (line 2) | function Y(e,t,n){for(var r,i,o,a,s=e.contents,u=e.dataTypes;"*"===u[0];...
  function J (line 2) | function J(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for...
  function G (line 2) | function G(e){return e.style&&e.style.display||pe.css(e,"display")}
  function K (line 2) | function K(e){for(;e&&1===e.nodeType;){if("none"===G(e)||"hidden"===e.ty...
  function Q (line 2) | function Q(e,t,n,r){var i;if(pe.isArray(t))pe.each(t,function(t,i){n||rn...
  function Z (line 2) | function Z(){try{return new e.XMLHttpRequest}catch(t){}}
  function ee (line 2) | function ee(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(...
  function te (line 2) | function te(e){return pe.isWindow(e)?e:9===e.nodeType&&(e.defaultView||e...
  function t (line 2) | function t(e,t,n,r){var i,o,a,s,u,l,f,p,h=t&&t.ownerDocument,g=t?t.nodeT...
  function n (line 2) | function n(){function e(n,r){return t.push(n+" ")>T.cacheLength&&delete ...
  function r (line 2) | function r(e){return e[P]=!0,e}
  function i (line 2) | function i(e){var t=H.createElement("div");try{return!!e(t)}catch(n){ret...
  function o (line 2) | function o(e,t){for(var n=e.split("|"),r=n.length;r--;)T.attrHandle[n[r]...
  function a (line 2) | function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sour...
  function s (line 2) | function s(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
  function u (line 2) | function u(e){return function(t){var n=t.nodeName.toLowerCase();return("...
  function l (line 2) | function l(e){return r(function(t){return t=+t,r(function(n,r){for(var i...
  function c (line 2) | function c(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
  function f (line 2) | function f(){}
  function d (line 2) | function d(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
  function p (line 2) | function p(e,t,n){var r=t.dir,i=n&&"parentNode"===r,o=I++;return t.first...
  function h (line 2) | function h(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)...
  function g (line 2) | function g(e,n,r){for(var i=0,o=n.length;i<o;i++)t(e,n[i],r);return r}
  function m (line 2) | function m(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o...
  function y (line 2) | function y(e,t,n,i,o,a){return i&&!i[P]&&(i=y(i)),o&&!o[P]&&(o=y(o,a)),r...
  function v (line 2) | function v(e){for(var t,n,r,i=e.length,o=T.relative[e[0].type],a=o||T.re...
  function x (line 2) | function x(e,n){var i=n.length>0,o=e.length>0,a=function(r,a,s,u,l){var ...
  function t (line 4) | function t(){var t,c,f=re.documentElement;f.appendChild(u),l.style.cssTe...
  function r (line 4) | function r(t,n,r,i){var o,f,v,x,w,C=n;2!==b&&(b=2,u&&e.clearTimeout(u),c...

FILE: public/assets/luna/layui/lay/modules/layer.js
  function e (line 2) | function e(){var e=a.cancel&&a.cancel(t.index,n);e===!1||r.close(t.index)}
  function o (line 2) | function o(e,t,i){var n=new Image;return n.src=e,n.complete?t(n):(n.onlo...

FILE: public/assets/luna/layui/lay/modules/mobile.js
  function t (line 2) | function t(t){return null==t?String(t):J[W.call(t)]||"object"}
  function e (line 2) | function e(e){return"function"==t(e)}
  function n (line 2) | function n(t){return null!=t&&t==t.window}
  function r (line 2) | function r(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}
  function i (line 2) | function i(e){return"object"==t(e)}
  function o (line 2) | function o(t){return i(t)&&!n(t)&&Object.getPrototypeOf(t)==Object.proto...
  function a (line 2) | function a(t){var e=!!t&&"length"in t&&t.length,r=T.type(t);return"funct...
  function s (line 2) | function s(t){return A.call(t,function(t){return null!=t})}
  function u (line 2) | function u(t){return t.length>0?T.fn.concat.apply([],t):t}
  function c (line 2) | function c(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/...
  function l (line 2) | function l(t){return t in F?F[t]:F[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}
  function f (line 2) | function f(t,e){return"number"!=typeof e||k[c(t)]?e:e+"px"}
  function h (line 2) | function h(t){var e,n;return $[t]||(e=L.createElement(t),L.body.appendCh...
  function p (line 2) | function p(t){return"children"in t?D.call(t.children):T.map(t.childNodes...
  function d (line 2) | function d(t,e){var n,r=t?t.length:0;for(n=0;n<r;n++)this[n]=t[n];this.l...
  function m (line 2) | function m(t,e,n){for(j in e)n&&(o(e[j])||Q(e[j]))?(o(e[j])&&!o(t[j])&&(...
  function v (line 2) | function v(t,e){return null==e?T(t):T(t).filter(e)}
  function g (line 2) | function g(t,n,r,i){return e(n)?n.call(t,r,i):n}
  function y (line 2) | function y(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}
  function x (line 2) | function x(t,e){var n=t.className||"",r=n&&n.baseVal!==E;return e===E?r?...
  function b (line 2) | function b(t){try{return t?"true"==t||"false"!=t&&("null"==t?null:+t+""=...
  function w (line 2) | function w(t,e){e(t);for(var n=0,r=t.childNodes.length;n<r;n++)w(t.child...
  function e (line 2) | function e(t){return t._zid||(t._zid=h++)}
  function n (line 2) | function n(t,n,o,a){if(n=r(n),n.ns)var s=i(n.ns);return(v[e(t)]||[]).fil...
  function r (line 2) | function r(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort()...
  function i (line 2) | function i(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$...
  function o (line 2) | function o(t,e){return t.del&&!y&&t.e in x||!!e}
  function a (line 2) | function a(t){return b[t]||y&&x[t]||t}
  function s (line 2) | function s(n,i,s,u,l,h,p){var d=e(n),m=v[d]||(v[d]=[]);i.split(/\s/).for...
  function u (line 2) | function u(t,r,i,s,u){var c=e(t);(r||"").split(/\s/).forEach(function(e)...
  function c (line 2) | function c(e,n){return!n&&e.isDefaultPrevented||(n||(n=e),t.each(T,funct...
  function l (line 2) | function l(t){var e,n={originalEvent:t};for(e in t)j.test(e)||t[e]===f||...
  function e (line 2) | function e(e,n,r){var i=t.Event(n);return t(e).trigger(i,r),!i.isDefault...
  function n (line 2) | function n(t,n,r,i){if(t.global)return e(n||x,r,i)}
  function r (line 2) | function r(e){e.global&&0===t.active++&&n(e,null,"ajaxStart")}
  function i (line 2) | function i(e){e.global&&!--t.active&&n(e,null,"ajaxStop")}
  function o (line 2) | function o(t,e){var r=e.context;return e.beforeSend.call(r,t,e)!==!1&&n(...
  function a (line 2) | function a(t,e,r,i){var o=r.context,a="success";r.success.call(o,t,a,e),...
  function s (line 2) | function s(t,e,r,i,o){var a=i.context;i.error.call(a,r,e,t),o&&o.rejectW...
  function u (line 2) | function u(t,e,r){var o=r.context;r.complete.call(o,e,t),n(r,o,"ajaxComp...
  function c (line 2) | function c(t,e,n){if(n.dataFilter==l)return t;var r=n.context;return n.d...
  function l (line 2) | function l(){}
  function f (line 2) | function f(t){return t&&(t=t.split(";",2)[0]),t&&(t==T?"html":t==j?"json...
  function h (line 2) | function h(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}
  function p (line 2) | function p(e){e.processData&&e.data&&"string"!=t.type(e.data)&&(e.data=t...
  function d (line 2) | function d(e,n,r,i){return t.isFunction(n)&&(i=r,r=n,n=void 0),t.isFunct...
  function m (line 2) | function m(e,n,r,i){var o,a=t.isArray(n),s=t.isPlainObject(n);t.each(n,f...

FILE: public/assets/luna/layui/lay/modules/util.js
  function n (line 2) | function n(){a=t[l](function(){o.each(function(){var t=e(this),i=t.width...
  function n (line 2) | function n(t,n,o){var r=e(this),l=e.data(this,u)||{};l.w=n!==i?n:r.width...

FILE: public/assets/luna/layui/layui.js
  function c (line 2) | function c(e,t){var r="PLaySTATION 3"===navigator.platform?/^complete$/:...
  function s (line 2) | function s(){l.push(layui[d]),e.length>1?p.use(e.slice(1),r,l):"function...

FILE: public/assets/style/js/clipboard/clipboard.js
  function __webpack_require__ (line 22) | function __webpack_require__(moduleId) {
  function select (line 107) | function select(element) {
  function E (line 156) | function E () {
  function listener (line 175) | function listener () {
  function listen (line 241) | function listen(target, type, callback) {
  function listenNode (line 277) | function listenNode(node, type, callback) {
  function listenNodeList (line 296) | function listenNodeList(nodeList, type, callback) {
  function listenSelector (line 319) | function listenSelector(selector, type, callback) {
  function _delegate (line 397) | function _delegate(element, selector, type, callback, useCapture) {
  function delegate (line 419) | function delegate(elements, selector, type, callback, useCapture) {
  function listener (line 452) | function listener(element, selector, type, callback) {
  function closest (line 491) | function closest (element, selector) {
  function defineProperties (line 518) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _classCallCheck (line 520) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function ClipboardAction (line 533) | function ClipboardAction(options) {
  function defineProperties (line 784) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function clipboard_classCallCheck (line 786) | function clipboard_classCallCheck(instance, Constructor) { if (!(instanc...
  function _possibleConstructorReturn (line 788) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 790) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function Clipboard (line 808) | function Clipboard(trigger, options) {
  function getAttributeValue (line 959) | function getAttributeValue(suffix, element) {

FILE: public/assets/unicorn/js/bootstrap-input-spinner.js
  function setValue (line 200) | function setValue(newValue, updateInput) {
  function destroy (line 223) | function destroy() {
  function dispatchEvent (line 236) | function dispatchEvent($element, type) {
  function stepHandling (line 251) | function stepHandling(step) {
  function calcStep (line 261) | function calcStep(step) {
  function resetTimer (line 270) | function resetTimer() {
  function updateAttributes (line 275) | function updateAttributes() {
  function onPointerUp (line 325) | function onPointerUp(element, callback) {
  function onPointerDown (line 340) | function onPointerDown(element, callback) {

FILE: public/vendor/dcat-admin/adminlte/adminlte.js
  function n (line 1) | function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{...
  function i (line 1) | function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.en...
  function t (line 1) | function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError(...
  function i (line 1) | function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.en...
  function t (line 1) | function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError(...
  function a (line 1) | function a(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.en...
  function t (line 1) | function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError(...
  function r (line 1) | function r(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.en...
  function t (line 1) | function t(n,i){!function(e,t){if(!(e instanceof t))throw new TypeError(...
  function c (line 1) | function c(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.en...
  function t (line 1) | function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError(...
  function d (line 1) | function d(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.en...
  function t (line 1) | function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError(...
  function f (line 1) | function f(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.en...
  function t (line 1) | function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError(...
  function p (line 1) | function p(e){return(p="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function v (line 1) | function v(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.en...
  function t (line 1) | function t(n,i){!function(e,t){if(!(e instanceof t))throw new TypeError(...
  function m (line 1) | function m(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.en...
  function t (line 1) | function t(n,i){if(function(e,t){if(!(e instanceof t))throw new TypeErro...
  function C (line 1) | function C(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.en...
  function t (line 1) | function t(n,i){!function(e,t){if(!(e instanceof t))throw new TypeError(...

FILE: public/vendor/dcat-admin/dcat/extra/action.js
  function n (line 1) | function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{...
  function n (line 1) | function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function o (line 1) | function o(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.en...
  function t (line 1) | function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function c (line 1) | function c(){i.attr("loading",1),Object.assign(r,n.data),t.promise(i,r)....

FILE: public/vendor/dcat-admin/dcat/extra/grid-extend.js
  function n (line 1) | function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{...
  function r (line 1) | function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function e (line 1) | function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Ca...
  function i (line 1) | function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function e (line 1) | function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError(...
  function l (line 1) | function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function e (line 1) | function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError(...
  function u (line 1) | function u(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function n (line 1) | function n(){return t.load($(this).attr("href"),e),!1}

FILE: public/vendor/dcat-admin/dcat/extra/select-table.js
  function n (line 1) | function n(i){if(t[i])return t[i].exports;var l=t[i]={i:i,l:!1,exports:{...
  function t (line 1) | function t(e){e=$.extend({dialog:null,container:null,input:null,button:"...
  function r (line 1) | function r(){a.html(""),o.removeClass("d-none"),a.addClass("d-none"),l.a...

FILE: public/vendor/dcat-admin/dcat/extra/upload.js
  function a (line 1) | function a(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{...
  function i (line 1) | function i(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.en...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function s (line 1) | function s(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.en...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function l (line 1) | function l(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.en...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function d (line 1) | function d(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.en...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function s (line 1) | function s(){(e=a.getStats()).successNum&&(r=i("selected_success",{num:t...
  function c (line 1) | function c(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.en...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function f (line 1) | function f(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.en...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function m (line 1) | function m(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.en...
  function e (line 1) | function e(i){!function(e,t){if(!(e instanceof t))throw new TypeError("C...

FILE: public/vendor/dcat-admin/dcat/js/dcat-app.js
  function n (line 1) | function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{...
  function o (line 1) | function o(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.en...
  function t (line 1) | function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError(...
  function _typeof (line 1) | function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==...
  function _classCallCheck (line 1) | function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("...
  function _defineProperties (line 1) | function _defineProperties(e,t){for(var n=0;n<t.length;n++){var o=t[n];o...
  function _createClass (line 1) | function _createClass(e,t,n){return t&&_defineProperties(e.prototype,t),...
  function Ajax (line 1) | function Ajax(e){_classCallCheck(this,Ajax),this.dcat=e,e.handleAjaxErro...
  function o (line 1) | function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function m (line 1) | function m(t){var n=r,o=a;return r=a=void 0,f=t,s=e.apply(o,n)}
  function g (line 1) | function g(e,t){return setTimeout(e,t)}
  function v (line 1) | function v(e){return f=e,c=g(k,t),p?m(e):s}
  function y (line 1) | function y(e){var n=e-l;return void 0===l||n>=t||n<0||b&&e-f>=i}
  function k (line 1) | function k(){var e=Date.now();if(y(e))return w(e);c=g(k,function(e){var ...
  function w (line 1) | function w(e){return c=void 0,h&&r?m(e):(r=a=void 0,s)}
  function x (line 1) | function x(){var e=Date.now(),n=y(e);if(r=arguments,a=this,l=e,n){if(voi...
  function a (line 1) | function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function i (line 1) | function i(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.en...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function c (line 1) | function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function l (line 1) | function l(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.en...
  function e (line 1) | function e(t,n){for(var o in function(e,t){if(!(e instanceof t))throw ne...
  function d (line 1) | function d(e){return(d="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function f (line 1) | function f(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.en...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function C (line 1) | function C(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.en...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function E (line 1) | function E(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.en...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function D (line 1) | function D(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.en...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function A (line 1) | function A(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.en...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function I (line 1) | function I(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.en...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function M (line 1) | function M(e,t){var n=function(e,t){return t.parents(e.options.tabSelect...
  function H (line 1) | function H(e,t){return M(e,t).find(".has-tab-error")}
  function F (line 1) | function F(e){var t,n,o,r=arguments,a=[];for(n in delete r[0],r=r||[])a....
  function G (line 1) | function G(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.en...
  function e (line 1) | function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError(...
  function K (line 1) | function K(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.en...
  function e (line 1) | function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError(...
  function Q (line 1) | function Q(){$(".dcat-loading").remove()}
  function r (line 1) | function r(){n.css({left:(t.width()-300)/2,top:(t.height()-e.top)/2})}
  function X (line 1) | function X(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.en...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function Z (line 1) | function Z(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.en...
  function e (line 1) | function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError(...
  function te (line 1) | function te(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.e...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function oe (line 1) | function oe(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.e...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function ae (line 1) | function ae(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.e...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function i (line 1) | function i(e){if(e)return $(a).addClass("icon-sun").removeClass("icon-mo...
  function se (line 1) | function se(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.e...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function le (line 1) | function le(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.e...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function de (line 1) | function de(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.e...
  function e (line 1) | function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("C...
  function e (line 1) | function e(){$(".dropdown-menu").removeClass("show")}
  function ye (line 1) | function ye(e){return function(e){new j.a(e),new S(e),new B(e),new L(e),...

FILE: public/vendor/dcat-admin/dcat/plugins/bootstrap-colorpicker/js/bootstrap-colorpicker.js
  function __webpack_require__ (line 24) | function __webpack_require__(moduleId) {
  function defineProperties (line 122) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _interopRequireDefault (line 128) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 130) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function Extension (line 140) | function Extension(colorpicker) {
  function defineProperties (line 327) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _interopRequireDefault (line 336) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 338) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function HSVAColor (line 351) | function HSVAColor(h, s, v, a) {
  function ColorItem (line 447) | function ColorItem() {
  function defineProperties (line 1389) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _interopRequireDefault (line 1399) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 1401) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _possibleConstructorReturn (line 1403) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 1405) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function Palette (line 1461) | function Palette(colorpicker) {
  function comparativeDistance (line 1922) | function comparativeDistance(x, y) {
  function _interopRequireDefault (line 2636) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function defineProperties (line 2695) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _interopRequireDefault (line 2741) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 2743) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function Colorpicker (line 2825) | function Colorpicker(element, options) {
  function _interopRequireDefault (line 3284) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function defineProperties (line 3308) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _interopRequireDefault (line 3320) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 3322) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _possibleConstructorReturn (line 3324) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 3326) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function Debugger (line 3336) | function Debugger(colorpicker) {
  function defineProperties (line 3490) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _interopRequireDefault (line 3502) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 3504) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _possibleConstructorReturn (line 3506) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 3508) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function Preview (line 3517) | function Preview(colorpicker) {
  function defineProperties (line 3580) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _interopRequireDefault (line 3592) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 3594) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _possibleConstructorReturn (line 3596) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
  function _inherits (line 3598) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
  function Swatches (line 3613) | function Swatches(colorpicker) {
  function defineProperties (line 3688) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _interopRequireDefault (line 3694) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 3696) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function SliderHandler (line 3706) | function SliderHandler(colorpicker) {
  function defineProperties (line 3966) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _interopRequireDefault (line 3976) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 3978) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function PopupHandler (line 3989) | function PopupHandler(colorpicker, root) {
  function defineProperties (line 4437) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _interopRequireDefault (line 4447) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 4449) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function InputHandler (line 4459) | function InputHandler(colorpicker) {
  function Color (line 4774) | function Color(obj, model) {
  function roundTo (line 5169) | function roundTo(num, places) {
  function roundToPlace (line 5173) | function roundToPlace(places) {
  function getset (line 5179) | function getset(model, channel, modifier) {
  function maxfn (line 5210) | function maxfn(max) {
  function assertArray (line 5216) | function assertArray(val) {
  function zeroArray (line 5220) | function zeroArray(arr, length) {
  function clamp (line 5463) | function clamp(num, min, max) {
  function hexDouble (line 5467) | function hexDouble(num) {
  function wrapRaw (line 5537) | function wrapRaw(fn) {
  function wrapRounded (line 5558) | function wrapRounded(fn) {
  function buildGraph (line 5627) | function buildGraph() {
  function deriveBFS (line 5645) | function deriveBFS(fromModel) {
  function link (line 5670) | function link(from, to) {
  function wrapConversion (line 5676) | function wrapConversion(toModel, graph) {
  function defineProperties (line 5724) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _interopRequireDefault (line 5734) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 5736) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function ColorHandler (line 5746) | function ColorHandler(colorpicker) {
  function defineProperties (line 6012) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _interopRequireDefault (line 6018) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 6020) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function PickerHandler (line 6030) | function PickerHandler(colorpicker) {
  function defineProperties (line 6171) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _classCallCheck (line 6173) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function AddonHandler (line 6179) | function AddonHandler(colorpicker) {

FILE: public/vendor/dcat-admin/dcat/plugins/bootstrap-duallistbox/dist/jquery.bootstrap-duallistbox.js
  function BootstrapDualListbox (line 45) | function BootstrapDualListbox(element, options) {
  function triggerChangeEvent (line 57) | function triggerChangeEvent(dualListbox) {
  function updateSelectionStates (line 61) | function updateSelectionStates(dualListbox) {
  function changeSelectionState (line 73) | function changeSelectionState(dualListbox, original_index, selected) {
  function formatString (line 88) | function formatString(s, args) {
  function refreshInfo (line 94) | function refreshInfo(dualListbox) {
  function refreshSelects (line 128) | function refreshSelects(dualListbox) {
  function filter (line 151) | function filter(dualListbox, selectIndex) {
  function saveSelections (line 182) | function saveSelections(dualListbox, selectIndex) {
  function sortOptionsByInputOrder (line 190) | function sortOptionsByInputOrder(select){
  function sortOptions (line 209) | function sortOptions(select) {
  function clearSelections (line 215) | function clearSelections(dualListbox) {
  function move (line 221) | function move(dualListbox) {
  function remove (line 245) | function remove(dualListbox) {
  function moveAll (line 268) | function moveAll(dualListbox) {
  function removeAll (line 289) | function removeAll(dualListbox) {
  function bindEvents (line 309) | function bindEvents(dualListbox) {

FILE: public/vendor/dcat-admin/dcat/plugins/bootstrap-validator/validator.js
  function getValue (line 15) | function getValue($el) {
  function getValidatorSpecificError (line 159) | function getValidatorSpecificError(key) {
  function getValidityStateError (line 163) | function getValidityStateError() {
  function getGenericError (line 174) | function getGenericError() {
  function getErrorMessage (line 178) | function getErrorMessage(key) {
  function fieldErrors (line 273) | function fieldErrors() {
  function fieldIncomplete (line 281) | function fieldIncomplete() {
  function Plugin (line 360) | function Plugin(option) {

FILE: public/vendor/dcat-admin/dcat/plugins/charts/apexcharts.js
  function _typeof (line 12) | function _typeof(obj) {
  function _classCallCheck (line 28) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 34) | function _defineProperties(target, props) {
  function _createClass (line 44) | function _createClass(Constructor, protoProps, staticProps) {
  function _defineProperty (line 50) | function _defineProperty(obj, key, value) {
  function ownKeys (line 65) | function ownKeys(object, enumerableOnly) {
  function _objectSpread2 (line 79) | function _objectSpread2(target) {
  function _inherits (line 99) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 114) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 121) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 130) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 138) | function _possibleConstructorReturn(self, call) {
  function _toConsumableArray (line 146) | function _toConsumableArray(arr) {
  function _arrayWithoutHoles (line 150) | function _arrayWithoutHoles(arr) {
  function _iterableToArray (line 158) | function _iterableToArray(iter) {
  function _nonIterableSpread (line 162) | function _nonIterableSpread() {
  function Utils (line 170) | function Utils() {
  function Filters (line 583) | function Filters(ctx) {
  function Animations (line 817) | function Animations(ctx) {
  function Graphics (line 1070) | function Graphics(ctx) {
  function Helpers (line 1834) | function Helpers(annoCtx) {
  function XAnnotations (line 1993) | function XAnnotations(annoCtx) {
  function YAnnotations (line 2113) | function YAnnotations(annoCtx) {
  function PointAnnotations (line 2239) | function PointAnnotations(annoCtx) {
  function Options (line 2429) | function Options() {
  function Annotations (line 3450) | function Annotations(ctx) {
  function DateTime (line 3823) | function DateTime(ctx) {
  function ii (line 3878) | function ii(i, len) {
  function Defaults (line 4047) | function Defaults(opts) {
  function Config (line 4740) | function Config(opts) {
  function Globals (line 5021) | function Globals() {
  function Base (line 5295) | function Base(opts) {
  function CoreUtils (line 5323) | function CoreUtils(ctx) {
  function Fill (line 5696) | function Fill(ctx) {
  function Markers (line 5985) | function Markers(ctx, opts) {
  function Scatter (line 6161) | function Scatter(ctx) {
  function DataLabels (line 6353) | function DataLabels(ctx) {
  function Series (line 6658) | function Series(ctx) {
  function iterateOnAllCollapsedSeries (line 6692) | function iterateOnAllCollapsedSeries(series) {
  function pushPaths (line 6866) | function pushPaths(seriesEls, i, type) {
  function Data (line 7046) | function Data(ctx) {
  function Formatters (line 7685) | function Formatters(ctx) {
  function AxesUtils (line 7859) | function AxesUtils(ctx) {
  function Exports (line 8015) | function Exports(ctx) {
  function XAxis (line 8314) | function XAxis(ctx) {
  function Grid (line 8729) | function Grid(ctx) {
  function Range (line 9202) | function Range(ctx) {
  function intersect (line 9505) | function intersect(a, b) {
  function Range$1 (line 9722) | function Range$1(ctx) {
  function YAxis (line 10179) | function YAxis(ctx) {
  function Events (line 10601) | function Events(ctx) {
  function Localization (line 10724) | function Localization(ctx) {
  function Axes (line 10761) | function Axes(ctx) {
  function Crosshairs (line 10808) | function Crosshairs(ctx) {
  function Responsive (line 10912) | function Responsive(ctx) {
  function Theme (line 10988) | function Theme(ctx) {
  function TitleSubtitle (line 11203) | function TitleSubtitle(ctx) {
  function Helpers (line 11259) | function Helpers(dCtx) {
  function DimXAxis (line 11348) | function DimXAxis(dCtx) {
  function DimYAxis (line 11593) | function DimYAxis(dCtx) {
  function DimGrid (line 11749) | function DimGrid(dCtx) {
  function Dimensions (line 11864) | function Dimensions(ctx) {
  function Pie (line 12117) | function Pie(ctx) {
  function Helpers (line 12835) | function Helpers(lgCtx) {
  function Legend (line 13035) | function Legend(ctx, opts) {
  function Toolbar (line 13386) | function Toolbar(ctx) {
  function ZoomPanSelection (line 13853) | function ZoomPanSelection(ctx) {
  function Utils$1 (line 14514) | function Utils$1(tooltipContext) {
  function Labels (line 14838) | function Labels(tooltipContext) {
  function Position (line 15257) | function Position(tooltipContext) {
  function Marker (line 15618) | function Marker(tooltipContext) {
  function Intersect (line 15775) | function Intersect(tooltipContext) {
  function AxesTooltip (line 16092) | function AxesTooltip(tooltipContext) {
  function Tooltip (line 16261) | function Tooltip(ctx) {
  function BarDataLabels (line 16986) | function BarDataLabels(barCtx) {
  function Helpers (line 17396) | function Helpers(barCtx) {
  function Bar (line 17798) | function Bar(ctx, xyRatios) {
  function BarStacked (line 18235) | function BarStacked() {
  function CandleStick (line 18695) | function CandleStick() {
  function HeatMap (line 18914) | function HeatMap(ctx, xyRatios) {
  function Radar (line 19233) | function Radar(ctx) {
  function Radial (line 19705) | function Radial(ctx) {
  function RangeBar (line 20098) | function RangeBar() {
  function Helpers (line 20407) | function Helpers(lineCtx) {
  function Line (line 20558) | function Line(ctx, xyRatios, isPointsChart) {
  function TimeScale (line 21153) | function TimeScale(ctx) {
  function Core (line 21954) | function Core(el, ctx) {
  function UpdateHelpers (line 22417) | function UpdateHelpers(ctx) {
  function pathRegReplace (line 25946) | function pathRegReplace(a, b, c, d) {
  function _is (line 25951) | function _is(el, obj) {
  function _matches (line 25956) | function _matches(el, selector) {
  function camelCase (line 25961) | function camelCase(s) {
  function capitalize (line 25968) | function capitalize(s) {
  function fullHex (line 25973) | function fullHex(hex) {
  function compToHex (line 25978) | function compToHex(comp) {
  function proportionalSize (line 25984) | function proportionalSize(element, width, height) {
  function deltaTransformPoint (line 26002) | function deltaTransformPoint(matrix, x, y) {
  function arrayToMatrix (line 26010) | function arrayToMatrix(a) {
  function parseMatrix (line 26022) | function parseMatrix(matrix) {
  function arrayToString (line 26031) | function arrayToString(a) {
  function assignNewId (line 26068) | function assignNewId(node) {
  function fullBox (line 26080) | function fullBox(b) {
  function idFromReference (line 26098) | function idFromReference(url) {
  function float32String (line 26105) | function float32String(v) {
  function normaliseMatrix (line 26724) | function normaliseMatrix(matrix) {
  function listString (line 26733) | function listString(list) {
  function foreach (line 26743) | function foreach(){ //loops through mutiple objects
  function handleBlock (line 26830) | function handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, ...
  function simplyfy (line 26904) | function simplyfy(val){
  function setPosAndReflection (line 26945) | function setPosAndReflection(val){
  function toBeziere (line 26958) | function toBeziere(val){
  function findNextM (line 26994) | function findNextM(arr, offset){
  function arcToBeziere (line 27014) | function arcToBeziere(pos, val) {
  function DragHandler (line 27171) | function DragHandler(el){
  function SelectHandler (line 27403) | function SelectHandler(el) {
  function getMoseDownFunc (line 27649) | function getMoseDownFunc(eventName) {
  function ResizeHandler (line 27815) | function ResizeHandler(el) {
  function styleInject (line 28296) | function styleInject(css, ref) {
  function resetTriggers (line 28336) | function resetTriggers(element) {
  function checkTriggers (line 28358) | function checkTriggers(element) {
  function scrollListener (line 28362) | function scrollListener(e) {
  function InitCtxVariables (line 28459) | function InitCtxVariables(ctx) {
  function Destroy (line 28502) | function Destroy(ctx) {
  function ApexCharts (line 28594) | function ApexCharts(el, opts) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/comment/comment.js
  function firstNonWS (line 18) | function firstNonWS(str) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/comment/continuecomment.js
  function continueComment (line 17) | function continueComment(cm) {
  function continueLineCommentEnabled (line 64) | function continueLineCommentEnabled(cm) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/dialog/dialog.js
  function dialogDiv (line 14) | function dialogDiv(cm, template, bottom) {
  function closeNotification (line 31) | function closeNotification(cm, newVal) {
  function close (line 44) | function close(newVal) {
  function close (line 100) | function close() {
  function close (line 138) | function close() {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/display/fullscreen.js
  function setFullscreen (line 21) | function setFullscreen(cm) {
  function setNormal (line 32) | function setNormal(cm) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/display/panel.js
  function Panel (line 26) | function Panel(cm, node, options, height) {
  function initPanels (line 50) | function initPanels(cm) {
  function removePanels (line 84) | function removePanels(cm) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/display/placeholder.js
  function clearPlaceholder (line 29) | function clearPlaceholder(cm) {
  function setPlaceholder (line 35) | function setPlaceholder(cm) {
  function onBlur (line 44) | function onBlur(cm) {
  function onChange (line 47) | function onChange(cm) {
  function isEmpty (line 55) | function isEmpty(cm) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/display/rulers.js
  function clearRulers (line 25) | function clearRulers(cm) {
  function setRulers (line 33) | function setRulers(cm) {
  function refreshRulers (line 60) | function refreshRulers(cm) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/edit/closebrackets.js
  function charsAround (line 35) | function charsAround(cm, pos) {
  function enteringString (line 44) | function enteringString(cm, pos, ch) {
  function buildKeymap (line 57) | function buildKeymap(pairs, triples) {
  function buildExplodeHandler (line 140) | function buildExplodeHandler(pairs) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/edit/closetag.js
  function autoCloseGT (line 53) | function autoCloseGT(cm) {
  function autoCloseCurrent (line 97) | function autoCloseCurrent(cm, typingSlash) {
  function autoCloseSlash (line 132) | function autoCloseSlash(cm) {
  function indexOf (line 139) | function indexOf(collection, elt) {
  function closingTagExists (line 148) | function closingTagExists(cm, tagName, pos, state, newTag) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/edit/matchbrackets.js
  function findMatchingBracket (line 19) | function findMatchingBracket(cm, where, strict, config) {
  function scanForBracket (line 40) | function scanForBracket(cm, where, dir, style, config) {
  function matchBrackets (line 67) | function matchBrackets(cm, autoclear, config) {
  function doMatchBrackets (line 97) | function doMatchBrackets(cm) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/edit/matchtags.js
  function clear (line 28) | function clear(cm) {
  function doMatchTags (line 34) | function doMatchTags(cm) {
  function maybeUpdateMatch (line 55) | function maybeUpdateMatch(cm) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/fold/brace-fold.js
  function findOpening (line 18) | function findOpening(openCh) {
  function hasImport (line 63) | function hasImport(line) {
  function hasInclude (line 87) | function hasInclude(line) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/fold/foldcode.js
  function doFold (line 14) | function doFold(cm, pos, options, force) {
  function makeWidget (line 61) | function makeWidget(cm, options) {
  function getOption (line 137) | function getOption(cm, options, name) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/fold/foldgutter.js
  function State (line 39) | function State(options) {
  function parseOptions (line 44) | function parseOptions(opts) {
  function isFolded (line 52) | function isFolded(cm, line) {
  function marker (line 58) | function marker(spec) {
  function updateFoldInfo (line 68) | function updateFoldInfo(cm, from, to) {
  function updateInViewport (line 87) | function updateInViewport(cm) {
  function onGutterClick (line 96) | function onGutterClick(cm, line, gutter) {
  function onChange (line 104) | function onChange(cm) {
  function onViewportChange (line 113) | function onViewportChange(cm) {
  function onFold (line 137) | function onFold(cm, from) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/fold/markdown-fold.js
  function isHeader (line 17) | function isHeader(lineNo) {
  function headerLevel (line 22) | function headerLevel(lineNo, line, nextLine) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/fold/xml-fold.js
  function cmp (line 15) | function cmp(a, b) { return a.line - b.line || a.ch - b.ch; }
  function Iter (line 21) | function Iter(cm, line, ch, range) {
  function tagAt (line 28) | function tagAt(iter, ch) {
  function nextLine (line 33) | function nextLine(iter) {
  function prevLine (line 39) | function prevLine(iter) {
  function toTagEnd (line 46) | function toTagEnd(iter) {
  function toTagStart (line 57) | function toTagStart(iter) {
  function toNextTag (line 69) | function toNextTag(iter) {
  function toPrevTag (line 79) | function toPrevTag(iter) {
  function findMatchingClose (line 91) | function findMatchingClose(iter, tag) {
  function findMatchingOpen (line 112) | function findMatchingOpen(iter, tag) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/hint/css-hint.js
  function add (line 31) | function add(keywords) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/hint/html-hint.js
  function populate (line 332) | function populate(obj) {
  function htmlHint (line 342) | function htmlHint(cm, options) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/hint/javascript-hint.js
  function forEach (line 14) | function forEach(arr, f) {
  function arrayContains (line 18) | function arrayContains(arr, item) {
  function scriptHint (line 31) | function scriptHint(editor, keywords, getToken, options) {
  function javascriptHint (line 60) | function javascriptHint(editor, options) {
  function getCoffeeScriptToken (line 67) | function getCoffeeScriptToken(editor, cur) {
  function coffeescriptHint (line 85) | function coffeescriptHint(editor, options) {
  function getCompletions (line 100) | function getCompletions(token, context, keywords, options) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/hint/show-hint.js
  function retrieveHints (line 28) | function retrieveHints(getter, cm, options, then) {
  function Completion (line 52) | function Completion(cm, options) {
  function done (line 103) | function done() {
  function update (line 111) | function update() {
  function finishUpdate (line 116) | function finishUpdate(data_) {
  function clearDebounce (line 124) | function clearDebounce() {
  function activity (line 131) | function activity() {
  function getText (line 159) | function getText(completion) {
  function buildKeyMap (line 164) | function buildKeyMap(completion, handle) {
  function getHintElement (line 199) | function getHintElement(hintsElement, el) {
  function Widget (line 206) | function Widget(completion, data) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/hint/sql-hint.js
  function getKeywords (line 23) | function getKeywords(editor) {
  function getText (line 29) | function getText(item) {
  function getItem (line 33) | function getItem(list, item) {
  function shallowClone (line 39) | function shallowClone(object) {
  function match (line 46) | function match(string, word) {
  function addMatches (line 52) | function addMatches(result, search, wordlist, formatter) {
  function cleanName (line 64) | function cleanName(name) {
  function insertBackticks (line 72) | function insertBackticks(name) {
  function nameCompletion (line 83) | function nameCompletion(cur, token, result, editor) {
  function eachWord (line 141) | function eachWord(lineText, f) {
  function convertCurToNumber (line 150) | function convertCurToNumber(cur) {
  function convertNumberToCur (line 155) | function convertNumberToCur(num) {
  function findTableByAlias (line 159) | function findTableByAlias(alias, editor) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/hint/xml-hint.js
  function getHints (line 16) | function getHints(cm, options) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/lint/javascript-lint.js
  function validator (line 24) | function validator(text, options) {
  function cleanup (line 34) | function cleanup(error) {
  function fixWith (line 42) | function fixWith(error, fixes, severity, force) {
  function isBogus (line 62) | function isBogus(error) {
  function parseErrors (line 72) | function parseErrors(errors, output) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/lint/lint.js
  function showTooltip (line 15) | function showTooltip(e, content) {
  function rm (line 31) | function rm(elt) {
  function hideTooltip (line 34) | function hideTooltip(tt) {
  function showTooltipFor (line 41) | function showTooltipFor(e, content, node) {
  function LintState (line 58) | function LintState(cm, options, hasGutter) {
  function parseOptions (line 66) | function parseOptions(cm, options) {
  function clearMarks (line 74) | function clearMarks(cm) {
  function makeMarker (line 82) | function makeMarker(labels, severity, multiple, tooltips) {
  function getMaxSeverity (line 97) | function getMaxSeverity(a, b) {
  function groupByLine (line 102) | function groupByLine(annotations) {
  function annotationTooltip (line 111) | function annotationTooltip(ann) {
  function startLinting (line 120) | function startLinting(cm) {
  function updateLinting (line 129) | function updateLinting(cm, annotationsNotSorted) {
  function onChange (line 164) | function onChange(cm) {
  function popupSpanTooltip (line 170) | function popupSpanTooltip(ann, e) {
  function onMouseOver (line 175) | function onMouseOver(cm, e) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/merge/merge.js
  function DiffView (line 18) | function DiffView(mv, type) {
  function ensureDiff (line 60) | function ensureDiff(dv) {
  function registerUpdate (line 70) | function registerUpdate(dv) {
  function registerScroll (line 126) | function registerScroll(dv) {
  function syncScroll (line 135) | function syncScroll(dv, type) {
  function getOffsets (line 177) | function getOffsets(editor, around) {
  function setScrollLock (line 184) | function setScrollLock(dv, val, action) {
  function clearMarks (line 192) | function clearMarks(editor, arr, classes) {
  function updateMarks (line 207) | function updateMarks(editor, diff, state, type, classes) {
  function markChanges (line 227) | function markChanges(editor, diff, type, marks, from, to, classes) {
  function makeConnections (line 274) | function makeConnections(dv) {
  function getMatchingOrigLine (line 294) | function getMatchingOrigLine(editLine, chunks) {
  function findAlignedLines (line 306) | function findAlignedLines(dv, other) {
  function alignChunks (line 331) | function alignChunks(dv, force) {
  function alignLines (line 363) | function alignLines(cm, lines, aligners) {
  function padAbove (line 377) | function padAbove(cm, line, size) {
  function drawConnectorsForChunk (line 389) | function drawConnectorsForChunk(dv, chunk, sTopOrig, sTopEdit, w) {
  function copyChunk (line 426) | function copyChunk(dv, to, from, chunk) {
  function buildGap (line 495) | function buildGap(dv) {
  function asString (line 541) | function asString(obj) {
  function getDiff (line 549) | function getDiff(a, b) {
  function getChunks (line 565) | function getChunks(diff) {
  function endOfLineClean (line 592) | function endOfLineClean(diff, i) {
  function startOfLineClean (line 601) | function startOfLineClean(diff, i) {
  function chunkBoundariesAround (line 610) | function chunkBoundariesAround(chunks, n, nInEdit) {
  function collapseSingle (line 626) | function collapseSingle(cm, from, to) {
  function collapseStretch (line 645) | function collapseStretch(size, editors) {
  function unclearNearChunks (line 659) | function unclearNearChunks(dv, margin, off, clear) {
  function collapseIdenticalStretches (line 669) | function collapseIdenticalStretches(mv, margin) {
  function elt (line 693) | function elt(tag, content, className, style) {
  function clear (line 702) | function clear(node) {
  function attrs (line 707) | function attrs(elt) {
  function copyObj (line 712) | function copyObj(obj, target) {
  function moveOver (line 718) | function moveOver(pos, str, copy, other) {
  function posMin (line 732) | function posMin(a, b) { return (a.line - b.line || a.ch - b.ch) < 0 ? a ...
  function posMax (line 733) | function posMax(a, b) { return (a.line - b.line || a.ch - b.ch) > 0 ? a ...
  function posEq (line 734) | function posEq(a, b) { return a.line == b.line && a.ch == b.ch; }

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/mode/loadmode.js
  function splitCallback (line 15) | function splitCallback(cont, n) {
  function ensureDeps (line 19) | function ensureDeps(mode, cont) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/mode/multiplex.js
  function indexOf (line 19) | function indexOf(string, pattern, from) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/mode/multiplex_test.js
  function MT (line 22) | function MT(name) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/mode/simple.js
  function ensureState (line 61) | function ensureState(states, name) {
  function toRegex (line 66) | function toRegex(val, caret) {
  function asToken (line 78) | function asToken(val) {
  function Rule (line 87) | function Rule(data, states) {
  function tokenFunction (line 94) | function tokenFunction(states, config) {
  function cmp (line 155) | function cmp(a, b) {
  function enterLocalMode (line 167) | function enterLocalMode(config, state, spec, token) {
  function indexOf (line 183) | function indexOf(val, arr) {
  function indentFunction (line 187) | function indentFunction(states, meta) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/runmode/colorize.js
  function textContent (line 16) | function textContent(node, out) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/runmode/runmode-standalone.js
  function splitLines (line 9) | function splitLines(string){ return string.split(/\r?\n|\r/); }
  function StringStream (line 11) | function StringStream(string) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/runmode/runmode.node.js
  function splitLines (line 8) | function splitLines(string){ return string.split(/\r?\n|\r/); }
  function StringStream (line 10) | function StringStream(string) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/scroll/annotatescrollbar.js
  function Annotation (line 21) | function Annotation(cm, options) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/scroll/scrollpastend.js
  function onChange (line 28) | function onChange(cm, change) {
  function updateBottomMargin (line 33) | function updateBottomMargin(cm) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/scroll/simplescrollbars.js
  function Bar (line 14) | function Bar(cls, orientation, scroll) {
  function SimpleScrollbars (line 84) | function SimpleScrollbars(cls, place, scroll) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/search/match-highlighter.js
  function State (line 36) | function State(options) {
  function cursorActivity (line 66) | function cursorActivity(cm) {
  function highlightMatches (line 72) | function highlightMatches(cm) {
  function isWord (line 97) | function isWord(cm, from, to) {
  function boundariesAround (line 114) | function boundariesAround(stream, re) {
  function makeOverlay (line 119) | function makeOverlay(query, hasBoundary, style) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/search/matchesonscrollbar.js
  function SearchAnnotation (line 20) | function SearchAnnotation(cm, query, caseFold, options) {
  function offsetLine (line 58) | function offsetLine(line, changeStart, sizeChange) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/search/search.js
  function searchOverlay (line 21) | function searchOverlay(query, caseInsensitive) {
  function SearchState (line 41) | function SearchState() {
  function getSearchState (line 45) | function getSearchState(cm) {
  function queryCaseInsensitive (line 48) | function queryCaseInsensitive(query) {
  function getSearchCursor (line 51) | function getSearchCursor(cm, query, pos) {
  function dialog (line 55) | function dialog(cm, text, shortText, deflt, f) {
  function confirmDialog (line 59) | function confirmDialog(cm, text, shortText, fs) {
  function parseQuery (line 63) | function parseQuery(query) {
  function doSearch (line 75) | function doSearch(cm, rev) {
  function findNext (line 94) | function findNext(cm, rev) {cm.operation(function() {
  function clearSearch (line 105) | function clearSearch(cm) {cm.operation(function() {
  function replace (line 117) | function replace(cm, all) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/search/searchcursor.js
  function SearchCursor (line 15) | function SearchCursor(doc, query, pos, caseFold) {
  function savePosAndFail (line 124) | function savePosAndFail(line) {
  function adjustPos (line 162) | function adjustPos(orig, folded, pos) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/selection/active-line.js
  function clearActiveLines (line 35) | function clearActiveLines(cm) {
  function sameArray (line 42) | function sameArray(a, b) {
  function updateActiveLines (line 49) | function updateActiveLines(cm, ranges) {
  function selectionChange (line 68) | function selectionChange(cm, sel) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/selection/mark-selection.js
  function onCursorActivity (line 36) | function onCursorActivity(cm) {
  function onChange (line 40) | function onChange(cm) {
  function coverRange (line 49) | function coverRange(cm, from, to, addAt) {
  function clear (line 65) | function clear(cm) {
  function reset (line 71) | function reset(cm) {
  function update (line 78) | function update(cm) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/selection/selection-pointer.js
  function mousemove (line 43) | function mousemove(cm, event) {
  function mouseout (line 54) | function mouseout(cm, event) {
  function reset (line 62) | function reset(cm) {
  function scheduleUpdate (line 67) | function scheduleUpdate(cm) {
  function update (line 77) | function update(cm) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/tern/tern.js
  function getFile (line 147) | function getFile(ts, name, c) {
  function findDoc (line 157) | function findDoc(ts, doc, name) {
  function resolveDoc (line 169) | function resolveDoc(ts, id) {
  function trackChange (line 175) | function trackChange(ts, doc, change) {
  function sendDoc (line 195) | function sendDoc(ts, doc) {
  function hint (line 204) | function hint(ts, cm, c) {
  function typeToIcon (line 239) | function typeToIcon(type) {
  function showContextInfo (line 251) | function showContextInfo(ts, cm, pos, queryName, c) {
  function updateArgHints (line 274) | function updateArgHints(ts, cm) {
  function showArgHints (line 316) | function showArgHints(ts, cm, pos) {
  function parseFnType (line 337) | function parseFnType(text) {
  function jumpToDef (line 370) | function jumpToDef(ts, cm) {
  function jumpBack (line 398) | function jumpBack(ts, cm) {
  function moveTo (line 404) | function moveTo(ts, curDoc, doc, start, end) {
  function findContext (line 413) | function findContext(doc, data) {
  function atInterestingExpression (line 443) | function atInterestingExpression(cm) {
  function rename (line 451) | function rename(ts, cm) {
  function selectName (line 462) | function selectName(ts, cm) {
  function applyChanges (line 480) | function applyChanges(ts, changes) {
  function buildRequest (line 500) | function buildRequest(ts, doc, query, pos) {
  function getFragmentAround (line 542) | function getFragmentAround(data, start, end) {
  function elt (line 573) | function elt(tagname, cls /*, ... elts*/) {
  function dialog (line 584) | function dialog(cm, text, f) {
  function tempTooltip (line 593) | function tempTooltip(cm, content) {
  function makeTooltip (line 623) | function makeTooltip(x, y, content) {
  function remove (line 631) | function remove(node) {
  function fadeOut (line 636) | function fadeOut(tooltip) {
  function showError (line 641) | function showError(ts, cm, msg) {
  function closeArgHints (line 648) | function closeArgHints(ts) {
  function docValue (line 652) | function docValue(ts, doc) {
  function WorkerServer (line 660) | function WorkerServer(ts) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/tern/worker.js
  function getFile (line 26) | function getFile(file, c) {
  function startServer (line 31) | function startServer(defs, plugins, scripts) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/wrap/hardwrap.js
  function findParagraph (line 16) | function findParagraph(cm, pos, options) {
  function findBreakPoint (line 32) | function findBreakPoint(text, column, wrapOn, killTrailingSpace) {
  function wrapRange (line 42) | function wrapRange(cm, from, to, options) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/lib/codemirror.js
  function CodeMirror (line 59) | function CodeMirror(place, options) {
  function Display (line 130) | function Display(place, doc, input) {
  function loadMode (line 232) | function loadMode(cm) {
  function resetModeState (line 237) | function resetModeState(cm) {
  function wrappingChanged (line 248) | function wrappingChanged(cm) {
  function estimateHeight (line 266) | function estimateHeight(cm) {
  function estimateLineHeights (line 284) | function estimateLineHeights(cm) {
  function themeChanged (line 292) | function themeChanged(cm) {
  function guttersChanged (line 298) | function guttersChanged(cm) {
  function updateGutters (line 306) | function updateGutters(cm) {
  function updateGutterSpace (line 321) | function updateGutterSpace(cm) {
  function lineLength (line 329) | function lineLength(line) {
  function findMaxLine (line 348) | function findMaxLine(cm) {
  function setGuttersForLineNumbers (line 364) | function setGuttersForLineNumbers(options) {
  function measureForScrollbars (line 378) | function measureForScrollbars(cm) {
  function NativeScrollbars (line 394) | function NativeScrollbars(place, scroll, cm) {
  function NullScrollbars (line 473) | function NullScrollbars() {}
  function initScrollbars (line 484) | function initScrollbars(cm) {
  function updateScrollbars (line 506) | function updateScrollbars(cm, measure) {
  function updateScrollbarsInner (line 520) | function updateScrollbarsInner(cm, measure) {
  function visibleLines (line 542) | function visibleLines(display, doc, viewport) {
  function alignHorizontally (line 567) | function alignHorizontally(cm) {
  function maybeUpdateLineNumberWidth (line 586) | function maybeUpdateLineNumberWidth(cm) {
  function lineNumberFor (line 604) | function lineNumberFor(options, i) {
  function compensateForHScroll (line 611) | function compensateForHScroll(display) {
  function DisplayUpdate (line 617) | function DisplayUpdate(cm, viewport, force) {
  function maybeClipScrollbars (line 641) | function maybeClipScrollbars(cm) {
  function updateDisplayIfNeeded (line 655) | function updateDisplayIfNeeded(cm, update) {
  function postUpdateDisplay (line 727) | function postUpdateDisplay(cm, update) {
  function updateDisplaySimple (line 758) | function updateDisplaySimple(cm, viewport) {
  function setDocumentHeight (line 771) | function setDocumentHeight(cm, measure) {
  function updateHeightsInViewport (line 780) | function updateHeightsInViewport(cm) {
  function updateWidgetHeight (line 807) | function updateWidgetHeight(line) {
  function getDimensions (line 814) | function getDimensions(cm) {
  function patchDisplay (line 832) | function patchDisplay(cm, updateNumbersFrom, dims) {
  function updateLineForChanges (line 877) | function updateLineForChanges(cm, lineView, lineN, dims) {
  function ensureLineWrapped (line 890) | function ensureLineWrapped(lineView) {
  function updateLineBackground (line 901) | function updateLineBackground(lineView) {
  function getLineContent (line 915) | function getLineContent(cm, lineView) {
  function updateLineText (line 928) | function updateLineText(cm, lineView) {
  function updateLineClasses (line 943) | function updateLineClasses(lineView) {
  function updateLineGutter (line 953) | function updateLineGutter(cm, lineView, lineN, dims) {
  function updateLineWidgets (line 983) | function updateLineWidgets(cm, lineView, dims) {
  function buildLineElement (line 994) | function buildLineElement(cm, lineView, lineN, dims) {
  function insertLineWidgets (line 1008) | function insertLineWidgets(cm, lineView, dims) {
  function insertLineWidgetsFor (line 1014) | function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {
  function positionLineWidget (line 1030) | function positionLineWidget(widget, node, lineView, dims) {
  function copyPos (line 1060) | function copyPos(x) {return Pos(x.line, x.ch);}
  function maxPos (line 1061) | function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; }
  function minPos (line 1062) | function minPos(a, b) { return cmp(a, b) < 0 ? a : b; }
  function ensureFocus (line 1066) | function ensureFocus(cm) {
  function isReadOnly (line 1070) | function isReadOnly(cm) {
  function applyTextInput (line 1079) | function applyTextInput(cm, inserted, deleted, sel) {
  function copyableRanges (line 1132) | function copyableRanges(cm) {
  function disableBrowserMagic (line 1143) | function disableBrowserMagic(field) {
  function TextareaInput (line 1151) | function TextareaInput(cm) {
  function hiddenTextarea (line 1169) | function hiddenTextarea() {
  function prepareCopyCut (line 1222) | function prepareCopyCut(e) {
  function p (line 1344) | function p() {
  function prepareSelectAllHack (line 1440) | function prepareSelectAllHack() {
  function rehide (line 1451) | function rehide() {
  function ContentEditableInput (line 1490) | function ContentEditableInput(cm) {
  function onCopyCut (line 1551) | function onCopyCut(e) {
  function poll (line 1665) | function poll() {
  function posToDOM (line 1775) | function posToDOM(cm, pos) {
  function badPos (line 1791) | function badPos(pos, bad) { if (bad) pos.bad = true; return pos; }
  function domToPos (line 1793) | function domToPos(cm, node, offset) {
  function locateNodeInLineView (line 1812) | function locateNodeInLineView(lineView, node, offset) {
  function domTextBetween (line 1867) | function domTextBetween(cm, from, to, fromLine, toLine) {
  function Selection (line 1917) | function Selection(ranges, primIndex) {
  function Range (line 1954) | function Range(anchor, head) {
  function normalizeSelection (line 1969) | function normalizeSelection(ranges, primIndex) {
  function simpleSelection (line 1985) | function simpleSelection(anchor, head) {
  function clipLine (line 1991) | function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.fi...
  function clipPos (line 1992) | function clipPos(doc, pos) {
  function clipToLen (line 1998) | function clipToLen(pos, linelen) {
  function isLine (line 2004) | function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.si...
  function clipPosArray (line 2005) | function clipPosArray(doc, array) {
  function extendRange (line 2020) | function extendRange(doc, range, head, other) {
  function extendSelection (line 2039) | function extendSelection(doc, head, other, options) {
  function extendSelections (line 2045) | function extendSelections(doc, heads, options) {
  function replaceOneSelection (line 2053) | function replaceOneSelection(doc, i, range, options) {
  function setSimpleSelection (line 2060) | function setSimpleSelection(doc, anchor, head, options) {
  function filterSelectionChange (line 2066) | function filterSelectionChange(doc, sel) {
  function setSelectionReplaceHistory (line 2082) | function setSelectionReplaceHistory(doc, sel, options) {
  function setSelection (line 2093) | function setSelection(doc, sel, options) {
  function setSelectionNoUndo (line 2098) | function setSelectionNoUndo(doc, sel, options) {
  function setSelectionInner (line 2110) | function setSelectionInner(doc, sel) {
  function reCheckSelection (line 2124) | function reCheckSelection(doc) {
  function skipAtomicInSelection (line 2130) | function skipAtomicInSelection(doc, sel, bias, mayClear) {
  function skipAtomic (line 2145) | function skipAtomic(doc, pos, bias, mayClear) {
  function updateSelection (line 2197) | function updateSelection(cm) {
  function prepareSelection (line 2201) | function prepareSelection(cm, primary) {
  function drawSelectionCursor (line 2219) | function drawSelectionCursor(cm, range, output) {
  function drawSelectionRange (line 2238) | function drawSelectionRange(cm, range, output) {
  function restartBlink (line 2313) | function restartBlink(cm) {
  function startWorker (line 2329) | function startWorker(cm, time) {
  function highlightWorker (line 2334) | function highlightWorker(cm) {
  function findStartLine (line 2376) | function findStartLine(cm, n, precise) {
  function getStateBefore (line 2392) | function getStateBefore(cm, n, precise) {
  function paddingTop (line 2410) | function paddingTop(display) {return display.lineSpace.offsetTop;}
  function paddingVert (line 2411) | function paddingVert(display) {return display.mover.offsetHeight - displ...
  function paddingH (line 2412) | function paddingH(display) {
  function scrollGap (line 2421) | function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth; }
  function displayWidth (line 2422) | function displayWidth(cm) {
  function displayHeight (line 2425) | function displayHeight(cm) {
  function ensureLineHeights (line 2433) | function ensureLineHeights(cm, lineView, rect) {
  function mapFromLineView (line 2454) | function mapFromLineView(lineView, line, lineN) {
  function updateExternalMeasurement (line 2467) | function updateExternalMeasurement(cm, line) {
  function measureChar (line 2480) | function measureChar(cm, line, ch, bias) {
  function findViewForLine (line 2485) | function findViewForLine(cm, lineN) {
  function prepareMeasureForLine (line 2498) | function prepareMeasureForLine(cm, line) {
  function measureCharPrepared (line 2518) | function measureCharPrepared(cm, prepared, ch, bias, varHeight) {
  function nodeAndOffsetInLineMap (line 2540) | function nodeAndOffsetInLineMap(map, ch, bias) {
  function measureCharInner (line 2577) | function measureCharInner(cm, prepared, ch, bias) {
  function maybeUpdateRectForZooming (line 2636) | function maybeUpdateRectForZooming(measure, rect) {
  function clearLineMeasurementCacheFor (line 2646) | function clearLineMeasurementCacheFor(lineView) {
  function clearLineMeasurementCache (line 2655) | function clearLineMeasurementCache(cm) {
  function clearCaches (line 2662) | function clearCaches(cm) {
  function pageScrollX (line 2669) | function pageScrollX() { return window.pageXOffset || (document.document...
  function pageScrollY (line 2670) | function pageScrollY() { return window.pageYOffset || (document.document...
  function intoCoordSystem (line 2676) | function intoCoordSystem(cm, lineObj, rect, context) {
  function fromCoordSystem (line 2698) | function fromCoordSystem(cm, coords, context) {
  function charCoords (line 2715) | function charCoords(cm, pos, context, lineObj, bias) {
  function cursorCoords (line 2723) | function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHei...
  function estimateCoords (line 2755) | function estimateCoords(cm, pos) {
  function PosWithInfo (line 2769) | function PosWithInfo(line, ch, outside, xRel) {
  function coordsChar (line 2778) | function coordsChar(cm, x, y) {
  function coordsCharInner (line 2799) | function coordsCharInner(cm, lineObj, lineNo, x, y) {
  function textHeight (line 2841) | function textHeight(display) {
  function charWidth (line 2861) | function charWidth(display) {
  function startOperation (line 2883) | function startOperation(cm) {
  function fireCallbacksForOps (line 2910) | function fireCallbacksForOps(group) {
  function endOperation (line 2927) | function endOperation(cm) {
  function endOperations (line 2942) | function endOperations(group) {
  function endOperation_R1 (line 2956) | function endOperation_R1(op) {
  function endOperation_W1 (line 2969) | function endOperation_W1(op) {
  function endOperation_R2 (line 2973) | function endOperation_R2(op) {
  function endOperation_W2 (line 2994) | function endOperation_W2(op) {
  function endOperation_finish (line 3017) | function endOperation_finish(op) {
  function runInOp (line 3064) | function runInOp(cm, f) {
  function operation (line 3071) | function operation(cm, f) {
  function methodOp (line 3081) | function methodOp(f) {
  function docMethodOp (line 3089) | function docMethodOp(f) {
  function LineView (line 3104) | function LineView(doc, line, lineN) {
  function buildViewArray (line 3116) | function buildViewArray(cm, from, to) {
  function regChange (line 3132) | function regChange(cm, from, to, lendiff) {
  function regLineChange (line 3197) | function regLineChange(cm, line, type) {
  function resetView (line 3211) | function resetView(cm) {
  function findViewIndex (line 3219) | function findViewIndex(cm, n) {
  function viewCuttingPoint (line 3230) | function viewCuttingPoint(cm, oldN, newN, dir) {
  function adjustView (line 3256) | function adjustView(cm, from, to) {
  function countDirtyView (line 3277) | function countDirtyView(cm) {
  function registerEventHandlers (line 3289) | function registerEventHandlers(cm) {
  function onResize (line 3398) | function onResize(cm) {
  function eventInWidget (line 3411) | function eventInWidget(display, e) {
  function posFromMouse (line 3424) | function posFromMouse(cm, e, liberal, forRect) {
  function onMouseDown (line 3445) | function onMouseDown(e) {
  function leftButtonDown (line 3483) | function leftButtonDown(cm, e, start) {
  function leftButtonStartDrag (line 3509) | function leftButtonStartDrag(cm, e, start, modifier) {
  function leftButtonSelect (line 3536) | function leftButtonSelect(cm, e, start, type, addNew) {
  function gutterEvent (line 3678) | function gutterEvent(cm, e, type, prevent, signalfn) {
  function clickInGutter (line 3701) | function clickInGutter(cm, e) {
  function onDrop (line 3709) | function onDrop(e) {
  function onDragStart (line 3759) | function onDragStart(cm, e) {
  function setScrollTop (line 3785) | function setScrollTop(cm, val) {
  function setScrollLeft (line 3796) | function setScrollLeft(cm, val, isScroller) {
  function onScrollWheel (line 3840) | function onScrollWheel(cm, e) {
  function doHandleBinding (line 3912) | function doHandleBinding(cm, bound, dropShift) {
  function lookupKeyForEditor (line 3932) | function lookupKeyForEditor(cm, name, handle) {
  function dispatchKey (line 3942) | function dispatchKey(cm, name, e, handle) {
  function handleKeyBinding (line 3974) | function handleKeyBinding(cm, e) {
  function handleCharBinding (line 3993) | function handleCharBinding(cm, e, ch) {
  function onKeyDown (line 3999) | function onKeyDown(e) {
  function showCrossHair (line 4020) | function showCrossHair(cm) {
  function onKeyUp (line 4035) | function onKeyUp(e) {
  function onKeyPress (line 4040) | function onKeyPress(e) {
  function onFocus (line 4053) | function onFocus(cm) {
  function onBlur (line 4070) | function onBlur(cm) {
  function onContextMenu (line 4085) | function onContextMenu(cm, e) {
  function contextMenuInGutter (line 4090) | function contextMenuInGutter(cm, e) {
  function adjustForChange (line 4107) | function adjustForChange(pos, change) {
  function computeSelAfterChange (line 4116) | function computeSelAfterChange(doc, change) {
  function offsetPos (line 4126) | function offsetPos(pos, old, nw) {
  function computeReplacedSel (line 4135) | function computeReplacedSel(doc, changes, hint) {
  function filterChange (line 4155) | function filterChange(doc, change, update) {
  function makeChange (line 4179) | function makeChange(doc, change, ignoreReadOnly) {
  function makeChangeInner (line 4201) | function makeChangeInner(doc, change) {
  function makeChangeFromHistory (line 4219) | function makeChangeFromHistory(doc, type, allowSelectionOnly) {
  function shiftDoc (line 4285) | function shiftDoc(doc, distance) {
  function makeChangeSingleDoc (line 4301) | function makeChangeSingleDoc(doc, change, selAfter, spans) {
  function makeChangeSingleDocInEditor (line 4334) | function makeChangeSingleDocInEditor(cm, change, spans) {
  function replaceRange (line 4393) | function replaceRange(doc, code, from, to, origin) {
  function maybeScrollWindow (line 4404) | function maybeScrollWindow(cm, coords) {
  function scrollPosIntoView (line 4424) | function scrollPosIntoView(cm, pos, end, margin) {
  function scrollIntoView (line 4448) | function scrollIntoView(cm, x1, y1, x2, y2) {
  function calculateScrollPos (line 4458) | function calculateScrollPos(cm, x1, y1, x2, y2) {
  function addToScrollPos (line 4488) | function addToScrollPos(cm, left, top) {
  function ensureCursorVisible (line 4498) | function ensureCursorVisible(cm) {
  function resolveScrollToPos (line 4512) | function resolveScrollToPos(cm) {
  function indentLine (line 4532) | function indentLine(cm, n, how, aggressive) {
  function changeLine (line 4593) | function changeLine(doc, handle, changeType, op) {
  function deleteNearSelection (line 4604) | function deleteNearSelection(cm, compute) {
  function findPosH (line 4636) | function findPosH(doc, pos, dir, unit, visually) {
  function findPosV (line 4687) | function findPosV(cm, pos, dir, unit) {
  function interpret (line 5106) | function interpret(val) {
  function option (line 5162) | function option(name, deflt, handle, notOnInit) {
  function normalizeKeyName (line 5608) | function normalizeKeyName(name) {
  function getKeyMap (line 5694) | function getKeyMap(val) {
  function save (line 5715) | function save() {textarea.value = cm.getValue();}
  function markText (line 5965) | function markText(doc, from, to, options, type) {
  function markTextShared (line 6058) | function markTextShared(doc, from, to, options, type) {
  function findSharedMarkers (line 6073) | function findSharedMarkers(doc) {
  function copySharedMarkers (line 6078) | function copySharedMarkers(doc, markers) {
  function detachSharedMarkers (line 6090) | function detachSharedMarkers(markers) {
  function MarkedSpan (line 6106) | function MarkedSpan(marker, from, to) {
  function getMarkedSpanFor (line 6112) | function getMarkedSpanFor(spans, marker) {
  function removeMarkedSpan (line 6120) | function removeMarkedSpan(spans, span) {
  function addMarkedSpan (line 6126) | function addMarkedSpan(line, span) {
  function markedSpansBefore (line 6135) | function markedSpansBefore(old, startCh, isInsert) {
  function markedSpansAfter (line 6146) | function markedSpansAfter(old, endCh, isInsert) {
  function stretchSpansOverChange (line 6165) | function stretchSpansOverChange(doc, change) {
  function clearEmptySpans (line 6227) | function clearEmptySpans(spans) {
  function mergeOldSpans (line 6241) | function mergeOldSpans(doc, change) {
  function removeReadOnlyRanges (line 6264) | function removeReadOnlyRanges(doc, from, to) {
  function detachMarkedSpans (line 6293) | function detachMarkedSpans(line) {
  function attachMarkedSpans (line 6300) | function attachMarkedSpans(line, spans) {
  function extraLeft (line 6309) | function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; }
  function extraRight (line 6310) | function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; }
  function compareCollapsedMarkers (line 6315) | function compareCollapsedMarkers(a, b) {
  function collapsedSpanAtSide (line 6328) | function collapsedSpanAtSide(line, start) {
  function collapsedSpanAtStart (line 6338) | function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, t...
  function collapsedSpanAtEnd (line 6339) | function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, fal...
  function conflictingCollapsedRange (line 6344) | function conflictingCollapsedRange(doc, lineNo, from, to, marker) {
  function visualLine (line 6364) | function visualLine(line) {
  function visualLineContinued (line 6373) | function visualLineContinued(line) {
  function visualLineNo (line 6384) | function visualLineNo(doc, lineN) {
  function visualLineEndNo (line 6391) | function visualLineEndNo(doc, lineN) {
  function lineIsHidden (line 6403) | function lineIsHidden(doc, line) {
  function lineIsHiddenInner (line 6414) | function lineIsHiddenInner(doc, line, span) {
  function adjustScrollWhenAboveVisible (line 6442) | function adjustScrollWhenAboveVisible(cm, line, diff) {
  function widgetHeight (line 6471) | function widgetHeight(widget) {
  function addLineWidget (line 6484) | function addLineWidget(cm, handle, node, options) {
  function updateLine (line 6518) | function updateLine(line, text, markedSpans, estimateHeight) {
  function cleanUpLine (line 6530) | function cleanUpLine(line) {
  function extractLineClasses (line 6535) | function extractLineClasses(type, output) {
  function callBlankLine (line 6549) | function callBlankLine(mode, state) {
  function readToken (line 6556) | function readToken(mode, stream, state, inner) {
  function takeToken (line 6566) | function takeToken(cm, pos, precise, asArray) {
  function runMode (line 6588) | function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) {
  function highlightLine (line 6629) | function highlightLine(cm, line, state, forceToEnd) {
  function getLineStyles (line 6667) | function getLineStyles(cm, line, updateFrontier) {
  function processLine (line 6681) | function processLine(cm, text, state, startAt) {
  function interpretTokenStyle (line 6696) | function interpretTokenStyle(style, options) {
  function buildLineContent (line 6708) | function buildLineContent(cm, lineView) {
  function defaultSpecialCharPlaceholder (line 6762) | function defaultSpecialCharPlaceholder(ch) {
  function buildToken (line 6771) | function buildToken(builder, text, style, startStyle, endStyle, title, c...
  function buildTokenSplitSpaces (line 6824) | function buildTokenSplitSpaces(inner) {
  function buildTokenBadBidi (line 6838) | function buildTokenBadBidi(inner, order) {
  function buildCollapsedSpan (line 6857) | function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
  function insertLineContent (line 6874) | function insertLineContent(line, builder, styles) {
  function isWholeLineUpdate (line 6939) | function isWholeLineUpdate(doc, change) {
  function updateDoc (line 6945) | function updateDoc(doc, change, markedSpans, estimateHeight) {
  function LeafChunk (line 7008) | function LeafChunk(lines) {
  function BranchChunk (line 7048) | function BranchChunk(children) {
  function linkedDocs (line 7501) | function linkedDocs(doc, f, sharedHistOnly) {
  function attachDoc (line 7516) | function attachDoc(cm, doc) {
  function getLine (line 7530) | function getLine(doc, n) {
  function getBetween (line 7545) | function getBetween(doc, start, end) {
  function getLines (line 7557) | function getLines(doc, from, to) {
  function updateLineHeight (line 7565) | function updateLineHeight(line, height) {
  function lineNo (line 7572) | function lineNo(line) {
  function lineAtHeight (line 7586) | function lineAtHeight(chunk, h) {
  function heightAtLine (line 7607) | function heightAtLine(lineObj) {
  function getOrder (line 7629) | function getOrder(line) {
  function History (line 7637) | function History(startGen) {
  function historyChangeFromChange (line 7654) | function historyChangeFromChange(doc, change) {
  function clearSelectionEvents (line 7663) | function clearSelectionEvents(array) {
  function lastChangeEvent (line 7673) | function lastChangeEvent(hist, force) {
  function addChangeToHistory (line 7688) | function addChangeToHistory(doc, change, selAfter, opId) {
  function selectionEventCanBeMerged (line 7730) | function selectionEventCanBeMerged(doc, origin, prev, sel) {
  function addSelectionToHistory (line 7743) | function addSelectionToHistory(doc, sel, opId, options) {
  function pushSelectionToHistory (line 7765) | function pushSelectionToHistory(sel, dest) {
  function attachLocalSpans (line 7772) | function attachLocalSpans(doc, change, from, to) {
  function removeClearedSpans (line 7783) | function removeClearedSpans(spans) {
  function getOldSpans (line 7793) | function getOldSpans(doc, change) {
  function copyHistoryArray (line 7803) | function copyHistoryArray(events, newGroup, instantiateSel) {
  function rebaseHistSelSingle (line 7828) | function rebaseHistSelSingle(pos, from, to, diff) {
  function rebaseHistArray (line 7844) | function rebaseHistArray(array, from, to, diff) {
  function rebaseHist (line 7872) | function rebaseHist(hist, change) {
  function e_defaultPrevented (line 7891) | function e_defaultPrevented(e) {
  function e_target (line 7896) | function e_target(e) {return e.target || e.srcElement;}
  function e_button (line 7897) | function e_button(e) {
  function signalLater (line 7954) | function signalLater(emitter, type /*, values...*/) {
  function fireOrphanDelayed (line 7971) | function fireOrphanDelayed() {
  function signalDOMEvent (line 7980) | function signalDOMEvent(cm, e, override) {
  function signalCursorActivity (line 7987) | function signalCursorActivity(cm) {
  function hasHandler (line 7995) | function hasHandler(emitter, type) {
  function eventMixin (line 8002) | function eventMixin(ctor) {
  function Delayed (line 8019) | function Delayed() {this.id = null;}
  function findColumn (line 8044) | function findColumn(string, goal, tabSize) {
  function spaceStr (line 8059) | function spaceStr(n) {
  function lst (line 8065) | function lst(arr) { return arr[arr.length-1]; }
  function indexOf (line 8073) | function indexOf(array, elt) {
  function map (line 8078) | function map(array, f) {
  function nothing (line 8084) | function nothing() {}
  function createObj (line 8086) | function createObj(base, props) {
  function copyObj (line 8098) | function copyObj(obj, target, overwrite) {
  function bind (line 8106) | function bind(f) {
  function isWordChar (line 8116) | function isWordChar(ch, helper) {
  function isEmpty (line 8122) | function isEmpty(obj) {
  function isExtendingChar (line 8133) | function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendi...
  function elt (line 8137) | function elt(tag, content, className, style) {
  function removeChildren (line 8163) | function removeChildren(e) {
  function removeChildrenAndAdd (line 8169) | function removeChildrenAndAdd(parent, e) {
  function activeElt (line 8184) | function activeElt() { return document.activeElement; }
  function classTest (line 8192) | function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)...
  function joinClasses (line 8205) | function joinClasses(a, b) {
  function forEachCodeMirror (line 8218) | function forEachCodeMirror(f) {
  function ensureGlobalHandlers (line 8228) | function ensureGlobalHandlers() {
  function registerGlobalHandlers (line 8233) | function registerGlobalHandlers() {
  function zeroWidthElement (line 8260) | function zeroWidthElement(measure) {
  function hasBadBidiRects (line 8275) | function hasBadBidiRects(measure) {
  function hasBadZoomedRects (line 8322) | function hasBadZoomedRects(measure) {
  function iterateBidiSections (line 8351) | function iterateBidiSections(order, from, to, f) {
  function bidiLeft (line 8364) | function bidiLeft(part) { return part.level % 2 ? part.to : part.from; }
  function bidiRight (line 8365) | function bidiRight(part) { return part.level % 2 ? part.from : part.to; }
  function lineLeft (line 8367) | function lineLeft(line) { var order = getOrder(line); return order ? bid...
  function lineRight (line 8368) | function lineRight(line) {
  function lineStart (line 8374) | function lineStart(cm, lineN) {
  function lineEnd (line 8382) | function lineEnd(cm, lineN) {
  function lineStartSmart (line 8392) | function lineStartSmart(cm, pos) {
  function compareBidiLevel (line 8404) | function compareBidiLevel(order, a, b) {
  function getBidiPartAt (line 8411) | function getBidiPartAt(order, pos) {
  function moveInLine (line 8431) | function moveInLine(line, pos, dir, byUnit) {
  function moveVisually (line 8443) | function moveVisually(line, start, dir, byUnit) {
  function moveLogically (line 8466) | function moveLogically(line, start, dir, byUnit) {
  function charType (line 8500) | function charType(code) {
  function BidiSpan (line 8515) | function BidiSpan(level, from, to) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/asterisk/asterisk.js
  function basicToken (line 66) | function basicToken(stream,state){

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/clike/clike.js
  function tokenBase (line 29) | function tokenBase(stream, state) {
  function tokenString (line 75) | function tokenString(quote) {
  function tokenComment (line 88) | function tokenComment(stream, state) {
  function Context (line 100) | function Context(indented, column, type, align, prev) {
  function pushContext (line 107) | function pushContext(state, col, type) {
  function popContext (line 113) | function popContext(state) {
  function words (line 182) | function words(str) {
  function cppHook (line 191) | function cppHook(stream, state) {
  function cpp11StringHook (line 209) | function cpp11StringHook(stream, state) {
  function tokenAtString (line 234) | function tokenAtString(stream, state) {
  function tokenRawString (line 247) | function tokenRawString(stream, state) {
  function def (line 258) | function def(mimes, mode) {
  function tokenTripleString (line 350) | function tokenTripleString(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/clojure/clojure.js
  function makeKeywords (line 25) | function makeKeywords(str) {
  function stateStack (line 65) | function stateStack(indent, type, prev) { // represents a state stack ob...
  function pushStack (line 71) | function pushStack(state, indent, type) {
  function popStack (line 75) | function popStack(state) {
  function isNumber (line 79) | function isNumber(ch, stream){
  function eatCharacter (line 113) | function eatCharacter(stream) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/cobol/cobol.js
  function makeKeywords (line 22) | function makeKeywords(str) {
  function isNumber (line 150) | function isNumber(ch, stream){

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/coffeescript/coffeescript.js
  function wordRegexp (line 21) | function wordRegexp(words) {
  function tokenBase (line 50) | function tokenBase(stream, state) {
  function tokenFactory (line 177) | function tokenFactory(delimiter, singleline, outclass) {
  function longComment (line 204) | function longComment(stream, state) {
  function indent (line 216) | function indent(stream, state, type) {
  function dedent (line 240) | function dedent(stream, state) {
  function tokenLexer (line 264) | function tokenLexer(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/commonlisp/commonlisp.js
  function readSym (line 21) | function readSym(stream) {
  function base (line 30) | function base(stream, state) {
  function inString (line 63) | function inString(stream, state) {
  function inComment (line 72) | function inComment(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/css/css.js
  function ret (line 31) | function ret(style, tp) { type = tp; return style; }
  function tokenBase (line 35) | function tokenBase(stream, state) {
  function tokenString (line 90) | function tokenString(quote) {
  function tokenParenthesized (line 105) | function tokenParenthesized(stream, state) {
  function Context (line 116) | function Context(type, indent, prev) {
  function pushContext (line 122) | function pushContext(state, stream, type) {
  function popContext (line 127) | function popContext(state) {
  function pass (line 132) | function pass(type, stream, state) {
  function popAndPass (line 135) | function popAndPass(type, stream, state, n) {
  function wordAsValue (line 143) | function wordAsValue(stream) {
  function keySet (line 375) | function keySet(array) {
  function tokenCComment (line 642) | function tokenCComment(stream, state) {
  function tokenSGMLComment (line 654) | function tokenSGMLComment(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/css/less_test.js
  function MT (line 8) | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arg...

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/css/scss_test.js
  function MT (line 6) | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arg...

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/css/test.js
  function MT (line 6) | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arg...

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/d/d.js
  function tokenBase (line 27) | function tokenBase(stream, state) {
  function tokenString (line 77) | function tokenString(quote) {
  function tokenComment (line 90) | function tokenComment(stream, state) {
  function tokenNestedComment (line 102) | function tokenNestedComment(stream, state) {
  function Context (line 114) | function Context(indented, column, type, align, prev) {
  function pushContext (line 121) | function pushContext(state, col, type) {
  function popContext (line 127) | function popContext(state) {
  function words (line 189) | function words(str) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/dart/dart.js
  function set (line 23) | function set(words) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/django/django.js
  function tokenBase (line 24) | function tokenBase (stream, state) {
  function inTag (line 34) | function inTag (close) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/dtd/dtd.js
  function ret (line 23) | function ret(style, tp) {type = tp; return style;}
  function tokenBase (line 25) | function tokenBase(stream, state) {
  function tokenSGMLComment (line 54) | function tokenSGMLComment(stream, state) {
  function tokenString (line 66) | function tokenString(quote) {
  function inBlock (line 80) | function inBlock(style, terminator) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/dylan/dylan.js
  function chain (line 152) | function chain(stream, state, f) {
  function ret (line 159) | function ret(_type, style, _content) {
  function tokenBase (line 165) | function tokenBase(stream, state) {
  function tokenComment (line 250) | function tokenComment(stream, state) {
  function tokenString (line 263) | function tokenString(quote, type, style) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/ecl/ecl.js
  function words (line 16) | function words(str) {
  function metaHook (line 22) | function metaHook(stream, state) {
  function tokenBase (line 42) | function tokenBase(stream, state) {
  function tokenString (line 108) | function tokenString(quote) {
  function tokenComment (line 121) | function tokenComment(stream, state) {
  function Context (line 133) | function Context(indented, column, type, align, prev) {
  function pushContext (line 140) | function pushContext(state, col, type) {
  function popContext (line 143) | function popContext(state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/eiffel/eiffel.js
  function wordObj (line 15) | function wordObj(words) {
  function chain (line 89) | function chain(newtok, stream, state) {
  function tokenBase (line 94) | function tokenBase(stream, state) {
  function readQuoted (line 121) | function readQuoted(quote, style,  unescaped) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/erlang/erlang.js
  function tokenizer (line 103) | function tokenizer(stream,state) {
  function nongreedy (line 294) | function nongreedy(stream,re,words) {
  function greedy (line 308) | function greedy(stream,re,words) {
  function doubleQuote (line 325) | function doubleQuote(stream) {
  function singleQuote (line 329) | function singleQuote(stream) {
  function quote (line 333) | function quote(stream,quoteChar,escapeChar) {
  function lookahead (line 345) | function lookahead(stream) {
  function is_member (line 350) | function is_member(element,list) {
  function rval (line 354) | function rval(state,stream,type) {
  function aToken (line 388) | function aToken(tok,col,ind,typ) {
  function realToken (line 395) | function realToken(type,stream) {
  function fakeToken (line 402) | function fakeToken(type) {
  function peekToken (line 406) | function peekToken(state,depth) {
  function pushToken (line 417) | function pushToken(state,token) {
  function maybe_drop_pre (line 425) | function maybe_drop_pre(s,token) {
  function maybe_drop_post (line 439) | function maybe_drop_post(s) {
  function d (line 466) | function d(stack,tt) {
  function indenter (line 506) | function indenter(state,textAfter) {
  function wordafter (line 549) | function wordafter(str) {
  function postcommaToken (line 555) | function postcommaToken(state) {
  function defaultToken (line 562) | function defaultToken(state) {
  function getToken (line 576) | function getToken(state,tokens) {
  function getTokenIndex (line 583) | function getTokenIndex(objs,propname,propvals) {
  function truthy (line 593) | function truthy(x) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/forth/forth.js
  function toWordList (line 16) | function toWordList(words) {
  function searchWordList (line 67) | function searchWordList (wordList, word) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/fortran/fortran.js
  function words (line 15) | function words(array) {
  function tokenBase (line 117) | function tokenBase(stream, state) {
  function tokenString (line 155) | function tokenString(quote) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/gas/gas.js
  function x86 (line 144) | function x86(_parserConfig) {
  function armv6 (line 191) | function armv6(_parserConfig) {
  function nextUntilUnescaped (line 234) | function nextUntilUnescaped(stream, end) {
  function clikeComment (line 245) | function clikeComment(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/gfm/gfm.js
  function blankLine (line 16) | function blankLine(state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/gfm/test.js
  function MT (line 6) | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arg...
  function FT (line 8) | function FT(name) { test.mode(name, modeHighlightFormatting, Array.proto...

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/go/go.js
  function tokenBase (line 40) | function tokenBase(stream, state) {
  function tokenString (line 84) | function tokenString(quote) {
  function tokenComment (line 97) | function tokenComment(stream, state) {
  function Context (line 109) | function Context(indented, column, type, align, prev) {
  function pushContext (line 116) | function pushContext(state, col, type) {
  function popContext (line 119) | function popContext(state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/groovy/groovy.js
  function words (line 15) | function words(str) {
  function tokenBase (line 30) | function tokenBase(stream, state) {
  function startString (line 79) | function startString(quote, stream, state) {
  function tokenBaseUntilBrace (line 105) | function tokenBaseUntilBrace() {
  function tokenComment (line 123) | function tokenComment(stream, state) {
  function expectExpression (line 135) | function expectExpression(last) {
  function Context (line 140) | function Context(indented, column, type, align, prev) {
  function pushContext (line 147) | function pushContext(state, col, type) {
  function popContext (line 150) | function popContext(state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/haml/haml.js
  function rubyInQuote (line 19) | function rubyInQuote(endQuote) {
  function ruby (line 33) | function ruby(stream, state) {
  function html (line 41) | function html(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/haml/test.js
  function MT (line 6) | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arg...

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/haskell/haskell.js
  function switchState (line 16) | function switchState(source, setState, f) {
  function normal (line 32) | function normal(source, setState) {
  function ncomment (line 125) | function ncomment(type, nest) {
  function stringLiteral (line 149) | function stringLiteral(source, setState) {
  function stringGap (line 172) | function stringGap(source, setState) {
  function setType (line 184) | function setType(t) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/haxe/haxe.js
  function kw (line 20) | function kw(type) {return {type: type, style: "keyword"};}
  function chain (line 39) | function chain(stream, state, f) {
  function nextUntilUnescaped (line 44) | function nextUntilUnescaped(stream, end) {
  function ret (line 57) | function ret(tp, style, cont) {
  function haxeTokenBase (line 62) | function haxeTokenBase(stream, state) {
  function haxeTokenString (line 125) | function haxeTokenString(quote) {
  function haxeTokenComment (line 133) | function haxeTokenComment(stream, state) {
  function HaxeLexical (line 149) | function HaxeLexical(indented, column, type, align, prev, info) {
  function inScope (line 158) | function inScope(state, varname) {
  function parseHaxe (line 163) | function parseHaxe(state, style, type, content, stream) {
  function imported (line 185) | function imported(state, typename)
  function registerimport (line 195) | function registerimport(importname) {
  function pass (line 204) | function pass() {
  function cont (line 207) | function cont() {
  function register (line 211) | function register(varname) {
  function pushcontext (line 224) | function pushcontext() {
  function popcontext (line 228) | function popcontext() {
  function pushlex (line 232) | function pushlex(type, info) {
  function poplex (line 240) | function poplex() {
  function expect (line 250) | function expect(wanted) {
  function statement (line 259) | function statement(type) {
  function expression (line 281) | function expression(type) {
  function maybeexpression (line 291) | function maybeexpression(type) {
  function maybeoperator (line 296) | function maybeoperator(type, value) {
  function maybeattribute (line 305) | function maybeattribute(type) {
  function metadef (line 311) | function metadef(type) {
  function metaargs (line 316) | function metaargs(type) {
  function importdef (line 320) | function importdef (type, value) {
  function typedef (line 325) | function typedef (type, value)
  function maybelabel (line 331) | function maybelabel(type) {
  function property (line 335) | function property(type) {
  function objprop (line 338) | function objprop(type) {
  function commasep (line 342) | function commasep(what, end) {
  function block (line 353) | function block(type) {
  function vardef1 (line 357) | function vardef1(type, value) {
  function vardef2 (line 361) | function vardef2(type, value) {
  function forspec1 (line 365) | function forspec1(type, value) {
  function forin (line 371) | function forin(_type, value) {
  function functiondef (line 374) | function functiondef(type, value) {
  function typeuse (line 379) | function typeuse(type) {
  function typestring (line 382) | function typestring(type) {
  function typeprop (line 387) | function typeprop(type) {
  function funarg (line 390) | function funarg(type, value) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/htmlembedded/htmlembedded.js
  function htmlDispatch (line 24) | function htmlDispatch(stream, state) {
  function scriptingDispatch (line 34) | function scriptingDispatch(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/htmlmixed/htmlmixed.js
  function html (line 31) | function html(stream, state) {
  function maybeBackup (line 58) | function maybeBackup(stream, pat, style) {
  function script (line 68) | function script(stream, state) {
  function css (line 77) | function css(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/http/http.js
  function failFirstLine (line 15) | function failFirstLine(stream, state) {
  function start (line 21) | function start(stream, state) {
  function responseStatusCode (line 33) | function responseStatusCode(stream, state) {
  function responseStatusText (line 54) | function responseStatusText(stream, state) {
  function requestPath (line 60) | function requestPath(stream, state) {
  function requestProtocol (line 66) | function requestProtocol(stream, state) {
  function header (line 75) | function header(stream) {
  function body (line 89) | function body(stream) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/idl/idl.js
  function wordRegexp (line 14) | function wordRegexp(words) {
  function tokenBase (line 244) | function tokenBase(stream) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/jade/jade.js
  function State (line 29) | function State() {
  function javaScript (line 105) | function javaScript(stream, state) {
  function javaScriptArguments (line 122) | function javaScriptArguments(stream, state) {
  function yieldStatement (line 143) | function yieldStatement(stream) {
  function doctype (line 149) | function doctype(stream) {
  function interpolation (line 155) | function interpolation(stream, state) {
  function interpolationContinued (line 163) | function interpolationContinued(stream, state) {
  function caseStatement (line 179) | function caseStatement(stream, state) {
  function when (line 186) | function when(stream, state) {
  function defaultStatement (line 194) | function defaultStatement(stream) {
  function extendsStatement (line 200) | function extendsStatement(stream, state) {
  function append (line 207) | function append(stream, state) {
  function prepend (line 213) | function prepend(stream, state) {
  function block (line 219) | function block(stream, state) {
  function include (line 226) | function include(stream, state) {
  function includeFiltered (line 233) | function includeFiltered(stream, state) {
  function includeFilteredContinued (line 240) | function includeFilteredContinued(stream, state) {
  function mixin (line 249) | function mixin(stream, state) {
  function call (line 256) | function call(stream, state) {
  function callArguments (line 270) | function callArguments(stream, state) {
  function conditional (line 281) | function conditional(stream, state) {
  function each (line 288) | function each(stream, state) {
  function eachContinued (line 294) | function eachContinued(stream, state) {
  function whileStatement (line 309) | function whileStatement(stream, state) {
  function tag (line 316) | function tag(stream, state) {
  function filter (line 327) | function filter(stream, state) {
  function code (line 344) | function code(stream, state) {
  function id (line 351) | function id(stream) {
  function className (line 357) | function className(stream) {
  function attrs (line 363) | function attrs(stream, state) {
  function attrsContinued (line 375) | function attrsContinued(stream, state) {
  function attributesBlock (line 419) | function attributesBlock(stream, state) {
  function indent (line 427) | function indent(stream) {
  function comment (line 433) | function comment(stream, state) {
  function colon (line 441) | function colon(stream) {
  function text (line 447) | function text(stream, state) {
  function dot (line 459) | function dot(stream, state) {
  function fail (line 472) | function fail(stream) {
  function setInnerMode (line 478) | function setInnerMode(stream, state, mode) {
  function innerMode (line 491) | function innerMode(stream, state, force) {
  function restOfLine (line 511) | function restOfLine(stream, state) {
  function startState (line 525) | function startState() {
  function copyState (line 528) | function copyState(state) {
  function nextToken (line 537) | function nextToken(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/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/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/javascript/test.js
  function MT (line 6) | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arg...
  function LD (line 167) | function LD(name) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/jinja2/jinja2.js
  function tokenBase (line 36) | function tokenBase (stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/julia/julia.js
  function wordRegexp (line 17) | function wordRegexp(words) {
  function in_array (line 39) | function in_array(state) {
  function cur_scope (line 49) | function cur_scope(state) {
  function tokenBase (line 57) | function tokenBase(stream, state) {
  function tokenStringFactory (line 214) | function tokenStringFactory(delimiter) {
  function tokenLexer (line 249) | function tokenLexer(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/kotlin/kotlin.js
  function words (line 15) | function words(str) {
  function tokenBase (line 34) | function tokenBase(stream, state) {
  function startString (line 96) | function startString(quote, stream, state) {
  function tokenBaseUntilBrace (line 137) | function tokenBaseUntilBrace() {
  function tokenBaseUntilSpace (line 157) | function tokenBaseUntilSpace() {
  function tokenComment (line 174) | function tokenComment(stream, state) {
  function expectExpression (line 186) | function expectExpression(last) {
  function Context (line 191) | function Context(indented, column, type, align, prev) {
  function pushContext (line 199) | function pushContext(state, col, type) {
  function popContext (line 203) | function popContext(state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/lua/lua.js
  function prefixRE (line 21) | function prefixRE(words) {
  function wordRE (line 24) | function wordRE(words) {
  function readBracket (line 70) | function readBracket(stream) {
  function normal (line 77) | function normal(stream, state) {
  function bracketed (line 100) | function bracketed(level, style) {
  function string (line 113) | function string(quote) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/markdown/markdown.js
  function getMode (line 19) | function getMode(name) {
  function switchInline (line 79) | function switchInline(stream, state, f) {
  function switchBlock (line 84) | function switchBlock(stream, state, f) {
  function blankLine (line 92) | function blankLine(state) {
  function blockNormal (line 115) | function blockNormal(stream, state) {
  function htmlBlock (line 190) | function htmlBlock(stream, state) {
  function local (line 201) | function local(stream, state) {
  function leavingLocal (line 214) | function leavingLocal(stream, state) {
  function getType (line 226) | function getType(state) {
  function handleText (line 308) | function handleText(stream, state) {
  function inlineNormal (line 315) | function inlineNormal(stream, state) {
  function linkInline (line 532) | function linkInline(stream, state) {
  function linkHref (line 552) | function linkHref(stream, state) {
  function getLinkHrefInside (line 567) | function getLinkHrefInside(endChar) {
  function footnoteLink (line 588) | function footnoteLink(stream, state) {
  function footnoteLinkInside (line 599) | function footnoteLinkInside(stream, state) {
  function footnoteUrl (line 613) | function footnoteUrl(stream, state) {
  function inlineRE (line 631) | function inlineRE(endChar) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/markdown/test.js
  function MT (line 6) | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arg...
  function FT (line 8) | function FT(name) { test.mode(name, modeHighlightFormatting, Array.proto...

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/mirc/mirc.js
  function parseWords (line 18) | function parseWords(str) {
  function chain (line 86) | function chain(stream, state, f) {
  function tokenBase (line 90) | function tokenBase(stream, state) {
  function tokenComment (line 153) | function tokenComment(stream, state) {
  function tokenUnparsed (line 164) | function tokenUnparsed(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/mllike/mllike.js
  function tokenBase (line 50) | function tokenBase(stream, state) {
  function tokenString (line 91) | function tokenString(stream, state) {
  function tokenComment (line 106) | function tokenComment(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/modelica/modelica.js
  function tokenLineComment (line 30) | function tokenLineComment(stream, state) {
  function tokenBlockComment (line 36) | function tokenBlockComment(stream, state) {
  function tokenString (line 48) | function tokenString(stream, state) {
  function tokenIdent (line 62) | function tokenIdent(stream, state) {
  function tokenQIdent (line 81) | function tokenQIdent(stream, state) {
  function tokenUnsignedNuber (line 93) | function tokenUnsignedNuber(stream, state) {
  function words (line 202) | function words(str) {
  function def (line 213) | function def(mimes, mode) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/nginx/nginx.js
  function words (line 16) | function words(str) {
  function ret (line 36) | function ret(style, tp) {type = tp; return style;}
  function tokenBase (line 38) | function tokenBase(stream, state) {
  function tokenCComment (line 97) | function tokenCComment(stream, state) {
  function tokenSGMLComment (line 109) | function tokenSGMLComment(stream, state) {
  function tokenString (line 121) | function tokenString(quote) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/ntriples/ntriples.js
  function transitState (line 59) | function transitState(currState, c) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/octave/octave.js
  function wordRegexp (line 15) | function wordRegexp(words) {
  function tokenTranspose (line 46) | function tokenTranspose(stream, state) {
  function tokenComment (line 57) | function tokenComment(stream, state) {
  function tokenBase (line 66) | function tokenBase(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/pascal/pascal.js
  function words (line 15) | function words(str) {
  function tokenBase (line 27) | function tokenBase(stream, state) {
  function tokenString (line 65) | function tokenString(quote) {
  function tokenComment (line 77) | function tokenComment(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/pegjs/pegjs.js
  function identifier (line 17) | function identifier(stream) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/perl/perl.js
  function tokenChain (line 483) | function tokenChain(stream,state,chain,style,tail){     // NOTE: chain.l...
  function tokenSOMETHING (line 503) | function tokenSOMETHING(stream,state,string){
  function tokenPerl (line 511) | function tokenPerl(stream,state){
  function look (line 804) | function look(stream, c){
  function prefix (line 809) | function prefix(stream, c){
  function suffix (line 819) | function suffix(stream, c){
  function eatSuffix (line 826) | function eatSuffix(stream, c){

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/php/php.js
  function keywords (line 14) | function keywords(str) {
  function matchSequence (line 21) | function matchSequence(list, end) {
  function stringWithEscapes (line 33) | function stringWithEscapes(closing) {
  function stringWithEscapes_ (line 36) | function stringWithEscapes_(stream, state, closing) {
  function dispatch (line 152) | function dispatch(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/php/test.js
  function MT (line 6) | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arg...
  function build_recursive_monsters (line 78) | function build_recursive_monsters(nt, t, n){
  function build_recursive_monsters_2 (line 124) | function build_recursive_monsters_2(mf1, mf2, nt, t, n){

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/pig/pig.js
  function chain (line 28) | function chain(stream, state, f) {
  function ret (line 34) | function ret(tp, style) {
  function tokenComment (line 39) | function tokenComment(stream, state) {
  function tokenString (line 52) | function tokenString(quote) {
  function tokenBase (line 67) | function tokenBase(stream, state) {
  function keywords (line 150) | function keywords(str) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/puppet/puppet.js
  function define (line 22) | function define(style, string) {
  function tokenString (line 47) | function tokenString(stream, state) {
  function tokenize (line 68) | function tokenize(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/python/python.js
  function wordRegexp (line 14) | function wordRegexp(words) {
  function top (line 44) | function top(state) {
  function tokenBase (line 87) | function tokenBase(stream, state) {
  function tokenBaseInner (line 108) | function tokenBaseInner(stream, state) {
  function tokenStringFactory (line 193) | function tokenStringFactory(delimiter) {
  function pushScope (line 226) | function pushScope(stream, state, type) {
  function dedent (line 238) | function dedent(stream, state) {
  function tokenLexer (line 247) | function tokenLexer(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/q/q.js
  function buildRE (line 19) | function buildRE(w){return new RegExp("^("+w.join("|")+")$");}
  function tokenBase (line 20) | function tokenBase(stream,state){
  function tokenLineComment (line 62) | function tokenLineComment(stream,state){
  function tokenBlockComment (line 65) | function tokenBlockComment(stream,state){
  function tokenCommentToEOF (line 72) | function tokenCommentToEOF(stream){return stream.skipToEnd(),"comment";}
  function tokenString (line 73) | function tokenString(stream,state){
  function pushContext (line 82) | function pushContext(state,type,col){state.context={prev:state.context,i...
  function popContext (line 83) | function popContext(state){state.indent=state.context.indent;state.conte...

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/r/r.js
  function wordObj (line 15) | function wordObj(str) {
  function tokenBase (line 27) | function tokenBase(stream, state) {
  function tokenString (line 81) | function tokenString(quote) {
  function push (line 102) | function push(state, type, stream) {
  function pop (line 109) | function pop(state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/rst/rst.js
  function format (line 76) | function format(string) {
  function to_normal (line 156) | function to_normal(stream, state) {
  function to_explicit (line 356) | function to_explicit(stream, state) {
  function to_comment (line 463) | function to_comment(stream, state) {
  function to_verbatim (line 467) | function to_verbatim(stream, state) {
  function as_block (line 471) | function as_block(stream, state, token) {
  function to_mode (line 484) | function to_mode(stream, state) {
  function context (line 503) | function context(phase, stage, mode, local) {
  function change (line 507) | function change(state, tok, ctx) {
  function stage (line 512) | function stage(state) {
  function phase (line 516) | function phase(state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/ruby/ruby.js
  function wordObj (line 15) | function wordObj(words) {
  function chain (line 34) | function chain(newtok, stream, state) {
  function tokenBase (line 39) | function tokenBase(stream, state) {
  function tokenBaseUntilBrace (line 152) | function tokenBaseUntilBrace(depth) {
  function tokenBaseOnce (line 168) | function tokenBaseOnce() {
  function readQuoted (line 179) | function readQuoted(quote, style, embed, unescaped) {
  function readHereDoc (line 210) | function readHereDoc(phrase) {
  function readBlockComment (line 217) | function readBlockComment(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/ruby/test.js
  function MT (line 6) | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arg...

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/rust/rust.js
  function r (line 40) | function r(tc, style) {
  function tokenBase (line 45) | function tokenBase(stream, state) {
  function tokenString (line 104) | function tokenString(stream, state) {
  function tokenComment (line 118) | function tokenComment(depth) {
  function pass (line 144) | function pass() {
  function cont (line 147) | function cont() {
  function pushlex (line 152) | function pushlex(type, info) {
  function poplex (line 161) | function poplex() {
  function typecx (line 169) | function typecx() { cx.state.keywords = typeKeywords; }
  function valcx (line 170) | function valcx() { cx.state.keywords = valKeywords; }
  function commasep (line 173) | function commasep(comb, end) {
  function stat_of (line 185) | function stat_of(comb, tag) {
  function block (line 188) | function block(type) {
  function endstatement (line 201) | function endstatement(type) {
  function expression (line 205) | function expression(type) {
  function maybeop (line 218) | function maybeop(type) {
  function maybeprop (line 225) | function maybeprop() {
  function exprbrace (line 229) | function exprbrace(type) {
  function record_of (line 239) | function record_of(comb) {
  function blockvars (line 249) | function blockvars(type) {
  function letdef1 (line 255) | function letdef1(type) {
  function letdef2 (line 261) | function letdef2(type) {
  function maybetype (line 265) | function maybetype(type) {
  function inop (line 269) | function inop(type) {
  function fndef (line 273) | function fndef(type) {
  function tydef (line 283) | function tydef(type) {
  function enumdef (line 289) | function enumdef(type) {
  function enumblock (line 296) | function enumblock(type) {
  function mod (line 302) | function mod(type) {
  function iface (line 307) | function iface(type) {
  function impl (line 313) | function impl(type) {
  function typarams (line 320) | function typarams() {
  function argdef (line 326) | function argdef(type) {
  function rtype (line 331) | function rtype(type) {
  function rtypemaybeparam (line 340) | function rtypemaybeparam() {
  function fntype (line 344) | function fntype(type) {
  function pattern (line 349) | function pattern(type) {
  function patternmaybeop (line 356) | function patternmaybeop(type) {
  function altbody (line 361) | function altbody(type) {
  function altblock1 (line 365) | function altblock1(type) {
  function altblock2 (line 372) | function altblock2(type) {
  function macro (line 377) | function macro(type) {
  function matchBrackets (line 381) | function matchBrackets(type, comb) {
  function parse (line 388) | function parse(state, stream, style) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/sass/sass.js
  function tokenRegexp (line 15) | function tokenRegexp(words) {
  function urlTokens (line 28) | function urlTokens(stream, state) {
  function comment (line 48) | function comment(indentation, multiLine) {
  function buildStringTokenizer (line 67) | function buildStringTokenizer(quote, greedy) {
  function buildInterpolationTokenizer (line 93) | function buildInterpolationTokenizer(currentTokenizer) {
  function indent (line 105) | function indent(state) {
  function dedent (line 114) | function dedent(state) {
  function tokenBase (line 120) | function tokenBase(stream, state) {
  function tokenLexer (line 356) | function tokenLexer(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/scheme/scheme.js
  function makeKeywords (line 23) | function makeKeywords(str) {
  function stateStack (line 32) | function stateStack(indent, type, prev) { // represents a state stack ob...
  function pushStack (line 38) | function pushStack(state, indent, type) {
  function popStack (line 42) | function popStack(state) {
  function isBinaryNumber (line 51) | function isBinaryNumber (stream) {
  function isOctalNumber (line 55) | function isOctalNumber (stream) {
  function isDecimalNumber (line 59) | function isDecimalNumber (stream, backup) {
  function isHexNumber (line 66) | function isHexNumber (stream) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/shell/shell.js
  function define (line 17) | function define(style, string) {
  function tokenBase (line 38) | function tokenBase(stream, state) {
  function tokenString (line 84) | function tokenString(quote) {
  function tokenize (line 123) | function tokenize(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/shell/test.js
  function MT (line 6) | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arg...

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/sieve/sieve.js
  function words (line 15) | function words(str) {
  function tokenBase (line 25) | function tokenBase(stream, state) {
  function tokenMultiLineString (line 112) | function tokenMultiLineString(stream, state)
  function tokenCComment (line 137) | function tokenCComment(stream, state) {
  function tokenString (line 149) | function tokenString(quote) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/slim/slim.js
  function backup (line 72) | function backup(pos, tokenize, style) {
  function maybeBackup (line 87) | function maybeBackup(stream, state, pat, offset, style) {
  function continueLine (line 97) | function continueLine(state, column) {
  function finishContinue (line 106) | function finishContinue(state) {
  function lineContinuable (line 113) | function lineContinuable(column, tokenize) {
  function commaContinuable (line 127) | function commaContinuable(column, tokenize) {
  function rubyInQuote (line 138) | function rubyInQuote(endQuote, tokenize) {
  function startRubySplat (line 152) | function startRubySplat(tokenize) {
  function ruby (line 174) | function ruby(stream, state) {
  function htmlLine (line 178) | function htmlLine(stream, state) {
  function html (line 184) | function html(stream, state) {
  function startHtmlLine (line 192) | function startHtmlLine(lastTokenize) {
  function startHtmlMode (line 200) | function startHtmlMode(stream, state, offset) {
  function comment (line 211) | function comment(stream, state) {
  function commentMode (line 216) | function commentMode(stream, state) {
  function attributeWrapper (line 227) | function attributeWrapper(stream, state) {
  function attributeWrapperAssign (line 241) | function attributeWrapperAssign(stream, state) {
  function attributeWrapperValue (line 248) | function attributeWrapperValue(stream, state) {
  function startAttributeWrapperMode (line 265) | function startAttributeWrapperMode(state, endQuote, tokenize) {
  function sub (line 278) | function sub(stream, state) {
  function firstSub (line 292) | function firstSub(stream, state) {
  function createMode (line 298) | function createMode(mode) {
  function getMode (line 311) | function getMode(mode) {
  function startSubMode (line 318) | function startSubMode(mode, state) {
  function doctypeLine (line 335) | function doctypeLine(stream, _state) {
  function startLine (line 340) | function startLine(stream, state) {
  function slim (line 368) | function slim(stream, state) {
  function slimTag (line 375) | function slimTag(stream, state) {
  function slimTagExtras (line 386) | function slimTagExtras(stream, state) {
  function slimClass (line 393) | function slimClass(stream, state) {
  function slimAttribute (line 404) | function slimAttribute(stream, state) {
  function slimAttributeAssign (line 419) | function slimAttributeAssign(stream, state) {
  function slimAttributeValue (line 428) | function slimAttributeValue(stream, state) {
  function slimAttributeSymbols (line 447) | function slimAttributeSymbols(stream, state) {
  function readQuoted (line 456) | function readQuoted(quote, style, embed, unescaped, nextTokenize) {
  function slimContent (line 490) | function slimContent(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/slim/test.js
  function MT (line 8) | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arg...

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/smartymixed/smartymixed.js
  function reEsc (line 41) | function reEsc(str) { return str.replace(/[^\s\w]/g, "\\$&"); }

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/solr/solr.js
  function isNumber (line 21) | function isNumber(word) {
  function tokenString (line 25) | function tokenString(quote) {
  function tokenOperator (line 38) | function tokenOperator(operator) {
  function tokenWord (line 57) | function tokenWord(ch) {
  function tokenBase (line 76) | function tokenBase(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/soy/soy.js
  function last (line 29) | function last(array) {
  function tokenUntil (line 33) | function tokenUntil(stream, state, untilRegExp) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/sparql/sparql.js
  function wordRegexp (line 18) | function wordRegexp(words) {
  function tokenBase (line 37) | function tokenBase(stream, state) {
  function tokenLiteral (line 91) | function tokenLiteral(quote) {
  function pushContext (line 105) | function pushContext(state, type, col) {
  function popContext (line 108) | function popContext(state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/sql/sql.js
  function tokenBase (line 26) | function tokenBase(stream, state) {
  function tokenLiteral (line 120) | function tokenLiteral(quote) {
  function tokenComment (line 133) | function tokenComment(stream, state) {
  function pushContext (line 149) | function pushContext(stream, state, type) {
  function popContext (line 158) | function popContext(state) {
  function hookIdentifier (line 209) | function hookIdentifier(stream) {
  function hookVar (line 221) | function hookVar(stream) {
  function hookClient (line 248) | function hookClient(stream) {
  function set (line 263) | function set(str) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/stex/stex.js
  function pushCommand (line 22) | function pushCommand(state, command) {
  function peekCommand (line 26) | function peekCommand(state) {
  function popCommand (line 34) | function popCommand(state) {
  function getMostPowerful (line 42) | function getMostPowerful(state) {
  function addPluginPattern (line 54) | function addPluginPattern(pluginName, cmdStyle, styles) {
  function setState (line 88) | function setState(state, f) {
  function normal (line 93) | function normal(source, state) {
  function inMathMode (line 160) | function inMathMode(source, state, endModeSeq) {
  function beginParams (line 205) | function beginParams(source, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/stex/test.js
  function MT (line 6) | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arg...

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/stylus/stylus.js
  function urlTokens (line 312) | function urlTokens(stream, state) {
  function multilineComment (line 333) | function multilineComment(stream, state) {
  function buildStringTokenizer (line 344) | function buildStringTokenizer(quote, greedy) {
  function buildInterpolationTokenizer (line 376) | function buildInterpolationTokenizer(currentTokenizer) {
  function indent (line 388) | function indent(state) {
  function dedent (line 397) | function dedent(state) {
  function wordRegexp (line 429) | function wordRegexp(words) {
  function keySet (line 433) | function keySet(array) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/tcl/tcl.js
  function parseWords (line 17) | function parseWords(str) {
  function chain (line 37) | function chain(stream, state, f) {
  function tokenBase (line 41) | function tokenBase(stream, state) {
  function tokenString (line 92) | function tokenString(quote) {
  function tokenComment (line 106) | function tokenComment(stream, state) {
  function tokenUnparsed (line 117) | function tokenUnparsed(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/textile/test.js
  function MT (line 6) | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arg...

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/textile/textile.js
  function startNewLine (line 49) | function startNewLine(stream, state) {
  function handlePhraseModifier (line 58) | function handlePhraseModifier(stream, state, ch) {
  function togglePhraseModifier (line 119) | function togglePhraseModifier(stream, state, phraseModifier, closeRE, op...
  function tokenStyles (line 136) | function tokenStyles(state) {
  function textileDisabled (line 153) | function textileDisabled(state) {
  function tokenStylesWith (line 168) | function tokenStylesWith(state, extraStyles) {
  function activeStyles (line 179) | function activeStyles(state) {
  function blankLine (line 188) | function blankLine(state) {
  function RE (line 288) | function RE(name) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/tiddlywiki/tiddlywiki.js
  function kw (line 36) | function kw(type) {
  function chain (line 69) | function chain(stream, state, f) {
  function ret (line 78) | function ret(tp, style, cont) {
  function jsTokenBase (line 84) | function jsTokenBase(stream, state) {
  function twTokenComment (line 221) | function twTokenComment(stream, state) {
  function twTokenStrong (line 235) | function twTokenStrong(stream, state) {
  function twTokenCode (line 249) | function twTokenCode(stream, state) {
  function twTokenEm (line 271) | function twTokenEm(stream, state) {
  function twTokenUnderline (line 285) | function twTokenUnderline(stream, state) {
  function twTokenStrike (line 300) | function twTokenStrike(stream, state) {
  function twTokenMacro (line 314) | function twTokenMacro(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/tiki/tiki.js
  function inBlock (line 15) | function inBlock(style, terminator, returnTokenizer) {
  function inLine (line 31) | function inLine(style) {
  function inText (line 41) | function inText(stream, state) {
  function inPlugin (line 144) | function inPlugin(stream, state) {
  function inAttribute (line 178) | function inAttribute(quote) {
  function inAttributeNoQuote (line 190) | function inAttributeNoQuote() {
  function pass (line 205) | function pass() {
  function cont (line 209) | function cont() {
  function pushContext (line 214) | function pushContext(pluginName, startOfLine) {
  function popContext (line 225) | function popContext() {
  function element (line 229) | function element(type) {
  function endplugin (line 250) | function endplugin(startOfLine) {
  function endcloseplugin (line 262) | function endcloseplugin(err) {
  function attributes (line 270) | function attributes(type) {
  function attvalue (line 275) | function attvalue(type) {
  function attvaluemaybe (line 280) | function attvaluemaybe(type) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/tornado/tornado.js
  function tokenBase (line 25) | function tokenBase (stream, state) {
  function inTag (line 35) | function inTag (close) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/turtle/turtle.js
  function wordRegexp (line 18) | function wordRegexp(words) {
  function tokenBase (line 25) | function tokenBase(stream, state) {
  function tokenLiteral (line 77) | function tokenLiteral(quote) {
  function pushContext (line 91) | function pushContext(state, type, col) {
  function popContext (line 94) | function popContext(state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/vb/vb.js
  function wordRegexp (line 17) | function wordRegexp(words) {
  function indent (line 53) | function indent(_stream, state) {
  function dedent (line 57) | function dedent(_stream, state) {
  function tokenBase (line 61) | function tokenBase(stream, state) {
  function tokenStringFactory (line 171) | function tokenStringFactory(delimiter) {
  function tokenLexer (line 197) | function tokenLexer(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/vbscript/vbscript.js
  function wordRegexp (line 28) | function wordRegexp(words) {
  function indent (line 108) | function indent(_stream, state) {
  function dedent (line 112) | function dedent(_stream, state) {
  function tokenBase (line 116) | function tokenBase(stream, state) {
  function tokenStringFactory (line 259) | function tokenStringFactory(delimiter) {
  function tokenLexer (line 285) | function tokenLexer(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/velocity/velocity.js
  function parseWords (line 15) | function parseWords(str) {
  function chain (line 28) | function chain(stream, state, f) {
  function tokenBase (line 32) | function tokenBase(stream, state) {
  function tokenString (line 129) | function tokenString(quote) {
  function tokenComment (line 149) | function tokenComment(stream, state) {
  function tokenUnparsed (line 161) | function tokenUnparsed(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/verilog/test.js
  function MT (line 6) | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arg...

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/verilog/verilog.js
  function words (line 23) | function words(str) {
  function tokenBase (line 110) | function tokenBase(stream, state) {
  function tokenString (line 204) | function tokenString(quote) {
  function tokenComment (line 217) | function tokenComment(stream, state) {
  function Context (line 229) | function Context(indented, column, type, align, prev) {
  function pushContext (line 236) | function pushContext(state, col, type) {
  function popContext (line 241) | function popContext(state) {
  function isClosing (line 249) | function isClosing(text, contextClosing) {
  function buildElectricInputRegEx (line 264) | function buildElectricInputRegEx() {
  function svxGenIndent (line 385) | function svxGenIndent(stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/xml/test.js
  function MT (line 6) | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arg...

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/xml/xml.js
  function inText (line 66) | function inText(stream, state) {
  function inTag (line 113) | function inTag(stream, state) {
  function inAttribute (line 138) | function inAttribute(quote) {
  function inBlock (line 152) | function inBlock(style, terminator) {
  function doctype (line 164) | function doctype(depth) {
  function Context (line 185) | function Context(state, tagName, startOfLine) {
  function popContext (line 193) | function popContext(state) {
  function maybePopContext (line 196) | function maybePopContext(state, nextTagName) {
  function baseState (line 211) | function baseState(type, stream, state) {
  function tagNameState (line 221) | function tagNameState(type, stream, state) {
  function closeTagNameState (line 231) | function closeTagNameState(type, stream, state) {
  function closeState (line 250) | function closeState(type, _stream, state) {
  function closeStateErr (line 258) | function closeStateErr(type, stream, state) {
  function attrState (line 263) | function attrState(type, _stream, state) {
  function attrEqState (line 282) | function attrEqState(type, stream, state) {
  function attrValueState (line 287) | function attrValueState(type, stream, state) {
  function attrContinuedState (line 293) | function attrContinuedState(type, stream, state) {

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/xquery/test.js
  function MT (line 11) | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arg...

FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/xquery/xquery.js
  function kw (line 21) | function kw(type) {return {type: type, style: "keyword"};}
  function ret (line 75) | function ret(tp, style, cont) {
  function chain (line 80) | function chain(stream, state, f) {
  function tokenBase (line 86) | function tokenBase(stream, state) {
  function tokenComment (line 220) | function tokenComment(stream, state) {
  function tokenString (line 243) | function tokenString(quote, f) {
  function tokenVariable (line 283) | function tokenVariable(stream, state) {
  function tokenTag (line 300) | function tokenTag(name, isclose) {
  function tokenAttribute (line 323) | function tokenAttribute(stream, state) {
  function tokenXMLComment (line 358) | function tokenXMLComment(stream, state) {
  function tokenCDATA (line 370) | function tokenCDATA(stream, state) {
  function tokenPreProcessing (line 381) | function tokenPreProcessing(stream, state) {
  function isInXmlBlock (line 393) | function isInXmlBlock(state) { return isIn(state, "tag"); }
  function isInXmlAttributeBlock (line 394) | function isInXmlAttributeBlock(state) { return isIn(state, "attribute"); }
  function isInXmlConstructor (line 395) | function isInXmlConstructor(state) { return isIn(state, "xmlconstructor"...
  function isInString (line 396) | function isInString(state) { return isIn(state, "string"); }
  function isEQNameAhead (line 398) | function isEQNameAhead(stream) {
  function isIn (line 408) | function isIn(state, type) {
  function pushStateStack (line 412) | function pushStateStack(state, newState) {
  function popStateStack (line 416) | function popStateStack(state) {

FILE: public/vendor/dcat-admin/dcat/plugins/fontawesome-iconpicker/dist/js/fontawesome-iconpicker.js
  function k (line 12) | function k(a, b, c) {
  function l (line 15) | function l(b, c) {
  function m (line 18) | function m(b) {

FILE: public/vendor/dcat-admin/dcat/plugins/jquery-pjax/jquery.pjax.js
  function c (line 2) | function c(a){return function(b){return{}.toString.call(b)=="[object "+a...
  function d (line 2) | function d(){return B++}
  function e (line 2) | function e(a){return a.match(E)[0]}
  function f (line 2) | function f(a){for(a=a.replace(F,"/");a.match(G);)a=a.replace(G,"/");retu...
  function g (line 2) | function g(a){var b=a.length-1,c=a.charAt(b);return"#"===c?a.substring(0...
  function h (line 2) | function h(a){var b=v.alias;return b&&x(b[a])?b[a]:a}
  function i (line 2) | function i(a){var b=v.paths,c;return b&&(c=a.match(I))&&x(b[c[1]])&&(a=b...
  function j (line 2) | function j(a){var b=v.vars;return b&&a.indexOf("{")>-1&&(a=a.replace(J,f...
  function k (line 2) | function k(a){var b=v.map,c=a;if(b)for(var d=0,e=b.length;e>d;d++){var f...
  function l (line 2) | function l(a,b){var c,d=a.charAt(0);if(K.test(a))c=a;else if("."===d)c=f...
  function m (line 2) | function m(a,b){if(!a)return"";a=h(a),a=i(a),a=j(a),a=g(a);var c=l(a,b);...
  function n (line 2) | function n(a){return a.hasAttribute?a.src:a.getAttribute("src",4)}
  function o (line 2) | function o(a,b,c,d){var e=T.test(a),f=M.createElement(e?"link":"script")...
  function p (line 2) | function p(a,c,d,e){function f(){a.onload=a.onerror=a.onreadystatechange...
  function q (line 2) | function q(a,b){var c=a.sheet,d;if(W)c&&(d=!0);else if(c)try{c.cssRules&...
  function r (line 2) | function r(){if(U)return U;if(V&&"interactive"===V.readyState)return V;f...
  function s (line 2) | function s(a){var b=[];return a.replace(Y,"").replace(X,function(a,c,d){...
  function t (line 2) | function t(a,b){this.uri=a,this.dependencies=b||[],this.exports=null,thi...
  function c (line 2) | function c(){u.request(g.requestUri,g.onRequest,g.charset,g.crossorigin)}
  function d (line 2) | function d(){delete _[h],ab[h]=!0,$&&(t.save(f,$),$=null);var a,b=bb[h];...
  function a (line 2) | function a(b){return t.get(a.resolve(b)).exec()}
  function fnPjax (line 36) | function fnPjax(selector, container, options) {
  function handleClick (line 62) | function handleClick(event, container, options) {
  function handleSubmit (line 119) | function handleSubmit(event, container, options) {
  function pjax (line 172) | function pjax(options) {
  function pjaxReload (line 417) | function pjaxReload(container, options) {
  function locationReplace (line 434) | function locationReplace(url) {
  function onPjaxPopstate (line 460) | function onPjaxPopstate(event) {
  function fallbackPjax (line 544) | function fallbackPjax(options) {
  function abortXHR (line 584) | function abortXHR(xhr) {
  function uniqueId (line 597) | function uniqueId() {
  function cloneContents (line 601) | function cloneContents(container) {
  function stripInternalParams (line 614) | function stripInternalParams(url) {
  function parseURL (line 624) | function parseURL(url) {
  function stripHash (line 636) | function stripHash(location) {
  function optionsFor (line 657) | function optionsFor(container, options) {
  function findAll (line 678) | function findAll(elems, selector) {
  function parseHTML (line 682) | function parseHTML(html) {
  function extractContainer (line 697) | function extractContainer(data, xhr, options) {
  function cachePush (line 780) | function cachePush(id, value) {
  function cachePop (line 800) | function cachePop(direction, id, value) {
  function trimCacheStack (line 827) | function trimCacheStack(stack, length) {
  function findVersion (line 835) | function findVersion() {
  function enable (line 851) | function enable() {
  function disable (line 883) | function disable() {

FILE: public/vendor/dcat-admin/dcat/plugins/jquery-qrcode/dist/jquery-qrcode.js
  function __webpack_require__ (line 17) | function __webpack_require__(moduleId) {
  function qrPolynomial (line 1694) | function qrPolynomial(num, shift) {
  function toUTF8Array (line 2766) | function toUTF8Array(str) {

FILE: public/vendor/dcat-admin/dcat/plugins/jquery.initialize/jquery.initialize.js
  function grok (line 28) | function grok(msobserver) {

FILE: public/vendor/dcat-admin/dcat/plugins/moment-timezone/moment-timezone-with-data-10-year-range.js
  function charCodeToInt (line 52) | function charCodeToInt(charCode) {
  function unpackBase60 (line 61) | function unpackBase60(string) {
  function arrayToInt (line 93) | function arrayToInt (array) {
  function intToUntil (line 99) | function intToUntil (array, length) {
  function mapIndices (line 107) | function mapIndices (source, indices) {
  function unpack (line 117) | function unpack (string) {
  function Zone (line 142) | function Zone (packedString) {
  function Country (line 220) | function Country (country_name, zone_names) {
  function OffsetAt (line 229) | function OffsetAt(at) {
  function ZoneScore (line 253) | function ZoneScore(zone) {
  function findChange (line 266) | function findChange(low, high) {
  function userOffsets (line 281) | function userOffsets() {
  function sortZoneScores (line 305) | function sortZoneScores (a, b) {
  function addToGuesses (line 318) | function addToGuesses (name, offsets) {
  function guessesForUserOffsets (line 328) | function guessesForUserOffsets (offsets) {
  function rebuildGuess (line 352) | function rebuildGuess () {
  function guess (line 387) | function guess (i
Copy disabled (too large) Download .json
Condensed preview — 852 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (15,353K chars).
[
  {
    "path": ".editorconfig",
    "chars": 220,
    "preview": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\nindent_style = space\nindent_size = 4\ntrim_"
  },
  {
    "path": ".gitattributes",
    "chars": 111,
    "preview": "* text=auto\n*.css linguist-vendored\n*.scss linguist-vendored\n*.js linguist-vendored\nCHANGELOG.md export-ignore\n"
  },
  {
    "path": ".gitignore",
    "chars": 208,
    "preview": "/node_modules\n/public/hot\n/public/storage\n/public/uploads\n/storage/*.key\n/vendor\n.env\n.env.backup\n.phpunit.result.cache\n"
  },
  {
    "path": ".styleci.yml",
    "chars": 174,
    "preview": "php:\n  preset: laravel\n  disabled:\n    - unused_use\n  finder:\n    not-name:\n      - index.php\n      - server.php\njs:\n  f"
  },
  {
    "path": "Dockerfile",
    "chars": 289,
    "preview": "FROM webdevops/php-nginx:7.4\nCOPY . /app\nWORKDIR /app\nRUN [ \"sh\", \"-c\", \"composer install --ignore-platform-reqs\" ]\nRUN "
  },
  {
    "path": "LICENSE",
    "chars": 1073,
    "preview": "MIT License\n\nCopyright (c) 2023 assimon/dujiaoka\n\nPermission is hereby granted, free of charge, to any person obtaining "
  },
  {
    "path": "README.md",
    "chars": 975,
    "preview": "<p align=\"center\"><img src=\"https://i.loli.net/2020/04/07/nAzjDJlX7oc5qEw.png\" width=\"400\"></p>\n<p align=\"center\">\n<a hr"
  },
  {
    "path": "app/Admin/Actions/Post/BatchRestore.php",
    "chars": 1059,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/Admin/Actions/Post/Restore.php",
    "chars": 1016,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/Admin/Charts/DashBoard.php",
    "chars": 5026,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/Admin/Charts/PayoutRateCard.php",
    "chars": 3481,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/Admin/Charts/SalesCard.php",
    "chars": 3634,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/Admin/Charts/SuccessOrderCard.php",
    "chars": 2747,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/Admin/Controllers/AuthController.php",
    "chars": 164,
    "preview": "<?php\n\nnamespace App\\Admin\\Controllers;\n\nuse Dcat\\Admin\\Http\\Controllers\\AuthController as BaseAuthController;\n\nclass Au"
  },
  {
    "path": "app/Admin/Controllers/CarmisController.php",
    "chars": 4356,
    "preview": "<?php\n\nnamespace App\\Admin\\Controllers;\n\nuse App\\Admin\\Actions\\Post\\BatchRestore;\nuse App\\Admin\\Actions\\Post\\Restore;\nus"
  },
  {
    "path": "app/Admin/Controllers/CouponController.php",
    "chars": 4048,
    "preview": "<?php\n\nnamespace App\\Admin\\Controllers;\n\nuse App\\Admin\\Actions\\Post\\BatchRestore;\nuse App\\Admin\\Actions\\Post\\Restore;\nus"
  },
  {
    "path": "app/Admin/Controllers/EmailTestController.php",
    "chars": 853,
    "preview": "<?php\r\n/**\r\n * The file was created by Assimon.\r\n *\r\n * @author    ZhangYiQiu<me@zhangyiqiu.net>\r\n * @copyright ZhangYiQ"
  },
  {
    "path": "app/Admin/Controllers/EmailtplController.php",
    "chars": 2852,
    "preview": "<?php\n\nnamespace App\\Admin\\Controllers;\n\nuse App\\Admin\\Actions\\Post\\BatchRestore;\nuse App\\Admin\\Actions\\Post\\Restore;\nus"
  },
  {
    "path": "app/Admin/Controllers/GoodsController.php",
    "chars": 6839,
    "preview": "<?php\n\nnamespace App\\Admin\\Controllers;\n\nuse App\\Admin\\Actions\\Post\\BatchRestore;\nuse App\\Admin\\Actions\\Post\\Restore;\nus"
  },
  {
    "path": "app/Admin/Controllers/GoodsGroupController.php",
    "chars": 3070,
    "preview": "<?php\n\nnamespace App\\Admin\\Controllers;\n\nuse App\\Admin\\Actions\\Post\\BatchRestore;\nuse App\\Admin\\Actions\\Post\\Restore;\nus"
  },
  {
    "path": "app/Admin/Controllers/HomeController.php",
    "chars": 1271,
    "preview": "<?php\n\nnamespace App\\Admin\\Controllers;\n\nuse App\\Admin\\Charts\\DashBoard;\nuse App\\Admin\\Charts\\PayoutRateCard;\nuse App\\Ad"
  },
  {
    "path": "app/Admin/Controllers/OrderController.php",
    "chars": 6411,
    "preview": "<?php\n\nnamespace App\\Admin\\Controllers;\n\nuse App\\Admin\\Actions\\Post\\BatchRestore;\nuse App\\Admin\\Actions\\Post\\Restore;\nus"
  },
  {
    "path": "app/Admin/Controllers/PayController.php",
    "chars": 4588,
    "preview": "<?php\n\nnamespace App\\Admin\\Controllers;\n\nuse App\\Admin\\Actions\\Post\\BatchRestore;\nuse App\\Admin\\Actions\\Post\\Restore;\nus"
  },
  {
    "path": "app/Admin/Controllers/SystemSettingController.php",
    "chars": 816,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/Admin/Forms/EmailTest.php",
    "chars": 2406,
    "preview": "<?php\r\n/**\r\n * The file was created by Assimon.\r\n *\r\n * @author    ZhangYiQiu<me@zhangyiqiu.net>\r\n * @copyright ZhangYiQ"
  },
  {
    "path": "app/Admin/Forms/ImportCarmis.php",
    "chars": 2405,
    "preview": "<?php\n\nnamespace App\\Admin\\Forms;\n\nuse App\\Models\\Carmis;\nuse App\\Models\\Goods;\nuse Dcat\\Admin\\Widgets\\Form;\nuse Illumin"
  },
  {
    "path": "app/Admin/Forms/SystemSetting.php",
    "chars": 5454,
    "preview": "<?php\n\nnamespace App\\Admin\\Forms;\n\nuse App\\Models\\BaseModel;\nuse Dcat\\Admin\\Widgets\\Form;\nuse Illuminate\\Support\\Facades"
  },
  {
    "path": "app/Admin/Repositories/Carmis.php",
    "chars": 270,
    "preview": "<?php\n\nnamespace App\\Admin\\Repositories;\n\nuse App\\Models\\Carmis as Model;\nuse Dcat\\Admin\\Repositories\\EloquentRepository"
  },
  {
    "path": "app/Admin/Repositories/Coupon.php",
    "chars": 268,
    "preview": "<?php\n\nnamespace App\\Admin\\Repositories;\n\nuse App\\Models\\Coupon as Model;\nuse Dcat\\Admin\\Repositories\\EloquentRepository"
  },
  {
    "path": "app/Admin/Repositories/Emailtpl.php",
    "chars": 272,
    "preview": "<?php\n\nnamespace App\\Admin\\Repositories;\n\nuse App\\Models\\Emailtpl as Model;\nuse Dcat\\Admin\\Repositories\\EloquentReposito"
  },
  {
    "path": "app/Admin/Repositories/Goods.php",
    "chars": 266,
    "preview": "<?php\n\nnamespace App\\Admin\\Repositories;\n\nuse App\\Models\\Goods as Model;\nuse Dcat\\Admin\\Repositories\\EloquentRepository;"
  },
  {
    "path": "app/Admin/Repositories/GoodsGroup.php",
    "chars": 278,
    "preview": "<?php\n\nnamespace App\\Admin\\Repositories;\n\nuse App\\Models\\GoodsGroup as Model;\nuse Dcat\\Admin\\Repositories\\EloquentReposi"
  },
  {
    "path": "app/Admin/Repositories/Order.php",
    "chars": 266,
    "preview": "<?php\n\nnamespace App\\Admin\\Repositories;\n\nuse App\\Models\\Order as Model;\nuse Dcat\\Admin\\Repositories\\EloquentRepository;"
  },
  {
    "path": "app/Admin/Repositories/Pay.php",
    "chars": 262,
    "preview": "<?php\n\nnamespace App\\Admin\\Repositories;\n\nuse App\\Models\\Pay as Model;\nuse Dcat\\Admin\\Repositories\\EloquentRepository;\n\n"
  },
  {
    "path": "app/Admin/bootstrap.php",
    "chars": 636,
    "preview": "<?php\n\nuse Dcat\\Admin\\Admin;\nuse Dcat\\Admin\\Grid;\nuse Dcat\\Admin\\Form;\nuse Dcat\\Admin\\Grid\\Filter;\nuse Dcat\\Admin\\Show;\n"
  },
  {
    "path": "app/Admin/routes.php",
    "chars": 955,
    "preview": "<?php\n\nuse Illuminate\\Routing\\Router;\nuse Illuminate\\Support\\Facades\\Route;\nuse Dcat\\Admin\\Admin;\n\nAdmin::routes();\n\nRou"
  },
  {
    "path": "app/Console/Kernel.php",
    "chars": 848,
    "preview": "<?php\n\nnamespace App\\Console;\n\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as C"
  },
  {
    "path": "app/Events/GoodsDeleted.php",
    "chars": 874,
    "preview": "<?php\n\nnamespace App\\Events;\n\nuse App\\Models\\Goods;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\Int"
  },
  {
    "path": "app/Events/GoodsGroupDeleted.php",
    "chars": 909,
    "preview": "<?php\n\nnamespace App\\Events;\n\nuse App\\Models\\GoodsGroup;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcastin"
  },
  {
    "path": "app/Events/OrderUpdated.php",
    "chars": 874,
    "preview": "<?php\n\nnamespace App\\Events;\n\nuse App\\Models\\Order;\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Broadcasting\\Int"
  },
  {
    "path": "app/Exceptions/AppException.php",
    "chars": 236,
    "preview": "<?php\n\n\nnamespace App\\Exceptions;\n\n\nclass AppException extends \\Exception\n{\n\n    public function __construct($message = "
  },
  {
    "path": "app/Exceptions/Handler.php",
    "chars": 1443,
    "preview": "<?php\n\nnamespace App\\Exceptions;\n\nuse Exception;\nuse Illuminate\\Foundation\\Exceptions\\Handler as ExceptionHandler;\n\nclas"
  },
  {
    "path": "app/Exceptions/RuleValidationException.php",
    "chars": 249,
    "preview": "<?php\n\n\nnamespace App\\Exceptions;\n\n\nclass RuleValidationException extends \\Exception\n{\n\n    public function __construct("
  },
  {
    "path": "app/Helpers/functions.php",
    "chars": 6772,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/Http/Controllers/BaseController.php",
    "chars": 1585,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/Http/Controllers/Controller.php",
    "chars": 361,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests;\nuse Illuminate\\Foundat"
  },
  {
    "path": "app/Http/Controllers/Home/HomeController.php",
    "chars": 6149,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Home;\n\nuse App\\Exceptions\\RuleValidationException;\nuse App\\Http\\Controllers\\BaseCo"
  },
  {
    "path": "app/Http/Controllers/Home/OrderController.php",
    "chars": 8399,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Home;\n\nuse App\\Exceptions\\RuleValidationException;\nuse App\\Http\\Controllers\\BaseCo"
  },
  {
    "path": "app/Http/Controllers/Pay/AlipayController.php",
    "chars": 4025,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Pay;\n\nuse App\\Exceptions\\RuleValidationException;\nuse App\\Http\\Controllers\\PayCont"
  },
  {
    "path": "app/Http/Controllers/Pay/CoinbaseController.php",
    "chars": 5881,
    "preview": "<?php\nnamespace App\\Http\\Controllers\\Pay;\n\nuse App\\Exceptions\\RuleValidationException;\nuse App\\Http\\Controllers\\PayContr"
  },
  {
    "path": "app/Http/Controllers/Pay/EpusdtController.php",
    "chars": 3525,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/Http/Controllers/Pay/MapayController.php",
    "chars": 2737,
    "preview": "<?php\nnamespace App\\Http\\Controllers\\Pay;\n\n\nuse App\\Exceptions\\RuleValidationException;\nuse App\\Http\\Controllers\\PayCont"
  },
  {
    "path": "app/Http/Controllers/Pay/PayjsController.php",
    "chars": 2831,
    "preview": "<?php\nnamespace App\\Http\\Controllers\\Pay;\n\nuse App\\Exceptions\\RuleValidationException;\nuse App\\Http\\Controllers\\PayContr"
  },
  {
    "path": "app/Http/Controllers/Pay/PaypalPayController.php",
    "chars": 5280,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Pay;\n\n\nuse AmrShawky\\LaravelCurrency\\Facade\\Currency;\nuse App\\Exceptions\\RuleValid"
  },
  {
    "path": "app/Http/Controllers/Pay/PaysapiController.php",
    "chars": 4977,
    "preview": "<?php\nnamespace App\\Http\\Controllers\\Pay;\n\n\nuse App\\Exceptions\\RuleValidationException;\nuse App\\Http\\Controllers\\PayCont"
  },
  {
    "path": "app/Http/Controllers/Pay/StripeController.php",
    "chars": 19059,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Pay;\n\nuse App\\Exceptions\\RuleValidationException;\nuse App\\Http\\Controllers\\PayCont"
  },
  {
    "path": "app/Http/Controllers/Pay/TokenPayController.php",
    "chars": 3735,
    "preview": "<?php\r\n/**\r\n * The file was created by LightCountry.\r\n *\r\n * @author    https://github.com/LightCountry\r\n * @copyright h"
  },
  {
    "path": "app/Http/Controllers/Pay/VpayController.php",
    "chars": 3018,
    "preview": "<?php\n/**\n * VpayController.php\n * V免签\n * Author iLay1678\n * Created on 2020/5/1 11:59\n */\n\nnamespace App\\Http\\Controlle"
  },
  {
    "path": "app/Http/Controllers/Pay/WepayController.php",
    "chars": 3247,
    "preview": "<?php\nnamespace App\\Http\\Controllers\\Pay;\n\n\nuse App\\Exceptions\\RuleValidationException;\nuse App\\Http\\Controllers\\PayCont"
  },
  {
    "path": "app/Http/Controllers/Pay/YipayController.php",
    "chars": 3687,
    "preview": "<?php\nnamespace App\\Http\\Controllers\\Pay;\n\nuse App\\Exceptions\\RuleValidationException;\nuse App\\Http\\Controllers\\PayContr"
  },
  {
    "path": "app/Http/Controllers/PayController.php",
    "chars": 3429,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Exceptions\\RuleValidationException;\nuse App\\Models\\Order;\nuse App\\Servic"
  },
  {
    "path": "app/Http/Kernel.php",
    "chars": 3323,
    "preview": "<?php\n\nnamespace App\\Http;\n\nuse App\\Http\\Middleware\\DujiaoBoot;\nuse App\\Http\\Middleware\\InstallCheck;\nuse App\\Http\\Middl"
  },
  {
    "path": "app/Http/Middleware/Authenticate.php",
    "chars": 469,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Auth\\Middleware\\Authenticate as Middleware;\n\nclass Authenticate ex"
  },
  {
    "path": "app/Http/Middleware/CheckForMaintenanceMode.php",
    "chars": 335,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode as Middleware;\n"
  },
  {
    "path": "app/Http/Middleware/DujiaoBoot.php",
    "chars": 1760,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse App\\Models\\BaseModel;\nuse Closure;\nuse Germey\\Geetest\\GeetestServiceProvider;"
  },
  {
    "path": "app/Http/Middleware/DujiaoSystem.php",
    "chars": 689,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse App\\Providers\\AppServiceProvider;\nuse Closure;\n\nclass DujiaoSystem\n{\n    /**\n"
  },
  {
    "path": "app/Http/Middleware/EncryptCookies.php",
    "chars": 294,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Cookie\\Middleware\\EncryptCookies as Middleware;\n\nclass EncryptCook"
  },
  {
    "path": "app/Http/Middleware/InstallCheck.php",
    "chars": 513,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\n\nclass InstallCheck\n{\n    /**\n     * Handle an incoming request.\n   "
  },
  {
    "path": "app/Http/Middleware/PayGateWay.php",
    "chars": 331,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\n\nclass PayGateWay\n{\n\n    /**\n     * Handle an incoming request.\n    "
  },
  {
    "path": "app/Http/Middleware/RedirectIfAuthenticated.php",
    "chars": 582,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse App\\Providers\\RouteServiceProvider;\nuse Closure;\nuse Illuminate\\Support\\Facad"
  },
  {
    "path": "app/Http/Middleware/TrimStrings.php",
    "chars": 340,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\TrimStrings as Middleware;\n\nclass TrimS"
  },
  {
    "path": "app/Http/Middleware/TrustProxies.php",
    "chars": 436,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Fideloper\\Proxy\\TrustProxies as Middleware;\nuse Illuminate\\Http\\Request;\n\ncla"
  },
  {
    "path": "app/Http/Middleware/VerifyCsrfToken.php",
    "chars": 469,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken as Middleware;\n\nclass V"
  },
  {
    "path": "app/Jobs/ApiHook.php",
    "chars": 1905,
    "preview": "<?php\n\nnamespace App\\Jobs;\n\nuse App\\Models\\Order;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQue"
  },
  {
    "path": "app/Jobs/BarkPush.php",
    "chars": 2427,
    "preview": "<?php\r\n\r\nnamespace App\\Jobs;\r\n\r\nuse App\\Models\\Order;\r\nuse GuzzleHttp\\Client;\r\nuse Illuminate\\Bus\\Queueable;\r\nuse Illumi"
  },
  {
    "path": "app/Jobs/CouponBack.php",
    "chars": 1113,
    "preview": "<?php\n\nnamespace App\\Jobs;\n\nuse App\\Models\\Order;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQue"
  },
  {
    "path": "app/Jobs/MailSend.php",
    "chars": 2037,
    "preview": "<?php\n\nnamespace App\\Jobs;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Fou"
  },
  {
    "path": "app/Jobs/OrderExpired.php",
    "chars": 1208,
    "preview": "<?php\n\nnamespace App\\Jobs;\n\nuse App\\Models\\Order;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQue"
  },
  {
    "path": "app/Jobs/ServerJiang.php",
    "chars": 1712,
    "preview": "<?php\n\nnamespace App\\Jobs;\n\nuse App\\Models\\Order;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQue"
  },
  {
    "path": "app/Jobs/TelegramPush.php",
    "chars": 2217,
    "preview": "<?php\n\nnamespace App\\Jobs;\n\nuse App\\Models\\Order;\nuse GuzzleHttp\\Client;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Co"
  },
  {
    "path": "app/Jobs/WorkWeiXinPush.php",
    "chars": 2486,
    "preview": "<?php\r\n\r\nnamespace App\\Jobs;\r\n\r\nuse App\\Models\\Order;\r\nuse GuzzleHttp\\Client;\r\nuse Illuminate\\Bus\\Queueable;\r\nuse Illumi"
  },
  {
    "path": "app/Listeners/GoodsDeleted.php",
    "chars": 586,
    "preview": "<?php\n\nnamespace App\\Listeners;\n\nuse App\\Models\\Carmis;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue"
  },
  {
    "path": "app/Listeners/GoodsGroupDeleted.php",
    "chars": 625,
    "preview": "<?php\n\nnamespace App\\Listeners;\n\nuse App\\Models\\Goods;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\"
  },
  {
    "path": "app/Listeners/OrderUpdated.php",
    "chars": 2474,
    "preview": "<?php\n\nnamespace App\\Listeners;\n\nuse App\\Jobs\\MailSend;\nuse App\\Models\\Emailtpl;\nuse App\\Models\\Order;\nuse Illuminate\\Co"
  },
  {
    "path": "app/Models/BaseModel.php",
    "chars": 819,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/Models/Carmis.php",
    "chars": 1025,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\nclass Carmis extends BaseModel\n{\n\n    use S"
  },
  {
    "path": "app/Models/Coupon.php",
    "chars": 1000,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\nclass Coupon extends BaseModel\n{\n\n    use S"
  },
  {
    "path": "app/Models/Emailtpl.php",
    "chars": 210,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Database\\Eloquent\\Model;\n\ncla"
  },
  {
    "path": "app/Models/Goods.php",
    "chars": 2253,
    "preview": "<?php\n\nnamespace App\\Models;\n\n\nuse App\\Events\\GoodsDeleted;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\nclass Goods e"
  },
  {
    "path": "app/Models/GoodsGroup.php",
    "chars": 624,
    "preview": "<?php\n\nnamespace App\\Models;\n\n\nuse App\\Events\\GoodsGroupDeleted;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\nclass Go"
  },
  {
    "path": "app/Models/Order.php",
    "chars": 3063,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Events\\OrderUpdated;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\nclass Order ex"
  },
  {
    "path": "app/Models/Pay.php",
    "chars": 1033,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Database\\Eloquent\\Model;\n\ncla"
  },
  {
    "path": "app/Providers/AppServiceProvider.php",
    "chars": 1744,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Service\\CarmisService;\nuse App\\Service\\CouponService;\nuse App\\Service\\EmailtplS"
  },
  {
    "path": "app/Providers/AuthServiceProvider.php",
    "chars": 578,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Foundation\\Support\\Providers\\AuthServiceProvider as ServiceProvider;\nuse"
  },
  {
    "path": "app/Providers/BroadcastServiceProvider.php",
    "chars": 380,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Broadcast;\nuse Illuminate\\Support\\ServiceProvider;\n\nclas"
  },
  {
    "path": "app/Providers/EventServiceProvider.php",
    "chars": 1087,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Events\\GoodsDeleted;\nuse App\\Events\\GoodsGroupDeleted;\nuse App\\Events\\OrderUpda"
  },
  {
    "path": "app/Providers/RouteServiceProvider.php",
    "chars": 1663,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Foundation\\Support\\Providers\\RouteServiceProvider as ServiceProvider;\nus"
  },
  {
    "path": "app/Rules/SearchPwd.php",
    "chars": 840,
    "preview": "<?php\n\nnamespace App\\Rules;\n\nuse App\\Models\\BaseModel;\nuse Illuminate\\Contracts\\Validation\\Rule;\n\nclass SearchPwd implem"
  },
  {
    "path": "app/Rules/VerifyImg.php",
    "chars": 838,
    "preview": "<?php\n\nnamespace App\\Rules;\n\nuse App\\Models\\BaseModel;\nuse Illuminate\\Contracts\\Validation\\Rule;\n\nclass VerifyImg implem"
  },
  {
    "path": "app/Service/CarmisService.php",
    "chars": 1221,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/Service/CouponService.php",
    "chars": 1863,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/Service/EmailtplService.php",
    "chars": 627,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/Service/GoodsService.php",
    "chars": 3883,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/Service/OrderProcessService.php",
    "chars": 14390,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/Service/OrderService.php",
    "chars": 8977,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/Service/PayService.php",
    "chars": 1821,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "app/User.php",
    "chars": 734,
    "preview": "<?php\n\nnamespace App;\n\nuse Illuminate\\Contracts\\Auth\\MustVerifyEmail;\nuse Illuminate\\Foundation\\Auth\\User as Authenticat"
  },
  {
    "path": "artisan",
    "chars": 1686,
    "preview": "#!/usr/bin/env php\n<?php\n\ndefine('LARAVEL_START', microtime(true));\n\n/*\n|-----------------------------------------------"
  },
  {
    "path": "bootstrap/app.php",
    "chars": 1620,
    "preview": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Create The Application\n|--------"
  },
  {
    "path": "bootstrap/cache/.gitignore",
    "chars": 14,
    "preview": "*\n!.gitignore\n"
  },
  {
    "path": "composer.json",
    "chars": 2052,
    "preview": "{\n    \"name\": \"laravel/laravel\",\n    \"type\": \"project\",\n    \"description\": \"The Laravel Framework.\",\n    \"keywords\": [\n "
  },
  {
    "path": "config/admin.php",
    "chars": 11391,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | dcat-admin"
  },
  {
    "path": "config/app.php",
    "chars": 9433,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Applicatio"
  },
  {
    "path": "config/auth.php",
    "chars": 3796,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentica"
  },
  {
    "path": "config/broadcasting.php",
    "chars": 1601,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Br"
  },
  {
    "path": "config/cache.php",
    "chars": 3066,
    "preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------"
  },
  {
    "path": "config/database.php",
    "chars": 5066,
    "preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------"
  },
  {
    "path": "config/dujiaoka.php",
    "chars": 447,
    "preview": "<?php\n/**\n * The file was created by Assimon.\n *\n * @author    assimon<ashang@utf8.hk>\n * @copyright assimon<ashang@utf8"
  },
  {
    "path": "config/filesystems.php",
    "chars": 2364,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Fi"
  },
  {
    "path": "config/geetest.php",
    "chars": 2449,
    "preview": "<?php\nreturn [\n\n\t/*\n\t|--------------------------------------------------------------------------\n\t| Config Language\n\t|--"
  },
  {
    "path": "config/hashing.php",
    "chars": 1571,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Ha"
  },
  {
    "path": "config/logging.php",
    "chars": 2896,
    "preview": "<?php\n\nuse Monolog\\Handler\\NullHandler;\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Handler\\SyslogUdpHandler;\n\nreturn"
  },
  {
    "path": "config/mail.php",
    "chars": 4676,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Mail Drive"
  },
  {
    "path": "config/queue.php",
    "chars": 2717,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Qu"
  },
  {
    "path": "config/services.php",
    "chars": 950,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Third Part"
  },
  {
    "path": "config/session.php",
    "chars": 6980,
    "preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------"
  },
  {
    "path": "config/view.php",
    "chars": 1053,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | View Stora"
  },
  {
    "path": "database/.gitignore",
    "chars": 26,
    "preview": "*.sqlite\n*.sqlite-journal\n"
  },
  {
    "path": "database/factories/OrderFactory.php",
    "chars": 1198,
    "preview": "<?php\n\n/** @var \\Illuminate\\Database\\Eloquent\\Factory $factory */\n\nuse App\\Model;\nuse Faker\\Generator as Faker;\nuse Illu"
  },
  {
    "path": "database/seeds/DatabaseSeeder.php",
    "chars": 247,
    "preview": "<?php\n\nuse Illuminate\\Database\\Seeder;\n\nclass DatabaseSeeder extends Seeder\n{\n    /**\n     * Seed the application's data"
  },
  {
    "path": "database/seeds/OrderTableSeeder.php",
    "chars": 251,
    "preview": "<?php\n\nuse Illuminate\\Database\\Seeder;\n\nclass OrderTableSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n "
  },
  {
    "path": "database/sql/install.sql",
    "chars": 82313,
    "preview": "SET NAMES utf8mb4;\nSET FOREIGN_KEY_CHECKS = 0;\n\n-- ----------------------------\n-- Table structure for admin_menu\n-- ---"
  },
  {
    "path": "dcat_admin_ide_helper.php",
    "chars": 19095,
    "preview": "<?php\n\n/**\n * A helper file for Dcat Admin, to provide autocomplete information to your IDE\n *\n * This file should not b"
  },
  {
    "path": "debian_manual.md",
    "chars": 4241,
    "preview": "## 写在前面\n\n- 此教程专为有洁癖的宝宝们准备。不使用任何一键安装脚本。面板党可以退散了!!\n- 本人测试环境是 Debian 11 其他的没测试。\n## 手动安装lnmp\n- 更新源\n\n```bash  \napt update  \na"
  },
  {
    "path": "docker-compose.yml",
    "chars": 524,
    "preview": "version: \"2.2\"\nservices:\n  web:\n    build: .\n    container_name: dujiaoka\n    ports:\n      - \"80:80\"\n      - \"9000:9000\""
  },
  {
    "path": "package.json",
    "chars": 1004,
    "preview": "{\n    \"private\": true,\n    \"scripts\": {\n        \"dev\": \"npm run development\",\n        \"development\": \"cross-env NODE_ENV"
  },
  {
    "path": "phpunit.xml",
    "chars": 1140,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNam"
  },
  {
    "path": "public/.htaccess",
    "chars": 593,
    "preview": "<IfModule mod_rewrite.c>\n    <IfModule mod_negotiation.c>\n        Options -MultiViews -Indexes\n    </IfModule>\n\n    Rewr"
  },
  {
    "path": "public/assets/hyper/css/hyper-loading.css",
    "chars": 1437,
    "preview": "#loading {\n\tbackground-color: #eee;\n\theight: 100%;\n\twidth: 100%;\n\tposition: fixed;\n\tz-index: 1;\n\tmargin-top: 0px;\n\ttop: "
  },
  {
    "path": "public/assets/hyper/css/hyper.css",
    "chars": 10011,
    "preview": "/* app-creative.min.css */\n.modal-header {\n    padding: 6px 12px !important;\n}\n.btn-danger:focus,\n.btn-danger:not(:disab"
  },
  {
    "path": "public/assets/hyper/css/vendor/buttons.bootstrap4.css",
    "chars": 5036,
    "preview": "@keyframes dtb-spinner {\n  100% {\n    transform: rotate(360deg);\n  }\n}\n@-o-keyframes dtb-spinner {\n  100% {\n    -o-trans"
  },
  {
    "path": "public/assets/hyper/css/vendor/dataTables.bootstrap4.css",
    "chars": 5799,
    "preview": "table.dataTable {\n  clear: both;\n  margin-top: 6px !important;\n  margin-bottom: 6px !important;\n  max-width: none !impor"
  },
  {
    "path": "public/assets/hyper/css/vendor/frappe-gantt.css",
    "chars": 2405,
    "preview": ".gantt .grid-background {\n  fill: none; }\n\n.gantt .grid-header {\n  fill: #ffffff;\n  stroke: #e0e0e0;\n  stroke-width: 1.4"
  },
  {
    "path": "public/assets/hyper/css/vendor/jquery-jvectormap-1.2.2.css",
    "chars": 692,
    "preview": ".jvectormap-label {\n    position: absolute;\n    display: none;\n    border: solid 1px #CDCDCD;\n    -webkit-border-radius:"
  },
  {
    "path": "public/assets/hyper/css/vendor/responsive.bootstrap4.css",
    "chars": 4739,
    "preview": "table.dataTable.dtr-inline.collapsed > tbody > tr > td.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.chi"
  },
  {
    "path": "public/assets/hyper/css/vendor/select.bootstrap4.css",
    "chars": 4626,
    "preview": "table.dataTable tbody > tr.selected,\ntable.dataTable tbody > tr > .selected {\n  background-color: #0275d8;\n}\ntable.dataT"
  },
  {
    "path": "public/assets/hyper/css/vendor/summernote-bs4.css",
    "chars": 18861,
    "preview": "@font-face{font-family:\"summernote\";font-style:normal;font-weight:normal;src:url(\"https://coderthemes.com/hyper/creative"
  },
  {
    "path": "public/assets/hyper/js/hyper.js",
    "chars": 20501,
    "preview": "$(function() {\n\tlet tipsSvg = '<svg style=\"vertical-align: middle;margin-right: 5px\" t=\"1602926160057\" class=\"icon\" view"
  },
  {
    "path": "public/assets/luna/js/viewerjs/viewer.common.js",
    "chars": 87708,
    "preview": "/*!\n * Viewer.js v1.7.1\n * https://fengyuanchen.github.io/viewerjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Release"
  },
  {
    "path": "public/assets/luna/js/viewerjs/viewer.css",
    "chars": 9281,
    "preview": "/*!\n * Viewer.js v1.7.1\n * https://fengyuanchen.github.io/viewerjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Release"
  },
  {
    "path": "public/assets/luna/js/viewerjs/viewer.esm.js",
    "chars": 87691,
    "preview": "/*!\n * Viewer.js v1.7.1\n * https://fengyuanchen.github.io/viewerjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Release"
  },
  {
    "path": "public/assets/luna/js/viewerjs/viewer.js",
    "chars": 93454,
    "preview": "/*!\n * Viewer.js v1.7.1\n * https://fengyuanchen.github.io/viewerjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Release"
  },
  {
    "path": "public/assets/luna/layui/css/layui.css",
    "chars": 74303,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n .layui-inline,img{display:inline-block;vertical-align:middle}h"
  },
  {
    "path": "public/assets/luna/layui/css/layui.mobile.css",
    "chars": 9885,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,inp"
  },
  {
    "path": "public/assets/luna/layui/css/modules/code.css",
    "chars": 1063,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n html #layuicss-skincodecss{display:none;position:absolute;widt"
  },
  {
    "path": "public/assets/luna/layui/css/modules/laydate/default/laydate.css",
    "chars": 7537,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n .laydate-set-ym,.layui-laydate,.layui-laydate *,.layui-laydate"
  },
  {
    "path": "public/assets/luna/layui/css/modules/layer/default/layer.css",
    "chars": 14425,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n .layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .la"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/carousel.js",
    "chars": 3862,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var i=layui.$,"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/code.js",
    "chars": 1177,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var a=layui.$,"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/colorpicker.js",
    "chars": 11731,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var i=layui.jq"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/element.js",
    "chars": 7260,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;layui.define(\"jquery\",function(t){\"use strict\";var a=layui.$,"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/flow.js",
    "chars": 2008,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var l=layui.$,"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/form.js",
    "chars": 9315,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;layui.define(\"layer\",function(e){\"use strict\";var t=layui.$,i"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/jquery.js",
    "chars": 97648,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;!function(e,t){\"object\"==typeof module&&\"object\"==typeof modu"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/laydate.js",
    "chars": 27053,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;!function(){\"use strict\";var e=window.layui&&layui.define,t={"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/layedit.js",
    "chars": 12221,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;layui.define([\"layer\",\"form\"],function(t){\"use strict\";var e="
  },
  {
    "path": "public/assets/luna/layui/lay/modules/layer.js",
    "chars": 22041,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;!function(e,t){\"use strict\";var i,n,a=e.layui&&layui.define,o"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/laypage.js",
    "chars": 4464,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;layui.define(function(e){\"use strict\";var a=document,t=\"getEl"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/laytpl.js",
    "chars": 1834,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;layui.define(function(e){\"use strict\";var r={open:\"{{\",close:"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/mobile.js",
    "chars": 31387,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;layui.define(function(i){i(\"layui.mobile\",layui.v)});layui.de"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/rate.js",
    "chars": 2749,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var a=layui.jq"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/slider.js",
    "chars": 7049,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var i=layui.jq"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/table.js",
    "chars": 31409,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;layui.define([\"laytpl\",\"laypage\",\"layer\",\"form\",\"util\"],funct"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/transfer.js",
    "chars": 6286,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;layui.define([\"laytpl\",\"form\"],function(e){\"use strict\";var a"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/tree.js",
    "chars": 11514,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;layui.define(\"form\",function(e){\"use strict\";var i=layui.$,a="
  },
  {
    "path": "public/assets/luna/layui/lay/modules/upload.js",
    "chars": 7242,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;layui.define(\"layer\",function(e){\"use strict\";var t=layui.$,i"
  },
  {
    "path": "public/assets/luna/layui/lay/modules/util.js",
    "chars": 3812,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var t=layui.$,"
  },
  {
    "path": "public/assets/luna/layui/layui.js",
    "chars": 7381,
    "preview": "/** layui-v2.5.6 MIT License By https://www.layui.com */\n ;!function(e){\"use strict\";var t=document,n={modules:{},status"
  },
  {
    "path": "public/assets/luna/main.css",
    "chars": 15426,
    "preview": ".background{\n    position:fixed;\n    top: 0;\n    left: 0;\n    width:100%;\n    height:100%;\n    min-width: 1000px;\n    z-"
  },
  {
    "path": "public/assets/luna/main.js",
    "chars": 23756,
    "preview": "!function (w) {\n    w.clientWidth = document.body.clientWidth;\n    w.clientHeight = document.body.clientHeight;\n    let "
  },
  {
    "path": "public/assets/style/js/clipboard/clipboard.js",
    "chars": 29492,
    "preview": "/*!\n * clipboard.js v2.0.6\n * https://clipboardjs.com/\n * \n * Licensed MIT © Zeno Rocha\n */\n(function webpackUniversalMo"
  },
  {
    "path": "public/assets/style/main.css",
    "chars": 1997,
    "preview": "* {\n    margin: 0;\n    padding: 0;\n}\nbody {\n    background-color: #F2F2F2;\n}\n\n.cardcon {\n    margin-top: 20px;\n}\n\n.logo "
  },
  {
    "path": "public/assets/unicorn/css/base.css",
    "chars": 710,
    "preview": "\n* {\n    margin: 0;\n    padding: 0;\n    /* css3盒子模型 */\n    box-sizing: border-box;\n}\n\nem,\ni {\n    font-style: normal\n}\n\n"
  },
  {
    "path": "public/assets/unicorn/css/common.css",
    "chars": 1428,
    "preview": "@font-face {\n    font-family: 'iconfont';\n    src: url('../fonts/iconfont.woff2?t=1631608872177') format('woff2'),\n    u"
  },
  {
    "path": "public/assets/unicorn/css/index.css",
    "chars": 722,
    "preview": ".recommend p {\n    font-size: 14px;\n}\n\n.category {\n    padding: 40px 0;\n}\n\n.separator {\n    display: block;\n    width: 6"
  },
  {
    "path": "public/assets/unicorn/js/bootstrap-input-spinner.js",
    "chars": 14936,
    "preview": "/**\n * Author and copyright: Stefan Haack (https://shaack.com)\n * Repository: https://github.com/shaack/bootstrap-input-"
  },
  {
    "path": "public/index.php",
    "chars": 1823,
    "preview": "<?php\n\n/**\n * Laravel - A PHP Framework For Web Artisans\n *\n * @package  Laravel\n * @author   Taylor Otwell <taylor@lara"
  },
  {
    "path": "public/robots.txt",
    "chars": 24,
    "preview": "User-agent: *\nDisallow:\n"
  },
  {
    "path": "public/vendor/dcat-admin/adminlte/adminlte-blue-light.css",
    "chars": 671643,
    "preview": "/*!\n *   AdminLTE v3.0.4\n *   Author: Colorlib\n *   Website: AdminLTE.io <http://adminlte.io>\n *   License: Open source "
  },
  {
    "path": "public/vendor/dcat-admin/adminlte/adminlte-blue.css",
    "chars": 671724,
    "preview": "/*!\n *   AdminLTE v3.0.4\n *   Author: Colorlib\n *   Website: AdminLTE.io <http://adminlte.io>\n *   License: Open source "
  },
  {
    "path": "public/vendor/dcat-admin/adminlte/adminlte-green.css",
    "chars": 671712,
    "preview": "/*!\n *   AdminLTE v3.0.4\n *   Author: Colorlib\n *   Website: AdminLTE.io <http://adminlte.io>\n *   License: Open source "
  },
  {
    "path": "public/vendor/dcat-admin/adminlte/adminlte.css",
    "chars": 671712,
    "preview": "/*!\n *   AdminLTE v3.0.4\n *   Author: Colorlib\n *   Website: AdminLTE.io <http://adminlte.io>\n *   License: Open source "
  },
  {
    "path": "public/vendor/dcat-admin/adminlte/adminlte.js",
    "chars": 30072,
    "preview": "!function(e){var t={};function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.expo"
  },
  {
    "path": "public/vendor/dcat-admin/dcat/css/dcat-app-blue-light.css",
    "chars": 69576,
    "preview": "#nprogress{pointer-events:none}#nprogress .bar{background:rgba(98,168,234,.8);position:fixed;z-index:999999;top:0;left:0"
  },
  {
    "path": "public/vendor/dcat-admin/dcat/css/dcat-app-blue.css",
    "chars": 69582,
    "preview": "#nprogress{pointer-events:none}#nprogress .bar{background:rgba(109,139,230,.8);position:fixed;z-index:999999;top:0;left:"
  },
  {
    "path": "public/vendor/dcat-admin/dcat/css/dcat-app-green.css",
    "chars": 69582,
    "preview": "#nprogress{pointer-events:none}#nprogress .bar{background:rgba(78,152,118,.8);position:fixed;z-index:999999;top:0;left:0"
  },
  {
    "path": "public/vendor/dcat-admin/dcat/css/dcat-app.css",
    "chars": 69582,
    "preview": "#nprogress{pointer-events:none}#nprogress .bar{background:rgba(88,108,177,.8);position:fixed;z-index:999999;top:0;left:0"
  },
  {
    "path": "public/vendor/dcat-admin/dcat/css/nunito.css",
    "chars": 10063,
    "preview": "@font-face{font-family:Nunito;font-style:italic;font-weight:200;src:local('Nunito ExtraLight Italic'),local('Nunito-Extr"
  },
  {
    "path": "public/vendor/dcat-admin/dcat/extra/action.js",
    "chars": 2919,
    "preview": "!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.expo"
  },
  {
    "path": "public/vendor/dcat-admin/dcat/extra/grid-extend.js",
    "chars": 7838,
    "preview": "!function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.expo"
  }
]

// ... and 652 more files (download for full content)

About this extraction

This page contains the full source code of the assimon/dujiaoka GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 852 files (13.9 MB), approximately 3.7M tokens, and a symbol index with 2842 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.

Copied to clipboard!